Marc's Public Blog


vvv Click on the categories below to see other topic specific pages vvv




More pages: November 2025 October 2025 September 2025 August 2025 July 2025 June 2025 May 2025 April 2025 March 2025 February 2025 January 2025 December 2024 November 2024 October 2024 September 2024 August 2024 July 2024 June 2024 May 2024 April 2024 March 2024 February 2024 January 2024 December 2023 November 2023 October 2023 September 2023 August 2023 July 2023 June 2023 May 2023 April 2023 March 2023 February 2023 January 2023 December 2022 November 2022 October 2022 September 2022 August 2022 July 2022 June 2022 May 2022 April 2022 March 2022 February 2022 January 2022 December 2021 November 2021 October 2021 September 2021 August 2021 July 2021 June 2021 May 2021 April 2021 March 2021 February 2021 January 2021 December 2020 November 2020 October 2020 September 2020 August 2020 July 2020 June 2020 May 2020 April 2020 March 2020 February 2020 January 2020 December 2019 November 2019 October 2019 September 2019 August 2019 July 2019 June 2019 May 2019 April 2019 March 2019 February 2019 January 2019 December 2018 November 2018 October 2018 September 2018 August 2018 July 2018 June 2018 May 2018 April 2018 March 2018 February 2018 January 2018 December 2017 November 2017 October 2017 September 2017 August 2017 July 2017 June 2017 May 2017 April 2017 March 2017 February 2017 January 2017 December 2016 November 2016 October 2016 September 2016 August 2016 July 2016 June 2016 May 2016 April 2016 March 2016 February 2016 January 2016 December 2015 November 2015 October 2015 September 2015 August 2015 July 2015 June 2015 May 2015 April 2015 March 2015 February 2015 January 2015 December 2014 November 2014 October 2014 September 2014 August 2014 July 2014 June 2014 May 2014 April 2014 March 2014 February 2014 January 2014 December 2013 November 2013 October 2013 September 2013 August 2013 July 2013 June 2013 May 2013 April 2013 March 2013 February 2013 January 2013 December 2012 November 2012 October 2012 September 2012 August 2012 July 2012 June 2012 May 2012 April 2012 March 2012 February 2012 January 2012 December 2011 November 2011 October 2011 September 2011 August 2011 July 2011 June 2011 May 2011 April 2011 March 2011 February 2011 January 2011 December 2010 November 2010 October 2010 September 2010 August 2010 July 2010 June 2010 May 2010 April 2010 March 2010 February 2010 January 2010 December 2009 November 2009 October 2009 September 2009 August 2009 July 2009 June 2009 May 2009 April 2009 March 2009 February 2009 January 2009 December 2008 November 2008 October 2008 September 2008 August 2008 July 2008 June 2008 May 2008 April 2008 March 2008 February 2008 January 2008 December 2007 November 2007 October 2007 September 2007 August 2007 July 2007 June 2007 May 2007 April 2007 March 2007 February 2007 January 2007 December 2006 November 2006 October 2006 September 2006 August 2006 July 2006 June 2006 May 2006 April 2006 March 2006 February 2006 January 2006 December 2005 November 2005 October 2005 September 2005 August 2005 July 2005 June 2005 May 2005 April 2005 March 2005 February 2005 January 2005 December 2004 November 2004 October 2004 September 2004 August 2004 July 2004 June 2004 May 2004 April 2004 March 2004 February 2004 January 2004 October 2003 August 2003 July 2003 May 2003 April 2003 March 2003 January 2003 November 2002 October 2002 July 2002 May 2002 April 2002 March 2002 February 2002 November 2001 October 2001 September 2001 August 2001 July 2001 June 2001 May 2001 April 2001 March 2001 February 2001 January 2001 December 2000 November 2000 October 2000 September 2000 August 2000 July 2000 June 2000 April 1999 March 1999 September 1997 August 1997 July 1996 September 1993 July 1991 December 1988 December 1985 January 1980





π 2025-11-29 01:01 in Computers, Sciencemuseums
I randomly happened to be a the CHM to drop off some donations, and noticed a room I didn't remember and found out they now had a fully working IBM 1402 (actually they had two).


















Video demo:

π 2025-11-11 01:01 in Flying, Nflying
This post is not glamorous as the 10 year mark once, mostly because I did many of the cool flights in the first 10 years, and also have many other hobbies (which in the last 10 years included a lot of RC flights, including cool long range FPV flights). Yes, I used the opportunity to renew my BFR and flight medical (basicmed), and do this post:



got some night training at the same time, did ok on my night landing
got some night training at the same time, did ok on my night landing

here is my blog on the first 10 years (clickme)

Here are all my bestof pictures from the last 20 years: https://photos.app.goo.gl/8EZeGWW6KurJiCAE6

