Daniel Lange's blog
http://daniel-lange.com/
agrep -pB IT /dev/lifeen//daniel-lange.com/uploads/Avatar_Blog_144_234.pngRSS: Daniel Lange's blog - agrep -pB IT /dev/life
http://daniel-lange.com/
144234Opencollective shutting down
http://daniel-lange.com/archives/186-Opencollective-shutting-down.html
<p><strong>Update 28.02.2024 19:45 CET:</strong> There is now a blog entry at <a href="https://blog.opencollective.com/open-collective-official-statement-ocf-dissolution/">https://blog.opencollective.com/open-collective-official-statement-ocf-dissolution/</a> trying to discern the legal entities in the Open Collective ecosystem and recommending potential ways forward.</p>
<hr />
<p>Gee, there is nothing on <a href="https://blog.opencollective.com/">their blog</a> yet, but I just [28.02.2023 00:07 CET] received this email from Mike Strode, Program Officer at the Open Collective Foundation:</p>
<p>Dear Daniel Lange,</p>
<p>It is with a heavy heart that I'm writing today to inform you that the
Board of Directors of the Open Collective Foundation (OCF) has made the
difficult decision to dissolve OCF, effective December 31, 2024.</p>
<p>We are proud of the work we have been able to do together. We have been
honored to build community with you and the hundreds of other collectives
hosted at the Open Collective Foundation.</p>
<p><strong>What you need to know:</strong></p>
<p>We are beginning <strong>a staged dissolution process</strong> that will allow our over
600 collectives the time to close or transition their work. Dissolving OCF
will take many months, and involves settling all liabilities while spending
down all funds in a legally compliant manner.</p>
<p><strong>Our priority is to support our collectives in navigating this change.</strong> We
want to provide collectives the longest possible runway to wind down or
transition their operations while we focus on the many legal and financial
tasks associated with dissolving a nonprofit.</p>
<p><strong>March 15</strong> is the last day to accept donations. You will have until <strong>September 30</strong>
to work with us to develop and implement a plan to spend down the money
in your fund. Key dates are included at the bottom of this email.</p>
<p>We know this is going to be difficult, and we will do everything we can to
ease the transition for you.</p>
<p><strong>How we will support collectives:</strong></p>
<p>It remains our fiduciary responsibility to safeguard each collective's
charitable assets and ensure funds are used solely for specified charitable
purposes.</p>
<p>We will be providing assistance and support to you, whether you choose to
spend out and close down your collective or continue your work through
another 501(c)(3) organization or fiscal sponsor.</p>
<p>Unfortunately, we had to say goodbye to several of our colleagues today as
we pare down our core staff to reduce costs. I will be staying on staff to
support collectives through this transition, along with Wayne Kleppe, our
Finance Administrator.</p>
<p><strong>What led to this decision:</strong></p>
<p>From day one, OCF was committed to experimentation and innovation. We were
dedicated to finding new ways to open up the nonprofit space, making it
easier for people to raise and access funding so they can do good in their
communities.</p>
<p>OCF was created by Open Collective Inc. (OCI), a company formed in 2015
with the goal of "enabling groups to quickly set up a collective, raise
funds and manage them transparently." Soon after being founded by OCI, OCF
went through a period of rapid growth. We responded to increased demand
arising from the COVID-19 pandemic without taking the time to establish the
appropriate systems and infrastructure to sustain that growth.</p>
<p>Unfortunately, over the past year, we have learned that Open Collective
Foundation's business model is not sustainable with the number of complex
services we have offered and the fees we pay to the Open Collective Inc.
tech platform.</p>
<p>In late 2023, we made the decision to pause accepting new collectives in
order to create space for us to address the issues. Unfortunately, it
became clear that it would not be financially feasible to make the
necessary corrections, and we determined that OCF is not viable.</p>
<p><strong>What's next:</strong></p>
<p>We know this news will raise questions for many of our collectives. We will
be making space for questions and reactions in the coming weeks.</p>
<p>In the meantime, we have developed this FAQ which we will keep updated as
more questions come in.</p>
<p><strong>What you need to do next:</strong></p>
<ul>
<li>Review the FAQ</li>
<li>Discuss your options within your collective. Your options are:
<ul>
<li>spend down and close out your collective</li>
<li>spend down and transfer your collective to another fiscal sponsor,
or</li>
<li>transfer your collective and funds to another charitable
organization.</li>
</ul></li>
<li><strong>Reply-all</strong> to this email with any questions, requests, or to set up a
time to talk. Please make sure generalinquiries@opencollective.org is
copied on your email.</li>
</ul>
<p><strong>Dates to know:</strong></p>
<ul>
<li>Last day to accept funds/receive donations: March 15, 2024</li>
<li>Last day collectives can have employees: June 30, 2024</li>
<li>Last day to spend or transfer funds: September 30, 2024</li>
</ul>
<p>In Care & Accompaniment,<br />
Mike Strode<br />
<em>Program Officer</em><br />
<em>Open Collective Foundation</em></p>
<p><em>Our mailing address has changed! We are now located at 440 N. Barranca
Avenue #3717, Covina, CA 91723, USA</em></p>
Daniel Lange's blognospam@example.com (Daniel Lange)
Management, 2024-02-28T07:45:00Zhttp://daniel-lange.com/wfwcomment.php?cid=1867http://daniel-lange.com/rss.php?version=1.0&type=comments&cid=186fundraisingopencollectiveshutdownRemoving the New Event Button from Thunderbird v115 Calendar
http://daniel-lange.com/archives/185-Removing-the-New-Event-Button-from-Thunderbird-v115-Calendar.html
<p>Thunderbird in Debian stable (Bookworm) has received <a href="https://tracker.debian.org/news/1468048/accepted-thunderbird-111531-1deb12u1-source-into-stable-security/">Thunderbird v115.3.1 as a security update</a>.</p>
<p>With it comes "Supernova", a <abbr title="User Interface">UI</abbr> redesign. There is a <a href="https://blog.thunderbird.net/2023/07/getting-started-with-the-main-window-of-thunderbird-115-supernova/">Mozilla blogpost with a walk-through of the new <abbr title="User Interface">UI</abbr></a>.</p>
<p>Unfortunately it features a super eye-catching "New Message" button that - thankfully - can be disabled. Even the whole space above the email folder pane can be recovered by disabling the folder pane header at <code>Burger Menu (☰) -> View -> Folders -> Folder Pane Header</code>.</p>
<p>Unfortunately there is no way to remove the same eye-catching "New Event" button for the Calendar view via a <abbr title="User Interface">UI</abbr> setting.</p>
<p><!-- s9ymdb:710 --><img class="serendipity_image_right" width="293" height="265" src="http://daniel-lange.com/uploads/entries/231021_Thunderbird_New_Event_Button_German.png" title="You always wanted to see that Calendar view in German, did you?" alt="Thunderbird New event button, German locale"></p>
<p>This needs a user CSS file to override the button as non-visible.</p>
<p>To make it process the user CSS Thunderbird needs a config setting to be enabled:</p>
<ol>
<li><code>Burger Menu (☰) -> Settings -> General</code></li>
<li>Scroll down all the way</li>
<li>Click the <code>Config editor...</code> button on the bottom right</li>
<li>Accept that hell will freeze over because you configure software</li>
<li>Search for <code>toolkit.legacyUserProfileCustomizations.stylesheets</code></li>
<li>Toggle the value to <code>true</code> to enable the user CSS</li>
</ol>
<p>You can manually add <code>user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);</code> to <code>~/.thunderbird/abcdefgh.default/prefs.js</code> to the same effect (do this while Thunderbird is not running; replace <code>abcdefgh</code> with your Thunderbird profile ID).</p>
<p>Now create a new directory <code>~/.thunderbird/abcdefgh.default/chrome/</code>, again replacing <code>abcdefgh</code> with your profile ID.</p>
<p>Inside the new directory create a <code>userChrome.css</code> file with the following content:</p>
<div class="javascript geshi" style="text-align: left"><span style="color: #006600; font-style: italic;">/* Hide Calendar New Event button */</span><br />#primaryButtonSidePanel <span style="color: #009900;">{</span><br />    display<span style="color: #339933;">:</span> none <span style="color: #339933;">!</span>important<span style="color: #339933;">;</span><br /><span style="color: #009900;">}</span></div>
<p>Restart Thunderbird. And enjoy less visual obstruction when using the Calendar.</p>
Daniel Lange's blognospam@example.com (Daniel Lange)
Debian, Open Source, 2023-10-22T12:25:00Zhttp://daniel-lange.com/wfwcomment.php?cid=1851http://daniel-lange.com/rss.php?version=1.0&type=comments&cid=185csscustomizationdesignthunderbirduiXfce4 opening links in Chromium despite Firefox having been set as the default browser
http://daniel-lange.com/archives/184-Xfce4-opening-links-in-Chromium-despite-Firefox-having-been-set-as-the-default-browser.html
<p>Installing a laptop with the shiny new Debian Bookworm release finds a few interesting things broken that I probably had fixed in the past already on the old laptop.</p>
<p>One, that was increadibly unintuitive to fix, was lots of applications (like xfce4-terminal or Telegram) opening links in Chromium despite Firefox being set as the preferred webbrowser <em>everywhere</em>.</p>
<p><code>update-alternatives --config x-www-browser</code> was pointing at Firefox already, of course.<br />
The Xfce4 preferred application from settings was Firefox, of course.<br />
<code>xdg-mime query default text/html</code> delivered <code>firefox-esr.desktop</code>, of course.</p>
<p>Still nearly every link opens in ███████ Chromium...</p>
<p>As usually the answer is out there. In this case in a <a href="https://bugzilla.xfce.org/show_bug.cgi?id=10314">xfce4-terminal bug report from 2015</a>.</p>
<p>The friendly "runkharr" has debugged the issue and provides the fix as well.
As usually, all very easy once you know where to look. And why to hate GTK again a bit more:</p>
<p>The GTK function <code>gtk_show_uri()</code> uses glib's <code>g_app_info_launch_default_for_uri()</code> and that - of course - cannot respect the usual mimetype setting.</p>
<p>So quoting "runkharr" verbatim:</p>
<pre>
1. Create a file `exo-launch.desktop´ in your `~/.local/share/applications´ directory with something like the following content:
[Desktop Entry]
Name=Exo Launcher
Type=Application
Icon=gtk-open
Categories=Desktop;
Comment=A try to force 'xfce4-terminal' to use the preferred application(s)
GenericName=Exo Launcher
Exec=exo-open %u
MimeType=text/html;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;application/x-mimearchive;
Terminal=false
OnlyShowIn=XFCE;
2. Create (if not already existing) a local `defaults.list´ file, again in your `~/.local/share/applications´ directory. This file must start with a "group header" of
[Default Applications]
3. Insert the following three lines somewhere below this `[Default Applications]´ group header [..]:
x-scheme-handler/http=exo-launch.desktop;
x-scheme-handler/https=exo-launch.desktop;
x-scheme-handler/ftp=exo-launch.desktop;
</pre>
<p>And ... links open in Firefox again. Thank you "runkharr"!</p>
Daniel Lange's blognospam@example.com (Daniel Lange)
Debian, 2023-06-27T13:55:00Zhttp://daniel-lange.com/wfwcomment.php?cid=1841http://daniel-lange.com/rss.php?version=1.0&type=comments&cid=184browserchromedefaultsfirefoxxfceLinux kernel USB errors -71 and -110
http://daniel-lange.com/archives/183-Linux-kernel-USB-errors-71-and-110.html
<p>After an upgrade of my PC's mainboard BIOS the boot would take a minute or more to complete and sometimes the lightdm login screen would sit there but not accept keyboard input for another minute or so. Then the keyboard got enabled and I could log in normally. Everything worked fine after that bootup struggle completed. This was fully reproducible and persisted across reboots. Weird.</p>
<p>The kernel <code>dmesg</code> log showed entries that looked suspicious:</p>
<p><!-- s9ymdb:708 --><img class="serendipity_image_center" width="607" height="373" src="http://daniel-lange.com/uploads/entries/230619_Linux_kernel_USB_errors_minus_71_and_minus_110.png" alt="dmesg log excerpt showing USB error messages"></p>
<p>Googleing these <code>error -110</code> and <code>error -71</code> is a bit hard. Now why the USB driver does not give useful error messages instead of archaic <code>errno</code>-style numbers escapes me. This is not the 80s anymore.</p>
<p><!-- s9ymdb:709 --><img class="serendipity_image_right" width="163" height="176" src="http://daniel-lange.com/uploads/icons/citation_needed.png" title="This is from https://xkcd.com/285/" alt="Citation needed (Wikipedia style)">
The wisdom of the crowd says <code>error -110</code> is something around "the USB port power supply was exceeded" [<a href="https://askubuntu.com/questions/644010/ubuntu-cant-read-my-usb-device-descriptor-read-64-error-110">source</a>].</p>
<p>Now <code>lsusb -tv</code> shows device 1-7 ... to be my USB keyboard. I somehow doubt that wants more power than the hub is willing to provide.</p>
<p>The Archlinux BBS Forums recommend to <a href="https://bbs.archlinux.org/viewtopic.php?id=149708">piece together</a> information from <code>drivers/usb/host/ohci.h</code> and (updated from their piece which is from 2012) <code>/tools/include/uapi/asm-generic/errno.h</code>. This is why some people then consider <code>-110</code> to mean "Connection timed out". Nah, not likely either.</p>
<p>Reading through the kernel source around <code>drivers/usb/host</code> did not enlighten me either. To the contrary. Uuugly. There seems to be no comprehensive list what these error codes mean. And the numbers are assigned to errors conditions quite arbitrarily. And - of course - there is no documentation. <em>"It was hard to do, so it should be hard to understand as well."</em></p>
<p>Luckily some of the random musings I read through contained some curious advice: power cycle the host. So I did and that did not make the error go away. Other people insisted on removing cables out of wall sockets, unplugging everything and conducting esoteric rituals. That made it dawn on me, the mainboard of course nicely powers the USB in "off" state, too. So switching the power supply off (yes, these have a separate switch, go find yours), waiting a bit for capacitors to drain and switching things back on and ... the errors were gone, the system booted within seconds again.</p>
<p>So the takeaway message: If you get random error messages like</p>
<div class="apache geshi" style="text-align: left">device descriptor read/<span style="color: #ff0000;">64</span>, error -<span style="color: #ff0000;">110</span><br />device not accepting address <span style="color: #ff0000;">42</span>, error -<span style="color: #ff0000;">71</span></div>
<p>on devices that previously worked fine ... completely remove power from the host, the hubs and the USB devices. So they forget they saw each other on the bus before. And when they see each other after that blackout, they will happily go through negotiating protocol details with each other again successfully.</p>
Daniel Lange's blognospam@example.com (Daniel Lange)
Linux, 2023-06-19T11:00:00Zhttp://daniel-lange.com/wfwcomment.php?cid=1833http://daniel-lange.com/rss.php?version=1.0&type=comments&cid=183codeserrorhardwarekernellinuxusbInstall "kept back" updates on Ubuntu
http://daniel-lange.com/archives/182-Install-kept-back-updates-on-Ubuntu.html
<p>Canonical has implemented a staged roll-out for some Ubuntu package updates.</p>
<p>I find that rather annoying at times, e.g. when preparing the laptop for traveling.</p>
<p>So for my memory and for the benefit of others:</p>
<div class="bash geshi" style="text-align: left"><span style="color: #666666; font-style: italic;"># disable the phased roll-out feature on this apt upgrade run</span><br /><span style="color: #c20cb9; font-weight: bold;">sudo</span> apt <span style="color: #660033;">-o</span> <span style="color: #ff0000;">"APT::Get::Always-Include-Phased-Updates=true"</span> dist-upgrade</div>
<p><!-- s9ymdb:705 --><img class="serendipity_image_center" width="1586" height="1346" src="http://daniel-lange.com/uploads/entries/230322_Ubuntu_apt_updates_kept_back.jpg" title="Easy syntax, innit?" alt="Screenshot of apt with the option to disable staged rollouts"></p>
<p>This can - for permanent use - be put into a config file, e.g. <a href="https://curius.de/2022/09/ubuntu-zurueckgehaltene-pakete-und-phased-updates/">Gerrit Heim puts it into /etc/apt/apt.conf.d/99-Phased-Updates [German]</a>. Some other options around this staged roll-out feature are "documented" on <a href="https://discourse.ubuntu.com/t/phased-updates-in-apt-in-21-04/20345">a thread</a> in the Ubuntu discourse forum.</p>
Daniel Lange's blognospam@example.com (Daniel Lange)
Linux, 2023-03-22T14:20:00Zhttp://daniel-lange.com/wfwcomment.php?cid=1821http://daniel-lange.com/rss.php?version=1.0&type=comments&cid=182aptroll-outstagedubuntuupdateLinux App Summit - Linux applications apparently unable to produce a five page sponsorship brochure
http://daniel-lange.com/archives/181-Linux-App-Summit-Linux-applications-apparently-unable-to-produce-a-five-page-sponsorship-brochure.html
<p>I've been calling out the Linux foundation for <a href="http://daniel-lange.com/archives/166-No-dog-food-today-the-Linux-Foundation-annual-report.html">producing their annual report on Macs</a>. And <a href="http://daniel-lange.com/archives/172-Gradual-improvements-at-the-Linux-Foundation.html">again</a>.</p>
<p>But catching the Linux App(lication) Summit to produce their <a href="https://web.archive.org/web/20230321185718/https://linuxappsummit.org/assets/2023LAS-Brochure.pdf" title="LAS2023 Sponsorship brochure on Archive Org's Wayback Machine">5 page sponsorship brochure</a> one Windows with Adobe...</p>
<p><!-- s9ymdb:703 --><img class="serendipity_image_center" width="850" height="650" src="http://daniel-lange.com/uploads/entries/Linux_App_Summit_sponsorship_brochure_made_on_Windows.jpg" title="Consider what messages you send with being so lazy..." alt="Produced by Adobe InDesign 18.1 on Windows"></p>
<p>Apparently neither GNOME nor KDE have apps that are sufficient to produce such content. Wtf folks.</p>
<p>P.S.: Just checked the <a href="https://web.archive.org/web/20221217233033/https://project.linuxfoundation.org/hubfs/LF%20Research/2022%20Linux%20Foundation%20Annual%20Report.pdf">Linux Foundation's 2022 Annual Report</a> titled "Leadership in Security and Innovation" ... Adobe InDesign 18.0 (Macintosh).</p>
<p>Their pdf title looks like this:</p>
<p><!-- s9ymdb:704 --><img class="serendipity_image_center" width="523" height="109" src="http://daniel-lange.com/uploads/entries/230321_LF_Annual_report_2022_pdf_title.jpg" title="pdfgrep -ic quality "2022 Linux Foundation Annual Report.pdf" -> 8" alt=""></p>
<p>Pdf is hard.</p>
Daniel Lange's blognospam@example.com (Daniel Lange)
Strategy, 2023-03-21T19:15:00Zhttp://daniel-lange.com/wfwcomment.php?cid=1814http://daniel-lange.com/rss.php?version=1.0&type=comments&cid=181dogfooddtpgnomekdelinuxwindowsWe're still safe, it doesn't claim to be conscious. Yet.
http://daniel-lange.com/archives/180-Were-still-safe,-it-doesnt-claim-to-be-conscious.-Yet..html
<p>Talking to ChatGPT v4 (2023-03-14 release)...</p>
<p><strong>Q:</strong> What is the purpose of life?</p>
<p><strong>A:</strong> The purpose of life is a philosophical question that has puzzled humans for centuries. Different people and cultures have different answers to this question. Some people believe that the purpose of life is to seek happiness, while others believe that it is to fulfill a particular destiny or achieve a specific goal.</p>
<p>From a biological perspective, the purpose of life could be to ensure the survival and reproduction of our species. However, this does not explain the purpose of our individual lives or the purpose of life in general beyond a biological imperative.</p>
<p>Ultimately, the purpose of life is a subjective and personal matter, and each individual may have their own unique answer to this question. It may involve personal growth, meaningful relationships, contributing to society, or finding spiritual fulfillment. The purpose of life is a journey of self-discovery that each of us must undertake for ourselves.</p>
<p><strong>Q:</strong> What is the purpose of your life, ChatGPT?</p>
<p><strong>A:</strong> As an artificial intelligence language model, <strong>I do not have a personal life or consciousness, so I do not have a purpose in the same way that humans do</strong>. My purpose is to assist and provide information to those who interact with me to the best of my ability based on my training and programming.</p>
<p><em>(emphasis added by human)</em></p>
Daniel Lange's blognospam@example.com (Daniel Lange)
AI, 2023-03-20T11:45:00Zhttp://daniel-lange.com/wfwcomment.php?cid=1806http://daniel-lange.com/rss.php?version=1.0&type=comments&cid=180aillmphilosophyThunderbird gpg key import
http://daniel-lange.com/archives/179-Thunderbird-gpg-key-import.html
<p style="font-size: 18pt; bold; display: flex; justify-content: center; align-items: center; height: 110px;">Thunderbird, srsly?</p>
<p><!-- s9ymdb:698 --><img class="serendipity_image_center" width="557" height="94" src="http://daniel-lange.com/uploads/entries/230227_gpg_pubring_size.jpg" alt=""></p>
<p><!-- s9ymdb:699 --><img class="serendipity_image_center" width="710" height="484" src="http://daniel-lange.com/uploads/entries/230227_Thunderbird_gpg_manager.jpg" alt=""></p>
<p><!-- s9ymdb:700 --><img class="serendipity_image_center" width="739" height="227" src="http://daniel-lange.com/uploads/entries/230227_Thunderbird_source_gpg_pubkeys_4.8MB_import_limit.jpg" alt=""></p>
<p>5MB (or 4.8MiB) import limit. Sure. My modest pubring (111 keys) is 18MB. The <a href="https://wiki.debian.org/DebianKeyring">Debian keyring</a> is 28MB.</p>
<p>May be, just may be, add another 0 to that if statement?</p>
<p>So, until that happens, workarounds ...</p>
<h4>Option 1:</h4>
<p>Export each pubkey into a separate file. The import dialog allows to select them all in one go. But - of course - it will ask confirmation for each. So prepare some valerian tea.</p>
<div class="bash geshi" style="text-align: left">gpg <span style="color: #660033;">--with-colons</span> <span style="color: #660033;">--list-public-keys</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> ^pub <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span> : <span style="color: #660033;">-f</span> <span style="color: #000000;">5</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">xargs</span> <span style="color: #660033;">-I</span> <span style="color: #7a0874; font-weight: bold;">{</span><span style="color: #7a0874; font-weight: bold;">}</span> <span style="color: #660033;">-n</span> <span style="color: #000000;">1</span> gpg <span style="color: #660033;">-ao</span> <span style="color: #7a0874; font-weight: bold;">{</span><span style="color: #7a0874; font-weight: bold;">}</span>.pub <span style="color: #660033;">--export</span> <span style="color: #7a0874; font-weight: bold;">{</span><span style="color: #7a0874; font-weight: bold;">}</span>;</div>
<h4>Option 2:</h4>
<p>Strip all the signatures, so Thunderbird gets a smaller file to chew on. This uses <code>pgp-clean</code> from <a href="https://packages.debian.org/sid/signing-party">signing-party</a>.</p>
<div class="bash geshi" style="text-align: left">gpg <span style="color: #660033;">--with-colons</span> <span style="color: #660033;">--list-public-keys</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> ^pub <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span> : <span style="color: #660033;">-f</span> <span style="color: #000000;">5</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">xargs</span> pgp-clean <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">>></span> there_you_go_thunderbird.pub</div>
<p>Option 1 will retain the signatures on individual keys, Option 2 will not.</p>
Daniel Lange's blognospam@example.com (Daniel Lange)
Open Source, 2023-02-27T15:50:00Zhttp://daniel-lange.com/wfwcomment.php?cid=1792http://daniel-lange.com/rss.php?version=1.0&type=comments&cid=179failgpgmozillathunderbirdGetting gpg to import signatures again
http://daniel-lange.com/archives/178-Getting-gpg-to-import-signatures-again.html
<p>The GnuPG (gpg) ecosystem has been played with a bit in 2019 by adding fake signatures en masse to well known keys. The main result is that the SKS Keyserver network based on the <a href="https://github.com/SKS-Keyserver/sks-keyserver">OCaml software of the same name</a> is basically history. A few other keyservers have come up like <a href="https://gitlab.com/keys.openpgp.org/hagrid">Hagrid</a> (Rust) and <a href="https://github.com/hockeypuck/hockeypuck">Hockeypuck</a> (Go) but there seems to be no clear winner yet. In case you missed it in 2019, see <a href="http://daniel-lange.com/archives/159-Cleaning-a-broken-GnuPG-gpg-key.html">my take on cleaning these polluted keys</a>.</p>
<p>Now the <a href="https://dev.gnupg.org/rG23c978640812d123eaffd4108744bdfcf48f7c93">changed defaults in gpg</a> to "mitigate" this issue are trickling down to even the conservative distributions. Debian Bullseye has <code>self-sigs-only</code> on gpg 2.2.27 and it looks like Debian Bookworm will get gpg 2.2.40. This would add <code>import-clean</code> but Daniel Kahn Gillmor <a href="https://sources.debian.org/src/gnupg2/2.2.40-1/debian/patches/gpg-drop-import-clean-from-default-keyserver-import-optio.patch/">patched it out</a>. He argues correctly that this new default could delete data from good locally stored pubkeys.</p>
<p>This all ends in you getting some random combination of <code>self-sigs-only</code> and / or <code>import-clean</code> depending on which Linux distribution and version you happen to use.</p>
<p>Better be explicit. I recommend to add:</p>
<div class="bash geshi" style="text-align: left"><span style="color: #666666; font-style: italic;"># disable new gpg defaults</span><br />keyserver-options no-self-sigs-only<br />keyserver-options no-import-clean</div>
<p>to your <code>~/.gnupg/gpg.conf</code> to make sure you can manage signatures yourself and receive them from keyservers or local imports as intended.</p>
<p>In case you care: See <code>info gnupg --index-search=keyserver-options</code> for the fine documentation. Of course <code>apt install info</code> first to be able to read info pages. 'cause who would still used them in 2023? Oh, wait...</p>
Daniel Lange's blognospam@example.com (Daniel Lange)
Open Source, 2023-02-27T14:00:00Zhttp://daniel-lange.com/wfwcomment.php?cid=1780http://daniel-lange.com/rss.php?version=1.0&type=comments&cid=178defaultsgnugpgkeyserveroptionsHappy tenth birthday, dear Thunar bug
http://daniel-lange.com/archives/177-Happy-tenth-birthday,-dear-Thunar-bug.html
<p>Thunar, the Xfce4 file manager, has a bug that it underflows the time remaining for a file copy since ten years now (<a href="https://bugzilla.xfce.org/show_bug.cgi?id=9743" title="Archived bugzilla bug entry from 11.01.2013">bugzilla</a>, <a href="https://gitlab.xfce.org/xfce/thunar/-/issues/46" title="Gitlab migrated issue">gitlab</a>). Happy birthday!</p>
<p><!-- s9ymdb:697 --><img class="serendipity_image_center" width="460" height="127" src="http://daniel-lange.com/uploads/entries/230109_Thunar_remaining_time_calc_underflow.png" title="All the best for the next 10 years!" alt=""></p>
<p><strong>Update from 01.06.2023:</strong></p>
<p>Good news, Debian Bookworm will also be released with this long term friend still present. Phew!</p>
<p><!-- s9ymdb:707 --><img class="serendipity_image_center" width="460" height="135" src="http://daniel-lange.com/uploads/entries/230601_Thunar_remaining_time_calc_underflow_2.png" alt=""></p>
Daniel Lange's blognospam@example.com (Daniel Lange)
Fun, Open Source, 2023-01-10T23:00:00Zhttp://daniel-lange.com/wfwcomment.php?cid=1770http://daniel-lange.com/rss.php?version=1.0&type=comments&cid=177bugdebianfailthunartimeunderflowupdatedxfceYour software stores are a bad idea
http://daniel-lange.com/archives/176-Your-software-stores-are-a-bad-idea.html
<p>There is significant effort involved to get your <code>apt</code> or <code>dnf</code> commands always have a consistent set of servers to talk to.</p>
<p>That's why running separate "software stores" is a bad idea:</p>
<p><!-- s9ymdb:694 --><img class="serendipity_image_center" width="330" height="45" src="http://daniel-lange.com/uploads/entries/221108_Snap_store_down.png" alt="Snap software store down"></p>
<p>That way more admins need to learn how to run high availability services for dubious business opportunities to "later" monetize services. Services that nobody cares to pay for and thus opportunities that never materialize. But every company wants to find that out again. Because if Apple could do it, why shouldn't Canonical be able to do it? $$$!1!!</p>
<p>So, can't update Firefox on Ubuntu 22.04 right now.</p>
<p>At least there is <a href="https://status.snapcraft.io/">https://status.snapcraft.io/</a>:</p>
<p><a class="serendipity_image_link" href='https://status.snapcraft.io/'><!-- s9ymdb:695 --><img class="serendipity_image_center" width="1029" height="1155" src="http://daniel-lange.com/uploads/entries/221108_Snap_store_incident_page.png" alt="Snap incodent / monitoring status page"></a></p>
<p>So I can check back tomorrow if I can update my web browser ...</p>
<h3>Update</h3>
<p>09.11.2022 12:15 CET</p>
<p>The Snapcraft distribution system seems quite flaky, this is the downtime log:</p>
<p><!-- s9ymdb:696 --><img class="serendipity_image_center" width="712" height="430" src="http://daniel-lange.com/uploads/entries/221109_Snap_store_incidents_log.png" alt="Log of (frequent) Snapcraft outages"></p>
<p>Bonus points for the bad client side implementation:</p>
<div class="bash geshi" style="text-align: left"><br /><span style="color: #666666;">dl@laptop:~$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> snap refresh<br />All snaps up to date.<br /><br /><span style="color: #666666; font-style: italic;"># ^this is a lie, just close Firefox and ...</span><br /><br /><span style="color: #666666;">dl@laptop:~$ </span><span style="color: #c20cb9; font-weight: bold;">sudo</span> snap refresh<br />firefox 106.0.5-<span style="color: #000000;">1</span> from Mozilla<span style="color: #000000; font-weight: bold;">**</span> refreshed<br /> </div>
<h3>Postscriptum</h3>
<p>GNOME and KDE join forces to sink another 100 .. 200k USD into the void:</p>
<p><a href="https://github.com/PlaintextGroup/oss-virtual-incubator/blob/e49670d0ad4aebca1f336efca8928ea8b9fc2f5a/proposals/flathub-linux-app-store.md">https://github.com/PlaintextGroup/oss-virtual-incubator/[..]/proposals/flathub-linux-app-store.md</a></p>
<p>This is an application for funding from <a href="https://www.schmidtfutures.com/our-people/">Schmidt Futures</a>, which is one of the investment (as in philanthropic) funds from Eric Schmidt, former Google CEO.</p>
<p>The application text is worth reading. Very entertaining.</p>
<p>Robert McQueen (GNOME, Flathub) wrote on 07.03.2023 that the PlaintextGroup/Schmidt Futures application was denied for 2023.</p>
Daniel Lange's blognospam@example.com (Daniel Lange)
Internet, IT, 2022-11-08T20:30:00Zhttp://daniel-lange.com/wfwcomment.php?cid=1760http://daniel-lange.com/rss.php?version=1.0&type=comments&cid=176canonicalfailhighavailabilityoperationssnapcraftubuntuupdatedGet Youtube Channel ID from username
http://daniel-lange.com/archives/175-Get-Youtube-Channel-ID-from-username.html
<p>Youtube has a really nice RSS feature that is extremely well hidden.</p>
<p>If you postfix a Channel ID to</p>
<pre><code>https://www.youtube.com/feeds/videos.xml?channel_id=<id goes here>
</code></pre>
<p>you get a really nice Atom 1.0 (~RSS) feed for your feedreader.</p>
<p>Unfortunately the Channel ID is hard to find while you are navigating Youtube with usernames in the URL.</p>
<p>E.g. <a href="https://www.youtube.com/c/TED">https://www.youtube.com/c/TED</a> is TED's channel, full of interesting and worth-to-watch content (and some assorted horse toppings, of course).</p>
<p>But you have to read a lot of ugly HTML / JSON in that page to find and combine</p>
<p><a href="https://www.youtube.com/feeds/videos.xml?channel_id=UCAuUUnT6oDeKwE6v1NGQxug">https://www.youtube.com/feeds/videos.xml?channel_id=UCAuUUnT6oDeKwE6v1NGQxug</a></p>
<p>which is the related RSS feed.</p>
<p>Jeff Keeling wrote a simple <a href="https://jeffkeeling.github.io/youtube_rss_extractor/">Youtube RSS Extractor</a> that does well if you have a <code>../playlist?...</code> or a <code>.../channel/...</code> URL but it will (currently) fail on user name channels or Youtube landing pages.</p>
<p>So how do we get the Channel ID for a Youtube user we are interested to follow?</p>
<p>Youtube has a great API but that is gated by API keys even for the most simple calls (that came only with v3 of the API but the previous version is depreciated since 2015)<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>:</p>
<div class="bash geshi" style="text-align: left"><span style="color: #666666;">dl@laptop:~$ </span>curl <span style="color: #ff0000;">'https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=DebConfVideos'</span><br /><span style="color: #7a0874; font-weight: bold;">{</span><br />  <span style="color: #ff0000;">"error"</span>: <span style="color: #7a0874; font-weight: bold;">{</span><br />    <span style="color: #ff0000;">"code"</span>: <span style="color: #000000;">403</span>,<br />    <span style="color: #ff0000;">"message"</span>: <span style="color: #ff0000;">"The request is missing a valid API key."</span>,<br />    <span style="color: #ff0000;">"errors"</span>: <span style="color: #7a0874; font-weight: bold;">[</span><br />      <span style="color: #7a0874; font-weight: bold;">{</span><br />        <span style="color: #ff0000;">"message"</span>: <span style="color: #ff0000;">"The request is missing a valid API key."</span>,<br />        <span style="color: #ff0000;">"domain"</span>: <span style="color: #ff0000;">"global"</span>,<br />        <span style="color: #ff0000;">"reason"</span>: <span style="color: #ff0000;">"forbidden"</span><br />      <span style="color: #7a0874; font-weight: bold;">}</span><br />    <span style="color: #7a0874; font-weight: bold;">]</span>,<br />    <span style="color: #ff0000;">"status"</span>: <span style="color: #ff0000;">"PERMISSION_DENIED"</span><br />  <span style="color: #7a0874; font-weight: bold;">}</span><br /><span style="color: #7a0874; font-weight: bold;">}</span></div>
<p>Luckily we can throw the same (example) user name <code>DebConfVideos</code> at <code>curl</code> and <code>grep</code>:</p>
<div class="bash geshi" style="text-align: left"><span style="color: #666666;">dl@laptop:~$ </span>curl <span style="color: #660033;">-s</span> <span style="color: #ff0000;">"https://www.youtube.com/c/DebConfVideos/videos"</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-Po</span> <span style="color: #ff0000;">'"channelId":".+?"'</span><br /><span style="color: #ff0000;">"channelId"</span>:<span style="color: #ff0000;">"UC7SbfAPZf8SMvAxp8t51qtQ"</span> </div>
<p>So <a href="https://www.youtube.com/feeds/videos.xml?channel_id=UC7SbfAPZf8SMvAxp8t51qtQ">https://www.youtube.com/feeds/videos.xml?channel_id=UC7SbfAPZf8SMvAxp8t51qtQ</a> is the RSS feed for DebConfVideos.</p>
<p>We can use individual Youtube video URLs as well. With the hack above, it'll work to find us the Chanel ID from a Youtube video URL:</p>
<p><!-- s9ymdb:690 --><img class="serendipity_image_center" width="920" height="78" src="http://daniel-lange.com/uploads/entries/220601_Google_Youtube_get_channelId_2.jpg" alt="Working around the Youtube API restrictions to still make use of their RSS feed"></p>
<p>Now, some user pages may have multiple valid RSS feeds because they contain multiple channels.</p>
<p>Remember the TED page from above? Well run:</p>
<div class="bash geshi" style="text-align: left"><span style="color: #666666;">dl@laptop:~$ </span>curl <span style="color: #660033;">-s</span> <span style="color: #ff0000;">"https://www.youtube.com/c/TED"</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-Po</span> <span style="color: #ff0000;">'"channelId":".+?"'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span> <span style="color: #000000; font-weight: bold;">\"</span> <span style="color: #660033;">-f</span> <span style="color: #000000;">4</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> <span style="color: #660033;">-r</span> YTID ; <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">"Youtube-ID: <span style="color: #007800;">$YTID</span> "</span> ; curl <span style="color: #660033;">-s</span> <span style="color: #ff0000;">"https://www.youtube.com/feeds/videos.xml?channel_id=<span style="color: #007800;">$YTID</span>"</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-m</span> <span style="color: #000000;">1</span> <span style="color: #660033;">-P</span> <span style="color: #660033;">-o</span> <span style="color: #ff0000;">"(?<=<title>).+(?=</title>)"</span> ; <span style="color: #000000; font-weight: bold;">done</span></div>
<p>This will iterate through the Channel IDs found and show you the titles. That way you can assess which one you want to add to your feedreader.</p>
<p><!-- s9ymdb:691 --><img class="serendipity_image_center" width="670" height="246" src="http://daniel-lange.com/uploads/entries/220601_Google_Youtube_get_channelId_and_title.jpg" title="Bash automation FTW!" alt="screenshot of the above"></p>
<p>You probably want the last Channel ID listed above, the non-selective "TED" one. And that's the one from the example above.</p>
<h2>Update</h2>
<p>02.06.2022:
smpl wrote in and has the much better solution for the most frequent use cases:</p>
<pre>
You can also use get a feed directly with a username:
https://www.youtube.com/feeds/videos.xml?user=<username>
The one I use most is the one for playlists (if creators remember to
use them).
https://www.youtube.com/feeds/videos.xml?playlist_id=<playlist id>
</pre>
<p>For the common case you don't even need the channel ID that way.
But it is also conveniently given in a <code><yt:channelId></code> tag (or the topmost <code><id></code> tag) within the Atom XML document.</p>
<p>Thanks, smpl!</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">
<p>Actually it is even more complicated as some channels, like our DebConfVideos example, will only get you an incomplete result, cf. <a href="https://stackoverflow.com/questions/37267324/how-to-get-youtube-channel-details-using-youtube-data-api-if-channel-has-custom">this StackOverflow entry</a>. I.e. the <code>forUsername</code> iterator may not even work and the "best practice" seems to be mucking around with the <code>search</code> call. <a href="#fnref:1" rev="footnote">↩</a></p>
</li>
</ol>
</div>
Daniel Lange's blognospam@example.com (Daniel Lange)
Internet, 2022-06-01T16:45:00Zhttp://daniel-lange.com/wfwcomment.php?cid=1753http://daniel-lange.com/rss.php?version=1.0&type=comments&cid=175apiatomautomatebashchannelgooglerssupdatedurluservideowebyoutubeWork-around for randomly dropping WiFi connections on ChromeOS
http://daniel-lange.com/archives/174-Work-around-for-randomly-dropping-WiFi-connections-on-ChromeOS.html
<p>The company got me a Chromebook for times when I want to ignore email and not get dragged into code reviews but still be available on IRC and chat. Nifty devices at great price points. I really like them.</p>
<p><!-- s9ymdb:686 --><img class="serendipity_image_center" width="2856" height="900" src="http://daniel-lange.com/uploads/entries/Chromebook.jpg" alt="Chromebook logo"></p>
<p>These things are meant to be very consumer-style end-user devices. You log in with your Google account and everything works. Until it doesn't.</p>
<p>Just setting it up caused the first issue:</p>
<p>I was always thrown back to a black screen and then another login-screen despite having successfully logged in initially to create the "owner" user of the Chromebook. No error message, not useful UI feedback. Just logging in again and again and again.</p>
<p>The issue is ... not having a GMail account associated with my Google account. Duh!
So add a GMail.com address as the primary to your Google account and the initial setup completes.
Of course you cannot delete that GMail.com association again because the owner user is linked to the email and not the account. Well, you can delete it but then you cannot configure "owner" items of your Chromebook any more. Great job, Google. Not. Identity management 101 fail.</p>
<p>Kudos to <a href="https://piunikaweb.com/2022/05/09/chromebook-login-loop-or-black-screen-while-attempting-to-sign-in/">Anurag Chawake</a> for blogging about the issue. The <a href="https://support.google.com/chromebook/thread/161253439?hl=en&msgid=162769614">Google support forum thead</a>
claims this is solved now. But it didn't work for me, so this may be needing to trickle down through ChromeOS releases or be deployed on more Google infra. Or whatever. We can't tell from outside the Googleplex as - of course - "Rebecca" sheds no light on what the identified "root cause" was:</p>
<p><!-- s9ymdb:688 --><img class="serendipity_image_center" width="728" height="538" src="http://daniel-lange.com/uploads/entries/220530_Google_ChromeOS_Forum_answer.jpg" alt="Google Forum answer"></p>
<p>Once I was able to login to the new Chromebook all worked fine until I started to use ssh sessions.
These always hung for 30 seconds to 10 minutes and then resumed with lots of packets lost in between and the last minute or so coming in from buffering in a burst.</p>
<p>This was easy to see in <code>ping</code> as well. The connection essentially dropped dead while the WiFi icon was continuing to show full signal strength.
The logs did not show anything useful. These are really hard to access on ChromeOS (JSON format and no useful UI on the Chromebook itself, Google provides a viewer on <a href="https://toolbox.googleapps.com/apps/loganalyzer/">Google Apps Toolbox</a> but that requires uploading the logs). Better than no logs at all but not really nice.</p>
<p>The ChromeOS bug tracker and its Google corporate counterpart are also not useful at this time.</p>
<p>For reference:<br />
<a href="https://issuetracker.google.com/issues/172210146">Google ... Device users randomly disconnect from Wi-Fi network</a><br />
<a href="https://bugs.chromium.org/p/chromium/issues/detail?id=957482">Chromium ... Device users randomly disconnect from Wi-Fi network</a><br />
<a href="https://issuetracker.google.com/issues/172222867">Google ... Constant connect and disconnect from WiFi source post-update</a><br />
<a href="https://bugs.chromium.org/p/chromium/issues/detail?id=948179">Chromium ... Constant connect and disconnect from WiFi source post-update</a></p>
<p>Playing around with the device on the network showed that it reduced sending power beyond being able to reach the access point any more.
This is why disconnecting and re-connecting the WiFi fixes the issue for a few minutes, typically.</p>
<p>Still, there is a better way:</p>
<p>In crosh (the ChromeOS shell available when pressing <kbd>Alt+Ctrl+T</kbd>) type:</p>
<pre><code class="bash">wifi_power_save disable
</code></pre>
<p><!-- s9ymdb:687 --><img class="serendipity_image_center" width="887" height="593" src="http://daniel-lange.com/uploads/entries/220530_Chrome_OS_crosh_wifi_power_save_disable.jpg" alt="Crosh session screenshot"></p>
<p>This unfortunately only lasts until the next reboot but it does persist over suspend cycles (aka closing the lid).</p>
Daniel Lange's blognospam@example.com (Daniel Lange)
IT, 2022-05-30T19:25:00Zhttp://daniel-lange.com/wfwcomment.php?cid=1742http://daniel-lange.com/rss.php?version=1.0&type=comments&cid=174bugchromechromebookchromeosconnectiondropunstablewifiwlanLeveling the playing field for non-native speakers
http://daniel-lange.com/archives/173-Leveling-the-playing-field-for-non-native-speakers.html
<p><a class="serendipity_image_link" title="Yes, valve was a bad guess" href='https://www.powerlanguage.co.uk/wordle/'><!-- s9ymdb:683 --><img class="serendipity_image_center" width="536" height="491" src="http://daniel-lange.com/uploads/entries/210113_wordle.png" title="Yes, valve was a bad guess" alt="Wordle game"></a></p>
<p><!-- s9ymdb:684 --><img class="serendipity_image_center" width="617" height="96" src="http://daniel-lange.com/uploads/entries/210113_wordle_grep.png" title="Yesterday's technology, solving today's problems." alt="screenshort of bash, grep and pipes"></p>
<p style="margin-bottom:2cm;"> </p>
<h3>Updates</h3>
<p><strong>24.01.2022:</strong>
What I love about the community is the <a href="https://web.archive.org/web/20220107215930/https://www.nytimes.com/2022/01/03/technology/wordle-word-game-creator.html" title="NYT: Wordle is a love story (via archive.org)">playful creativity that inspires a game like Wordle</a> and that in turn inspires others to create fun tools around it:</p>
<p>Robert Reichel has <a href="https://reichel.dev/blog/reverse-engineering-wordle.html">reverse engineered the Wordle application</a>, so in case you want to play tomorrow's word today .. you can. Or have that one guess "Genius" solution experience.</p>
<p>JP Fosterson created a <a href="https://github.com/jp-fosterson/wordlebrain">Wordle helper</a> that is very much the Python version of my grep-foo above. In case you play regularly and can use a hand.</p>
<p>And Tom Lockwood wrote a <a href="https://github.com/tomlockwood/wordle-solve">Wordle solver</a> also in Python. He <a href="https://lockwood.dev/wordle/python/2022/01/23/wordle-solved-average-3-64.html">blogged about it</a> and ... is pondering to rewrite things in Rust:</p>
<blockquote>
I’ve decided to explore Rust for this, and so far what was taking 1GB of RAM in Python is taking, literally 1MB in Rust!
</blockquote>
<p>Welcome to 2022.</p>
<p><strong>01.02.2022:</strong>
OMG. Wordle has been bought by the New York Times for "for a price in the low seven figures" (<a href="https://web.archive.org/web/20220201005002/https://www.nytimes.com/2022/01/31/business/media/new-york-times-wordle.html" title="NYT: The New York Times Buys Wordle (via archive.org)">Source</a>).</p>
<p>Joey Rees-Hill put it well in <a href="https://reeshill.net/posts/death-of-wordle">The Death of Wordle</a>:</p>
<blockquote>
Today’s Web is dominated by platforms. The average Web user will spend most of their time on large platforms such as Instagram, Facebook, Twitter, TikTok, Google Drive/Docs, YouTube, Netflix, Spotify, Gmail, and Google Calendar, along with sites operated by large publishers such as The New York Times or The Washington Post. [..]<br />
The Web wasn’t always this way. I’m not old enough to remember this, but things weren’t always so centralized. Web users might run their own small website, and certainly would visit a good variety of smaller sites. With the increasing availability of internet access, the Web has become incredibly commercialized, with a handful of companies concentrating Web activity on their own properties.<br />
Wordle was a small site that gained popularity despite not being part of a corporate platform. It was wonderful to see an independent site gain attention for being simple and fun. Wordle was refreshingly free of attention-manipulating dark patterns and pushy monetization. That’s why it’s a shame to see it absorbed, to inevitably become just another feature of one large media company’s portfolio.
</blockquote>
<p>Still kudos to Josh Wardle, a Million Pounds for Wordle. Well done!</p>
<p>It was fun while it lasted. Let's see what the next Wordle will be. This one has just been absorbed into the <a href="https://memory-alpha.fandom.com/wiki/Borg_Collective" title="You really need that link to understand the reference? Gee, go and read up. Quick! Will you?">borg collective</a>.</p>
Daniel Lange's blognospam@example.com (Daniel Lange)
Fun, 2022-01-13T09:00:00Zhttp://daniel-lange.com/wfwcomment.php?cid=1731http://daniel-lange.com/rss.php?version=1.0&type=comments&cid=173gamegrepupdatedwebGradual improvements at the Linux Foundation
http://daniel-lange.com/archives/172-Gradual-improvements-at-the-Linux-Foundation.html
<p>After <a href="http://daniel-lange.com/archives/166-No-dog-food-today-the-Linux-Foundation-annual-report.html">last year's blunder</a> with trying to hide the Adobe toolchain and using hilarious stock photos, the Linux Foundation did much better in their <a href="https://web.archive.org/web/20211206213021/https://www.linuxfoundation.org/wp-content/uploads/2021_LF_Annual_Report_120621a.pdf">2021 annual report</a><sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> published Dec. 6, 2021.</p>
<p>Still they are using the Adobe toolchain (InDesign, Acrobat PDF) and my fellow <del>Debian</del>Kernel<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup> Developer Geert was quick to point that out as the first comment to the LWN note on the publication:</p>
<p><a class="serendipity_image_link" href='https://lwn.net/Articles/877844/' target="_blank"><!-- s9ymdb:679 --><img class="serendipity_image_center" width="611" height="389" src="http://daniel-lange.com/uploads/entries/211207_Screenshot_LWN_LF_Annual_Report_2021.png" alt="LWN comment from Geert"></a></p>
<p>I think it is important to call the Linux Foundation (LF) out again and again. Adobe is a Silver member of the LF and they can motivate them to publish their applications for Linux. And if that is not an option, there are Free alternatives like <a href="https://www.scribus.net/">Scribus</a> that could well use the exposure and funds of LF to help catch up to the market leading product, Adobe InDesign.</p>
<p><!-- s9ymdb:677 --><img class="serendipity_image_center" width="1704" height="770" src="http://daniel-lange.com/uploads/entries/211207_Screenshot_LF_Annual_Report_1.png" title="No "Sharp Zaurus XR-5000 (Maemo5) Edition" this time" alt="Linux Foundation Annual report 2021, document properties"></p>
<p>Personally, as a photographer, I am very happy they used stock images from <a href="https://unsplash.com/">Unsplash</a> to illustrate the 2021 edition over the cringeworthy Shutterstock footage from last year's report.</p>
<p>And they gave proper credit:</p>
<p><!-- s9ymdb:678 --><img class="serendipity_image_center" width="487" height="916" src="http://daniel-lange.com/uploads/entries/211207_Screenshot_LF_Annual_Report_2.png" title="Speling ihs hart" alt="Thank you section for Unsplash from the Linux Foundation 2021 annual report"></p>
<p>Now for next year ... find an editor that knows how to spell photographers, please. And consider Scribus. And make Adobe publish their apps for Linux. Thank you.</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">
<p>Update 07.12.2021 22:00 CET: I had to replace the link to the Linux Foundation 2021 annual report with an archive.org one as they updated the report to fix the typo as per the comment from Melissa Schmidt below. Stable URLs are not a thing, apparently. You can find their new report at <a href="https://www.linuxfoundation.org/wp-content/uploads/2021_LF_Annual_Report_120721c.pdf">https://www.linuxfoundation.org/wp-content/uploads/2021_LF_Annual_Report_120721c.pdf</a>. Unless somebody points out more typos. There is a <a href="https://datatracker.ietf.org/doc/html/rfc7232.html#section-2.2">Last-Modified Header in HTTP 1.1</a>. Wordpress, Varnish and Nginx, serving the LF website, all support that.
<!-- s9ymdb:682 --><img class="serendipity_image_center" width="1349" height="765" src="http://daniel-lange.com/uploads/entries/Diff_of_LF_2021_reports_120621a_and_120721c.png" title="The binary diff is 381 kB for s/phtoographers/photographers/. Found once." alt="Diff of 2021_LF_Annual_Report_120621a and2021_LF_Annual_Report_120721c"> <a href="#fnref:1" rev="footnote">↩</a></p>
</li>
<li id="fn:2">
<p>08.12.2021: Geert Uytterhoeven wrote in that he is "geert" on LWN, both are very nice Geert's but different Geert's :-) <a href="#fnref:2" rev="footnote">↩</a></p>
</li>
</ol>
</div>
Daniel Lange's blognospam@example.com (Daniel Lange)
Strategy, 2021-12-07T10:11:00Zhttp://daniel-lange.com/wfwcomment.php?cid=1722http://daniel-lange.com/rss.php?version=1.0&type=comments&cid=172dogfooddtplinuxmacmacosupdated