Feed fetched in 140 ms.
Warning Content type is application/atom+xml; charset=UTF-8, not text/xml or applicaton/xml.
Feed is 189,414 characters long.
Feed has an ETag of W/"93c61cd237e499bc8f37b17aacdcaec6d88e7a648a37a98df78fb8da95833392".
Feed has a last modified date of Tue, 09 Jun 2026 06:39:10 GMT.
Feed is well-formed XML.
Feed has an associated CSS stylesheet at http://www.blogger.com/styles/atom.css.
This is an Atom feed.
Feed title: John Graham-Cumming's blog
Error Feed self link: http://www.blogger.com/feeds/19303585/posts/default does not match feed URL: https://blog.jgc.org/feeds/posts/default.
Warning Feed is missing an image.
Feed has 25 items.
First item published on 2026-05-18T17:16:14.439Z
Last item published on 2024-12-08T17:24:00.004Z
All items have published dates.
Newest item was published on 2026-05-18T17:16:14.439Z.
Info Feed's Last-Modified date is newer than the newest item's published date (2026-06-09T06:39:10.000Z > 2026-05-18T17:16:14.439Z).
Home page URL: http://blog.jgc.org/
Error Home page URL is on a different protocol: http:.
Warning Home page URL redirected to https://blog.jgc.org/.
Home page has feed discovery link in <head>.
Home page has a link to the feed in the <body>
<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0">
<id>tag:blogger.com,1999:blog-19303585</id>
<updated>2026-06-09T06:39:10.148+00:00</updated>
<category term="pseudo-randomness"/>
<category term="hardware"/>
<category term="babbage"/>
<category term="gaga"/>
<category term="anti-spam"/>
<category term="gnu make"/>
<category term="retro"/>
<category term="security"/>
<category term="codes and ciphers"/>
<category term="the geek atlas"/>
<category term="rants and raves"/>
<category term="alan turing"/>
<category term="hits"/>
<category term="mathematics"/>
<category term="calculators"/>
<category term="climate change"/>
<category term="clocks"/>
<category term="minitel"/>
<category term="perl"/>
<category term="google go"/>
<category term="toys"/>
<category term="behind the screens"/>
<category term="machine learning"/>
<category term="babygaga"/>
<category term="games"/>
<category term="arc"/>
<category term="my services"/>
<category term="popfile"/>
<category term="radio"/>
<category term="cansole"/>
<category term="facebook"/>
<category term="privacy"/>
<category term="knx"/>
<category term="well... actually"/>
<title type="text">John Graham-Cumming's blog</title>
<subtitle type="html"></subtitle>
<link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.jgc.org/feeds/posts/default"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/"/>
<link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
<link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default?start-index=26&max-results=25"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<generator version="7.00" uri="http://www.blogger.com">Blogger</generator>
<openSearch:totalResults>537</openSearch:totalResults>
<openSearch:startIndex>1</openSearch:startIndex>
<openSearch:itemsPerPage>25</openSearch:itemsPerPage>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-1852883091736792774</id>
<published>2026-05-12T15:55:46.568+00:00</published>
<updated>2026-05-18T17:16:14.439+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/>
<title type="text">The aperiodic table</title>
<content type="html"><p><a href="https://xkcd.com/3242/">XKCD 3242</a> is titled "The aperiodic table" and looks like this:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://xkcd.com/3242/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="928" data-original-width="1480" height="402" src="https://blogger.googleusercontent.com/img/a/AVvXsEjfPGtFHYt3RAe9oehopqvy4J0CBNA5RQzgAS3B_n1HR17DUyT40eGRS5ZlvYvKQD5OJp3d0F-XulGQIs7ncOQ_q8UoHlMX5LRhc9Ne_IA7QytCRwVz2YQyfQFIXk5upm8S5C1-w7R0E40PNNTRd0acI-uLilVH4xaKLpB8P1Wz-EvApG3D_m16wQ=w640-h402" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>Which is cool, but it's not <a href="https://en.wikipedia.org/wiki/Aperiodic_tiling">aperiodic</a> like a <a href="https://en.wikipedia.org/wiki/Penrose_tiling">Penrose tiling</a>. So, with a little (a lot) of help from Claude I created&nbsp;<a href="http://aperiodictable.com">aperiodictable.com</a>: your one true resource for the periodic table on a <a href="https://en.wikipedia.org/wiki/Penrose_tiling#Rhombus_tiling_(P3)">Penrose P3</a> tiling. Click and drag the canvas to place the periodic table wherever you fancy. Hit Print to print your own Aperiodic Table.<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://aperiodictable.com" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1302" data-original-width="1946" height="428" src="https://blogger.googleusercontent.com/img/a/AVvXsEht1-8t9H5Oo4Mm-N1gQN1Dq7hrbtTLQez6dcdqWe3ayKgRuQm7o0tHZiIxyAV8mtunKwgsy1abIDuALpr4SEUbbOR6JfVin854qNEWQ6_CoBhnoE8laFdSL7nuKCF15ecOgEDmJxb7SF7i-vYZzcsiHdRXhEmUcV0rmHmtUmbZ1YaUdrs967LDhA=w640-h428" width="640" /></a></div><br />It's a single page that's hosted on <a href="https://pages.cloudflare.com">Cloudflare Pages</a>.<p></p></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/1852883091736792774/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/1852883091736792774" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/1852883091736792774"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/1852883091736792774"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2026/05/the-aperiodic-table.html" title="The aperiodic table"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjfPGtFHYt3RAe9oehopqvy4J0CBNA5RQzgAS3B_n1HR17DUyT40eGRS5ZlvYvKQD5OJp3d0F-XulGQIs7ncOQ_q8UoHlMX5LRhc9Ne_IA7QytCRwVz2YQyfQFIXk5upm8S5C1-w7R0E40PNNTRd0acI-uLilVH4xaKLpB8P1Wz-EvApG3D_m16wQ=s72-w640-h402-c" height="72" width="72"/>
<thr:total>0</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-3060475110203474364</id>
<published>2026-04-14T10:22:00.006+00:00</published>
<updated>2026-04-14T11:00:05.405+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="hardware"/>
<category scheme="http://www.blogger.com/atom/ns#" term="security"/>
<title type="text">Raspberry Pi as an isolated AI coding server</title>
<content type="html"><p>I've been working quite a bit with Claude Code and OpenCode on a <a href="https://github.com/jgrahamc/koolenex">project</a>&nbsp;and really wanted a way to run both without having to constantly approve use of tools. That's quite possible with Claude's <span style="font-family: courier;">claude&nbsp;--permission-mode bypassPermissions</span>&nbsp;[1] (I'd like to use <span style="font-family: courier;">claude --enable-auto-mode</span> but it's not available on my plan level (Max) [2]).</p><p>But, either way, I don't want Claude or OpenCode doing whatever they wants on my <a href="https://blog.jgc.org/2024/01/my-daily-driver-is-older-than-i-thought.html">main machine</a>. Various options exist: VMs, containers, sandboxes. Some people seem to have decided that a <a href="https://www.apple.com/mac-mini/">Mac mini</a> is how you run AI tools (such as <a href="https://openclaw.ai">OpenClaw</a>). But for what I'm doing a <a href="https://www.raspberrypi.com/products/raspberry-pi-5/">Raspberry Pi 5</a> works fine.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiQNuXX8T1iMr1QHQe2zgfOW_3ZVaMN7Yp1XiruFwDqJdvYcqI8it3jMw_DuRFkXAass_aEy2qsPQj9CNPEcy4oMkBFHGn0YXMsXNzr9QwNbwet8beQubcCr_hidzA7B7m4oyum1KK6zfrVBQY_heFdEOrs-kyrxA5sguooXB1YNWpYOgrTrL0eww" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="935" data-original-width="1280" height="293" src="https://blogger.googleusercontent.com/img/a/AVvXsEiQNuXX8T1iMr1QHQe2zgfOW_3ZVaMN7Yp1XiruFwDqJdvYcqI8it3jMw_DuRFkXAass_aEy2qsPQj9CNPEcy4oMkBFHGn0YXMsXNzr9QwNbwet8beQubcCr_hidzA7B7m4oyum1KK6zfrVBQY_heFdEOrs-kyrxA5sguooXB1YNWpYOgrTrL0eww=w400-h293" width="400" /></a></div><p></p><p>The set up is as follows:</p><p><span>&nbsp;&nbsp; &nbsp;</span>Raspberry Pi 5 16GB</p><p><span>&nbsp;&nbsp; &nbsp;</span>Joy-IT aluminium case with fan</p><p><span>&nbsp; &nbsp; Debian Trixie installed via the <a href="https://www.raspberrypi.com/software/">Raspberry Pi Imager</a></span><br /></p><p><span><span>&nbsp; &nbsp; root password set on Raspberry Pi and default user removed from&nbsp;</span>sudoers by deleting&nbsp;<span style="font-family: courier;">/etc/sudoers.d/010_pi-nopasswd</span></span></p><p><span><span>&nbsp; &nbsp; Claude Code run with <span style="font-family: courier;">bypassPermissions</span></span><br /></span></p><p><span><span><span>&nbsp; &nbsp; A new SSH key on the Raspberry Pi for GitHub access</span><br /></span></span></p><p><span><span><span><span>&nbsp; &nbsp; <span style="font-family: courier;">iptables</span> firewall preventing local network access but allowing Internet and incoming SSH</span><br /></span></span></span></p><p><span><span><span><span><span>&nbsp; &nbsp; Local network access also blocked on my home network firewall</span><br /></span></span></span></span></p><p><span><span><span><span><span>I SSH into <span style="font-family: courier;">altair-iv</span> and use <a href="https://www.gnu.org/software/screen/">GNU screen</a> to leave my Claude or OpenCode session running.&nbsp;</span></span></span></span></span></p><p><span><span><span><span><span></span></span></span></span></span></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><span><span><span><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhF64mvn4sRwYU6ebyUm3pZcZou6elLIK-QSeM3vzO4wngSrwQVHuWCHokw9SvLcjI2gRr--Vx65F9TMb8_Z6t4KAEOeB1sYOudtLUxIA29vUgWa68AnWXnufimg8pfclvR78WAiBC7qc1LW0H55_DXECBDpraUsYSvdCxHR0SW_C1nIVMIdWSNcw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="664" data-original-width="1938" height="220" src="https://blogger.googleusercontent.com/img/a/AVvXsEhF64mvn4sRwYU6ebyUm3pZcZou6elLIK-QSeM3vzO4wngSrwQVHuWCHokw9SvLcjI2gRr--Vx65F9TMb8_Z6t4KAEOeB1sYOudtLUxIA29vUgWa68AnWXnufimg8pfclvR78WAiBC7qc1LW0H55_DXECBDpraUsYSvdCxHR0SW_C1nIVMIdWSNcw=w640-h220" width="640" /></a></span></span></span></div><span><span><span><br /></span></span></span></div><p></p><p>Supply chain attacks also worry me and running this isolated development server helps isolated the blast radius. Plus for npm I am running with:&nbsp;</p><div style="text-align: left;"><span style="font-family: courier;">&nbsp; &nbsp; krell@altair-iv:~ $ cat .npmrc<br /></span><span style="font-family: courier;">&nbsp; &nbsp; save-exact=true<br /></span><span style="font-family: courier;">&nbsp; &nbsp; ignore-scripts=true<br /></span><span style="font-family: courier;">&nbsp; &nbsp; min-release-age=21</span></div><p style="text-align: left;">[1]&nbsp;<a href="https://code.claude.com/docs/en/permission-modes#skip-all-checks-with-bypasspermissions-mode">https://code.claude.com/docs/en/permission-modes#skip-all-checks-with-bypasspermissions-mode</a></p><p>[2]&nbsp;<a href="https://code.claude.com/docs/en/permission-modes#eliminate-prompts-with-auto-mode">https://code.claude.com/docs/en/permission-modes#eliminate-prompts-with-auto-mode</a></p></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/3060475110203474364/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/3060475110203474364" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/3060475110203474364"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/3060475110203474364"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2026/04/raspberry-pi-as-isolated-ai-coding.html" title="Raspberry Pi as an isolated AI coding server"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiQNuXX8T1iMr1QHQe2zgfOW_3ZVaMN7Yp1XiruFwDqJdvYcqI8it3jMw_DuRFkXAass_aEy2qsPQj9CNPEcy4oMkBFHGn0YXMsXNzr9QwNbwet8beQubcCr_hidzA7B7m4oyum1KK6zfrVBQY_heFdEOrs-kyrxA5sguooXB1YNWpYOgrTrL0eww=s72-w400-h293-c" height="72" width="72"/>
<thr:total>0</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-6997313712403024466</id>
<published>2026-04-03T13:23:00.009+00:00</published>
<updated>2026-04-03T13:24:44.238+00:00</updated>
<title type="text">Maistro</title>
<content type="html"><p>Back in 2012 I wrote a blog post titled just <a href="https://blog.jgc.org/2012/02/programmer.html">Programmer</a> about both my job title and a <a href="https://cloudflare.com/">company</a> I'd just joined as a Programmer. I was very happy to be called a Programmer until quite recently. In the last few months, with the assistance of AIs like Kimi 2.5 and Claude, I've become something else. Something that uses my experience as a programmer by amplifies it massively. And, at the same time, makes me spend most of my time on the design and features of what I'm building and not the code.&nbsp;</p><p>What is this called?</p><p>Maybe it's a still a "software engineer" (for those who like that title). But the engineering is being done with new tools. But I don't think that quite captures it because the balance between the "writing code" and "designing architecture and choosing features" has shifted to the latter.&nbsp;</p><p>I'm more like the conductor of an orchestra but working with two AIs (one writing code, the other writing tests) to get <a href="https://github.com/jgrahamc/koolenex">something</a> built rather than getting an orchestra of many to produce something beautiful. But conductor still doesn't feel quite right because this new job is heavily skewed towards creation (and not interpretation and expression).</p><p>I think the right word is a "maestro" or, if the pun can be forgiven, a maistro.</p><p><b>maistro</b> (n): a software engineer who uses AI tools to create software by focusing on design, architecture, testing, and features.</p></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/6997313712403024466/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/6997313712403024466" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/6997313712403024466"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/6997313712403024466"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2026/04/maistro.html" title="Maistro"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<thr:total>0</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-6143991865295400825</id>
<published>2026-01-28T15:37:00.003+00:00</published>
<updated>2026-01-28T15:37:51.735+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="hardware"/>
<category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/>
<category scheme="http://www.blogger.com/atom/ns#" term="rants and raves"/>
<title type="text">The European Schuko socket bothers me</title>
<content type="html">Because it isn't polarized, and that can lead to a situation where something is switched "off" but there's 230V of electricity still present. Take a look at this thing:<div><br /><div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiffPt8Btf9iU6HNzwJgy0spCeMlst_Ak2eGjrlM_WltdzMusspYt3AxoxQmjdVAzQthY4xg8of_cQdF4y8R3BK9AvhVZ28qJoKCKeqplSmImH8Z-GBlYcmsZo3h9qzZWL_EcY1rAvtY28Hw8Gpr_rlgnXHwaeKowkiAbDqScGuDva1JywuFgTmMg" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1072" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEiffPt8Btf9iU6HNzwJgy0spCeMlst_Ak2eGjrlM_WltdzMusspYt3AxoxQmjdVAzQthY4xg8of_cQdF4y8R3BK9AvhVZ28qJoKCKeqplSmImH8Z-GBlYcmsZo3h9qzZWL_EcY1rAvtY28Hw8Gpr_rlgnXHwaeKowkiAbDqScGuDva1JywuFgTmMg=w611-h640" width="611" /></a></div><br /></div></div><div>At the bottom you have a standard European Schuko socket and&nbsp;Plugged into the socket is the power strip on the right. Plugged into the power strip is the lightbulb on the left that I've mounted and wired so I can measure the voltages between live, neutral and earth.&nbsp;</div></div></div><div><br /></div><div>Above the power is on to the strip, but the switch in the power strip for the light off. Unsurprisingly, the lightbulb is lit off. Even less of a surprise is that turning the switch to on lights the light.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi6u_m36dXmE8QpJI7VPf6EWtraNRsmIsUk_HY7hUPhI6yXC49S31JX_JVdUu8NppxENKUzCHEyt5i0ZNnMVTcPeDzRytgkQP71OOxBgA0EQu1fQ1-zf9w9AdpNvYH8-3fm-GoR-bGDb2hrvckqHoVBfKvNFAKR24W3vvcUwECd_55ZZh1AuGp0tA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1076" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEi6u_m36dXmE8QpJI7VPf6EWtraNRsmIsUk_HY7hUPhI6yXC49S31JX_JVdUu8NppxENKUzCHEyt5i0ZNnMVTcPeDzRytgkQP71OOxBgA0EQu1fQ1-zf9w9AdpNvYH8-3fm-GoR-bGDb2hrvckqHoVBfKvNFAKR24W3vvcUwECd_55ZZh1AuGp0tA=w608-h640" width="608" /></a></div></div><div><br /></div><div>For the rest of the blog I'll remove the lightbulb and just concentrate on what voltages are present at the lightbulb holder. When off there's no voltage (or rather a tiny phantom voltage) between live and neutral (brown and blue).</div><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi_ewZc61h0EYQ073qbdGqHZ6nu8JDfxYZd5NFAHzvxo-gRwHeBAGIWpQJDpvP6UWca_SFHHI-c4pV8uwchgC1_fL6LRGz1YqNHFXghRGaB2jtlJCquCynX8YB73CQXN4JeSW-3cUS4ibwEvRfg9W61OHX9IFmO2wwIkuegmLPp6NWgZQ-Vv584aQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1279" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEi_ewZc61h0EYQ073qbdGqHZ6nu8JDfxYZd5NFAHzvxo-gRwHeBAGIWpQJDpvP6UWca_SFHHI-c4pV8uwchgC1_fL6LRGz1YqNHFXghRGaB2jtlJCquCynX8YB73CQXN4JeSW-3cUS4ibwEvRfg9W61OHX9IFmO2wwIkuegmLPp6NWgZQ-Vv584aQ=w512-h640" width="512" /></a></div><br /></div><div>But when the switch is on, the multimeter is showing 230V AC between live and neutral. So, no surprise that the light comes on when the switch is on!</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgFy-p0gRKzxLukQlJOD7UE4wtXTCUUU5A9PNlAT1fBHAySVqqWKMhKzyD0W91TgGpJ5I_0MfX2KQYP2hV7mi5Yg31dJYWQmo7HJ5nrAhlAuadp8F_Neub7biGyc8E76qU8xS5m0-BNx7DG6gvfd8b6wWxO86kfTYNc7X3l4igfbHsn0RXcqEpaDw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1225" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEgFy-p0gRKzxLukQlJOD7UE4wtXTCUUU5A9PNlAT1fBHAySVqqWKMhKzyD0W91TgGpJ5I_0MfX2KQYP2hV7mi5Yg31dJYWQmo7HJ5nrAhlAuadp8F_Neub7biGyc8E76qU8xS5m0-BNx7DG6gvfd8b6wWxO86kfTYNc7X3l4igfbHsn0RXcqEpaDw=w536-h640" width="536" /></a></div><br /></div><div>The same voltage is present between live and earth. In a standard European or UK house the earth and neutral wires are joined together (called "bonded") somewhere close to where the power comes into the house. The live and neutral wires are two halves of the circuit and electricity needs to flow from one to the other for the light to come on. In this standard set up the neutral and earth have (theoretically) the same "potential" of 0V. When the light is on the idea is that electricity flows from the live to the neutral.</div><div><br /></div><div>If you touch live and neutral you'll electrocute yourself, but also if you just touch live because the electricity will run through you to earth.&nbsp;</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjiiGJ90OSmOMlY2TJYIeqHVVQMVO9ic-AMtRBzWj2o9RRxv-K-dRyejY33qahiOtn0RcT-KaMAZS7fqQnWfY2W16Gr6sPbi-UwhljGULwCrxvhHlUjejdZc_1wKIMWnx5DAYUnBFKx81psa3uBmCIZuEJod1eLUhm7ULTh8IzhcxxcNfC_yKXbig" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1161" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEjiiGJ90OSmOMlY2TJYIeqHVVQMVO9ic-AMtRBzWj2o9RRxv-K-dRyejY33qahiOtn0RcT-KaMAZS7fqQnWfY2W16Gr6sPbi-UwhljGULwCrxvhHlUjejdZc_1wKIMWnx5DAYUnBFKx81psa3uBmCIZuEJod1eLUhm7ULTh8IzhcxxcNfC_yKXbig=w565-h640" width="565" /></a></div></div><div><br /></div><div>Between neutral and earth there's close to 0V of difference. The multimeter is showing tiny phantom voltages induced in the wires.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgwoVaLVvqlzAdbeWwrVOH2gi381p6019BEyEVDUvwu4AFIuMcb7wJHEp-e4Lr0GRQTfH0ASi3Cw_PbmxJ9k3vUS-l65OVbXXYFeU4qpNcxon5yQmcF4AmumrSgnnfeDZVe3YHKFfhrTG2rPx7EiXhgRy999RooN2tDiRXeRHqyjKzmi5lGJ_iIFg" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1078" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEgwoVaLVvqlzAdbeWwrVOH2gi381p6019BEyEVDUvwu4AFIuMcb7wJHEp-e4Lr0GRQTfH0ASi3Cw_PbmxJ9k3vUS-l65OVbXXYFeU4qpNcxon5yQmcF4AmumrSgnnfeDZVe3YHKFfhrTG2rPx7EiXhgRy999RooN2tDiRXeRHqyjKzmi5lGJ_iIFg=w608-h640" width="608" /></a></div><br />The important thing to remember is that the voltage in a home is "referenced to earth" and thus will run to earth (potentially through you) given the chance. That's why you get an electric shock if you touch a live wire. The current flows through you to earth. You do not want that to happen. In theory you could touch the neutral wire and not get electrocuted because it's at the same voltage/potential as earth: 0V. BUT DO NOT DO THIS EVER. EVER. YOU DO NOT KNOW THAT NEUTRAL IS ACTUALLY 0V.</div><div><br /></div><div>Take a look at this; all I've done is unplugged the power strip at the bottom and plugged it back in the other way around. Suddenly, there's apparently 230V between neutral and earth, and that's with the power strip turned off!</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgrp6auGj_tmAZIumAxTX8TVE9PNjJjIt4THr2WDN9w5TGGAHuri7a1oUb-GTbVIRH5x8444wOTNRZg9sxPnvJSMKTQvfYliMey6A8uNha5VGnQyHWRt1GB-Xi0jNevzLeco-0-xNYf-bx_Z1zYi661IshmjLzo2GWjn5PxPN1a0R7i3UvcOTdgQw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1121" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEgrp6auGj_tmAZIumAxTX8TVE9PNjJjIt4THr2WDN9w5TGGAHuri7a1oUb-GTbVIRH5x8444wOTNRZg9sxPnvJSMKTQvfYliMey6A8uNha5VGnQyHWRt1GB-Xi0jNevzLeco-0-xNYf-bx_Z1zYi661IshmjLzo2GWjn5PxPN1a0R7i3UvcOTdgQw=w584-h640" width="584" /></a></div><br />That's because the little power switch on the strip does not cut both the live and neutral wires when turned off; it cuts off one of them. If you plug the strip in one way you might get lucky and cut live, but you can easily plug it in the other way round and find that what looks like it's neutral as actually live and has 230V. THIS IS ANOTHER REASON NEVER TO TOUCH SOMETHING YOU THINK IS NEUTRAL. Also, imagine you've turned this off and are changing the lightbulb. The same 230V is present inside the light fitting just waiting for a human finger to become a conductor!</div><div><br /></div><div>You can see that despite there being 230V present the lightbulb does not glow. But there are dangerous voltages present. In fact, with the lightbulb present it's even worse, because the "live" and "neutral" wires coming out of the light fitting are 230V because the 230V has passed through the light and is now present on the wire on the other side of it.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh7kSaQ-HV6o7GxyhKMBNSR37IRD2hLQ1FIf10j5U5_zZrkGqrdaPNVRMj38YYRjGQ3jKykHx_ZZjtZnfxtVNNB-w9DnkSK43giCMdgtgX69to_30j6sKfantMOIv6TvZyfGuXCImCYRyTS-pZXKpnuYCpGDrSb0JWCCEbk9dDnJL70qHREBgfuyA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1028" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEh7kSaQ-HV6o7GxyhKMBNSR37IRD2hLQ1FIf10j5U5_zZrkGqrdaPNVRMj38YYRjGQ3jKykHx_ZZjtZnfxtVNNB-w9DnkSK43giCMdgtgX69to_30j6sKfantMOIv6TvZyfGuXCImCYRyTS-pZXKpnuYCpGDrSb0JWCCEbk9dDnJL70qHREBgfuyA=w637-h640" width="637" /></a></div></div><br />(Ignore the multimeter here as it's not connected).</div><div><br /></div><div>So, in summary:</div><div><br /></div><div>1. DO NOT TOUCH WIRES IN HOUSEHOLD WIRING EVER.</div><div><br /></div><div>2. Do not trust power strip switches to actually remove all dangerous voltages from a device.</div><div><br /></div><div>3. Do unplug things when working on them (e.g. changing a lightbulb)</div><div><br /></div><div>4. Do buy power strips which have switches that cut both wires when off (such as this <a href="https://www.brennenstuhl.com/en-PT/products/extension-leads/extension-lead-individually-switchable-6-way-2m-h05vv-f-3g1.5-white">Brennenstuhl power strip</a>; not an affiliate link or anything, I just use this one <a href="https://blog.jgc.org/2025/06/it-was-time-for-dim-bulb-current-limiter.html">in my lab</a>.).</div><div><br /></div><div>5. Move to a country that uses the <a href="https://en.wikipedia.org/wiki/AC_power_plugs_and_sockets:_British_and_related_types#BS_1363_three-pin_(rectangular)_plugs_and_sockets">one true great power socket of all time</a>&nbsp;</div><div><br /></div><div>OK, that last one's in jest because there are reasonable criticisms of the British plug design, but it, perhaps unreasonably, bothers me that it's possible to turn something off and discover there's 230V present.</div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/6143991865295400825/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/6143991865295400825" title="2 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/6143991865295400825"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/6143991865295400825"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2026/01/the-european-schuko-socket-bothers-me.html" title="The European Schuko socket bothers me"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiffPt8Btf9iU6HNzwJgy0spCeMlst_Ak2eGjrlM_WltdzMusspYt3AxoxQmjdVAzQthY4xg8of_cQdF4y8R3BK9AvhVZ28qJoKCKeqplSmImH8Z-GBlYcmsZo3h9qzZWL_EcY1rAvtY28Hw8Gpr_rlgnXHwaeKowkiAbDqScGuDva1JywuFgTmMg=s72-w611-h640-c" height="72" width="72"/>
<thr:total>2</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-8728350909468966560</id>
<published>2026-01-08T17:47:00.000+00:00</published>
<updated>2026-01-08T17:47:21.040+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="hardware"/>
<category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/>
<title type="text">There's a ridiculous amount of tech in a disposable vape</title>
<content type="html"><p>So, I'm walking through a park when I see this thing lying on the ground:</p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjLHAvZN5pTy6lttkPt0xM6DD4NekTOzgaux5OEH2CJqXr4iNNBepGLR9_vai3XPxtifwAEp74oqdraP-hzUSnYkIF8xlwREmt92rXu24Ifvy52do0nKEAxCCUIrqZ4mbveQe5q_pg34rSkaIZZ9Ms2DAU9_Q7sF3fx5MmMEI0PfDabMbq8JyLpVw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1675" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEjLHAvZN5pTy6lttkPt0xM6DD4NekTOzgaux5OEH2CJqXr4iNNBepGLR9_vai3XPxtifwAEp74oqdraP-hzUSnYkIF8xlwREmt92rXu24Ifvy52do0nKEAxCCUIrqZ4mbveQe5q_pg34rSkaIZZ9Ms2DAU9_Q7sF3fx5MmMEI0PfDabMbq8JyLpVw=w392-h640" width="392" /></a></div><p></p><p>It's a disposable vape that someone has discarded because it's empty. Specifically, it's a "Fizzy Max III 60K Rechargeable Disposable Vape" and I was about to take it to a bin to throw away when I noticed it had USB-C. I know nothing about vapes so that was a total WTF moment.&nbsp;</p><p>Naturally, I took it home, sanitized it, and plugged it in. Not only did this thing have USB-C and a rechargeable battery, it had a small display showing battery percentage and <strike>poison</strike>&nbsp;vape fluid percentage. It looks kind of cyberpunk.</p><p></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjsjA-_RmfnAD4MPLuroJ4wHwvk4cvmjcSySX9EEpgnjXpXdcw3zY4HJnVE37IsTQFmuosgeCNqlkmLwcpXGYJODw0PcFIQCHrlkr--uKugWMdRGsmJv99chHLLydMGdcRmENl2VJHHHpAayZqLpUWiudlz3-1Nx0nMLGFMtq9Fc___9-KTGYtXxw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="966" data-original-width="903" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEjsjA-_RmfnAD4MPLuroJ4wHwvk4cvmjcSySX9EEpgnjXpXdcw3zY4HJnVE37IsTQFmuosgeCNqlkmLwcpXGYJODw0PcFIQCHrlkr--uKugWMdRGsmJv99chHLLydMGdcRmENl2VJHHHpAayZqLpUWiudlz3-1Nx0nMLGFMtq9Fc___9-KTGYtXxw=w597-h640" width="597" /></a></div><br /></div>I ripped the thing apart and discarded the now empty chambers that had contained the fluid. At the bottom there are two circuit boards and a battery.&nbsp;<div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgeuA-ugb-jkilQuqqqdqahzsxatURb-bVhbEDefg3gXQGFwJ7CiAbElLml7eEw4WdoENR8deMC3W9nF95pQfhZhrHEaulIS_43p_qe0JlRimLDZ2sFP21fZZN9qu4ilJkk_Cl4M826q58NyWjuWB4YokiFVlF6d370rf8VFf6_Ou0p6FbflZSdmA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="3720" data-original-width="3024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEgeuA-ugb-jkilQuqqqdqahzsxatURb-bVhbEDefg3gXQGFwJ7CiAbElLml7eEw4WdoENR8deMC3W9nF95pQfhZhrHEaulIS_43p_qe0JlRimLDZ2sFP21fZZN9qu4ilJkk_Cl4M826q58NyWjuWB4YokiFVlF6d370rf8VFf6_Ou0p6FbflZSdmA=w520-h640" width="520" /></a></div><br />The battery is an 800 mAh lipo.</div><div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgMuFXNrW0BqhlCeP6Nn6kAb2mtyEgRQPWhAdb6QdN74ULIV79FB_ZGSaBa_6xQwsa_toAZs9lEO6AD6gY6TJMfJ7ug76MGrYCSGnpqw96147u9dgO4MUN_qqOmiKdotYTRKJkdc_CZoNxLIDa6T7nuXdyj08ND0qyfauYbvwEv-dNk4aBpnGTTOA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1660" data-original-width="3682" height="288" src="https://blogger.googleusercontent.com/img/a/AVvXsEgMuFXNrW0BqhlCeP6Nn6kAb2mtyEgRQPWhAdb6QdN74ULIV79FB_ZGSaBa_6xQwsa_toAZs9lEO6AD6gY6TJMfJ7ug76MGrYCSGnpqw96147u9dgO4MUN_qqOmiKdotYTRKJkdc_CZoNxLIDa6T7nuXdyj08ND0qyfauYbvwEv-dNk4aBpnGTTOA=w640-h288" width="640" /></a></div><br />So, wait? This is a disposable device. After 60,000 sucks on the teat you're meant to throw away a battery, display, microprocessor etc. WTF? Turns out that you're meant to recycle it, but it's crazy large amount of technology for nicotine sucking.&nbsp;<br /><div><div><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjxLn1LnkyxyUiZIdkVqPcufsDyJfcUcp8oahk6EOLztqYCCgjlS0jicTzjRkmWjoZHSGHojzcdq9EmnT1cHMDxv-cB8I-dtv40Ykdte_HY3HygCUeN76WbQ9ksRf6uFl5A7JMTYeXBVSsdFPKlummkSxb0_rxNGAwdgurmcSwcVMHZO4nG8xBdVw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1245" data-original-width="2234" height="356" src="https://blogger.googleusercontent.com/img/a/AVvXsEjxLn1LnkyxyUiZIdkVqPcufsDyJfcUcp8oahk6EOLztqYCCgjlS0jicTzjRkmWjoZHSGHojzcdq9EmnT1cHMDxv-cB8I-dtv40Ykdte_HY3HygCUeN76WbQ9ksRf6uFl5A7JMTYeXBVSsdFPKlummkSxb0_rxNGAwdgurmcSwcVMHZO4nG8xBdVw=w640-h356" width="640" /></a></div><p></p><p>On one side you've got three pairs of pins that are inserted into the chambers containing the vape fluid and are controlled by three transistors on the other PCB. These pins heat the fluid making the vape's vapour. They are activated by the three microphones seen in this picture.<br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjSGiv2lodVnAja-FgEdTwFbBvWrhvS3PhGVBh-DD8eDuWQajLat0O5Axrksv3vAxXzNu3xD-c-KQqx6mKqQJxnye7kysJiSU3fqyui6R_4jSOeiEoFmIwv9GcrDgADAgIEPXbpQiUxY_T-mjhSQZ5vZNDZhtuY-W-YX9ReWw1LFH5baH09nTtoeg" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1821" data-original-width="1824" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEjSGiv2lodVnAja-FgEdTwFbBvWrhvS3PhGVBh-DD8eDuWQajLat0O5Axrksv3vAxXzNu3xD-c-KQqx6mKqQJxnye7kysJiSU3fqyui6R_4jSOeiEoFmIwv9GcrDgADAgIEPXbpQiUxY_T-mjhSQZ5vZNDZhtuY-W-YX9ReWw1LFH5baH09nTtoeg=w640-h640" width="640" /></a></div><p>The vape knows you're sucking on the teat in one of six positions by which combination of microphones sense the sucking. This allows it to heat one or two of the chambers providing six flavour combinations.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjcVtgn5G8uYTyXoscQKqcNbkrkdm31UONeeih4MFTJJ6dFDx05u0bKXDta8KdAl9WRoMF7omoKinm8JQSoOB9P5kANYLHzcHUiWin8a2zkgo9q6v8OYFtHyq1kVJHWebJ8Tn0rwMCZWaQV8DfiyosVPPcxOPGMJn6nIxH5ywIjxubJo7kz3eQpyQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="2368" data-original-width="3024" height="502" src="https://blogger.googleusercontent.com/img/a/AVvXsEjcVtgn5G8uYTyXoscQKqcNbkrkdm31UONeeih4MFTJJ6dFDx05u0bKXDta8KdAl9WRoMF7omoKinm8JQSoOB9P5kANYLHzcHUiWin8a2zkgo9q6v8OYFtHyq1kVJHWebJ8Tn0rwMCZWaQV8DfiyosVPPcxOPGMJn6nIxH5ywIjxubJo7kz3eQpyQ=w640-h502" width="640" /></a></div><br />Three transistors and a small chip that controls charging of the battery.&nbsp;<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiaTdsKWhyloD0nOO2sHJczXuP9s2L55fx7sEoejyz_0peaqJBqS4epsViV2OxVkOW_bkO48xuEpecjWOUUrgjzNnRj2YNNqTV1vUgG8HGu31JEheiHWD3-Uf4rAmK8d8TD1jIAStyA3RnYBi6lwcZC2kL855QkDif_bH_2WALWy-auzeBZbqXkAg" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="2831" data-original-width="3024" height="600" src="https://blogger.googleusercontent.com/img/a/AVvXsEiaTdsKWhyloD0nOO2sHJczXuP9s2L55fx7sEoejyz_0peaqJBqS4epsViV2OxVkOW_bkO48xuEpecjWOUUrgjzNnRj2YNNqTV1vUgG8HGu31JEheiHWD3-Uf4rAmK8d8TD1jIAStyA3RnYBi6lwcZC2kL855QkDif_bH_2WALWy-auzeBZbqXkAg=w640-h600" width="640" /></a></div><br />Sadly, despite there being some pretty obvious pads connected to the microprocessor (labelled B0081S1) and the fact that those pads are also connected to the USB-C connecter, I have been unable to talk to it via PyOCD or other tools. I was hoping this was a small ARM device that I might be able to hack.</div></div></div></div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/8728350909468966560/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/8728350909468966560" title="3 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/8728350909468966560"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/8728350909468966560"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2026/01/theres-ridiculous-amount-of-tech-in.html" title="There's a ridiculous amount of tech in a disposable vape"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjLHAvZN5pTy6lttkPt0xM6DD4NekTOzgaux5OEH2CJqXr4iNNBepGLR9_vai3XPxtifwAEp74oqdraP-hzUSnYkIF8xlwREmt92rXu24Ifvy52do0nKEAxCCUIrqZ4mbveQe5q_pg34rSkaIZZ9Ms2DAU9_Q7sF3fx5MmMEI0PfDabMbq8JyLpVw=s72-w392-h640-c" height="72" width="72"/>
<thr:total>3</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-3163403587683936353</id>
<published>2025-12-28T14:33:00.005+00:00</published>
<updated>2025-12-29T11:59:06.693+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/>
<category scheme="http://www.blogger.com/atom/ns#" term="security"/>
<title type="text">If you care about security you might want to move the iPhone Camera app</title>
<content type="html"><p>There's a quirk in the iPhone Camera app that can drive a security conscious iPhone owner crazy: if you touch your finger on the Camera app icon without actually opening the app, the camera starts operating. That causes the little green dot indicator on the iPhone to turn on and then after a few seconds disappear. This can easily make a security-conscious iPhone user worry that some app is nefariously using the camera.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh_n7C7-AZVWdKp41tN41JNMVQqj-nzIXSD8K3pHXC9Zijl5Z3wtLA7OXRX0h7QRNDzE6juLUc10qyIoRf_CO5CTF8rtNjuVQ9MkGoDGGrhr-osKlxqOXaNoalhcaVpywdIXsHSCdik2SpothXBzFoLDYKUjKORzLwio-m5KXX7k6tZdacgAyHBzQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="289" data-original-width="1206" height="154" src="https://blogger.googleusercontent.com/img/a/AVvXsEh_n7C7-AZVWdKp41tN41JNMVQqj-nzIXSD8K3pHXC9Zijl5Z3wtLA7OXRX0h7QRNDzE6juLUc10qyIoRf_CO5CTF8rtNjuVQ9MkGoDGGrhr-osKlxqOXaNoalhcaVpywdIXsHSCdik2SpothXBzFoLDYKUjKORzLwio-m5KXX7k6tZdacgAyHBzQ=w640-h154" width="640" /></a></div><p></p><p>Because touching the Camera app icon without opening the app is enough, it's easy to activate the green dot while swiping between screens or even just holding your phone. This was driving me nuts and I thought some app was using the camera when I didn't want it to.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgO6PJijthJhA5iuemg6BWxxH9aWJTKJkI-uGMvvzqJlS-75oqgWNswAYCu-IQgT1aAtx99xL68ZS5vnpUe75OBjvYcnd75a1kflRBQvRHqZI1GaxRxMWwFDjZoz23-Qoxw9JSSOetqbS_Pc_vhm3RajJKRArkHQcUq642qVls9Iv9R23z0QWRytQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1265" data-original-width="1206" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEgO6PJijthJhA5iuemg6BWxxH9aWJTKJkI-uGMvvzqJlS-75oqgWNswAYCu-IQgT1aAtx99xL68ZS5vnpUe75OBjvYcnd75a1kflRBQvRHqZI1GaxRxMWwFDjZoz23-Qoxw9JSSOetqbS_Pc_vhm3RajJKRArkHQcUq642qVls9Iv9R23z0QWRytQ=w611-h640" width="611" /></a></div><br />I enabled Apple's <i>App Privacy Report</i> (under P<i>rivacy and Security</i>) in <i>Settings</i> and, sure enough, it confirmed that the little green dot was happening because the camera was being used by the Camera app. Merely swiping while accidentally touching the Camera app's icon was enough to add an entry in the <i>App Privacy Report</i>.<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj4Fi9G3ADvNdBP5kXYwOl0n4VpXG-rFv_qaxzhd1fVt5v06gpeIUxq3Mm2mJQCGZBEoO-AZY_VaT8SZulmYAlrdCJL-VV4_uxgBUjQf1Jfs3RGdpjBzjtGSefAKaUnGtVLnBc3kRYnW2pcUHGx7B3WwHhjCRzW7unft6WwZMU3ow5MggmgBzGW8Q" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="508" data-original-width="1206" height="270" src="https://blogger.googleusercontent.com/img/a/AVvXsEj4Fi9G3ADvNdBP5kXYwOl0n4VpXG-rFv_qaxzhd1fVt5v06gpeIUxq3Mm2mJQCGZBEoO-AZY_VaT8SZulmYAlrdCJL-VV4_uxgBUjQf1Jfs3RGdpjBzjtGSefAKaUnGtVLnBc3kRYnW2pcUHGx7B3WwHhjCRzW7unft6WwZMU3ow5MggmgBzGW8Q=w640-h270" width="640" /></a></div><br />The solution was moving Camera app away from where I was liable to brush it with my fingers or thumb. That reduced the errant green dots to almost zero and reassured me that nothing untoward was happening.<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgKcb_6Q4FTr9F23LeQyECWRe7CcdXbyEw7v0JIM6p1suL1OND7t980m81nRDRJQvcqHIcQ3RzVy7MyjjyarsJ-oKjuaDvkV8VfOt65QNuANg9PSkZjvtu8K-8NRdjOXe1AICcpddWIEjJmvmMg66aa3m2DMMNG9LiwzKfIR-z_2OydafFdlUQNHA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="2622" data-original-width="1206" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEgKcb_6Q4FTr9F23LeQyECWRe7CcdXbyEw7v0JIM6p1suL1OND7t980m81nRDRJQvcqHIcQ3RzVy7MyjjyarsJ-oKjuaDvkV8VfOt65QNuANg9PSkZjvtu8K-8NRdjOXe1AICcpddWIEjJmvmMg66aa3m2DMMNG9LiwzKfIR-z_2OydafFdlUQNHA=w294-h640" width="294" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>One of the big problems in security is people get used to odd behaviour they can't explain and end up overlooking a real problem masked be the things that "always happen". The accidental green dots could have been hiding actual nefarious use of the camera. Better to be tidy and eliminate the false positives.<p></p><div>(I previously used the term "hover" for what I was experiencing and that was causing confusion. This happens if you touch the Camera app icon without actually opening the app.)</div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/3163403587683936353/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/3163403587683936353" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/3163403587683936353"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/3163403587683936353"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/12/if-you-care-about-security-you-might.html" title="If you care about security you might want to move the iPhone Camera app"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEh_n7C7-AZVWdKp41tN41JNMVQqj-nzIXSD8K3pHXC9Zijl5Z3wtLA7OXRX0h7QRNDzE6juLUc10qyIoRf_CO5CTF8rtNjuVQ9MkGoDGGrhr-osKlxqOXaNoalhcaVpywdIXsHSCdik2SpothXBzFoLDYKUjKORzLwio-m5KXX7k6tZdacgAyHBzQ=s72-w640-h154-c" height="72" width="72"/>
<thr:total>0</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-7381284008987393638</id>
<published>2025-10-20T15:25:00.018+00:00</published>
<updated>2025-10-20T15:33:15.147+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="hardware"/>
<category scheme="http://www.blogger.com/atom/ns#" term="knx"/>
<title type="text">A couple of handy KNX gadgets</title>
<content type="html"><p><a href="https://www.knx.org/knx-en/for-professionals/What-is-KNX/A-brief-introduction/">KNX</a> is a European standard used in home automation. It's primarily based around a twisted pair bus transporting DC power (30V) and data at 9600 bits/second. Devices attached to this KNX bus draw power for their operation and receive and send messages called telegrams. The devices are typically things like switches, relays, dimmers, HVAC interfaces, small displays, and blind/shutter controllers.</p><p>If you're working with a KNX bus you connect a computer to it via bus interface. These are commonly either a USB interface or an Ethernet/WiFi connection. Either way the computer is able to send and receive telegrams and monitor the bus for debugging. This interface is also used for programming the various KNX devices on the bus (for example, associating pressing a button on a particular switch with a particular light circuit going on or off).</p><p>Sometimes it's useful to program devices "off the bus" (i.e. away from the actual installation). For this purpose I put together the simplest of minimal KNX buses: a power supply to inject the necessary 30V, a USB bus interface, and a dangling KNX connector (the red and black thing in this photo) that can be plugged into the device to be programmed.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmKiAPaxQszfqx7GR0jqUEsDoWGLWE50OBkinI3k-xyyf0ot97IiBVwa5eBcZU9BfA6n6mayRuOMG2geYnv48otf3Qf1q2XP5Luz7W5bKLgvEItF_F-ufGlhjdfpbByIH7JJqoKsBiOQ7PzXXrpGIayTFvhuJxAEj0L3N2R88uIT8PcAzHZW6WrA/s1280/knx-1.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="963" data-original-width="1280" height="482" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmKiAPaxQszfqx7GR0jqUEsDoWGLWE50OBkinI3k-xyyf0ot97IiBVwa5eBcZU9BfA6n6mayRuOMG2geYnv48otf3Qf1q2XP5Luz7W5bKLgvEItF_F-ufGlhjdfpbByIH7JJqoKsBiOQ7PzXXrpGIayTFvhuJxAEj0L3N2R88uIT8PcAzHZW6WrA/w640-h482/knx-1.jpeg" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Normally the power supply (on the left) would be wired in permanently, but here I am just using a standard power cord for desktop programming. The USB bus interface is in the middle. There's nothing special about these devices, there are hundreds of KNX manufacturers that interoperate; I just happen to be using an <a href="https://new.abb.com/products/2CDG110144R0011/sv-s-30-160-1-1">ABB power supply</a> and <a href="https://new.abb.com/products/2CDG110243R0011/usb-s-1-2">ABB bus interface</a>.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">This works great: plug the device to be programmed into the connector on the right and hook the PC running the <a href="https://www.knx.org/knx-en/for-your-home/how-to-start/ets-home-edition/">KNX programming software ETS</a> into the bus interface via USB. And apart from the two ABB boxes, all that's needed is a power cord, three <a href="https://www.wago.com/global/installation-terminal-blocks-and-connectors/4-conductor-modular-pcb-connector/p/243-211">WAGO 243-211 connectors</a>, and some twisted pair. I used random wires that were lying around, in the real world of KNX installations you'd use proper shielded twisted pair cables!</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">The other gadget I built is this custom PCB (possibly the world's simplest PCB):</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_f3LS7Hdf3REwPS7f0G-yNtlumcwnaOBDliY__2k7vv9F4hqltGkuPmeNq9TCko1ClcXnmlIXHNYW2R8Pc5Jkbm4Xlhh2uGIiiJatOFlPcPNYD0idV_Cc4xPzLZAC-gMKGZUVgHa_AX7WXCtMLGpoW9RCqRJwogYJp3okpio4Nqgr8m2D5tqfbA/s1280/knx-2.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="849" data-original-width="1280" height="424" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_f3LS7Hdf3REwPS7f0G-yNtlumcwnaOBDliY__2k7vv9F4hqltGkuPmeNq9TCko1ClcXnmlIXHNYW2R8Pc5Jkbm4Xlhh2uGIiiJatOFlPcPNYD0idV_Cc4xPzLZAC-gMKGZUVgHa_AX7WXCtMLGpoW9RCqRJwogYJp3okpio4Nqgr8m2D5tqfbA/w640-h424/knx-2.jpeg" width="640" /></a></div><div><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;">It just connects four KNX terminals together in parallel. The pins at the top are the standard WAGO 243-131 pins compatible with the WAGO 243-211 connector. When soldered together it looks like this:</div></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHpTsUNp-DGoiyukBcSwuGQz0AJWzq9Iffeo9z4R2Tbtvh0iGQNmxAyvww9PyMwldAztD8bwIvv0aVGknE0U7IVElLhT1n2g4tqVvmrhrCSDvZiGId5YtlQs1hGDgCSaSe6RmWWdyZQnjwNVgmm1c6PYA9_dJI3EOFXgF9ARsOY2UWmktIE3aJuw/s1280/knx-3.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="644" data-original-width="1280" height="322" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHpTsUNp-DGoiyukBcSwuGQz0AJWzq9Iffeo9z4R2Tbtvh0iGQNmxAyvww9PyMwldAztD8bwIvv0aVGknE0U7IVElLhT1n2g4tqVvmrhrCSDvZiGId5YtlQs1hGDgCSaSe6RmWWdyZQnjwNVgmm1c6PYA9_dJI3EOFXgF9ARsOY2UWmktIE3aJuw/w640-h322/knx-3.jpeg" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><span style="text-align: left;">In conjunction with a bus interface it lets you tap into an existing KNX bus if there's no bus interface present. Or if it's just more convenient to connect where you are working. You simply unplug some device from the bus, plug the bus into this PCB and then plug the device into the dangling connector.</span></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">The bus will work normally and you'll have access for debugging and programming. (Note: you can do this because the KNX bus can be a tree and so it's acceptable to plug in a spur of a couple of devices to the main bus line).</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSmoitIZiO1hn8Iue1es3bMdYYqtM6_ZDkzG82vqPNHrUTH5lH9EeQfgO7tPWD2Dz2Jpk8fbQDlWrI32CoIg0wqJFcq4oGs0lxigd__lo73m_dXtY_7A1lIVJuaUPBk7fV5Ox3FTOHkVEPI8COe4CnEXB2aFeDynFDGQ5T7ztaFxKcnnRVLoaQfQ/s1280/knx-4.jpeg"><img border="0" data-original-height="929" data-original-width="1280" height="464" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSmoitIZiO1hn8Iue1es3bMdYYqtM6_ZDkzG82vqPNHrUTH5lH9EeQfgO7tPWD2Dz2Jpk8fbQDlWrI32CoIg0wqJFcq4oGs0lxigd__lo73m_dXtY_7A1lIVJuaUPBk7fV5Ox3FTOHkVEPI8COe4CnEXB2aFeDynFDGQ5T7ztaFxKcnnRVLoaQfQ/w640-h464/knx-4.jpeg" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">The PCB design is based on Matthias Kleine's <a href="https://github.com/klein0r/pcb-knx-distributor">KNX Distributor</a>; my version can be <a href="https://github.com/jgrahamc/knx-tap">found here</a>. (If you build this you'll also need Matthias Kleine's <a href="https://github.com/klein0r/pcb-footprint-collection-kicad">footprint library</a>).</div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/7381284008987393638/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/7381284008987393638" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/7381284008987393638"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/7381284008987393638"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/10/a-couple-of-handy-knx-gadgets.html" title="A couple of handy KNX gadgets"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmKiAPaxQszfqx7GR0jqUEsDoWGLWE50OBkinI3k-xyyf0ot97IiBVwa5eBcZU9BfA6n6mayRuOMG2geYnv48otf3Qf1q2XP5Luz7W5bKLgvEItF_F-ufGlhjdfpbByIH7JJqoKsBiOQ7PzXXrpGIayTFvhuJxAEj0L3N2R88uIT8PcAzHZW6WrA/s72-w640-h482-c/knx-1.jpeg" height="72" width="72"/>
<thr:total>0</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-6649151922991432331</id>
<published>2025-10-01T17:05:00.000+00:00</published>
<updated>2025-10-01T17:05:09.836+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/>
<title type="text">Protecting your (my) passport from liquid damage</title>
<content type="html"><p>After an unfortunate incident involving my passport and some alcohol-based hand gel in my bag, I decided I needed some sort of waterproof passport protection. But searching around for "passport wallets" mostly doesn't result in anything waterproof and all the wallets are large, bulky or ugly. But there is a really simple solution.</p><p>A 4 mil ziploc bag of the appropriate size.&nbsp;</p><p>What's the appropriate size? Well, there's an ICAO standard for <a href="https://en.wikipedia.org/wiki/Machine-readable_passport">machine-readable passports</a>&nbsp;which uses the <a href="https://en.wikipedia.org/wiki/ISO/IEC_7810">ISO/IEC 7810 ID3</a> size for the "passport booklet" (what you and I would call a passport).</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgLySRY4aVNHQa_MeC0gABnFCWe1LOoCdQsN72fCaZNgZHeWz3sCYodLu98N29o6rXxYx0ZWja3or4nUTmyzMLqlV_jUvT_FgZwUO47CDag5dK2pxAxILKHKX5hQrnye1quGVA8Xlx_VBs00lphVUd9vHVOlD_CPVLajrse7X9wQllPFNiTq20oaA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="568" data-original-width="445" src="https://blogger.googleusercontent.com/img/a/AVvXsEgLySRY4aVNHQa_MeC0gABnFCWe1LOoCdQsN72fCaZNgZHeWz3sCYodLu98N29o6rXxYx0ZWja3or4nUTmyzMLqlV_jUvT_FgZwUO47CDag5dK2pxAxILKHKX5hQrnye1quGVA8Xlx_VBs00lphVUd9vHVOlD_CPVLajrse7X9wQllPFNiTq20oaA=s16000" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">So, that's 125 x 88mm. Happily, a pretty common ziploc bag size is 10 x 15cm (or 100 x 150mm, if you prefer). That gives you an extra 12mm horizontally (so the passport will slip inside) and 25mm vertically (space for the passport and the area with the ziploc closure).</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">I mentioned "4 mil" above. Switching to non-metric measures (which seem common for the thickness of plastic) that's four 1/1000s of an inch (note it's not "millimetres", it's "mils"). You also sometimes see plastic measured in microns (which is 1/1000 of a millimetre).&nbsp;</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">4 mil bags have a sturdiness to them that thinner plastics do not have. They are sometimes described as "extra thick". In the UK,&nbsp;<a href="https://www.amazon.co.uk/stores/page/498A797C-420D-4094-BBCC-ED81C35B21F6?">these folks</a>&nbsp;(not an affiliate link) sell through Amazon and have a variety of bags of the right size and thickness.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">And now my (new) passport is carefully protected.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhgnW03040pIdvXdwmrEY1uC1dV9lZ_WPWETdktlSm9W5ZzNdFmmvyABr9N-pk2HF1GpTKC7tN8MdREa9pLtBS0PZWr6CkuviQH8JW6MTFs_F07Y__JZqjvxXydQnkdXgsxGmF-zY3drlU_dUmRjt_2UD4UHhYKyBeQfqeEnnLsgqGg-ck5NhvJQ/s1554/passport-2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1554" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhgnW03040pIdvXdwmrEY1uC1dV9lZ_WPWETdktlSm9W5ZzNdFmmvyABr9N-pk2HF1GpTKC7tN8MdREa9pLtBS0PZWr6CkuviQH8JW6MTFs_F07Y__JZqjvxXydQnkdXgsxGmF-zY3drlU_dUmRjt_2UD4UHhYKyBeQfqeEnnLsgqGg-ck5NhvJQ/w422-h640/passport-2.jpg" width="422" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">Aside: it turns out I actually once owned a waterproof passport wallet. I was gifted a <a href="https://sulgear.com/collections/passport-wallets">SÜLgear passport wallet</a>&nbsp;and lost the waterproof liner. The kind folks at SÜLgear pointed out that the waterproof liner was simply a 4" x 6", 4 mil ziploc bag (or, for those of the metric persuasion, 102 x 152mm).</div><br /><p></p></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/6649151922991432331/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/6649151922991432331" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/6649151922991432331"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/6649151922991432331"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/10/protecting-your-my-passport-from-liquid.html" title="Protecting your (my) passport from liquid damage"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgLySRY4aVNHQa_MeC0gABnFCWe1LOoCdQsN72fCaZNgZHeWz3sCYodLu98N29o6rXxYx0ZWja3or4nUTmyzMLqlV_jUvT_FgZwUO47CDag5dK2pxAxILKHKX5hQrnye1quGVA8Xlx_VBs00lphVUd9vHVOlD_CPVLajrse7X9wQllPFNiTq20oaA=s72-c" height="72" width="72"/>
<thr:total>0</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-5514750613064903382</id>
<published>2025-09-22T11:52:00.008+00:00</published>
<updated>2025-09-22T20:54:25.186+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/>
<title type="text">Is a movie prop the ultimate laptop bag?</title>
<content type="html"><p>A while back I attended a <a href="https://blog.cloudflare.com/three-chapters-at-cloudflare-programmer-to-cto-to-board-of-directors/">Cloudflare board meeting</a>&nbsp;and carried my laptop in a brown paper bag from a grocery store. This elicited a few comments about needing a real bag. But I've often carried my laptop in inconspicuous bags. For me, the ultimate laptop bag is one that looks nothing like a laptop bag; it should look like nothing special at all.&nbsp;</p><p>Unhappily, grocery bags are not very strong, but there is a solution.</p><p>Movie prop grocery bags like this:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLCsTiYJtgILVWSW6NUSgg7N1Auc969GWG9_LApQNtXRhRHsJwid4jLQ1j8OEAH4YVfeLi0El-jci5YtdUMyf4f-QEcGPZWYF05y9M0On0vskk9y0jFi8ziaXLpQVJ5_1dgiJcCcFO7OoI3c69NTQNCT_n3UM8go30Fry57Lr2ruGsaA1LnKJZVw/s5330/bag-1.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3648" data-original-width="5330" height="438" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLCsTiYJtgILVWSW6NUSgg7N1Auc969GWG9_LApQNtXRhRHsJwid4jLQ1j8OEAH4YVfeLi0El-jci5YtdUMyf4f-QEcGPZWYF05y9M0On0vskk9y0jFi8ziaXLpQVJ5_1dgiJcCcFO7OoI3c69NTQNCT_n3UM8go30Fry57Lr2ruGsaA1LnKJZVw/w640-h438/bag-1.jpeg" width="640" /></a></div><p></p><p>Looks like a classic brown paper grocery bag, but it isn't. It's actually a <a href="https://www.dependableexpendables.com/search?type=product&amp;q=silent+bag+props+">silent prop</a> made for a film set where the noise from a crinkling paper bag would overwhelm the dialogue.&nbsp;</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="370" src="https://www.youtube.com/embed/x6btmJSRueE" width="595" youtube-src-id="x6btmJSRueE"></iframe></div><p>Instead of being made from paper, it's made from fabric and is more robust then an actual paper bag. It's also nearly silent (well, much, much quieter than the real thing).</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKbYJ4h6bF_u6NoZjHYbCchtfwOO_sBPp8E7TOLrL1yhSigbzyGH1iXuH0jP1CjcqDTxewHa6xnLFd8dSVbgvE_gb47w-mmwoURZkmdUKEwg7iZ2j6uxyvivF-6PDvxWLWCTT7Z9PT_xKP299HT7KDgd3oj23K-Rq8hZQC_aD0NoKiINFpqelmfA/s5212/bag-2.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3523" data-original-width="5212" height="432" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKbYJ4h6bF_u6NoZjHYbCchtfwOO_sBPp8E7TOLrL1yhSigbzyGH1iXuH0jP1CjcqDTxewHa6xnLFd8dSVbgvE_gb47w-mmwoURZkmdUKEwg7iZ2j6uxyvivF-6PDvxWLWCTT7Z9PT_xKP299HT7KDgd3oj23K-Rq8hZQC_aD0NoKiINFpqelmfA/w640-h432/bag-2.jpeg" width="640" /></a></div><p>It's also the ideal size for my trusty and <a href="https://blog.jgc.org/2024/01/my-daily-driver-is-older-than-i-thought.html">vintage</a> MacBook Pro. Especially when it's in its sleeve.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8rGk6yij-QoN-rUsODKnFMQ3Vqd5bQNn3RBJdIBJHnJ_SscBE1esArQHYhqhMt4rg9qMRkgUSXa3RHw20kkAvL_c25BJeRKnvmHFnDGRcBx5Vm8fYfJSS4edF0iIPPgn29HTHeCc1EwPoAHpFlBkvPOPiRApNLPfJLIjGOdwlJRZeEPHXyGIaQA/s4924/bag-3.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3368" data-original-width="4924" height="438" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8rGk6yij-QoN-rUsODKnFMQ3Vqd5bQNn3RBJdIBJHnJ_SscBE1esArQHYhqhMt4rg9qMRkgUSXa3RHw20kkAvL_c25BJeRKnvmHFnDGRcBx5Vm8fYfJSS4edF0iIPPgn29HTHeCc1EwPoAHpFlBkvPOPiRApNLPfJLIjGOdwlJRZeEPHXyGIaQA/w640-h438/bag-3.jpeg" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">So, is a movie prop the ultimate laptop bag? No, clearly <a href="https://en.wikipedia.org/wiki/Betteridge%27s_law_of_headlines">Betteridge's Law of Headlines</a> applies, but it does fit my criteria for discretion and <a href="https://news.ycombinator.com/item?id=45338980">not being ostentatious</a>.&nbsp;</div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/5514750613064903382/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/5514750613064903382" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/5514750613064903382"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/5514750613064903382"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/09/is-movie-prop-ultimate-laptop-bag.html" title="Is a movie prop the ultimate laptop bag?"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLCsTiYJtgILVWSW6NUSgg7N1Auc969GWG9_LApQNtXRhRHsJwid4jLQ1j8OEAH4YVfeLi0El-jci5YtdUMyf4f-QEcGPZWYF05y9M0On0vskk9y0jFi8ziaXLpQVJ5_1dgiJcCcFO7OoI3c69NTQNCT_n3UM8go30Fry57Lr2ruGsaA1LnKJZVw/s72-w640-h438-c/bag-1.jpeg" height="72" width="72"/>
<thr:total>0</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-9064413465283376346</id>
<published>2025-09-07T12:07:00.003+00:00</published>
<updated>2025-09-07T12:07:55.408+00:00</updated>
<title type="text">Ex-X</title>
<content type="html"><p>I did have an X.com (username: 6a6763) account and I got bored of it so I deactivated it today.&nbsp;</p></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/9064413465283376346/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/9064413465283376346" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/9064413465283376346"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/9064413465283376346"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/09/ex-x.html" title="Ex-X"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<thr:total>0</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-417219859113312418</id>
<published>2025-07-21T11:25:00.002+00:00</published>
<updated>2025-07-21T11:25:57.856+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/>
<title type="text">Ode to the anti-Mac: Panasonic Toughbook FZ-40</title>
<content type="html"><p>I own two computers that I use regularly. The first is my main machine, a rather old <a href="https://blog.jgc.org/2024/01/my-daily-driver-is-older-than-i-thought.html">Apple MacBook Pro</a>, the other is a Panasonic Toughbook FZ-40. They are polar opposites. Where the Mac is designed with tightly coupled software and hardware and is all smooth curves and delicate design, the Toughbook is designed to be used wearing gloves, outside and in rough situations that would damage the Mac.&nbsp;</p><p>Its built-in handle is a sign that this thing is heavy and robust.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR5ksuSkhfiuU-4f5KaWpjAKREr207HVQ5bNvVXix9HUqLg9Ft97l3zDSXfL6e6tu3NLbhk9DN7tgC391cXwRE3RDLdco6FXjUNvWUrkIfbtqI0SHfMKM6ANwitSnM3Kkpr315x9T4GmYoG8k4wsAdv3Fb1mRIswxkKstSMqw_F5QoyqfDMs8DUQ/s1280/tb-1.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1135" data-original-width="1280" height="355" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR5ksuSkhfiuU-4f5KaWpjAKREr207HVQ5bNvVXix9HUqLg9Ft97l3zDSXfL6e6tu3NLbhk9DN7tgC391cXwRE3RDLdco6FXjUNvWUrkIfbtqI0SHfMKM6ANwitSnM3Kkpr315x9T4GmYoG8k4wsAdv3Fb1mRIswxkKstSMqw_F5QoyqfDMs8DUQ/w400-h355/tb-1.jpeg" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>And where the MacBook has a feeble port selection, my Toughbook has VGA, Serial, two Ethernet sockets, HDMI, a micro SD card, SIM card, USB-A (SS5 and SS10), head and microphone jack, Thunderbolt and USB-C, and built in GPS. There's also a smart card reader.<div><br /></div><div>It feels like it's designed to do stuff where connecting to the real world is involved.&nbsp;</div><div><br /></div><div>The camera has a physical cover and all the ports are protected by locking doors.<div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-NlKla7coIopu5v4R42QD-eootEmOl2ximpHxs1al31cHNu9a0XuQWNISbD7Ge4Lu8EWBjd1-ndjuljMoSz0RMTM8l19K4p26gKHY0rbDlYqDkl4Y2h-eU8-GL9vkA0Db1jMYAqLVBFnKaMuEv6EzJlVR252Il7AxkmpGN2TwrwsYw8jnC2pk8g/s5712/tb-2.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="5712" data-original-width="4284" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-NlKla7coIopu5v4R42QD-eootEmOl2ximpHxs1al31cHNu9a0XuQWNISbD7Ge4Lu8EWBjd1-ndjuljMoSz0RMTM8l19K4p26gKHY0rbDlYqDkl4Y2h-eU8-GL9vkA0Db1jMYAqLVBFnKaMuEv6EzJlVR252Il7AxkmpGN2TwrwsYw8jnC2pk8g/w480-h640/tb-2.jpeg" width="480" /></a></div><div><p>There are also some special Panasonic buttons (P1 through P4). P2 drops you into "Concealed Mode" which instantly cuts all the light coming from the machine.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE34EIE8i2r_zZ80SeR8HHQuwLq8EKTCHbWWkVpEPLqxqBcxh8cDpgithqnBj24zaED14PiKfZOk0QPVwNS9HdgaYf0Li2xFaiOMTm6-w3lKoGs-uCM8aDze-X7NLb0DXmCPDQndP4NnCD2WPmyAosSp2PzTAKks4BCENQRTrpNvKTpO3L_815nw/s1707/tb-3.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1707" data-original-width="1280" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE34EIE8i2r_zZ80SeR8HHQuwLq8EKTCHbWWkVpEPLqxqBcxh8cDpgithqnBj24zaED14PiKfZOk0QPVwNS9HdgaYf0Li2xFaiOMTm6-w3lKoGs-uCM8aDze-X7NLb0DXmCPDQndP4NnCD2WPmyAosSp2PzTAKks4BCENQRTrpNvKTpO3L_815nw/w480-h640/tb-3.jpeg" width="480" /></a></div><p>P3 drops you into "Night Mode" for all those moments where your submarine is being hunted by the Soviets and you need to preserve your night vision to be able to see the instruments ready. Sadly there's no "<a href="https://www.youtube.com/watch?v=jr0JaXfKj68">one ping</a>" option.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRoMryzChFHB6f8UVBQsAUMWrdCsddZb_acVrXDObFLh9DtkQC1JrgJPTj3R26zqPdSTVT_G1q_UL7t6HBggG_cLdXx_hwgoI3r2lEl4YdcROEG0suCiKDC7lIA1kdps2INWXR81IupVZyM448PW8MNzCsnpkZMQEo5nqwsAb16t4Ty2rDuqVemA/s1707/tb-4.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1707" data-original-width="1280" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRoMryzChFHB6f8UVBQsAUMWrdCsddZb_acVrXDObFLh9DtkQC1JrgJPTj3R26zqPdSTVT_G1q_UL7t6HBggG_cLdXx_hwgoI3r2lEl4YdcROEG0suCiKDC7lIA1kdps2INWXR81IupVZyM448PW8MNzCsnpkZMQEo5nqwsAb16t4Ty2rDuqVemA/w480-h640/tb-4.jpeg" width="480" /></a></div><p>The machine runs Windows 11 (which I don't love) but a lot of industrial software is only available on Windows (along with things like the LEGO MINDSTORMS software which was weak on the Mac and full-featured on Windows).&nbsp;</p><p>I may be the only person in the world programming LEGO on a Toughbook with the option to drop into Night Mode during, uh, LEGO emergencies. But, hey, <a href="https://behind-the-screens.tv/#ironman">LEGO worked for Iron Man</a>.</p><p>And then there's the red&nbsp;<a href="https://groups.google.com/g/toughbook/c/J__ssDTCm_0">F11</a>&nbsp;key with a raised bump around it to prevent accidental activation.</p></div></div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/417219859113312418/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/417219859113312418" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/417219859113312418"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/417219859113312418"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/07/ode-to-anti-mac-panasonic-toughbook-fz.html" title="Ode to the anti-Mac: Panasonic Toughbook FZ-40"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR5ksuSkhfiuU-4f5KaWpjAKREr207HVQ5bNvVXix9HUqLg9Ft97l3zDSXfL6e6tu3NLbhk9DN7tgC391cXwRE3RDLdco6FXjUNvWUrkIfbtqI0SHfMKM6ANwitSnM3Kkpr315x9T4GmYoG8k4wsAdv3Fb1mRIswxkKstSMqw_F5QoyqfDMs8DUQ/s72-w400-h355-c/tb-1.jpeg" height="72" width="72"/>
<thr:total>0</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-6112484641635671567</id>
<published>2025-07-18T15:17:00.002+00:00</published>
<updated>2025-07-19T13:05:59.172+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="clocks"/>
<category scheme="http://www.blogger.com/atom/ns#" term="hardware"/>
<title type="text">Pimping my Casio: Part Deux</title>
<content type="html"><p>Close to three years ago I wrote about using Oddly Specific Objects' alternate "motherboard" to modify a classic Casio F-91W watch:&nbsp;<a href="https://blog.jgc.org/2022/10/pimping-my-casio-with-oddly-specific.html">Pimping my Casio with Oddly Specific Objects' alternate motherboard and firmware.</a>&nbsp;That blog post goes into the detail of swapping out the guts of the Casio and building and uploading the firmware.&nbsp;</p><p>Happily, Oddly Specific Objects is back with a "Pro" version of their alternative Casio internals which now features an accelerometer and an alternative LCD. The original <a href="https://www.sensorwatch.net">Sensor Watch</a> used the existing Casio LCD display but the custom LCD allows for more complicated text to be displayed on screen. It's not a dot-matrix display so there are lots of limitations but it's still a fun upgrade.</p><p>Also, the Sensor Watch Pro, as it's called, requires no soldering (unlike the original version). Here's one I prepared earlier (that is a Casio F-91W with new internals):</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1iVxRuZ4xaxGibS6JwRe8xEO0eKwOZ2dlDaA7b-eJh6hAX4H5wkQyGRS117Sy5H2Z66BAKfZ5iAtlWUSZJQjIIdusaiSo-IsQ1qSO1ksLiWKWD_QAsWbOi6egCNo30qVTqjtE-aivfl6sFJEZ9XXB1XrkgrA7nKRmBCmU4RkpzCRMJgDUWC7aCw/s2246/sw-pro-1.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2246" data-original-width="1452" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1iVxRuZ4xaxGibS6JwRe8xEO0eKwOZ2dlDaA7b-eJh6hAX4H5wkQyGRS117Sy5H2Z66BAKfZ5iAtlWUSZJQjIIdusaiSo-IsQ1qSO1ksLiWKWD_QAsWbOi6egCNo30qVTqjtE-aivfl6sFJEZ9XXB1XrkgrA7nKRmBCmU4RkpzCRMJgDUWC7aCw/w414-h640/sw-pro-1.jpeg" width="414" /></a></div><div><br /></div>You can see the new display in action there showing the day as FRI. As with the original Sensor Watch there's a browser-based emulator that uses <a href="https://emscripten.org">emscripten</a> to get the watch running on your computer. This is pretty important because flashing new firmware to the watch requires dismantling it.<div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSB8nh3LmqIhogyf8_oCkSlsXhM2DkDSdJZZ_WqstKKlT0CjrFSUUje7k6jZZuw5WgWfmE_VvJ8oGvjaafFPOcr9NH33aqCWNJ023SvvYVvgCshM8lysDMRDK54lrL7fyq7RrtYmNNvR1syDmGswtEYDZY-oCY_tEZZ3Xs8vHtyw1ZWBwBs00qYw/s2038/sw-pro-2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1478" data-original-width="2038" height="464" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSB8nh3LmqIhogyf8_oCkSlsXhM2DkDSdJZZ_WqstKKlT0CjrFSUUje7k6jZZuw5WgWfmE_VvJ8oGvjaafFPOcr9NH33aqCWNJ023SvvYVvgCshM8lysDMRDK54lrL7fyq7RrtYmNNvR1syDmGswtEYDZY-oCY_tEZZ3Xs8vHtyw1ZWBwBs00qYw/w640-h464/sw-pro-2.png" width="640" /></a></div><br /><div>Since there's no soldering the process of upgrading your Casio is simply take it apart and put back in the parts that came in the kit (along with a small piece of metal that's transferred from the original Casio watch to make the battery connection):</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPPyoeQqJm4O8uQDLilWonpEhGj1-Hb5DvQ6yk5xYWjJ_V7cKrwq3tjKFuh-F3IvekcmfCCIMGyhc9-2iaV6VWtAkOLjuZ96Xh0RcWT7t4E3CSOa-XAo8FE4k6MgvG89JTEk1aW794Q94YutuHsnL0QXawxjmi7evePaExUvTM36UTFyafQPMT4w/s1280/sw-pro3.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1191" data-original-width="1280" height="596" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPPyoeQqJm4O8uQDLilWonpEhGj1-Hb5DvQ6yk5xYWjJ_V7cKrwq3tjKFuh-F3IvekcmfCCIMGyhc9-2iaV6VWtAkOLjuZ96Xh0RcWT7t4E3CSOa-XAo8FE4k6MgvG89JTEk1aW794Q94YutuHsnL0QXawxjmi7evePaExUvTM36UTFyafQPMT4w/w640-h596/sw-pro3.jpeg" width="640" /></a></div><br /><div>Since I bought the optional accelerometer add on it's necessary to put in place a little piece of Kapton tape (you can see if covering the five pads on the image above) and the insert the accelerometer board itself:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvSDKLm6K0X7zvjAgopLSk3mVf_VAzIsoGCejMyRyxprXEhZ_Ate4vYEPNYesDlteWI2acDnD8F4ldYJmyv3v9arkJY2Uea-qpplAo8QoVJuwe-sKb-mOZr7jMmIHQNq7igMN6aOrS1kReahxCF6XE1Al-RgG81aoANogqf2-fuBzue_PLh_nVAw/s1280/sw-pro-4.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1247" data-original-width="1280" height="624" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvSDKLm6K0X7zvjAgopLSk3mVf_VAzIsoGCejMyRyxprXEhZ_Ate4vYEPNYesDlteWI2acDnD8F4ldYJmyv3v9arkJY2Uea-qpplAo8QoVJuwe-sKb-mOZr7jMmIHQNq7igMN6aOrS1kReahxCF6XE1Al-RgG81aoANogqf2-fuBzue_PLh_nVAw/w640-h624/sw-pro-4.jpg" width="640" /></a></div><br /><div>The five vertical traces at the top are the micro USB interface used for flashing the firmware.&nbsp;</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidQSoy_thbpiUEwWkH9tY6Go4rSFFCwwxj0VU4xOPD6DnHKrCTf18qHOg-3vF1iJiMm2kpkYpznSmvnsj0ZuubvdcdADtaHlwquCrjrrF-fSv8LVSFSZX_F5KA8VtMSsBiv7b5PghdDiG0kippfxJEESiidFm8hn9JvU21ERPXRrCQwy8j954nVA/s1280/sw-pro-5.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="883" data-original-width="1280" height="442" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidQSoy_thbpiUEwWkH9tY6Go4rSFFCwwxj0VU4xOPD6DnHKrCTf18qHOg-3vF1iJiMm2kpkYpznSmvnsj0ZuubvdcdADtaHlwquCrjrrF-fSv8LVSFSZX_F5KA8VtMSsBiv7b5PghdDiG0kippfxJEESiidFm8hn9JvU21ERPXRrCQwy8j954nVA/w640-h442/sw-pro-5.jpg" width="640" /></a></div><br /><div>I modified the firmware to remove Imperial units and 12 hour clock (which I never want) and to choose <a href="https://github.com/joeycastillo/second-movement/commit/d5a1544d88963d607bc85826437c4a317cf56834">my own&nbsp;</a><span style="color: #0000ee;"><span style="caret-color: rgb(0, 0, 238);"><u>selection</u></span></span>&nbsp;of screens&nbsp;(I added the tally, accelerometer and light sensor screens).<br /><div style="text-align: left;"><br /></div><div style="text-align: left;">The complete sequence of commands needed to build the firmware was:<br /><span style="font-family: courier;"><br /></span></div><div style="text-align: left;"><span style="font-family: courier;">brew install --cask gcc-arm-embedded<br /></span><span style="font-family: courier;">git clone https://github.com/joeycastillo/second-movement<br /></span><span style="font-family: courier;">cd second-movement<br /></span><span style="font-family: courier;">git submodule update --init --recursive<br /></span><span style="font-family: courier;">make BOARD=sensorwatch_pro DISPLAY=custom</span></div><p style="text-align: left;">And then to upload to the watch you connect the micro USB, click the tiny switch on the back twice very rapidly and a volume called <span style="font-family: courier;">WATCHBOOT</span> appears on your machine. You can copy the firmware over to the watch with <span style="font-family: courier;">make install</span>.&nbsp;</p><p style="text-align: left;">To run the emulator you build with emscripten:</p><div style="text-align: left;"><span style="font-family: courier;">brew install emscripten<br />emmake make&nbsp;BOARD=sensorwatch_pro DISPLAY=custom<br />python3 -m http.server -d build-sim</span></div><p style="text-align: left;">And then visit localhost:8000/firmware.html in your browser.</p></div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/6112484641635671567/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/6112484641635671567" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/6112484641635671567"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/6112484641635671567"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/07/pimping-my-casio-part-deux.html" title="Pimping my Casio: Part Deux"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1iVxRuZ4xaxGibS6JwRe8xEO0eKwOZ2dlDaA7b-eJh6hAX4H5wkQyGRS117Sy5H2Z66BAKfZ5iAtlWUSZJQjIIdusaiSo-IsQ1qSO1ksLiWKWD_QAsWbOi6egCNo30qVTqjtE-aivfl6sFJEZ9XXB1XrkgrA7nKRmBCmU4RkpzCRMJgDUWC7aCw/s72-w414-h640-c/sw-pro-1.jpeg" height="72" width="72"/>
<thr:total>0</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-8285350699266665156</id>
<published>2025-06-25T08:30:00.001+00:00</published>
<updated>2025-06-25T08:30:21.890+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="clocks"/>
<category scheme="http://www.blogger.com/atom/ns#" term="radio"/>
<title type="text">The discreet charm of the infrastructureless</title>
<content type="html"><p>Early in the morning in a European city, I awoke and wondered for a moment where I was. The room was totally black apart from a small glow from the face of my Casio Lineage watch lying on the bedside table. The luminous dial had absorbed sunlight during the day and was now giving off gentle light in the night; enough brightness to read the time.</p><p><i>Infrastructureless #1: sunlight + chemistry = glow in the dark.</i></p><p>The watch had also absorbed sunlight through its face during the day to recharge its battery. In all the time I've owned this watch I've never seen the battery drop below the what Casio calls HI (there are levels MID and LO but I'd only seen MID once when I took the watch from its original packaging)</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtMzGp6AjbrtJnb89q-HqxiiWVeTRnyhOJ7CNlTzdxiBLyOoi419sLDoFyC-BXScCOlfNkaV9HtHJKE_F3-Q8GIGpcTVJ9gEXCHe1KWzY_pC6w1TQICU1eCoHDhevi3rLQez3EQ2RalUHkwrmzkqEHO600zgNwBXuNih-YYBa5WlrGS6CmGUvgOQ/s1882/casio-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1882" data-original-width="1326" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtMzGp6AjbrtJnb89q-HqxiiWVeTRnyhOJ7CNlTzdxiBLyOoi419sLDoFyC-BXScCOlfNkaV9HtHJKE_F3-Q8GIGpcTVJ9gEXCHe1KWzY_pC6w1TQICU1eCoHDhevi3rLQez3EQ2RalUHkwrmzkqEHO600zgNwBXuNih-YYBa5WlrGS6CmGUvgOQ/w281-h400/casio-1.png" width="281" /></a></div><p><i>Infrastructureless #2: sunlight + semiconductors = electrical power.</i></p><p>Clicking the top right button to illuminate the face further I could see the small LED display showing the local time in the European city (the main hands show my home time zone). And on the LED display a little black rectangle under RCVD indicated that somewhere in the night (it turned out at 02:04) the watch had picked up the signal from the <a href="https://en.wikipedia.org/wiki/DCF77">DCF77</a> transmitter in Germany and set itself.</p><p><i>Infrastructureless #3: radio = correct time.</i></p><div>OK, DCF77 isn't totally without infrastructure, but one of the reasons I became a radio amateur is lack of infrastructure. Sure, you're able to read this because of the Internet but it's an incredibly complex system: layers and layers of technology and cooperating entities just so you can read this.&nbsp;</div><div><br /></div><div>On the other hand, radio amateurs just send out electromagnetic waves and talk to each other, no intervening infrastructure (well, ok, maybe you can count the ionosphere as infrastructure allowing long distance reception). And that's what DCF77, and the other five transmitters the Casio can receive in the US, UK, China and Japan, are doing: sending waves into the night to be picked up and decoded by whoever is listening.</div><div><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj05muy8FG1W4z3XdzOnVMkNPX-0kxnLY-ASyyH6vu06vlSOmPIxoYQbPWiuFUsNRLjfjGP_I-eCT00OxcNFNaq34MoJJ3WOU4JdSvGFWavsmC9HE-01lTsUhdgQWC3MZa26A4iIT0Sqtw0ba_JPoxH5vVTgkmSenioooM6iUhTCoTonRE_3GihfQ/s1158/casio-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="576" data-original-width="1158" height="318" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj05muy8FG1W4z3XdzOnVMkNPX-0kxnLY-ASyyH6vu06vlSOmPIxoYQbPWiuFUsNRLjfjGP_I-eCT00OxcNFNaq34MoJJ3WOU4JdSvGFWavsmC9HE-01lTsUhdgQWC3MZa26A4iIT0Sqtw0ba_JPoxH5vVTgkmSenioooM6iUhTCoTonRE_3GihfQ/w640-h318/casio-3.png" width="640" /></a><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj05muy8FG1W4z3XdzOnVMkNPX-0kxnLY-ASyyH6vu06vlSOmPIxoYQbPWiuFUsNRLjfjGP_I-eCT00OxcNFNaq34MoJJ3WOU4JdSvGFWavsmC9HE-01lTsUhdgQWC3MZa26A4iIT0Sqtw0ba_JPoxH5vVTgkmSenioooM6iUhTCoTonRE_3GihfQ/s1158/casio-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNnQPIfLy4xjVok5m6dyLO2-ZVuHfUo0SROii0ekUpdhvVFFGsQEXR8AGggGIeUWtPTFKtNIxa-D9hDYoE-190vG9kyteWrVAH488uAmxx4-pGFCcKY4PSZJrFCZbyq1WwdoYfbRh8jLAExwB8AlAmVs7_bDQMRoiE4OtGhtfUK5hRM8qt9ubWiQ/s1112/casio-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="610" data-original-width="1112" height="352" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNnQPIfLy4xjVok5m6dyLO2-ZVuHfUo0SROii0ekUpdhvVFFGsQEXR8AGggGIeUWtPTFKtNIxa-D9hDYoE-190vG9kyteWrVAH488uAmxx4-pGFCcKY4PSZJrFCZbyq1WwdoYfbRh8jLAExwB8AlAmVs7_bDQMRoiE4OtGhtfUK5hRM8qt9ubWiQ/w640-h352/casio-2.png" width="640" /></a></div></div><div class="separator" style="clear: both; text-align: center;"><span style="color: #0000ee;"><span style="caret-color: rgb(0, 0, 238);"><u><br /></u></span></span></div><div>Also, I'm just fascinated by radio propagation: my ancient Sharper Image clock sometimes <a href="https://blog.jgc.org/2021/07/receiving-wwvb-time-signal-in-portugal.html">picks up the US WWVB in Portugal</a>.</div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/8285350699266665156/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/8285350699266665156" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/8285350699266665156"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/8285350699266665156"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/06/the-discreet-charm-of-infrastructureless.html" title="The discreet charm of the infrastructureless"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtMzGp6AjbrtJnb89q-HqxiiWVeTRnyhOJ7CNlTzdxiBLyOoi419sLDoFyC-BXScCOlfNkaV9HtHJKE_F3-Q8GIGpcTVJ9gEXCHe1KWzY_pC6w1TQICU1eCoHDhevi3rLQez3EQ2RalUHkwrmzkqEHO600zgNwBXuNih-YYBa5WlrGS6CmGUvgOQ/s72-w281-h400-c/casio-1.png" height="72" width="72"/>
<thr:total>0</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-6718543456445220885</id>
<published>2025-06-10T17:54:00.001+00:00</published>
<updated>2025-06-10T18:00:21.855+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/>
<title type="text">Low-background Steel: content without AI contamination</title>
<content type="html"><p>Somehow I forgot to blog my site: <a href="https://lowbackgroundsteel.ai/">https://lowbackgroundsteel.ai/</a>. I created it back in March 2023 as a clearinghouse for online resources that hadn't been contaminated with AI-generated content.&nbsp;</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijWm8XoAHKZn2-fYIvZZXJFJLv4ASg4T0nmvExAee9kk32vI4V3gln9PpYKQBfJkMsae-fJvuo1A_cRI-ZX6E5i0f92RCHm5MXtZNHZr3ki3f3sX4n9HtlwwZCQVVGWigHYLhTJbz-pZQvRm0O5N6If_LqG6Cw2A9InEtGuBD4-mPqRtdc7NUBMQ/s2370/lbs.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2370" data-original-width="2066" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijWm8XoAHKZn2-fYIvZZXJFJLv4ASg4T0nmvExAee9kk32vI4V3gln9PpYKQBfJkMsae-fJvuo1A_cRI-ZX6E5i0f92RCHm5MXtZNHZr3ki3f3sX4n9HtlwwZCQVVGWigHYLhTJbz-pZQvRm0O5N6If_LqG6Cw2A9InEtGuBD4-mPqRtdc7NUBMQ/w558-h640/lbs.jpeg" width="558" /></a></div><p><a href="https://en.wikipedia.org/wiki/Low-background_steel">Low-background Steel </a>(and lead) is a type of metal uncontaminated by radioactive isotopes from nuclear testing. That steel and lead is usually recovered from ships that sunk before the Trinity Test in 1945. The site is about uncontaminated content that I'm terming "Low-background Steel". The idea is to point to sources of text, images and video that were created prior to the explosion of AI-generated content that occurred in 2022.</p><p>It currently contains pointers to a Wikipedia dump from prior to the release of ChatGPT, the Arctic Code Vault, Project Gutenberg, and more.</p><p>If you know of other sources of non-contaminated content plus <a href="https://lowbackgroundsteel.ai/submit">submit them</a>!</p></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/6718543456445220885/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/6718543456445220885" title="1 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/6718543456445220885"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/6718543456445220885"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/06/low-background-steel-content-without-ai.html" title="Low-background Steel: content without AI contamination"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijWm8XoAHKZn2-fYIvZZXJFJLv4ASg4T0nmvExAee9kk32vI4V3gln9PpYKQBfJkMsae-fJvuo1A_cRI-ZX6E5i0f92RCHm5MXtZNHZr3ki3f3sX4n9HtlwwZCQVVGWigHYLhTJbz-pZQvRm0O5N6If_LqG6Cw2A9InEtGuBD4-mPqRtdc7NUBMQ/s72-w558-h640-c/lbs.jpeg" height="72" width="72"/>
<thr:total>1</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-3818174933613691655</id>
<published>2025-06-01T20:34:00.003+00:00</published>
<updated>2025-08-10T17:21:04.630+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="hardware"/>
<category scheme="http://www.blogger.com/atom/ns#" term="minitel"/>
<title type="text">It was time for a dim bulb current limiter</title>
<content type="html"><p>One of my Minitels (the one that I <a href="https://blog.jgc.org/2022/03/voiding-warranty-on-1993-minitel-2-to.html">modified a few years ago to run new firmware</a>) started having power supply problems: the LED was on but nothing else was working. I suspected that the main power/CRT board needed new capacitors and so I recapped it:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh4RXdLhCqZuNiwHrSNNjV6Xiox_NxujebIDyWmdiHuEGocDo5YyW0BpRb7Hw9JuY0gsP302QXsDIhXA-LvC4PFRK6wTxQcnGbDa6VOxMeaeP_pa867CVka1tf6yL0q1qJ07Bqjp8kFOBAUOjth6FWKcvSap9k0jM07sbT_Hyiq1Phzccq831jcA/s1707/dim-bulb-5.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1707" data-original-width="1280" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh4RXdLhCqZuNiwHrSNNjV6Xiox_NxujebIDyWmdiHuEGocDo5YyW0BpRb7Hw9JuY0gsP302QXsDIhXA-LvC4PFRK6wTxQcnGbDa6VOxMeaeP_pa867CVka1tf6yL0q1qJ07Bqjp8kFOBAUOjth6FWKcvSap9k0jM07sbT_Hyiq1Phzccq831jcA/w480-h640/dim-bulb-5.jpeg" width="480" /></a></div><div><br /></div>Alas, despite some of the older capacitors measuring poorly compared to their specs, that wasn't the problem and so I need to go deeper. The only problem is there are a ton of nasty voltages on this board. Notably the 230V AC input and then the tens of kilovolts generated for the CRT.<div><br /></div><div>Also the board seems to have a short somewhere.</div><div><br /></div><div>So, it's time to a dim bulb current limiter. Which I didn't have. So I made one. Here it is:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRtE5ZfCmta06KSLsOktQK2C2mCfbVs_T-dcnX7rvarawQzFsfqykDPLUR_AfPfMZUdCQx6RAmSPwjyjDUgwUBfh_VIpGKZvMRwM30CCHViyZBgMKiPm4eTkAwdVNPLeSa4TptwEdO3amheh-3AKvYT-xSJF2omTVX6SAned-UIZwujBag9dHkwA/s1280/dim-bulb-2.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRtE5ZfCmta06KSLsOktQK2C2mCfbVs_T-dcnX7rvarawQzFsfqykDPLUR_AfPfMZUdCQx6RAmSPwjyjDUgwUBfh_VIpGKZvMRwM30CCHViyZBgMKiPm4eTkAwdVNPLeSa4TptwEdO3amheh-3AKvYT-xSJF2omTVX6SAned-UIZwujBag9dHkwA/w640-h480/dim-bulb-2.jpeg" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>It's a remarkably simple device which plugs into a standard power outlet (230V AC) and puts a lightbulb in series with one of the connections. The two wires coming in then go to a standard socket. Thus you plug your device (e.g. my Minitel) into the socket and the lightbulb limits the current.<div><br /></div><div>These things were super <a href="https://antiqueradio.org/dimbulb.htm">common in the past</a> for anyone working with mains voltages.<br /><div><br /></div><div>Works great if you have an incandescent bulb at, say, 100W. A 100W bulb on 230V AC would have a current running through it of I = V/P -&gt; I = 100/230 (approximately 430mA). Limiting the current that way means you're less likely to damage the device you're working on if there's a short. Naturally, using a different bulb would give you a different current. 60W would give you around 230mA. 150W around 650mA.&nbsp;</div><div><br /></div><div>As the Minitel's input fuse is 630mA, my current limiter will keep things well under its blowing current. Also, if there's a complete short then the bulb will glow brightly.&nbsp;</div><div><br /></div><div>Here's a look inside:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhia865PgNjaxbIC7I-HSdzyRt58mvvTzlFuihJVfM6R5HltlT6Y-THJ0FyUtHrbmq5EDpw3a9fDW14mi5LS-mhYMx-OcjeYo6dX_sIO7YDKdkegwTvZLxAHW6MyPx5c1O1S5v5HTmNoB5JrAghZWKTy_iaWblrup62OEdrFskWAK78qPQBrJKz5A/s1280/dim-bulb-1.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhia865PgNjaxbIC7I-HSdzyRt58mvvTzlFuihJVfM6R5HltlT6Y-THJ0FyUtHrbmq5EDpw3a9fDW14mi5LS-mhYMx-OcjeYo6dX_sIO7YDKdkegwTvZLxAHW6MyPx5c1O1S5v5HTmNoB5JrAghZWKTy_iaWblrup62OEdrFskWAK78qPQBrJKz5A/w640-h480/dim-bulb-1.jpeg" width="640" /></a></div><br /><div>Power comes in at the top, and goes to a DPST switch. I'm using DPST because it's not easy to know which input wire is live and which is neutral because the European <a href="https://en.wikipedia.org/wiki/Schuko">Schuko/Type F</a>&nbsp;plug/socket is not polarized and I like knowing that when I switch something off, it's off! And the DPST has an integrated lamp that gives me a visual reminder that it's on.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtd5yKvaoR4kCaz0wCPJpM0SMV3toUG5kbirF88W3Rc3XwvRPT93gkPx9u62UmdXLKOMH64bBa0pdpWwtKPwDgXK1lBNNbVEccd_PQ3it3orfVqcIA6HKzwoO3sOsdd-9ZTk0TSPxhYQhyTKTHb-HTzqNseLad2i_vJvumQks3mTjwSeaGPInG5A/s1964/dim-bulb-7.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="404" data-original-width="1964" height="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtd5yKvaoR4kCaz0wCPJpM0SMV3toUG5kbirF88W3Rc3XwvRPT93gkPx9u62UmdXLKOMH64bBa0pdpWwtKPwDgXK1lBNNbVEccd_PQ3it3orfVqcIA6HKzwoO3sOsdd-9ZTk0TSPxhYQhyTKTHb-HTzqNseLad2i_vJvumQks3mTjwSeaGPInG5A/w640-h132/dim-bulb-7.png" width="640" /></a></div><div><br /></div><div>Because local power sockets aren't polarised, the power strip I am using for my bench gear uses DPST switches for each socket. It's relatively hard to find one that does this (and says it does). Thanks, <a href="https://www.brennenstuhl.com/en-PT/products/extension-leads/extension-lead-individually-switchable-6-way-2m-h05vv-f-3g1.5-white">Brennenstuhl</a>!</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFVAd90qESyXhysVOcMSgX7Qx8fx9qacoGkZJiOlcmHjSjr5iVfl75nxxB1HFk7i0JZ6IYn3qMEDlBpx3gdXXBZr8jgLx8FydXZZri3SU6mBhtyjr7qQ5rxiTuZ2XbKrhYklDwOb5ciD1nl1uk-0SDvBULfuVZt-Tw4LLwFpZlfxfHy9gp1WLK5A/s3488/dim-bulb-6.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1581" data-original-width="3488" height="290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFVAd90qESyXhysVOcMSgX7Qx8fx9qacoGkZJiOlcmHjSjr5iVfl75nxxB1HFk7i0JZ6IYn3qMEDlBpx3gdXXBZr8jgLx8FydXZZri3SU6mBhtyjr7qQ5rxiTuZ2XbKrhYklDwOb5ciD1nl1uk-0SDvBULfuVZt-Tw4LLwFpZlfxfHy9gp1WLK5A/w640-h290/dim-bulb-6.jpeg" width="640" /></a></div><br /><div>But I digress.</div><div><br /></div><div>To make my dim bulb current limiter do the right thing, I need a 100W incandescent bulb. These have been on their way to oblivion in the EU since 2009 and were, I believe, eliminated for home use in 2016. It is still possible to buy them, labelled for "industrial use", from some locations.</div><div>&nbsp;<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJDOISKREffD-X0vDdc0QVCLXF4JmXDY5F7FDEsGzIOhZppJCmDGN8w-zcrlzAjn2H3pOJIXD7Klw0dcf5JIKo2iswFGPpaW42BopFhV_Q4TAiV8rp7qjierBrivRQF-Dt5FgiXGizc6PC4-1vT6OSASPzES4Ek-OK2XYZbyYfi7fNN8kik1BTzg/s1280/dim-bulb-3.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="941" data-original-width="1280" height="470" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJDOISKREffD-X0vDdc0QVCLXF4JmXDY5F7FDEsGzIOhZppJCmDGN8w-zcrlzAjn2H3pOJIXD7Klw0dcf5JIKo2iswFGPpaW42BopFhV_Q4TAiV8rp7qjierBrivRQF-Dt5FgiXGizc6PC4-1vT6OSASPzES4Ek-OK2XYZbyYfi7fNN8kik1BTzg/w640-h470/dim-bulb-3.jpeg" width="640" /></a></div><br /></div><div>So, that limits the current and protects the device I'm working on, but what about protecting me? For that, I pair it with an isolating transformer. If you're not familiar with this then here's the basics. In a house the neutral line is connected to ground (typically at the point at which power comes into your house). This means that the 230V coming out the live wire is relative to ground. If I touch it the power will flow through me to ground.&nbsp;</div><div><br /></div><div>The isolating transformer eliminates the link between live, neutral and ground. It's still outputting 230V but that voltage isn't relative to ground and so I won't get a shock if I touch one of the wires coming from the transformer's socket. Of course, touching both would send 230V through me.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwdEB4jBV-xo2lO_q8nigbRkTTGvkTVYQRtDyKVxqcrCScxhWyEKZQ7oSjgvishX4GFXjqzZ0KezPQrzTEGGFgNNUtRFW58SQ4UzTWEjtD83tUdDm2SlkWwGk3DrHTZZ-zD8ibRiWnNESCeA1OJJLLsahrkdb8O_LMy4jfHo5TP6Db-4zPdkeGEQ/s1280/dim-bulb-4.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="947" data-original-width="1280" height="474" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwdEB4jBV-xo2lO_q8nigbRkTTGvkTVYQRtDyKVxqcrCScxhWyEKZQ7oSjgvishX4GFXjqzZ0KezPQrzTEGGFgNNUtRFW58SQ4UzTWEjtD83tUdDm2SlkWwGk3DrHTZZ-zD8ibRiWnNESCeA1OJJLLsahrkdb8O_LMy4jfHo5TP6Db-4zPdkeGEQ/w640-h474/dim-bulb-4.jpeg" width="640" /></a></div><br /><div>So, having built that I can go back to understanding why my Minitel isn't powering on.</div></div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/3818174933613691655/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/3818174933613691655" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/3818174933613691655"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/3818174933613691655"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/06/it-was-time-for-dim-bulb-current-limiter.html" title="It was time for a dim bulb current limiter"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh4RXdLhCqZuNiwHrSNNjV6Xiox_NxujebIDyWmdiHuEGocDo5YyW0BpRb7Hw9JuY0gsP302QXsDIhXA-LvC4PFRK6wTxQcnGbDa6VOxMeaeP_pa867CVka1tf6yL0q1qJ07Bqjp8kFOBAUOjth6FWKcvSap9k0jM07sbT_Hyiq1Phzccq831jcA/s72-w480-h640-c/dim-bulb-5.jpeg" height="72" width="72"/>
<thr:total>0</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-1005744146793198691</id>
<published>2025-04-21T13:16:00.002+00:00</published>
<updated>2025-04-21T13:17:31.328+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="calculators"/>
<title type="text">Just one more calculator, bro, just one more, I swear it's the last one</title>
<content type="html"><p><br />I'm not much of a collector of things. Long ago I decided that on the retro-computing front I would not collect any machines that weren't very significant to me. So, my "collection" consists of a <a href="https://blog.jgc.org/2025/02/getting-kim-1-to-talk-to-my-mac.html">KIM-1</a>, <a href="https://blog.jgc.org/2009/08/in-which-i-switch-on-30-year-old.html">Sharp MZ-80K</a>, Research Machines 380Z and 480Z, <a href="https://blog.jgc.org/2011/11/back-from-dead-with-power-supply-repair.html">BBC Micro Model B</a>, an <a href="https://blog.jgc.org/2023/12/restoration-of-ibm-thinkpad-701c.html">IBM ThinkPad 701C</a>, and a <a href="https://blog.jgc.org/2023/11/using-my-minitel-1b-over-phone-network.html">Minitel</a> (well, <a href="https://blog.jgc.org/2022/03/voiding-warranty-on-1993-minitel-2-to.html">two</a>).</p><p>But calculators are where I come closest to not being able to resist. Calculators are there for you. They don't change UI because of the whim of some product manager. They don't need updating because their underlying OS is on some new, crazy version. Nothing gets in the way of you using them: no popups, enticements to buy some extra thing, no notifications, nothing. In an insane world, they are the sanest choice.</p><p>I've written in the past about restoring my <a href="https://blog.jgc.org/2022/11/restoring-my-rockwell-8r-calculator.html">Rockwell 8R</a> and <a href="https://blog.jgc.org/2022/11/restoring-my-commodore-p50-calculator.html">Commodore P50</a> (and a fun discovery that Sir Roger Penrose had the same calculator and wrote the same program as me: <a href="https://blog.jgc.org/2023/11/my-primality-testing-code-is-6x-faster.html">mine was faster, his more elegant</a> (which is probably some sort of metaphor)). And I have my Casio fx-3600p which I used extensively at school.</p><p>I also have an original <a href="https://blog.jgc.org/2006/06/how-i-love-my-hp-16c.html">HP 16C</a> (the one for programmers).</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisy7iTpsDnuDW2mEU7GC4HwEkwisHHbTcoJJLrjvqQjy7LRpc6AA3EwwtiJf2A2-1k4EHcMCfFGgqTTlR4mCEPEEk60BXRkbooLUtK_y62ZG8EclKOgWKKCA05Vy9kLFj-KfnDiRyZ0wYFVYywkAeJsbb67fj7UR8oimP-yS4jQcXWpBkoyJYu5w/s697/calcs-2.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="446" data-original-width="697" height="410" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisy7iTpsDnuDW2mEU7GC4HwEkwisHHbTcoJJLrjvqQjy7LRpc6AA3EwwtiJf2A2-1k4EHcMCfFGgqTTlR4mCEPEEk60BXRkbooLUtK_y62ZG8EclKOgWKKCA05Vy9kLFj-KfnDiRyZ0wYFVYywkAeJsbb67fj7UR8oimP-yS4jQcXWpBkoyJYu5w/w640-h410/calcs-2.jpg" width="640" /></a></div><p></p><p>Some time ago I discovered a company called SwissMicros that makes <a href="https://blog.jgc.org/2023/09/swissmicros-beautiful-hp-calculators.html">modern replicas of classic HP calculators</a>. I bought two of them. I have <a href="https://www.swissmicros.com/product/dm42">their version of the HP-42S</a>:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPIWpCsSbZpmdRpg8e4OUWnR-Bw-PzCdGyNCC8IC-oHsqonsgLejzhzIQrd4Lt86_TzVwjBMLtXjoUa2-dfJoac8PmvtzSjehmr2rAwMAm6xv8KUfgYHJWshh230MA9spz0_DrfU_wFRJaS0cWXfeBxu26uwyeXlEZKyIkv8X0389EQ6K3__dnyg/s2207/calcs-3.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2207" data-original-width="1200" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPIWpCsSbZpmdRpg8e4OUWnR-Bw-PzCdGyNCC8IC-oHsqonsgLejzhzIQrd4Lt86_TzVwjBMLtXjoUa2-dfJoac8PmvtzSjehmr2rAwMAm6xv8KUfgYHJWshh230MA9spz0_DrfU_wFRJaS0cWXfeBxu26uwyeXlEZKyIkv8X0389EQ6K3__dnyg/w348-h640/calcs-3.jpg" width="348" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">And <a href="https://www.swissmicros.com/product/dm16l">their version of the HP-16C</a>:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI4i1o8yGAzVntR9af65lSdKFZRIQNYFfQ1O7ypFC06HnsEV4W8sI1o0acHmBkSaGyCCTQnb39Yemu9dHAWVzdwfYjbdlcmfSOU2ZpUelb0XKiUfmAiM3Ygh84Y5ATrJ0Vp_eeDJZrPqw_3wnXEa9cduzExtM4tj0Amz8zaLgTd3YAXC1xrBNMrQ/s3336/calcs-4.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2025" data-original-width="3336" height="388" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI4i1o8yGAzVntR9af65lSdKFZRIQNYFfQ1O7ypFC06HnsEV4W8sI1o0acHmBkSaGyCCTQnb39Yemu9dHAWVzdwfYjbdlcmfSOU2ZpUelb0XKiUfmAiM3Ygh84Y5ATrJ0Vp_eeDJZrPqw_3wnXEa9cduzExtM4tj0Amz8zaLgTd3YAXC1xrBNMrQ/w640-h388/calcs-4.jpg" width="640" /></a></div><div><br /></div>But recently they started making a credit card-sized version of the HP-16C and I was unable to resist ordering one. And so, after dealing with Portuguese Customs, I got this:<div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcgIeFJ4H66rZq468xuiijnom-caEPxNAIFdnJA-Epnwdbl0xBV3TW5Qt0RJddUCT9XJjkzLkxnlySFuxgNMx0_FDCPTck269tqvi1KV8OMO_042p1FKlt0UWlBKYdFMx7kd7AzBQAM_0Z0N40UbncYfGlfbr_I5v35dWg0kuMIAYm32B2vWAXEQ/s1200/calcs-1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="896" data-original-width="1200" height="478" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcgIeFJ4H66rZq468xuiijnom-caEPxNAIFdnJA-Epnwdbl0xBV3TW5Qt0RJddUCT9XJjkzLkxnlySFuxgNMx0_FDCPTck269tqvi1KV8OMO_042p1FKlt0UWlBKYdFMx7kd7AzBQAM_0Z0N40UbncYfGlfbr_I5v35dWg0kuMIAYm32B2vWAXEQ/w640-h478/calcs-1.png" width="640" /></a></div><br /><div>And now I have full size and card size side by side:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjVhkZfsNxJ1Akwslrc5f55sfd4kF5mY7C3rzOMqLkxXb32nUNNNMx4XKyIBs_fnnwFZyxF2xnHt1V-hcuuPHppMSvgu822qHaK92XyvxzXPcHj79bCsoyDbOpUJt42iywd6kO-fjlYatVL6Q8BU425AVGPsA7doOj5OmNdZaZDx9LVlZwMfi-BQ/s2502/calcs-5.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2502" data-original-width="2098" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjVhkZfsNxJ1Akwslrc5f55sfd4kF5mY7C3rzOMqLkxXb32nUNNNMx4XKyIBs_fnnwFZyxF2xnHt1V-hcuuPHppMSvgu822qHaK92XyvxzXPcHj79bCsoyDbOpUJt42iywd6kO-fjlYatVL6Q8BU425AVGPsA7doOj5OmNdZaZDx9LVlZwMfi-BQ/w536-h640/calcs-5.jpg" width="536" /></a></div><br /><div>I'll try to stop collecting calculators there.</div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/1005744146793198691/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/1005744146793198691" title="4 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/1005744146793198691"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/1005744146793198691"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/04/just-one-more-calculator-bro-just-one.html" title="Just one more calculator, bro, just one more, I swear it's the last one"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisy7iTpsDnuDW2mEU7GC4HwEkwisHHbTcoJJLrjvqQjy7LRpc6AA3EwwtiJf2A2-1k4EHcMCfFGgqTTlR4mCEPEEk60BXRkbooLUtK_y62ZG8EclKOgWKKCA05Vy9kLFj-KfnDiRyZ0wYFVYywkAeJsbb67fj7UR8oimP-yS4jQcXWpBkoyJYu5w/s72-w640-h410-c/calcs-2.jpg" height="72" width="72"/>
<thr:total>4</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-6192850347732641270</id>
<published>2025-04-10T09:00:00.001+00:00</published>
<updated>2025-04-10T09:01:13.355+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/>
<title type="text">The Via Verde Stick</title>
<content type="html"><p>Portugal has an incredibly well executed and efficient system for collecting road tolls called <a href="https://en.wikipedia.org/wiki/Via_Verde">Via Verde</a>. A small transponder in the car either collects a toll at an automated toll booth or, on some motorways, every few kilometres without slowing down at all.</p><p>Via Verde can also be used to pay for parking in many locations.&nbsp;</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0TQSG69s-lFiHSIlO5WePiW3YXHHKZmVYtY5t_ss6lMzPAA4N6MCkINVr6yCRziymBJV4tNMIY6YUSse9A127LRXmm2-8IEipNGjFnLqHjOmH_Nq4a7gAZ0pqBx33S8E6erY1xW0CMUsQFnqPEDb4DrZv6HSO2ZZ0q0apYvnD2SYiFDYabOA2Aw/s1664/viaverde-1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="770" data-original-width="1664" height="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0TQSG69s-lFiHSIlO5WePiW3YXHHKZmVYtY5t_ss6lMzPAA4N6MCkINVr6yCRziymBJV4tNMIY6YUSse9A127LRXmm2-8IEipNGjFnLqHjOmH_Nq4a7gAZ0pqBx33S8E6erY1xW0CMUsQFnqPEDb4DrZv6HSO2ZZ0q0apYvnD2SYiFDYabOA2Aw/w640-h296/viaverde-1.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">When entering a car park where Via Verde is an option there are two ways it works: in some car parks it's possible just to wait a few moments for the gate to decide that you've opted for Via Verde and not a ticket, in others you have to press a button.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdOXIJE16yi1UcYmzHqz5ACJI_3Aym9jYcwH-q9HEYJnrKjD98r9mTrx_KIbuwkksjuaUxpJtCE6qMsfN5hEza2JoU7ooapKE3mGJ1u0iYIocyPsuJnFKM-0YpY2WJdrxKXK0jkONm8F-HeDU-dPUBFH3AzUo3lv_AgvZe2lM-deaWQxXJRUXfbw/s810/viaverde-2.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="810" data-original-width="789" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdOXIJE16yi1UcYmzHqz5ACJI_3Aym9jYcwH-q9HEYJnrKjD98r9mTrx_KIbuwkksjuaUxpJtCE6qMsfN5hEza2JoU7ooapKE3mGJ1u0iYIocyPsuJnFKM-0YpY2WJdrxKXK0jkONm8F-HeDU-dPUBFH3AzUo3lv_AgvZe2lM-deaWQxXJRUXfbw/w624-h640/viaverde-2.jpg" width="624" /></a></div><div><br /></div>The parking above has three options: use a card (for residents or people with a subscription), blue button for a ticket, and green for Via Verde. To alleviate difficulty in pressing the green button I created the "Via Verde Stick" from a short length of wooden broom stick handle, some green spray paint, and two felt floor protectors.<div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV_mJ1uFY0aDh-FjkVVZZ3qX3JAzACQHrDlsu2ck4TbAYbmwySSFrhlA7pOq9xrXxqGxov6pNgvccGEaxHW9vGmGyp6fB0EVqTvG8lbdVtatzXPljJylcz7hJhFDammVFL8b-Grz4iVyOLhdLYPhfU8J_RNFM_cr_7B_UFyrAyasVE0ony6bX1zw/s5222/viaverde-3.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="607" data-original-width="5222" height="74" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV_mJ1uFY0aDh-FjkVVZZ3qX3JAzACQHrDlsu2ck4TbAYbmwySSFrhlA7pOq9xrXxqGxov6pNgvccGEaxHW9vGmGyp6fB0EVqTvG8lbdVtatzXPljJylcz7hJhFDammVFL8b-Grz4iVyOLhdLYPhfU8J_RNFM_cr_7B_UFyrAyasVE0ony6bX1zw/w640-h74/viaverde-3.jpg" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">The felt floor protectors are on both ends so that it doesn't matter which way the stick is oriented.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih0uWTeQZNHwqRTccI-XciBYAj9NqDYY7wkiQfD_MwmQuDsr3KJuCEZeuBCaq0spT53IY_yxOhOvBhRXdp2C3tr01SqXGD5ygBgmH1hqFI5FgOIR9gt97WLmCb1bc9iGqQx7G45Y0t5KBhgpMt-OmLW5bQ8bhv3Ndwi7N6aaKUe_azbUqf7wqmnQ/s4032/viaverde-4.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4032" data-original-width="3024" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih0uWTeQZNHwqRTccI-XciBYAj9NqDYY7wkiQfD_MwmQuDsr3KJuCEZeuBCaq0spT53IY_yxOhOvBhRXdp2C3tr01SqXGD5ygBgmH1hqFI5FgOIR9gt97WLmCb1bc9iGqQx7G45Y0t5KBhgpMt-OmLW5bQ8bhv3Ndwi7N6aaKUe_azbUqf7wqmnQ/w480-h640/viaverde-4.jpg" width="480" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">I do wonder what the driver behind me thinks when a long, bright green stick appears out the window but...</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYlzGx1m_rG2hLh-uKNHm6upODANbEZUtpmSEMCwFgMLBJxAsidRW_S0uVbHauFWyEMS1_HhG035cnHqF-zkA6xDJ7lNw09_nL_omZ4tCGv_qGpUN_tgMkbpzmWbjz9W7HCSXagF58iKTWZRf2bfgzaDk1ST6PDkGLYfvOitCOyQe8TmLTPFDcGg/s600/viaverde-5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="454" data-original-width="600" height="303" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYlzGx1m_rG2hLh-uKNHm6upODANbEZUtpmSEMCwFgMLBJxAsidRW_S0uVbHauFWyEMS1_HhG035cnHqF-zkA6xDJ7lNw09_nL_omZ4tCGv_qGpUN_tgMkbpzmWbjz9W7HCSXagF58iKTWZRf2bfgzaDk1ST6PDkGLYfvOitCOyQe8TmLTPFDcGg/w400-h303/viaverde-5.jpg" width="400" /></a></div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/6192850347732641270/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/6192850347732641270" title="1 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/6192850347732641270"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/6192850347732641270"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/04/the-via-verde-stick.html" title="The Via Verde Stick"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0TQSG69s-lFiHSIlO5WePiW3YXHHKZmVYtY5t_ss6lMzPAA4N6MCkINVr6yCRziymBJV4tNMIY6YUSse9A127LRXmm2-8IEipNGjFnLqHjOmH_Nq4a7gAZ0pqBx33S8E6erY1xW0CMUsQFnqPEDb4DrZv6HSO2ZZ0q0apYvnD2SYiFDYabOA2Aw/s72-w640-h296-c/viaverde-1.png" height="72" width="72"/>
<thr:total>1</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-6045805352103665596</id>
<published>2025-03-31T15:22:00.008+00:00</published>
<updated>2025-03-31T15:30:58.521+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="retro"/>
<title type="text">Debugging Lotus 1-2-3 by fax</title>
<content type="html"><p>There isn't a lot to this story beyond the fact that in around 1990 I helped debug someone's <a href="https://en.wikipedia.org/wiki/Lotus_1-2-3">Lotus 1-2-3</a> set up via fax. But it's a good reminder of how important the Zeroth Law of Debugging is (see below).</p><p>Without some sort of online connection with these folks, and with transatlantic phone calls being very, very expensive (I was in the UK, they were in the US) fax was the obvious answer.</p><p>I was reminded of this when I came across the actual fax itself:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvBJFVo9lHXKYXrDQLzGXbikkdfnrYIrLIVEfKAtf8xXit4aysAwKI4eGJE7DDtpGox5v5nGtimyBlgEsV2TfFhoJZjOzrMvKn_Y9zWvlnd90WmDJNvY_PhjY-e88ULkTz3anDxMYBTVvcZy6_-WWvwGiNGkfcpE0zZM6ycrTXGZO9d-Qun1QZXg/s1933/123fax-1.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1933" data-original-width="1394" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvBJFVo9lHXKYXrDQLzGXbikkdfnrYIrLIVEfKAtf8xXit4aysAwKI4eGJE7DDtpGox5v5nGtimyBlgEsV2TfFhoJZjOzrMvKn_Y9zWvlnd90WmDJNvY_PhjY-e88ULkTz3anDxMYBTVvcZy6_-WWvwGiNGkfcpE0zZM6ycrTXGZO9d-Qun1QZXg/w462-h640/123fax-1.jpeg" width="462" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">What I asked them to do was give me the output of <span style="font-family: courier;">/ppomr</span>. Hitting <span style="font-family: courier;">/</span> in 1-2-3 started the menu system and each letter took you down a submenu until you hit an actual menu item. <span style="font-family: courier;">/ppomr</span> is <span style="font-family: courier;">/Print Printer Options Margins Right</span> (read all about it in the <a href="https://ia801706.us.archive.org/25/items/lotus-1-2-3-release-3.1-reference/Lotus%201-2-3%20Release%203.1%20-%20Quick%20Reference.pdf">Quick Reference</a>) and so I was asking for the size of the right margin when printing.&nbsp;</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvnfG-rD2_B8Ex1WeGI8rIDmfdkcmWsQXkFB5lW_NdEmgBOImDbwS68iXE2jpDvmEVEq_zfBI3r5HrsWez-n5V_5JL6PFHaKh2kV8S2GW-D92kkp7a1lVlI3vjsThAs_RnkR0XvosVtmqLpDrF-HZGN8hb2qbp5HdE6oNYjlJAbW1zOGOiqMYJ0Q/s1304/123fax-4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1304" data-original-width="1118" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvnfG-rD2_B8Ex1WeGI8rIDmfdkcmWsQXkFB5lW_NdEmgBOImDbwS68iXE2jpDvmEVEq_zfBI3r5HrsWez-n5V_5JL6PFHaKh2kV8S2GW-D92kkp7a1lVlI3vjsThAs_RnkR0XvosVtmqLpDrF-HZGN8hb2qbp5HdE6oNYjlJAbW1zOGOiqMYJ0Q/w549-h640/123fax-4.png" width="549" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">Here's what that looks like in action:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyFlohy9zaZQG4F1lVbE5zwbI-atvbCsblhWuExUIGrz-5M8mXowl5pVX-1Z3PvLtk4RRSy4SSIezsdMAxapZNC-haHtW1IATs6KQbUR1xDS6FkD8qGgqonN4u9jWsta6RUFQtrzTB5h1I7AZE0zNNp3As3bKBG3jXqZWwWdU8vzrovjoWAaodww/s4096/123fx-2.gif" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2304" data-original-width="4096" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyFlohy9zaZQG4F1lVbE5zwbI-atvbCsblhWuExUIGrz-5M8mXowl5pVX-1Z3PvLtk4RRSy4SSIezsdMAxapZNC-haHtW1IATs6KQbUR1xDS6FkD8qGgqonN4u9jWsta6RUFQtrzTB5h1I7AZE0zNNp3As3bKBG3jXqZWwWdU8vzrovjoWAaodww/w640-h360/123fx-2.gif" width="640" /></a></div><div><br /></div>And then I instructed the person on the other end to alter the left margin with <span style="font-family: courier;">/ppoml</span>&nbsp;(<span style="font-family: courier;">/Print Printer Options Margins Left</span>). I also told them if they wanted a change to the page headers I'd need to "send them a disc" (i.e. mail a floppy disc to the US!)<div><br /></div><div><div class="separator" style="clear: both; text-align: left;">If you are going to debug anything you need to tighten the loop between trying something and observing the output of your change. This should be the Zeroth Law of Debugging: get the smallest/fastest test case so you can iterate.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Worst case send faxes across the Atlantic.&nbsp;</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgHKaAHsFiYNnAH36kFKQdWGdtiPd6-AulKES6UwkiyVVWEZ-fqAZu_53HVlie0Ftz-pFokP24OLBf1792PRTvZAZmJeIYd7_TSTfP9DvSeikXQJzXBj5rXgoRoSv8P3dUXzg4HE9WdbWLwTwB_FdWZB67ddTLVZFaoD0So7K1k7z-JDAJoVfJpA/s529/123fax-3.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="472" data-original-width="529" height="358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgHKaAHsFiYNnAH36kFKQdWGdtiPd6-AulKES6UwkiyVVWEZ-fqAZu_53HVlie0Ftz-pFokP24OLBf1792PRTvZAZmJeIYd7_TSTfP9DvSeikXQJzXBj5rXgoRoSv8P3dUXzg4HE9WdbWLwTwB_FdWZB67ddTLVZFaoD0So7K1k7z-JDAJoVfJpA/w400-h358/123fax-3.jpeg" width="400" /></a></div></div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/6045805352103665596/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/6045805352103665596" title="3 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/6045805352103665596"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/6045805352103665596"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/03/debugging-lotus-1-2-3-by-fax.html" title="Debugging Lotus 1-2-3 by fax"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvBJFVo9lHXKYXrDQLzGXbikkdfnrYIrLIVEfKAtf8xXit4aysAwKI4eGJE7DDtpGox5v5nGtimyBlgEsV2TfFhoJZjOzrMvKn_Y9zWvlnd90WmDJNvY_PhjY-e88ULkTz3anDxMYBTVvcZy6_-WWvwGiNGkfcpE0zZM6ycrTXGZO9d-Qun1QZXg/s72-w462-h640-c/123fax-1.jpeg" height="72" width="72"/>
<thr:total>3</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-5795781756177787948</id>
<published>2025-02-13T17:55:00.004+00:00</published>
<updated>2025-02-13T17:59:46.833+00:00</updated>
<title type="text">I have come to loathe acronyms</title>
<content type="html"><p>Unless they are widely, widely known they make communication worse. And they have a tendency to make the writer seem pompous, or a member of some special clique, while making a reader who doesn't know the acronym feel foolish.&nbsp;</p><p>They are the opposite of clear communication, and are often accompanied by unclear, complex language.</p><p>The writer's goal (whether of a book, an email, or whatever the hell we call a tweet now) should be to be understood. Acronyms are an impediment to that and are often more difficult to read or say than actual words.&nbsp;</p><p>And don't fall into the awful trap of defining an acronym in a document and then using it later. That's a substitute for using plain language. Always use plain language.</p><p>Unless your goal is to be misunderstood.&nbsp;</p></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/5795781756177787948/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/5795781756177787948" title="3 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/5795781756177787948"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/5795781756177787948"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/02/i-have-come-to-loath-acronyms.html" title="I have come to loathe acronyms"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<thr:total>3</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-2972398345099268358</id>
<published>2025-02-10T17:09:00.000+00:00</published>
<updated>2025-02-10T17:09:09.529+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="hardware"/>
<title type="text">Archiving hardware projects</title>
<content type="html"><p>From time to time I do some project involving old hardware that requires connecting it to a modern computer. For example,</p><p><span>&nbsp;&nbsp; &nbsp;</span><a href="https://blog.jgc.org/2025/02/getting-kim-1-to-talk-to-my-mac.html">Getting the KIM-1 to talk to my Mac</a></p><p><span>&nbsp; &nbsp;&nbsp;</span><a href="https://blog.jgc.org/2022/03/resurrecting-dataman-s4-prom-programmer.html">Resurrecting a Dataman S4 PROM programmer</a></p><p><span>&nbsp; &nbsp;&nbsp;</span><a href="https://blog.jgc.org/2022/04/ripping-old-mini-dv-video-tapes-on-mac.html">Ripping old mini DV video tapes on a Mac</a></p><p>And I've come to the conclusion that archiving the related hardware is important. For example, I got this Dataman S4 talking to my Mac using a few different cables. I bought a set of cables and archived them in a bag for the next time I need to do this.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_A37qHS8SIBr146GTQt5yyNg3AENYhRcyj6vAbQCCJeCaSpXI5Mh8IiMRhQMYLGqtqoIeGhgFK5VarUgScWfPV_jlhcyZEXdbtcjUCIgpdz6WG903sxPYD6g9c3rG3hyphenhyphenNcf06m0cyeKQn1OkAVMy_4fFLoiDbNAs1Z2KhlFET2S_rDJY9yZpc1w/s2664/dataman5.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2664" data-original-width="2381" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_A37qHS8SIBr146GTQt5yyNg3AENYhRcyj6vAbQCCJeCaSpXI5Mh8IiMRhQMYLGqtqoIeGhgFK5VarUgScWfPV_jlhcyZEXdbtcjUCIgpdz6WG903sxPYD6g9c3rG3hyphenhyphenNcf06m0cyeKQn1OkAVMy_4fFLoiDbNAs1Z2KhlFET2S_rDJY9yZpc1w/w573-h640/dataman5.jpg" width="573" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>The Dataman S4 project required three things: a USB-C to USB-A adapter, a USB-A to RS-232 adapter and a 9 pin to 25 pin serial cable.&nbsp;<div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBw-gv1T6yK7NS-YQn7wHnDNK61-ow4R6AYjWETsNLG-IQ7pXIcni3NQg0MpcFWKaNyTE6edLK3whoeDL_cvm5M4DzwHm7ytq3zngw5GAwEM3I4wfHlLZdXIruTlCLbpooZi9FZPOQ5Axdq-O8IqUVOFbVpRmNR8NZlE9-Y39vvjUta7XR3UgUug/s4234/archive-1.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4234" data-original-width="3902" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBw-gv1T6yK7NS-YQn7wHnDNK61-ow4R6AYjWETsNLG-IQ7pXIcni3NQg0MpcFWKaNyTE6edLK3whoeDL_cvm5M4DzwHm7ytq3zngw5GAwEM3I4wfHlLZdXIruTlCLbpooZi9FZPOQ5Axdq-O8IqUVOFbVpRmNR8NZlE9-Y39vvjUta7XR3UgUug/w590-h640/archive-1.jpeg" width="590" /></a></div><div><br /></div><div>These things are fairly inexpensive making it viable to archive them. Now I only have to worry about the drivers being available!</div><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8oe93fugNv6GtBjc9-RkAdaU3jo5Cruy6-BxJH-5uX_k7eFtKFqTBODWC9VXHVSBWRRAHNt5djl1DSNlJ3-mzuSuWZYFR_kK0R7gGSH1zxuL87xhen5ysQTBmh7shP0t4yR4iVQJXXqPsGSI3cSFlQdrROEWokFWiCNCcYNxO0NiQrp4a1T5xfw/s4083/archive-2.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4083" data-original-width="3763" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8oe93fugNv6GtBjc9-RkAdaU3jo5Cruy6-BxJH-5uX_k7eFtKFqTBODWC9VXHVSBWRRAHNt5djl1DSNlJ3-mzuSuWZYFR_kK0R7gGSH1zxuL87xhen5ysQTBmh7shP0t4yR4iVQJXXqPsGSI3cSFlQdrROEWokFWiCNCcYNxO0NiQrp4a1T5xfw/w590-h640/archive-2.jpeg" width="590" /></a></div></div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/2972398345099268358/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/2972398345099268358" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/2972398345099268358"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/2972398345099268358"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/02/archiving-hardware-projects.html" title="Archiving hardware projects"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_A37qHS8SIBr146GTQt5yyNg3AENYhRcyj6vAbQCCJeCaSpXI5Mh8IiMRhQMYLGqtqoIeGhgFK5VarUgScWfPV_jlhcyZEXdbtcjUCIgpdz6WG903sxPYD6g9c3rG3hyphenhyphenNcf06m0cyeKQn1OkAVMy_4fFLoiDbNAs1Z2KhlFET2S_rDJY9yZpc1w/s72-w573-h640-c/dataman5.jpg" height="72" width="72"/>
<thr:total>0</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-3528602294442713744</id>
<published>2025-02-09T20:28:00.008+00:00</published>
<updated>2025-07-28T14:28:23.275+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="retro"/>
<title type="text">Getting the KIM-1 to talk to my Mac</title>
<content type="html"><p>I've written before about <a href="https://blog.jgc.org/2023/11/my-1976-kim-1.html">my 1976 KIM-1</a> and <a href="https://blog.jgc.org/2013/04/how-i-coded-in-1985.html">code I wrote</a> for a similar one long ago. But I hadn't done much with the KIM-1 and strongly believe that old hardware need to be living machines not still lives. But using the KIM-1 directly (via its keypad and little hexadecimal display) is painful. I wanted to be able to use it with a terminal.</p><p>Luckily, the KIM-1 was designed to interface to a terminal: a <a href="https://en.wikipedia.org/wiki/Teletype_Model_33">Model 33 ASR Teletype</a>. Teletypes use a type of interface which is unusual to most people (unless you work with industrial machinery where it's pretty common). That interface is a <a href="https://en.wikipedia.org/wiki/Digital_current_loop_interface">current loop</a>.</p><p>A current loop uses current (often 20mA) rather than voltage (such as the voltage levels seen in common serial interfaces). Prior to the creation of <a href="https://en.wikipedia.org/wiki/RS-232">RS-232</a>, current loops were very common. Current loops are still used in industrial settings partly because they have good noise immunity, can go for long distances, and are simple and reliable.&nbsp;</p><p>In the KIM-1 manual there's a picture of the way its current loop works when connected to a Teletype:&nbsp;</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNI4PoUrRp6VTMXV5sTj-cbd5KxPR0J4kMurosS_YawM1EPLVcKsq-4MIVitMa48NSS9nPgfYU2eui9t6UcwwHXSjzVwrYUIVmGWC1Ex7jFBgjyKnJ0sY7WpVmCbloaGjL5zeRAwX6XtS4l_lHwH88ihpgZ-awjCfDIcFdgCvBJ4MZ-b3pQydWNg/s1368/kim-1-1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1176" data-original-width="1368" height="550" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNI4PoUrRp6VTMXV5sTj-cbd5KxPR0J4kMurosS_YawM1EPLVcKsq-4MIVitMa48NSS9nPgfYU2eui9t6UcwwHXSjzVwrYUIVmGWC1Ex7jFBgjyKnJ0sY7WpVmCbloaGjL5zeRAwX6XtS4l_lHwH88ihpgZ-awjCfDIcFdgCvBJ4MZ-b3pQydWNg/w640-h550/kim-1-1.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">When the KIM-1 wants to send data to the Teletype it uses pins S and U of one of its edge connectors. S is permanently connected to +5V via a 150 ohm resistor. When the KIM-1 receives data from the Teletype's keyboard it uses pins R and T. Just like S, R is permanently connected to +5V. The important thing to note is that the KIM-1 is responsible for the current: the Teletype is entirely "dumb". This will matter later in this blog post.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">I happened to have lying around <a href="https://www.horter-shop.de/de/rs232-tty-adapter-passiv/151-bausatz-rs232-tty-adapter-passiv-4260404260127.html">a kit to make an adapter between RS-232 and the Siemens SIMATIC S5 current loop</a>.&nbsp;</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAeSbQlVy8BJolG0uDvmgGgtdDsoDFLV6Qo0sHrg-iVI8P0stXBdUg_HsRJqAAIToLVMsjMQu0EQeDfhja17tH9se1YtZXs3yccjPKcwmIUILqzB0I9xizoo8U7jLx_JXb8q2uenEPW7Tc_hv3sGrj7G9CRuep8WmkpyU13Beigo4jbMFZxiAjZw/s982/kim-1-2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="946" data-original-width="982" height="616" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAeSbQlVy8BJolG0uDvmgGgtdDsoDFLV6Qo0sHrg-iVI8P0stXBdUg_HsRJqAAIToLVMsjMQu0EQeDfhja17tH9se1YtZXs3yccjPKcwmIUILqzB0I9xizoo8U7jLx_JXb8q2uenEPW7Tc_hv3sGrj7G9CRuep8WmkpyU13Beigo4jbMFZxiAjZw/w640-h616/kim-1-2.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">A simple kit to build. Since USB to RS-232 adapters are easy to find I'd be able to communicate with the KIM-1 using it. But first check the circuit diagram of this adapter. There's a small problem on the receive side.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCYmSOPwceRgzMBw50FJPAOYpZdhpJp0Yh3WhN120WAo6qEHLwzn2a5CwFTXAYINa_36dofqGtjI7RXdbVWbcVenGRU4f7f6l-Mhb7lc0DEYEc6aicS7EFNqWhg6ynje8sxQcqZQVyWujO1ARaJUotW1M8gijQh0X27xcgnN3y32U5FNllgFWX7A/s1758/kim-1-3.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="874" data-original-width="1758" height="318" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCYmSOPwceRgzMBw50FJPAOYpZdhpJp0Yh3WhN120WAo6qEHLwzn2a5CwFTXAYINa_36dofqGtjI7RXdbVWbcVenGRU4f7f6l-Mhb7lc0DEYEc6aicS7EFNqWhg6ynje8sxQcqZQVyWujO1ARaJUotW1M8gijQh0X27xcgnN3y32U5FNllgFWX7A/w640-h318/kim-1-3.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">As is pretty common with current loop applications, optoisolators are used. OK1 handles when the device connected to the RS-232 transmits something. And you can see from the diagram, it expects to be getting 5V, 20mA in on its pin 5 and then out again on pin 4. So, that'll work perfectly for the "keyboard" connection to the KIM-1 (pins R and T).&nbsp;</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">But the receive side is a different story. It's handled by OK2 and it's expecting 5V, 20mA on pin 1, but pin 2 goes to GND. So, there's no "loop" back to the device. This won't work with the KIM-1 without a small modification.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">I built the kit and and tested it against the KIM-1 like this:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghrUvvLUgSr3RZhod4XiIyxt8viOVH-NQwoLikQMDsZM6jf17czwBXfMYjJKhiB0DeTZMp8ryHVitx-8g1TolmqxAhxfE633YHYpoGBidPl1hcs3eBGgcPeGpE1VULmDIXNxOPGk9D5eiRK7TfxMcWc7uvnXLm3Ht7pP5gBBIq9Ms93bhuvCgyDg/s1280/kim-1-4.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="744" data-original-width="1280" height="372" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghrUvvLUgSr3RZhod4XiIyxt8viOVH-NQwoLikQMDsZM6jf17czwBXfMYjJKhiB0DeTZMp8ryHVitx-8g1TolmqxAhxfE633YHYpoGBidPl1hcs3eBGgcPeGpE1VULmDIXNxOPGk9D5eiRK7TfxMcWc7uvnXLm3Ht7pP5gBBIq9Ms93bhuvCgyDg/w640-h372/kim-1-4.jpg" width="640" /></a></div><div><br /></div>Looks messy but it validated the little modification I needed to make and that I could talk to the KIM-1. Here it is talking at 300 baud using the RS-232 to USB adapter seen above.&nbsp;<div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQxkZf-cbzjvBVaBvQGWO3XeLjzf6k7kzf0uM0sczMbzcLYzSoZ6sUXsg47ey0zq4VautycgRmuAz1MVwBIbrS01NywuIKJZSoBvvnj7T8kEP8kzpBBPmwndpaBqp7JpibNfBRYRGlHQHh0MShzorcPoQYeN541YcXG3gK__dTB5kvdR6lw3bnUg/s1146/kim-1.gif" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1020" data-original-width="1146" height="570" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQxkZf-cbzjvBVaBvQGWO3XeLjzf6k7kzf0uM0sczMbzcLYzSoZ6sUXsg47ey0zq4VautycgRmuAz1MVwBIbrS01NywuIKJZSoBvvnj7T8kEP8kzpBBPmwndpaBqp7JpibNfBRYRGlHQHh0MShzorcPoQYeN541YcXG3gK__dTB5kvdR6lw3bnUg/w640-h570/kim-1.gif" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both; text-align: left;">So, what's the modification? Well, pin 2 of OK2 goes to ground and we don't want it to, we want it to go the KIM-1's pin U. There are two ways to do this. I could have cut the track on the back of the board that goes from pin 2 to ground, and soldered a wire on the back.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixwnVKqFHl5uFIx6voI_JNpHEdW1WRpV8-zv4w6QydXJ0CTPSLced0JGZgZe8rucLGJG_AqZJzDk2V-7iC1kYzi7o0i-OmKObeNXGq_CjBaSxcbPX0VlK_eGEznspzc6nZ-btpSZdkyL9NZ-6lChzPpcZCz-rEFODbiN5WSQT-jCdVHbTbizarkQ/s540/kim-1-5.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="488" data-original-width="540" height="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixwnVKqFHl5uFIx6voI_JNpHEdW1WRpV8-zv4w6QydXJ0CTPSLced0JGZgZe8rucLGJG_AqZJzDk2V-7iC1kYzi7o0i-OmKObeNXGq_CjBaSxcbPX0VlK_eGEznspzc6nZ-btpSZdkyL9NZ-6lChzPpcZCz-rEFODbiN5WSQT-jCdVHbTbizarkQ/s320/kim-1-5.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">But this kit came with all the chips socketed so I took an even simpler route. Bend pin 2 away from the socket and solder directly to it.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdUEHXkzdm5jFklLlLDNbtbLnPCKx7RELxbJMLj2-0lGW7nFmcOD_qzOp8UReQ7tyMTTbaHtjA6_NlwUd0O4Cr48_2T60ZVRf8CGEpAfcjv8qECa7aFXoOFy5kLvMUBa3ZOE_y8ng7kDFry6PALL4aB2aTxRl9kDjWP9ubNAC_l4cs3rrUBAtEvQ/s3193/kim-1-6.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2698" data-original-width="3193" height="540" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdUEHXkzdm5jFklLlLDNbtbLnPCKx7RELxbJMLj2-0lGW7nFmcOD_qzOp8UReQ7tyMTTbaHtjA6_NlwUd0O4Cr48_2T60ZVRf8CGEpAfcjv8qECa7aFXoOFy5kLvMUBa3ZOE_y8ng7kDFry6PALL4aB2aTxRl9kDjWP9ubNAC_l4cs3rrUBAtEvQ/w640-h540/kim-1-6.jpg" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">And that worked fine. The kit also came with a nice little box and so the final adapter looks neat.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfUeBT17s3TjORhTssUtiUGLaW1M_CpBMrWIwnNG737fVgehQnvGZ9-9VoHNNFOeDzNCtUrjQwO82_4VMayPlsyQhOwI23jMH-1rPcHCzkVWi9ZkJe8T1zICJAcAjRnyJaqNyr8ZZj7IRLZn3ivPDXWUQFV5VkuNaKU1H-cSDk07jFKqq6it_PxQ/s1280/kim-1-7.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfUeBT17s3TjORhTssUtiUGLaW1M_CpBMrWIwnNG737fVgehQnvGZ9-9VoHNNFOeDzNCtUrjQwO82_4VMayPlsyQhOwI23jMH-1rPcHCzkVWi9ZkJe8T1zICJAcAjRnyJaqNyr8ZZj7IRLZn3ivPDXWUQFV5VkuNaKU1H-cSDk07jFKqq6it_PxQ/w640-h480/kim-1-7.jpeg" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">The grey wire goes to the KIM-1, the white wire is a USB-A cable that I'm using to power the adapter and the KIM-1 itself.&nbsp;</div><div class="separator" style="clear: both; text-align: left;"><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRNc94lv50bDs6CSJnYk8rEeC9wAiQlf_tIUCAgHw203ey4NJwxBF8MyhroSH1TyB6FPqsk4i4VTQGUbQwYcXBGvlCv5fI6P0qOYMcE5sB2t3VDm-ebZY-iMjZgWndXe2Gs5_bY4cHcwNNUpXKMBr8GXj-C_dkNU7oDPRYYKoqrgdfJQOBb1nDTw/s1280/kim-1-8.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRNc94lv50bDs6CSJnYk8rEeC9wAiQlf_tIUCAgHw203ey4NJwxBF8MyhroSH1TyB6FPqsk4i4VTQGUbQwYcXBGvlCv5fI6P0qOYMcE5sB2t3VDm-ebZY-iMjZgWndXe2Gs5_bY4cHcwNNUpXKMBr8GXj-C_dkNU7oDPRYYKoqrgdfJQOBb1nDTw/w640-h480/kim-1-8.jpeg" width="640" /></a></div><br /></div><div>The KIM-1 will happily communicate as 1200 baud with 7 bit ASCII and 2 stop bits. I'm using minicom to communicate with it. The main thing is to set the delete key to send DEL instead of BS since the KIM-1 needs to receive a DEL on start up so that it can measure the Mac's transmission speed.</div><div><br /></div><div>One of the Teletype functions available is to load a program from punched tape. I don't have an actual Teletype but I can emulate the punched tape format and that'll allow me to upload programs easily.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9IJ_wZJFKEaDD5UhZ_cb3FiMO9IHgOfrMnrKOQjYdMuSvZNwO7cxND1M774qpg639z71zcWxWUPrvc-YFYLWIS5SdfzlZ0nMFZpaUKHE5JANoIwmHLXEa6NDE-oAkgwPyukU3RtHTmdhisdCeYCaD_SgRDAldBPtge1gbSAbM8XLe-hQEccRrqg/s1208/kim-1-9.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1208" data-original-width="1016" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9IJ_wZJFKEaDD5UhZ_cb3FiMO9IHgOfrMnrKOQjYdMuSvZNwO7cxND1M774qpg639z71zcWxWUPrvc-YFYLWIS5SdfzlZ0nMFZpaUKHE5JANoIwmHLXEa6NDE-oAkgwPyukU3RtHTmdhisdCeYCaD_SgRDAldBPtge1gbSAbM8XLe-hQEccRrqg/w538-h640/kim-1-9.png" width="538" /></a></div><br /><div>The format itself is not complicated.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWxEHqPySDq6ch5c9XLYO8NOf7B8x-ExUa0UDgFltgwhqYWDBAyNrgpLmn3EWcnBeWPOcQ6TNOcZOz0ia3TM2MFcvx5ol54r9ENRTb76a_S-jd78mbyl1J85011K7a4wTRgYyTDaPfsOEjdAP-Py9ny5sk-oRxHawHil31r6Wba_QiU8QKcw8etg/s1058/kim-1-10.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1058" data-original-width="1016" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWxEHqPySDq6ch5c9XLYO8NOf7B8x-ExUa0UDgFltgwhqYWDBAyNrgpLmn3EWcnBeWPOcQ6TNOcZOz0ia3TM2MFcvx5ol54r9ENRTb76a_S-jd78mbyl1J85011K7a4wTRgYyTDaPfsOEjdAP-Py9ny5sk-oRxHawHil31r6Wba_QiU8QKcw8etg/w614-h640/kim-1-10.png" width="614" /></a></div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/3528602294442713744/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/3528602294442713744" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/3528602294442713744"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/3528602294442713744"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/02/getting-kim-1-to-talk-to-my-mac.html" title="Getting the KIM-1 to talk to my Mac"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNI4PoUrRp6VTMXV5sTj-cbd5KxPR0J4kMurosS_YawM1EPLVcKsq-4MIVitMa48NSS9nPgfYU2eui9t6UcwwHXSjzVwrYUIVmGWC1Ex7jFBgjyKnJ0sY7WpVmCbloaGjL5zeRAwX6XtS4l_lHwH88ihpgZ-awjCfDIcFdgCvBJ4MZ-b3pQydWNg/s72-w640-h550-c/kim-1-1.png" height="72" width="72"/>
<thr:total>0</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-8168793316207256718</id>
<published>2025-02-03T19:27:00.055+00:00</published>
<updated>2025-02-05T09:50:10.781+00:00</updated>
<title type="text">Twenty years of the "GNU Make Standard Library"</title>
<content type="html"><p>Twenty years ago, on February 3, 2005, I released v1.0.0 of a project I called "GNU Make Standard Library" (GMSL). That <a href="https://sourceforge.net/projects/gmsl/files/GNU%20Make%20Standard%20Library/v1.0.0/">first release</a> can still be found in its original location on SourceForge. I moved the project from SourceForge to <a href="https://github.com/jgrahamc/gmsl">GitHub</a> and newer releases are there. The latest release is <a href="https://github.com/jgrahamc/gmsl/releases/tag/v1.2.2">v1.2.2</a> on March 30, 2024.</p><p>The project has its own homepage at&nbsp;<a href="https://gmsl.jgc.org/">https://gmsl.jgc.org/</a>. The page describes the GMSL as "a collection of functions implemented using native GNU Make functionality that provide list and string manipulation, integer arithmetic, associative arrays, stacks, and debugging facilities."</p><p>GMSL grew out of work that eventually became my book "<a href="https://nostarch.com/gnumake">The GNU Make Book</a>". What can it do?</p><p>Well, things like this:</p><p><span style="font-family: courier;">include gmsl<br /></span><span style="font-family: courier;"><br />VAR&nbsp; &nbsp; := Here is a string with some words in it.<br /></span><span style="font-family: courier;">$(info $(VAR))<br /></span><span style="font-family: courier;"><br /># Convert VAR to lowercase<br /></span><span style="font-family: courier;">LC_VAR := $(call lc,$(VAR))<br /></span><span style="font-family: courier;">$(info $(LC_VAR))<br /></span><span style="font-family: courier;"><br /># Get the length of LC_VAR as a string<br /></span><span style="font-family: courier;">$(info $(call strlen,$(LC_VAR)))</span></p><p><span style="font-family: courier;"># See if VAR and LC_VAR are the same string<br /></span><span style="font-family: courier;">$(info $(if $(call seq,$(VAR),$(LC_VAR)),Same,Different))</span></p><p><span style="font-family: courier;"># Treat LC_VAR as a list and get the last element<br /></span><span style="font-family: courier;">$(info $(call last,$(LC_VAR)))</span></p><p><span style="font-family: courier;"># Get the number of list elements in LC_VAR<br /></span><span style="font-family: courier;">$(info $(call length,$(LC_VAR)))</span></p><p><span style="font-family: courier;"># Apply the strlen function to each element of LC_VAR<br /></span><span style="font-family: courier;">$(info $(call map,strlen,$(LC_VAR)))</span></p><p><span style="font-family: courier;"># Deduplicate the list of lenghts of elements of LC_VAR<br /></span><span style="font-family: courier;">$(info $(call uniq,$(call map,strlen,$(LC_VAR))))</span></p><p><span style="font-family: courier;"># Split LC_VAR on the letter e and replace with 3<br /></span><span style="font-family: courier;">$(info $(call merge,3,$(call split,e,$(LC_VAR))))</span></p><p><span style="font-family: courier;"># Create an associative array mapping the lengths of words<br /></span><span style="font-family: courier;"># in LC_VAR to a count for each length<br /></span><span style="font-family: courier;">increment_aa = $(call set,LC_VAR_AA,$1,$(call&nbsp;</span><span style="font-family: courier;">inc,$(call&nbsp;</span><span style="font-family: courier;">get,LC_VAR_AA,$1)))<br /></span><span style="font-family: courier;">$(call map,increment_aa,$(call map,strlen,$(LC_VAR)))<br /></span><span style="font-family: courier;">dump_key = $(info $1: $(call get,LC_VAR_AA,$1))<br /></span><span style="font-family: courier;">$(call map,dump_key,$(call keys,LC_VAR_AA))</span></p><p>And a whole lot more. The entire GMSL is written using native GNU Make functionality and pull requests are welcome!</p><p>Update 2025-02-05: I decided GMSL was missing a <a href="https://github.com/jgrahamc/gmsl/blob/145bda7295dee873b2c2842f404365857ea24764/__gmsl#L239">fold</a> function so I added it. So, latest release is today, <a href="https://github.com/jgrahamc/gmsl/releases/tag/v1.2.3">v1.2.3</a>.&nbsp;</p></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/8168793316207256718/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/8168793316207256718" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/8168793316207256718"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/8168793316207256718"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2025/02/twenty-years-of-gnu-make-standard.html" title="Twenty years of the "GNU Make Standard Library""/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<thr:total>0</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-8649792458628677830</id>
<published>2024-12-26T15:26:00.003+00:00</published>
<updated>2024-12-26T15:34:02.508+00:00</updated>
<title type="text">The complete text of "All Watched Over by Machines of Loving Grace"</title>
<content type="html"><p>Richard Brautigan's poem "<a href="https://en.wikipedia.org/wiki/All_Watched_Over_by_Machines_of_Loving_Grace">All Watched Over by Machines of Loving Grace</a>" is somewhat well known in tech. circles but I couldn't find a complete PDF of the <a href="https://en.wikipedia.org/wiki/All_Watched_Over_by_Machines_of_Loving_Grace_(poetry_collection)">original 1967 publication of it (and other poems)</a> online.&nbsp;</p><p>The copyright notice in Brautigan's collection reads:</p><p><span style="font-family: courier;">&nbsp;&nbsp;© Copyright 1967 by Richard Brautigan&nbsp;</span></p><p><span style="font-family: courier;"><span>&nbsp;&nbsp;</span>Permission is granted to reprint<br /><span>&nbsp; </span>any of these poems in magazines,<br /><span>&nbsp; </span>books and newspapers if they are<br /><span>&nbsp; </span>given away free.&nbsp;</span></p><p>I am interpreting "print" as including the availability of a free PDF and making a scan of the complete book available here.&nbsp;</p><div class="separator" style="clear: both; text-align: center;"><a href="https://jgc.org/awobmolg-1967.pdf" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1676" data-original-width="1392" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGhScUr9y4lWyAZs6B-j7QtJjfqFmt-VrOpfII9BIJYzoGDGCtdUYR0pffEwSIWwDUrIBaj57cz5Uluj8CG1hzA8Oi6Vyvm9Bc3wcDkAxucLJQJGrQHOOYLfwIE0zc-JsnuKfAkwrxQPe1N1RdLV7uOhfQD84r6oCgMuq39ZxVXOTT3sNgxGv9CA/w532-h640/Screenshot%202024-12-26%20at%2015.24.00.png" width="532" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/8649792458628677830/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/8649792458628677830" title="1 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/8649792458628677830"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/8649792458628677830"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2024/12/the-complete-text-of-all-watched-over.html" title="The complete text of "All Watched Over by Machines of Loving Grace""/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGhScUr9y4lWyAZs6B-j7QtJjfqFmt-VrOpfII9BIJYzoGDGCtdUYR0pffEwSIWwDUrIBaj57cz5Uluj8CG1hzA8Oi6Vyvm9Bc3wcDkAxucLJQJGrQHOOYLfwIE0zc-JsnuKfAkwrxQPe1N1RdLV7uOhfQD84r6oCgMuq39ZxVXOTT3sNgxGv9CA/s72-w532-h640-c/Screenshot%202024-12-26%20at%2015.24.00.png" height="72" width="72"/>
<thr:total>1</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-8901769136152952921</id>
<published>2024-12-15T16:15:00.003+00:00</published>
<updated>2024-12-15T16:16:23.395+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/>
<title type="text">badkeming: a site for kerning so bad it's keming</title>
<content type="html"><p>I made another silly Tumblr (to go along with <a href="https://moviecode.tumblr.com/">Movie Code</a> and <a href="https://lowbackgroundsteel.ai/">Low Background Steel</a>). This times it's a Tumblr for all those font disasters and other typographical amusements. Welcome to the wonderful world of <a href="https://badkeming.com">badkeming.com</a>:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://badkeming.com" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1428" data-original-width="2174" height="420" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOnAi31wLwP1beQLc-ylj8D2VpWVsJQkuyVcUMViFFpppM7BmbNgrB36PQWpxETwYpIP2PjkoJ-DnsDabdn5UOJoNvy-vh6oPlh2cISzOiqj-vmc-zfHKzSasC8ZamjWl7vwXU5ee2V7Jfj5wuQEBgfyOniA_1_3Z_RuTDFPv3zmTQVugR1HjOZA/w640-h420/badkeming-1.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Submissions gladly accepted.</div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/8901769136152952921/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/8901769136152952921" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/8901769136152952921"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/8901769136152952921"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2024/12/badkeming-site-for-kerning-so-bad-its.html" title="badkeming: a site for kerning so bad it's keming"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOnAi31wLwP1beQLc-ylj8D2VpWVsJQkuyVcUMViFFpppM7BmbNgrB36PQWpxETwYpIP2PjkoJ-DnsDabdn5UOJoNvy-vh6oPlh2cISzOiqj-vmc-zfHKzSasC8ZamjWl7vwXU5ee2V7Jfj5wuQEBgfyOniA_1_3Z_RuTDFPv3zmTQVugR1HjOZA/s72-w640-h420-c/badkeming-1.png" height="72" width="72"/>
<thr:total>0</thr:total>
</entry>
<entry>
<id>tag:blogger.com,1999:blog-19303585.post-4119179139891431895</id>
<published>2024-12-08T17:24:00.004+00:00</published>
<updated>2024-12-08T17:28:43.687+00:00</updated>
<category scheme="http://www.blogger.com/atom/ns#" term="anti-spam"/>
<title type="text">"All your base are belong to us" introduction to my 2004 MIT Spam Conference talk</title>
<content type="html"><p>As I've mentioned before <a href="https://blog.jgc.org/2023/07/how-to-beat-adaptivebayesian-spam.html">my talk at the 2004 MIT Spam Conference</a> was about using one machine learning system to beat another. In that case a spammer using machine learning to beat a machine learning spam filter.</p><p>The talk started with a short video playing off the <a href="https://en.wikipedia.org/wiki/All_your_base_are_belong_to_us">All your base are belong to us</a> meme. I very carefully edited the images to change the text to be about spam and incorporate Paul Graham (who was the instigator of the MIT Spam Conference and an <a href="https://paulgraham.com/spam.html">early machine learning spam filter pioneer</a>).&nbsp;</p><p>I thought I'd <a href="https://blog.jgc.org/2023/05/bringing-popfile-web-site-back-from-dead.html">lost the audio of that introduction</a> and randomly came across it today. So here is the restored introduction to the talk made on a Mac in 2004 (I still haven't found the audio of the actual talk).</p>
<div style="padding-top: 56.25%; position: relative;">
<iframe allow="accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;" allowfullscreen="true" loading="lazy" src="https://customer-rww76yind8iym5aw.cloudflarestream.com/41a0f39e1f9d7fcde6dd32bacf628437/iframe?poster=https%3A%2F%2Fcustomer-rww76yind8iym5aw.cloudflarestream.com%2F41a0f39e1f9d7fcde6dd32bacf628437%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D%26height%3D600" style="border: none; height: 100%; left: 0; position: absolute; top: 0; width: 100%;"></iframe></div></content>
<link rel="replies" type="application/atom+xml" href="http://blog.jgc.org/feeds/4119179139891431895/comments/default" title="Post Comments"/>
<link rel="replies" type="text/html" href="http://www.blogger.com/comment/fullpage/post/19303585/4119179139891431895" title="0 Comments"/>
<link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/4119179139891431895"/>
<link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/19303585/posts/default/4119179139891431895"/>
<link rel="alternate" type="text/html" href="http://blog.jgc.org/2024/12/all-you-base-are-belong-to-us.html" title=""All your base are belong to us" introduction to my 2004 MIT Spam Conference talk"/>
<author>
<name>Unknown</name>
<email>[email protected]</email>
<gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="https://img1.blogblog.com/img/b16-rounded.gif"/>
</author>
<thr:total>0</thr:total>
</entry>
</feed>
<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-19303585</id><updated>2026-06-09T06:39:10.148+00:00</updated><category term="pseudo-randomness"/><category term="hardware"/><category term="babbage"/><category term="gaga"/><category term="anti-spam"/><category term="gnu make"/><category term="retro"/><category term="security"/><category term="codes and ciphers"/><category term="the geek atlas"/><category term="rants and raves"/><category term="alan turing"/><category term="hits"/><category term="mathematics"/><category term="calculators"/><category term="climate change"/><category term="clocks"/><category term="minitel"/><category term="perl"/><category term="google go"/><category term="toys"/><category term="behind the screens"/><category term="machine learning"/><category term="babygaga"/><category term="games"/><category term="arc"/><category term="my services"/><category term="popfile"/><category term="radio"/><category term="cansole"/><category term="facebook"/><category term="privacy"/><category term="knx"/><category term="well... actually"/><title type='text'>John Graham-Cumming's blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.jgc.org/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default?start-index=26&max-results=25'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>537</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-19303585.post-1852883091736792774</id><published>2026-05-12T15:55:46.568+00:00</published><updated>2026-05-18T17:16:14.439+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/><title type='text'>The aperiodic table</title><content type='html'><p><a href="https://xkcd.com/3242/">XKCD 3242</a> is titled "The aperiodic table" and looks like this:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://xkcd.com/3242/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="928" data-original-width="1480" height="402" src="https://blogger.googleusercontent.com/img/a/AVvXsEjfPGtFHYt3RAe9oehopqvy4J0CBNA5RQzgAS3B_n1HR17DUyT40eGRS5ZlvYvKQD5OJp3d0F-XulGQIs7ncOQ_q8UoHlMX5LRhc9Ne_IA7QytCRwVz2YQyfQFIXk5upm8S5C1-w7R0E40PNNTRd0acI-uLilVH4xaKLpB8P1Wz-EvApG3D_m16wQ=w640-h402" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>Which is cool, but it's not <a href="https://en.wikipedia.org/wiki/Aperiodic_tiling">aperiodic</a> like a <a href="https://en.wikipedia.org/wiki/Penrose_tiling">Penrose tiling</a>. So, with a little (a lot) of help from Claude I created&nbsp;<a href="http://aperiodictable.com">aperiodictable.com</a>: your one true resource for the periodic table on a <a href="https://en.wikipedia.org/wiki/Penrose_tiling#Rhombus_tiling_(P3)">Penrose P3</a> tiling. Click and drag the canvas to place the periodic table wherever you fancy. Hit Print to print your own Aperiodic Table.<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://aperiodictable.com" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1302" data-original-width="1946" height="428" src="https://blogger.googleusercontent.com/img/a/AVvXsEht1-8t9H5Oo4Mm-N1gQN1Dq7hrbtTLQez6dcdqWe3ayKgRuQm7o0tHZiIxyAV8mtunKwgsy1abIDuALpr4SEUbbOR6JfVin854qNEWQ6_CoBhnoE8laFdSL7nuKCF15ecOgEDmJxb7SF7i-vYZzcsiHdRXhEmUcV0rmHmtUmbZ1YaUdrs967LDhA=w640-h428" width="640" /></a></div><br />It's a single page that's hosted on <a href="https://pages.cloudflare.com">Cloudflare Pages</a>.<p></p></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/1852883091736792774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/1852883091736792774' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/1852883091736792774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/1852883091736792774'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2026/05/the-aperiodic-table.html' title='The aperiodic table'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjfPGtFHYt3RAe9oehopqvy4J0CBNA5RQzgAS3B_n1HR17DUyT40eGRS5ZlvYvKQD5OJp3d0F-XulGQIs7ncOQ_q8UoHlMX5LRhc9Ne_IA7QytCRwVz2YQyfQFIXk5upm8S5C1-w7R0E40PNNTRd0acI-uLilVH4xaKLpB8P1Wz-EvApG3D_m16wQ=s72-w640-h402-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-3060475110203474364</id><published>2026-04-14T10:22:00.006+00:00</published><updated>2026-04-14T11:00:05.405+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hardware"/><category scheme="http://www.blogger.com/atom/ns#" term="security"/><title type='text'>Raspberry Pi as an isolated AI coding server</title><content type='html'><p>I've been working quite a bit with Claude Code and OpenCode on a <a href="https://github.com/jgrahamc/koolenex">project</a>&nbsp;and really wanted a way to run both without having to constantly approve use of tools. That's quite possible with Claude's <span style="font-family: courier;">claude&nbsp;--permission-mode bypassPermissions</span>&nbsp;[1] (I'd like to use <span style="font-family: courier;">claude --enable-auto-mode</span> but it's not available on my plan level (Max) [2]).</p><p>But, either way, I don't want Claude or OpenCode doing whatever they wants on my <a href="https://blog.jgc.org/2024/01/my-daily-driver-is-older-than-i-thought.html">main machine</a>. Various options exist: VMs, containers, sandboxes. Some people seem to have decided that a <a href="https://www.apple.com/mac-mini/">Mac mini</a> is how you run AI tools (such as <a href="https://openclaw.ai">OpenClaw</a>). But for what I'm doing a <a href="https://www.raspberrypi.com/products/raspberry-pi-5/">Raspberry Pi 5</a> works fine.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiQNuXX8T1iMr1QHQe2zgfOW_3ZVaMN7Yp1XiruFwDqJdvYcqI8it3jMw_DuRFkXAass_aEy2qsPQj9CNPEcy4oMkBFHGn0YXMsXNzr9QwNbwet8beQubcCr_hidzA7B7m4oyum1KK6zfrVBQY_heFdEOrs-kyrxA5sguooXB1YNWpYOgrTrL0eww" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="935" data-original-width="1280" height="293" src="https://blogger.googleusercontent.com/img/a/AVvXsEiQNuXX8T1iMr1QHQe2zgfOW_3ZVaMN7Yp1XiruFwDqJdvYcqI8it3jMw_DuRFkXAass_aEy2qsPQj9CNPEcy4oMkBFHGn0YXMsXNzr9QwNbwet8beQubcCr_hidzA7B7m4oyum1KK6zfrVBQY_heFdEOrs-kyrxA5sguooXB1YNWpYOgrTrL0eww=w400-h293" width="400" /></a></div><p></p><p>The set up is as follows:</p><p><span>&nbsp;&nbsp; &nbsp;</span>Raspberry Pi 5 16GB</p><p><span>&nbsp;&nbsp; &nbsp;</span>Joy-IT aluminium case with fan</p><p><span>&nbsp; &nbsp; Debian Trixie installed via the <a href="https://www.raspberrypi.com/software/">Raspberry Pi Imager</a></span><br /></p><p><span><span>&nbsp; &nbsp; root password set on Raspberry Pi and default user removed from&nbsp;</span>sudoers by deleting&nbsp;<span style="font-family: courier;">/etc/sudoers.d/010_pi-nopasswd</span></span></p><p><span><span>&nbsp; &nbsp; Claude Code run with <span style="font-family: courier;">bypassPermissions</span></span><br /></span></p><p><span><span><span>&nbsp; &nbsp; A new SSH key on the Raspberry Pi for GitHub access</span><br /></span></span></p><p><span><span><span><span>&nbsp; &nbsp; <span style="font-family: courier;">iptables</span> firewall preventing local network access but allowing Internet and incoming SSH</span><br /></span></span></span></p><p><span><span><span><span><span>&nbsp; &nbsp; Local network access also blocked on my home network firewall</span><br /></span></span></span></span></p><p><span><span><span><span><span>I SSH into <span style="font-family: courier;">altair-iv</span> and use <a href="https://www.gnu.org/software/screen/">GNU screen</a> to leave my Claude or OpenCode session running.&nbsp;</span></span></span></span></span></p><p><span><span><span><span><span></span></span></span></span></span></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><span><span><span><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhF64mvn4sRwYU6ebyUm3pZcZou6elLIK-QSeM3vzO4wngSrwQVHuWCHokw9SvLcjI2gRr--Vx65F9TMb8_Z6t4KAEOeB1sYOudtLUxIA29vUgWa68AnWXnufimg8pfclvR78WAiBC7qc1LW0H55_DXECBDpraUsYSvdCxHR0SW_C1nIVMIdWSNcw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="664" data-original-width="1938" height="220" src="https://blogger.googleusercontent.com/img/a/AVvXsEhF64mvn4sRwYU6ebyUm3pZcZou6elLIK-QSeM3vzO4wngSrwQVHuWCHokw9SvLcjI2gRr--Vx65F9TMb8_Z6t4KAEOeB1sYOudtLUxIA29vUgWa68AnWXnufimg8pfclvR78WAiBC7qc1LW0H55_DXECBDpraUsYSvdCxHR0SW_C1nIVMIdWSNcw=w640-h220" width="640" /></a></span></span></span></div><span><span><span><br /></span></span></span></div><p></p><p>Supply chain attacks also worry me and running this isolated development server helps isolated the blast radius. Plus for npm I am running with:&nbsp;</p><div style="text-align: left;"><span style="font-family: courier;">&nbsp; &nbsp; krell@altair-iv:~ $ cat .npmrc<br /></span><span style="font-family: courier;">&nbsp; &nbsp; save-exact=true<br /></span><span style="font-family: courier;">&nbsp; &nbsp; ignore-scripts=true<br /></span><span style="font-family: courier;">&nbsp; &nbsp; min-release-age=21</span></div><p style="text-align: left;">[1]&nbsp;<a href="https://code.claude.com/docs/en/permission-modes#skip-all-checks-with-bypasspermissions-mode">https://code.claude.com/docs/en/permission-modes#skip-all-checks-with-bypasspermissions-mode</a></p><p>[2]&nbsp;<a href="https://code.claude.com/docs/en/permission-modes#eliminate-prompts-with-auto-mode">https://code.claude.com/docs/en/permission-modes#eliminate-prompts-with-auto-mode</a></p></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/3060475110203474364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/3060475110203474364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/3060475110203474364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/3060475110203474364'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2026/04/raspberry-pi-as-isolated-ai-coding.html' title='Raspberry Pi as an isolated AI coding server'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiQNuXX8T1iMr1QHQe2zgfOW_3ZVaMN7Yp1XiruFwDqJdvYcqI8it3jMw_DuRFkXAass_aEy2qsPQj9CNPEcy4oMkBFHGn0YXMsXNzr9QwNbwet8beQubcCr_hidzA7B7m4oyum1KK6zfrVBQY_heFdEOrs-kyrxA5sguooXB1YNWpYOgrTrL0eww=s72-w400-h293-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-6997313712403024466</id><published>2026-04-03T13:23:00.009+00:00</published><updated>2026-04-03T13:24:44.238+00:00</updated><title type='text'>Maistro</title><content type='html'><p>Back in 2012 I wrote a blog post titled just <a href="https://blog.jgc.org/2012/02/programmer.html">Programmer</a> about both my job title and a <a href="https://cloudflare.com/">company</a> I'd just joined as a Programmer. I was very happy to be called a Programmer until quite recently. In the last few months, with the assistance of AIs like Kimi 2.5 and Claude, I've become something else. Something that uses my experience as a programmer by amplifies it massively. And, at the same time, makes me spend most of my time on the design and features of what I'm building and not the code.&nbsp;</p><p>What is this called?</p><p>Maybe it's a still a "software engineer" (for those who like that title). But the engineering is being done with new tools. But I don't think that quite captures it because the balance between the "writing code" and "designing architecture and choosing features" has shifted to the latter.&nbsp;</p><p>I'm more like the conductor of an orchestra but working with two AIs (one writing code, the other writing tests) to get <a href="https://github.com/jgrahamc/koolenex">something</a> built rather than getting an orchestra of many to produce something beautiful. But conductor still doesn't feel quite right because this new job is heavily skewed towards creation (and not interpretation and expression).</p><p>I think the right word is a "maestro" or, if the pun can be forgiven, a maistro.</p><p><b>maistro</b> (n): a software engineer who uses AI tools to create software by focusing on design, architecture, testing, and features.</p></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/6997313712403024466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/6997313712403024466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/6997313712403024466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/6997313712403024466'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2026/04/maistro.html' title='Maistro'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-6143991865295400825</id><published>2026-01-28T15:37:00.003+00:00</published><updated>2026-01-28T15:37:51.735+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hardware"/><category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/><category scheme="http://www.blogger.com/atom/ns#" term="rants and raves"/><title type='text'>The European Schuko socket bothers me</title><content type='html'>Because it isn't polarized, and that can lead to a situation where something is switched "off" but there's 230V of electricity still present. Take a look at this thing:<div><br /><div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiffPt8Btf9iU6HNzwJgy0spCeMlst_Ak2eGjrlM_WltdzMusspYt3AxoxQmjdVAzQthY4xg8of_cQdF4y8R3BK9AvhVZ28qJoKCKeqplSmImH8Z-GBlYcmsZo3h9qzZWL_EcY1rAvtY28Hw8Gpr_rlgnXHwaeKowkiAbDqScGuDva1JywuFgTmMg" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1072" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEiffPt8Btf9iU6HNzwJgy0spCeMlst_Ak2eGjrlM_WltdzMusspYt3AxoxQmjdVAzQthY4xg8of_cQdF4y8R3BK9AvhVZ28qJoKCKeqplSmImH8Z-GBlYcmsZo3h9qzZWL_EcY1rAvtY28Hw8Gpr_rlgnXHwaeKowkiAbDqScGuDva1JywuFgTmMg=w611-h640" width="611" /></a></div><br /></div></div><div>At the bottom you have a standard European Schuko socket and&nbsp;Plugged into the socket is the power strip on the right. Plugged into the power strip is the lightbulb on the left that I've mounted and wired so I can measure the voltages between live, neutral and earth.&nbsp;</div></div></div><div><br /></div><div>Above the power is on to the strip, but the switch in the power strip for the light off. Unsurprisingly, the lightbulb is lit off. Even less of a surprise is that turning the switch to on lights the light.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi6u_m36dXmE8QpJI7VPf6EWtraNRsmIsUk_HY7hUPhI6yXC49S31JX_JVdUu8NppxENKUzCHEyt5i0ZNnMVTcPeDzRytgkQP71OOxBgA0EQu1fQ1-zf9w9AdpNvYH8-3fm-GoR-bGDb2hrvckqHoVBfKvNFAKR24W3vvcUwECd_55ZZh1AuGp0tA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1076" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEi6u_m36dXmE8QpJI7VPf6EWtraNRsmIsUk_HY7hUPhI6yXC49S31JX_JVdUu8NppxENKUzCHEyt5i0ZNnMVTcPeDzRytgkQP71OOxBgA0EQu1fQ1-zf9w9AdpNvYH8-3fm-GoR-bGDb2hrvckqHoVBfKvNFAKR24W3vvcUwECd_55ZZh1AuGp0tA=w608-h640" width="608" /></a></div></div><div><br /></div><div>For the rest of the blog I'll remove the lightbulb and just concentrate on what voltages are present at the lightbulb holder. When off there's no voltage (or rather a tiny phantom voltage) between live and neutral (brown and blue).</div><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi_ewZc61h0EYQ073qbdGqHZ6nu8JDfxYZd5NFAHzvxo-gRwHeBAGIWpQJDpvP6UWca_SFHHI-c4pV8uwchgC1_fL6LRGz1YqNHFXghRGaB2jtlJCquCynX8YB73CQXN4JeSW-3cUS4ibwEvRfg9W61OHX9IFmO2wwIkuegmLPp6NWgZQ-Vv584aQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1279" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEi_ewZc61h0EYQ073qbdGqHZ6nu8JDfxYZd5NFAHzvxo-gRwHeBAGIWpQJDpvP6UWca_SFHHI-c4pV8uwchgC1_fL6LRGz1YqNHFXghRGaB2jtlJCquCynX8YB73CQXN4JeSW-3cUS4ibwEvRfg9W61OHX9IFmO2wwIkuegmLPp6NWgZQ-Vv584aQ=w512-h640" width="512" /></a></div><br /></div><div>But when the switch is on, the multimeter is showing 230V AC between live and neutral. So, no surprise that the light comes on when the switch is on!</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgFy-p0gRKzxLukQlJOD7UE4wtXTCUUU5A9PNlAT1fBHAySVqqWKMhKzyD0W91TgGpJ5I_0MfX2KQYP2hV7mi5Yg31dJYWQmo7HJ5nrAhlAuadp8F_Neub7biGyc8E76qU8xS5m0-BNx7DG6gvfd8b6wWxO86kfTYNc7X3l4igfbHsn0RXcqEpaDw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1225" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEgFy-p0gRKzxLukQlJOD7UE4wtXTCUUU5A9PNlAT1fBHAySVqqWKMhKzyD0W91TgGpJ5I_0MfX2KQYP2hV7mi5Yg31dJYWQmo7HJ5nrAhlAuadp8F_Neub7biGyc8E76qU8xS5m0-BNx7DG6gvfd8b6wWxO86kfTYNc7X3l4igfbHsn0RXcqEpaDw=w536-h640" width="536" /></a></div><br /></div><div>The same voltage is present between live and earth. In a standard European or UK house the earth and neutral wires are joined together (called "bonded") somewhere close to where the power comes into the house. The live and neutral wires are two halves of the circuit and electricity needs to flow from one to the other for the light to come on. In this standard set up the neutral and earth have (theoretically) the same "potential" of 0V. When the light is on the idea is that electricity flows from the live to the neutral.</div><div><br /></div><div>If you touch live and neutral you'll electrocute yourself, but also if you just touch live because the electricity will run through you to earth.&nbsp;</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjiiGJ90OSmOMlY2TJYIeqHVVQMVO9ic-AMtRBzWj2o9RRxv-K-dRyejY33qahiOtn0RcT-KaMAZS7fqQnWfY2W16Gr6sPbi-UwhljGULwCrxvhHlUjejdZc_1wKIMWnx5DAYUnBFKx81psa3uBmCIZuEJod1eLUhm7ULTh8IzhcxxcNfC_yKXbig" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1161" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEjiiGJ90OSmOMlY2TJYIeqHVVQMVO9ic-AMtRBzWj2o9RRxv-K-dRyejY33qahiOtn0RcT-KaMAZS7fqQnWfY2W16Gr6sPbi-UwhljGULwCrxvhHlUjejdZc_1wKIMWnx5DAYUnBFKx81psa3uBmCIZuEJod1eLUhm7ULTh8IzhcxxcNfC_yKXbig=w565-h640" width="565" /></a></div></div><div><br /></div><div>Between neutral and earth there's close to 0V of difference. The multimeter is showing tiny phantom voltages induced in the wires.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgwoVaLVvqlzAdbeWwrVOH2gi381p6019BEyEVDUvwu4AFIuMcb7wJHEp-e4Lr0GRQTfH0ASi3Cw_PbmxJ9k3vUS-l65OVbXXYFeU4qpNcxon5yQmcF4AmumrSgnnfeDZVe3YHKFfhrTG2rPx7EiXhgRy999RooN2tDiRXeRHqyjKzmi5lGJ_iIFg" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1078" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEgwoVaLVvqlzAdbeWwrVOH2gi381p6019BEyEVDUvwu4AFIuMcb7wJHEp-e4Lr0GRQTfH0ASi3Cw_PbmxJ9k3vUS-l65OVbXXYFeU4qpNcxon5yQmcF4AmumrSgnnfeDZVe3YHKFfhrTG2rPx7EiXhgRy999RooN2tDiRXeRHqyjKzmi5lGJ_iIFg=w608-h640" width="608" /></a></div><br />The important thing to remember is that the voltage in a home is "referenced to earth" and thus will run to earth (potentially through you) given the chance. That's why you get an electric shock if you touch a live wire. The current flows through you to earth. You do not want that to happen. In theory you could touch the neutral wire and not get electrocuted because it's at the same voltage/potential as earth: 0V. BUT DO NOT DO THIS EVER. EVER. YOU DO NOT KNOW THAT NEUTRAL IS ACTUALLY 0V.</div><div><br /></div><div>Take a look at this; all I've done is unplugged the power strip at the bottom and plugged it back in the other way around. Suddenly, there's apparently 230V between neutral and earth, and that's with the power strip turned off!</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgrp6auGj_tmAZIumAxTX8TVE9PNjJjIt4THr2WDN9w5TGGAHuri7a1oUb-GTbVIRH5x8444wOTNRZg9sxPnvJSMKTQvfYliMey6A8uNha5VGnQyHWRt1GB-Xi0jNevzLeco-0-xNYf-bx_Z1zYi661IshmjLzo2GWjn5PxPN1a0R7i3UvcOTdgQw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1121" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEgrp6auGj_tmAZIumAxTX8TVE9PNjJjIt4THr2WDN9w5TGGAHuri7a1oUb-GTbVIRH5x8444wOTNRZg9sxPnvJSMKTQvfYliMey6A8uNha5VGnQyHWRt1GB-Xi0jNevzLeco-0-xNYf-bx_Z1zYi661IshmjLzo2GWjn5PxPN1a0R7i3UvcOTdgQw=w584-h640" width="584" /></a></div><br />That's because the little power switch on the strip does not cut both the live and neutral wires when turned off; it cuts off one of them. If you plug the strip in one way you might get lucky and cut live, but you can easily plug it in the other way round and find that what looks like it's neutral as actually live and has 230V. THIS IS ANOTHER REASON NEVER TO TOUCH SOMETHING YOU THINK IS NEUTRAL. Also, imagine you've turned this off and are changing the lightbulb. The same 230V is present inside the light fitting just waiting for a human finger to become a conductor!</div><div><br /></div><div>You can see that despite there being 230V present the lightbulb does not glow. But there are dangerous voltages present. In fact, with the lightbulb present it's even worse, because the "live" and "neutral" wires coming out of the light fitting are 230V because the 230V has passed through the light and is now present on the wire on the other side of it.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh7kSaQ-HV6o7GxyhKMBNSR37IRD2hLQ1FIf10j5U5_zZrkGqrdaPNVRMj38YYRjGQ3jKykHx_ZZjtZnfxtVNNB-w9DnkSK43giCMdgtgX69to_30j6sKfantMOIv6TvZyfGuXCImCYRyTS-pZXKpnuYCpGDrSb0JWCCEbk9dDnJL70qHREBgfuyA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1028" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEh7kSaQ-HV6o7GxyhKMBNSR37IRD2hLQ1FIf10j5U5_zZrkGqrdaPNVRMj38YYRjGQ3jKykHx_ZZjtZnfxtVNNB-w9DnkSK43giCMdgtgX69to_30j6sKfantMOIv6TvZyfGuXCImCYRyTS-pZXKpnuYCpGDrSb0JWCCEbk9dDnJL70qHREBgfuyA=w637-h640" width="637" /></a></div></div><br />(Ignore the multimeter here as it's not connected).</div><div><br /></div><div>So, in summary:</div><div><br /></div><div>1. DO NOT TOUCH WIRES IN HOUSEHOLD WIRING EVER.</div><div><br /></div><div>2. Do not trust power strip switches to actually remove all dangerous voltages from a device.</div><div><br /></div><div>3. Do unplug things when working on them (e.g. changing a lightbulb)</div><div><br /></div><div>4. Do buy power strips which have switches that cut both wires when off (such as this <a href="https://www.brennenstuhl.com/en-PT/products/extension-leads/extension-lead-individually-switchable-6-way-2m-h05vv-f-3g1.5-white">Brennenstuhl power strip</a>; not an affiliate link or anything, I just use this one <a href="https://blog.jgc.org/2025/06/it-was-time-for-dim-bulb-current-limiter.html">in my lab</a>.).</div><div><br /></div><div>5. Move to a country that uses the <a href="https://en.wikipedia.org/wiki/AC_power_plugs_and_sockets:_British_and_related_types#BS_1363_three-pin_(rectangular)_plugs_and_sockets">one true great power socket of all time</a>&nbsp;</div><div><br /></div><div>OK, that last one's in jest because there are reasonable criticisms of the British plug design, but it, perhaps unreasonably, bothers me that it's possible to turn something off and discover there's 230V present.</div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/6143991865295400825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/6143991865295400825' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/6143991865295400825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/6143991865295400825'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2026/01/the-european-schuko-socket-bothers-me.html' title='The European Schuko socket bothers me'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiffPt8Btf9iU6HNzwJgy0spCeMlst_Ak2eGjrlM_WltdzMusspYt3AxoxQmjdVAzQthY4xg8of_cQdF4y8R3BK9AvhVZ28qJoKCKeqplSmImH8Z-GBlYcmsZo3h9qzZWL_EcY1rAvtY28Hw8Gpr_rlgnXHwaeKowkiAbDqScGuDva1JywuFgTmMg=s72-w611-h640-c" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-8728350909468966560</id><published>2026-01-08T17:47:00.000+00:00</published><updated>2026-01-08T17:47:21.040+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hardware"/><category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/><title type='text'>There's a ridiculous amount of tech in a disposable vape</title><content type='html'><p>So, I'm walking through a park when I see this thing lying on the ground:</p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjLHAvZN5pTy6lttkPt0xM6DD4NekTOzgaux5OEH2CJqXr4iNNBepGLR9_vai3XPxtifwAEp74oqdraP-hzUSnYkIF8xlwREmt92rXu24Ifvy52do0nKEAxCCUIrqZ4mbveQe5q_pg34rSkaIZZ9Ms2DAU9_Q7sF3fx5MmMEI0PfDabMbq8JyLpVw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1675" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEjLHAvZN5pTy6lttkPt0xM6DD4NekTOzgaux5OEH2CJqXr4iNNBepGLR9_vai3XPxtifwAEp74oqdraP-hzUSnYkIF8xlwREmt92rXu24Ifvy52do0nKEAxCCUIrqZ4mbveQe5q_pg34rSkaIZZ9Ms2DAU9_Q7sF3fx5MmMEI0PfDabMbq8JyLpVw=w392-h640" width="392" /></a></div><p></p><p>It's a disposable vape that someone has discarded because it's empty. Specifically, it's a "Fizzy Max III 60K Rechargeable Disposable Vape" and I was about to take it to a bin to throw away when I noticed it had USB-C. I know nothing about vapes so that was a total WTF moment.&nbsp;</p><p>Naturally, I took it home, sanitized it, and plugged it in. Not only did this thing have USB-C and a rechargeable battery, it had a small display showing battery percentage and <strike>poison</strike>&nbsp;vape fluid percentage. It looks kind of cyberpunk.</p><p></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjsjA-_RmfnAD4MPLuroJ4wHwvk4cvmjcSySX9EEpgnjXpXdcw3zY4HJnVE37IsTQFmuosgeCNqlkmLwcpXGYJODw0PcFIQCHrlkr--uKugWMdRGsmJv99chHLLydMGdcRmENl2VJHHHpAayZqLpUWiudlz3-1Nx0nMLGFMtq9Fc___9-KTGYtXxw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="966" data-original-width="903" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEjsjA-_RmfnAD4MPLuroJ4wHwvk4cvmjcSySX9EEpgnjXpXdcw3zY4HJnVE37IsTQFmuosgeCNqlkmLwcpXGYJODw0PcFIQCHrlkr--uKugWMdRGsmJv99chHLLydMGdcRmENl2VJHHHpAayZqLpUWiudlz3-1Nx0nMLGFMtq9Fc___9-KTGYtXxw=w597-h640" width="597" /></a></div><br /></div>I ripped the thing apart and discarded the now empty chambers that had contained the fluid. At the bottom there are two circuit boards and a battery.&nbsp;<div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgeuA-ugb-jkilQuqqqdqahzsxatURb-bVhbEDefg3gXQGFwJ7CiAbElLml7eEw4WdoENR8deMC3W9nF95pQfhZhrHEaulIS_43p_qe0JlRimLDZ2sFP21fZZN9qu4ilJkk_Cl4M826q58NyWjuWB4YokiFVlF6d370rf8VFf6_Ou0p6FbflZSdmA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="3720" data-original-width="3024" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEgeuA-ugb-jkilQuqqqdqahzsxatURb-bVhbEDefg3gXQGFwJ7CiAbElLml7eEw4WdoENR8deMC3W9nF95pQfhZhrHEaulIS_43p_qe0JlRimLDZ2sFP21fZZN9qu4ilJkk_Cl4M826q58NyWjuWB4YokiFVlF6d370rf8VFf6_Ou0p6FbflZSdmA=w520-h640" width="520" /></a></div><br />The battery is an 800 mAh lipo.</div><div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgMuFXNrW0BqhlCeP6Nn6kAb2mtyEgRQPWhAdb6QdN74ULIV79FB_ZGSaBa_6xQwsa_toAZs9lEO6AD6gY6TJMfJ7ug76MGrYCSGnpqw96147u9dgO4MUN_qqOmiKdotYTRKJkdc_CZoNxLIDa6T7nuXdyj08ND0qyfauYbvwEv-dNk4aBpnGTTOA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1660" data-original-width="3682" height="288" src="https://blogger.googleusercontent.com/img/a/AVvXsEgMuFXNrW0BqhlCeP6Nn6kAb2mtyEgRQPWhAdb6QdN74ULIV79FB_ZGSaBa_6xQwsa_toAZs9lEO6AD6gY6TJMfJ7ug76MGrYCSGnpqw96147u9dgO4MUN_qqOmiKdotYTRKJkdc_CZoNxLIDa6T7nuXdyj08ND0qyfauYbvwEv-dNk4aBpnGTTOA=w640-h288" width="640" /></a></div><br />So, wait? This is a disposable device. After 60,000 sucks on the teat you're meant to throw away a battery, display, microprocessor etc. WTF? Turns out that you're meant to recycle it, but it's crazy large amount of technology for nicotine sucking.&nbsp;<br /><div><div><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjxLn1LnkyxyUiZIdkVqPcufsDyJfcUcp8oahk6EOLztqYCCgjlS0jicTzjRkmWjoZHSGHojzcdq9EmnT1cHMDxv-cB8I-dtv40Ykdte_HY3HygCUeN76WbQ9ksRf6uFl5A7JMTYeXBVSsdFPKlummkSxb0_rxNGAwdgurmcSwcVMHZO4nG8xBdVw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1245" data-original-width="2234" height="356" src="https://blogger.googleusercontent.com/img/a/AVvXsEjxLn1LnkyxyUiZIdkVqPcufsDyJfcUcp8oahk6EOLztqYCCgjlS0jicTzjRkmWjoZHSGHojzcdq9EmnT1cHMDxv-cB8I-dtv40Ykdte_HY3HygCUeN76WbQ9ksRf6uFl5A7JMTYeXBVSsdFPKlummkSxb0_rxNGAwdgurmcSwcVMHZO4nG8xBdVw=w640-h356" width="640" /></a></div><p></p><p>On one side you've got three pairs of pins that are inserted into the chambers containing the vape fluid and are controlled by three transistors on the other PCB. These pins heat the fluid making the vape's vapour. They are activated by the three microphones seen in this picture.<br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjSGiv2lodVnAja-FgEdTwFbBvWrhvS3PhGVBh-DD8eDuWQajLat0O5Axrksv3vAxXzNu3xD-c-KQqx6mKqQJxnye7kysJiSU3fqyui6R_4jSOeiEoFmIwv9GcrDgADAgIEPXbpQiUxY_T-mjhSQZ5vZNDZhtuY-W-YX9ReWw1LFH5baH09nTtoeg" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1821" data-original-width="1824" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEjSGiv2lodVnAja-FgEdTwFbBvWrhvS3PhGVBh-DD8eDuWQajLat0O5Axrksv3vAxXzNu3xD-c-KQqx6mKqQJxnye7kysJiSU3fqyui6R_4jSOeiEoFmIwv9GcrDgADAgIEPXbpQiUxY_T-mjhSQZ5vZNDZhtuY-W-YX9ReWw1LFH5baH09nTtoeg=w640-h640" width="640" /></a></div><p>The vape knows you're sucking on the teat in one of six positions by which combination of microphones sense the sucking. This allows it to heat one or two of the chambers providing six flavour combinations.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjcVtgn5G8uYTyXoscQKqcNbkrkdm31UONeeih4MFTJJ6dFDx05u0bKXDta8KdAl9WRoMF7omoKinm8JQSoOB9P5kANYLHzcHUiWin8a2zkgo9q6v8OYFtHyq1kVJHWebJ8Tn0rwMCZWaQV8DfiyosVPPcxOPGMJn6nIxH5ywIjxubJo7kz3eQpyQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="2368" data-original-width="3024" height="502" src="https://blogger.googleusercontent.com/img/a/AVvXsEjcVtgn5G8uYTyXoscQKqcNbkrkdm31UONeeih4MFTJJ6dFDx05u0bKXDta8KdAl9WRoMF7omoKinm8JQSoOB9P5kANYLHzcHUiWin8a2zkgo9q6v8OYFtHyq1kVJHWebJ8Tn0rwMCZWaQV8DfiyosVPPcxOPGMJn6nIxH5ywIjxubJo7kz3eQpyQ=w640-h502" width="640" /></a></div><br />Three transistors and a small chip that controls charging of the battery.&nbsp;<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiaTdsKWhyloD0nOO2sHJczXuP9s2L55fx7sEoejyz_0peaqJBqS4epsViV2OxVkOW_bkO48xuEpecjWOUUrgjzNnRj2YNNqTV1vUgG8HGu31JEheiHWD3-Uf4rAmK8d8TD1jIAStyA3RnYBi6lwcZC2kL855QkDif_bH_2WALWy-auzeBZbqXkAg" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="2831" data-original-width="3024" height="600" src="https://blogger.googleusercontent.com/img/a/AVvXsEiaTdsKWhyloD0nOO2sHJczXuP9s2L55fx7sEoejyz_0peaqJBqS4epsViV2OxVkOW_bkO48xuEpecjWOUUrgjzNnRj2YNNqTV1vUgG8HGu31JEheiHWD3-Uf4rAmK8d8TD1jIAStyA3RnYBi6lwcZC2kL855QkDif_bH_2WALWy-auzeBZbqXkAg=w640-h600" width="640" /></a></div><br />Sadly, despite there being some pretty obvious pads connected to the microprocessor (labelled B0081S1) and the fact that those pads are also connected to the USB-C connecter, I have been unable to talk to it via PyOCD or other tools. I was hoping this was a small ARM device that I might be able to hack.</div></div></div></div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/8728350909468966560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/8728350909468966560' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/8728350909468966560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/8728350909468966560'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2026/01/theres-ridiculous-amount-of-tech-in.html' title='There's a ridiculous amount of tech in a disposable vape'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjLHAvZN5pTy6lttkPt0xM6DD4NekTOzgaux5OEH2CJqXr4iNNBepGLR9_vai3XPxtifwAEp74oqdraP-hzUSnYkIF8xlwREmt92rXu24Ifvy52do0nKEAxCCUIrqZ4mbveQe5q_pg34rSkaIZZ9Ms2DAU9_Q7sF3fx5MmMEI0PfDabMbq8JyLpVw=s72-w392-h640-c" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-3163403587683936353</id><published>2025-12-28T14:33:00.005+00:00</published><updated>2025-12-29T11:59:06.693+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/><category scheme="http://www.blogger.com/atom/ns#" term="security"/><title type='text'>If you care about security you might want to move the iPhone Camera app</title><content type='html'><p>There's a quirk in the iPhone Camera app that can drive a security conscious iPhone owner crazy: if you touch your finger on the Camera app icon without actually opening the app, the camera starts operating. That causes the little green dot indicator on the iPhone to turn on and then after a few seconds disappear. This can easily make a security-conscious iPhone user worry that some app is nefariously using the camera.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh_n7C7-AZVWdKp41tN41JNMVQqj-nzIXSD8K3pHXC9Zijl5Z3wtLA7OXRX0h7QRNDzE6juLUc10qyIoRf_CO5CTF8rtNjuVQ9MkGoDGGrhr-osKlxqOXaNoalhcaVpywdIXsHSCdik2SpothXBzFoLDYKUjKORzLwio-m5KXX7k6tZdacgAyHBzQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="289" data-original-width="1206" height="154" src="https://blogger.googleusercontent.com/img/a/AVvXsEh_n7C7-AZVWdKp41tN41JNMVQqj-nzIXSD8K3pHXC9Zijl5Z3wtLA7OXRX0h7QRNDzE6juLUc10qyIoRf_CO5CTF8rtNjuVQ9MkGoDGGrhr-osKlxqOXaNoalhcaVpywdIXsHSCdik2SpothXBzFoLDYKUjKORzLwio-m5KXX7k6tZdacgAyHBzQ=w640-h154" width="640" /></a></div><p></p><p>Because touching the Camera app icon without opening the app is enough, it's easy to activate the green dot while swiping between screens or even just holding your phone. This was driving me nuts and I thought some app was using the camera when I didn't want it to.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgO6PJijthJhA5iuemg6BWxxH9aWJTKJkI-uGMvvzqJlS-75oqgWNswAYCu-IQgT1aAtx99xL68ZS5vnpUe75OBjvYcnd75a1kflRBQvRHqZI1GaxRxMWwFDjZoz23-Qoxw9JSSOetqbS_Pc_vhm3RajJKRArkHQcUq642qVls9Iv9R23z0QWRytQ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1265" data-original-width="1206" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEgO6PJijthJhA5iuemg6BWxxH9aWJTKJkI-uGMvvzqJlS-75oqgWNswAYCu-IQgT1aAtx99xL68ZS5vnpUe75OBjvYcnd75a1kflRBQvRHqZI1GaxRxMWwFDjZoz23-Qoxw9JSSOetqbS_Pc_vhm3RajJKRArkHQcUq642qVls9Iv9R23z0QWRytQ=w611-h640" width="611" /></a></div><br />I enabled Apple's <i>App Privacy Report</i> (under P<i>rivacy and Security</i>) in <i>Settings</i> and, sure enough, it confirmed that the little green dot was happening because the camera was being used by the Camera app. Merely swiping while accidentally touching the Camera app's icon was enough to add an entry in the <i>App Privacy Report</i>.<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj4Fi9G3ADvNdBP5kXYwOl0n4VpXG-rFv_qaxzhd1fVt5v06gpeIUxq3Mm2mJQCGZBEoO-AZY_VaT8SZulmYAlrdCJL-VV4_uxgBUjQf1Jfs3RGdpjBzjtGSefAKaUnGtVLnBc3kRYnW2pcUHGx7B3WwHhjCRzW7unft6WwZMU3ow5MggmgBzGW8Q" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="508" data-original-width="1206" height="270" src="https://blogger.googleusercontent.com/img/a/AVvXsEj4Fi9G3ADvNdBP5kXYwOl0n4VpXG-rFv_qaxzhd1fVt5v06gpeIUxq3Mm2mJQCGZBEoO-AZY_VaT8SZulmYAlrdCJL-VV4_uxgBUjQf1Jfs3RGdpjBzjtGSefAKaUnGtVLnBc3kRYnW2pcUHGx7B3WwHhjCRzW7unft6WwZMU3ow5MggmgBzGW8Q=w640-h270" width="640" /></a></div><br />The solution was moving Camera app away from where I was liable to brush it with my fingers or thumb. That reduced the errant green dots to almost zero and reassured me that nothing untoward was happening.<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgKcb_6Q4FTr9F23LeQyECWRe7CcdXbyEw7v0JIM6p1suL1OND7t980m81nRDRJQvcqHIcQ3RzVy7MyjjyarsJ-oKjuaDvkV8VfOt65QNuANg9PSkZjvtu8K-8NRdjOXe1AICcpddWIEjJmvmMg66aa3m2DMMNG9LiwzKfIR-z_2OydafFdlUQNHA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="2622" data-original-width="1206" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEgKcb_6Q4FTr9F23LeQyECWRe7CcdXbyEw7v0JIM6p1suL1OND7t980m81nRDRJQvcqHIcQ3RzVy7MyjjyarsJ-oKjuaDvkV8VfOt65QNuANg9PSkZjvtu8K-8NRdjOXe1AICcpddWIEjJmvmMg66aa3m2DMMNG9LiwzKfIR-z_2OydafFdlUQNHA=w294-h640" width="294" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>One of the big problems in security is people get used to odd behaviour they can't explain and end up overlooking a real problem masked be the things that "always happen". The accidental green dots could have been hiding actual nefarious use of the camera. Better to be tidy and eliminate the false positives.<p></p><div>(I previously used the term "hover" for what I was experiencing and that was causing confusion. This happens if you touch the Camera app icon without actually opening the app.)</div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/3163403587683936353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/3163403587683936353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/3163403587683936353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/3163403587683936353'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/12/if-you-care-about-security-you-might.html' title='If you care about security you might want to move the iPhone Camera app'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEh_n7C7-AZVWdKp41tN41JNMVQqj-nzIXSD8K3pHXC9Zijl5Z3wtLA7OXRX0h7QRNDzE6juLUc10qyIoRf_CO5CTF8rtNjuVQ9MkGoDGGrhr-osKlxqOXaNoalhcaVpywdIXsHSCdik2SpothXBzFoLDYKUjKORzLwio-m5KXX7k6tZdacgAyHBzQ=s72-w640-h154-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-7381284008987393638</id><published>2025-10-20T15:25:00.018+00:00</published><updated>2025-10-20T15:33:15.147+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hardware"/><category scheme="http://www.blogger.com/atom/ns#" term="knx"/><title type='text'>A couple of handy KNX gadgets</title><content type='html'><p><a href="https://www.knx.org/knx-en/for-professionals/What-is-KNX/A-brief-introduction/">KNX</a> is a European standard used in home automation. It's primarily based around a twisted pair bus transporting DC power (30V) and data at 9600 bits/second. Devices attached to this KNX bus draw power for their operation and receive and send messages called telegrams. The devices are typically things like switches, relays, dimmers, HVAC interfaces, small displays, and blind/shutter controllers.</p><p>If you're working with a KNX bus you connect a computer to it via bus interface. These are commonly either a USB interface or an Ethernet/WiFi connection. Either way the computer is able to send and receive telegrams and monitor the bus for debugging. This interface is also used for programming the various KNX devices on the bus (for example, associating pressing a button on a particular switch with a particular light circuit going on or off).</p><p>Sometimes it's useful to program devices "off the bus" (i.e. away from the actual installation). For this purpose I put together the simplest of minimal KNX buses: a power supply to inject the necessary 30V, a USB bus interface, and a dangling KNX connector (the red and black thing in this photo) that can be plugged into the device to be programmed.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmKiAPaxQszfqx7GR0jqUEsDoWGLWE50OBkinI3k-xyyf0ot97IiBVwa5eBcZU9BfA6n6mayRuOMG2geYnv48otf3Qf1q2XP5Luz7W5bKLgvEItF_F-ufGlhjdfpbByIH7JJqoKsBiOQ7PzXXrpGIayTFvhuJxAEj0L3N2R88uIT8PcAzHZW6WrA/s1280/knx-1.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="963" data-original-width="1280" height="482" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmKiAPaxQszfqx7GR0jqUEsDoWGLWE50OBkinI3k-xyyf0ot97IiBVwa5eBcZU9BfA6n6mayRuOMG2geYnv48otf3Qf1q2XP5Luz7W5bKLgvEItF_F-ufGlhjdfpbByIH7JJqoKsBiOQ7PzXXrpGIayTFvhuJxAEj0L3N2R88uIT8PcAzHZW6WrA/w640-h482/knx-1.jpeg" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Normally the power supply (on the left) would be wired in permanently, but here I am just using a standard power cord for desktop programming. The USB bus interface is in the middle. There's nothing special about these devices, there are hundreds of KNX manufacturers that interoperate; I just happen to be using an <a href="https://new.abb.com/products/2CDG110144R0011/sv-s-30-160-1-1">ABB power supply</a> and <a href="https://new.abb.com/products/2CDG110243R0011/usb-s-1-2">ABB bus interface</a>.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">This works great: plug the device to be programmed into the connector on the right and hook the PC running the <a href="https://www.knx.org/knx-en/for-your-home/how-to-start/ets-home-edition/">KNX programming software ETS</a> into the bus interface via USB. And apart from the two ABB boxes, all that's needed is a power cord, three <a href="https://www.wago.com/global/installation-terminal-blocks-and-connectors/4-conductor-modular-pcb-connector/p/243-211">WAGO 243-211 connectors</a>, and some twisted pair. I used random wires that were lying around, in the real world of KNX installations you'd use proper shielded twisted pair cables!</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">The other gadget I built is this custom PCB (possibly the world's simplest PCB):</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_f3LS7Hdf3REwPS7f0G-yNtlumcwnaOBDliY__2k7vv9F4hqltGkuPmeNq9TCko1ClcXnmlIXHNYW2R8Pc5Jkbm4Xlhh2uGIiiJatOFlPcPNYD0idV_Cc4xPzLZAC-gMKGZUVgHa_AX7WXCtMLGpoW9RCqRJwogYJp3okpio4Nqgr8m2D5tqfbA/s1280/knx-2.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="849" data-original-width="1280" height="424" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_f3LS7Hdf3REwPS7f0G-yNtlumcwnaOBDliY__2k7vv9F4hqltGkuPmeNq9TCko1ClcXnmlIXHNYW2R8Pc5Jkbm4Xlhh2uGIiiJatOFlPcPNYD0idV_Cc4xPzLZAC-gMKGZUVgHa_AX7WXCtMLGpoW9RCqRJwogYJp3okpio4Nqgr8m2D5tqfbA/w640-h424/knx-2.jpeg" width="640" /></a></div><div><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;">It just connects four KNX terminals together in parallel. The pins at the top are the standard WAGO 243-131 pins compatible with the WAGO 243-211 connector. When soldered together it looks like this:</div></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHpTsUNp-DGoiyukBcSwuGQz0AJWzq9Iffeo9z4R2Tbtvh0iGQNmxAyvww9PyMwldAztD8bwIvv0aVGknE0U7IVElLhT1n2g4tqVvmrhrCSDvZiGId5YtlQs1hGDgCSaSe6RmWWdyZQnjwNVgmm1c6PYA9_dJI3EOFXgF9ARsOY2UWmktIE3aJuw/s1280/knx-3.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="644" data-original-width="1280" height="322" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHpTsUNp-DGoiyukBcSwuGQz0AJWzq9Iffeo9z4R2Tbtvh0iGQNmxAyvww9PyMwldAztD8bwIvv0aVGknE0U7IVElLhT1n2g4tqVvmrhrCSDvZiGId5YtlQs1hGDgCSaSe6RmWWdyZQnjwNVgmm1c6PYA9_dJI3EOFXgF9ARsOY2UWmktIE3aJuw/w640-h322/knx-3.jpeg" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><span style="text-align: left;">In conjunction with a bus interface it lets you tap into an existing KNX bus if there's no bus interface present. Or if it's just more convenient to connect where you are working. You simply unplug some device from the bus, plug the bus into this PCB and then plug the device into the dangling connector.</span></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">The bus will work normally and you'll have access for debugging and programming. (Note: you can do this because the KNX bus can be a tree and so it's acceptable to plug in a spur of a couple of devices to the main bus line).</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSmoitIZiO1hn8Iue1es3bMdYYqtM6_ZDkzG82vqPNHrUTH5lH9EeQfgO7tPWD2Dz2Jpk8fbQDlWrI32CoIg0wqJFcq4oGs0lxigd__lo73m_dXtY_7A1lIVJuaUPBk7fV5Ox3FTOHkVEPI8COe4CnEXB2aFeDynFDGQ5T7ztaFxKcnnRVLoaQfQ/s1280/knx-4.jpeg"><img border="0" data-original-height="929" data-original-width="1280" height="464" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSmoitIZiO1hn8Iue1es3bMdYYqtM6_ZDkzG82vqPNHrUTH5lH9EeQfgO7tPWD2Dz2Jpk8fbQDlWrI32CoIg0wqJFcq4oGs0lxigd__lo73m_dXtY_7A1lIVJuaUPBk7fV5Ox3FTOHkVEPI8COe4CnEXB2aFeDynFDGQ5T7ztaFxKcnnRVLoaQfQ/w640-h464/knx-4.jpeg" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">The PCB design is based on Matthias Kleine's <a href="https://github.com/klein0r/pcb-knx-distributor">KNX Distributor</a>; my version can be <a href="https://github.com/jgrahamc/knx-tap">found here</a>. (If you build this you'll also need Matthias Kleine's <a href="https://github.com/klein0r/pcb-footprint-collection-kicad">footprint library</a>).</div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/7381284008987393638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/7381284008987393638' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/7381284008987393638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/7381284008987393638'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/10/a-couple-of-handy-knx-gadgets.html' title='A couple of handy KNX gadgets'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmKiAPaxQszfqx7GR0jqUEsDoWGLWE50OBkinI3k-xyyf0ot97IiBVwa5eBcZU9BfA6n6mayRuOMG2geYnv48otf3Qf1q2XP5Luz7W5bKLgvEItF_F-ufGlhjdfpbByIH7JJqoKsBiOQ7PzXXrpGIayTFvhuJxAEj0L3N2R88uIT8PcAzHZW6WrA/s72-w640-h482-c/knx-1.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-6649151922991432331</id><published>2025-10-01T17:05:00.000+00:00</published><updated>2025-10-01T17:05:09.836+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/><title type='text'>Protecting your (my) passport from liquid damage</title><content type='html'><p>After an unfortunate incident involving my passport and some alcohol-based hand gel in my bag, I decided I needed some sort of waterproof passport protection. But searching around for "passport wallets" mostly doesn't result in anything waterproof and all the wallets are large, bulky or ugly. But there is a really simple solution.</p><p>A 4 mil ziploc bag of the appropriate size.&nbsp;</p><p>What's the appropriate size? Well, there's an ICAO standard for <a href="https://en.wikipedia.org/wiki/Machine-readable_passport">machine-readable passports</a>&nbsp;which uses the <a href="https://en.wikipedia.org/wiki/ISO/IEC_7810">ISO/IEC 7810 ID3</a> size for the "passport booklet" (what you and I would call a passport).</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgLySRY4aVNHQa_MeC0gABnFCWe1LOoCdQsN72fCaZNgZHeWz3sCYodLu98N29o6rXxYx0ZWja3or4nUTmyzMLqlV_jUvT_FgZwUO47CDag5dK2pxAxILKHKX5hQrnye1quGVA8Xlx_VBs00lphVUd9vHVOlD_CPVLajrse7X9wQllPFNiTq20oaA" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="568" data-original-width="445" src="https://blogger.googleusercontent.com/img/a/AVvXsEgLySRY4aVNHQa_MeC0gABnFCWe1LOoCdQsN72fCaZNgZHeWz3sCYodLu98N29o6rXxYx0ZWja3or4nUTmyzMLqlV_jUvT_FgZwUO47CDag5dK2pxAxILKHKX5hQrnye1quGVA8Xlx_VBs00lphVUd9vHVOlD_CPVLajrse7X9wQllPFNiTq20oaA=s16000" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">So, that's 125 x 88mm. Happily, a pretty common ziploc bag size is 10 x 15cm (or 100 x 150mm, if you prefer). That gives you an extra 12mm horizontally (so the passport will slip inside) and 25mm vertically (space for the passport and the area with the ziploc closure).</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">I mentioned "4 mil" above. Switching to non-metric measures (which seem common for the thickness of plastic) that's four 1/1000s of an inch (note it's not "millimetres", it's "mils"). You also sometimes see plastic measured in microns (which is 1/1000 of a millimetre).&nbsp;</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">4 mil bags have a sturdiness to them that thinner plastics do not have. They are sometimes described as "extra thick". In the UK,&nbsp;<a href="https://www.amazon.co.uk/stores/page/498A797C-420D-4094-BBCC-ED81C35B21F6?">these folks</a>&nbsp;(not an affiliate link) sell through Amazon and have a variety of bags of the right size and thickness.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">And now my (new) passport is carefully protected.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhgnW03040pIdvXdwmrEY1uC1dV9lZ_WPWETdktlSm9W5ZzNdFmmvyABr9N-pk2HF1GpTKC7tN8MdREa9pLtBS0PZWr6CkuviQH8JW6MTFs_F07Y__JZqjvxXydQnkdXgsxGmF-zY3drlU_dUmRjt_2UD4UHhYKyBeQfqeEnnLsgqGg-ck5NhvJQ/s1554/passport-2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1554" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhgnW03040pIdvXdwmrEY1uC1dV9lZ_WPWETdktlSm9W5ZzNdFmmvyABr9N-pk2HF1GpTKC7tN8MdREa9pLtBS0PZWr6CkuviQH8JW6MTFs_F07Y__JZqjvxXydQnkdXgsxGmF-zY3drlU_dUmRjt_2UD4UHhYKyBeQfqeEnnLsgqGg-ck5NhvJQ/w422-h640/passport-2.jpg" width="422" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">Aside: it turns out I actually once owned a waterproof passport wallet. I was gifted a <a href="https://sulgear.com/collections/passport-wallets">SÜLgear passport wallet</a>&nbsp;and lost the waterproof liner. The kind folks at SÜLgear pointed out that the waterproof liner was simply a 4" x 6", 4 mil ziploc bag (or, for those of the metric persuasion, 102 x 152mm).</div><br /><p></p></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/6649151922991432331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/6649151922991432331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/6649151922991432331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/6649151922991432331'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/10/protecting-your-my-passport-from-liquid.html' title='Protecting your (my) passport from liquid damage'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgLySRY4aVNHQa_MeC0gABnFCWe1LOoCdQsN72fCaZNgZHeWz3sCYodLu98N29o6rXxYx0ZWja3or4nUTmyzMLqlV_jUvT_FgZwUO47CDag5dK2pxAxILKHKX5hQrnye1quGVA8Xlx_VBs00lphVUd9vHVOlD_CPVLajrse7X9wQllPFNiTq20oaA=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-5514750613064903382</id><published>2025-09-22T11:52:00.008+00:00</published><updated>2025-09-22T20:54:25.186+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/><title type='text'>Is a movie prop the ultimate laptop bag?</title><content type='html'><p>A while back I attended a <a href="https://blog.cloudflare.com/three-chapters-at-cloudflare-programmer-to-cto-to-board-of-directors/">Cloudflare board meeting</a>&nbsp;and carried my laptop in a brown paper bag from a grocery store. This elicited a few comments about needing a real bag. But I've often carried my laptop in inconspicuous bags. For me, the ultimate laptop bag is one that looks nothing like a laptop bag; it should look like nothing special at all.&nbsp;</p><p>Unhappily, grocery bags are not very strong, but there is a solution.</p><p>Movie prop grocery bags like this:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLCsTiYJtgILVWSW6NUSgg7N1Auc969GWG9_LApQNtXRhRHsJwid4jLQ1j8OEAH4YVfeLi0El-jci5YtdUMyf4f-QEcGPZWYF05y9M0On0vskk9y0jFi8ziaXLpQVJ5_1dgiJcCcFO7OoI3c69NTQNCT_n3UM8go30Fry57Lr2ruGsaA1LnKJZVw/s5330/bag-1.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3648" data-original-width="5330" height="438" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLCsTiYJtgILVWSW6NUSgg7N1Auc969GWG9_LApQNtXRhRHsJwid4jLQ1j8OEAH4YVfeLi0El-jci5YtdUMyf4f-QEcGPZWYF05y9M0On0vskk9y0jFi8ziaXLpQVJ5_1dgiJcCcFO7OoI3c69NTQNCT_n3UM8go30Fry57Lr2ruGsaA1LnKJZVw/w640-h438/bag-1.jpeg" width="640" /></a></div><p></p><p>Looks like a classic brown paper grocery bag, but it isn't. It's actually a <a href="https://www.dependableexpendables.com/search?type=product&amp;q=silent+bag+props+">silent prop</a> made for a film set where the noise from a crinkling paper bag would overwhelm the dialogue.&nbsp;</p><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="370" src="https://www.youtube.com/embed/x6btmJSRueE" width="595" youtube-src-id="x6btmJSRueE"></iframe></div><p>Instead of being made from paper, it's made from fabric and is more robust then an actual paper bag. It's also nearly silent (well, much, much quieter than the real thing).</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKbYJ4h6bF_u6NoZjHYbCchtfwOO_sBPp8E7TOLrL1yhSigbzyGH1iXuH0jP1CjcqDTxewHa6xnLFd8dSVbgvE_gb47w-mmwoURZkmdUKEwg7iZ2j6uxyvivF-6PDvxWLWCTT7Z9PT_xKP299HT7KDgd3oj23K-Rq8hZQC_aD0NoKiINFpqelmfA/s5212/bag-2.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3523" data-original-width="5212" height="432" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKbYJ4h6bF_u6NoZjHYbCchtfwOO_sBPp8E7TOLrL1yhSigbzyGH1iXuH0jP1CjcqDTxewHa6xnLFd8dSVbgvE_gb47w-mmwoURZkmdUKEwg7iZ2j6uxyvivF-6PDvxWLWCTT7Z9PT_xKP299HT7KDgd3oj23K-Rq8hZQC_aD0NoKiINFpqelmfA/w640-h432/bag-2.jpeg" width="640" /></a></div><p>It's also the ideal size for my trusty and <a href="https://blog.jgc.org/2024/01/my-daily-driver-is-older-than-i-thought.html">vintage</a> MacBook Pro. Especially when it's in its sleeve.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8rGk6yij-QoN-rUsODKnFMQ3Vqd5bQNn3RBJdIBJHnJ_SscBE1esArQHYhqhMt4rg9qMRkgUSXa3RHw20kkAvL_c25BJeRKnvmHFnDGRcBx5Vm8fYfJSS4edF0iIPPgn29HTHeCc1EwPoAHpFlBkvPOPiRApNLPfJLIjGOdwlJRZeEPHXyGIaQA/s4924/bag-3.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3368" data-original-width="4924" height="438" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8rGk6yij-QoN-rUsODKnFMQ3Vqd5bQNn3RBJdIBJHnJ_SscBE1esArQHYhqhMt4rg9qMRkgUSXa3RHw20kkAvL_c25BJeRKnvmHFnDGRcBx5Vm8fYfJSS4edF0iIPPgn29HTHeCc1EwPoAHpFlBkvPOPiRApNLPfJLIjGOdwlJRZeEPHXyGIaQA/w640-h438/bag-3.jpeg" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">So, is a movie prop the ultimate laptop bag? No, clearly <a href="https://en.wikipedia.org/wiki/Betteridge%27s_law_of_headlines">Betteridge's Law of Headlines</a> applies, but it does fit my criteria for discretion and <a href="https://news.ycombinator.com/item?id=45338980">not being ostentatious</a>.&nbsp;</div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/5514750613064903382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/5514750613064903382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/5514750613064903382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/5514750613064903382'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/09/is-movie-prop-ultimate-laptop-bag.html' title='Is a movie prop the ultimate laptop bag?'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLCsTiYJtgILVWSW6NUSgg7N1Auc969GWG9_LApQNtXRhRHsJwid4jLQ1j8OEAH4YVfeLi0El-jci5YtdUMyf4f-QEcGPZWYF05y9M0On0vskk9y0jFi8ziaXLpQVJ5_1dgiJcCcFO7OoI3c69NTQNCT_n3UM8go30Fry57Lr2ruGsaA1LnKJZVw/s72-w640-h438-c/bag-1.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-9064413465283376346</id><published>2025-09-07T12:07:00.003+00:00</published><updated>2025-09-07T12:07:55.408+00:00</updated><title type='text'>Ex-X</title><content type='html'><p>I did have an X.com (username: 6a6763) account and I got bored of it so I deactivated it today.&nbsp;</p></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/9064413465283376346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/9064413465283376346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/9064413465283376346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/9064413465283376346'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/09/ex-x.html' title='Ex-X'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-417219859113312418</id><published>2025-07-21T11:25:00.002+00:00</published><updated>2025-07-21T11:25:57.856+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/><title type='text'>Ode to the anti-Mac: Panasonic Toughbook FZ-40</title><content type='html'><p>I own two computers that I use regularly. The first is my main machine, a rather old <a href="https://blog.jgc.org/2024/01/my-daily-driver-is-older-than-i-thought.html">Apple MacBook Pro</a>, the other is a Panasonic Toughbook FZ-40. They are polar opposites. Where the Mac is designed with tightly coupled software and hardware and is all smooth curves and delicate design, the Toughbook is designed to be used wearing gloves, outside and in rough situations that would damage the Mac.&nbsp;</p><p>Its built-in handle is a sign that this thing is heavy and robust.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR5ksuSkhfiuU-4f5KaWpjAKREr207HVQ5bNvVXix9HUqLg9Ft97l3zDSXfL6e6tu3NLbhk9DN7tgC391cXwRE3RDLdco6FXjUNvWUrkIfbtqI0SHfMKM6ANwitSnM3Kkpr315x9T4GmYoG8k4wsAdv3Fb1mRIswxkKstSMqw_F5QoyqfDMs8DUQ/s1280/tb-1.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1135" data-original-width="1280" height="355" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR5ksuSkhfiuU-4f5KaWpjAKREr207HVQ5bNvVXix9HUqLg9Ft97l3zDSXfL6e6tu3NLbhk9DN7tgC391cXwRE3RDLdco6FXjUNvWUrkIfbtqI0SHfMKM6ANwitSnM3Kkpr315x9T4GmYoG8k4wsAdv3Fb1mRIswxkKstSMqw_F5QoyqfDMs8DUQ/w400-h355/tb-1.jpeg" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>And where the MacBook has a feeble port selection, my Toughbook has VGA, Serial, two Ethernet sockets, HDMI, a micro SD card, SIM card, USB-A (SS5 and SS10), head and microphone jack, Thunderbolt and USB-C, and built in GPS. There's also a smart card reader.<div><br /></div><div>It feels like it's designed to do stuff where connecting to the real world is involved.&nbsp;</div><div><br /></div><div>The camera has a physical cover and all the ports are protected by locking doors.<div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-NlKla7coIopu5v4R42QD-eootEmOl2ximpHxs1al31cHNu9a0XuQWNISbD7Ge4Lu8EWBjd1-ndjuljMoSz0RMTM8l19K4p26gKHY0rbDlYqDkl4Y2h-eU8-GL9vkA0Db1jMYAqLVBFnKaMuEv6EzJlVR252Il7AxkmpGN2TwrwsYw8jnC2pk8g/s5712/tb-2.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="5712" data-original-width="4284" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-NlKla7coIopu5v4R42QD-eootEmOl2ximpHxs1al31cHNu9a0XuQWNISbD7Ge4Lu8EWBjd1-ndjuljMoSz0RMTM8l19K4p26gKHY0rbDlYqDkl4Y2h-eU8-GL9vkA0Db1jMYAqLVBFnKaMuEv6EzJlVR252Il7AxkmpGN2TwrwsYw8jnC2pk8g/w480-h640/tb-2.jpeg" width="480" /></a></div><div><p>There are also some special Panasonic buttons (P1 through P4). P2 drops you into "Concealed Mode" which instantly cuts all the light coming from the machine.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE34EIE8i2r_zZ80SeR8HHQuwLq8EKTCHbWWkVpEPLqxqBcxh8cDpgithqnBj24zaED14PiKfZOk0QPVwNS9HdgaYf0Li2xFaiOMTm6-w3lKoGs-uCM8aDze-X7NLb0DXmCPDQndP4NnCD2WPmyAosSp2PzTAKks4BCENQRTrpNvKTpO3L_815nw/s1707/tb-3.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1707" data-original-width="1280" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE34EIE8i2r_zZ80SeR8HHQuwLq8EKTCHbWWkVpEPLqxqBcxh8cDpgithqnBj24zaED14PiKfZOk0QPVwNS9HdgaYf0Li2xFaiOMTm6-w3lKoGs-uCM8aDze-X7NLb0DXmCPDQndP4NnCD2WPmyAosSp2PzTAKks4BCENQRTrpNvKTpO3L_815nw/w480-h640/tb-3.jpeg" width="480" /></a></div><p>P3 drops you into "Night Mode" for all those moments where your submarine is being hunted by the Soviets and you need to preserve your night vision to be able to see the instruments ready. Sadly there's no "<a href="https://www.youtube.com/watch?v=jr0JaXfKj68">one ping</a>" option.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRoMryzChFHB6f8UVBQsAUMWrdCsddZb_acVrXDObFLh9DtkQC1JrgJPTj3R26zqPdSTVT_G1q_UL7t6HBggG_cLdXx_hwgoI3r2lEl4YdcROEG0suCiKDC7lIA1kdps2INWXR81IupVZyM448PW8MNzCsnpkZMQEo5nqwsAb16t4Ty2rDuqVemA/s1707/tb-4.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1707" data-original-width="1280" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRoMryzChFHB6f8UVBQsAUMWrdCsddZb_acVrXDObFLh9DtkQC1JrgJPTj3R26zqPdSTVT_G1q_UL7t6HBggG_cLdXx_hwgoI3r2lEl4YdcROEG0suCiKDC7lIA1kdps2INWXR81IupVZyM448PW8MNzCsnpkZMQEo5nqwsAb16t4Ty2rDuqVemA/w480-h640/tb-4.jpeg" width="480" /></a></div><p>The machine runs Windows 11 (which I don't love) but a lot of industrial software is only available on Windows (along with things like the LEGO MINDSTORMS software which was weak on the Mac and full-featured on Windows).&nbsp;</p><p>I may be the only person in the world programming LEGO on a Toughbook with the option to drop into Night Mode during, uh, LEGO emergencies. But, hey, <a href="https://behind-the-screens.tv/#ironman">LEGO worked for Iron Man</a>.</p><p>And then there's the red&nbsp;<a href="https://groups.google.com/g/toughbook/c/J__ssDTCm_0">F11</a>&nbsp;key with a raised bump around it to prevent accidental activation.</p></div></div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/417219859113312418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/417219859113312418' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/417219859113312418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/417219859113312418'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/07/ode-to-anti-mac-panasonic-toughbook-fz.html' title='Ode to the anti-Mac: Panasonic Toughbook FZ-40'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR5ksuSkhfiuU-4f5KaWpjAKREr207HVQ5bNvVXix9HUqLg9Ft97l3zDSXfL6e6tu3NLbhk9DN7tgC391cXwRE3RDLdco6FXjUNvWUrkIfbtqI0SHfMKM6ANwitSnM3Kkpr315x9T4GmYoG8k4wsAdv3Fb1mRIswxkKstSMqw_F5QoyqfDMs8DUQ/s72-w400-h355-c/tb-1.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-6112484641635671567</id><published>2025-07-18T15:17:00.002+00:00</published><updated>2025-07-19T13:05:59.172+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="clocks"/><category scheme="http://www.blogger.com/atom/ns#" term="hardware"/><title type='text'>Pimping my Casio: Part Deux</title><content type='html'><p>Close to three years ago I wrote about using Oddly Specific Objects' alternate "motherboard" to modify a classic Casio F-91W watch:&nbsp;<a href="https://blog.jgc.org/2022/10/pimping-my-casio-with-oddly-specific.html">Pimping my Casio with Oddly Specific Objects' alternate motherboard and firmware.</a>&nbsp;That blog post goes into the detail of swapping out the guts of the Casio and building and uploading the firmware.&nbsp;</p><p>Happily, Oddly Specific Objects is back with a "Pro" version of their alternative Casio internals which now features an accelerometer and an alternative LCD. The original <a href="https://www.sensorwatch.net">Sensor Watch</a> used the existing Casio LCD display but the custom LCD allows for more complicated text to be displayed on screen. It's not a dot-matrix display so there are lots of limitations but it's still a fun upgrade.</p><p>Also, the Sensor Watch Pro, as it's called, requires no soldering (unlike the original version). Here's one I prepared earlier (that is a Casio F-91W with new internals):</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1iVxRuZ4xaxGibS6JwRe8xEO0eKwOZ2dlDaA7b-eJh6hAX4H5wkQyGRS117Sy5H2Z66BAKfZ5iAtlWUSZJQjIIdusaiSo-IsQ1qSO1ksLiWKWD_QAsWbOi6egCNo30qVTqjtE-aivfl6sFJEZ9XXB1XrkgrA7nKRmBCmU4RkpzCRMJgDUWC7aCw/s2246/sw-pro-1.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2246" data-original-width="1452" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1iVxRuZ4xaxGibS6JwRe8xEO0eKwOZ2dlDaA7b-eJh6hAX4H5wkQyGRS117Sy5H2Z66BAKfZ5iAtlWUSZJQjIIdusaiSo-IsQ1qSO1ksLiWKWD_QAsWbOi6egCNo30qVTqjtE-aivfl6sFJEZ9XXB1XrkgrA7nKRmBCmU4RkpzCRMJgDUWC7aCw/w414-h640/sw-pro-1.jpeg" width="414" /></a></div><div><br /></div>You can see the new display in action there showing the day as FRI. As with the original Sensor Watch there's a browser-based emulator that uses <a href="https://emscripten.org">emscripten</a> to get the watch running on your computer. This is pretty important because flashing new firmware to the watch requires dismantling it.<div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSB8nh3LmqIhogyf8_oCkSlsXhM2DkDSdJZZ_WqstKKlT0CjrFSUUje7k6jZZuw5WgWfmE_VvJ8oGvjaafFPOcr9NH33aqCWNJ023SvvYVvgCshM8lysDMRDK54lrL7fyq7RrtYmNNvR1syDmGswtEYDZY-oCY_tEZZ3Xs8vHtyw1ZWBwBs00qYw/s2038/sw-pro-2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1478" data-original-width="2038" height="464" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSB8nh3LmqIhogyf8_oCkSlsXhM2DkDSdJZZ_WqstKKlT0CjrFSUUje7k6jZZuw5WgWfmE_VvJ8oGvjaafFPOcr9NH33aqCWNJ023SvvYVvgCshM8lysDMRDK54lrL7fyq7RrtYmNNvR1syDmGswtEYDZY-oCY_tEZZ3Xs8vHtyw1ZWBwBs00qYw/w640-h464/sw-pro-2.png" width="640" /></a></div><br /><div>Since there's no soldering the process of upgrading your Casio is simply take it apart and put back in the parts that came in the kit (along with a small piece of metal that's transferred from the original Casio watch to make the battery connection):</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPPyoeQqJm4O8uQDLilWonpEhGj1-Hb5DvQ6yk5xYWjJ_V7cKrwq3tjKFuh-F3IvekcmfCCIMGyhc9-2iaV6VWtAkOLjuZ96Xh0RcWT7t4E3CSOa-XAo8FE4k6MgvG89JTEk1aW794Q94YutuHsnL0QXawxjmi7evePaExUvTM36UTFyafQPMT4w/s1280/sw-pro3.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1191" data-original-width="1280" height="596" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPPyoeQqJm4O8uQDLilWonpEhGj1-Hb5DvQ6yk5xYWjJ_V7cKrwq3tjKFuh-F3IvekcmfCCIMGyhc9-2iaV6VWtAkOLjuZ96Xh0RcWT7t4E3CSOa-XAo8FE4k6MgvG89JTEk1aW794Q94YutuHsnL0QXawxjmi7evePaExUvTM36UTFyafQPMT4w/w640-h596/sw-pro3.jpeg" width="640" /></a></div><br /><div>Since I bought the optional accelerometer add on it's necessary to put in place a little piece of Kapton tape (you can see if covering the five pads on the image above) and the insert the accelerometer board itself:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvSDKLm6K0X7zvjAgopLSk3mVf_VAzIsoGCejMyRyxprXEhZ_Ate4vYEPNYesDlteWI2acDnD8F4ldYJmyv3v9arkJY2Uea-qpplAo8QoVJuwe-sKb-mOZr7jMmIHQNq7igMN6aOrS1kReahxCF6XE1Al-RgG81aoANogqf2-fuBzue_PLh_nVAw/s1280/sw-pro-4.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1247" data-original-width="1280" height="624" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvSDKLm6K0X7zvjAgopLSk3mVf_VAzIsoGCejMyRyxprXEhZ_Ate4vYEPNYesDlteWI2acDnD8F4ldYJmyv3v9arkJY2Uea-qpplAo8QoVJuwe-sKb-mOZr7jMmIHQNq7igMN6aOrS1kReahxCF6XE1Al-RgG81aoANogqf2-fuBzue_PLh_nVAw/w640-h624/sw-pro-4.jpg" width="640" /></a></div><br /><div>The five vertical traces at the top are the micro USB interface used for flashing the firmware.&nbsp;</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidQSoy_thbpiUEwWkH9tY6Go4rSFFCwwxj0VU4xOPD6DnHKrCTf18qHOg-3vF1iJiMm2kpkYpznSmvnsj0ZuubvdcdADtaHlwquCrjrrF-fSv8LVSFSZX_F5KA8VtMSsBiv7b5PghdDiG0kippfxJEESiidFm8hn9JvU21ERPXRrCQwy8j954nVA/s1280/sw-pro-5.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="883" data-original-width="1280" height="442" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidQSoy_thbpiUEwWkH9tY6Go4rSFFCwwxj0VU4xOPD6DnHKrCTf18qHOg-3vF1iJiMm2kpkYpznSmvnsj0ZuubvdcdADtaHlwquCrjrrF-fSv8LVSFSZX_F5KA8VtMSsBiv7b5PghdDiG0kippfxJEESiidFm8hn9JvU21ERPXRrCQwy8j954nVA/w640-h442/sw-pro-5.jpg" width="640" /></a></div><br /><div>I modified the firmware to remove Imperial units and 12 hour clock (which I never want) and to choose <a href="https://github.com/joeycastillo/second-movement/commit/d5a1544d88963d607bc85826437c4a317cf56834">my own&nbsp;</a><span style="color: #0000ee;"><span style="caret-color: rgb(0, 0, 238);"><u>selection</u></span></span>&nbsp;of screens&nbsp;(I added the tally, accelerometer and light sensor screens).<br /><div style="text-align: left;"><br /></div><div style="text-align: left;">The complete sequence of commands needed to build the firmware was:<br /><span style="font-family: courier;"><br /></span></div><div style="text-align: left;"><span style="font-family: courier;">brew install --cask gcc-arm-embedded<br /></span><span style="font-family: courier;">git clone https://github.com/joeycastillo/second-movement<br /></span><span style="font-family: courier;">cd second-movement<br /></span><span style="font-family: courier;">git submodule update --init --recursive<br /></span><span style="font-family: courier;">make BOARD=sensorwatch_pro DISPLAY=custom</span></div><p style="text-align: left;">And then to upload to the watch you connect the micro USB, click the tiny switch on the back twice very rapidly and a volume called <span style="font-family: courier;">WATCHBOOT</span> appears on your machine. You can copy the firmware over to the watch with <span style="font-family: courier;">make install</span>.&nbsp;</p><p style="text-align: left;">To run the emulator you build with emscripten:</p><div style="text-align: left;"><span style="font-family: courier;">brew install emscripten<br />emmake make&nbsp;BOARD=sensorwatch_pro DISPLAY=custom<br />python3 -m http.server -d build-sim</span></div><p style="text-align: left;">And then visit localhost:8000/firmware.html in your browser.</p></div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/6112484641635671567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/6112484641635671567' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/6112484641635671567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/6112484641635671567'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/07/pimping-my-casio-part-deux.html' title='Pimping my Casio: Part Deux'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1iVxRuZ4xaxGibS6JwRe8xEO0eKwOZ2dlDaA7b-eJh6hAX4H5wkQyGRS117Sy5H2Z66BAKfZ5iAtlWUSZJQjIIdusaiSo-IsQ1qSO1ksLiWKWD_QAsWbOi6egCNo30qVTqjtE-aivfl6sFJEZ9XXB1XrkgrA7nKRmBCmU4RkpzCRMJgDUWC7aCw/s72-w414-h640-c/sw-pro-1.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-8285350699266665156</id><published>2025-06-25T08:30:00.001+00:00</published><updated>2025-06-25T08:30:21.890+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="clocks"/><category scheme="http://www.blogger.com/atom/ns#" term="radio"/><title type='text'>The discreet charm of the infrastructureless</title><content type='html'><p>Early in the morning in a European city, I awoke and wondered for a moment where I was. The room was totally black apart from a small glow from the face of my Casio Lineage watch lying on the bedside table. The luminous dial had absorbed sunlight during the day and was now giving off gentle light in the night; enough brightness to read the time.</p><p><i>Infrastructureless #1: sunlight + chemistry = glow in the dark.</i></p><p>The watch had also absorbed sunlight through its face during the day to recharge its battery. In all the time I've owned this watch I've never seen the battery drop below the what Casio calls HI (there are levels MID and LO but I'd only seen MID once when I took the watch from its original packaging)</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtMzGp6AjbrtJnb89q-HqxiiWVeTRnyhOJ7CNlTzdxiBLyOoi419sLDoFyC-BXScCOlfNkaV9HtHJKE_F3-Q8GIGpcTVJ9gEXCHe1KWzY_pC6w1TQICU1eCoHDhevi3rLQez3EQ2RalUHkwrmzkqEHO600zgNwBXuNih-YYBa5WlrGS6CmGUvgOQ/s1882/casio-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1882" data-original-width="1326" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtMzGp6AjbrtJnb89q-HqxiiWVeTRnyhOJ7CNlTzdxiBLyOoi419sLDoFyC-BXScCOlfNkaV9HtHJKE_F3-Q8GIGpcTVJ9gEXCHe1KWzY_pC6w1TQICU1eCoHDhevi3rLQez3EQ2RalUHkwrmzkqEHO600zgNwBXuNih-YYBa5WlrGS6CmGUvgOQ/w281-h400/casio-1.png" width="281" /></a></div><p><i>Infrastructureless #2: sunlight + semiconductors = electrical power.</i></p><p>Clicking the top right button to illuminate the face further I could see the small LED display showing the local time in the European city (the main hands show my home time zone). And on the LED display a little black rectangle under RCVD indicated that somewhere in the night (it turned out at 02:04) the watch had picked up the signal from the <a href="https://en.wikipedia.org/wiki/DCF77">DCF77</a> transmitter in Germany and set itself.</p><p><i>Infrastructureless #3: radio = correct time.</i></p><div>OK, DCF77 isn't totally without infrastructure, but one of the reasons I became a radio amateur is lack of infrastructure. Sure, you're able to read this because of the Internet but it's an incredibly complex system: layers and layers of technology and cooperating entities just so you can read this.&nbsp;</div><div><br /></div><div>On the other hand, radio amateurs just send out electromagnetic waves and talk to each other, no intervening infrastructure (well, ok, maybe you can count the ionosphere as infrastructure allowing long distance reception). And that's what DCF77, and the other five transmitters the Casio can receive in the US, UK, China and Japan, are doing: sending waves into the night to be picked up and decoded by whoever is listening.</div><div><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj05muy8FG1W4z3XdzOnVMkNPX-0kxnLY-ASyyH6vu06vlSOmPIxoYQbPWiuFUsNRLjfjGP_I-eCT00OxcNFNaq34MoJJ3WOU4JdSvGFWavsmC9HE-01lTsUhdgQWC3MZa26A4iIT0Sqtw0ba_JPoxH5vVTgkmSenioooM6iUhTCoTonRE_3GihfQ/s1158/casio-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="576" data-original-width="1158" height="318" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj05muy8FG1W4z3XdzOnVMkNPX-0kxnLY-ASyyH6vu06vlSOmPIxoYQbPWiuFUsNRLjfjGP_I-eCT00OxcNFNaq34MoJJ3WOU4JdSvGFWavsmC9HE-01lTsUhdgQWC3MZa26A4iIT0Sqtw0ba_JPoxH5vVTgkmSenioooM6iUhTCoTonRE_3GihfQ/w640-h318/casio-3.png" width="640" /></a><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj05muy8FG1W4z3XdzOnVMkNPX-0kxnLY-ASyyH6vu06vlSOmPIxoYQbPWiuFUsNRLjfjGP_I-eCT00OxcNFNaq34MoJJ3WOU4JdSvGFWavsmC9HE-01lTsUhdgQWC3MZa26A4iIT0Sqtw0ba_JPoxH5vVTgkmSenioooM6iUhTCoTonRE_3GihfQ/s1158/casio-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNnQPIfLy4xjVok5m6dyLO2-ZVuHfUo0SROii0ekUpdhvVFFGsQEXR8AGggGIeUWtPTFKtNIxa-D9hDYoE-190vG9kyteWrVAH488uAmxx4-pGFCcKY4PSZJrFCZbyq1WwdoYfbRh8jLAExwB8AlAmVs7_bDQMRoiE4OtGhtfUK5hRM8qt9ubWiQ/s1112/casio-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="610" data-original-width="1112" height="352" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNnQPIfLy4xjVok5m6dyLO2-ZVuHfUo0SROii0ekUpdhvVFFGsQEXR8AGggGIeUWtPTFKtNIxa-D9hDYoE-190vG9kyteWrVAH488uAmxx4-pGFCcKY4PSZJrFCZbyq1WwdoYfbRh8jLAExwB8AlAmVs7_bDQMRoiE4OtGhtfUK5hRM8qt9ubWiQ/w640-h352/casio-2.png" width="640" /></a></div></div><div class="separator" style="clear: both; text-align: center;"><span style="color: #0000ee;"><span style="caret-color: rgb(0, 0, 238);"><u><br /></u></span></span></div><div>Also, I'm just fascinated by radio propagation: my ancient Sharper Image clock sometimes <a href="https://blog.jgc.org/2021/07/receiving-wwvb-time-signal-in-portugal.html">picks up the US WWVB in Portugal</a>.</div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/8285350699266665156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/8285350699266665156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/8285350699266665156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/8285350699266665156'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/06/the-discreet-charm-of-infrastructureless.html' title='The discreet charm of the infrastructureless'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtMzGp6AjbrtJnb89q-HqxiiWVeTRnyhOJ7CNlTzdxiBLyOoi419sLDoFyC-BXScCOlfNkaV9HtHJKE_F3-Q8GIGpcTVJ9gEXCHe1KWzY_pC6w1TQICU1eCoHDhevi3rLQez3EQ2RalUHkwrmzkqEHO600zgNwBXuNih-YYBa5WlrGS6CmGUvgOQ/s72-w281-h400-c/casio-1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-6718543456445220885</id><published>2025-06-10T17:54:00.001+00:00</published><updated>2025-06-10T18:00:21.855+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/><title type='text'>Low-background Steel: content without AI contamination</title><content type='html'><p>Somehow I forgot to blog my site: <a href="https://lowbackgroundsteel.ai/">https://lowbackgroundsteel.ai/</a>. I created it back in March 2023 as a clearinghouse for online resources that hadn't been contaminated with AI-generated content.&nbsp;</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijWm8XoAHKZn2-fYIvZZXJFJLv4ASg4T0nmvExAee9kk32vI4V3gln9PpYKQBfJkMsae-fJvuo1A_cRI-ZX6E5i0f92RCHm5MXtZNHZr3ki3f3sX4n9HtlwwZCQVVGWigHYLhTJbz-pZQvRm0O5N6If_LqG6Cw2A9InEtGuBD4-mPqRtdc7NUBMQ/s2370/lbs.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2370" data-original-width="2066" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijWm8XoAHKZn2-fYIvZZXJFJLv4ASg4T0nmvExAee9kk32vI4V3gln9PpYKQBfJkMsae-fJvuo1A_cRI-ZX6E5i0f92RCHm5MXtZNHZr3ki3f3sX4n9HtlwwZCQVVGWigHYLhTJbz-pZQvRm0O5N6If_LqG6Cw2A9InEtGuBD4-mPqRtdc7NUBMQ/w558-h640/lbs.jpeg" width="558" /></a></div><p><a href="https://en.wikipedia.org/wiki/Low-background_steel">Low-background Steel </a>(and lead) is a type of metal uncontaminated by radioactive isotopes from nuclear testing. That steel and lead is usually recovered from ships that sunk before the Trinity Test in 1945. The site is about uncontaminated content that I'm terming "Low-background Steel". The idea is to point to sources of text, images and video that were created prior to the explosion of AI-generated content that occurred in 2022.</p><p>It currently contains pointers to a Wikipedia dump from prior to the release of ChatGPT, the Arctic Code Vault, Project Gutenberg, and more.</p><p>If you know of other sources of non-contaminated content plus <a href="https://lowbackgroundsteel.ai/submit">submit them</a>!</p></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/6718543456445220885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/6718543456445220885' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/6718543456445220885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/6718543456445220885'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/06/low-background-steel-content-without-ai.html' title='Low-background Steel: content without AI contamination'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijWm8XoAHKZn2-fYIvZZXJFJLv4ASg4T0nmvExAee9kk32vI4V3gln9PpYKQBfJkMsae-fJvuo1A_cRI-ZX6E5i0f92RCHm5MXtZNHZr3ki3f3sX4n9HtlwwZCQVVGWigHYLhTJbz-pZQvRm0O5N6If_LqG6Cw2A9InEtGuBD4-mPqRtdc7NUBMQ/s72-w558-h640-c/lbs.jpeg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-3818174933613691655</id><published>2025-06-01T20:34:00.003+00:00</published><updated>2025-08-10T17:21:04.630+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hardware"/><category scheme="http://www.blogger.com/atom/ns#" term="minitel"/><title type='text'>It was time for a dim bulb current limiter</title><content type='html'><p>One of my Minitels (the one that I <a href="https://blog.jgc.org/2022/03/voiding-warranty-on-1993-minitel-2-to.html">modified a few years ago to run new firmware</a>) started having power supply problems: the LED was on but nothing else was working. I suspected that the main power/CRT board needed new capacitors and so I recapped it:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh4RXdLhCqZuNiwHrSNNjV6Xiox_NxujebIDyWmdiHuEGocDo5YyW0BpRb7Hw9JuY0gsP302QXsDIhXA-LvC4PFRK6wTxQcnGbDa6VOxMeaeP_pa867CVka1tf6yL0q1qJ07Bqjp8kFOBAUOjth6FWKcvSap9k0jM07sbT_Hyiq1Phzccq831jcA/s1707/dim-bulb-5.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1707" data-original-width="1280" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh4RXdLhCqZuNiwHrSNNjV6Xiox_NxujebIDyWmdiHuEGocDo5YyW0BpRb7Hw9JuY0gsP302QXsDIhXA-LvC4PFRK6wTxQcnGbDa6VOxMeaeP_pa867CVka1tf6yL0q1qJ07Bqjp8kFOBAUOjth6FWKcvSap9k0jM07sbT_Hyiq1Phzccq831jcA/w480-h640/dim-bulb-5.jpeg" width="480" /></a></div><div><br /></div>Alas, despite some of the older capacitors measuring poorly compared to their specs, that wasn't the problem and so I need to go deeper. The only problem is there are a ton of nasty voltages on this board. Notably the 230V AC input and then the tens of kilovolts generated for the CRT.<div><br /></div><div>Also the board seems to have a short somewhere.</div><div><br /></div><div>So, it's time to a dim bulb current limiter. Which I didn't have. So I made one. Here it is:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRtE5ZfCmta06KSLsOktQK2C2mCfbVs_T-dcnX7rvarawQzFsfqykDPLUR_AfPfMZUdCQx6RAmSPwjyjDUgwUBfh_VIpGKZvMRwM30CCHViyZBgMKiPm4eTkAwdVNPLeSa4TptwEdO3amheh-3AKvYT-xSJF2omTVX6SAned-UIZwujBag9dHkwA/s1280/dim-bulb-2.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRtE5ZfCmta06KSLsOktQK2C2mCfbVs_T-dcnX7rvarawQzFsfqykDPLUR_AfPfMZUdCQx6RAmSPwjyjDUgwUBfh_VIpGKZvMRwM30CCHViyZBgMKiPm4eTkAwdVNPLeSa4TptwEdO3amheh-3AKvYT-xSJF2omTVX6SAned-UIZwujBag9dHkwA/w640-h480/dim-bulb-2.jpeg" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>It's a remarkably simple device which plugs into a standard power outlet (230V AC) and puts a lightbulb in series with one of the connections. The two wires coming in then go to a standard socket. Thus you plug your device (e.g. my Minitel) into the socket and the lightbulb limits the current.<div><br /></div><div>These things were super <a href="https://antiqueradio.org/dimbulb.htm">common in the past</a> for anyone working with mains voltages.<br /><div><br /></div><div>Works great if you have an incandescent bulb at, say, 100W. A 100W bulb on 230V AC would have a current running through it of I = V/P -&gt; I = 100/230 (approximately 430mA). Limiting the current that way means you're less likely to damage the device you're working on if there's a short. Naturally, using a different bulb would give you a different current. 60W would give you around 230mA. 150W around 650mA.&nbsp;</div><div><br /></div><div>As the Minitel's input fuse is 630mA, my current limiter will keep things well under its blowing current. Also, if there's a complete short then the bulb will glow brightly.&nbsp;</div><div><br /></div><div>Here's a look inside:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhia865PgNjaxbIC7I-HSdzyRt58mvvTzlFuihJVfM6R5HltlT6Y-THJ0FyUtHrbmq5EDpw3a9fDW14mi5LS-mhYMx-OcjeYo6dX_sIO7YDKdkegwTvZLxAHW6MyPx5c1O1S5v5HTmNoB5JrAghZWKTy_iaWblrup62OEdrFskWAK78qPQBrJKz5A/s1280/dim-bulb-1.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhia865PgNjaxbIC7I-HSdzyRt58mvvTzlFuihJVfM6R5HltlT6Y-THJ0FyUtHrbmq5EDpw3a9fDW14mi5LS-mhYMx-OcjeYo6dX_sIO7YDKdkegwTvZLxAHW6MyPx5c1O1S5v5HTmNoB5JrAghZWKTy_iaWblrup62OEdrFskWAK78qPQBrJKz5A/w640-h480/dim-bulb-1.jpeg" width="640" /></a></div><br /><div>Power comes in at the top, and goes to a DPST switch. I'm using DPST because it's not easy to know which input wire is live and which is neutral because the European <a href="https://en.wikipedia.org/wiki/Schuko">Schuko/Type F</a>&nbsp;plug/socket is not polarized and I like knowing that when I switch something off, it's off! And the DPST has an integrated lamp that gives me a visual reminder that it's on.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtd5yKvaoR4kCaz0wCPJpM0SMV3toUG5kbirF88W3Rc3XwvRPT93gkPx9u62UmdXLKOMH64bBa0pdpWwtKPwDgXK1lBNNbVEccd_PQ3it3orfVqcIA6HKzwoO3sOsdd-9ZTk0TSPxhYQhyTKTHb-HTzqNseLad2i_vJvumQks3mTjwSeaGPInG5A/s1964/dim-bulb-7.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="404" data-original-width="1964" height="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtd5yKvaoR4kCaz0wCPJpM0SMV3toUG5kbirF88W3Rc3XwvRPT93gkPx9u62UmdXLKOMH64bBa0pdpWwtKPwDgXK1lBNNbVEccd_PQ3it3orfVqcIA6HKzwoO3sOsdd-9ZTk0TSPxhYQhyTKTHb-HTzqNseLad2i_vJvumQks3mTjwSeaGPInG5A/w640-h132/dim-bulb-7.png" width="640" /></a></div><div><br /></div><div>Because local power sockets aren't polarised, the power strip I am using for my bench gear uses DPST switches for each socket. It's relatively hard to find one that does this (and says it does). Thanks, <a href="https://www.brennenstuhl.com/en-PT/products/extension-leads/extension-lead-individually-switchable-6-way-2m-h05vv-f-3g1.5-white">Brennenstuhl</a>!</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFVAd90qESyXhysVOcMSgX7Qx8fx9qacoGkZJiOlcmHjSjr5iVfl75nxxB1HFk7i0JZ6IYn3qMEDlBpx3gdXXBZr8jgLx8FydXZZri3SU6mBhtyjr7qQ5rxiTuZ2XbKrhYklDwOb5ciD1nl1uk-0SDvBULfuVZt-Tw4LLwFpZlfxfHy9gp1WLK5A/s3488/dim-bulb-6.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1581" data-original-width="3488" height="290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFVAd90qESyXhysVOcMSgX7Qx8fx9qacoGkZJiOlcmHjSjr5iVfl75nxxB1HFk7i0JZ6IYn3qMEDlBpx3gdXXBZr8jgLx8FydXZZri3SU6mBhtyjr7qQ5rxiTuZ2XbKrhYklDwOb5ciD1nl1uk-0SDvBULfuVZt-Tw4LLwFpZlfxfHy9gp1WLK5A/w640-h290/dim-bulb-6.jpeg" width="640" /></a></div><br /><div>But I digress.</div><div><br /></div><div>To make my dim bulb current limiter do the right thing, I need a 100W incandescent bulb. These have been on their way to oblivion in the EU since 2009 and were, I believe, eliminated for home use in 2016. It is still possible to buy them, labelled for "industrial use", from some locations.</div><div>&nbsp;<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJDOISKREffD-X0vDdc0QVCLXF4JmXDY5F7FDEsGzIOhZppJCmDGN8w-zcrlzAjn2H3pOJIXD7Klw0dcf5JIKo2iswFGPpaW42BopFhV_Q4TAiV8rp7qjierBrivRQF-Dt5FgiXGizc6PC4-1vT6OSASPzES4Ek-OK2XYZbyYfi7fNN8kik1BTzg/s1280/dim-bulb-3.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="941" data-original-width="1280" height="470" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJDOISKREffD-X0vDdc0QVCLXF4JmXDY5F7FDEsGzIOhZppJCmDGN8w-zcrlzAjn2H3pOJIXD7Klw0dcf5JIKo2iswFGPpaW42BopFhV_Q4TAiV8rp7qjierBrivRQF-Dt5FgiXGizc6PC4-1vT6OSASPzES4Ek-OK2XYZbyYfi7fNN8kik1BTzg/w640-h470/dim-bulb-3.jpeg" width="640" /></a></div><br /></div><div>So, that limits the current and protects the device I'm working on, but what about protecting me? For that, I pair it with an isolating transformer. If you're not familiar with this then here's the basics. In a house the neutral line is connected to ground (typically at the point at which power comes into your house). This means that the 230V coming out the live wire is relative to ground. If I touch it the power will flow through me to ground.&nbsp;</div><div><br /></div><div>The isolating transformer eliminates the link between live, neutral and ground. It's still outputting 230V but that voltage isn't relative to ground and so I won't get a shock if I touch one of the wires coming from the transformer's socket. Of course, touching both would send 230V through me.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwdEB4jBV-xo2lO_q8nigbRkTTGvkTVYQRtDyKVxqcrCScxhWyEKZQ7oSjgvishX4GFXjqzZ0KezPQrzTEGGFgNNUtRFW58SQ4UzTWEjtD83tUdDm2SlkWwGk3DrHTZZ-zD8ibRiWnNESCeA1OJJLLsahrkdb8O_LMy4jfHo5TP6Db-4zPdkeGEQ/s1280/dim-bulb-4.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="947" data-original-width="1280" height="474" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwdEB4jBV-xo2lO_q8nigbRkTTGvkTVYQRtDyKVxqcrCScxhWyEKZQ7oSjgvishX4GFXjqzZ0KezPQrzTEGGFgNNUtRFW58SQ4UzTWEjtD83tUdDm2SlkWwGk3DrHTZZ-zD8ibRiWnNESCeA1OJJLLsahrkdb8O_LMy4jfHo5TP6Db-4zPdkeGEQ/w640-h474/dim-bulb-4.jpeg" width="640" /></a></div><br /><div>So, having built that I can go back to understanding why my Minitel isn't powering on.</div></div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/3818174933613691655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/3818174933613691655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/3818174933613691655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/3818174933613691655'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/06/it-was-time-for-dim-bulb-current-limiter.html' title='It was time for a dim bulb current limiter'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh4RXdLhCqZuNiwHrSNNjV6Xiox_NxujebIDyWmdiHuEGocDo5YyW0BpRb7Hw9JuY0gsP302QXsDIhXA-LvC4PFRK6wTxQcnGbDa6VOxMeaeP_pa867CVka1tf6yL0q1qJ07Bqjp8kFOBAUOjth6FWKcvSap9k0jM07sbT_Hyiq1Phzccq831jcA/s72-w480-h640-c/dim-bulb-5.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-1005744146793198691</id><published>2025-04-21T13:16:00.002+00:00</published><updated>2025-04-21T13:17:31.328+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="calculators"/><title type='text'>Just one more calculator, bro, just one more, I swear it's the last one</title><content type='html'><p><br />I'm not much of a collector of things. Long ago I decided that on the retro-computing front I would not collect any machines that weren't very significant to me. So, my "collection" consists of a <a href="https://blog.jgc.org/2025/02/getting-kim-1-to-talk-to-my-mac.html">KIM-1</a>, <a href="https://blog.jgc.org/2009/08/in-which-i-switch-on-30-year-old.html">Sharp MZ-80K</a>, Research Machines 380Z and 480Z, <a href="https://blog.jgc.org/2011/11/back-from-dead-with-power-supply-repair.html">BBC Micro Model B</a>, an <a href="https://blog.jgc.org/2023/12/restoration-of-ibm-thinkpad-701c.html">IBM ThinkPad 701C</a>, and a <a href="https://blog.jgc.org/2023/11/using-my-minitel-1b-over-phone-network.html">Minitel</a> (well, <a href="https://blog.jgc.org/2022/03/voiding-warranty-on-1993-minitel-2-to.html">two</a>).</p><p>But calculators are where I come closest to not being able to resist. Calculators are there for you. They don't change UI because of the whim of some product manager. They don't need updating because their underlying OS is on some new, crazy version. Nothing gets in the way of you using them: no popups, enticements to buy some extra thing, no notifications, nothing. In an insane world, they are the sanest choice.</p><p>I've written in the past about restoring my <a href="https://blog.jgc.org/2022/11/restoring-my-rockwell-8r-calculator.html">Rockwell 8R</a> and <a href="https://blog.jgc.org/2022/11/restoring-my-commodore-p50-calculator.html">Commodore P50</a> (and a fun discovery that Sir Roger Penrose had the same calculator and wrote the same program as me: <a href="https://blog.jgc.org/2023/11/my-primality-testing-code-is-6x-faster.html">mine was faster, his more elegant</a> (which is probably some sort of metaphor)). And I have my Casio fx-3600p which I used extensively at school.</p><p>I also have an original <a href="https://blog.jgc.org/2006/06/how-i-love-my-hp-16c.html">HP 16C</a> (the one for programmers).</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisy7iTpsDnuDW2mEU7GC4HwEkwisHHbTcoJJLrjvqQjy7LRpc6AA3EwwtiJf2A2-1k4EHcMCfFGgqTTlR4mCEPEEk60BXRkbooLUtK_y62ZG8EclKOgWKKCA05Vy9kLFj-KfnDiRyZ0wYFVYywkAeJsbb67fj7UR8oimP-yS4jQcXWpBkoyJYu5w/s697/calcs-2.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="446" data-original-width="697" height="410" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisy7iTpsDnuDW2mEU7GC4HwEkwisHHbTcoJJLrjvqQjy7LRpc6AA3EwwtiJf2A2-1k4EHcMCfFGgqTTlR4mCEPEEk60BXRkbooLUtK_y62ZG8EclKOgWKKCA05Vy9kLFj-KfnDiRyZ0wYFVYywkAeJsbb67fj7UR8oimP-yS4jQcXWpBkoyJYu5w/w640-h410/calcs-2.jpg" width="640" /></a></div><p></p><p>Some time ago I discovered a company called SwissMicros that makes <a href="https://blog.jgc.org/2023/09/swissmicros-beautiful-hp-calculators.html">modern replicas of classic HP calculators</a>. I bought two of them. I have <a href="https://www.swissmicros.com/product/dm42">their version of the HP-42S</a>:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPIWpCsSbZpmdRpg8e4OUWnR-Bw-PzCdGyNCC8IC-oHsqonsgLejzhzIQrd4Lt86_TzVwjBMLtXjoUa2-dfJoac8PmvtzSjehmr2rAwMAm6xv8KUfgYHJWshh230MA9spz0_DrfU_wFRJaS0cWXfeBxu26uwyeXlEZKyIkv8X0389EQ6K3__dnyg/s2207/calcs-3.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2207" data-original-width="1200" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPIWpCsSbZpmdRpg8e4OUWnR-Bw-PzCdGyNCC8IC-oHsqonsgLejzhzIQrd4Lt86_TzVwjBMLtXjoUa2-dfJoac8PmvtzSjehmr2rAwMAm6xv8KUfgYHJWshh230MA9spz0_DrfU_wFRJaS0cWXfeBxu26uwyeXlEZKyIkv8X0389EQ6K3__dnyg/w348-h640/calcs-3.jpg" width="348" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">And <a href="https://www.swissmicros.com/product/dm16l">their version of the HP-16C</a>:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI4i1o8yGAzVntR9af65lSdKFZRIQNYFfQ1O7ypFC06HnsEV4W8sI1o0acHmBkSaGyCCTQnb39Yemu9dHAWVzdwfYjbdlcmfSOU2ZpUelb0XKiUfmAiM3Ygh84Y5ATrJ0Vp_eeDJZrPqw_3wnXEa9cduzExtM4tj0Amz8zaLgTd3YAXC1xrBNMrQ/s3336/calcs-4.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2025" data-original-width="3336" height="388" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI4i1o8yGAzVntR9af65lSdKFZRIQNYFfQ1O7ypFC06HnsEV4W8sI1o0acHmBkSaGyCCTQnb39Yemu9dHAWVzdwfYjbdlcmfSOU2ZpUelb0XKiUfmAiM3Ygh84Y5ATrJ0Vp_eeDJZrPqw_3wnXEa9cduzExtM4tj0Amz8zaLgTd3YAXC1xrBNMrQ/w640-h388/calcs-4.jpg" width="640" /></a></div><div><br /></div>But recently they started making a credit card-sized version of the HP-16C and I was unable to resist ordering one. And so, after dealing with Portuguese Customs, I got this:<div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcgIeFJ4H66rZq468xuiijnom-caEPxNAIFdnJA-Epnwdbl0xBV3TW5Qt0RJddUCT9XJjkzLkxnlySFuxgNMx0_FDCPTck269tqvi1KV8OMO_042p1FKlt0UWlBKYdFMx7kd7AzBQAM_0Z0N40UbncYfGlfbr_I5v35dWg0kuMIAYm32B2vWAXEQ/s1200/calcs-1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="896" data-original-width="1200" height="478" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcgIeFJ4H66rZq468xuiijnom-caEPxNAIFdnJA-Epnwdbl0xBV3TW5Qt0RJddUCT9XJjkzLkxnlySFuxgNMx0_FDCPTck269tqvi1KV8OMO_042p1FKlt0UWlBKYdFMx7kd7AzBQAM_0Z0N40UbncYfGlfbr_I5v35dWg0kuMIAYm32B2vWAXEQ/w640-h478/calcs-1.png" width="640" /></a></div><br /><div>And now I have full size and card size side by side:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjVhkZfsNxJ1Akwslrc5f55sfd4kF5mY7C3rzOMqLkxXb32nUNNNMx4XKyIBs_fnnwFZyxF2xnHt1V-hcuuPHppMSvgu822qHaK92XyvxzXPcHj79bCsoyDbOpUJt42iywd6kO-fjlYatVL6Q8BU425AVGPsA7doOj5OmNdZaZDx9LVlZwMfi-BQ/s2502/calcs-5.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2502" data-original-width="2098" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjVhkZfsNxJ1Akwslrc5f55sfd4kF5mY7C3rzOMqLkxXb32nUNNNMx4XKyIBs_fnnwFZyxF2xnHt1V-hcuuPHppMSvgu822qHaK92XyvxzXPcHj79bCsoyDbOpUJt42iywd6kO-fjlYatVL6Q8BU425AVGPsA7doOj5OmNdZaZDx9LVlZwMfi-BQ/w536-h640/calcs-5.jpg" width="536" /></a></div><br /><div>I'll try to stop collecting calculators there.</div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/1005744146793198691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/1005744146793198691' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/1005744146793198691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/1005744146793198691'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/04/just-one-more-calculator-bro-just-one.html' title='Just one more calculator, bro, just one more, I swear it's the last one'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisy7iTpsDnuDW2mEU7GC4HwEkwisHHbTcoJJLrjvqQjy7LRpc6AA3EwwtiJf2A2-1k4EHcMCfFGgqTTlR4mCEPEEk60BXRkbooLUtK_y62ZG8EclKOgWKKCA05Vy9kLFj-KfnDiRyZ0wYFVYywkAeJsbb67fj7UR8oimP-yS4jQcXWpBkoyJYu5w/s72-w640-h410-c/calcs-2.jpg" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-6192850347732641270</id><published>2025-04-10T09:00:00.001+00:00</published><updated>2025-04-10T09:01:13.355+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/><title type='text'>The Via Verde Stick</title><content type='html'><p>Portugal has an incredibly well executed and efficient system for collecting road tolls called <a href="https://en.wikipedia.org/wiki/Via_Verde">Via Verde</a>. A small transponder in the car either collects a toll at an automated toll booth or, on some motorways, every few kilometres without slowing down at all.</p><p>Via Verde can also be used to pay for parking in many locations.&nbsp;</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0TQSG69s-lFiHSIlO5WePiW3YXHHKZmVYtY5t_ss6lMzPAA4N6MCkINVr6yCRziymBJV4tNMIY6YUSse9A127LRXmm2-8IEipNGjFnLqHjOmH_Nq4a7gAZ0pqBx33S8E6erY1xW0CMUsQFnqPEDb4DrZv6HSO2ZZ0q0apYvnD2SYiFDYabOA2Aw/s1664/viaverde-1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="770" data-original-width="1664" height="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0TQSG69s-lFiHSIlO5WePiW3YXHHKZmVYtY5t_ss6lMzPAA4N6MCkINVr6yCRziymBJV4tNMIY6YUSse9A127LRXmm2-8IEipNGjFnLqHjOmH_Nq4a7gAZ0pqBx33S8E6erY1xW0CMUsQFnqPEDb4DrZv6HSO2ZZ0q0apYvnD2SYiFDYabOA2Aw/w640-h296/viaverde-1.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">When entering a car park where Via Verde is an option there are two ways it works: in some car parks it's possible just to wait a few moments for the gate to decide that you've opted for Via Verde and not a ticket, in others you have to press a button.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdOXIJE16yi1UcYmzHqz5ACJI_3Aym9jYcwH-q9HEYJnrKjD98r9mTrx_KIbuwkksjuaUxpJtCE6qMsfN5hEza2JoU7ooapKE3mGJ1u0iYIocyPsuJnFKM-0YpY2WJdrxKXK0jkONm8F-HeDU-dPUBFH3AzUo3lv_AgvZe2lM-deaWQxXJRUXfbw/s810/viaverde-2.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="810" data-original-width="789" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdOXIJE16yi1UcYmzHqz5ACJI_3Aym9jYcwH-q9HEYJnrKjD98r9mTrx_KIbuwkksjuaUxpJtCE6qMsfN5hEza2JoU7ooapKE3mGJ1u0iYIocyPsuJnFKM-0YpY2WJdrxKXK0jkONm8F-HeDU-dPUBFH3AzUo3lv_AgvZe2lM-deaWQxXJRUXfbw/w624-h640/viaverde-2.jpg" width="624" /></a></div><div><br /></div>The parking above has three options: use a card (for residents or people with a subscription), blue button for a ticket, and green for Via Verde. To alleviate difficulty in pressing the green button I created the "Via Verde Stick" from a short length of wooden broom stick handle, some green spray paint, and two felt floor protectors.<div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV_mJ1uFY0aDh-FjkVVZZ3qX3JAzACQHrDlsu2ck4TbAYbmwySSFrhlA7pOq9xrXxqGxov6pNgvccGEaxHW9vGmGyp6fB0EVqTvG8lbdVtatzXPljJylcz7hJhFDammVFL8b-Grz4iVyOLhdLYPhfU8J_RNFM_cr_7B_UFyrAyasVE0ony6bX1zw/s5222/viaverde-3.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="607" data-original-width="5222" height="74" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV_mJ1uFY0aDh-FjkVVZZ3qX3JAzACQHrDlsu2ck4TbAYbmwySSFrhlA7pOq9xrXxqGxov6pNgvccGEaxHW9vGmGyp6fB0EVqTvG8lbdVtatzXPljJylcz7hJhFDammVFL8b-Grz4iVyOLhdLYPhfU8J_RNFM_cr_7B_UFyrAyasVE0ony6bX1zw/w640-h74/viaverde-3.jpg" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">The felt floor protectors are on both ends so that it doesn't matter which way the stick is oriented.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih0uWTeQZNHwqRTccI-XciBYAj9NqDYY7wkiQfD_MwmQuDsr3KJuCEZeuBCaq0spT53IY_yxOhOvBhRXdp2C3tr01SqXGD5ygBgmH1hqFI5FgOIR9gt97WLmCb1bc9iGqQx7G45Y0t5KBhgpMt-OmLW5bQ8bhv3Ndwi7N6aaKUe_azbUqf7wqmnQ/s4032/viaverde-4.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4032" data-original-width="3024" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih0uWTeQZNHwqRTccI-XciBYAj9NqDYY7wkiQfD_MwmQuDsr3KJuCEZeuBCaq0spT53IY_yxOhOvBhRXdp2C3tr01SqXGD5ygBgmH1hqFI5FgOIR9gt97WLmCb1bc9iGqQx7G45Y0t5KBhgpMt-OmLW5bQ8bhv3Ndwi7N6aaKUe_azbUqf7wqmnQ/w480-h640/viaverde-4.jpg" width="480" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">I do wonder what the driver behind me thinks when a long, bright green stick appears out the window but...</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYlzGx1m_rG2hLh-uKNHm6upODANbEZUtpmSEMCwFgMLBJxAsidRW_S0uVbHauFWyEMS1_HhG035cnHqF-zkA6xDJ7lNw09_nL_omZ4tCGv_qGpUN_tgMkbpzmWbjz9W7HCSXagF58iKTWZRf2bfgzaDk1ST6PDkGLYfvOitCOyQe8TmLTPFDcGg/s600/viaverde-5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="454" data-original-width="600" height="303" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYlzGx1m_rG2hLh-uKNHm6upODANbEZUtpmSEMCwFgMLBJxAsidRW_S0uVbHauFWyEMS1_HhG035cnHqF-zkA6xDJ7lNw09_nL_omZ4tCGv_qGpUN_tgMkbpzmWbjz9W7HCSXagF58iKTWZRf2bfgzaDk1ST6PDkGLYfvOitCOyQe8TmLTPFDcGg/w400-h303/viaverde-5.jpg" width="400" /></a></div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/6192850347732641270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/6192850347732641270' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/6192850347732641270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/6192850347732641270'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/04/the-via-verde-stick.html' title='The Via Verde Stick'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0TQSG69s-lFiHSIlO5WePiW3YXHHKZmVYtY5t_ss6lMzPAA4N6MCkINVr6yCRziymBJV4tNMIY6YUSse9A127LRXmm2-8IEipNGjFnLqHjOmH_Nq4a7gAZ0pqBx33S8E6erY1xW0CMUsQFnqPEDb4DrZv6HSO2ZZ0q0apYvnD2SYiFDYabOA2Aw/s72-w640-h296-c/viaverde-1.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-6045805352103665596</id><published>2025-03-31T15:22:00.008+00:00</published><updated>2025-03-31T15:30:58.521+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="retro"/><title type='text'>Debugging Lotus 1-2-3 by fax</title><content type='html'><p>There isn't a lot to this story beyond the fact that in around 1990 I helped debug someone's <a href="https://en.wikipedia.org/wiki/Lotus_1-2-3">Lotus 1-2-3</a> set up via fax. But it's a good reminder of how important the Zeroth Law of Debugging is (see below).</p><p>Without some sort of online connection with these folks, and with transatlantic phone calls being very, very expensive (I was in the UK, they were in the US) fax was the obvious answer.</p><p>I was reminded of this when I came across the actual fax itself:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvBJFVo9lHXKYXrDQLzGXbikkdfnrYIrLIVEfKAtf8xXit4aysAwKI4eGJE7DDtpGox5v5nGtimyBlgEsV2TfFhoJZjOzrMvKn_Y9zWvlnd90WmDJNvY_PhjY-e88ULkTz3anDxMYBTVvcZy6_-WWvwGiNGkfcpE0zZM6ycrTXGZO9d-Qun1QZXg/s1933/123fax-1.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1933" data-original-width="1394" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvBJFVo9lHXKYXrDQLzGXbikkdfnrYIrLIVEfKAtf8xXit4aysAwKI4eGJE7DDtpGox5v5nGtimyBlgEsV2TfFhoJZjOzrMvKn_Y9zWvlnd90WmDJNvY_PhjY-e88ULkTz3anDxMYBTVvcZy6_-WWvwGiNGkfcpE0zZM6ycrTXGZO9d-Qun1QZXg/w462-h640/123fax-1.jpeg" width="462" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">What I asked them to do was give me the output of <span style="font-family: courier;">/ppomr</span>. Hitting <span style="font-family: courier;">/</span> in 1-2-3 started the menu system and each letter took you down a submenu until you hit an actual menu item. <span style="font-family: courier;">/ppomr</span> is <span style="font-family: courier;">/Print Printer Options Margins Right</span> (read all about it in the <a href="https://ia801706.us.archive.org/25/items/lotus-1-2-3-release-3.1-reference/Lotus%201-2-3%20Release%203.1%20-%20Quick%20Reference.pdf">Quick Reference</a>) and so I was asking for the size of the right margin when printing.&nbsp;</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvnfG-rD2_B8Ex1WeGI8rIDmfdkcmWsQXkFB5lW_NdEmgBOImDbwS68iXE2jpDvmEVEq_zfBI3r5HrsWez-n5V_5JL6PFHaKh2kV8S2GW-D92kkp7a1lVlI3vjsThAs_RnkR0XvosVtmqLpDrF-HZGN8hb2qbp5HdE6oNYjlJAbW1zOGOiqMYJ0Q/s1304/123fax-4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1304" data-original-width="1118" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvnfG-rD2_B8Ex1WeGI8rIDmfdkcmWsQXkFB5lW_NdEmgBOImDbwS68iXE2jpDvmEVEq_zfBI3r5HrsWez-n5V_5JL6PFHaKh2kV8S2GW-D92kkp7a1lVlI3vjsThAs_RnkR0XvosVtmqLpDrF-HZGN8hb2qbp5HdE6oNYjlJAbW1zOGOiqMYJ0Q/w549-h640/123fax-4.png" width="549" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">Here's what that looks like in action:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyFlohy9zaZQG4F1lVbE5zwbI-atvbCsblhWuExUIGrz-5M8mXowl5pVX-1Z3PvLtk4RRSy4SSIezsdMAxapZNC-haHtW1IATs6KQbUR1xDS6FkD8qGgqonN4u9jWsta6RUFQtrzTB5h1I7AZE0zNNp3As3bKBG3jXqZWwWdU8vzrovjoWAaodww/s4096/123fx-2.gif" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2304" data-original-width="4096" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyFlohy9zaZQG4F1lVbE5zwbI-atvbCsblhWuExUIGrz-5M8mXowl5pVX-1Z3PvLtk4RRSy4SSIezsdMAxapZNC-haHtW1IATs6KQbUR1xDS6FkD8qGgqonN4u9jWsta6RUFQtrzTB5h1I7AZE0zNNp3As3bKBG3jXqZWwWdU8vzrovjoWAaodww/w640-h360/123fx-2.gif" width="640" /></a></div><div><br /></div>And then I instructed the person on the other end to alter the left margin with <span style="font-family: courier;">/ppoml</span>&nbsp;(<span style="font-family: courier;">/Print Printer Options Margins Left</span>). I also told them if they wanted a change to the page headers I'd need to "send them a disc" (i.e. mail a floppy disc to the US!)<div><br /></div><div><div class="separator" style="clear: both; text-align: left;">If you are going to debug anything you need to tighten the loop between trying something and observing the output of your change. This should be the Zeroth Law of Debugging: get the smallest/fastest test case so you can iterate.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Worst case send faxes across the Atlantic.&nbsp;</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgHKaAHsFiYNnAH36kFKQdWGdtiPd6-AulKES6UwkiyVVWEZ-fqAZu_53HVlie0Ftz-pFokP24OLBf1792PRTvZAZmJeIYd7_TSTfP9DvSeikXQJzXBj5rXgoRoSv8P3dUXzg4HE9WdbWLwTwB_FdWZB67ddTLVZFaoD0So7K1k7z-JDAJoVfJpA/s529/123fax-3.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="472" data-original-width="529" height="358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgHKaAHsFiYNnAH36kFKQdWGdtiPd6-AulKES6UwkiyVVWEZ-fqAZu_53HVlie0Ftz-pFokP24OLBf1792PRTvZAZmJeIYd7_TSTfP9DvSeikXQJzXBj5rXgoRoSv8P3dUXzg4HE9WdbWLwTwB_FdWZB67ddTLVZFaoD0So7K1k7z-JDAJoVfJpA/w400-h358/123fax-3.jpeg" width="400" /></a></div></div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/6045805352103665596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/6045805352103665596' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/6045805352103665596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/6045805352103665596'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/03/debugging-lotus-1-2-3-by-fax.html' title='Debugging Lotus 1-2-3 by fax'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvBJFVo9lHXKYXrDQLzGXbikkdfnrYIrLIVEfKAtf8xXit4aysAwKI4eGJE7DDtpGox5v5nGtimyBlgEsV2TfFhoJZjOzrMvKn_Y9zWvlnd90WmDJNvY_PhjY-e88ULkTz3anDxMYBTVvcZy6_-WWvwGiNGkfcpE0zZM6ycrTXGZO9d-Qun1QZXg/s72-w462-h640-c/123fax-1.jpeg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-5795781756177787948</id><published>2025-02-13T17:55:00.004+00:00</published><updated>2025-02-13T17:59:46.833+00:00</updated><title type='text'>I have come to loathe acronyms</title><content type='html'><p>Unless they are widely, widely known they make communication worse. And they have a tendency to make the writer seem pompous, or a member of some special clique, while making a reader who doesn't know the acronym feel foolish.&nbsp;</p><p>They are the opposite of clear communication, and are often accompanied by unclear, complex language.</p><p>The writer's goal (whether of a book, an email, or whatever the hell we call a tweet now) should be to be understood. Acronyms are an impediment to that and are often more difficult to read or say than actual words.&nbsp;</p><p>And don't fall into the awful trap of defining an acronym in a document and then using it later. That's a substitute for using plain language. Always use plain language.</p><p>Unless your goal is to be misunderstood.&nbsp;</p></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/5795781756177787948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/5795781756177787948' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/5795781756177787948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/5795781756177787948'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/02/i-have-come-to-loath-acronyms.html' title='I have come to loathe acronyms'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-2972398345099268358</id><published>2025-02-10T17:09:00.000+00:00</published><updated>2025-02-10T17:09:09.529+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hardware"/><title type='text'>Archiving hardware projects</title><content type='html'><p>From time to time I do some project involving old hardware that requires connecting it to a modern computer. For example,</p><p><span>&nbsp;&nbsp; &nbsp;</span><a href="https://blog.jgc.org/2025/02/getting-kim-1-to-talk-to-my-mac.html">Getting the KIM-1 to talk to my Mac</a></p><p><span>&nbsp; &nbsp;&nbsp;</span><a href="https://blog.jgc.org/2022/03/resurrecting-dataman-s4-prom-programmer.html">Resurrecting a Dataman S4 PROM programmer</a></p><p><span>&nbsp; &nbsp;&nbsp;</span><a href="https://blog.jgc.org/2022/04/ripping-old-mini-dv-video-tapes-on-mac.html">Ripping old mini DV video tapes on a Mac</a></p><p>And I've come to the conclusion that archiving the related hardware is important. For example, I got this Dataman S4 talking to my Mac using a few different cables. I bought a set of cables and archived them in a bag for the next time I need to do this.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_A37qHS8SIBr146GTQt5yyNg3AENYhRcyj6vAbQCCJeCaSpXI5Mh8IiMRhQMYLGqtqoIeGhgFK5VarUgScWfPV_jlhcyZEXdbtcjUCIgpdz6WG903sxPYD6g9c3rG3hyphenhyphenNcf06m0cyeKQn1OkAVMy_4fFLoiDbNAs1Z2KhlFET2S_rDJY9yZpc1w/s2664/dataman5.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2664" data-original-width="2381" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_A37qHS8SIBr146GTQt5yyNg3AENYhRcyj6vAbQCCJeCaSpXI5Mh8IiMRhQMYLGqtqoIeGhgFK5VarUgScWfPV_jlhcyZEXdbtcjUCIgpdz6WG903sxPYD6g9c3rG3hyphenhyphenNcf06m0cyeKQn1OkAVMy_4fFLoiDbNAs1Z2KhlFET2S_rDJY9yZpc1w/w573-h640/dataman5.jpg" width="573" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>The Dataman S4 project required three things: a USB-C to USB-A adapter, a USB-A to RS-232 adapter and a 9 pin to 25 pin serial cable.&nbsp;<div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBw-gv1T6yK7NS-YQn7wHnDNK61-ow4R6AYjWETsNLG-IQ7pXIcni3NQg0MpcFWKaNyTE6edLK3whoeDL_cvm5M4DzwHm7ytq3zngw5GAwEM3I4wfHlLZdXIruTlCLbpooZi9FZPOQ5Axdq-O8IqUVOFbVpRmNR8NZlE9-Y39vvjUta7XR3UgUug/s4234/archive-1.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4234" data-original-width="3902" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBw-gv1T6yK7NS-YQn7wHnDNK61-ow4R6AYjWETsNLG-IQ7pXIcni3NQg0MpcFWKaNyTE6edLK3whoeDL_cvm5M4DzwHm7ytq3zngw5GAwEM3I4wfHlLZdXIruTlCLbpooZi9FZPOQ5Axdq-O8IqUVOFbVpRmNR8NZlE9-Y39vvjUta7XR3UgUug/w590-h640/archive-1.jpeg" width="590" /></a></div><div><br /></div><div>These things are fairly inexpensive making it viable to archive them. Now I only have to worry about the drivers being available!</div><div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8oe93fugNv6GtBjc9-RkAdaU3jo5Cruy6-BxJH-5uX_k7eFtKFqTBODWC9VXHVSBWRRAHNt5djl1DSNlJ3-mzuSuWZYFR_kK0R7gGSH1zxuL87xhen5ysQTBmh7shP0t4yR4iVQJXXqPsGSI3cSFlQdrROEWokFWiCNCcYNxO0NiQrp4a1T5xfw/s4083/archive-2.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="4083" data-original-width="3763" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8oe93fugNv6GtBjc9-RkAdaU3jo5Cruy6-BxJH-5uX_k7eFtKFqTBODWC9VXHVSBWRRAHNt5djl1DSNlJ3-mzuSuWZYFR_kK0R7gGSH1zxuL87xhen5ysQTBmh7shP0t4yR4iVQJXXqPsGSI3cSFlQdrROEWokFWiCNCcYNxO0NiQrp4a1T5xfw/w590-h640/archive-2.jpeg" width="590" /></a></div></div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/2972398345099268358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/2972398345099268358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/2972398345099268358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/2972398345099268358'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/02/archiving-hardware-projects.html' title='Archiving hardware projects'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_A37qHS8SIBr146GTQt5yyNg3AENYhRcyj6vAbQCCJeCaSpXI5Mh8IiMRhQMYLGqtqoIeGhgFK5VarUgScWfPV_jlhcyZEXdbtcjUCIgpdz6WG903sxPYD6g9c3rG3hyphenhyphenNcf06m0cyeKQn1OkAVMy_4fFLoiDbNAs1Z2KhlFET2S_rDJY9yZpc1w/s72-w573-h640-c/dataman5.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-3528602294442713744</id><published>2025-02-09T20:28:00.008+00:00</published><updated>2025-07-28T14:28:23.275+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="retro"/><title type='text'>Getting the KIM-1 to talk to my Mac</title><content type='html'><p>I've written before about <a href="https://blog.jgc.org/2023/11/my-1976-kim-1.html">my 1976 KIM-1</a> and <a href="https://blog.jgc.org/2013/04/how-i-coded-in-1985.html">code I wrote</a> for a similar one long ago. But I hadn't done much with the KIM-1 and strongly believe that old hardware need to be living machines not still lives. But using the KIM-1 directly (via its keypad and little hexadecimal display) is painful. I wanted to be able to use it with a terminal.</p><p>Luckily, the KIM-1 was designed to interface to a terminal: a <a href="https://en.wikipedia.org/wiki/Teletype_Model_33">Model 33 ASR Teletype</a>. Teletypes use a type of interface which is unusual to most people (unless you work with industrial machinery where it's pretty common). That interface is a <a href="https://en.wikipedia.org/wiki/Digital_current_loop_interface">current loop</a>.</p><p>A current loop uses current (often 20mA) rather than voltage (such as the voltage levels seen in common serial interfaces). Prior to the creation of <a href="https://en.wikipedia.org/wiki/RS-232">RS-232</a>, current loops were very common. Current loops are still used in industrial settings partly because they have good noise immunity, can go for long distances, and are simple and reliable.&nbsp;</p><p>In the KIM-1 manual there's a picture of the way its current loop works when connected to a Teletype:&nbsp;</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNI4PoUrRp6VTMXV5sTj-cbd5KxPR0J4kMurosS_YawM1EPLVcKsq-4MIVitMa48NSS9nPgfYU2eui9t6UcwwHXSjzVwrYUIVmGWC1Ex7jFBgjyKnJ0sY7WpVmCbloaGjL5zeRAwX6XtS4l_lHwH88ihpgZ-awjCfDIcFdgCvBJ4MZ-b3pQydWNg/s1368/kim-1-1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1176" data-original-width="1368" height="550" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNI4PoUrRp6VTMXV5sTj-cbd5KxPR0J4kMurosS_YawM1EPLVcKsq-4MIVitMa48NSS9nPgfYU2eui9t6UcwwHXSjzVwrYUIVmGWC1Ex7jFBgjyKnJ0sY7WpVmCbloaGjL5zeRAwX6XtS4l_lHwH88ihpgZ-awjCfDIcFdgCvBJ4MZ-b3pQydWNg/w640-h550/kim-1-1.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">When the KIM-1 wants to send data to the Teletype it uses pins S and U of one of its edge connectors. S is permanently connected to +5V via a 150 ohm resistor. When the KIM-1 receives data from the Teletype's keyboard it uses pins R and T. Just like S, R is permanently connected to +5V. The important thing to note is that the KIM-1 is responsible for the current: the Teletype is entirely "dumb". This will matter later in this blog post.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">I happened to have lying around <a href="https://www.horter-shop.de/de/rs232-tty-adapter-passiv/151-bausatz-rs232-tty-adapter-passiv-4260404260127.html">a kit to make an adapter between RS-232 and the Siemens SIMATIC S5 current loop</a>.&nbsp;</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAeSbQlVy8BJolG0uDvmgGgtdDsoDFLV6Qo0sHrg-iVI8P0stXBdUg_HsRJqAAIToLVMsjMQu0EQeDfhja17tH9se1YtZXs3yccjPKcwmIUILqzB0I9xizoo8U7jLx_JXb8q2uenEPW7Tc_hv3sGrj7G9CRuep8WmkpyU13Beigo4jbMFZxiAjZw/s982/kim-1-2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="946" data-original-width="982" height="616" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAeSbQlVy8BJolG0uDvmgGgtdDsoDFLV6Qo0sHrg-iVI8P0stXBdUg_HsRJqAAIToLVMsjMQu0EQeDfhja17tH9se1YtZXs3yccjPKcwmIUILqzB0I9xizoo8U7jLx_JXb8q2uenEPW7Tc_hv3sGrj7G9CRuep8WmkpyU13Beigo4jbMFZxiAjZw/w640-h616/kim-1-2.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">A simple kit to build. Since USB to RS-232 adapters are easy to find I'd be able to communicate with the KIM-1 using it. But first check the circuit diagram of this adapter. There's a small problem on the receive side.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCYmSOPwceRgzMBw50FJPAOYpZdhpJp0Yh3WhN120WAo6qEHLwzn2a5CwFTXAYINa_36dofqGtjI7RXdbVWbcVenGRU4f7f6l-Mhb7lc0DEYEc6aicS7EFNqWhg6ynje8sxQcqZQVyWujO1ARaJUotW1M8gijQh0X27xcgnN3y32U5FNllgFWX7A/s1758/kim-1-3.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="874" data-original-width="1758" height="318" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCYmSOPwceRgzMBw50FJPAOYpZdhpJp0Yh3WhN120WAo6qEHLwzn2a5CwFTXAYINa_36dofqGtjI7RXdbVWbcVenGRU4f7f6l-Mhb7lc0DEYEc6aicS7EFNqWhg6ynje8sxQcqZQVyWujO1ARaJUotW1M8gijQh0X27xcgnN3y32U5FNllgFWX7A/w640-h318/kim-1-3.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">As is pretty common with current loop applications, optoisolators are used. OK1 handles when the device connected to the RS-232 transmits something. And you can see from the diagram, it expects to be getting 5V, 20mA in on its pin 5 and then out again on pin 4. So, that'll work perfectly for the "keyboard" connection to the KIM-1 (pins R and T).&nbsp;</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">But the receive side is a different story. It's handled by OK2 and it's expecting 5V, 20mA on pin 1, but pin 2 goes to GND. So, there's no "loop" back to the device. This won't work with the KIM-1 without a small modification.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">I built the kit and and tested it against the KIM-1 like this:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghrUvvLUgSr3RZhod4XiIyxt8viOVH-NQwoLikQMDsZM6jf17czwBXfMYjJKhiB0DeTZMp8ryHVitx-8g1TolmqxAhxfE633YHYpoGBidPl1hcs3eBGgcPeGpE1VULmDIXNxOPGk9D5eiRK7TfxMcWc7uvnXLm3Ht7pP5gBBIq9Ms93bhuvCgyDg/s1280/kim-1-4.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="744" data-original-width="1280" height="372" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghrUvvLUgSr3RZhod4XiIyxt8viOVH-NQwoLikQMDsZM6jf17czwBXfMYjJKhiB0DeTZMp8ryHVitx-8g1TolmqxAhxfE633YHYpoGBidPl1hcs3eBGgcPeGpE1VULmDIXNxOPGk9D5eiRK7TfxMcWc7uvnXLm3Ht7pP5gBBIq9Ms93bhuvCgyDg/w640-h372/kim-1-4.jpg" width="640" /></a></div><div><br /></div>Looks messy but it validated the little modification I needed to make and that I could talk to the KIM-1. Here it is talking at 300 baud using the RS-232 to USB adapter seen above.&nbsp;<div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQxkZf-cbzjvBVaBvQGWO3XeLjzf6k7kzf0uM0sczMbzcLYzSoZ6sUXsg47ey0zq4VautycgRmuAz1MVwBIbrS01NywuIKJZSoBvvnj7T8kEP8kzpBBPmwndpaBqp7JpibNfBRYRGlHQHh0MShzorcPoQYeN541YcXG3gK__dTB5kvdR6lw3bnUg/s1146/kim-1.gif" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1020" data-original-width="1146" height="570" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQxkZf-cbzjvBVaBvQGWO3XeLjzf6k7kzf0uM0sczMbzcLYzSoZ6sUXsg47ey0zq4VautycgRmuAz1MVwBIbrS01NywuIKJZSoBvvnj7T8kEP8kzpBBPmwndpaBqp7JpibNfBRYRGlHQHh0MShzorcPoQYeN541YcXG3gK__dTB5kvdR6lw3bnUg/w640-h570/kim-1.gif" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both; text-align: left;">So, what's the modification? Well, pin 2 of OK2 goes to ground and we don't want it to, we want it to go the KIM-1's pin U. There are two ways to do this. I could have cut the track on the back of the board that goes from pin 2 to ground, and soldered a wire on the back.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixwnVKqFHl5uFIx6voI_JNpHEdW1WRpV8-zv4w6QydXJ0CTPSLced0JGZgZe8rucLGJG_AqZJzDk2V-7iC1kYzi7o0i-OmKObeNXGq_CjBaSxcbPX0VlK_eGEznspzc6nZ-btpSZdkyL9NZ-6lChzPpcZCz-rEFODbiN5WSQT-jCdVHbTbizarkQ/s540/kim-1-5.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="488" data-original-width="540" height="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixwnVKqFHl5uFIx6voI_JNpHEdW1WRpV8-zv4w6QydXJ0CTPSLced0JGZgZe8rucLGJG_AqZJzDk2V-7iC1kYzi7o0i-OmKObeNXGq_CjBaSxcbPX0VlK_eGEznspzc6nZ-btpSZdkyL9NZ-6lChzPpcZCz-rEFODbiN5WSQT-jCdVHbTbizarkQ/s320/kim-1-5.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">But this kit came with all the chips socketed so I took an even simpler route. Bend pin 2 away from the socket and solder directly to it.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdUEHXkzdm5jFklLlLDNbtbLnPCKx7RELxbJMLj2-0lGW7nFmcOD_qzOp8UReQ7tyMTTbaHtjA6_NlwUd0O4Cr48_2T60ZVRf8CGEpAfcjv8qECa7aFXoOFy5kLvMUBa3ZOE_y8ng7kDFry6PALL4aB2aTxRl9kDjWP9ubNAC_l4cs3rrUBAtEvQ/s3193/kim-1-6.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2698" data-original-width="3193" height="540" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdUEHXkzdm5jFklLlLDNbtbLnPCKx7RELxbJMLj2-0lGW7nFmcOD_qzOp8UReQ7tyMTTbaHtjA6_NlwUd0O4Cr48_2T60ZVRf8CGEpAfcjv8qECa7aFXoOFy5kLvMUBa3ZOE_y8ng7kDFry6PALL4aB2aTxRl9kDjWP9ubNAC_l4cs3rrUBAtEvQ/w640-h540/kim-1-6.jpg" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">And that worked fine. The kit also came with a nice little box and so the final adapter looks neat.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfUeBT17s3TjORhTssUtiUGLaW1M_CpBMrWIwnNG737fVgehQnvGZ9-9VoHNNFOeDzNCtUrjQwO82_4VMayPlsyQhOwI23jMH-1rPcHCzkVWi9ZkJe8T1zICJAcAjRnyJaqNyr8ZZj7IRLZn3ivPDXWUQFV5VkuNaKU1H-cSDk07jFKqq6it_PxQ/s1280/kim-1-7.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfUeBT17s3TjORhTssUtiUGLaW1M_CpBMrWIwnNG737fVgehQnvGZ9-9VoHNNFOeDzNCtUrjQwO82_4VMayPlsyQhOwI23jMH-1rPcHCzkVWi9ZkJe8T1zICJAcAjRnyJaqNyr8ZZj7IRLZn3ivPDXWUQFV5VkuNaKU1H-cSDk07jFKqq6it_PxQ/w640-h480/kim-1-7.jpeg" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">The grey wire goes to the KIM-1, the white wire is a USB-A cable that I'm using to power the adapter and the KIM-1 itself.&nbsp;</div><div class="separator" style="clear: both; text-align: left;"><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRNc94lv50bDs6CSJnYk8rEeC9wAiQlf_tIUCAgHw203ey4NJwxBF8MyhroSH1TyB6FPqsk4i4VTQGUbQwYcXBGvlCv5fI6P0qOYMcE5sB2t3VDm-ebZY-iMjZgWndXe2Gs5_bY4cHcwNNUpXKMBr8GXj-C_dkNU7oDPRYYKoqrgdfJQOBb1nDTw/s1280/kim-1-8.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1280" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRNc94lv50bDs6CSJnYk8rEeC9wAiQlf_tIUCAgHw203ey4NJwxBF8MyhroSH1TyB6FPqsk4i4VTQGUbQwYcXBGvlCv5fI6P0qOYMcE5sB2t3VDm-ebZY-iMjZgWndXe2Gs5_bY4cHcwNNUpXKMBr8GXj-C_dkNU7oDPRYYKoqrgdfJQOBb1nDTw/w640-h480/kim-1-8.jpeg" width="640" /></a></div><br /></div><div>The KIM-1 will happily communicate as 1200 baud with 7 bit ASCII and 2 stop bits. I'm using minicom to communicate with it. The main thing is to set the delete key to send DEL instead of BS since the KIM-1 needs to receive a DEL on start up so that it can measure the Mac's transmission speed.</div><div><br /></div><div>One of the Teletype functions available is to load a program from punched tape. I don't have an actual Teletype but I can emulate the punched tape format and that'll allow me to upload programs easily.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9IJ_wZJFKEaDD5UhZ_cb3FiMO9IHgOfrMnrKOQjYdMuSvZNwO7cxND1M774qpg639z71zcWxWUPrvc-YFYLWIS5SdfzlZ0nMFZpaUKHE5JANoIwmHLXEa6NDE-oAkgwPyukU3RtHTmdhisdCeYCaD_SgRDAldBPtge1gbSAbM8XLe-hQEccRrqg/s1208/kim-1-9.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1208" data-original-width="1016" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9IJ_wZJFKEaDD5UhZ_cb3FiMO9IHgOfrMnrKOQjYdMuSvZNwO7cxND1M774qpg639z71zcWxWUPrvc-YFYLWIS5SdfzlZ0nMFZpaUKHE5JANoIwmHLXEa6NDE-oAkgwPyukU3RtHTmdhisdCeYCaD_SgRDAldBPtge1gbSAbM8XLe-hQEccRrqg/w538-h640/kim-1-9.png" width="538" /></a></div><br /><div>The format itself is not complicated.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWxEHqPySDq6ch5c9XLYO8NOf7B8x-ExUa0UDgFltgwhqYWDBAyNrgpLmn3EWcnBeWPOcQ6TNOcZOz0ia3TM2MFcvx5ol54r9ENRTb76a_S-jd78mbyl1J85011K7a4wTRgYyTDaPfsOEjdAP-Py9ny5sk-oRxHawHil31r6Wba_QiU8QKcw8etg/s1058/kim-1-10.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1058" data-original-width="1016" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWxEHqPySDq6ch5c9XLYO8NOf7B8x-ExUa0UDgFltgwhqYWDBAyNrgpLmn3EWcnBeWPOcQ6TNOcZOz0ia3TM2MFcvx5ol54r9ENRTb76a_S-jd78mbyl1J85011K7a4wTRgYyTDaPfsOEjdAP-Py9ny5sk-oRxHawHil31r6Wba_QiU8QKcw8etg/w614-h640/kim-1-10.png" width="614" /></a></div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/3528602294442713744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/3528602294442713744' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/3528602294442713744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/3528602294442713744'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/02/getting-kim-1-to-talk-to-my-mac.html' title='Getting the KIM-1 to talk to my Mac'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNI4PoUrRp6VTMXV5sTj-cbd5KxPR0J4kMurosS_YawM1EPLVcKsq-4MIVitMa48NSS9nPgfYU2eui9t6UcwwHXSjzVwrYUIVmGWC1Ex7jFBgjyKnJ0sY7WpVmCbloaGjL5zeRAwX6XtS4l_lHwH88ihpgZ-awjCfDIcFdgCvBJ4MZ-b3pQydWNg/s72-w640-h550-c/kim-1-1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-8168793316207256718</id><published>2025-02-03T19:27:00.055+00:00</published><updated>2025-02-05T09:50:10.781+00:00</updated><title type='text'>Twenty years of the "GNU Make Standard Library"</title><content type='html'><p>Twenty years ago, on February 3, 2005, I released v1.0.0 of a project I called "GNU Make Standard Library" (GMSL). That <a href="https://sourceforge.net/projects/gmsl/files/GNU%20Make%20Standard%20Library/v1.0.0/">first release</a> can still be found in its original location on SourceForge. I moved the project from SourceForge to <a href="https://github.com/jgrahamc/gmsl">GitHub</a> and newer releases are there. The latest release is <a href="https://github.com/jgrahamc/gmsl/releases/tag/v1.2.2">v1.2.2</a> on March 30, 2024.</p><p>The project has its own homepage at&nbsp;<a href="https://gmsl.jgc.org/">https://gmsl.jgc.org/</a>. The page describes the GMSL as "a collection of functions implemented using native GNU Make functionality that provide list and string manipulation, integer arithmetic, associative arrays, stacks, and debugging facilities."</p><p>GMSL grew out of work that eventually became my book "<a href="https://nostarch.com/gnumake">The GNU Make Book</a>". What can it do?</p><p>Well, things like this:</p><p><span style="font-family: courier;">include gmsl<br /></span><span style="font-family: courier;"><br />VAR&nbsp; &nbsp; := Here is a string with some words in it.<br /></span><span style="font-family: courier;">$(info $(VAR))<br /></span><span style="font-family: courier;"><br /># Convert VAR to lowercase<br /></span><span style="font-family: courier;">LC_VAR := $(call lc,$(VAR))<br /></span><span style="font-family: courier;">$(info $(LC_VAR))<br /></span><span style="font-family: courier;"><br /># Get the length of LC_VAR as a string<br /></span><span style="font-family: courier;">$(info $(call strlen,$(LC_VAR)))</span></p><p><span style="font-family: courier;"># See if VAR and LC_VAR are the same string<br /></span><span style="font-family: courier;">$(info $(if $(call seq,$(VAR),$(LC_VAR)),Same,Different))</span></p><p><span style="font-family: courier;"># Treat LC_VAR as a list and get the last element<br /></span><span style="font-family: courier;">$(info $(call last,$(LC_VAR)))</span></p><p><span style="font-family: courier;"># Get the number of list elements in LC_VAR<br /></span><span style="font-family: courier;">$(info $(call length,$(LC_VAR)))</span></p><p><span style="font-family: courier;"># Apply the strlen function to each element of LC_VAR<br /></span><span style="font-family: courier;">$(info $(call map,strlen,$(LC_VAR)))</span></p><p><span style="font-family: courier;"># Deduplicate the list of lenghts of elements of LC_VAR<br /></span><span style="font-family: courier;">$(info $(call uniq,$(call map,strlen,$(LC_VAR))))</span></p><p><span style="font-family: courier;"># Split LC_VAR on the letter e and replace with 3<br /></span><span style="font-family: courier;">$(info $(call merge,3,$(call split,e,$(LC_VAR))))</span></p><p><span style="font-family: courier;"># Create an associative array mapping the lengths of words<br /></span><span style="font-family: courier;"># in LC_VAR to a count for each length<br /></span><span style="font-family: courier;">increment_aa = $(call set,LC_VAR_AA,$1,$(call&nbsp;</span><span style="font-family: courier;">inc,$(call&nbsp;</span><span style="font-family: courier;">get,LC_VAR_AA,$1)))<br /></span><span style="font-family: courier;">$(call map,increment_aa,$(call map,strlen,$(LC_VAR)))<br /></span><span style="font-family: courier;">dump_key = $(info $1: $(call get,LC_VAR_AA,$1))<br /></span><span style="font-family: courier;">$(call map,dump_key,$(call keys,LC_VAR_AA))</span></p><p>And a whole lot more. The entire GMSL is written using native GNU Make functionality and pull requests are welcome!</p><p>Update 2025-02-05: I decided GMSL was missing a <a href="https://github.com/jgrahamc/gmsl/blob/145bda7295dee873b2c2842f404365857ea24764/__gmsl#L239">fold</a> function so I added it. So, latest release is today, <a href="https://github.com/jgrahamc/gmsl/releases/tag/v1.2.3">v1.2.3</a>.&nbsp;</p></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/8168793316207256718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/8168793316207256718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/8168793316207256718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/8168793316207256718'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2025/02/twenty-years-of-gnu-make-standard.html' title='Twenty years of the "GNU Make Standard Library"'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-8649792458628677830</id><published>2024-12-26T15:26:00.003+00:00</published><updated>2024-12-26T15:34:02.508+00:00</updated><title type='text'>The complete text of "All Watched Over by Machines of Loving Grace"</title><content type='html'><p>Richard Brautigan's poem "<a href="https://en.wikipedia.org/wiki/All_Watched_Over_by_Machines_of_Loving_Grace">All Watched Over by Machines of Loving Grace</a>" is somewhat well known in tech. circles but I couldn't find a complete PDF of the <a href="https://en.wikipedia.org/wiki/All_Watched_Over_by_Machines_of_Loving_Grace_(poetry_collection)">original 1967 publication of it (and other poems)</a> online.&nbsp;</p><p>The copyright notice in Brautigan's collection reads:</p><p><span style="font-family: courier;">&nbsp;&nbsp;© Copyright 1967 by Richard Brautigan&nbsp;</span></p><p><span style="font-family: courier;"><span>&nbsp;&nbsp;</span>Permission is granted to reprint<br /><span>&nbsp; </span>any of these poems in magazines,<br /><span>&nbsp; </span>books and newspapers if they are<br /><span>&nbsp; </span>given away free.&nbsp;</span></p><p>I am interpreting "print" as including the availability of a free PDF and making a scan of the complete book available here.&nbsp;</p><div class="separator" style="clear: both; text-align: center;"><a href="https://jgc.org/awobmolg-1967.pdf" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1676" data-original-width="1392" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGhScUr9y4lWyAZs6B-j7QtJjfqFmt-VrOpfII9BIJYzoGDGCtdUYR0pffEwSIWwDUrIBaj57cz5Uluj8CG1hzA8Oi6Vyvm9Bc3wcDkAxucLJQJGrQHOOYLfwIE0zc-JsnuKfAkwrxQPe1N1RdLV7uOhfQD84r6oCgMuq39ZxVXOTT3sNgxGv9CA/w532-h640/Screenshot%202024-12-26%20at%2015.24.00.png" width="532" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/8649792458628677830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/8649792458628677830' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/8649792458628677830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/8649792458628677830'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2024/12/the-complete-text-of-all-watched-over.html' title='The complete text of "All Watched Over by Machines of Loving Grace"'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGhScUr9y4lWyAZs6B-j7QtJjfqFmt-VrOpfII9BIJYzoGDGCtdUYR0pffEwSIWwDUrIBaj57cz5Uluj8CG1hzA8Oi6Vyvm9Bc3wcDkAxucLJQJGrQHOOYLfwIE0zc-JsnuKfAkwrxQPe1N1RdLV7uOhfQD84r6oCgMuq39ZxVXOTT3sNgxGv9CA/s72-w532-h640-c/Screenshot%202024-12-26%20at%2015.24.00.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-8901769136152952921</id><published>2024-12-15T16:15:00.003+00:00</published><updated>2024-12-15T16:16:23.395+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="pseudo-randomness"/><title type='text'>badkeming: a site for kerning so bad it's keming</title><content type='html'><p>I made another silly Tumblr (to go along with <a href="https://moviecode.tumblr.com/">Movie Code</a> and <a href="https://lowbackgroundsteel.ai/">Low Background Steel</a>). This times it's a Tumblr for all those font disasters and other typographical amusements. Welcome to the wonderful world of <a href="https://badkeming.com">badkeming.com</a>:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://badkeming.com" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1428" data-original-width="2174" height="420" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOnAi31wLwP1beQLc-ylj8D2VpWVsJQkuyVcUMViFFpppM7BmbNgrB36PQWpxETwYpIP2PjkoJ-DnsDabdn5UOJoNvy-vh6oPlh2cISzOiqj-vmc-zfHKzSasC8ZamjWl7vwXU5ee2V7Jfj5wuQEBgfyOniA_1_3Z_RuTDFPv3zmTQVugR1HjOZA/w640-h420/badkeming-1.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Submissions gladly accepted.</div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/8901769136152952921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/8901769136152952921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/8901769136152952921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/8901769136152952921'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2024/12/badkeming-site-for-kerning-so-bad-its.html' title='badkeming: a site for kerning so bad it's keming'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOnAi31wLwP1beQLc-ylj8D2VpWVsJQkuyVcUMViFFpppM7BmbNgrB36PQWpxETwYpIP2PjkoJ-DnsDabdn5UOJoNvy-vh6oPlh2cISzOiqj-vmc-zfHKzSasC8ZamjWl7vwXU5ee2V7Jfj5wuQEBgfyOniA_1_3Z_RuTDFPv3zmTQVugR1HjOZA/s72-w640-h420-c/badkeming-1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19303585.post-4119179139891431895</id><published>2024-12-08T17:24:00.004+00:00</published><updated>2024-12-08T17:28:43.687+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="anti-spam"/><title type='text'>"All your base are belong to us" introduction to my 2004 MIT Spam Conference talk</title><content type='html'><p>As I've mentioned before <a href="https://blog.jgc.org/2023/07/how-to-beat-adaptivebayesian-spam.html">my talk at the 2004 MIT Spam Conference</a> was about using one machine learning system to beat another. In that case a spammer using machine learning to beat a machine learning spam filter.</p><p>The talk started with a short video playing off the <a href="https://en.wikipedia.org/wiki/All_your_base_are_belong_to_us">All your base are belong to us</a> meme. I very carefully edited the images to change the text to be about spam and incorporate Paul Graham (who was the instigator of the MIT Spam Conference and an <a href="https://paulgraham.com/spam.html">early machine learning spam filter pioneer</a>).&nbsp;</p><p>I thought I'd <a href="https://blog.jgc.org/2023/05/bringing-popfile-web-site-back-from-dead.html">lost the audio of that introduction</a> and randomly came across it today. So here is the restored introduction to the talk made on a Mac in 2004 (I still haven't found the audio of the actual talk).</p> <div style="padding-top: 56.25%; position: relative;"> <iframe allow="accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;" allowfullscreen="true" loading="lazy" src="https://customer-rww76yind8iym5aw.cloudflarestream.com/41a0f39e1f9d7fcde6dd32bacf628437/iframe?poster=https%3A%2F%2Fcustomer-rww76yind8iym5aw.cloudflarestream.com%2F41a0f39e1f9d7fcde6dd32bacf628437%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D%26height%3D600" style="border: none; height: 100%; left: 0; position: absolute; top: 0; width: 100%;"></iframe></div></content><link rel='replies' type='application/atom+xml' href='http://blog.jgc.org/feeds/4119179139891431895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19303585/4119179139891431895' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/4119179139891431895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19303585/posts/default/4119179139891431895'/><link rel='alternate' type='text/html' href='http://blog.jgc.org/2024/12/all-you-base-are-belong-to-us.html' title='"All your base are belong to us" introduction to my 2004 MIT Spam Conference talk'/><author><name>Unknown</name><email>[email protected]</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
{
"age": "0",
"cache-control": "public, must-revalidate, proxy-revalidate, max-age=1",
"cf-cache-status": "DYNAMIC",
"cf-ray": "a0b1b7b4dca0c424-CMH",
"connection": "close",
"content-type": "application/atom+xml; charset=UTF-8",
"cross-origin-resource-policy": "cross-origin",
"date": "Sat, 13 Jun 2026 14:17:13 GMT",
"etag": "W/\"93c61cd237e499bc8f37b17aacdcaec6d88e7a648a37a98df78fb8da95833392\"",
"expires": "Sat, 13 Jun 2026 14:17:14 GMT",
"last-modified": "Tue, 09 Jun 2026 06:39:10 GMT",
"server": "cloudflare",
"speculation-rules": "\"/cdn-cgi/speculation\"",
"transfer-encoding": "chunked",
"vary": "Accept-Encoding",
"x-content-type-options": "nosniff",
"x-frame-options": "SAMEORIGIN",
"x-xss-protection": "0"
}
{
"meta": {
"type": "atom",
"version": "1.0"
},
"language": null,
"title": "John Graham-Cumming's blog",
"description": null,
"copyright": null,
"url": "http://blog.jgc.org/",
"self": "http://www.blogger.com/feeds/19303585/posts/default",
"published": null,
"updated": "2026-06-09T06:39:10.148Z",
"generator": {
"label": "Blogger",
"version": "7.00",
"url": "http://www.blogger.com"
},
"image": null,
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "pseudo-randomness",
"term": "pseudo-randomness",
"url": null
},
{
"label": "hardware",
"term": "hardware",
"url": null
},
{
"label": "babbage",
"term": "babbage",
"url": null
},
{
"label": "gaga",
"term": "gaga",
"url": null
},
{
"label": "anti-spam",
"term": "anti-spam",
"url": null
},
{
"label": "gnu make",
"term": "gnu make",
"url": null
},
{
"label": "retro",
"term": "retro",
"url": null
},
{
"label": "security",
"term": "security",
"url": null
},
{
"label": "codes and ciphers",
"term": "codes and ciphers",
"url": null
},
{
"label": "the geek atlas",
"term": "the geek atlas",
"url": null
},
{
"label": "rants and raves",
"term": "rants and raves",
"url": null
},
{
"label": "alan turing",
"term": "alan turing",
"url": null
},
{
"label": "hits",
"term": "hits",
"url": null
},
{
"label": "mathematics",
"term": "mathematics",
"url": null
},
{
"label": "calculators",
"term": "calculators",
"url": null
},
{
"label": "climate change",
"term": "climate change",
"url": null
},
{
"label": "clocks",
"term": "clocks",
"url": null
},
{
"label": "minitel",
"term": "minitel",
"url": null
},
{
"label": "perl",
"term": "perl",
"url": null
},
{
"label": "google go",
"term": "google go",
"url": null
},
{
"label": "toys",
"term": "toys",
"url": null
},
{
"label": "behind the screens",
"term": "behind the screens",
"url": null
},
{
"label": "machine learning",
"term": "machine learning",
"url": null
},
{
"label": "babygaga",
"term": "babygaga",
"url": null
},
{
"label": "games",
"term": "games",
"url": null
},
{
"label": "arc",
"term": "arc",
"url": null
},
{
"label": "my services",
"term": "my services",
"url": null
},
{
"label": "popfile",
"term": "popfile",
"url": null
},
{
"label": "radio",
"term": "radio",
"url": null
},
{
"label": "cansole",
"term": "cansole",
"url": null
},
{
"label": "facebook",
"term": "facebook",
"url": null
},
{
"label": "privacy",
"term": "privacy",
"url": null
},
{
"label": "knx",
"term": "knx",
"url": null
},
{
"label": "well... actually",
"term": "well... actually",
"url": null
}
],
"items": [
{
"id": "tag:blogger.com,1999:blog-19303585.post-1852883091736792774",
"title": "The aperiodic table",
"description": null,
"url": "http://blog.jgc.org/2026/05/the-aperiodic-table.html",
"published": "2026-05-12T15:55:46.568Z",
"updated": "2026-05-18T17:16:14.439Z",
"content": "<p><a href=\"https://xkcd.com/3242/\">XKCD 3242</a> is titled \"The aperiodic table\" and looks like this:</p><p></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://xkcd.com/3242/\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"928\" data-original-width=\"1480\" height=\"402\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEjfPGtFHYt3RAe9oehopqvy4J0CBNA5RQzgAS3B_n1HR17DUyT40eGRS5ZlvYvKQD5OJp3d0F-XulGQIs7ncOQ_q8UoHlMX5LRhc9Ne_IA7QytCRwVz2YQyfQFIXk5upm8S5C1-w7R0E40PNNTRd0acI-uLilVH4xaKLpB8P1Wz-EvApG3D_m16wQ=w640-h402\" width=\"640\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div>Which is cool, but it's not <a href=\"https://en.wikipedia.org/wiki/Aperiodic_tiling\">aperiodic</a> like a <a href=\"https://en.wikipedia.org/wiki/Penrose_tiling\">Penrose tiling</a>. So, with a little (a lot) of help from Claude I created <a href=\"http://aperiodictable.com\">aperiodictable.com</a>: your one true resource for the periodic table on a <a href=\"https://en.wikipedia.org/wiki/Penrose_tiling#Rhombus_tiling_(P3)\">Penrose P3</a> tiling. Click and drag the canvas to place the periodic table wherever you fancy. Hit Print to print your own Aperiodic Table.<p></p><p></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://aperiodictable.com\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"1302\" data-original-width=\"1946\" height=\"428\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEht1-8t9H5Oo4Mm-N1gQN1Dq7hrbtTLQez6dcdqWe3ayKgRuQm7o0tHZiIxyAV8mtunKwgsy1abIDuALpr4SEUbbOR6JfVin854qNEWQ6_CoBhnoE8laFdSL7nuKCF15ecOgEDmJxb7SF7i-vYZzcsiHdRXhEmUcV0rmHmtUmbZ1YaUdrs967LDhA=w640-h428\" width=\"640\" /></a></div><br />It's a single page that's hosted on <a href=\"https://pages.cloudflare.com\">Cloudflare Pages</a>.<p></p>",
"image": {
"url": "https://blogger.googleusercontent.com/img/a/AVvXsEjfPGtFHYt3RAe9oehopqvy4J0CBNA5RQzgAS3B_n1HR17DUyT40eGRS5ZlvYvKQD5OJp3d0F-XulGQIs7ncOQ_q8UoHlMX5LRhc9Ne_IA7QytCRwVz2YQyfQFIXk5upm8S5C1-w7R0E40PNNTRd0acI-uLilVH4xaKLpB8P1Wz-EvApG3D_m16wQ=s72-w640-h402-c",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "pseudo-randomness",
"term": "pseudo-randomness",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-3060475110203474364",
"title": "Raspberry Pi as an isolated AI coding server",
"description": null,
"url": "http://blog.jgc.org/2026/04/raspberry-pi-as-isolated-ai-coding.html",
"published": "2026-04-14T10:22:00.006Z",
"updated": "2026-04-14T11:00:05.405Z",
"content": "<p>I've been working quite a bit with Claude Code and OpenCode on a <a href=\"https://github.com/jgrahamc/koolenex\">project</a> and really wanted a way to run both without having to constantly approve use of tools. That's quite possible with Claude's <span style=\"font-family: courier;\">claude --permission-mode bypassPermissions</span> [1] (I'd like to use <span style=\"font-family: courier;\">claude --enable-auto-mode</span> but it's not available on my plan level (Max) [2]).</p><p>But, either way, I don't want Claude or OpenCode doing whatever they wants on my <a href=\"https://blog.jgc.org/2024/01/my-daily-driver-is-older-than-i-thought.html\">main machine</a>. Various options exist: VMs, containers, sandboxes. Some people seem to have decided that a <a href=\"https://www.apple.com/mac-mini/\">Mac mini</a> is how you run AI tools (such as <a href=\"https://openclaw.ai\">OpenClaw</a>). But for what I'm doing a <a href=\"https://www.raspberrypi.com/products/raspberry-pi-5/\">Raspberry Pi 5</a> works fine.</p><p></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEiQNuXX8T1iMr1QHQe2zgfOW_3ZVaMN7Yp1XiruFwDqJdvYcqI8it3jMw_DuRFkXAass_aEy2qsPQj9CNPEcy4oMkBFHGn0YXMsXNzr9QwNbwet8beQubcCr_hidzA7B7m4oyum1KK6zfrVBQY_heFdEOrs-kyrxA5sguooXB1YNWpYOgrTrL0eww\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"935\" data-original-width=\"1280\" height=\"293\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEiQNuXX8T1iMr1QHQe2zgfOW_3ZVaMN7Yp1XiruFwDqJdvYcqI8it3jMw_DuRFkXAass_aEy2qsPQj9CNPEcy4oMkBFHGn0YXMsXNzr9QwNbwet8beQubcCr_hidzA7B7m4oyum1KK6zfrVBQY_heFdEOrs-kyrxA5sguooXB1YNWpYOgrTrL0eww=w400-h293\" width=\"400\" /></a></div><p></p><p>The set up is as follows:</p><p><span> </span>Raspberry Pi 5 16GB</p><p><span> </span>Joy-IT aluminium case with fan</p><p><span> Debian Trixie installed via the <a href=\"https://www.raspberrypi.com/software/\">Raspberry Pi Imager</a></span><br /></p><p><span><span> root password set on Raspberry Pi and default user removed from </span>sudoers by deleting <span style=\"font-family: courier;\">/etc/sudoers.d/010_pi-nopasswd</span></span></p><p><span><span> Claude Code run with <span style=\"font-family: courier;\">bypassPermissions</span></span><br /></span></p><p><span><span><span> A new SSH key on the Raspberry Pi for GitHub access</span><br /></span></span></p><p><span><span><span><span> <span style=\"font-family: courier;\">iptables</span> firewall preventing local network access but allowing Internet and incoming SSH</span><br /></span></span></span></p><p><span><span><span><span><span> Local network access also blocked on my home network firewall</span><br /></span></span></span></span></p><p><span><span><span><span><span>I SSH into <span style=\"font-family: courier;\">altair-iv</span> and use <a href=\"https://www.gnu.org/software/screen/\">GNU screen</a> to leave my Claude or OpenCode session running. </span></span></span></span></span></p><p><span><span><span><span><span></span></span></span></span></span></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><div class=\"separator\" style=\"clear: both; text-align: center;\"><span><span><span><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEhF64mvn4sRwYU6ebyUm3pZcZou6elLIK-QSeM3vzO4wngSrwQVHuWCHokw9SvLcjI2gRr--Vx65F9TMb8_Z6t4KAEOeB1sYOudtLUxIA29vUgWa68AnWXnufimg8pfclvR78WAiBC7qc1LW0H55_DXECBDpraUsYSvdCxHR0SW_C1nIVMIdWSNcw\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"664\" data-original-width=\"1938\" height=\"220\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEhF64mvn4sRwYU6ebyUm3pZcZou6elLIK-QSeM3vzO4wngSrwQVHuWCHokw9SvLcjI2gRr--Vx65F9TMb8_Z6t4KAEOeB1sYOudtLUxIA29vUgWa68AnWXnufimg8pfclvR78WAiBC7qc1LW0H55_DXECBDpraUsYSvdCxHR0SW_C1nIVMIdWSNcw=w640-h220\" width=\"640\" /></a></span></span></span></div><span><span><span><br /></span></span></span></div><p></p><p>Supply chain attacks also worry me and running this isolated development server helps isolated the blast radius. Plus for npm I am running with: </p><div style=\"text-align: left;\"><span style=\"font-family: courier;\"> krell@altair-iv:~ $ cat .npmrc<br /></span><span style=\"font-family: courier;\"> save-exact=true<br /></span><span style=\"font-family: courier;\"> ignore-scripts=true<br /></span><span style=\"font-family: courier;\"> min-release-age=21</span></div><p style=\"text-align: left;\">[1] <a href=\"https://code.claude.com/docs/en/permission-modes#skip-all-checks-with-bypasspermissions-mode\">https://code.claude.com/docs/en/permission-modes#skip-all-checks-with-bypasspermissions-mode</a></p><p>[2] <a href=\"https://code.claude.com/docs/en/permission-modes#eliminate-prompts-with-auto-mode\">https://code.claude.com/docs/en/permission-modes#eliminate-prompts-with-auto-mode</a></p>",
"image": {
"url": "https://blogger.googleusercontent.com/img/a/AVvXsEiQNuXX8T1iMr1QHQe2zgfOW_3ZVaMN7Yp1XiruFwDqJdvYcqI8it3jMw_DuRFkXAass_aEy2qsPQj9CNPEcy4oMkBFHGn0YXMsXNzr9QwNbwet8beQubcCr_hidzA7B7m4oyum1KK6zfrVBQY_heFdEOrs-kyrxA5sguooXB1YNWpYOgrTrL0eww=s72-w400-h293-c",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "hardware",
"term": "hardware",
"url": "http://www.blogger.com/atom/ns#"
},
{
"label": "security",
"term": "security",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-6997313712403024466",
"title": "Maistro",
"description": null,
"url": "http://blog.jgc.org/2026/04/maistro.html",
"published": "2026-04-03T13:23:00.009Z",
"updated": "2026-04-03T13:24:44.238Z",
"content": "<p>Back in 2012 I wrote a blog post titled just <a href=\"https://blog.jgc.org/2012/02/programmer.html\">Programmer</a> about both my job title and a <a href=\"https://cloudflare.com/\">company</a> I'd just joined as a Programmer. I was very happy to be called a Programmer until quite recently. In the last few months, with the assistance of AIs like Kimi 2.5 and Claude, I've become something else. Something that uses my experience as a programmer by amplifies it massively. And, at the same time, makes me spend most of my time on the design and features of what I'm building and not the code. </p><p>What is this called?</p><p>Maybe it's a still a \"software engineer\" (for those who like that title). But the engineering is being done with new tools. But I don't think that quite captures it because the balance between the \"writing code\" and \"designing architecture and choosing features\" has shifted to the latter. </p><p>I'm more like the conductor of an orchestra but working with two AIs (one writing code, the other writing tests) to get <a href=\"https://github.com/jgrahamc/koolenex\">something</a> built rather than getting an orchestra of many to produce something beautiful. But conductor still doesn't feel quite right because this new job is heavily skewed towards creation (and not interpretation and expression).</p><p>I think the right word is a \"maestro\" or, if the pun can be forgiven, a maistro.</p><p><b>maistro</b> (n): a software engineer who uses AI tools to create software by focusing on design, architecture, testing, and features.</p>",
"image": null,
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "pseudo-randomness",
"term": "pseudo-randomness",
"url": null
},
{
"label": "hardware",
"term": "hardware",
"url": null
},
{
"label": "babbage",
"term": "babbage",
"url": null
},
{
"label": "gaga",
"term": "gaga",
"url": null
},
{
"label": "anti-spam",
"term": "anti-spam",
"url": null
},
{
"label": "gnu make",
"term": "gnu make",
"url": null
},
{
"label": "retro",
"term": "retro",
"url": null
},
{
"label": "security",
"term": "security",
"url": null
},
{
"label": "codes and ciphers",
"term": "codes and ciphers",
"url": null
},
{
"label": "the geek atlas",
"term": "the geek atlas",
"url": null
},
{
"label": "rants and raves",
"term": "rants and raves",
"url": null
},
{
"label": "alan turing",
"term": "alan turing",
"url": null
},
{
"label": "hits",
"term": "hits",
"url": null
},
{
"label": "mathematics",
"term": "mathematics",
"url": null
},
{
"label": "calculators",
"term": "calculators",
"url": null
},
{
"label": "climate change",
"term": "climate change",
"url": null
},
{
"label": "clocks",
"term": "clocks",
"url": null
},
{
"label": "minitel",
"term": "minitel",
"url": null
},
{
"label": "perl",
"term": "perl",
"url": null
},
{
"label": "google go",
"term": "google go",
"url": null
},
{
"label": "toys",
"term": "toys",
"url": null
},
{
"label": "behind the screens",
"term": "behind the screens",
"url": null
},
{
"label": "machine learning",
"term": "machine learning",
"url": null
},
{
"label": "babygaga",
"term": "babygaga",
"url": null
},
{
"label": "games",
"term": "games",
"url": null
},
{
"label": "arc",
"term": "arc",
"url": null
},
{
"label": "my services",
"term": "my services",
"url": null
},
{
"label": "popfile",
"term": "popfile",
"url": null
},
{
"label": "radio",
"term": "radio",
"url": null
},
{
"label": "cansole",
"term": "cansole",
"url": null
},
{
"label": "facebook",
"term": "facebook",
"url": null
},
{
"label": "privacy",
"term": "privacy",
"url": null
},
{
"label": "knx",
"term": "knx",
"url": null
},
{
"label": "well... actually",
"term": "well... actually",
"url": null
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-6143991865295400825",
"title": "The European Schuko socket bothers me",
"description": null,
"url": "http://blog.jgc.org/2026/01/the-european-schuko-socket-bothers-me.html",
"published": "2026-01-28T15:37:00.003Z",
"updated": "2026-01-28T15:37:51.735Z",
"content": "Because it isn't polarized, and that can lead to a situation where something is switched \"off\" but there's 230V of electricity still present. Take a look at this thing:<div><br /><div><div class=\"separator\" style=\"clear: both; text-align: center;\"><div class=\"separator\" style=\"clear: both; text-align: center;\"><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEiffPt8Btf9iU6HNzwJgy0spCeMlst_Ak2eGjrlM_WltdzMusspYt3AxoxQmjdVAzQthY4xg8of_cQdF4y8R3BK9AvhVZ28qJoKCKeqplSmImH8Z-GBlYcmsZo3h9qzZWL_EcY1rAvtY28Hw8Gpr_rlgnXHwaeKowkiAbDqScGuDva1JywuFgTmMg\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"1072\" data-original-width=\"1024\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEiffPt8Btf9iU6HNzwJgy0spCeMlst_Ak2eGjrlM_WltdzMusspYt3AxoxQmjdVAzQthY4xg8of_cQdF4y8R3BK9AvhVZ28qJoKCKeqplSmImH8Z-GBlYcmsZo3h9qzZWL_EcY1rAvtY28Hw8Gpr_rlgnXHwaeKowkiAbDqScGuDva1JywuFgTmMg=w611-h640\" width=\"611\" /></a></div><br /></div></div><div>At the bottom you have a standard European Schuko socket and Plugged into the socket is the power strip on the right. Plugged into the power strip is the lightbulb on the left that I've mounted and wired so I can measure the voltages between live, neutral and earth. </div></div></div><div><br /></div><div>Above the power is on to the strip, but the switch in the power strip for the light off. Unsurprisingly, the lightbulb is lit off. Even less of a surprise is that turning the switch to on lights the light.</div><div><br /></div><div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEi6u_m36dXmE8QpJI7VPf6EWtraNRsmIsUk_HY7hUPhI6yXC49S31JX_JVdUu8NppxENKUzCHEyt5i0ZNnMVTcPeDzRytgkQP71OOxBgA0EQu1fQ1-zf9w9AdpNvYH8-3fm-GoR-bGDb2hrvckqHoVBfKvNFAKR24W3vvcUwECd_55ZZh1AuGp0tA\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"1076\" data-original-width=\"1024\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEi6u_m36dXmE8QpJI7VPf6EWtraNRsmIsUk_HY7hUPhI6yXC49S31JX_JVdUu8NppxENKUzCHEyt5i0ZNnMVTcPeDzRytgkQP71OOxBgA0EQu1fQ1-zf9w9AdpNvYH8-3fm-GoR-bGDb2hrvckqHoVBfKvNFAKR24W3vvcUwECd_55ZZh1AuGp0tA=w608-h640\" width=\"608\" /></a></div></div><div><br /></div><div>For the rest of the blog I'll remove the lightbulb and just concentrate on what voltages are present at the lightbulb holder. When off there's no voltage (or rather a tiny phantom voltage) between live and neutral (brown and blue).</div><div><br /><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEi_ewZc61h0EYQ073qbdGqHZ6nu8JDfxYZd5NFAHzvxo-gRwHeBAGIWpQJDpvP6UWca_SFHHI-c4pV8uwchgC1_fL6LRGz1YqNHFXghRGaB2jtlJCquCynX8YB73CQXN4JeSW-3cUS4ibwEvRfg9W61OHX9IFmO2wwIkuegmLPp6NWgZQ-Vv584aQ\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"1279\" data-original-width=\"1024\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEi_ewZc61h0EYQ073qbdGqHZ6nu8JDfxYZd5NFAHzvxo-gRwHeBAGIWpQJDpvP6UWca_SFHHI-c4pV8uwchgC1_fL6LRGz1YqNHFXghRGaB2jtlJCquCynX8YB73CQXN4JeSW-3cUS4ibwEvRfg9W61OHX9IFmO2wwIkuegmLPp6NWgZQ-Vv584aQ=w512-h640\" width=\"512\" /></a></div><br /></div><div>But when the switch is on, the multimeter is showing 230V AC between live and neutral. So, no surprise that the light comes on when the switch is on!</div><div><br /></div><div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEgFy-p0gRKzxLukQlJOD7UE4wtXTCUUU5A9PNlAT1fBHAySVqqWKMhKzyD0W91TgGpJ5I_0MfX2KQYP2hV7mi5Yg31dJYWQmo7HJ5nrAhlAuadp8F_Neub7biGyc8E76qU8xS5m0-BNx7DG6gvfd8b6wWxO86kfTYNc7X3l4igfbHsn0RXcqEpaDw\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"1225\" data-original-width=\"1024\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEgFy-p0gRKzxLukQlJOD7UE4wtXTCUUU5A9PNlAT1fBHAySVqqWKMhKzyD0W91TgGpJ5I_0MfX2KQYP2hV7mi5Yg31dJYWQmo7HJ5nrAhlAuadp8F_Neub7biGyc8E76qU8xS5m0-BNx7DG6gvfd8b6wWxO86kfTYNc7X3l4igfbHsn0RXcqEpaDw=w536-h640\" width=\"536\" /></a></div><br /></div><div>The same voltage is present between live and earth. In a standard European or UK house the earth and neutral wires are joined together (called \"bonded\") somewhere close to where the power comes into the house. The live and neutral wires are two halves of the circuit and electricity needs to flow from one to the other for the light to come on. In this standard set up the neutral and earth have (theoretically) the same \"potential\" of 0V. When the light is on the idea is that electricity flows from the live to the neutral.</div><div><br /></div><div>If you touch live and neutral you'll electrocute yourself, but also if you just touch live because the electricity will run through you to earth. </div><div><br /></div><div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEjiiGJ90OSmOMlY2TJYIeqHVVQMVO9ic-AMtRBzWj2o9RRxv-K-dRyejY33qahiOtn0RcT-KaMAZS7fqQnWfY2W16Gr6sPbi-UwhljGULwCrxvhHlUjejdZc_1wKIMWnx5DAYUnBFKx81psa3uBmCIZuEJod1eLUhm7ULTh8IzhcxxcNfC_yKXbig\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"1161\" data-original-width=\"1024\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEjiiGJ90OSmOMlY2TJYIeqHVVQMVO9ic-AMtRBzWj2o9RRxv-K-dRyejY33qahiOtn0RcT-KaMAZS7fqQnWfY2W16Gr6sPbi-UwhljGULwCrxvhHlUjejdZc_1wKIMWnx5DAYUnBFKx81psa3uBmCIZuEJod1eLUhm7ULTh8IzhcxxcNfC_yKXbig=w565-h640\" width=\"565\" /></a></div></div><div><br /></div><div>Between neutral and earth there's close to 0V of difference. The multimeter is showing tiny phantom voltages induced in the wires.</div><div><br /></div><div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEgwoVaLVvqlzAdbeWwrVOH2gi381p6019BEyEVDUvwu4AFIuMcb7wJHEp-e4Lr0GRQTfH0ASi3Cw_PbmxJ9k3vUS-l65OVbXXYFeU4qpNcxon5yQmcF4AmumrSgnnfeDZVe3YHKFfhrTG2rPx7EiXhgRy999RooN2tDiRXeRHqyjKzmi5lGJ_iIFg\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"1078\" data-original-width=\"1024\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEgwoVaLVvqlzAdbeWwrVOH2gi381p6019BEyEVDUvwu4AFIuMcb7wJHEp-e4Lr0GRQTfH0ASi3Cw_PbmxJ9k3vUS-l65OVbXXYFeU4qpNcxon5yQmcF4AmumrSgnnfeDZVe3YHKFfhrTG2rPx7EiXhgRy999RooN2tDiRXeRHqyjKzmi5lGJ_iIFg=w608-h640\" width=\"608\" /></a></div><br />The important thing to remember is that the voltage in a home is \"referenced to earth\" and thus will run to earth (potentially through you) given the chance. That's why you get an electric shock if you touch a live wire. The current flows through you to earth. You do not want that to happen. In theory you could touch the neutral wire and not get electrocuted because it's at the same voltage/potential as earth: 0V. BUT DO NOT DO THIS EVER. EVER. YOU DO NOT KNOW THAT NEUTRAL IS ACTUALLY 0V.</div><div><br /></div><div>Take a look at this; all I've done is unplugged the power strip at the bottom and plugged it back in the other way around. Suddenly, there's apparently 230V between neutral and earth, and that's with the power strip turned off!</div><div><br /></div><div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEgrp6auGj_tmAZIumAxTX8TVE9PNjJjIt4THr2WDN9w5TGGAHuri7a1oUb-GTbVIRH5x8444wOTNRZg9sxPnvJSMKTQvfYliMey6A8uNha5VGnQyHWRt1GB-Xi0jNevzLeco-0-xNYf-bx_Z1zYi661IshmjLzo2GWjn5PxPN1a0R7i3UvcOTdgQw\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"1121\" data-original-width=\"1024\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEgrp6auGj_tmAZIumAxTX8TVE9PNjJjIt4THr2WDN9w5TGGAHuri7a1oUb-GTbVIRH5x8444wOTNRZg9sxPnvJSMKTQvfYliMey6A8uNha5VGnQyHWRt1GB-Xi0jNevzLeco-0-xNYf-bx_Z1zYi661IshmjLzo2GWjn5PxPN1a0R7i3UvcOTdgQw=w584-h640\" width=\"584\" /></a></div><br />That's because the little power switch on the strip does not cut both the live and neutral wires when turned off; it cuts off one of them. If you plug the strip in one way you might get lucky and cut live, but you can easily plug it in the other way round and find that what looks like it's neutral as actually live and has 230V. THIS IS ANOTHER REASON NEVER TO TOUCH SOMETHING YOU THINK IS NEUTRAL. Also, imagine you've turned this off and are changing the lightbulb. The same 230V is present inside the light fitting just waiting for a human finger to become a conductor!</div><div><br /></div><div>You can see that despite there being 230V present the lightbulb does not glow. But there are dangerous voltages present. In fact, with the lightbulb present it's even worse, because the \"live\" and \"neutral\" wires coming out of the light fitting are 230V because the 230V has passed through the light and is now present on the wire on the other side of it.</div><div><br /></div><div><div class=\"separator\" style=\"clear: both; text-align: center;\"><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEh7kSaQ-HV6o7GxyhKMBNSR37IRD2hLQ1FIf10j5U5_zZrkGqrdaPNVRMj38YYRjGQ3jKykHx_ZZjtZnfxtVNNB-w9DnkSK43giCMdgtgX69to_30j6sKfantMOIv6TvZyfGuXCImCYRyTS-pZXKpnuYCpGDrSb0JWCCEbk9dDnJL70qHREBgfuyA\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"1028\" data-original-width=\"1024\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEh7kSaQ-HV6o7GxyhKMBNSR37IRD2hLQ1FIf10j5U5_zZrkGqrdaPNVRMj38YYRjGQ3jKykHx_ZZjtZnfxtVNNB-w9DnkSK43giCMdgtgX69to_30j6sKfantMOIv6TvZyfGuXCImCYRyTS-pZXKpnuYCpGDrSb0JWCCEbk9dDnJL70qHREBgfuyA=w637-h640\" width=\"637\" /></a></div></div><br />(Ignore the multimeter here as it's not connected).</div><div><br /></div><div>So, in summary:</div><div><br /></div><div>1. DO NOT TOUCH WIRES IN HOUSEHOLD WIRING EVER.</div><div><br /></div><div>2. Do not trust power strip switches to actually remove all dangerous voltages from a device.</div><div><br /></div><div>3. Do unplug things when working on them (e.g. changing a lightbulb)</div><div><br /></div><div>4. Do buy power strips which have switches that cut both wires when off (such as this <a href=\"https://www.brennenstuhl.com/en-PT/products/extension-leads/extension-lead-individually-switchable-6-way-2m-h05vv-f-3g1.5-white\">Brennenstuhl power strip</a>; not an affiliate link or anything, I just use this one <a href=\"https://blog.jgc.org/2025/06/it-was-time-for-dim-bulb-current-limiter.html\">in my lab</a>.).</div><div><br /></div><div>5. Move to a country that uses the <a href=\"https://en.wikipedia.org/wiki/AC_power_plugs_and_sockets:_British_and_related_types#BS_1363_three-pin_(rectangular)_plugs_and_sockets\">one true great power socket of all time</a> </div><div><br /></div><div>OK, that last one's in jest because there are reasonable criticisms of the British plug design, but it, perhaps unreasonably, bothers me that it's possible to turn something off and discover there's 230V present.</div>",
"image": {
"url": "https://blogger.googleusercontent.com/img/a/AVvXsEiffPt8Btf9iU6HNzwJgy0spCeMlst_Ak2eGjrlM_WltdzMusspYt3AxoxQmjdVAzQthY4xg8of_cQdF4y8R3BK9AvhVZ28qJoKCKeqplSmImH8Z-GBlYcmsZo3h9qzZWL_EcY1rAvtY28Hw8Gpr_rlgnXHwaeKowkiAbDqScGuDva1JywuFgTmMg=s72-w611-h640-c",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "hardware",
"term": "hardware",
"url": "http://www.blogger.com/atom/ns#"
},
{
"label": "pseudo-randomness",
"term": "pseudo-randomness",
"url": "http://www.blogger.com/atom/ns#"
},
{
"label": "rants and raves",
"term": "rants and raves",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-8728350909468966560",
"title": "There's a ridiculous amount of tech in a disposable vape",
"description": null,
"url": "http://blog.jgc.org/2026/01/theres-ridiculous-amount-of-tech-in.html",
"published": "2026-01-08T17:47:00.000Z",
"updated": "2026-01-08T17:47:21.040Z",
"content": "<p>So, I'm walking through a park when I see this thing lying on the ground:</p><p></p><p></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEjLHAvZN5pTy6lttkPt0xM6DD4NekTOzgaux5OEH2CJqXr4iNNBepGLR9_vai3XPxtifwAEp74oqdraP-hzUSnYkIF8xlwREmt92rXu24Ifvy52do0nKEAxCCUIrqZ4mbveQe5q_pg34rSkaIZZ9Ms2DAU9_Q7sF3fx5MmMEI0PfDabMbq8JyLpVw\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"1675\" data-original-width=\"1024\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEjLHAvZN5pTy6lttkPt0xM6DD4NekTOzgaux5OEH2CJqXr4iNNBepGLR9_vai3XPxtifwAEp74oqdraP-hzUSnYkIF8xlwREmt92rXu24Ifvy52do0nKEAxCCUIrqZ4mbveQe5q_pg34rSkaIZZ9Ms2DAU9_Q7sF3fx5MmMEI0PfDabMbq8JyLpVw=w392-h640\" width=\"392\" /></a></div><p></p><p>It's a disposable vape that someone has discarded because it's empty. Specifically, it's a \"Fizzy Max III 60K Rechargeable Disposable Vape\" and I was about to take it to a bin to throw away when I noticed it had USB-C. I know nothing about vapes so that was a total WTF moment. </p><p>Naturally, I took it home, sanitized it, and plugged it in. Not only did this thing have USB-C and a rechargeable battery, it had a small display showing battery percentage and <strike>poison</strike> vape fluid percentage. It looks kind of cyberpunk.</p><p></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEjsjA-_RmfnAD4MPLuroJ4wHwvk4cvmjcSySX9EEpgnjXpXdcw3zY4HJnVE37IsTQFmuosgeCNqlkmLwcpXGYJODw0PcFIQCHrlkr--uKugWMdRGsmJv99chHLLydMGdcRmENl2VJHHHpAayZqLpUWiudlz3-1Nx0nMLGFMtq9Fc___9-KTGYtXxw\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"966\" data-original-width=\"903\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEjsjA-_RmfnAD4MPLuroJ4wHwvk4cvmjcSySX9EEpgnjXpXdcw3zY4HJnVE37IsTQFmuosgeCNqlkmLwcpXGYJODw0PcFIQCHrlkr--uKugWMdRGsmJv99chHLLydMGdcRmENl2VJHHHpAayZqLpUWiudlz3-1Nx0nMLGFMtq9Fc___9-KTGYtXxw=w597-h640\" width=\"597\" /></a></div><br /></div>I ripped the thing apart and discarded the now empty chambers that had contained the fluid. At the bottom there are two circuit boards and a battery. <div><br /></div><div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEgeuA-ugb-jkilQuqqqdqahzsxatURb-bVhbEDefg3gXQGFwJ7CiAbElLml7eEw4WdoENR8deMC3W9nF95pQfhZhrHEaulIS_43p_qe0JlRimLDZ2sFP21fZZN9qu4ilJkk_Cl4M826q58NyWjuWB4YokiFVlF6d370rf8VFf6_Ou0p6FbflZSdmA\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"3720\" data-original-width=\"3024\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEgeuA-ugb-jkilQuqqqdqahzsxatURb-bVhbEDefg3gXQGFwJ7CiAbElLml7eEw4WdoENR8deMC3W9nF95pQfhZhrHEaulIS_43p_qe0JlRimLDZ2sFP21fZZN9qu4ilJkk_Cl4M826q58NyWjuWB4YokiFVlF6d370rf8VFf6_Ou0p6FbflZSdmA=w520-h640\" width=\"520\" /></a></div><br />The battery is an 800 mAh lipo.</div><div><div><br /></div><div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEgMuFXNrW0BqhlCeP6Nn6kAb2mtyEgRQPWhAdb6QdN74ULIV79FB_ZGSaBa_6xQwsa_toAZs9lEO6AD6gY6TJMfJ7ug76MGrYCSGnpqw96147u9dgO4MUN_qqOmiKdotYTRKJkdc_CZoNxLIDa6T7nuXdyj08ND0qyfauYbvwEv-dNk4aBpnGTTOA\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"1660\" data-original-width=\"3682\" height=\"288\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEgMuFXNrW0BqhlCeP6Nn6kAb2mtyEgRQPWhAdb6QdN74ULIV79FB_ZGSaBa_6xQwsa_toAZs9lEO6AD6gY6TJMfJ7ug76MGrYCSGnpqw96147u9dgO4MUN_qqOmiKdotYTRKJkdc_CZoNxLIDa6T7nuXdyj08ND0qyfauYbvwEv-dNk4aBpnGTTOA=w640-h288\" width=\"640\" /></a></div><br />So, wait? This is a disposable device. After 60,000 sucks on the teat you're meant to throw away a battery, display, microprocessor etc. WTF? Turns out that you're meant to recycle it, but it's crazy large amount of technology for nicotine sucking. <br /><div><div><p></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEjxLn1LnkyxyUiZIdkVqPcufsDyJfcUcp8oahk6EOLztqYCCgjlS0jicTzjRkmWjoZHSGHojzcdq9EmnT1cHMDxv-cB8I-dtv40Ykdte_HY3HygCUeN76WbQ9ksRf6uFl5A7JMTYeXBVSsdFPKlummkSxb0_rxNGAwdgurmcSwcVMHZO4nG8xBdVw\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"1245\" data-original-width=\"2234\" height=\"356\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEjxLn1LnkyxyUiZIdkVqPcufsDyJfcUcp8oahk6EOLztqYCCgjlS0jicTzjRkmWjoZHSGHojzcdq9EmnT1cHMDxv-cB8I-dtv40Ykdte_HY3HygCUeN76WbQ9ksRf6uFl5A7JMTYeXBVSsdFPKlummkSxb0_rxNGAwdgurmcSwcVMHZO4nG8xBdVw=w640-h356\" width=\"640\" /></a></div><p></p><p>On one side you've got three pairs of pins that are inserted into the chambers containing the vape fluid and are controlled by three transistors on the other PCB. These pins heat the fluid making the vape's vapour. They are activated by the three microphones seen in this picture.<br /></p><p></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEjSGiv2lodVnAja-FgEdTwFbBvWrhvS3PhGVBh-DD8eDuWQajLat0O5Axrksv3vAxXzNu3xD-c-KQqx6mKqQJxnye7kysJiSU3fqyui6R_4jSOeiEoFmIwv9GcrDgADAgIEPXbpQiUxY_T-mjhSQZ5vZNDZhtuY-W-YX9ReWw1LFH5baH09nTtoeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"1821\" data-original-width=\"1824\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEjSGiv2lodVnAja-FgEdTwFbBvWrhvS3PhGVBh-DD8eDuWQajLat0O5Axrksv3vAxXzNu3xD-c-KQqx6mKqQJxnye7kysJiSU3fqyui6R_4jSOeiEoFmIwv9GcrDgADAgIEPXbpQiUxY_T-mjhSQZ5vZNDZhtuY-W-YX9ReWw1LFH5baH09nTtoeg=w640-h640\" width=\"640\" /></a></div><p>The vape knows you're sucking on the teat in one of six positions by which combination of microphones sense the sucking. This allows it to heat one or two of the chambers providing six flavour combinations.</p><p></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEjcVtgn5G8uYTyXoscQKqcNbkrkdm31UONeeih4MFTJJ6dFDx05u0bKXDta8KdAl9WRoMF7omoKinm8JQSoOB9P5kANYLHzcHUiWin8a2zkgo9q6v8OYFtHyq1kVJHWebJ8Tn0rwMCZWaQV8DfiyosVPPcxOPGMJn6nIxH5ywIjxubJo7kz3eQpyQ\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"2368\" data-original-width=\"3024\" height=\"502\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEjcVtgn5G8uYTyXoscQKqcNbkrkdm31UONeeih4MFTJJ6dFDx05u0bKXDta8KdAl9WRoMF7omoKinm8JQSoOB9P5kANYLHzcHUiWin8a2zkgo9q6v8OYFtHyq1kVJHWebJ8Tn0rwMCZWaQV8DfiyosVPPcxOPGMJn6nIxH5ywIjxubJo7kz3eQpyQ=w640-h502\" width=\"640\" /></a></div><br />Three transistors and a small chip that controls charging of the battery. <p></p><p></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEiaTdsKWhyloD0nOO2sHJczXuP9s2L55fx7sEoejyz_0peaqJBqS4epsViV2OxVkOW_bkO48xuEpecjWOUUrgjzNnRj2YNNqTV1vUgG8HGu31JEheiHWD3-Uf4rAmK8d8TD1jIAStyA3RnYBi6lwcZC2kL855QkDif_bH_2WALWy-auzeBZbqXkAg\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"2831\" data-original-width=\"3024\" height=\"600\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEiaTdsKWhyloD0nOO2sHJczXuP9s2L55fx7sEoejyz_0peaqJBqS4epsViV2OxVkOW_bkO48xuEpecjWOUUrgjzNnRj2YNNqTV1vUgG8HGu31JEheiHWD3-Uf4rAmK8d8TD1jIAStyA3RnYBi6lwcZC2kL855QkDif_bH_2WALWy-auzeBZbqXkAg=w640-h600\" width=\"640\" /></a></div><br />Sadly, despite there being some pretty obvious pads connected to the microprocessor (labelled B0081S1) and the fact that those pads are also connected to the USB-C connecter, I have been unable to talk to it via PyOCD or other tools. I was hoping this was a small ARM device that I might be able to hack.</div></div></div></div>",
"image": {
"url": "https://blogger.googleusercontent.com/img/a/AVvXsEjLHAvZN5pTy6lttkPt0xM6DD4NekTOzgaux5OEH2CJqXr4iNNBepGLR9_vai3XPxtifwAEp74oqdraP-hzUSnYkIF8xlwREmt92rXu24Ifvy52do0nKEAxCCUIrqZ4mbveQe5q_pg34rSkaIZZ9Ms2DAU9_Q7sF3fx5MmMEI0PfDabMbq8JyLpVw=s72-w392-h640-c",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "hardware",
"term": "hardware",
"url": "http://www.blogger.com/atom/ns#"
},
{
"label": "pseudo-randomness",
"term": "pseudo-randomness",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-3163403587683936353",
"title": "If you care about security you might want to move the iPhone Camera app",
"description": null,
"url": "http://blog.jgc.org/2025/12/if-you-care-about-security-you-might.html",
"published": "2025-12-28T14:33:00.005Z",
"updated": "2025-12-29T11:59:06.693Z",
"content": "<p>There's a quirk in the iPhone Camera app that can drive a security conscious iPhone owner crazy: if you touch your finger on the Camera app icon without actually opening the app, the camera starts operating. That causes the little green dot indicator on the iPhone to turn on and then after a few seconds disappear. This can easily make a security-conscious iPhone user worry that some app is nefariously using the camera.</p><p></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEh_n7C7-AZVWdKp41tN41JNMVQqj-nzIXSD8K3pHXC9Zijl5Z3wtLA7OXRX0h7QRNDzE6juLUc10qyIoRf_CO5CTF8rtNjuVQ9MkGoDGGrhr-osKlxqOXaNoalhcaVpywdIXsHSCdik2SpothXBzFoLDYKUjKORzLwio-m5KXX7k6tZdacgAyHBzQ\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"289\" data-original-width=\"1206\" height=\"154\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEh_n7C7-AZVWdKp41tN41JNMVQqj-nzIXSD8K3pHXC9Zijl5Z3wtLA7OXRX0h7QRNDzE6juLUc10qyIoRf_CO5CTF8rtNjuVQ9MkGoDGGrhr-osKlxqOXaNoalhcaVpywdIXsHSCdik2SpothXBzFoLDYKUjKORzLwio-m5KXX7k6tZdacgAyHBzQ=w640-h154\" width=\"640\" /></a></div><p></p><p>Because touching the Camera app icon without opening the app is enough, it's easy to activate the green dot while swiping between screens or even just holding your phone. This was driving me nuts and I thought some app was using the camera when I didn't want it to.</p><p></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEgO6PJijthJhA5iuemg6BWxxH9aWJTKJkI-uGMvvzqJlS-75oqgWNswAYCu-IQgT1aAtx99xL68ZS5vnpUe75OBjvYcnd75a1kflRBQvRHqZI1GaxRxMWwFDjZoz23-Qoxw9JSSOetqbS_Pc_vhm3RajJKRArkHQcUq642qVls9Iv9R23z0QWRytQ\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"1265\" data-original-width=\"1206\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEgO6PJijthJhA5iuemg6BWxxH9aWJTKJkI-uGMvvzqJlS-75oqgWNswAYCu-IQgT1aAtx99xL68ZS5vnpUe75OBjvYcnd75a1kflRBQvRHqZI1GaxRxMWwFDjZoz23-Qoxw9JSSOetqbS_Pc_vhm3RajJKRArkHQcUq642qVls9Iv9R23z0QWRytQ=w611-h640\" width=\"611\" /></a></div><br />I enabled Apple's <i>App Privacy Report</i> (under P<i>rivacy and Security</i>) in <i>Settings</i> and, sure enough, it confirmed that the little green dot was happening because the camera was being used by the Camera app. Merely swiping while accidentally touching the Camera app's icon was enough to add an entry in the <i>App Privacy Report</i>.<p></p><p></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEj4Fi9G3ADvNdBP5kXYwOl0n4VpXG-rFv_qaxzhd1fVt5v06gpeIUxq3Mm2mJQCGZBEoO-AZY_VaT8SZulmYAlrdCJL-VV4_uxgBUjQf1Jfs3RGdpjBzjtGSefAKaUnGtVLnBc3kRYnW2pcUHGx7B3WwHhjCRzW7unft6WwZMU3ow5MggmgBzGW8Q\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"508\" data-original-width=\"1206\" height=\"270\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEj4Fi9G3ADvNdBP5kXYwOl0n4VpXG-rFv_qaxzhd1fVt5v06gpeIUxq3Mm2mJQCGZBEoO-AZY_VaT8SZulmYAlrdCJL-VV4_uxgBUjQf1Jfs3RGdpjBzjtGSefAKaUnGtVLnBc3kRYnW2pcUHGx7B3WwHhjCRzW7unft6WwZMU3ow5MggmgBzGW8Q=w640-h270\" width=\"640\" /></a></div><br />The solution was moving Camera app away from where I was liable to brush it with my fingers or thumb. That reduced the errant green dots to almost zero and reassured me that nothing untoward was happening.<p></p><p></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEgKcb_6Q4FTr9F23LeQyECWRe7CcdXbyEw7v0JIM6p1suL1OND7t980m81nRDRJQvcqHIcQ3RzVy7MyjjyarsJ-oKjuaDvkV8VfOt65QNuANg9PSkZjvtu8K-8NRdjOXe1AICcpddWIEjJmvmMg66aa3m2DMMNG9LiwzKfIR-z_2OydafFdlUQNHA\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"2622\" data-original-width=\"1206\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEgKcb_6Q4FTr9F23LeQyECWRe7CcdXbyEw7v0JIM6p1suL1OND7t980m81nRDRJQvcqHIcQ3RzVy7MyjjyarsJ-oKjuaDvkV8VfOt65QNuANg9PSkZjvtu8K-8NRdjOXe1AICcpddWIEjJmvmMg66aa3m2DMMNG9LiwzKfIR-z_2OydafFdlUQNHA=w294-h640\" width=\"294\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div>One of the big problems in security is people get used to odd behaviour they can't explain and end up overlooking a real problem masked be the things that \"always happen\". The accidental green dots could have been hiding actual nefarious use of the camera. Better to be tidy and eliminate the false positives.<p></p><div>(I previously used the term \"hover\" for what I was experiencing and that was causing confusion. This happens if you touch the Camera app icon without actually opening the app.)</div>",
"image": {
"url": "https://blogger.googleusercontent.com/img/a/AVvXsEh_n7C7-AZVWdKp41tN41JNMVQqj-nzIXSD8K3pHXC9Zijl5Z3wtLA7OXRX0h7QRNDzE6juLUc10qyIoRf_CO5CTF8rtNjuVQ9MkGoDGGrhr-osKlxqOXaNoalhcaVpywdIXsHSCdik2SpothXBzFoLDYKUjKORzLwio-m5KXX7k6tZdacgAyHBzQ=s72-w640-h154-c",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "pseudo-randomness",
"term": "pseudo-randomness",
"url": "http://www.blogger.com/atom/ns#"
},
{
"label": "security",
"term": "security",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-7381284008987393638",
"title": "A couple of handy KNX gadgets",
"description": null,
"url": "http://blog.jgc.org/2025/10/a-couple-of-handy-knx-gadgets.html",
"published": "2025-10-20T15:25:00.018Z",
"updated": "2025-10-20T15:33:15.147Z",
"content": "<p><a href=\"https://www.knx.org/knx-en/for-professionals/What-is-KNX/A-brief-introduction/\">KNX</a> is a European standard used in home automation. It's primarily based around a twisted pair bus transporting DC power (30V) and data at 9600 bits/second. Devices attached to this KNX bus draw power for their operation and receive and send messages called telegrams. The devices are typically things like switches, relays, dimmers, HVAC interfaces, small displays, and blind/shutter controllers.</p><p>If you're working with a KNX bus you connect a computer to it via bus interface. These are commonly either a USB interface or an Ethernet/WiFi connection. Either way the computer is able to send and receive telegrams and monitor the bus for debugging. This interface is also used for programming the various KNX devices on the bus (for example, associating pressing a button on a particular switch with a particular light circuit going on or off).</p><p>Sometimes it's useful to program devices \"off the bus\" (i.e. away from the actual installation). For this purpose I put together the simplest of minimal KNX buses: a power supply to inject the necessary 30V, a USB bus interface, and a dangling KNX connector (the red and black thing in this photo) that can be plugged into the device to be programmed.</p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmKiAPaxQszfqx7GR0jqUEsDoWGLWE50OBkinI3k-xyyf0ot97IiBVwa5eBcZU9BfA6n6mayRuOMG2geYnv48otf3Qf1q2XP5Luz7W5bKLgvEItF_F-ufGlhjdfpbByIH7JJqoKsBiOQ7PzXXrpGIayTFvhuJxAEj0L3N2R88uIT8PcAzHZW6WrA/s1280/knx-1.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"963\" data-original-width=\"1280\" height=\"482\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmKiAPaxQszfqx7GR0jqUEsDoWGLWE50OBkinI3k-xyyf0ot97IiBVwa5eBcZU9BfA6n6mayRuOMG2geYnv48otf3Qf1q2XP5Luz7W5bKLgvEItF_F-ufGlhjdfpbByIH7JJqoKsBiOQ7PzXXrpGIayTFvhuJxAEj0L3N2R88uIT8PcAzHZW6WrA/w640-h482/knx-1.jpeg\" width=\"640\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">Normally the power supply (on the left) would be wired in permanently, but here I am just using a standard power cord for desktop programming. The USB bus interface is in the middle. There's nothing special about these devices, there are hundreds of KNX manufacturers that interoperate; I just happen to be using an <a href=\"https://new.abb.com/products/2CDG110144R0011/sv-s-30-160-1-1\">ABB power supply</a> and <a href=\"https://new.abb.com/products/2CDG110243R0011/usb-s-1-2\">ABB bus interface</a>.</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">This works great: plug the device to be programmed into the connector on the right and hook the PC running the <a href=\"https://www.knx.org/knx-en/for-your-home/how-to-start/ets-home-edition/\">KNX programming software ETS</a> into the bus interface via USB. And apart from the two ABB boxes, all that's needed is a power cord, three <a href=\"https://www.wago.com/global/installation-terminal-blocks-and-connectors/4-conductor-modular-pcb-connector/p/243-211\">WAGO 243-211 connectors</a>, and some twisted pair. I used random wires that were lying around, in the real world of KNX installations you'd use proper shielded twisted pair cables!</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">The other gadget I built is this custom PCB (possibly the world's simplest PCB):</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_f3LS7Hdf3REwPS7f0G-yNtlumcwnaOBDliY__2k7vv9F4hqltGkuPmeNq9TCko1ClcXnmlIXHNYW2R8Pc5Jkbm4Xlhh2uGIiiJatOFlPcPNYD0idV_Cc4xPzLZAC-gMKGZUVgHa_AX7WXCtMLGpoW9RCqRJwogYJp3okpio4Nqgr8m2D5tqfbA/s1280/knx-2.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"849\" data-original-width=\"1280\" height=\"424\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_f3LS7Hdf3REwPS7f0G-yNtlumcwnaOBDliY__2k7vv9F4hqltGkuPmeNq9TCko1ClcXnmlIXHNYW2R8Pc5Jkbm4Xlhh2uGIiiJatOFlPcPNYD0idV_Cc4xPzLZAC-gMKGZUVgHa_AX7WXCtMLGpoW9RCqRJwogYJp3okpio4Nqgr8m2D5tqfbA/w640-h424/knx-2.jpeg\" width=\"640\" /></a></div><div><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\"><div class=\"separator\" style=\"clear: both;\">It just connects four KNX terminals together in parallel. The pins at the top are the standard WAGO 243-131 pins compatible with the WAGO 243-211 connector. When soldered together it looks like this:</div></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHpTsUNp-DGoiyukBcSwuGQz0AJWzq9Iffeo9z4R2Tbtvh0iGQNmxAyvww9PyMwldAztD8bwIvv0aVGknE0U7IVElLhT1n2g4tqVvmrhrCSDvZiGId5YtlQs1hGDgCSaSe6RmWWdyZQnjwNVgmm1c6PYA9_dJI3EOFXgF9ARsOY2UWmktIE3aJuw/s1280/knx-3.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"644\" data-original-width=\"1280\" height=\"322\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHpTsUNp-DGoiyukBcSwuGQz0AJWzq9Iffeo9z4R2Tbtvh0iGQNmxAyvww9PyMwldAztD8bwIvv0aVGknE0U7IVElLhT1n2g4tqVvmrhrCSDvZiGId5YtlQs1hGDgCSaSe6RmWWdyZQnjwNVgmm1c6PYA9_dJI3EOFXgF9ARsOY2UWmktIE3aJuw/w640-h322/knx-3.jpeg\" width=\"640\" /></a></div><br /><div class=\"separator\" style=\"clear: both; text-align: center;\"><span style=\"text-align: left;\">In conjunction with a bus interface it lets you tap into an existing KNX bus if there's no bus interface present. Or if it's just more convenient to connect where you are working. You simply unplug some device from the bus, plug the bus into this PCB and then plug the device into the dangling connector.</span></div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">The bus will work normally and you'll have access for debugging and programming. (Note: you can do this because the KNX bus can be a tree and so it's acceptable to plug in a spur of a couple of devices to the main bus line).</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div style=\"text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSmoitIZiO1hn8Iue1es3bMdYYqtM6_ZDkzG82vqPNHrUTH5lH9EeQfgO7tPWD2Dz2Jpk8fbQDlWrI32CoIg0wqJFcq4oGs0lxigd__lo73m_dXtY_7A1lIVJuaUPBk7fV5Ox3FTOHkVEPI8COe4CnEXB2aFeDynFDGQ5T7ztaFxKcnnRVLoaQfQ/s1280/knx-4.jpeg\"><img border=\"0\" data-original-height=\"929\" data-original-width=\"1280\" height=\"464\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSmoitIZiO1hn8Iue1es3bMdYYqtM6_ZDkzG82vqPNHrUTH5lH9EeQfgO7tPWD2Dz2Jpk8fbQDlWrI32CoIg0wqJFcq4oGs0lxigd__lo73m_dXtY_7A1lIVJuaUPBk7fV5Ox3FTOHkVEPI8COe4CnEXB2aFeDynFDGQ5T7ztaFxKcnnRVLoaQfQ/w640-h464/knx-4.jpeg\" width=\"640\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">The PCB design is based on Matthias Kleine's <a href=\"https://github.com/klein0r/pcb-knx-distributor\">KNX Distributor</a>; my version can be <a href=\"https://github.com/jgrahamc/knx-tap\">found here</a>. (If you build this you'll also need Matthias Kleine's <a href=\"https://github.com/klein0r/pcb-footprint-collection-kicad\">footprint library</a>).</div>",
"image": {
"url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmKiAPaxQszfqx7GR0jqUEsDoWGLWE50OBkinI3k-xyyf0ot97IiBVwa5eBcZU9BfA6n6mayRuOMG2geYnv48otf3Qf1q2XP5Luz7W5bKLgvEItF_F-ufGlhjdfpbByIH7JJqoKsBiOQ7PzXXrpGIayTFvhuJxAEj0L3N2R88uIT8PcAzHZW6WrA/s72-w640-h482-c/knx-1.jpeg",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "hardware",
"term": "hardware",
"url": "http://www.blogger.com/atom/ns#"
},
{
"label": "knx",
"term": "knx",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-6649151922991432331",
"title": "Protecting your (my) passport from liquid damage",
"description": null,
"url": "http://blog.jgc.org/2025/10/protecting-your-my-passport-from-liquid.html",
"published": "2025-10-01T17:05:00.000Z",
"updated": "2025-10-01T17:05:09.836Z",
"content": "<p>After an unfortunate incident involving my passport and some alcohol-based hand gel in my bag, I decided I needed some sort of waterproof passport protection. But searching around for \"passport wallets\" mostly doesn't result in anything waterproof and all the wallets are large, bulky or ugly. But there is a really simple solution.</p><p>A 4 mil ziploc bag of the appropriate size. </p><p>What's the appropriate size? Well, there's an ICAO standard for <a href=\"https://en.wikipedia.org/wiki/Machine-readable_passport\">machine-readable passports</a> which uses the <a href=\"https://en.wikipedia.org/wiki/ISO/IEC_7810\">ISO/IEC 7810 ID3</a> size for the \"passport booklet\" (what you and I would call a passport).</p><p></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/a/AVvXsEgLySRY4aVNHQa_MeC0gABnFCWe1LOoCdQsN72fCaZNgZHeWz3sCYodLu98N29o6rXxYx0ZWja3or4nUTmyzMLqlV_jUvT_FgZwUO47CDag5dK2pxAxILKHKX5hQrnye1quGVA8Xlx_VBs00lphVUd9vHVOlD_CPVLajrse7X9wQllPFNiTq20oaA\" style=\"margin-left: 1em; margin-right: 1em;\"><img alt=\"\" data-original-height=\"568\" data-original-width=\"445\" src=\"https://blogger.googleusercontent.com/img/a/AVvXsEgLySRY4aVNHQa_MeC0gABnFCWe1LOoCdQsN72fCaZNgZHeWz3sCYodLu98N29o6rXxYx0ZWja3or4nUTmyzMLqlV_jUvT_FgZwUO47CDag5dK2pxAxILKHKX5hQrnye1quGVA8Xlx_VBs00lphVUd9vHVOlD_CPVLajrse7X9wQllPFNiTq20oaA=s16000\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">So, that's 125 x 88mm. Happily, a pretty common ziploc bag size is 10 x 15cm (or 100 x 150mm, if you prefer). That gives you an extra 12mm horizontally (so the passport will slip inside) and 25mm vertically (space for the passport and the area with the ziploc closure).</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">I mentioned \"4 mil\" above. Switching to non-metric measures (which seem common for the thickness of plastic) that's four 1/1000s of an inch (note it's not \"millimetres\", it's \"mils\"). You also sometimes see plastic measured in microns (which is 1/1000 of a millimetre). </div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">4 mil bags have a sturdiness to them that thinner plastics do not have. They are sometimes described as \"extra thick\". In the UK, <a href=\"https://www.amazon.co.uk/stores/page/498A797C-420D-4094-BBCC-ED81C35B21F6?\">these folks</a> (not an affiliate link) sell through Amazon and have a variety of bags of the right size and thickness.</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">And now my (new) passport is carefully protected.</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhgnW03040pIdvXdwmrEY1uC1dV9lZ_WPWETdktlSm9W5ZzNdFmmvyABr9N-pk2HF1GpTKC7tN8MdREa9pLtBS0PZWr6CkuviQH8JW6MTFs_F07Y__JZqjvxXydQnkdXgsxGmF-zY3drlU_dUmRjt_2UD4UHhYKyBeQfqeEnnLsgqGg-ck5NhvJQ/s1554/passport-2.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1554\" data-original-width=\"1024\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhgnW03040pIdvXdwmrEY1uC1dV9lZ_WPWETdktlSm9W5ZzNdFmmvyABr9N-pk2HF1GpTKC7tN8MdREa9pLtBS0PZWr6CkuviQH8JW6MTFs_F07Y__JZqjvxXydQnkdXgsxGmF-zY3drlU_dUmRjt_2UD4UHhYKyBeQfqeEnnLsgqGg-ck5NhvJQ/w422-h640/passport-2.jpg\" width=\"422\" /></a></div><br /><div class=\"separator\" style=\"clear: both; text-align: left;\">Aside: it turns out I actually once owned a waterproof passport wallet. I was gifted a <a href=\"https://sulgear.com/collections/passport-wallets\">SÜLgear passport wallet</a> and lost the waterproof liner. The kind folks at SÜLgear pointed out that the waterproof liner was simply a 4\" x 6\", 4 mil ziploc bag (or, for those of the metric persuasion, 102 x 152mm).</div><br /><p></p>",
"image": {
"url": "https://blogger.googleusercontent.com/img/a/AVvXsEgLySRY4aVNHQa_MeC0gABnFCWe1LOoCdQsN72fCaZNgZHeWz3sCYodLu98N29o6rXxYx0ZWja3or4nUTmyzMLqlV_jUvT_FgZwUO47CDag5dK2pxAxILKHKX5hQrnye1quGVA8Xlx_VBs00lphVUd9vHVOlD_CPVLajrse7X9wQllPFNiTq20oaA=s72-c",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "pseudo-randomness",
"term": "pseudo-randomness",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-5514750613064903382",
"title": "Is a movie prop the ultimate laptop bag?",
"description": null,
"url": "http://blog.jgc.org/2025/09/is-movie-prop-ultimate-laptop-bag.html",
"published": "2025-09-22T11:52:00.008Z",
"updated": "2025-09-22T20:54:25.186Z",
"content": "<p>A while back I attended a <a href=\"https://blog.cloudflare.com/three-chapters-at-cloudflare-programmer-to-cto-to-board-of-directors/\">Cloudflare board meeting</a> and carried my laptop in a brown paper bag from a grocery store. This elicited a few comments about needing a real bag. But I've often carried my laptop in inconspicuous bags. For me, the ultimate laptop bag is one that looks nothing like a laptop bag; it should look like nothing special at all. </p><p>Unhappily, grocery bags are not very strong, but there is a solution.</p><p>Movie prop grocery bags like this:</p><p></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLCsTiYJtgILVWSW6NUSgg7N1Auc969GWG9_LApQNtXRhRHsJwid4jLQ1j8OEAH4YVfeLi0El-jci5YtdUMyf4f-QEcGPZWYF05y9M0On0vskk9y0jFi8ziaXLpQVJ5_1dgiJcCcFO7OoI3c69NTQNCT_n3UM8go30Fry57Lr2ruGsaA1LnKJZVw/s5330/bag-1.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"3648\" data-original-width=\"5330\" height=\"438\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLCsTiYJtgILVWSW6NUSgg7N1Auc969GWG9_LApQNtXRhRHsJwid4jLQ1j8OEAH4YVfeLi0El-jci5YtdUMyf4f-QEcGPZWYF05y9M0On0vskk9y0jFi8ziaXLpQVJ5_1dgiJcCcFO7OoI3c69NTQNCT_n3UM8go30Fry57Lr2ruGsaA1LnKJZVw/w640-h438/bag-1.jpeg\" width=\"640\" /></a></div><p></p><p>Looks like a classic brown paper grocery bag, but it isn't. It's actually a <a href=\"https://www.dependableexpendables.com/search?type=product&q=silent+bag+props+\">silent prop</a> made for a film set where the noise from a crinkling paper bag would overwhelm the dialogue. </p><div class=\"separator\" style=\"clear: both; text-align: center;\"><iframe allowfullscreen=\"\" class=\"BLOG_video_class\" height=\"370\" src=\"https://www.youtube.com/embed/x6btmJSRueE\" width=\"595\" youtube-src-id=\"x6btmJSRueE\"></iframe></div><p>Instead of being made from paper, it's made from fabric and is more robust then an actual paper bag. It's also nearly silent (well, much, much quieter than the real thing).</p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKbYJ4h6bF_u6NoZjHYbCchtfwOO_sBPp8E7TOLrL1yhSigbzyGH1iXuH0jP1CjcqDTxewHa6xnLFd8dSVbgvE_gb47w-mmwoURZkmdUKEwg7iZ2j6uxyvivF-6PDvxWLWCTT7Z9PT_xKP299HT7KDgd3oj23K-Rq8hZQC_aD0NoKiINFpqelmfA/s5212/bag-2.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"3523\" data-original-width=\"5212\" height=\"432\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKbYJ4h6bF_u6NoZjHYbCchtfwOO_sBPp8E7TOLrL1yhSigbzyGH1iXuH0jP1CjcqDTxewHa6xnLFd8dSVbgvE_gb47w-mmwoURZkmdUKEwg7iZ2j6uxyvivF-6PDvxWLWCTT7Z9PT_xKP299HT7KDgd3oj23K-Rq8hZQC_aD0NoKiINFpqelmfA/w640-h432/bag-2.jpeg\" width=\"640\" /></a></div><p>It's also the ideal size for my trusty and <a href=\"https://blog.jgc.org/2024/01/my-daily-driver-is-older-than-i-thought.html\">vintage</a> MacBook Pro. Especially when it's in its sleeve.</p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8rGk6yij-QoN-rUsODKnFMQ3Vqd5bQNn3RBJdIBJHnJ_SscBE1esArQHYhqhMt4rg9qMRkgUSXa3RHw20kkAvL_c25BJeRKnvmHFnDGRcBx5Vm8fYfJSS4edF0iIPPgn29HTHeCc1EwPoAHpFlBkvPOPiRApNLPfJLIjGOdwlJRZeEPHXyGIaQA/s4924/bag-3.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"3368\" data-original-width=\"4924\" height=\"438\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8rGk6yij-QoN-rUsODKnFMQ3Vqd5bQNn3RBJdIBJHnJ_SscBE1esArQHYhqhMt4rg9qMRkgUSXa3RHw20kkAvL_c25BJeRKnvmHFnDGRcBx5Vm8fYfJSS4edF0iIPPgn29HTHeCc1EwPoAHpFlBkvPOPiRApNLPfJLIjGOdwlJRZeEPHXyGIaQA/w640-h438/bag-3.jpeg\" width=\"640\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">So, is a movie prop the ultimate laptop bag? No, clearly <a href=\"https://en.wikipedia.org/wiki/Betteridge%27s_law_of_headlines\">Betteridge's Law of Headlines</a> applies, but it does fit my criteria for discretion and <a href=\"https://news.ycombinator.com/item?id=45338980\">not being ostentatious</a>. </div>",
"image": {
"url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLCsTiYJtgILVWSW6NUSgg7N1Auc969GWG9_LApQNtXRhRHsJwid4jLQ1j8OEAH4YVfeLi0El-jci5YtdUMyf4f-QEcGPZWYF05y9M0On0vskk9y0jFi8ziaXLpQVJ5_1dgiJcCcFO7OoI3c69NTQNCT_n3UM8go30Fry57Lr2ruGsaA1LnKJZVw/s72-w640-h438-c/bag-1.jpeg",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "pseudo-randomness",
"term": "pseudo-randomness",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-9064413465283376346",
"title": "Ex-X",
"description": null,
"url": "http://blog.jgc.org/2025/09/ex-x.html",
"published": "2025-09-07T12:07:00.003Z",
"updated": "2025-09-07T12:07:55.408Z",
"content": "<p>I did have an X.com (username: 6a6763) account and I got bored of it so I deactivated it today. </p>",
"image": null,
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "pseudo-randomness",
"term": "pseudo-randomness",
"url": null
},
{
"label": "hardware",
"term": "hardware",
"url": null
},
{
"label": "babbage",
"term": "babbage",
"url": null
},
{
"label": "gaga",
"term": "gaga",
"url": null
},
{
"label": "anti-spam",
"term": "anti-spam",
"url": null
},
{
"label": "gnu make",
"term": "gnu make",
"url": null
},
{
"label": "retro",
"term": "retro",
"url": null
},
{
"label": "security",
"term": "security",
"url": null
},
{
"label": "codes and ciphers",
"term": "codes and ciphers",
"url": null
},
{
"label": "the geek atlas",
"term": "the geek atlas",
"url": null
},
{
"label": "rants and raves",
"term": "rants and raves",
"url": null
},
{
"label": "alan turing",
"term": "alan turing",
"url": null
},
{
"label": "hits",
"term": "hits",
"url": null
},
{
"label": "mathematics",
"term": "mathematics",
"url": null
},
{
"label": "calculators",
"term": "calculators",
"url": null
},
{
"label": "climate change",
"term": "climate change",
"url": null
},
{
"label": "clocks",
"term": "clocks",
"url": null
},
{
"label": "minitel",
"term": "minitel",
"url": null
},
{
"label": "perl",
"term": "perl",
"url": null
},
{
"label": "google go",
"term": "google go",
"url": null
},
{
"label": "toys",
"term": "toys",
"url": null
},
{
"label": "behind the screens",
"term": "behind the screens",
"url": null
},
{
"label": "machine learning",
"term": "machine learning",
"url": null
},
{
"label": "babygaga",
"term": "babygaga",
"url": null
},
{
"label": "games",
"term": "games",
"url": null
},
{
"label": "arc",
"term": "arc",
"url": null
},
{
"label": "my services",
"term": "my services",
"url": null
},
{
"label": "popfile",
"term": "popfile",
"url": null
},
{
"label": "radio",
"term": "radio",
"url": null
},
{
"label": "cansole",
"term": "cansole",
"url": null
},
{
"label": "facebook",
"term": "facebook",
"url": null
},
{
"label": "privacy",
"term": "privacy",
"url": null
},
{
"label": "knx",
"term": "knx",
"url": null
},
{
"label": "well... actually",
"term": "well... actually",
"url": null
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-417219859113312418",
"title": "Ode to the anti-Mac: Panasonic Toughbook FZ-40",
"description": null,
"url": "http://blog.jgc.org/2025/07/ode-to-anti-mac-panasonic-toughbook-fz.html",
"published": "2025-07-21T11:25:00.002Z",
"updated": "2025-07-21T11:25:57.856Z",
"content": "<p>I own two computers that I use regularly. The first is my main machine, a rather old <a href=\"https://blog.jgc.org/2024/01/my-daily-driver-is-older-than-i-thought.html\">Apple MacBook Pro</a>, the other is a Panasonic Toughbook FZ-40. They are polar opposites. Where the Mac is designed with tightly coupled software and hardware and is all smooth curves and delicate design, the Toughbook is designed to be used wearing gloves, outside and in rough situations that would damage the Mac. </p><p>Its built-in handle is a sign that this thing is heavy and robust.</p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR5ksuSkhfiuU-4f5KaWpjAKREr207HVQ5bNvVXix9HUqLg9Ft97l3zDSXfL6e6tu3NLbhk9DN7tgC391cXwRE3RDLdco6FXjUNvWUrkIfbtqI0SHfMKM6ANwitSnM3Kkpr315x9T4GmYoG8k4wsAdv3Fb1mRIswxkKstSMqw_F5QoyqfDMs8DUQ/s1280/tb-1.jpeg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1135\" data-original-width=\"1280\" height=\"355\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR5ksuSkhfiuU-4f5KaWpjAKREr207HVQ5bNvVXix9HUqLg9Ft97l3zDSXfL6e6tu3NLbhk9DN7tgC391cXwRE3RDLdco6FXjUNvWUrkIfbtqI0SHfMKM6ANwitSnM3Kkpr315x9T4GmYoG8k4wsAdv3Fb1mRIswxkKstSMqw_F5QoyqfDMs8DUQ/w400-h355/tb-1.jpeg\" width=\"400\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div>And where the MacBook has a feeble port selection, my Toughbook has VGA, Serial, two Ethernet sockets, HDMI, a micro SD card, SIM card, USB-A (SS5 and SS10), head and microphone jack, Thunderbolt and USB-C, and built in GPS. There's also a smart card reader.<div><br /></div><div>It feels like it's designed to do stuff where connecting to the real world is involved. </div><div><br /></div><div>The camera has a physical cover and all the ports are protected by locking doors.<div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-NlKla7coIopu5v4R42QD-eootEmOl2ximpHxs1al31cHNu9a0XuQWNISbD7Ge4Lu8EWBjd1-ndjuljMoSz0RMTM8l19K4p26gKHY0rbDlYqDkl4Y2h-eU8-GL9vkA0Db1jMYAqLVBFnKaMuEv6EzJlVR252Il7AxkmpGN2TwrwsYw8jnC2pk8g/s5712/tb-2.jpeg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"5712\" data-original-width=\"4284\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-NlKla7coIopu5v4R42QD-eootEmOl2ximpHxs1al31cHNu9a0XuQWNISbD7Ge4Lu8EWBjd1-ndjuljMoSz0RMTM8l19K4p26gKHY0rbDlYqDkl4Y2h-eU8-GL9vkA0Db1jMYAqLVBFnKaMuEv6EzJlVR252Il7AxkmpGN2TwrwsYw8jnC2pk8g/w480-h640/tb-2.jpeg\" width=\"480\" /></a></div><div><p>There are also some special Panasonic buttons (P1 through P4). P2 drops you into \"Concealed Mode\" which instantly cuts all the light coming from the machine.</p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE34EIE8i2r_zZ80SeR8HHQuwLq8EKTCHbWWkVpEPLqxqBcxh8cDpgithqnBj24zaED14PiKfZOk0QPVwNS9HdgaYf0Li2xFaiOMTm6-w3lKoGs-uCM8aDze-X7NLb0DXmCPDQndP4NnCD2WPmyAosSp2PzTAKks4BCENQRTrpNvKTpO3L_815nw/s1707/tb-3.jpeg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1707\" data-original-width=\"1280\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE34EIE8i2r_zZ80SeR8HHQuwLq8EKTCHbWWkVpEPLqxqBcxh8cDpgithqnBj24zaED14PiKfZOk0QPVwNS9HdgaYf0Li2xFaiOMTm6-w3lKoGs-uCM8aDze-X7NLb0DXmCPDQndP4NnCD2WPmyAosSp2PzTAKks4BCENQRTrpNvKTpO3L_815nw/w480-h640/tb-3.jpeg\" width=\"480\" /></a></div><p>P3 drops you into \"Night Mode\" for all those moments where your submarine is being hunted by the Soviets and you need to preserve your night vision to be able to see the instruments ready. Sadly there's no \"<a href=\"https://www.youtube.com/watch?v=jr0JaXfKj68\">one ping</a>\" option.</p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRoMryzChFHB6f8UVBQsAUMWrdCsddZb_acVrXDObFLh9DtkQC1JrgJPTj3R26zqPdSTVT_G1q_UL7t6HBggG_cLdXx_hwgoI3r2lEl4YdcROEG0suCiKDC7lIA1kdps2INWXR81IupVZyM448PW8MNzCsnpkZMQEo5nqwsAb16t4Ty2rDuqVemA/s1707/tb-4.jpeg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1707\" data-original-width=\"1280\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRoMryzChFHB6f8UVBQsAUMWrdCsddZb_acVrXDObFLh9DtkQC1JrgJPTj3R26zqPdSTVT_G1q_UL7t6HBggG_cLdXx_hwgoI3r2lEl4YdcROEG0suCiKDC7lIA1kdps2INWXR81IupVZyM448PW8MNzCsnpkZMQEo5nqwsAb16t4Ty2rDuqVemA/w480-h640/tb-4.jpeg\" width=\"480\" /></a></div><p>The machine runs Windows 11 (which I don't love) but a lot of industrial software is only available on Windows (along with things like the LEGO MINDSTORMS software which was weak on the Mac and full-featured on Windows). </p><p>I may be the only person in the world programming LEGO on a Toughbook with the option to drop into Night Mode during, uh, LEGO emergencies. But, hey, <a href=\"https://behind-the-screens.tv/#ironman\">LEGO worked for Iron Man</a>.</p><p>And then there's the red <a href=\"https://groups.google.com/g/toughbook/c/J__ssDTCm_0\">F11</a> key with a raised bump around it to prevent accidental activation.</p></div></div>",
"image": {
"url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR5ksuSkhfiuU-4f5KaWpjAKREr207HVQ5bNvVXix9HUqLg9Ft97l3zDSXfL6e6tu3NLbhk9DN7tgC391cXwRE3RDLdco6FXjUNvWUrkIfbtqI0SHfMKM6ANwitSnM3Kkpr315x9T4GmYoG8k4wsAdv3Fb1mRIswxkKstSMqw_F5QoyqfDMs8DUQ/s72-w400-h355-c/tb-1.jpeg",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "pseudo-randomness",
"term": "pseudo-randomness",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-6112484641635671567",
"title": "Pimping my Casio: Part Deux",
"description": null,
"url": "http://blog.jgc.org/2025/07/pimping-my-casio-part-deux.html",
"published": "2025-07-18T15:17:00.002Z",
"updated": "2025-07-19T13:05:59.172Z",
"content": "<p>Close to three years ago I wrote about using Oddly Specific Objects' alternate \"motherboard\" to modify a classic Casio F-91W watch: <a href=\"https://blog.jgc.org/2022/10/pimping-my-casio-with-oddly-specific.html\">Pimping my Casio with Oddly Specific Objects' alternate motherboard and firmware.</a> That blog post goes into the detail of swapping out the guts of the Casio and building and uploading the firmware. </p><p>Happily, Oddly Specific Objects is back with a \"Pro\" version of their alternative Casio internals which now features an accelerometer and an alternative LCD. The original <a href=\"https://www.sensorwatch.net\">Sensor Watch</a> used the existing Casio LCD display but the custom LCD allows for more complicated text to be displayed on screen. It's not a dot-matrix display so there are lots of limitations but it's still a fun upgrade.</p><p>Also, the Sensor Watch Pro, as it's called, requires no soldering (unlike the original version). Here's one I prepared earlier (that is a Casio F-91W with new internals):</p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1iVxRuZ4xaxGibS6JwRe8xEO0eKwOZ2dlDaA7b-eJh6hAX4H5wkQyGRS117Sy5H2Z66BAKfZ5iAtlWUSZJQjIIdusaiSo-IsQ1qSO1ksLiWKWD_QAsWbOi6egCNo30qVTqjtE-aivfl6sFJEZ9XXB1XrkgrA7nKRmBCmU4RkpzCRMJgDUWC7aCw/s2246/sw-pro-1.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"2246\" data-original-width=\"1452\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1iVxRuZ4xaxGibS6JwRe8xEO0eKwOZ2dlDaA7b-eJh6hAX4H5wkQyGRS117Sy5H2Z66BAKfZ5iAtlWUSZJQjIIdusaiSo-IsQ1qSO1ksLiWKWD_QAsWbOi6egCNo30qVTqjtE-aivfl6sFJEZ9XXB1XrkgrA7nKRmBCmU4RkpzCRMJgDUWC7aCw/w414-h640/sw-pro-1.jpeg\" width=\"414\" /></a></div><div><br /></div>You can see the new display in action there showing the day as FRI. As with the original Sensor Watch there's a browser-based emulator that uses <a href=\"https://emscripten.org\">emscripten</a> to get the watch running on your computer. This is pretty important because flashing new firmware to the watch requires dismantling it.<div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSB8nh3LmqIhogyf8_oCkSlsXhM2DkDSdJZZ_WqstKKlT0CjrFSUUje7k6jZZuw5WgWfmE_VvJ8oGvjaafFPOcr9NH33aqCWNJ023SvvYVvgCshM8lysDMRDK54lrL7fyq7RrtYmNNvR1syDmGswtEYDZY-oCY_tEZZ3Xs8vHtyw1ZWBwBs00qYw/s2038/sw-pro-2.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1478\" data-original-width=\"2038\" height=\"464\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSB8nh3LmqIhogyf8_oCkSlsXhM2DkDSdJZZ_WqstKKlT0CjrFSUUje7k6jZZuw5WgWfmE_VvJ8oGvjaafFPOcr9NH33aqCWNJ023SvvYVvgCshM8lysDMRDK54lrL7fyq7RrtYmNNvR1syDmGswtEYDZY-oCY_tEZZ3Xs8vHtyw1ZWBwBs00qYw/w640-h464/sw-pro-2.png\" width=\"640\" /></a></div><br /><div>Since there's no soldering the process of upgrading your Casio is simply take it apart and put back in the parts that came in the kit (along with a small piece of metal that's transferred from the original Casio watch to make the battery connection):</div><div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPPyoeQqJm4O8uQDLilWonpEhGj1-Hb5DvQ6yk5xYWjJ_V7cKrwq3tjKFuh-F3IvekcmfCCIMGyhc9-2iaV6VWtAkOLjuZ96Xh0RcWT7t4E3CSOa-XAo8FE4k6MgvG89JTEk1aW794Q94YutuHsnL0QXawxjmi7evePaExUvTM36UTFyafQPMT4w/s1280/sw-pro3.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1191\" data-original-width=\"1280\" height=\"596\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPPyoeQqJm4O8uQDLilWonpEhGj1-Hb5DvQ6yk5xYWjJ_V7cKrwq3tjKFuh-F3IvekcmfCCIMGyhc9-2iaV6VWtAkOLjuZ96Xh0RcWT7t4E3CSOa-XAo8FE4k6MgvG89JTEk1aW794Q94YutuHsnL0QXawxjmi7evePaExUvTM36UTFyafQPMT4w/w640-h596/sw-pro3.jpeg\" width=\"640\" /></a></div><br /><div>Since I bought the optional accelerometer add on it's necessary to put in place a little piece of Kapton tape (you can see if covering the five pads on the image above) and the insert the accelerometer board itself:</div><div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvSDKLm6K0X7zvjAgopLSk3mVf_VAzIsoGCejMyRyxprXEhZ_Ate4vYEPNYesDlteWI2acDnD8F4ldYJmyv3v9arkJY2Uea-qpplAo8QoVJuwe-sKb-mOZr7jMmIHQNq7igMN6aOrS1kReahxCF6XE1Al-RgG81aoANogqf2-fuBzue_PLh_nVAw/s1280/sw-pro-4.jpg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1247\" data-original-width=\"1280\" height=\"624\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvSDKLm6K0X7zvjAgopLSk3mVf_VAzIsoGCejMyRyxprXEhZ_Ate4vYEPNYesDlteWI2acDnD8F4ldYJmyv3v9arkJY2Uea-qpplAo8QoVJuwe-sKb-mOZr7jMmIHQNq7igMN6aOrS1kReahxCF6XE1Al-RgG81aoANogqf2-fuBzue_PLh_nVAw/w640-h624/sw-pro-4.jpg\" width=\"640\" /></a></div><br /><div>The five vertical traces at the top are the micro USB interface used for flashing the firmware. </div><div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidQSoy_thbpiUEwWkH9tY6Go4rSFFCwwxj0VU4xOPD6DnHKrCTf18qHOg-3vF1iJiMm2kpkYpznSmvnsj0ZuubvdcdADtaHlwquCrjrrF-fSv8LVSFSZX_F5KA8VtMSsBiv7b5PghdDiG0kippfxJEESiidFm8hn9JvU21ERPXRrCQwy8j954nVA/s1280/sw-pro-5.jpg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"883\" data-original-width=\"1280\" height=\"442\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidQSoy_thbpiUEwWkH9tY6Go4rSFFCwwxj0VU4xOPD6DnHKrCTf18qHOg-3vF1iJiMm2kpkYpznSmvnsj0ZuubvdcdADtaHlwquCrjrrF-fSv8LVSFSZX_F5KA8VtMSsBiv7b5PghdDiG0kippfxJEESiidFm8hn9JvU21ERPXRrCQwy8j954nVA/w640-h442/sw-pro-5.jpg\" width=\"640\" /></a></div><br /><div>I modified the firmware to remove Imperial units and 12 hour clock (which I never want) and to choose <a href=\"https://github.com/joeycastillo/second-movement/commit/d5a1544d88963d607bc85826437c4a317cf56834\">my own </a><span style=\"color: #0000ee;\"><span style=\"caret-color: rgb(0, 0, 238);\"><u>selection</u></span></span> of screens (I added the tally, accelerometer and light sensor screens).<br /><div style=\"text-align: left;\"><br /></div><div style=\"text-align: left;\">The complete sequence of commands needed to build the firmware was:<br /><span style=\"font-family: courier;\"><br /></span></div><div style=\"text-align: left;\"><span style=\"font-family: courier;\">brew install --cask gcc-arm-embedded<br /></span><span style=\"font-family: courier;\">git clone https://github.com/joeycastillo/second-movement<br /></span><span style=\"font-family: courier;\">cd second-movement<br /></span><span style=\"font-family: courier;\">git submodule update --init --recursive<br /></span><span style=\"font-family: courier;\">make BOARD=sensorwatch_pro DISPLAY=custom</span></div><p style=\"text-align: left;\">And then to upload to the watch you connect the micro USB, click the tiny switch on the back twice very rapidly and a volume called <span style=\"font-family: courier;\">WATCHBOOT</span> appears on your machine. You can copy the firmware over to the watch with <span style=\"font-family: courier;\">make install</span>. </p><p style=\"text-align: left;\">To run the emulator you build with emscripten:</p><div style=\"text-align: left;\"><span style=\"font-family: courier;\">brew install emscripten<br />emmake make BOARD=sensorwatch_pro DISPLAY=custom<br />python3 -m http.server -d build-sim</span></div><p style=\"text-align: left;\">And then visit localhost:8000/firmware.html in your browser.</p></div>",
"image": {
"url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1iVxRuZ4xaxGibS6JwRe8xEO0eKwOZ2dlDaA7b-eJh6hAX4H5wkQyGRS117Sy5H2Z66BAKfZ5iAtlWUSZJQjIIdusaiSo-IsQ1qSO1ksLiWKWD_QAsWbOi6egCNo30qVTqjtE-aivfl6sFJEZ9XXB1XrkgrA7nKRmBCmU4RkpzCRMJgDUWC7aCw/s72-w414-h640-c/sw-pro-1.jpeg",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "clocks",
"term": "clocks",
"url": "http://www.blogger.com/atom/ns#"
},
{
"label": "hardware",
"term": "hardware",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-8285350699266665156",
"title": "The discreet charm of the infrastructureless",
"description": null,
"url": "http://blog.jgc.org/2025/06/the-discreet-charm-of-infrastructureless.html",
"published": "2025-06-25T08:30:00.001Z",
"updated": "2025-06-25T08:30:21.890Z",
"content": "<p>Early in the morning in a European city, I awoke and wondered for a moment where I was. The room was totally black apart from a small glow from the face of my Casio Lineage watch lying on the bedside table. The luminous dial had absorbed sunlight during the day and was now giving off gentle light in the night; enough brightness to read the time.</p><p><i>Infrastructureless #1: sunlight + chemistry = glow in the dark.</i></p><p>The watch had also absorbed sunlight through its face during the day to recharge its battery. In all the time I've owned this watch I've never seen the battery drop below the what Casio calls HI (there are levels MID and LO but I'd only seen MID once when I took the watch from its original packaging)</p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtMzGp6AjbrtJnb89q-HqxiiWVeTRnyhOJ7CNlTzdxiBLyOoi419sLDoFyC-BXScCOlfNkaV9HtHJKE_F3-Q8GIGpcTVJ9gEXCHe1KWzY_pC6w1TQICU1eCoHDhevi3rLQez3EQ2RalUHkwrmzkqEHO600zgNwBXuNih-YYBa5WlrGS6CmGUvgOQ/s1882/casio-1.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1882\" data-original-width=\"1326\" height=\"400\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtMzGp6AjbrtJnb89q-HqxiiWVeTRnyhOJ7CNlTzdxiBLyOoi419sLDoFyC-BXScCOlfNkaV9HtHJKE_F3-Q8GIGpcTVJ9gEXCHe1KWzY_pC6w1TQICU1eCoHDhevi3rLQez3EQ2RalUHkwrmzkqEHO600zgNwBXuNih-YYBa5WlrGS6CmGUvgOQ/w281-h400/casio-1.png\" width=\"281\" /></a></div><p><i>Infrastructureless #2: sunlight + semiconductors = electrical power.</i></p><p>Clicking the top right button to illuminate the face further I could see the small LED display showing the local time in the European city (the main hands show my home time zone). And on the LED display a little black rectangle under RCVD indicated that somewhere in the night (it turned out at 02:04) the watch had picked up the signal from the <a href=\"https://en.wikipedia.org/wiki/DCF77\">DCF77</a> transmitter in Germany and set itself.</p><p><i>Infrastructureless #3: radio = correct time.</i></p><div>OK, DCF77 isn't totally without infrastructure, but one of the reasons I became a radio amateur is lack of infrastructure. Sure, you're able to read this because of the Internet but it's an incredibly complex system: layers and layers of technology and cooperating entities just so you can read this. </div><div><br /></div><div>On the other hand, radio amateurs just send out electromagnetic waves and talk to each other, no intervening infrastructure (well, ok, maybe you can count the ionosphere as infrastructure allowing long distance reception). And that's what DCF77, and the other five transmitters the Casio can receive in the US, UK, China and Japan, are doing: sending waves into the night to be picked up and decoded by whoever is listening.</div><div><br /></div><br /><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj05muy8FG1W4z3XdzOnVMkNPX-0kxnLY-ASyyH6vu06vlSOmPIxoYQbPWiuFUsNRLjfjGP_I-eCT00OxcNFNaq34MoJJ3WOU4JdSvGFWavsmC9HE-01lTsUhdgQWC3MZa26A4iIT0Sqtw0ba_JPoxH5vVTgkmSenioooM6iUhTCoTonRE_3GihfQ/s1158/casio-3.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"576\" data-original-width=\"1158\" height=\"318\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj05muy8FG1W4z3XdzOnVMkNPX-0kxnLY-ASyyH6vu06vlSOmPIxoYQbPWiuFUsNRLjfjGP_I-eCT00OxcNFNaq34MoJJ3WOU4JdSvGFWavsmC9HE-01lTsUhdgQWC3MZa26A4iIT0Sqtw0ba_JPoxH5vVTgkmSenioooM6iUhTCoTonRE_3GihfQ/w640-h318/casio-3.png\" width=\"640\" /></a><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj05muy8FG1W4z3XdzOnVMkNPX-0kxnLY-ASyyH6vu06vlSOmPIxoYQbPWiuFUsNRLjfjGP_I-eCT00OxcNFNaq34MoJJ3WOU4JdSvGFWavsmC9HE-01lTsUhdgQWC3MZa26A4iIT0Sqtw0ba_JPoxH5vVTgkmSenioooM6iUhTCoTonRE_3GihfQ/s1158/casio-3.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"></a><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNnQPIfLy4xjVok5m6dyLO2-ZVuHfUo0SROii0ekUpdhvVFFGsQEXR8AGggGIeUWtPTFKtNIxa-D9hDYoE-190vG9kyteWrVAH488uAmxx4-pGFCcKY4PSZJrFCZbyq1WwdoYfbRh8jLAExwB8AlAmVs7_bDQMRoiE4OtGhtfUK5hRM8qt9ubWiQ/s1112/casio-2.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"610\" data-original-width=\"1112\" height=\"352\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNnQPIfLy4xjVok5m6dyLO2-ZVuHfUo0SROii0ekUpdhvVFFGsQEXR8AGggGIeUWtPTFKtNIxa-D9hDYoE-190vG9kyteWrVAH488uAmxx4-pGFCcKY4PSZJrFCZbyq1WwdoYfbRh8jLAExwB8AlAmVs7_bDQMRoiE4OtGhtfUK5hRM8qt9ubWiQ/w640-h352/casio-2.png\" width=\"640\" /></a></div></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><span style=\"color: #0000ee;\"><span style=\"caret-color: rgb(0, 0, 238);\"><u><br /></u></span></span></div><div>Also, I'm just fascinated by radio propagation: my ancient Sharper Image clock sometimes <a href=\"https://blog.jgc.org/2021/07/receiving-wwvb-time-signal-in-portugal.html\">picks up the US WWVB in Portugal</a>.</div>",
"image": {
"url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtMzGp6AjbrtJnb89q-HqxiiWVeTRnyhOJ7CNlTzdxiBLyOoi419sLDoFyC-BXScCOlfNkaV9HtHJKE_F3-Q8GIGpcTVJ9gEXCHe1KWzY_pC6w1TQICU1eCoHDhevi3rLQez3EQ2RalUHkwrmzkqEHO600zgNwBXuNih-YYBa5WlrGS6CmGUvgOQ/s72-w281-h400-c/casio-1.png",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "clocks",
"term": "clocks",
"url": "http://www.blogger.com/atom/ns#"
},
{
"label": "radio",
"term": "radio",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-6718543456445220885",
"title": "Low-background Steel: content without AI contamination",
"description": null,
"url": "http://blog.jgc.org/2025/06/low-background-steel-content-without-ai.html",
"published": "2025-06-10T17:54:00.001Z",
"updated": "2025-06-10T18:00:21.855Z",
"content": "<p>Somehow I forgot to blog my site: <a href=\"https://lowbackgroundsteel.ai/\">https://lowbackgroundsteel.ai/</a>. I created it back in March 2023 as a clearinghouse for online resources that hadn't been contaminated with AI-generated content. </p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijWm8XoAHKZn2-fYIvZZXJFJLv4ASg4T0nmvExAee9kk32vI4V3gln9PpYKQBfJkMsae-fJvuo1A_cRI-ZX6E5i0f92RCHm5MXtZNHZr3ki3f3sX4n9HtlwwZCQVVGWigHYLhTJbz-pZQvRm0O5N6If_LqG6Cw2A9InEtGuBD4-mPqRtdc7NUBMQ/s2370/lbs.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"2370\" data-original-width=\"2066\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijWm8XoAHKZn2-fYIvZZXJFJLv4ASg4T0nmvExAee9kk32vI4V3gln9PpYKQBfJkMsae-fJvuo1A_cRI-ZX6E5i0f92RCHm5MXtZNHZr3ki3f3sX4n9HtlwwZCQVVGWigHYLhTJbz-pZQvRm0O5N6If_LqG6Cw2A9InEtGuBD4-mPqRtdc7NUBMQ/w558-h640/lbs.jpeg\" width=\"558\" /></a></div><p><a href=\"https://en.wikipedia.org/wiki/Low-background_steel\">Low-background Steel </a>(and lead) is a type of metal uncontaminated by radioactive isotopes from nuclear testing. That steel and lead is usually recovered from ships that sunk before the Trinity Test in 1945. The site is about uncontaminated content that I'm terming \"Low-background Steel\". The idea is to point to sources of text, images and video that were created prior to the explosion of AI-generated content that occurred in 2022.</p><p>It currently contains pointers to a Wikipedia dump from prior to the release of ChatGPT, the Arctic Code Vault, Project Gutenberg, and more.</p><p>If you know of other sources of non-contaminated content plus <a href=\"https://lowbackgroundsteel.ai/submit\">submit them</a>!</p>",
"image": {
"url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijWm8XoAHKZn2-fYIvZZXJFJLv4ASg4T0nmvExAee9kk32vI4V3gln9PpYKQBfJkMsae-fJvuo1A_cRI-ZX6E5i0f92RCHm5MXtZNHZr3ki3f3sX4n9HtlwwZCQVVGWigHYLhTJbz-pZQvRm0O5N6If_LqG6Cw2A9InEtGuBD4-mPqRtdc7NUBMQ/s72-w558-h640-c/lbs.jpeg",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "pseudo-randomness",
"term": "pseudo-randomness",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-3818174933613691655",
"title": "It was time for a dim bulb current limiter",
"description": null,
"url": "http://blog.jgc.org/2025/06/it-was-time-for-dim-bulb-current-limiter.html",
"published": "2025-06-01T20:34:00.003Z",
"updated": "2025-08-10T17:21:04.630Z",
"content": "<p>One of my Minitels (the one that I <a href=\"https://blog.jgc.org/2022/03/voiding-warranty-on-1993-minitel-2-to.html\">modified a few years ago to run new firmware</a>) started having power supply problems: the LED was on but nothing else was working. I suspected that the main power/CRT board needed new capacitors and so I recapped it:</p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh4RXdLhCqZuNiwHrSNNjV6Xiox_NxujebIDyWmdiHuEGocDo5YyW0BpRb7Hw9JuY0gsP302QXsDIhXA-LvC4PFRK6wTxQcnGbDa6VOxMeaeP_pa867CVka1tf6yL0q1qJ07Bqjp8kFOBAUOjth6FWKcvSap9k0jM07sbT_Hyiq1Phzccq831jcA/s1707/dim-bulb-5.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1707\" data-original-width=\"1280\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh4RXdLhCqZuNiwHrSNNjV6Xiox_NxujebIDyWmdiHuEGocDo5YyW0BpRb7Hw9JuY0gsP302QXsDIhXA-LvC4PFRK6wTxQcnGbDa6VOxMeaeP_pa867CVka1tf6yL0q1qJ07Bqjp8kFOBAUOjth6FWKcvSap9k0jM07sbT_Hyiq1Phzccq831jcA/w480-h640/dim-bulb-5.jpeg\" width=\"480\" /></a></div><div><br /></div>Alas, despite some of the older capacitors measuring poorly compared to their specs, that wasn't the problem and so I need to go deeper. The only problem is there are a ton of nasty voltages on this board. Notably the 230V AC input and then the tens of kilovolts generated for the CRT.<div><br /></div><div>Also the board seems to have a short somewhere.</div><div><br /></div><div>So, it's time to a dim bulb current limiter. Which I didn't have. So I made one. Here it is:</div><div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRtE5ZfCmta06KSLsOktQK2C2mCfbVs_T-dcnX7rvarawQzFsfqykDPLUR_AfPfMZUdCQx6RAmSPwjyjDUgwUBfh_VIpGKZvMRwM30CCHViyZBgMKiPm4eTkAwdVNPLeSa4TptwEdO3amheh-3AKvYT-xSJF2omTVX6SAned-UIZwujBag9dHkwA/s1280/dim-bulb-2.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"960\" data-original-width=\"1280\" height=\"480\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRtE5ZfCmta06KSLsOktQK2C2mCfbVs_T-dcnX7rvarawQzFsfqykDPLUR_AfPfMZUdCQx6RAmSPwjyjDUgwUBfh_VIpGKZvMRwM30CCHViyZBgMKiPm4eTkAwdVNPLeSa4TptwEdO3amheh-3AKvYT-xSJF2omTVX6SAned-UIZwujBag9dHkwA/w640-h480/dim-bulb-2.jpeg\" width=\"640\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div>It's a remarkably simple device which plugs into a standard power outlet (230V AC) and puts a lightbulb in series with one of the connections. The two wires coming in then go to a standard socket. Thus you plug your device (e.g. my Minitel) into the socket and the lightbulb limits the current.<div><br /></div><div>These things were super <a href=\"https://antiqueradio.org/dimbulb.htm\">common in the past</a> for anyone working with mains voltages.<br /><div><br /></div><div>Works great if you have an incandescent bulb at, say, 100W. A 100W bulb on 230V AC would have a current running through it of I = V/P -> I = 100/230 (approximately 430mA). Limiting the current that way means you're less likely to damage the device you're working on if there's a short. Naturally, using a different bulb would give you a different current. 60W would give you around 230mA. 150W around 650mA. </div><div><br /></div><div>As the Minitel's input fuse is 630mA, my current limiter will keep things well under its blowing current. Also, if there's a complete short then the bulb will glow brightly. </div><div><br /></div><div>Here's a look inside:</div><div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhia865PgNjaxbIC7I-HSdzyRt58mvvTzlFuihJVfM6R5HltlT6Y-THJ0FyUtHrbmq5EDpw3a9fDW14mi5LS-mhYMx-OcjeYo6dX_sIO7YDKdkegwTvZLxAHW6MyPx5c1O1S5v5HTmNoB5JrAghZWKTy_iaWblrup62OEdrFskWAK78qPQBrJKz5A/s1280/dim-bulb-1.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"960\" data-original-width=\"1280\" height=\"480\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhia865PgNjaxbIC7I-HSdzyRt58mvvTzlFuihJVfM6R5HltlT6Y-THJ0FyUtHrbmq5EDpw3a9fDW14mi5LS-mhYMx-OcjeYo6dX_sIO7YDKdkegwTvZLxAHW6MyPx5c1O1S5v5HTmNoB5JrAghZWKTy_iaWblrup62OEdrFskWAK78qPQBrJKz5A/w640-h480/dim-bulb-1.jpeg\" width=\"640\" /></a></div><br /><div>Power comes in at the top, and goes to a DPST switch. I'm using DPST because it's not easy to know which input wire is live and which is neutral because the European <a href=\"https://en.wikipedia.org/wiki/Schuko\">Schuko/Type F</a> plug/socket is not polarized and I like knowing that when I switch something off, it's off! And the DPST has an integrated lamp that gives me a visual reminder that it's on.</div><div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtd5yKvaoR4kCaz0wCPJpM0SMV3toUG5kbirF88W3Rc3XwvRPT93gkPx9u62UmdXLKOMH64bBa0pdpWwtKPwDgXK1lBNNbVEccd_PQ3it3orfVqcIA6HKzwoO3sOsdd-9ZTk0TSPxhYQhyTKTHb-HTzqNseLad2i_vJvumQks3mTjwSeaGPInG5A/s1964/dim-bulb-7.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"404\" data-original-width=\"1964\" height=\"132\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtd5yKvaoR4kCaz0wCPJpM0SMV3toUG5kbirF88W3Rc3XwvRPT93gkPx9u62UmdXLKOMH64bBa0pdpWwtKPwDgXK1lBNNbVEccd_PQ3it3orfVqcIA6HKzwoO3sOsdd-9ZTk0TSPxhYQhyTKTHb-HTzqNseLad2i_vJvumQks3mTjwSeaGPInG5A/w640-h132/dim-bulb-7.png\" width=\"640\" /></a></div><div><br /></div><div>Because local power sockets aren't polarised, the power strip I am using for my bench gear uses DPST switches for each socket. It's relatively hard to find one that does this (and says it does). Thanks, <a href=\"https://www.brennenstuhl.com/en-PT/products/extension-leads/extension-lead-individually-switchable-6-way-2m-h05vv-f-3g1.5-white\">Brennenstuhl</a>!</div><div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFVAd90qESyXhysVOcMSgX7Qx8fx9qacoGkZJiOlcmHjSjr5iVfl75nxxB1HFk7i0JZ6IYn3qMEDlBpx3gdXXBZr8jgLx8FydXZZri3SU6mBhtyjr7qQ5rxiTuZ2XbKrhYklDwOb5ciD1nl1uk-0SDvBULfuVZt-Tw4LLwFpZlfxfHy9gp1WLK5A/s3488/dim-bulb-6.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1581\" data-original-width=\"3488\" height=\"290\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFVAd90qESyXhysVOcMSgX7Qx8fx9qacoGkZJiOlcmHjSjr5iVfl75nxxB1HFk7i0JZ6IYn3qMEDlBpx3gdXXBZr8jgLx8FydXZZri3SU6mBhtyjr7qQ5rxiTuZ2XbKrhYklDwOb5ciD1nl1uk-0SDvBULfuVZt-Tw4LLwFpZlfxfHy9gp1WLK5A/w640-h290/dim-bulb-6.jpeg\" width=\"640\" /></a></div><br /><div>But I digress.</div><div><br /></div><div>To make my dim bulb current limiter do the right thing, I need a 100W incandescent bulb. These have been on their way to oblivion in the EU since 2009 and were, I believe, eliminated for home use in 2016. It is still possible to buy them, labelled for \"industrial use\", from some locations.</div><div> <div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJDOISKREffD-X0vDdc0QVCLXF4JmXDY5F7FDEsGzIOhZppJCmDGN8w-zcrlzAjn2H3pOJIXD7Klw0dcf5JIKo2iswFGPpaW42BopFhV_Q4TAiV8rp7qjierBrivRQF-Dt5FgiXGizc6PC4-1vT6OSASPzES4Ek-OK2XYZbyYfi7fNN8kik1BTzg/s1280/dim-bulb-3.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"941\" data-original-width=\"1280\" height=\"470\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJDOISKREffD-X0vDdc0QVCLXF4JmXDY5F7FDEsGzIOhZppJCmDGN8w-zcrlzAjn2H3pOJIXD7Klw0dcf5JIKo2iswFGPpaW42BopFhV_Q4TAiV8rp7qjierBrivRQF-Dt5FgiXGizc6PC4-1vT6OSASPzES4Ek-OK2XYZbyYfi7fNN8kik1BTzg/w640-h470/dim-bulb-3.jpeg\" width=\"640\" /></a></div><br /></div><div>So, that limits the current and protects the device I'm working on, but what about protecting me? For that, I pair it with an isolating transformer. If you're not familiar with this then here's the basics. In a house the neutral line is connected to ground (typically at the point at which power comes into your house). This means that the 230V coming out the live wire is relative to ground. If I touch it the power will flow through me to ground. </div><div><br /></div><div>The isolating transformer eliminates the link between live, neutral and ground. It's still outputting 230V but that voltage isn't relative to ground and so I won't get a shock if I touch one of the wires coming from the transformer's socket. Of course, touching both would send 230V through me.</div><div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwdEB4jBV-xo2lO_q8nigbRkTTGvkTVYQRtDyKVxqcrCScxhWyEKZQ7oSjgvishX4GFXjqzZ0KezPQrzTEGGFgNNUtRFW58SQ4UzTWEjtD83tUdDm2SlkWwGk3DrHTZZ-zD8ibRiWnNESCeA1OJJLLsahrkdb8O_LMy4jfHo5TP6Db-4zPdkeGEQ/s1280/dim-bulb-4.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"947\" data-original-width=\"1280\" height=\"474\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwdEB4jBV-xo2lO_q8nigbRkTTGvkTVYQRtDyKVxqcrCScxhWyEKZQ7oSjgvishX4GFXjqzZ0KezPQrzTEGGFgNNUtRFW58SQ4UzTWEjtD83tUdDm2SlkWwGk3DrHTZZ-zD8ibRiWnNESCeA1OJJLLsahrkdb8O_LMy4jfHo5TP6Db-4zPdkeGEQ/w640-h474/dim-bulb-4.jpeg\" width=\"640\" /></a></div><br /><div>So, having built that I can go back to understanding why my Minitel isn't powering on.</div></div>",
"image": {
"url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh4RXdLhCqZuNiwHrSNNjV6Xiox_NxujebIDyWmdiHuEGocDo5YyW0BpRb7Hw9JuY0gsP302QXsDIhXA-LvC4PFRK6wTxQcnGbDa6VOxMeaeP_pa867CVka1tf6yL0q1qJ07Bqjp8kFOBAUOjth6FWKcvSap9k0jM07sbT_Hyiq1Phzccq831jcA/s72-w480-h640-c/dim-bulb-5.jpeg",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "hardware",
"term": "hardware",
"url": "http://www.blogger.com/atom/ns#"
},
{
"label": "minitel",
"term": "minitel",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-1005744146793198691",
"title": "Just one more calculator, bro, just one more, I swear it's the last one",
"description": null,
"url": "http://blog.jgc.org/2025/04/just-one-more-calculator-bro-just-one.html",
"published": "2025-04-21T13:16:00.002Z",
"updated": "2025-04-21T13:17:31.328Z",
"content": "<p><br />I'm not much of a collector of things. Long ago I decided that on the retro-computing front I would not collect any machines that weren't very significant to me. So, my \"collection\" consists of a <a href=\"https://blog.jgc.org/2025/02/getting-kim-1-to-talk-to-my-mac.html\">KIM-1</a>, <a href=\"https://blog.jgc.org/2009/08/in-which-i-switch-on-30-year-old.html\">Sharp MZ-80K</a>, Research Machines 380Z and 480Z, <a href=\"https://blog.jgc.org/2011/11/back-from-dead-with-power-supply-repair.html\">BBC Micro Model B</a>, an <a href=\"https://blog.jgc.org/2023/12/restoration-of-ibm-thinkpad-701c.html\">IBM ThinkPad 701C</a>, and a <a href=\"https://blog.jgc.org/2023/11/using-my-minitel-1b-over-phone-network.html\">Minitel</a> (well, <a href=\"https://blog.jgc.org/2022/03/voiding-warranty-on-1993-minitel-2-to.html\">two</a>).</p><p>But calculators are where I come closest to not being able to resist. Calculators are there for you. They don't change UI because of the whim of some product manager. They don't need updating because their underlying OS is on some new, crazy version. Nothing gets in the way of you using them: no popups, enticements to buy some extra thing, no notifications, nothing. In an insane world, they are the sanest choice.</p><p>I've written in the past about restoring my <a href=\"https://blog.jgc.org/2022/11/restoring-my-rockwell-8r-calculator.html\">Rockwell 8R</a> and <a href=\"https://blog.jgc.org/2022/11/restoring-my-commodore-p50-calculator.html\">Commodore P50</a> (and a fun discovery that Sir Roger Penrose had the same calculator and wrote the same program as me: <a href=\"https://blog.jgc.org/2023/11/my-primality-testing-code-is-6x-faster.html\">mine was faster, his more elegant</a> (which is probably some sort of metaphor)). And I have my Casio fx-3600p which I used extensively at school.</p><p>I also have an original <a href=\"https://blog.jgc.org/2006/06/how-i-love-my-hp-16c.html\">HP 16C</a> (the one for programmers).</p><p></p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisy7iTpsDnuDW2mEU7GC4HwEkwisHHbTcoJJLrjvqQjy7LRpc6AA3EwwtiJf2A2-1k4EHcMCfFGgqTTlR4mCEPEEk60BXRkbooLUtK_y62ZG8EclKOgWKKCA05Vy9kLFj-KfnDiRyZ0wYFVYywkAeJsbb67fj7UR8oimP-yS4jQcXWpBkoyJYu5w/s697/calcs-2.jpg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"446\" data-original-width=\"697\" height=\"410\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisy7iTpsDnuDW2mEU7GC4HwEkwisHHbTcoJJLrjvqQjy7LRpc6AA3EwwtiJf2A2-1k4EHcMCfFGgqTTlR4mCEPEEk60BXRkbooLUtK_y62ZG8EclKOgWKKCA05Vy9kLFj-KfnDiRyZ0wYFVYywkAeJsbb67fj7UR8oimP-yS4jQcXWpBkoyJYu5w/w640-h410/calcs-2.jpg\" width=\"640\" /></a></div><p></p><p>Some time ago I discovered a company called SwissMicros that makes <a href=\"https://blog.jgc.org/2023/09/swissmicros-beautiful-hp-calculators.html\">modern replicas of classic HP calculators</a>. I bought two of them. I have <a href=\"https://www.swissmicros.com/product/dm42\">their version of the HP-42S</a>:</p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPIWpCsSbZpmdRpg8e4OUWnR-Bw-PzCdGyNCC8IC-oHsqonsgLejzhzIQrd4Lt86_TzVwjBMLtXjoUa2-dfJoac8PmvtzSjehmr2rAwMAm6xv8KUfgYHJWshh230MA9spz0_DrfU_wFRJaS0cWXfeBxu26uwyeXlEZKyIkv8X0389EQ6K3__dnyg/s2207/calcs-3.jpg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"2207\" data-original-width=\"1200\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPIWpCsSbZpmdRpg8e4OUWnR-Bw-PzCdGyNCC8IC-oHsqonsgLejzhzIQrd4Lt86_TzVwjBMLtXjoUa2-dfJoac8PmvtzSjehmr2rAwMAm6xv8KUfgYHJWshh230MA9spz0_DrfU_wFRJaS0cWXfeBxu26uwyeXlEZKyIkv8X0389EQ6K3__dnyg/w348-h640/calcs-3.jpg\" width=\"348\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">And <a href=\"https://www.swissmicros.com/product/dm16l\">their version of the HP-16C</a>:</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI4i1o8yGAzVntR9af65lSdKFZRIQNYFfQ1O7ypFC06HnsEV4W8sI1o0acHmBkSaGyCCTQnb39Yemu9dHAWVzdwfYjbdlcmfSOU2ZpUelb0XKiUfmAiM3Ygh84Y5ATrJ0Vp_eeDJZrPqw_3wnXEa9cduzExtM4tj0Amz8zaLgTd3YAXC1xrBNMrQ/s3336/calcs-4.jpg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"2025\" data-original-width=\"3336\" height=\"388\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI4i1o8yGAzVntR9af65lSdKFZRIQNYFfQ1O7ypFC06HnsEV4W8sI1o0acHmBkSaGyCCTQnb39Yemu9dHAWVzdwfYjbdlcmfSOU2ZpUelb0XKiUfmAiM3Ygh84Y5ATrJ0Vp_eeDJZrPqw_3wnXEa9cduzExtM4tj0Amz8zaLgTd3YAXC1xrBNMrQ/w640-h388/calcs-4.jpg\" width=\"640\" /></a></div><div><br /></div>But recently they started making a credit card-sized version of the HP-16C and I was unable to resist ordering one. And so, after dealing with Portuguese Customs, I got this:<div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcgIeFJ4H66rZq468xuiijnom-caEPxNAIFdnJA-Epnwdbl0xBV3TW5Qt0RJddUCT9XJjkzLkxnlySFuxgNMx0_FDCPTck269tqvi1KV8OMO_042p1FKlt0UWlBKYdFMx7kd7AzBQAM_0Z0N40UbncYfGlfbr_I5v35dWg0kuMIAYm32B2vWAXEQ/s1200/calcs-1.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"896\" data-original-width=\"1200\" height=\"478\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcgIeFJ4H66rZq468xuiijnom-caEPxNAIFdnJA-Epnwdbl0xBV3TW5Qt0RJddUCT9XJjkzLkxnlySFuxgNMx0_FDCPTck269tqvi1KV8OMO_042p1FKlt0UWlBKYdFMx7kd7AzBQAM_0Z0N40UbncYfGlfbr_I5v35dWg0kuMIAYm32B2vWAXEQ/w640-h478/calcs-1.png\" width=\"640\" /></a></div><br /><div>And now I have full size and card size side by side:</div><div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjVhkZfsNxJ1Akwslrc5f55sfd4kF5mY7C3rzOMqLkxXb32nUNNNMx4XKyIBs_fnnwFZyxF2xnHt1V-hcuuPHppMSvgu822qHaK92XyvxzXPcHj79bCsoyDbOpUJt42iywd6kO-fjlYatVL6Q8BU425AVGPsA7doOj5OmNdZaZDx9LVlZwMfi-BQ/s2502/calcs-5.jpg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"2502\" data-original-width=\"2098\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjVhkZfsNxJ1Akwslrc5f55sfd4kF5mY7C3rzOMqLkxXb32nUNNNMx4XKyIBs_fnnwFZyxF2xnHt1V-hcuuPHppMSvgu822qHaK92XyvxzXPcHj79bCsoyDbOpUJt42iywd6kO-fjlYatVL6Q8BU425AVGPsA7doOj5OmNdZaZDx9LVlZwMfi-BQ/w536-h640/calcs-5.jpg\" width=\"536\" /></a></div><br /><div>I'll try to stop collecting calculators there.</div>",
"image": {
"url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisy7iTpsDnuDW2mEU7GC4HwEkwisHHbTcoJJLrjvqQjy7LRpc6AA3EwwtiJf2A2-1k4EHcMCfFGgqTTlR4mCEPEEk60BXRkbooLUtK_y62ZG8EclKOgWKKCA05Vy9kLFj-KfnDiRyZ0wYFVYywkAeJsbb67fj7UR8oimP-yS4jQcXWpBkoyJYu5w/s72-w640-h410-c/calcs-2.jpg",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "calculators",
"term": "calculators",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-6192850347732641270",
"title": "The Via Verde Stick",
"description": null,
"url": "http://blog.jgc.org/2025/04/the-via-verde-stick.html",
"published": "2025-04-10T09:00:00.001Z",
"updated": "2025-04-10T09:01:13.355Z",
"content": "<p>Portugal has an incredibly well executed and efficient system for collecting road tolls called <a href=\"https://en.wikipedia.org/wiki/Via_Verde\">Via Verde</a>. A small transponder in the car either collects a toll at an automated toll booth or, on some motorways, every few kilometres without slowing down at all.</p><p>Via Verde can also be used to pay for parking in many locations. </p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0TQSG69s-lFiHSIlO5WePiW3YXHHKZmVYtY5t_ss6lMzPAA4N6MCkINVr6yCRziymBJV4tNMIY6YUSse9A127LRXmm2-8IEipNGjFnLqHjOmH_Nq4a7gAZ0pqBx33S8E6erY1xW0CMUsQFnqPEDb4DrZv6HSO2ZZ0q0apYvnD2SYiFDYabOA2Aw/s1664/viaverde-1.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"770\" data-original-width=\"1664\" height=\"296\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0TQSG69s-lFiHSIlO5WePiW3YXHHKZmVYtY5t_ss6lMzPAA4N6MCkINVr6yCRziymBJV4tNMIY6YUSse9A127LRXmm2-8IEipNGjFnLqHjOmH_Nq4a7gAZ0pqBx33S8E6erY1xW0CMUsQFnqPEDb4DrZv6HSO2ZZ0q0apYvnD2SYiFDYabOA2Aw/w640-h296/viaverde-1.png\" width=\"640\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">When entering a car park where Via Verde is an option there are two ways it works: in some car parks it's possible just to wait a few moments for the gate to decide that you've opted for Via Verde and not a ticket, in others you have to press a button.</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdOXIJE16yi1UcYmzHqz5ACJI_3Aym9jYcwH-q9HEYJnrKjD98r9mTrx_KIbuwkksjuaUxpJtCE6qMsfN5hEza2JoU7ooapKE3mGJ1u0iYIocyPsuJnFKM-0YpY2WJdrxKXK0jkONm8F-HeDU-dPUBFH3AzUo3lv_AgvZe2lM-deaWQxXJRUXfbw/s810/viaverde-2.jpg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"810\" data-original-width=\"789\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdOXIJE16yi1UcYmzHqz5ACJI_3Aym9jYcwH-q9HEYJnrKjD98r9mTrx_KIbuwkksjuaUxpJtCE6qMsfN5hEza2JoU7ooapKE3mGJ1u0iYIocyPsuJnFKM-0YpY2WJdrxKXK0jkONm8F-HeDU-dPUBFH3AzUo3lv_AgvZe2lM-deaWQxXJRUXfbw/w624-h640/viaverde-2.jpg\" width=\"624\" /></a></div><div><br /></div>The parking above has three options: use a card (for residents or people with a subscription), blue button for a ticket, and green for Via Verde. To alleviate difficulty in pressing the green button I created the \"Via Verde Stick\" from a short length of wooden broom stick handle, some green spray paint, and two felt floor protectors.<div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV_mJ1uFY0aDh-FjkVVZZ3qX3JAzACQHrDlsu2ck4TbAYbmwySSFrhlA7pOq9xrXxqGxov6pNgvccGEaxHW9vGmGyp6fB0EVqTvG8lbdVtatzXPljJylcz7hJhFDammVFL8b-Grz4iVyOLhdLYPhfU8J_RNFM_cr_7B_UFyrAyasVE0ony6bX1zw/s5222/viaverde-3.jpg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"607\" data-original-width=\"5222\" height=\"74\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV_mJ1uFY0aDh-FjkVVZZ3qX3JAzACQHrDlsu2ck4TbAYbmwySSFrhlA7pOq9xrXxqGxov6pNgvccGEaxHW9vGmGyp6fB0EVqTvG8lbdVtatzXPljJylcz7hJhFDammVFL8b-Grz4iVyOLhdLYPhfU8J_RNFM_cr_7B_UFyrAyasVE0ony6bX1zw/w640-h74/viaverde-3.jpg\" width=\"640\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">The felt floor protectors are on both ends so that it doesn't matter which way the stick is oriented.</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih0uWTeQZNHwqRTccI-XciBYAj9NqDYY7wkiQfD_MwmQuDsr3KJuCEZeuBCaq0spT53IY_yxOhOvBhRXdp2C3tr01SqXGD5ygBgmH1hqFI5FgOIR9gt97WLmCb1bc9iGqQx7G45Y0t5KBhgpMt-OmLW5bQ8bhv3Ndwi7N6aaKUe_azbUqf7wqmnQ/s4032/viaverde-4.jpg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"4032\" data-original-width=\"3024\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih0uWTeQZNHwqRTccI-XciBYAj9NqDYY7wkiQfD_MwmQuDsr3KJuCEZeuBCaq0spT53IY_yxOhOvBhRXdp2C3tr01SqXGD5ygBgmH1hqFI5FgOIR9gt97WLmCb1bc9iGqQx7G45Y0t5KBhgpMt-OmLW5bQ8bhv3Ndwi7N6aaKUe_azbUqf7wqmnQ/w480-h640/viaverde-4.jpg\" width=\"480\" /></a></div><br /><div class=\"separator\" style=\"clear: both; text-align: left;\">I do wonder what the driver behind me thinks when a long, bright green stick appears out the window but...</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYlzGx1m_rG2hLh-uKNHm6upODANbEZUtpmSEMCwFgMLBJxAsidRW_S0uVbHauFWyEMS1_HhG035cnHqF-zkA6xDJ7lNw09_nL_omZ4tCGv_qGpUN_tgMkbpzmWbjz9W7HCSXagF58iKTWZRf2bfgzaDk1ST6PDkGLYfvOitCOyQe8TmLTPFDcGg/s600/viaverde-5.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"454\" data-original-width=\"600\" height=\"303\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYlzGx1m_rG2hLh-uKNHm6upODANbEZUtpmSEMCwFgMLBJxAsidRW_S0uVbHauFWyEMS1_HhG035cnHqF-zkA6xDJ7lNw09_nL_omZ4tCGv_qGpUN_tgMkbpzmWbjz9W7HCSXagF58iKTWZRf2bfgzaDk1ST6PDkGLYfvOitCOyQe8TmLTPFDcGg/w400-h303/viaverde-5.jpg\" width=\"400\" /></a></div>",
"image": {
"url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0TQSG69s-lFiHSIlO5WePiW3YXHHKZmVYtY5t_ss6lMzPAA4N6MCkINVr6yCRziymBJV4tNMIY6YUSse9A127LRXmm2-8IEipNGjFnLqHjOmH_Nq4a7gAZ0pqBx33S8E6erY1xW0CMUsQFnqPEDb4DrZv6HSO2ZZ0q0apYvnD2SYiFDYabOA2Aw/s72-w640-h296-c/viaverde-1.png",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "pseudo-randomness",
"term": "pseudo-randomness",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-6045805352103665596",
"title": "Debugging Lotus 1-2-3 by fax",
"description": null,
"url": "http://blog.jgc.org/2025/03/debugging-lotus-1-2-3-by-fax.html",
"published": "2025-03-31T15:22:00.008Z",
"updated": "2025-03-31T15:30:58.521Z",
"content": "<p>There isn't a lot to this story beyond the fact that in around 1990 I helped debug someone's <a href=\"https://en.wikipedia.org/wiki/Lotus_1-2-3\">Lotus 1-2-3</a> set up via fax. But it's a good reminder of how important the Zeroth Law of Debugging is (see below).</p><p>Without some sort of online connection with these folks, and with transatlantic phone calls being very, very expensive (I was in the UK, they were in the US) fax was the obvious answer.</p><p>I was reminded of this when I came across the actual fax itself:</p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvBJFVo9lHXKYXrDQLzGXbikkdfnrYIrLIVEfKAtf8xXit4aysAwKI4eGJE7DDtpGox5v5nGtimyBlgEsV2TfFhoJZjOzrMvKn_Y9zWvlnd90WmDJNvY_PhjY-e88ULkTz3anDxMYBTVvcZy6_-WWvwGiNGkfcpE0zZM6ycrTXGZO9d-Qun1QZXg/s1933/123fax-1.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1933\" data-original-width=\"1394\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvBJFVo9lHXKYXrDQLzGXbikkdfnrYIrLIVEfKAtf8xXit4aysAwKI4eGJE7DDtpGox5v5nGtimyBlgEsV2TfFhoJZjOzrMvKn_Y9zWvlnd90WmDJNvY_PhjY-e88ULkTz3anDxMYBTVvcZy6_-WWvwGiNGkfcpE0zZM6ycrTXGZO9d-Qun1QZXg/w462-h640/123fax-1.jpeg\" width=\"462\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">What I asked them to do was give me the output of <span style=\"font-family: courier;\">/ppomr</span>. Hitting <span style=\"font-family: courier;\">/</span> in 1-2-3 started the menu system and each letter took you down a submenu until you hit an actual menu item. <span style=\"font-family: courier;\">/ppomr</span> is <span style=\"font-family: courier;\">/Print Printer Options Margins Right</span> (read all about it in the <a href=\"https://ia801706.us.archive.org/25/items/lotus-1-2-3-release-3.1-reference/Lotus%201-2-3%20Release%203.1%20-%20Quick%20Reference.pdf\">Quick Reference</a>) and so I was asking for the size of the right margin when printing. </div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvnfG-rD2_B8Ex1WeGI8rIDmfdkcmWsQXkFB5lW_NdEmgBOImDbwS68iXE2jpDvmEVEq_zfBI3r5HrsWez-n5V_5JL6PFHaKh2kV8S2GW-D92kkp7a1lVlI3vjsThAs_RnkR0XvosVtmqLpDrF-HZGN8hb2qbp5HdE6oNYjlJAbW1zOGOiqMYJ0Q/s1304/123fax-4.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1304\" data-original-width=\"1118\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvnfG-rD2_B8Ex1WeGI8rIDmfdkcmWsQXkFB5lW_NdEmgBOImDbwS68iXE2jpDvmEVEq_zfBI3r5HrsWez-n5V_5JL6PFHaKh2kV8S2GW-D92kkp7a1lVlI3vjsThAs_RnkR0XvosVtmqLpDrF-HZGN8hb2qbp5HdE6oNYjlJAbW1zOGOiqMYJ0Q/w549-h640/123fax-4.png\" width=\"549\" /></a></div><br /><div class=\"separator\" style=\"clear: both; text-align: left;\">Here's what that looks like in action:</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyFlohy9zaZQG4F1lVbE5zwbI-atvbCsblhWuExUIGrz-5M8mXowl5pVX-1Z3PvLtk4RRSy4SSIezsdMAxapZNC-haHtW1IATs6KQbUR1xDS6FkD8qGgqonN4u9jWsta6RUFQtrzTB5h1I7AZE0zNNp3As3bKBG3jXqZWwWdU8vzrovjoWAaodww/s4096/123fx-2.gif\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"2304\" data-original-width=\"4096\" height=\"360\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyFlohy9zaZQG4F1lVbE5zwbI-atvbCsblhWuExUIGrz-5M8mXowl5pVX-1Z3PvLtk4RRSy4SSIezsdMAxapZNC-haHtW1IATs6KQbUR1xDS6FkD8qGgqonN4u9jWsta6RUFQtrzTB5h1I7AZE0zNNp3As3bKBG3jXqZWwWdU8vzrovjoWAaodww/w640-h360/123fx-2.gif\" width=\"640\" /></a></div><div><br /></div>And then I instructed the person on the other end to alter the left margin with <span style=\"font-family: courier;\">/ppoml</span> (<span style=\"font-family: courier;\">/Print Printer Options Margins Left</span>). I also told them if they wanted a change to the page headers I'd need to \"send them a disc\" (i.e. mail a floppy disc to the US!)<div><br /></div><div><div class=\"separator\" style=\"clear: both; text-align: left;\">If you are going to debug anything you need to tighten the loop between trying something and observing the output of your change. This should be the Zeroth Law of Debugging: get the smallest/fastest test case so you can iterate.</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">Worst case send faxes across the Atlantic. </div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgHKaAHsFiYNnAH36kFKQdWGdtiPd6-AulKES6UwkiyVVWEZ-fqAZu_53HVlie0Ftz-pFokP24OLBf1792PRTvZAZmJeIYd7_TSTfP9DvSeikXQJzXBj5rXgoRoSv8P3dUXzg4HE9WdbWLwTwB_FdWZB67ddTLVZFaoD0So7K1k7z-JDAJoVfJpA/s529/123fax-3.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"472\" data-original-width=\"529\" height=\"358\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgHKaAHsFiYNnAH36kFKQdWGdtiPd6-AulKES6UwkiyVVWEZ-fqAZu_53HVlie0Ftz-pFokP24OLBf1792PRTvZAZmJeIYd7_TSTfP9DvSeikXQJzXBj5rXgoRoSv8P3dUXzg4HE9WdbWLwTwB_FdWZB67ddTLVZFaoD0So7K1k7z-JDAJoVfJpA/w400-h358/123fax-3.jpeg\" width=\"400\" /></a></div></div>",
"image": {
"url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvBJFVo9lHXKYXrDQLzGXbikkdfnrYIrLIVEfKAtf8xXit4aysAwKI4eGJE7DDtpGox5v5nGtimyBlgEsV2TfFhoJZjOzrMvKn_Y9zWvlnd90WmDJNvY_PhjY-e88ULkTz3anDxMYBTVvcZy6_-WWvwGiNGkfcpE0zZM6ycrTXGZO9d-Qun1QZXg/s72-w462-h640-c/123fax-1.jpeg",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "retro",
"term": "retro",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-5795781756177787948",
"title": "I have come to loathe acronyms",
"description": null,
"url": "http://blog.jgc.org/2025/02/i-have-come-to-loath-acronyms.html",
"published": "2025-02-13T17:55:00.004Z",
"updated": "2025-02-13T17:59:46.833Z",
"content": "<p>Unless they are widely, widely known they make communication worse. And they have a tendency to make the writer seem pompous, or a member of some special clique, while making a reader who doesn't know the acronym feel foolish. </p><p>They are the opposite of clear communication, and are often accompanied by unclear, complex language.</p><p>The writer's goal (whether of a book, an email, or whatever the hell we call a tweet now) should be to be understood. Acronyms are an impediment to that and are often more difficult to read or say than actual words. </p><p>And don't fall into the awful trap of defining an acronym in a document and then using it later. That's a substitute for using plain language. Always use plain language.</p><p>Unless your goal is to be misunderstood. </p>",
"image": null,
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "pseudo-randomness",
"term": "pseudo-randomness",
"url": null
},
{
"label": "hardware",
"term": "hardware",
"url": null
},
{
"label": "babbage",
"term": "babbage",
"url": null
},
{
"label": "gaga",
"term": "gaga",
"url": null
},
{
"label": "anti-spam",
"term": "anti-spam",
"url": null
},
{
"label": "gnu make",
"term": "gnu make",
"url": null
},
{
"label": "retro",
"term": "retro",
"url": null
},
{
"label": "security",
"term": "security",
"url": null
},
{
"label": "codes and ciphers",
"term": "codes and ciphers",
"url": null
},
{
"label": "the geek atlas",
"term": "the geek atlas",
"url": null
},
{
"label": "rants and raves",
"term": "rants and raves",
"url": null
},
{
"label": "alan turing",
"term": "alan turing",
"url": null
},
{
"label": "hits",
"term": "hits",
"url": null
},
{
"label": "mathematics",
"term": "mathematics",
"url": null
},
{
"label": "calculators",
"term": "calculators",
"url": null
},
{
"label": "climate change",
"term": "climate change",
"url": null
},
{
"label": "clocks",
"term": "clocks",
"url": null
},
{
"label": "minitel",
"term": "minitel",
"url": null
},
{
"label": "perl",
"term": "perl",
"url": null
},
{
"label": "google go",
"term": "google go",
"url": null
},
{
"label": "toys",
"term": "toys",
"url": null
},
{
"label": "behind the screens",
"term": "behind the screens",
"url": null
},
{
"label": "machine learning",
"term": "machine learning",
"url": null
},
{
"label": "babygaga",
"term": "babygaga",
"url": null
},
{
"label": "games",
"term": "games",
"url": null
},
{
"label": "arc",
"term": "arc",
"url": null
},
{
"label": "my services",
"term": "my services",
"url": null
},
{
"label": "popfile",
"term": "popfile",
"url": null
},
{
"label": "radio",
"term": "radio",
"url": null
},
{
"label": "cansole",
"term": "cansole",
"url": null
},
{
"label": "facebook",
"term": "facebook",
"url": null
},
{
"label": "privacy",
"term": "privacy",
"url": null
},
{
"label": "knx",
"term": "knx",
"url": null
},
{
"label": "well... actually",
"term": "well... actually",
"url": null
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-2972398345099268358",
"title": "Archiving hardware projects",
"description": null,
"url": "http://blog.jgc.org/2025/02/archiving-hardware-projects.html",
"published": "2025-02-10T17:09:00.000Z",
"updated": "2025-02-10T17:09:09.529Z",
"content": "<p>From time to time I do some project involving old hardware that requires connecting it to a modern computer. For example,</p><p><span> </span><a href=\"https://blog.jgc.org/2025/02/getting-kim-1-to-talk-to-my-mac.html\">Getting the KIM-1 to talk to my Mac</a></p><p><span> </span><a href=\"https://blog.jgc.org/2022/03/resurrecting-dataman-s4-prom-programmer.html\">Resurrecting a Dataman S4 PROM programmer</a></p><p><span> </span><a href=\"https://blog.jgc.org/2022/04/ripping-old-mini-dv-video-tapes-on-mac.html\">Ripping old mini DV video tapes on a Mac</a></p><p>And I've come to the conclusion that archiving the related hardware is important. For example, I got this Dataman S4 talking to my Mac using a few different cables. I bought a set of cables and archived them in a bag for the next time I need to do this.</p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_A37qHS8SIBr146GTQt5yyNg3AENYhRcyj6vAbQCCJeCaSpXI5Mh8IiMRhQMYLGqtqoIeGhgFK5VarUgScWfPV_jlhcyZEXdbtcjUCIgpdz6WG903sxPYD6g9c3rG3hyphenhyphenNcf06m0cyeKQn1OkAVMy_4fFLoiDbNAs1Z2KhlFET2S_rDJY9yZpc1w/s2664/dataman5.jpg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"2664\" data-original-width=\"2381\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_A37qHS8SIBr146GTQt5yyNg3AENYhRcyj6vAbQCCJeCaSpXI5Mh8IiMRhQMYLGqtqoIeGhgFK5VarUgScWfPV_jlhcyZEXdbtcjUCIgpdz6WG903sxPYD6g9c3rG3hyphenhyphenNcf06m0cyeKQn1OkAVMy_4fFLoiDbNAs1Z2KhlFET2S_rDJY9yZpc1w/w573-h640/dataman5.jpg\" width=\"573\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div>The Dataman S4 project required three things: a USB-C to USB-A adapter, a USB-A to RS-232 adapter and a 9 pin to 25 pin serial cable. <div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBw-gv1T6yK7NS-YQn7wHnDNK61-ow4R6AYjWETsNLG-IQ7pXIcni3NQg0MpcFWKaNyTE6edLK3whoeDL_cvm5M4DzwHm7ytq3zngw5GAwEM3I4wfHlLZdXIruTlCLbpooZi9FZPOQ5Axdq-O8IqUVOFbVpRmNR8NZlE9-Y39vvjUta7XR3UgUug/s4234/archive-1.jpeg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"4234\" data-original-width=\"3902\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBw-gv1T6yK7NS-YQn7wHnDNK61-ow4R6AYjWETsNLG-IQ7pXIcni3NQg0MpcFWKaNyTE6edLK3whoeDL_cvm5M4DzwHm7ytq3zngw5GAwEM3I4wfHlLZdXIruTlCLbpooZi9FZPOQ5Axdq-O8IqUVOFbVpRmNR8NZlE9-Y39vvjUta7XR3UgUug/w590-h640/archive-1.jpeg\" width=\"590\" /></a></div><div><br /></div><div>These things are fairly inexpensive making it viable to archive them. Now I only have to worry about the drivers being available!</div><div><br /><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8oe93fugNv6GtBjc9-RkAdaU3jo5Cruy6-BxJH-5uX_k7eFtKFqTBODWC9VXHVSBWRRAHNt5djl1DSNlJ3-mzuSuWZYFR_kK0R7gGSH1zxuL87xhen5ysQTBmh7shP0t4yR4iVQJXXqPsGSI3cSFlQdrROEWokFWiCNCcYNxO0NiQrp4a1T5xfw/s4083/archive-2.jpeg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"4083\" data-original-width=\"3763\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8oe93fugNv6GtBjc9-RkAdaU3jo5Cruy6-BxJH-5uX_k7eFtKFqTBODWC9VXHVSBWRRAHNt5djl1DSNlJ3-mzuSuWZYFR_kK0R7gGSH1zxuL87xhen5ysQTBmh7shP0t4yR4iVQJXXqPsGSI3cSFlQdrROEWokFWiCNCcYNxO0NiQrp4a1T5xfw/w590-h640/archive-2.jpeg\" width=\"590\" /></a></div></div>",
"image": {
"url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_A37qHS8SIBr146GTQt5yyNg3AENYhRcyj6vAbQCCJeCaSpXI5Mh8IiMRhQMYLGqtqoIeGhgFK5VarUgScWfPV_jlhcyZEXdbtcjUCIgpdz6WG903sxPYD6g9c3rG3hyphenhyphenNcf06m0cyeKQn1OkAVMy_4fFLoiDbNAs1Z2KhlFET2S_rDJY9yZpc1w/s72-w573-h640-c/dataman5.jpg",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "hardware",
"term": "hardware",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-3528602294442713744",
"title": "Getting the KIM-1 to talk to my Mac",
"description": null,
"url": "http://blog.jgc.org/2025/02/getting-kim-1-to-talk-to-my-mac.html",
"published": "2025-02-09T20:28:00.008Z",
"updated": "2025-07-28T14:28:23.275Z",
"content": "<p>I've written before about <a href=\"https://blog.jgc.org/2023/11/my-1976-kim-1.html\">my 1976 KIM-1</a> and <a href=\"https://blog.jgc.org/2013/04/how-i-coded-in-1985.html\">code I wrote</a> for a similar one long ago. But I hadn't done much with the KIM-1 and strongly believe that old hardware need to be living machines not still lives. But using the KIM-1 directly (via its keypad and little hexadecimal display) is painful. I wanted to be able to use it with a terminal.</p><p>Luckily, the KIM-1 was designed to interface to a terminal: a <a href=\"https://en.wikipedia.org/wiki/Teletype_Model_33\">Model 33 ASR Teletype</a>. Teletypes use a type of interface which is unusual to most people (unless you work with industrial machinery where it's pretty common). That interface is a <a href=\"https://en.wikipedia.org/wiki/Digital_current_loop_interface\">current loop</a>.</p><p>A current loop uses current (often 20mA) rather than voltage (such as the voltage levels seen in common serial interfaces). Prior to the creation of <a href=\"https://en.wikipedia.org/wiki/RS-232\">RS-232</a>, current loops were very common. Current loops are still used in industrial settings partly because they have good noise immunity, can go for long distances, and are simple and reliable. </p><p>In the KIM-1 manual there's a picture of the way its current loop works when connected to a Teletype: </p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNI4PoUrRp6VTMXV5sTj-cbd5KxPR0J4kMurosS_YawM1EPLVcKsq-4MIVitMa48NSS9nPgfYU2eui9t6UcwwHXSjzVwrYUIVmGWC1Ex7jFBgjyKnJ0sY7WpVmCbloaGjL5zeRAwX6XtS4l_lHwH88ihpgZ-awjCfDIcFdgCvBJ4MZ-b3pQydWNg/s1368/kim-1-1.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1176\" data-original-width=\"1368\" height=\"550\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNI4PoUrRp6VTMXV5sTj-cbd5KxPR0J4kMurosS_YawM1EPLVcKsq-4MIVitMa48NSS9nPgfYU2eui9t6UcwwHXSjzVwrYUIVmGWC1Ex7jFBgjyKnJ0sY7WpVmCbloaGjL5zeRAwX6XtS4l_lHwH88ihpgZ-awjCfDIcFdgCvBJ4MZ-b3pQydWNg/w640-h550/kim-1-1.png\" width=\"640\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">When the KIM-1 wants to send data to the Teletype it uses pins S and U of one of its edge connectors. S is permanently connected to +5V via a 150 ohm resistor. When the KIM-1 receives data from the Teletype's keyboard it uses pins R and T. Just like S, R is permanently connected to +5V. The important thing to note is that the KIM-1 is responsible for the current: the Teletype is entirely \"dumb\". This will matter later in this blog post.</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">I happened to have lying around <a href=\"https://www.horter-shop.de/de/rs232-tty-adapter-passiv/151-bausatz-rs232-tty-adapter-passiv-4260404260127.html\">a kit to make an adapter between RS-232 and the Siemens SIMATIC S5 current loop</a>. </div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAeSbQlVy8BJolG0uDvmgGgtdDsoDFLV6Qo0sHrg-iVI8P0stXBdUg_HsRJqAAIToLVMsjMQu0EQeDfhja17tH9se1YtZXs3yccjPKcwmIUILqzB0I9xizoo8U7jLx_JXb8q2uenEPW7Tc_hv3sGrj7G9CRuep8WmkpyU13Beigo4jbMFZxiAjZw/s982/kim-1-2.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"946\" data-original-width=\"982\" height=\"616\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAeSbQlVy8BJolG0uDvmgGgtdDsoDFLV6Qo0sHrg-iVI8P0stXBdUg_HsRJqAAIToLVMsjMQu0EQeDfhja17tH9se1YtZXs3yccjPKcwmIUILqzB0I9xizoo8U7jLx_JXb8q2uenEPW7Tc_hv3sGrj7G9CRuep8WmkpyU13Beigo4jbMFZxiAjZw/w640-h616/kim-1-2.png\" width=\"640\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">A simple kit to build. Since USB to RS-232 adapters are easy to find I'd be able to communicate with the KIM-1 using it. But first check the circuit diagram of this adapter. There's a small problem on the receive side.</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCYmSOPwceRgzMBw50FJPAOYpZdhpJp0Yh3WhN120WAo6qEHLwzn2a5CwFTXAYINa_36dofqGtjI7RXdbVWbcVenGRU4f7f6l-Mhb7lc0DEYEc6aicS7EFNqWhg6ynje8sxQcqZQVyWujO1ARaJUotW1M8gijQh0X27xcgnN3y32U5FNllgFWX7A/s1758/kim-1-3.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"874\" data-original-width=\"1758\" height=\"318\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCYmSOPwceRgzMBw50FJPAOYpZdhpJp0Yh3WhN120WAo6qEHLwzn2a5CwFTXAYINa_36dofqGtjI7RXdbVWbcVenGRU4f7f6l-Mhb7lc0DEYEc6aicS7EFNqWhg6ynje8sxQcqZQVyWujO1ARaJUotW1M8gijQh0X27xcgnN3y32U5FNllgFWX7A/w640-h318/kim-1-3.png\" width=\"640\" /></a></div><br /><div class=\"separator\" style=\"clear: both; text-align: left;\">As is pretty common with current loop applications, optoisolators are used. OK1 handles when the device connected to the RS-232 transmits something. And you can see from the diagram, it expects to be getting 5V, 20mA in on its pin 5 and then out again on pin 4. So, that'll work perfectly for the \"keyboard\" connection to the KIM-1 (pins R and T). </div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">But the receive side is a different story. It's handled by OK2 and it's expecting 5V, 20mA on pin 1, but pin 2 goes to GND. So, there's no \"loop\" back to the device. This won't work with the KIM-1 without a small modification.</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">I built the kit and and tested it against the KIM-1 like this:</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghrUvvLUgSr3RZhod4XiIyxt8viOVH-NQwoLikQMDsZM6jf17czwBXfMYjJKhiB0DeTZMp8ryHVitx-8g1TolmqxAhxfE633YHYpoGBidPl1hcs3eBGgcPeGpE1VULmDIXNxOPGk9D5eiRK7TfxMcWc7uvnXLm3Ht7pP5gBBIq9Ms93bhuvCgyDg/s1280/kim-1-4.jpg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"744\" data-original-width=\"1280\" height=\"372\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghrUvvLUgSr3RZhod4XiIyxt8viOVH-NQwoLikQMDsZM6jf17czwBXfMYjJKhiB0DeTZMp8ryHVitx-8g1TolmqxAhxfE633YHYpoGBidPl1hcs3eBGgcPeGpE1VULmDIXNxOPGk9D5eiRK7TfxMcWc7uvnXLm3Ht7pP5gBBIq9Ms93bhuvCgyDg/w640-h372/kim-1-4.jpg\" width=\"640\" /></a></div><div><br /></div>Looks messy but it validated the little modification I needed to make and that I could talk to the KIM-1. Here it is talking at 300 baud using the RS-232 to USB adapter seen above. <div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQxkZf-cbzjvBVaBvQGWO3XeLjzf6k7kzf0uM0sczMbzcLYzSoZ6sUXsg47ey0zq4VautycgRmuAz1MVwBIbrS01NywuIKJZSoBvvnj7T8kEP8kzpBBPmwndpaBqp7JpibNfBRYRGlHQHh0MShzorcPoQYeN541YcXG3gK__dTB5kvdR6lw3bnUg/s1146/kim-1.gif\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1020\" data-original-width=\"1146\" height=\"570\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQxkZf-cbzjvBVaBvQGWO3XeLjzf6k7kzf0uM0sczMbzcLYzSoZ6sUXsg47ey0zq4VautycgRmuAz1MVwBIbrS01NywuIKJZSoBvvnj7T8kEP8kzpBBPmwndpaBqp7JpibNfBRYRGlHQHh0MShzorcPoQYeN541YcXG3gK__dTB5kvdR6lw3bnUg/w640-h570/kim-1.gif\" width=\"640\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div><div class=\"separator\" style=\"clear: both;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">So, what's the modification? Well, pin 2 of OK2 goes to ground and we don't want it to, we want it to go the KIM-1's pin U. There are two ways to do this. I could have cut the track on the back of the board that goes from pin 2 to ground, and soldered a wire on the back.</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixwnVKqFHl5uFIx6voI_JNpHEdW1WRpV8-zv4w6QydXJ0CTPSLced0JGZgZe8rucLGJG_AqZJzDk2V-7iC1kYzi7o0i-OmKObeNXGq_CjBaSxcbPX0VlK_eGEznspzc6nZ-btpSZdkyL9NZ-6lChzPpcZCz-rEFODbiN5WSQT-jCdVHbTbizarkQ/s540/kim-1-5.png\" style=\"margin-left: 1em; margin-right: 1em; text-align: center;\"><img border=\"0\" data-original-height=\"488\" data-original-width=\"540\" height=\"289\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixwnVKqFHl5uFIx6voI_JNpHEdW1WRpV8-zv4w6QydXJ0CTPSLced0JGZgZe8rucLGJG_AqZJzDk2V-7iC1kYzi7o0i-OmKObeNXGq_CjBaSxcbPX0VlK_eGEznspzc6nZ-btpSZdkyL9NZ-6lChzPpcZCz-rEFODbiN5WSQT-jCdVHbTbizarkQ/s320/kim-1-5.png\" width=\"320\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">But this kit came with all the chips socketed so I took an even simpler route. Bend pin 2 away from the socket and solder directly to it.</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdUEHXkzdm5jFklLlLDNbtbLnPCKx7RELxbJMLj2-0lGW7nFmcOD_qzOp8UReQ7tyMTTbaHtjA6_NlwUd0O4Cr48_2T60ZVRf8CGEpAfcjv8qECa7aFXoOFy5kLvMUBa3ZOE_y8ng7kDFry6PALL4aB2aTxRl9kDjWP9ubNAC_l4cs3rrUBAtEvQ/s3193/kim-1-6.jpg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"2698\" data-original-width=\"3193\" height=\"540\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdUEHXkzdm5jFklLlLDNbtbLnPCKx7RELxbJMLj2-0lGW7nFmcOD_qzOp8UReQ7tyMTTbaHtjA6_NlwUd0O4Cr48_2T60ZVRf8CGEpAfcjv8qECa7aFXoOFy5kLvMUBa3ZOE_y8ng7kDFry6PALL4aB2aTxRl9kDjWP9ubNAC_l4cs3rrUBAtEvQ/w640-h540/kim-1-6.jpg\" width=\"640\" /></a></div><br /><div class=\"separator\" style=\"clear: both; text-align: left;\">And that worked fine. The kit also came with a nice little box and so the final adapter looks neat.</div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfUeBT17s3TjORhTssUtiUGLaW1M_CpBMrWIwnNG737fVgehQnvGZ9-9VoHNNFOeDzNCtUrjQwO82_4VMayPlsyQhOwI23jMH-1rPcHCzkVWi9ZkJe8T1zICJAcAjRnyJaqNyr8ZZj7IRLZn3ivPDXWUQFV5VkuNaKU1H-cSDk07jFKqq6it_PxQ/s1280/kim-1-7.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"960\" data-original-width=\"1280\" height=\"480\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfUeBT17s3TjORhTssUtiUGLaW1M_CpBMrWIwnNG737fVgehQnvGZ9-9VoHNNFOeDzNCtUrjQwO82_4VMayPlsyQhOwI23jMH-1rPcHCzkVWi9ZkJe8T1zICJAcAjRnyJaqNyr8ZZj7IRLZn3ivPDXWUQFV5VkuNaKU1H-cSDk07jFKqq6it_PxQ/w640-h480/kim-1-7.jpeg\" width=\"640\" /></a></div><br /><div class=\"separator\" style=\"clear: both; text-align: left;\">The grey wire goes to the KIM-1, the white wire is a USB-A cable that I'm using to power the adapter and the KIM-1 itself. </div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRNc94lv50bDs6CSJnYk8rEeC9wAiQlf_tIUCAgHw203ey4NJwxBF8MyhroSH1TyB6FPqsk4i4VTQGUbQwYcXBGvlCv5fI6P0qOYMcE5sB2t3VDm-ebZY-iMjZgWndXe2Gs5_bY4cHcwNNUpXKMBr8GXj-C_dkNU7oDPRYYKoqrgdfJQOBb1nDTw/s1280/kim-1-8.jpeg\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"960\" data-original-width=\"1280\" height=\"480\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRNc94lv50bDs6CSJnYk8rEeC9wAiQlf_tIUCAgHw203ey4NJwxBF8MyhroSH1TyB6FPqsk4i4VTQGUbQwYcXBGvlCv5fI6P0qOYMcE5sB2t3VDm-ebZY-iMjZgWndXe2Gs5_bY4cHcwNNUpXKMBr8GXj-C_dkNU7oDPRYYKoqrgdfJQOBb1nDTw/w640-h480/kim-1-8.jpeg\" width=\"640\" /></a></div><br /></div><div>The KIM-1 will happily communicate as 1200 baud with 7 bit ASCII and 2 stop bits. I'm using minicom to communicate with it. The main thing is to set the delete key to send DEL instead of BS since the KIM-1 needs to receive a DEL on start up so that it can measure the Mac's transmission speed.</div><div><br /></div><div>One of the Teletype functions available is to load a program from punched tape. I don't have an actual Teletype but I can emulate the punched tape format and that'll allow me to upload programs easily.</div><div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9IJ_wZJFKEaDD5UhZ_cb3FiMO9IHgOfrMnrKOQjYdMuSvZNwO7cxND1M774qpg639z71zcWxWUPrvc-YFYLWIS5SdfzlZ0nMFZpaUKHE5JANoIwmHLXEa6NDE-oAkgwPyukU3RtHTmdhisdCeYCaD_SgRDAldBPtge1gbSAbM8XLe-hQEccRrqg/s1208/kim-1-9.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1208\" data-original-width=\"1016\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9IJ_wZJFKEaDD5UhZ_cb3FiMO9IHgOfrMnrKOQjYdMuSvZNwO7cxND1M774qpg639z71zcWxWUPrvc-YFYLWIS5SdfzlZ0nMFZpaUKHE5JANoIwmHLXEa6NDE-oAkgwPyukU3RtHTmdhisdCeYCaD_SgRDAldBPtge1gbSAbM8XLe-hQEccRrqg/w538-h640/kim-1-9.png\" width=\"538\" /></a></div><br /><div>The format itself is not complicated.</div><div><br /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWxEHqPySDq6ch5c9XLYO8NOf7B8x-ExUa0UDgFltgwhqYWDBAyNrgpLmn3EWcnBeWPOcQ6TNOcZOz0ia3TM2MFcvx5ol54r9ENRTb76a_S-jd78mbyl1J85011K7a4wTRgYyTDaPfsOEjdAP-Py9ny5sk-oRxHawHil31r6Wba_QiU8QKcw8etg/s1058/kim-1-10.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1058\" data-original-width=\"1016\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWxEHqPySDq6ch5c9XLYO8NOf7B8x-ExUa0UDgFltgwhqYWDBAyNrgpLmn3EWcnBeWPOcQ6TNOcZOz0ia3TM2MFcvx5ol54r9ENRTb76a_S-jd78mbyl1J85011K7a4wTRgYyTDaPfsOEjdAP-Py9ny5sk-oRxHawHil31r6Wba_QiU8QKcw8etg/w614-h640/kim-1-10.png\" width=\"614\" /></a></div>",
"image": {
"url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNI4PoUrRp6VTMXV5sTj-cbd5KxPR0J4kMurosS_YawM1EPLVcKsq-4MIVitMa48NSS9nPgfYU2eui9t6UcwwHXSjzVwrYUIVmGWC1Ex7jFBgjyKnJ0sY7WpVmCbloaGjL5zeRAwX6XtS4l_lHwH88ihpgZ-awjCfDIcFdgCvBJ4MZ-b3pQydWNg/s72-w640-h550-c/kim-1-1.png",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "retro",
"term": "retro",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-8168793316207256718",
"title": "Twenty years of the \"GNU Make Standard Library\"",
"description": null,
"url": "http://blog.jgc.org/2025/02/twenty-years-of-gnu-make-standard.html",
"published": "2025-02-03T19:27:00.055Z",
"updated": "2025-02-05T09:50:10.781Z",
"content": "<p>Twenty years ago, on February 3, 2005, I released v1.0.0 of a project I called \"GNU Make Standard Library\" (GMSL). That <a href=\"https://sourceforge.net/projects/gmsl/files/GNU%20Make%20Standard%20Library/v1.0.0/\">first release</a> can still be found in its original location on SourceForge. I moved the project from SourceForge to <a href=\"https://github.com/jgrahamc/gmsl\">GitHub</a> and newer releases are there. The latest release is <a href=\"https://github.com/jgrahamc/gmsl/releases/tag/v1.2.2\">v1.2.2</a> on March 30, 2024.</p><p>The project has its own homepage at <a href=\"https://gmsl.jgc.org/\">https://gmsl.jgc.org/</a>. The page describes the GMSL as \"a collection of functions implemented using native GNU Make functionality that provide list and string manipulation, integer arithmetic, associative arrays, stacks, and debugging facilities.\"</p><p>GMSL grew out of work that eventually became my book \"<a href=\"https://nostarch.com/gnumake\">The GNU Make Book</a>\". What can it do?</p><p>Well, things like this:</p><p><span style=\"font-family: courier;\">include gmsl<br /></span><span style=\"font-family: courier;\"><br />VAR := Here is a string with some words in it.<br /></span><span style=\"font-family: courier;\">$(info $(VAR))<br /></span><span style=\"font-family: courier;\"><br /># Convert VAR to lowercase<br /></span><span style=\"font-family: courier;\">LC_VAR := $(call lc,$(VAR))<br /></span><span style=\"font-family: courier;\">$(info $(LC_VAR))<br /></span><span style=\"font-family: courier;\"><br /># Get the length of LC_VAR as a string<br /></span><span style=\"font-family: courier;\">$(info $(call strlen,$(LC_VAR)))</span></p><p><span style=\"font-family: courier;\"># See if VAR and LC_VAR are the same string<br /></span><span style=\"font-family: courier;\">$(info $(if $(call seq,$(VAR),$(LC_VAR)),Same,Different))</span></p><p><span style=\"font-family: courier;\"># Treat LC_VAR as a list and get the last element<br /></span><span style=\"font-family: courier;\">$(info $(call last,$(LC_VAR)))</span></p><p><span style=\"font-family: courier;\"># Get the number of list elements in LC_VAR<br /></span><span style=\"font-family: courier;\">$(info $(call length,$(LC_VAR)))</span></p><p><span style=\"font-family: courier;\"># Apply the strlen function to each element of LC_VAR<br /></span><span style=\"font-family: courier;\">$(info $(call map,strlen,$(LC_VAR)))</span></p><p><span style=\"font-family: courier;\"># Deduplicate the list of lenghts of elements of LC_VAR<br /></span><span style=\"font-family: courier;\">$(info $(call uniq,$(call map,strlen,$(LC_VAR))))</span></p><p><span style=\"font-family: courier;\"># Split LC_VAR on the letter e and replace with 3<br /></span><span style=\"font-family: courier;\">$(info $(call merge,3,$(call split,e,$(LC_VAR))))</span></p><p><span style=\"font-family: courier;\"># Create an associative array mapping the lengths of words<br /></span><span style=\"font-family: courier;\"># in LC_VAR to a count for each length<br /></span><span style=\"font-family: courier;\">increment_aa = $(call set,LC_VAR_AA,$1,$(call </span><span style=\"font-family: courier;\">inc,$(call </span><span style=\"font-family: courier;\">get,LC_VAR_AA,$1)))<br /></span><span style=\"font-family: courier;\">$(call map,increment_aa,$(call map,strlen,$(LC_VAR)))<br /></span><span style=\"font-family: courier;\">dump_key = $(info $1: $(call get,LC_VAR_AA,$1))<br /></span><span style=\"font-family: courier;\">$(call map,dump_key,$(call keys,LC_VAR_AA))</span></p><p>And a whole lot more. The entire GMSL is written using native GNU Make functionality and pull requests are welcome!</p><p>Update 2025-02-05: I decided GMSL was missing a <a href=\"https://github.com/jgrahamc/gmsl/blob/145bda7295dee873b2c2842f404365857ea24764/__gmsl#L239\">fold</a> function so I added it. So, latest release is today, <a href=\"https://github.com/jgrahamc/gmsl/releases/tag/v1.2.3\">v1.2.3</a>. </p>",
"image": null,
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "pseudo-randomness",
"term": "pseudo-randomness",
"url": null
},
{
"label": "hardware",
"term": "hardware",
"url": null
},
{
"label": "babbage",
"term": "babbage",
"url": null
},
{
"label": "gaga",
"term": "gaga",
"url": null
},
{
"label": "anti-spam",
"term": "anti-spam",
"url": null
},
{
"label": "gnu make",
"term": "gnu make",
"url": null
},
{
"label": "retro",
"term": "retro",
"url": null
},
{
"label": "security",
"term": "security",
"url": null
},
{
"label": "codes and ciphers",
"term": "codes and ciphers",
"url": null
},
{
"label": "the geek atlas",
"term": "the geek atlas",
"url": null
},
{
"label": "rants and raves",
"term": "rants and raves",
"url": null
},
{
"label": "alan turing",
"term": "alan turing",
"url": null
},
{
"label": "hits",
"term": "hits",
"url": null
},
{
"label": "mathematics",
"term": "mathematics",
"url": null
},
{
"label": "calculators",
"term": "calculators",
"url": null
},
{
"label": "climate change",
"term": "climate change",
"url": null
},
{
"label": "clocks",
"term": "clocks",
"url": null
},
{
"label": "minitel",
"term": "minitel",
"url": null
},
{
"label": "perl",
"term": "perl",
"url": null
},
{
"label": "google go",
"term": "google go",
"url": null
},
{
"label": "toys",
"term": "toys",
"url": null
},
{
"label": "behind the screens",
"term": "behind the screens",
"url": null
},
{
"label": "machine learning",
"term": "machine learning",
"url": null
},
{
"label": "babygaga",
"term": "babygaga",
"url": null
},
{
"label": "games",
"term": "games",
"url": null
},
{
"label": "arc",
"term": "arc",
"url": null
},
{
"label": "my services",
"term": "my services",
"url": null
},
{
"label": "popfile",
"term": "popfile",
"url": null
},
{
"label": "radio",
"term": "radio",
"url": null
},
{
"label": "cansole",
"term": "cansole",
"url": null
},
{
"label": "facebook",
"term": "facebook",
"url": null
},
{
"label": "privacy",
"term": "privacy",
"url": null
},
{
"label": "knx",
"term": "knx",
"url": null
},
{
"label": "well... actually",
"term": "well... actually",
"url": null
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-8649792458628677830",
"title": "The complete text of \"All Watched Over by Machines of Loving Grace\"",
"description": null,
"url": "http://blog.jgc.org/2024/12/the-complete-text-of-all-watched-over.html",
"published": "2024-12-26T15:26:00.003Z",
"updated": "2024-12-26T15:34:02.508Z",
"content": "<p>Richard Brautigan's poem \"<a href=\"https://en.wikipedia.org/wiki/All_Watched_Over_by_Machines_of_Loving_Grace\">All Watched Over by Machines of Loving Grace</a>\" is somewhat well known in tech. circles but I couldn't find a complete PDF of the <a href=\"https://en.wikipedia.org/wiki/All_Watched_Over_by_Machines_of_Loving_Grace_(poetry_collection)\">original 1967 publication of it (and other poems)</a> online. </p><p>The copyright notice in Brautigan's collection reads:</p><p><span style=\"font-family: courier;\"> © Copyright 1967 by Richard Brautigan </span></p><p><span style=\"font-family: courier;\"><span> </span>Permission is granted to reprint<br /><span> </span>any of these poems in magazines,<br /><span> </span>books and newspapers if they are<br /><span> </span>given away free. </span></p><p>I am interpreting \"print\" as including the availability of a free PDF and making a scan of the complete book available here. </p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://jgc.org/awobmolg-1967.pdf\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1676\" data-original-width=\"1392\" height=\"640\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGhScUr9y4lWyAZs6B-j7QtJjfqFmt-VrOpfII9BIJYzoGDGCtdUYR0pffEwSIWwDUrIBaj57cz5Uluj8CG1hzA8Oi6Vyvm9Bc3wcDkAxucLJQJGrQHOOYLfwIE0zc-JsnuKfAkwrxQPe1N1RdLV7uOhfQD84r6oCgMuq39ZxVXOTT3sNgxGv9CA/w532-h640/Screenshot%202024-12-26%20at%2015.24.00.png\" width=\"532\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: left;\"><br /></div>",
"image": {
"url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGhScUr9y4lWyAZs6B-j7QtJjfqFmt-VrOpfII9BIJYzoGDGCtdUYR0pffEwSIWwDUrIBaj57cz5Uluj8CG1hzA8Oi6Vyvm9Bc3wcDkAxucLJQJGrQHOOYLfwIE0zc-JsnuKfAkwrxQPe1N1RdLV7uOhfQD84r6oCgMuq39ZxVXOTT3sNgxGv9CA/s72-w532-h640-c/Screenshot%202024-12-26%20at%2015.24.00.png",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "pseudo-randomness",
"term": "pseudo-randomness",
"url": null
},
{
"label": "hardware",
"term": "hardware",
"url": null
},
{
"label": "babbage",
"term": "babbage",
"url": null
},
{
"label": "gaga",
"term": "gaga",
"url": null
},
{
"label": "anti-spam",
"term": "anti-spam",
"url": null
},
{
"label": "gnu make",
"term": "gnu make",
"url": null
},
{
"label": "retro",
"term": "retro",
"url": null
},
{
"label": "security",
"term": "security",
"url": null
},
{
"label": "codes and ciphers",
"term": "codes and ciphers",
"url": null
},
{
"label": "the geek atlas",
"term": "the geek atlas",
"url": null
},
{
"label": "rants and raves",
"term": "rants and raves",
"url": null
},
{
"label": "alan turing",
"term": "alan turing",
"url": null
},
{
"label": "hits",
"term": "hits",
"url": null
},
{
"label": "mathematics",
"term": "mathematics",
"url": null
},
{
"label": "calculators",
"term": "calculators",
"url": null
},
{
"label": "climate change",
"term": "climate change",
"url": null
},
{
"label": "clocks",
"term": "clocks",
"url": null
},
{
"label": "minitel",
"term": "minitel",
"url": null
},
{
"label": "perl",
"term": "perl",
"url": null
},
{
"label": "google go",
"term": "google go",
"url": null
},
{
"label": "toys",
"term": "toys",
"url": null
},
{
"label": "behind the screens",
"term": "behind the screens",
"url": null
},
{
"label": "machine learning",
"term": "machine learning",
"url": null
},
{
"label": "babygaga",
"term": "babygaga",
"url": null
},
{
"label": "games",
"term": "games",
"url": null
},
{
"label": "arc",
"term": "arc",
"url": null
},
{
"label": "my services",
"term": "my services",
"url": null
},
{
"label": "popfile",
"term": "popfile",
"url": null
},
{
"label": "radio",
"term": "radio",
"url": null
},
{
"label": "cansole",
"term": "cansole",
"url": null
},
{
"label": "facebook",
"term": "facebook",
"url": null
},
{
"label": "privacy",
"term": "privacy",
"url": null
},
{
"label": "knx",
"term": "knx",
"url": null
},
{
"label": "well... actually",
"term": "well... actually",
"url": null
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-8901769136152952921",
"title": "badkeming: a site for kerning so bad it's keming",
"description": null,
"url": "http://blog.jgc.org/2024/12/badkeming-site-for-kerning-so-bad-its.html",
"published": "2024-12-15T16:15:00.003Z",
"updated": "2024-12-15T16:16:23.395Z",
"content": "<p>I made another silly Tumblr (to go along with <a href=\"https://moviecode.tumblr.com/\">Movie Code</a> and <a href=\"https://lowbackgroundsteel.ai/\">Low Background Steel</a>). This times it's a Tumblr for all those font disasters and other typographical amusements. Welcome to the wonderful world of <a href=\"https://badkeming.com\">badkeming.com</a>:</p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://badkeming.com\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"1428\" data-original-width=\"2174\" height=\"420\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOnAi31wLwP1beQLc-ylj8D2VpWVsJQkuyVcUMViFFpppM7BmbNgrB36PQWpxETwYpIP2PjkoJ-DnsDabdn5UOJoNvy-vh6oPlh2cISzOiqj-vmc-zfHKzSasC8ZamjWl7vwXU5ee2V7Jfj5wuQEBgfyOniA_1_3Z_RuTDFPv3zmTQVugR1HjOZA/w640-h420/badkeming-1.png\" width=\"640\" /></a></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><br /></div><div class=\"separator\" style=\"clear: both; text-align: left;\">Submissions gladly accepted.</div>",
"image": {
"url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOnAi31wLwP1beQLc-ylj8D2VpWVsJQkuyVcUMViFFpppM7BmbNgrB36PQWpxETwYpIP2PjkoJ-DnsDabdn5UOJoNvy-vh6oPlh2cISzOiqj-vmc-zfHKzSasC8ZamjWl7vwXU5ee2V7Jfj5wuQEBgfyOniA_1_3Z_RuTDFPv3zmTQVugR1HjOZA/s72-w640-h420-c/badkeming-1.png",
"title": null
},
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "pseudo-randomness",
"term": "pseudo-randomness",
"url": "http://www.blogger.com/atom/ns#"
}
]
},
{
"id": "tag:blogger.com,1999:blog-19303585.post-4119179139891431895",
"title": "\"All your base are belong to us\" introduction to my 2004 MIT Spam Conference talk",
"description": null,
"url": "http://blog.jgc.org/2024/12/all-you-base-are-belong-to-us.html",
"published": "2024-12-08T17:24:00.004Z",
"updated": "2024-12-08T17:28:43.687Z",
"content": "<p>As I've mentioned before <a href=\"https://blog.jgc.org/2023/07/how-to-beat-adaptivebayesian-spam.html\">my talk at the 2004 MIT Spam Conference</a> was about using one machine learning system to beat another. In that case a spammer using machine learning to beat a machine learning spam filter.</p><p>The talk started with a short video playing off the <a href=\"https://en.wikipedia.org/wiki/All_your_base_are_belong_to_us\">All your base are belong to us</a> meme. I very carefully edited the images to change the text to be about spam and incorporate Paul Graham (who was the instigator of the MIT Spam Conference and an <a href=\"https://paulgraham.com/spam.html\">early machine learning spam filter pioneer</a>). </p><p>I thought I'd <a href=\"https://blog.jgc.org/2023/05/bringing-popfile-web-site-back-from-dead.html\">lost the audio of that introduction</a> and randomly came across it today. So here is the restored introduction to the talk made on a Mac in 2004 (I still haven't found the audio of the actual talk).</p>\n\n<div style=\"padding-top: 56.25%; position: relative;\">\n <iframe allow=\"accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;\" allowfullscreen=\"true\" loading=\"lazy\" src=\"https://customer-rww76yind8iym5aw.cloudflarestream.com/41a0f39e1f9d7fcde6dd32bacf628437/iframe?poster=https%3A%2F%2Fcustomer-rww76yind8iym5aw.cloudflarestream.com%2F41a0f39e1f9d7fcde6dd32bacf628437%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D%26height%3D600\" style=\"border: none; height: 100%; left: 0; position: absolute; top: 0; width: 100%;\"></iframe></div>",
"image": null,
"media": [],
"authors": [
{
"name": "Unknown",
"email": "[email protected]",
"url": null
}
],
"categories": [
{
"label": "anti-spam",
"term": "anti-spam",
"url": "http://www.blogger.com/atom/ns#"
}
]
}
]
}