Anyway, here are the 20 year stats:

  • 780H of (150H in the last 10 years)
  • 1130 landings (about 130 in the last 10 years)
  • So yeah, it's really not a lot, but I made the flights count. I also should note that I stopped doing lots of training flights just because, or staying current just to stay current, or getting checked out in more planes that I would reasonably not be able to fly. At this point I pretty much only fly C182, or a 172 when I have to. For the distances I fly, staying current in SR22, the higher prices and lesser availability aren't really worth it (it's the how much time are you saving in flight vs the higher time you spent to be able to save that time).

    Highlights for the second 10 years:

  • the biggest highlight was a 22 day flying safari through Eastern Australia (clickme)
  • each time I flew myself to burning man was super cool, the perfect place to take advantage of personal flying.
  • And again the most practical use of my license has been to fly to Willows airport where I've been racing my car. Turns out I've now flown there 42 times so far.
  • Only one unexpected experience in these last 10 years:

  • Partial engine failure coming back from Burning man in 2022, undetermined, but poor maintenance and engine had to be changed after my emergency landing in LVK. I wasn't blamed for anything, old plane and no working engine intruments.
  • So just like I said 10 years ago, I'm going to continue to fly when it makes sense, but it's not my main hobby and I don't see the need to fly myself with weather restrictions if I can fly commercial to the same place (LA area) for a 5th or 10th of the price. But it's nice to know that if there is somewhere unusual to go or the zombie apocalypse happen and all commercial planes are taken down, I have options left :)

    And as parting words, some of my bestof bestof pictures:

    night flight back from Palm Springs to Palo Alto
    night flight back from Palm Springs to Palo Alto




    Vintage pictures:



    the horse racetrack by 101 that is now gone
    the horse racetrack by 101 that is now gone

    Moffett Hangar One
    Moffett Hangar One

    Google new campus
    Google new campus



    and another new campus on the Moffett side
    and another new campus on the Moffett side

    Apple Spaceship Rainbow
    Apple Spaceship Rainbow

    Busy SFO
    Busy SFO



    Typical SF day :)
    Typical SF day :)

    track day at buttonwillow
    track day at buttonwillow

    some dot.com had a small self driving car test track just in front of KPAO
    some dot.com had a small self driving car test track just in front of KPAO

    Plane graveyards:








    Mountain flying to/from Burning Man:

    Squawpine aka Palisades
    Squawpine aka Palisades

    Back side of Flatstar (the less flat side)
    Back side of Flatstar (the less flat side)

    Welcome home :)
    Welcome home :)


    5302N that took me there multiple times until an engine failure
    5302N that took me there multiple times until an engine failure


    Mountain flying to/from Mammoth:




    A very cool flying trip to Madras for the total Eclipse


    got to see Lassen on the way
    got to see Lassen on the way

    Edwards AFB:




    Flight from Duxford plane museum to Cambridge:




    Hawaii Big Island:







    Flight to Oceano and Hearst Castle








    wildflowers
    wildflowers

    Here is to many more years:

    so long
    so long

    See more images for I've been a Pilot for 20 years
    π 2025-11-07 01:01 in Computers, Linux, Public
    My 2 main computers have been called magic and moremagic since the late 90's. Most people do not know wy, so here is the story I read back in the 90's, reposted from http://www.catb.org/jargon/html/magic-story.html

    A Story About ‘Magic'

    Some years ago, I (GLS) was snooping around in the cabinets that housed the MIT AI Lab's PDP-10, and noticed a little switch glued to the frame of one cabinet. It was obviously a homebrew job, added by one of the lab's hardware hackers (no one knows who).

    You don't touch an unknown switch on a computer without knowing what it does, because you might crash the computer. The switch was labeled in a most unhelpful way. It had two positions, and scrawled in pencil on the metal switch body were the words ‘magic' and ‘more magic'. The switch was in the ‘more magic' position.

    I called another hacker over to look at it. He had never seen the switch before either. Closer examination revealed that the switch had only one wire running to it! The other end of the wire did disappear into the maze of wires inside the computer, but it's a basic fact of electricity that a switch can't do anything unless there are two wires connected to it. This switch had a wire connected on one side and no wire on its other side.

    It was clear that this switch was someone's idea of a silly joke. Convinced by our reasoning that the switch was inoperative, we flipped it. The computer instantly crashed.

    Imagine our utter astonishment. We wrote it off as coincidence, but nevertheless restored the switch to the ‘more magic’ position before reviving the computer.

    A year later, I told this story to yet another hacker, David Moon as I recall. He clearly doubted my sanity, or suspected me of a supernatural belief in the power of this switch, or perhaps thought I was fooling him with a bogus saga. To prove it to him, I showed him the very switch, still glued to the cabinet frame with only one wire connected to it, still in the ‘more magic’ position. We scrutinized the switch and its lone connection, and found that the other end of the wire, though connected to the computer wiring, was connected to a ground pin. That clearly made the switch doubly useless: not only was it electrically nonoperative, but it was connected to a place that couldn't affect anything anyway. So we flipped the switch.

    The computer promptly crashed.

    This time we ran for Richard Greenblatt, a long-time MIT hacker, who was close at hand. He had never noticed the switch before, either. He inspected it, concluded it was useless, got some diagonal cutters and diked it out. We then revived the computer and it has run fine ever since.

    We still don't know how the switch crashed the machine. There is a theory that some circuit near the ground pin was marginal, and flipping the switch changed the electrical capacitance enough to upset the circuit as millionth-of-a-second pulses went through it. But we'll never know for sure; all we can really say is that the switch was magic.

    I still have that switch in my basement. Maybe I'm silly, but I usually keep it set on ‘more magic’.

    1994: Another explanation of this story has since been offered. Note that the switch body was metal. Suppose that the non-connected side of the switch was connected to the switch body (usually the body is connected to a separate earth lug, but there are exceptions). The body is connected to the computer case, which is, presumably, grounded. Now the circuit ground within the machine isn't necessarily at the same potential as the case ground, so flipping the switch connected the circuit ground to the case ground, causing a voltage drop/jump which reset the machine. This was probably discovered by someone who found out the hard way that there was a potential difference between the two, and who then wired in the switch as a joke.

    π 2025-10-27 01:01 in Computers, Linux
    This is part #2 of
  • Finishing Upgrade of Year 2000 Linux System From i386 to amd64 to arm64 for Raspberry Pi5 with mailman 2.1.7 for Python 2 (the last 5% that took 70% of the time)
  • as an upgrade for
  • Magic v5: From Dell Poweredge 2950 to Raspberry Pi 5 (skipping Dell DSS1510)
  • After upgrading my main server from amd64 to arm64 (rPi), I was forced to re-install all of linux, first time in 25+ years for that server, which included upgrading every single linux package I had t o Debian/Trixie (13). Those upgrades are always "interesting" when you have a lot of history and state, but turns out it went pretty well, except for exim4.

    As much as I'm thankful for exim4 and its developers, and all the work they do, I respecfully think the way they implemented tainting on $local_part, the name of the recipient, was poor and with no regard to the cost of countless admins whose configs got broken. Namely:

  • Debian literally had to write allow_insecure_tainted to avoid breaking their users overnight. They knew how bad the upgrade and breakage were going to be (sadly it was removed later and exim4 didn't use the hint to lessen the pain of upgrades)
  • Exim never provided a clear guide on the most common ways to fix this, including clear fixes for common configurations, using mailman with exim being one of them. Exim has an excellent documentation that is very extensive, but takes days to read and understand (it was over a week my first time 25 years ago). Expecting users to dig back into such a complex system many years later and figure out very non trivial config steps, is not fair in my book.
  • why is there no detailled message in exim panic_log to tell the admin what happened and what to do, along with a bounce message saying the answer is in local exim logs?
  • add a untaint() with fixed safe regex that will work for most everyone
  • the local_part_data is deep black magic and not a reasonable sole solution (it's empty and unusable by default). There should be a local_part_safe that is automatically populated via a safe regex
  • the debian answer of "turn off tainting" should honestly be a real option. Forcing admins to be broken if they have certified they are safe, or in an environment where it's really fine, is NOT an appropriate answer and honestly unfair to admins who deal with lots of things and, cannot be experts on deep internals of dozens or hundreds of daemons. Yes, that means allowing an admin who may already have been running an unsafe setup for 20 years, to potentially continue to do so if they deem it's actually ok/safe in in their setup. The admin must be trusted and not treated like a clueless person that must be blocked from running the software (breaking delivery to mailman is blocking me from using exim altogether).
  • For people who disagree with that last point, please understand that it is still there no matter what. If admins cannot untaint a safe config, they will downgrade exim, and it looks like I did exactly that in the past. This is literally the worst case scenario users are forced into if they can't figure out a very non trivial solution with very few clues
  • Exim posts:

  • https://lists.exim.org/lurker/message/20251027.164803.8ab41844.en.html
  • https://lists.exim.org/lurker/message/20251027.162524.1f7d6cf1.en.html
  • https://lists.exim.org/lurker/message/20251027.181509.83258145.en.html
  • So here is what I figured out in the end, after way too many hours (probably more than 10h at this point, which is totally not cool, uprades should not cause downtimes of 10h plus that amount of lost admin time in debugging, research, and fixing): Exim seems to have totally over-reacted to the local_part untrusted data problem, given literally no way to the admin to clean up the variable on their own with a safe regex, maybe provided by exim itself, and seems to force the admin to compare local_part against trusted data on the server only, or it will simply remain tainted and unusable. This is way over the top, especially when you can run a command in pipe without suffering from shell quoting issues.

    The solution I found after help from others, is:

    mm21_director:
      debug_print = "R: mm21_director for $local_part@$domain"
      driver = accept
      # black magic to populate local_part_data, the untainted version of local_part
      local_parts = dsearch,filter=dir;MAILMAN_HOME/lists
      require_files = MAILMAN_HOME/lists/${lc::$local_part_data}/config.pck
      local_part_suffix = "-bounces:-bounces+*:-confirm+*:-join:-leave:-owner:-request:-admin"
      transport = mm21_transport
    .endif
    

    mm21_transport: debug_print = "T: mm21_transport for $local_part@$domain" driver = pipe # In case you wonder, substr_2 removes the leading '-' # and the regex removes optional +foo=hostname that can be after -bounce # (if you use VERP) -- Marc command = MAILMAN_WRAP "${if def:local_part_suffix{${substr_2:{${sg{${lc:$local_part_suffix}}{\\\\\+.*}{}}}}{post}}" ${lc:$local_part_data} current_directory = MAILMAN_HOME home_directory = MAILMAN_HOME user = MAILMAN_UID group = MAILMAN_GID

    What I had to fix is add "local_parts = dsearch,filter=dir;MAILMAN_HOME/lists" which was 100% required for local_part_data to be populated. Without that, local_part_data is and remains NULL.
    It's disappointing how non trivial and over complicated this is, and most importantly how there was no "MUST READ THIS TAINTED UPGRADE" document with proper detailled info around this in one place (not scattered around a very big manual), along with the most common solutions to the very extreme new tainted restrictions.

    Useful links I saved along the way:

  • https://postmaster.google.com/u/5/dashboards#do=merlins.org&st=inboundDeliveryErrorRate&dr=7
  • https://mxtoolbox.com/SuperTool.aspx?action=dkim%3amerlins.org%3a20251023&run=toolpage
  • https://www.exim.org/exim-html-current/doc/html/spec_html/ch-dkim_spf_srs_and_dmarc.html
  • π 2025-10-26 01:01 in Computers, Linux
    Part #2 was unfortunately much more painful in an unnecessary way due to a poorly made forced API change in exim4

    It's been a while since I've been in XKCD 349 land :) Actually it's a good thing because honestly, it's really not fun and I enjoy other hobbies in my life, too :)


    The power of linux is I never really had to re-install my linux system I built in 2000 or so because Debian is just that good. I did do an upgrade from i386 to amd64, but that was possible thanks to biarch in debian and a fancy and impressive in place binary upgrade from ia32/i386 to amd64.

    Now, because of this little problem where my amd64 capable server from 2019 was taking way too much power (400W or so), I decided to replace it with an rPi5 which is almost 3 times faster for 20 times less power.


    Despite the different binary arch, migrating was not a huge deal, although I still had ancient stuff running python2 that took a while to upgrade, but I figured it was time to get rid of python2 which has been gone from debian for a while (I went to trixie, v13, and it was removed after bulleye, 3 versions ago).
    I was almost done with my upgrade and everything being back up, and then came the subject of mailman. Oh, no, mailman!
    I used to be a mailman expert in 1999-2000 (yes, really, haha), knew the code well, but it's been 25 years and I've kept using it to run a few lists, but otherwise haven't touched in 25 years.

    Of course, by now there is mailman3 that uses python3, but installing that on debian installed dozens of python packages, a new database system and god knows what I just didn't want or didn't need. Worse, I remembered that I have a fancy exim4 config that detects the mailman .pck files and auto provisions lists and aliases. Also, I changed the web interface a bit.

    As much as its is yucky, I'm already 3 days into this full server upgrade and not wanting to spend a day or more to learn this new mailman3 and migrate to it, simply because it's not worth my time and I'm just happy to keep my few lists running as is.

    So here is what I had to do:

    Installing python2 was not too hard, I just had to bring back an old installation for bullseye:
    

    magic:/usr/bin# cat /etc/apt/sources.list.d/debian_bullseye_python2.sources Types: deb URIs: http://deb.debian.org/debian
    Suites: bullseye Components: main contrib non-free non-free-firmware Signed-By: /usr/share/keyrings/debian-archive-keyring.pgp

    apt-get install python2.7-minimal magic:/usr/bin# ln -s python2.7 python2

    Amazingly the packages were built well enough that they installed without fuss on trixie, including some dependencies:

    moremagic:/etc/apt# apt-get install python2.7-minimal
    apt-get defauts to bookworm/stable but system upgraded to trixie/testing 2024/10. May need to use sid if packages will not install
    Reading package lists... Done
    Building dependency tree... Done
    Reading state information... Done
    The following additional packages will be installed:
      libpython2.7-minimal
    Suggested packages:
      binfmt-support
    Recommended packages:
      libpython2.7-stdlib python2.7
    The following NEW packages will be installed:
      libpython2.7-minimal python2.7-minimal
    0 upgraded, 2 newly installed, 0 to remove and 45 not upgraded.
    Need to get 1,593 kB of archives.
    After this operation, 6,393 kB of additional disk space will be used.
    Do you want to continue? [Y/n] y
    moremagic:/etc/apt#

    Now, mailman2 is python, so we're good, right? Well, not quite. There were some cgi binaries that hardcoded stuff for safety, and were obviously i386 on my system (~mailman/mail/mailman and ~mailman/cgi-bin/*).
    I did have server backups going back to 2002 (not bad, haha, and yes they really still work), so I found the source I used back then, but then I realized that trying to rebuild the whole thing might take a while since it's all ancient configure, ancient python, and so forth. Just yesterday I had to rebuild ancient C, and its bundled configure crashed because its "is gcc there" test was not compliant anymore and told me my gcc could not build binaries when in fact the configure gcc test was so old that it was broken, and I just removed it (the rest actually built).

    configure:1004: gcc -o conftest    conftest.c  1>&5
    configure:1001:1: error: return type defaults to 'int' [-Wimplicit-int]
     1001 | main(){return(0);}
          | ^~~~
    configure: failed program was:

    After the source failing to build right away due to missing ancient python stuff, I asked myself "eh, can I maybe just get those i386 binaries work on arm64 as is?". And the answer is, yes:

    magic:/var/local/mailman/mail# ./mailman 
    bash: ./mailman: cannot execute binary file: Exec format error
    

    # install binary emulator, not fast but more than good enough for my needs: magic:/lib# apt-get install qemu-user-static The following additional packages will be installed: qemu-user qemu-user-binfmt The following NEW packages will be installed: qemu-user qemu-user-binfmt qemu-user-static Do you want to continue? [Y/n] y Get:1 http://deb.debian.org/debian trixie/main arm64 qemu-user arm64 1:10.0.3+ds-0+deb13u1 [64.1 MB] Get:2 http://deb.debian.org/debian trixie/main arm64 qemu-user-binfmt arm64 1:10.0.3+ds-0+deb13u1 [2,068 B] Get:3 http://deb.debian.org/debian trixie/main arm64 qemu-user-static arm64 1:10.0.3+ds-0+deb13u1 [55.1 kB]

    magic:/var/local/mailman/mail# ./mailman i386-binfmt-P: Could not open '/lib/ld-linux.so.2': No such file or directory

    # copied over libraries from an old system: magic:/lib/i686# l -rwxr-xr-x 1 root root 171404 Oct 26 16:38 ld-linux.so.2* -rwxr-xr-x 1 root root 1993968 Oct 26 16:39 libc.so.6*

    magic:/lib# ln -s i686/ld-linux.so.2 . magic:/var/local/mailman/mail# ./mailman Usage: ./mailman program [args...]

    Success!

    Well, now when I connect, I see:

    The Mailman CGI wrapper encountered a fatal error. This entry is being stored in your syslog:
    Failure to find group name for GID 33.  Mailman
    expected the CGI wrapper to be executed as group
    "www-data", but the system's web server executed the
    wrapper as GID 33 for which the name could not be
    found.  Try adding GID 33 to your system as "www-data",
    or tweak your web server to run the wrapper as group
    "www-data".

    Now, this is actually already good: it means the CGI (i386 code) is running on arm64, but indeed there is a library issue because /etc/groups does have "www-data:x:33:". Strace showed it was looking for libnss_files.so.2, which makes sense.

    Copied over the lib magic:/lib# l /lib/i686/libnss_files.so.2

    -rw-r--r-- 1 root root 50812 Oct 26 17:45 /lib/i686/libnss_files.so.2 magic:/var/local/mailman/cgi-bin# su www-data magic:/var/local/mailman/cgi-bin$ ./listinfo File "/var/local/mailman/scripts/driver", line 107 print 'Status: 405 Method not allowed' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?

    Progress! (now the wrapper is running the wrong python). The easy fix is of course to make /usr/bin/python point to python2, but I was trying to resist doing so. however at this point I decided to stop being a purist, and honestly this python2/python3 stuff has cost me so much time in the past already that I'm fine with python being python2. All python3 code calls /usr/bin/python3 anyway.

    By now, things are looking better and https://lists.merlins.org/lists/listinfo is returning

    Bug in Mailman version 2.1.14
    We're sorry, we hit a bug!
    Please inform the webmaster for this site of this problem. Printing of traceback and other system information has been explicitly inhibited, but the webmaster can find this information in the Mailman error logs.
    [html:/pre+
    

    From there, I had to debug some non trivial permission issues which I think were due to qemu not respecting the setgid bit when running i386 code.

    magic:~$ /var/local/mailman/mail/mailman post testlist
    Group mismatch error.  Mailman expected the mail
    wrapper script to be executed as group "mail", but
    the system's mail server executed the mail script as
    group "www-data".  Try tweaking the mail server to run the
    script as group "mail", or re-run configure, 
    providing the command line option `--with-mail-gid=www-data'.

    This was all because the CGIs had to be SGID mailman and therefore had to be C binaries because python suid/sgid was considered not safe at the time. This has been fixed many ways in the last 25 years, but I wanted to keep things as is without getting into new rabbiholes :)

    Sadly, it went downhill from there and the 2h rabbithole I was trying to avoid, caused me another one I fell into. But it was cool to see I could run intel binaries on rpi5/arm64 when needed
    It did how break sgid which is essential for mailman and it turned out the reasonable path of rebuilding since I did have source and even a source tree from 2002 with the right build options still baked in:

    magic:/var/local/src/mailman-2.1.7/src# make clean; make; make install
    (...)
    for f in admindb admin confirm create edithtml listinfo options private rmlist roster subscribe; do     exe=/var/local/mailman/cgi-bin/$f;     /usr/bin/install -c -m 755 $f $exe;     chmod g+s $exe; done
    for f in mailman; do     /usr/bin/install -c -m 755 $f /var/local/mailman/mail;     chmod g+s /var/local/mailman/mail/$f; done

    Yeah, that took fewer than 5mn and made native binaries. With that the web pages worked right away, but the Email gateway script was still being difficult and exim4 debugging didn't show the output from it, making it hard to debug. This does not even make it clear what the full command line was (need to go in +dall to see it, barely) ro that the command failed.

    Works from command line: magic:~$ id uid=8(mail) gid=8(mail) groups=8(mail) magic:~$ ~mailman/mail/mailman post testlist From: marc@merlins.org To: testlist@lists.merlins.org subject: test 7

    test

    But when sending through exim: >>>>>>>>>>>>>>>> Exim pid=1720374 (delivery-local) terminating with rc=0 >>>>>>>>>>>>>>>> mm21_transport transport returned FAIL for testlist@lists.merlins.org post-process testlist@lists.merlins.org (2) LOG: MAIN ** testlist@lists.merlins.org F=<root@merlins.org> R=mm21_main_director T=mm21_transport: Tainted arg 2 for mm21_transport transport command: 'testlist'

    I guess this said what was wrong, but it wasn't clear to me that tainted was an error and not a warning and that it caused the issue. Now this did become another rabbithole I need to solve with exim4 having made tainting a real pain to deal with, especially for the way I'm using exim4's local_part_data, that is still perfectly safe in my use case, but exim4 sadly decided that I cannot be trusted and is forcing an over strict and quite frankly very over bearing tainting system on me that is just breaking me without providing any easy opt out.
    I'm honestly not happy with exim4 on that one, especially the complete lack of useful errors in exim logs and poor documentation that gives easy and actionable steps to get out of this hole.

    So now, I'm many hours in trying to figure out how to fix exim4 and I'm really really not impressed at how they forced that overbearing tainting mechanism with very little info on how to easily fix things that it broke and that were working safely.

    So, exim4 took much longer to fix than it should have, here's a new page on it: Part #2 was unfortunately much more painful in an unnecessary way due to a poorly made forced API change in exim4

    π 2025-10-23 01:01 in Computers, Linux, Public
    After 25 years of running on donated hardware, magic.merlins.org aka marc.merlins.org aka ledtranceguy.org finally migrated to a server I built from scratch, for cheap, and was about 60 times more power efficient than the previous server (Dell Poweredge 2950). The Dell was almost 3 times slower since the hardware dated from 2006, and took more than 20 times more power (including the spinning rust drives).

    The more Raspberry Pi specific posts are here:

  • Using Raspberry Pi5 as a Server With Raid1, Btrfs, and Multiple NVME M2 or Sata Drives
  • Using a Raspberry Pi 5 (Rpi5) as a Server With Btrfs, Raid1, Serial Console and Dual NVME/SD Card Recovery Boot
  • Before you see the non professional looking mess of wires I built with 2 rPi5 and reclaimed/recycled drives (I only bought 2 new boot 2TB NVME for boot as I want those flash drives to work a long time), I considered another Dell server I had laying at home, not even sure where from or why. Looking it up, it was a Dell DSS1510 which seems to be a cheaper version of the R430. It's a very professional looking server with redundant power and all, and I did consider it, especially since Dell seems to use capacitors that don't just die years later and take the motherboard down with it.


    room for 8 2.5 Sata flash drives plugged into an unknow raid card
    room for 8 2.5 Sata flash drives plugged into an unknow raid card

    this shows the MB similar to R430 but with lots of stuff missing to save money
    this shows the MB similar to R430 but with lots of stuff missing to save money

    Research showed it was a system from 2016, an upgrade from my existing 2006 server :) but at the same time, do I really want to "upgrade" again to a server that is almost 10 years old? The colo I'm in (via.net, now nextlevel), nicely asked me if I could use less power for the monthly rate they are giving me, and this server can still peak at 200W. Even if it only takes a bit more than 100w, my double rPi5 solution takes less than 30W, probably between 10 and 20W when idle, and that's for 2 computers, giving better high availability and failover


    Good search said:

  • Single-Core Performance: The Raspberry Pi 5 and the Xeon E5-2620 v3 are remarkably close in single-core speed. The Pi 5's modern ARM architecture allows it to match the much older, higher-power Xeon core for single-threaded tasks. Both significantly outperform the ancient Xeon 5140 cores.
  • Multi-Core Performance: The Xeon E5-2620 v3 remains the leader due to its 12 threads. The Raspberry Pi 5 is second, still much faster than the dual Xeon 5140 setup.
  • Power Efficiency: The Raspberry Pi 5 maintains its huge advantage in efficiency, delivering similar single-core performance to the Xeon E5-2620 v3 while using vastly less power.
  • With 2 rPi5 I'm actually faster than the DSS 1510 for maybe 1/10th of the power, so not a bad deal :)

    So here is the end result I built:

  • 2 rPi5 with 32GB pro sdcard that will never be used except for recovery (I don't trust sdcards for long term use)
  • each system is setup to boot from 2TB NVME, top of the line Samsung 990 Pro. This is the one place where I spent money since drives are almost always the weak link long term
  • magic, server #1, has a leftover 2TB Sata M2 plugged via a USB3 adapter which gives very high performance, although it's really just a backup device I can failover and boot from if the NVME were to die (and I can do all this remotely)
  • moremagic, server #2 has 2 1TB Sata drives I had laying around plugged into an M2 Sata controller, allowing 6 drives total (middle of picture below)

  • The 2 things I had to engineer is using each server as a serial console server for the other one, as explained on my Using a Raspberry Pi 5 (Rpi5) as a Server With Btrfs, Raid1, Serial Console and Dual NVME/SD Card Recovery Boot blog.
    The next thing was how to get 5V power for those sata drives. My first solution was just to steal it from the GPIO port:


    But I found a dual sata power cable I had laying around and a 3 pin female plug with the right plastic bits to make it almost impossible to plug backwards (which would likely destroy the drives):

    this
    this

    to replace that
    to replace that


    The last relevant bit is to find those hard to find USB-C power supplies that give 5A on 5V (normally it's 3A max), although you could also get a real 5V power supply and feed the rPi through the GPIO pins, but that would bypass some protections. In the end, my very professional setup that did take many days to build and test, looked like this:


    oops, forgot to protect the back so it doesn't short when touching metal, duct tape to the rescue
    oops, forgot to protect the back so it doesn't short when touching metal, duct tape to the rescue

    the new setup on top fo the existing poweredge server running for a while as recovery/emergency
    the new setup on top fo the existing poweredge server running for a while as recovery/emergency

    And for shits and giggles, still found an original VA Linux server going strong, as a rack spacer :)



    Power Cycling

    Since the rPi5 sadly doesn't have full firmware support over serial (output only, no input to select the boot menu or do anything, really), expecting any kind of BMC functionality like power cycles is of course over optimistic. Due to this lack, I ended up adding a 3.3V controllable relay activatd power outlet that moremagic can toggle via GPIO (so basically moremagic can power cycle magic if it's truly hosed):


    Moremagic is back!

    I had magic and moremagic for many years (if you know the significance of those names, you are an ubergeek and you can Email me to brag, it's well deserved). Moremagic however died in Sept 2024, so I was running with no backup server for over a year, which was not good given that I'm not always home and could have suffered serious downtime if magic had died.

    Now I'm back with 2 servers, on the same network which is not ideal, but they are both redundant filesystem-wise and capable of taking over one another's duties if one were to die (likely the power supply I assume).

    Further reading

  • rescuing/rebuilding magic, and magic back online and live
  • Moremagic v1 died after 18 years of service
  • Magic v3 died, upgrade to V4, Dell Poweredge 2950 and 64bit linux!
  • Magic v5: From Dell Poweredge 2950 to Raspberry Pi 5 (skipping Dell DSS1510)
  • Finishing Upgrade of Year 2000 Linux System From i386 to amd64 to arm64 for Raspberry Pi5 with mailman 2.1.7 for Python 2 (the last 5% that took 70% of the time)
  • ]
  • Exim4 Mailman2 allow insecure tainted data local parts and local part data (what sadly made this migration a lot less fun around the end)
  • π 2025-10-20 01:01 in Hiking
    It had been a little while since I had been to Castle Rock, went on a weekday where it was empty, and got to see the fancy visitor center I had missed all these years:



















    Xmas trees
    Xmas trees

    On the way back, I hadn't gone to Hakone Gardens in several years, so it was a good time to go back:








    See more images for Castle Rock and HAkone Gardens
    π 2025-10-10 01:01 in Electronics

    eyes are drawn with math, they aren't sprites or animated gifs
    eyes are drawn with math, they aren't sprites or animated gifs

    So, I already built a 64x64 Matrix the hard way in 2018, including early uses of the ESP32 FastLED parallel output code that was still being written in 2018 when I built it. Building the matrix from scratch with 64 strips laid out one by one, was a pain, it took close to a week just to build. Code-wise, it took a little while, but I had a sweet running 110fps 16 parallel channel output setup, it was lovely.

    professional wiring work, haha
    professional wiring work, haha

    yeah, that's why I wanted to use a nice expander board this time around
    yeah, that's why I wanted to use a nice expander board this time around

    not counting that I had to add level shifters to get full 110fps speed from 3.3V output to 5V pixels
    not counting that I had to add level shifters to get full 110fps speed from 3.3V output to 5V pixels

    but eh, it did work and it survived 2 burning mans until the playa ate the pixels from the inside
    but eh, it did work and it survived 2 burning mans until the playa ate the pixels from the inside

    I was honestly quite sad about my 4096 pixel array that took so much effort having been eaten by the corrosive playa, so when I saw pieces of pre-made matrices at a more reasonable price, I I kind of impulse bought 6 bunches 10x60 pre-made strips of much better quality just before the Trump tariffs came in. It was still $500 just in LEDs tough, but that's actually a good price for that many high quality pixels. I however figured I'd try using pixxelblaze with it because progress and not writing my own code for everything (although it was already written, haha). I also hoped to use the PB expander board to help with wiring.
    I also was curious to try out the library of 2D patterns available with pixelblaze. In the end I found around 40 2D patterns that looked decent enough. Is 40 a lot? It's not bad, but when using my own Framebuffer::GFX in C++, I've easily gathered over 200 demos that are overall better due to more speed and obviously a lot faster (almost unlimited speed limited by the LEDs themselves).

    I figured I'd live with the limitations of Pixelblaze and the limited amount of demos compared to C++ framebuffers, But things didn't really work out as planned. Namely:

  • I found out the hard way how slow the interpreted code actually was when scaled to 3600 pixels (most demos ran at 2 to 10fps tops, the 2fps ones are painful to watch)
  • I thought the port expander would allow me to drive 3600 LEDs at high speed, but due to the 2Mbit/s bus limitation, it's actually only about 2x faster than asingle neopixel bus, or barely 20fps raw speed. I still thought about using it until realized that most demos didn't really go faster than 10fps anyway, so why bother (for comparison, my 4096 array did 110fps with 16 channel parallel output on the same ESP32 chip).
  • Wizard recommended I use multiple PBs to spread the compute load, sure I could use 2, or 3, or 6 to run the 6 strings of 600 pixels, but after many hours of even trying to figure out how to use master/slave output as it was not officially documented, and pulling my hair on how on earth the coordinate mapping works across devices, I did eventually got it working just to realize that the devices weren't time synced, so the demos ran at slightly different speeds and the display was now out of sync, so it wasted a day of my time trying just to give up in the end.
  • Here are pictures of the build

    all 6 sub matrices connected, turns out single power was good enough even if the matrix power wire was a bit thin and ran a bit hot
    all 6 sub matrices connected, turns out single power was good enough even if the matrix power wire was a bit thin and ran a bit hot

    my 300W 12V power supply was definitely overkill, note the small step down converter to power the 5V PB from 12V
    my 300W 12V power supply was definitely overkill, note the small step down converter to power the 5V PB from 12V

    power was good
    power was good

    I tried to split the output in two by using a spare PB pico I had laying around
    I tried to split the output in two by using a spare PB pico I had laying around

    coordinate mapping was a huge pain due to lack of docs
    coordinate mapping was a huge pain due to lack of docs

    with 2 devices, without magic in the code, a single PB would not know to display the left or right half
    with 2 devices, without magic in the code, a single PB would not know to display the left or right half


    sadly the lack of sync was a showstopper


    more 'this is not working' :-/

    In the end, I gave up and went with a single 3600 pixel output, and make peace with patterns that ran as slow as 3 to 5fps:

    I used a 110V power cord to re-inject 12V power in the middle, not fully required but nicer on wires
    I used a 110V power cord to re-inject 12V power in the middle, not fully required but nicer on wires

    sadly my setup didn't come with the right plug to connect to the output and backfeed power from the other side, so I made my own from spare connectors
    sadly my setup didn't come with the right plug to connect to the output and backfeed power from the other side, so I made my own from spare connectors

    it worked without the power backfeed, but it was better with it
    it worked without the power backfeed, but it was better with it

    now came the job of connecting 60*5=300 knots between the sub-sections with twisty ties
    now came the job of connecting 60*5=300 knots between the sub-sections with twisty ties

    didn't take too long, time for install
    didn't take too long, time for install

    wee!
    wee!

    for a display that doesn't have a framebuffer and things are drawn with math, not bad
    for a display that doesn't have a framebuffer and things are drawn with math, not bad




    and it looks cool from inside the house too :)
    and it looks cool from inside the house too :)

    Do you want the same demos without spending all the time it took me to download them one by one? Marc's Favorite Pixelblaze 2D demos pbb config you can directly install

    The magic file above will install everything you need all at once, you'll just have to re-set Wifi, change the name and resolution.

    If anyone is interested, here are the demos I settled on, the ones prefixed with '_' were downloaded from https://electromage.com/patterns :

  • _2D Bouncing Additive Primaries
  • _2D Clock
  • _Animated Asterisks 2D
  • _Blinky Eyes 2D
  • _Blue Holiday Candle 2D
  • _Blue Holiday Star 2D
  • _Coronal Mass Ejection 2D sliders
  • _distance function kaleidoscope 2
  • _Doom Fire (v2.0) 2D
  • _Eye of Sauron with movement
  • _fractal flower 2D
  • _Geometry Morphing Demo 2D
  • _Halloween Wavy Bands 2D
  • _Heart 2D
  • _honeycomb 3D
  • _Ice Floes 2D
  • _Infinity Flower 2D
  • _Line Dancer 2D
  • _Matrix Green Waterfall 2D
  • _perlin fire wind tunnel
  • _Perlin Kaleidoscope 2D
  • _Plasma 3D
  • _Scary Pumpkin
  • _Shimmer Crossfade 2D
  • _Sierpinski Rainbow 2D
  • _Spinwheel 2D
  • _Scrolling text marquee 2D
  • _Traffic 2D
  • _Tunnel of Squares 2D
  • _Wavy Bands 2D
  • blink fade
  • color bands
  • color twinkles
  • fireflies
  • firework dust
  • slow color shift
  • sparks
  • sparks center
  • spiral twirls 2D
  • xorcery 2D/3D
  • π 2025-10-09 01:01 in Hiking, Ntrips, Trips
    After Sedona, on the way to Zion, page was of course an obvious stop. Things were a bit weird due to a governement shutdown, which included the dam visitor center being closed (apparently the dam tours themselves have been closed for longer than that, which is a shame).

    After leaving Sedona/Flagstaff, quick stop at the Bonito Lava Flow. Didn't have enough time to stay due to a reservation at Lower Antelope Canyon and a 2h drive to get there:



    Pretty route on the way, no time to stop, though:



    Eventually arrived at Lower Antelope Canyon just in time for the tour with just minutes to spare:

    first went to the wrong one
    first went to the wrong one

    then found the correct one
    then found the correct one



    it's a fair ways down
    it's a fair ways down









    Then rain happened:




    small rivers started to form :)
    small rivers started to form :)

    then it started raining for real ;)
    then it started raining for real ;)

    Got exciting in very little time:

    Getting tours last minute was hard, so I got one for wind canyon, but it also got flooded, so we went to secret canyon instead:


    wider but nice
    wider but nice










    The nice bonus is the tour company had its own private access to Antelope Canyon:







    While in the area, I tried to sign up for real "the wave" without success, but there was this very cool "the new wave" a few minutes outside Page, well worth the visit:










    A few more pictures the next day before driving out:






    Not far outside Page are Toadstools part of Grand Staircase Escalante NP. Cool walk:










    And further up the road, there was Moqui Cave, fun weird quirky place:








    this is very random :)
    this is very random :)

    but just next door Sand Caves was a cool visit:









    And that was it for the Page Area, next was Zion...

    See more images for Back around Page, AZ
    π 2025-10-05 01:01 in Clubbing
    Above and Beyond finished their US tour at Shoreline, in the CA Bay Area, 10mn from my house, woot!


    all our local crew was here
    all our local crew was here






    I used the opportunity to bring a slightly new outfit version:



    The location ended up being pretty full:



    It was nice to see Hana again, I do enjoy her ethereal music and singing:


    Dave Dresden took over next for some nice classics:



    And then was time for Above and Beyood:





    nice new graphics
    nice new graphics











    More pages: November 2025 October 2025 September 2025 August 2025 July 2025 June 2025 May 2025 April 2025 March 2025 February 2025 January 2025 December 2024 November 2024 October 2024 September 2024 August 2024 July 2024 June 2024 May 2024 April 2024 March 2024 February 2024 January 2024 December 2023 November 2023 October 2023 September 2023 August 2023 July 2023 June 2023 May 2023 April 2023 March 2023 February 2023 January 2023 December 2022 November 2022 October 2022 September 2022 August 2022 July 2022 June 2022 May 2022 April 2022 March 2022 February 2022 January 2022 December 2021 November 2021 October 2021 September 2021 August 2021 July 2021 June 2021 May 2021 April 2021 March 2021 February 2021 January 2021 December 2020 November 2020 October 2020 September 2020 August 2020 July 2020 June 2020 May 2020 April 2020 March 2020 February 2020 January 2020 December 2019 November 2019 October 2019 September 2019 August 2019 July 2019 June 2019 May 2019 April 2019 March 2019 February 2019 January 2019 December 2018 November 2018 October 2018 September 2018 August 2018 July 2018 June 2018 May 2018 April 2018 March 2018 February 2018 January 2018 December 2017 November 2017 October 2017 September 2017 August 2017 July 2017 June 2017 May 2017 April 2017 March 2017 February 2017 January 2017 December 2016 November 2016 October 2016 September 2016 August 2016 July 2016 June 2016 May 2016 April 2016 March 2016 February 2016 January 2016 December 2015 November 2015 October 2015 September 2015 August 2015 July 2015 June 2015 May 2015 April 2015 March 2015 February 2015 January 2015 December 2014 November 2014 October 2014 September 2014 August 2014 July 2014 June 2014 May 2014 April 2014 March 2014 February 2014 January 2014 December 2013 November 2013 October 2013 September 2013 August 2013 July 2013 June 2013 May 2013 April 2013 March 2013 February 2013 January 2013 December 2012 November 2012 October 2012 September 2012 August 2012 July 2012 June 2012 May 2012 April 2012 March 2012 February 2012 January 2012 December 2011 November 2011 October 2011 September 2011 August 2011 July 2011 June 2011 May 2011 April 2011 March 2011 February 2011 January 2011 December 2010 November 2010 October 2010 September 2010 August 2010 July 2010 June 2010 May 2010 April 2010 March 2010 February 2010 January 2010 December 2009 November 2009 October 2009 September 2009 August 2009 July 2009 June 2009 May 2009 April 2009 March 2009 February 2009 January 2009 December 2008 November 2008 October 2008 September 2008 August 2008 July 2008 June 2008 May 2008 April 2008 March 2008 February 2008 January 2008 December 2007 November 2007 October 2007 September 2007 August 2007 July 2007 June 2007 May 2007 April 2007 March 2007 February 2007 January 2007 December 2006 November 2006 October 2006 September 2006 August 2006 July 2006 June 2006 May 2006 April 2006 March 2006 February 2006 January 2006 December 2005 November 2005 October 2005 September 2005 August 2005 July 2005 June 2005 May 2005 April 2005 March 2005 February 2005 January 2005 December 2004 November 2004 October 2004 September 2004 August 2004 July 2004 June 2004 May 2004 April 2004 March 2004 February 2004 January 2004 October 2003 August 2003 July 2003 May 2003 April 2003 March 2003 January 2003 November 2002 October 2002 July 2002 May 2002 April 2002 March 2002 February 2002 November 2001 October 2001 September 2001 August 2001 July 2001 June 2001 May 2001 April 2001 March 2001 February 2001 January 2001 December 2000 November 2000 October 2000 September 2000 August 2000 July 2000 June 2000 April 1999 March 1999 September 1997 August 1997 July 1996 September 1993 July 1991 December 1988 December 1985 January 1980

    Contact Email