dammIT - techhttps://dammit.nl/2023-12-21T22:10:40+01:00A rantboxTwenty years of blogging2023-12-21T20:23:40+01:002023-12-21T22:10:40+01:00Michiel Scholtentag:dammit.nl,2023-12-21:/twenty-years-of-blogging.html<p>Twenty years ago - not long after the turn of the century - I was tinkering with <a href="https://github.com/aquatix/dammit/commits/master?after=7a084bfa7c0e36f63d52c6cc2154fb68a20a6cd7+384&branch=master&qualified_name=refs%2Fheads%2Fmaster">some PHP code</a> to replace <a href="https://web.archive.org/web/20030829140416/http://aquariusoft.org/~mbscholt/">a static HTML page I had been experimenting with</a>. It was becoming my private website, in the classic sense of the word: where I put stuff I am interested in …</p><p>Twenty years ago - not long after the turn of the century - I was tinkering with <a href="https://github.com/aquatix/dammit/commits/master?after=7a084bfa7c0e36f63d52c6cc2154fb68a20a6cd7+384&branch=master&qualified_name=refs%2Fheads%2Fmaster">some PHP code</a> to replace <a href="https://web.archive.org/web/20030829140416/http://aquariusoft.org/~mbscholt/">a static HTML page I had been experimenting with</a>. It was becoming my private website, in the classic sense of the word: where I put stuff I am interested in, about who I am, and in this case also to introduce my homeserver called 'xcalibur', after the well-known sword of the King with his round table.</p>
<p>'Static HTML' is not entirely correct here; it was already a bunch of PHP pages, some of which even provided almost-realtime information about the system it was running on (see below).</p>
<p>At the time I was a Computer Science student at the Vrije Universiteit in Amsterdam, had just acquired the hardware of the 'xcalibur' server from an uncle that was into tech and photography (and smoking, I still remember the smell of the first few days of the tower running in our attic, venting his chain-smoking odours). It was intended to host a few websites and to tinker around with other networking stuff.</p>
<p>I wanted to exercise my English writing skills, and thought it fun to have an echo room out on the wild wild web. When Christmas holiday 2003 came around, I had some free time on my hands, <a href="https://dammit.nl/20031221-my-very-own-rantbox.html">implemented a MySQL-backed rant box</a>, and have been blogging ever since.</p>
<p>In <a href="https://dammit.nl/moved-to-pelican.html">the 2017 post where I described moving the weblog to Pelican</a>, I already wrote a small timeline and reasons not to use things like Wordpress (did barely exist when I started). It has always been my toy, my venting place, and my online documentation system, especially later on, when I started writing howto articles; mainly to condense what I had to research and fix recently, for future reference by myself and hopefully a few others.</p>
<p>I love having my own place here; it has always been independent from whatever platform-du-jour, has never been involved in ads, and has been a welcoming refuge for my thoughts. I certainly plan to keep it around for many years, and maybe have a few visitors enjoying my work :)</p>
<p>Twenty years I have been tending my own garden. I am really curious to how it will look in twenty years time.</p>
<p>For fun, here are some early posts in 2004, not much changed personally :D (<a href="https://web.archive.org/web/20040205135520/http://aquariusoft.org:80/~mbscholt/">Screenshot from the Internet Archive</a> with bigger font and slightly other list-styling than the original, so that's why the navigation looks cramped)</p>
<p><img alt="Weblog homepage in early 2004" src="https://dammit.nl/images/content/20231221_dammit_xcalibur_20040205_rantbox.png"></p>
<p>The homepage in november 2003, where I noted that I wanted to create my own weblog, but thought it too involved for what I had to say (not much, I thought):</p>
<p><img alt="XCalibur homepage in 2003" src="https://dammit.nl/images/content/20231221_dammit_xcalibur_20031124.png"></p>
<p>Real-time server information in november 2003 (fancy!):</p>
<p><img alt="XCalibur server info in 2003" src="https://dammit.nl/images/content/20231221_dammit_xcalibur_20031124_serverinfo.png"></p>On YouTube, adblocking, the state of our ad-driven internet2023-11-06T20:58:33+01:002023-11-06T20:58:33+01:00Michiel Scholtentag:dammit.nl,2023-11-06:/link-youtube-adblocking.html<p>Internet 'fundamentalist' Louis Rossmann on YouTube, adblocking and the state of the ad-supported internet that's currently our reality.</p>
<p>There are some good points made about how the internet turned to shit, basically because the race to the bottom we made with for example jumping on Gmail in 2004 with its …</p><p>Internet 'fundamentalist' Louis Rossmann on YouTube, adblocking and the state of the ad-supported internet that's currently our reality.</p>
<p>There are some good points made about how the internet turned to shit, basically because the race to the bottom we made with for example jumping on Gmail in 2004 with its free 1GB of storage for Free (except that Google reads all your mail for targeting/profiling purposes). People expect things on the net to be free and advertisements are the answer to journalists, videomakers and the like to still make some money. Except that nobody likes them, and that they enable the worst of content to bubble up, because clicks pay and haha look at this funny dog, awww cute cat, hey look, <a href="https://9to5google.com/2023/11/06/youtube-random-video-button-app/">a black button in the YouTube app</a> that starts an endless random stream of shorts; oh what a <em>bleeping</em> human being to act that way... What was I saying?</p>
<p>Ah yes, content we shouldn't maybe even be consuming in the first place (really, there's so much great material to read, watch and enjoy - grab a book for example).</p>
<p>The funny thing with Google and its penny-in-couch quest is that it so interestingly backfiring. Normal people weren't using adblockers; most didn't even know they are a thing. Now a lot of press coverage is generated, in true Streisand effect style, adblockers are in the spotlight and lot of people that were previously unaware of their existence are discovering they are a Thing, and they actually improve the experience in general. For free!</p>
<p>Adblocker-blockers aren't the answer. Nobody wants to see the mostly irrelevant, bad and badly-timed ads in videos and written articles alike, and having them shoved into our faces is not going to help. On the other hand, journalism costs money. Hosting is not free (not for written media and especially true for streaming video platforms), as is the time of people who try to make a living out of putting interesting and good material online for us to enjoy and learn from.</p>
<p>Going back to subscriptions can be an answer. Please make sure not to screw these up by still annoying people with things like advertisements while there already has been paid good money for the subscription. Also, we really do not need those computer-generated listicles, comparison sites with the most minimal effort that purely exist to generate revenue by affiliate links.</p>
<p>I think there's a place for quite a few paid services, as long as they actually facilitate good material (ugh, 'content') and adhere to the above. On the other hand, we need to solve the 1001-subscriptions problem. We have some hard problems to solve, but it's not the first time in human history we had to do just that, and I think working on a more enjoyable net for the Greater Good is feasible.</p>
<p>Or I am just still the naively optimistically utopian-thinking person that I tend to become when that side of me wins some brain time from my regular, more cynically-inclined character.</p>
<p>Oh, the anti-sponsor spot for Intuit Quickbooks is hilarious; what a bad piece of Intuit software. And people trust their money with them... Worth a watch just to oggle and grin at the weird bugs.</p>Tiktok's enshittification2023-01-28T20:49:33+01:002023-01-28T20:49:33+01:00Michiel Scholtentag:dammit.nl,2023-01-28:/link-tiktoks-enshittification.html<p><img alt="Potato" src="https://shuttereye.org/images/09/091189898998dd6c_2000-2000.jpeg"></p>
<blockquote>
<p>Here is how platforms die: first, they are good to their users; then they abuse their users to make things better for their business customers; finally, they abuse those business customers to claw back all the value for themselves. Then, they die.</p>
<p>I call this enshittification, and it is a …</p></blockquote><p><img alt="Potato" src="https://shuttereye.org/images/09/091189898998dd6c_2000-2000.jpeg"></p>
<blockquote>
<p>Here is how platforms die: first, they are good to their users; then they abuse their users to make things better for their business customers; finally, they abuse those business customers to claw back all the value for themselves. Then, they die.</p>
<p>I call this enshittification, and it is a seemingly inevitable consequence arising from the combination of the ease of changing how a platform allocates value, combined with the nature of a "two sided market," where a platform sits between buyers and sellers, hold each hostage to the other, raking off an ever-larger share of the value that passes between them.</p>
</blockquote>
<p>After a platform takes off because it actually is useful for its users it starts growing, it takes money from investors and/or business users, it starts dancing to their tune, and it's downhill from there for their users and then for their business users too, clawing back all the value for themselves.</p>
<p>Then they die.</p>
<p>Amazon is a good example, like the article continues to point out. For example, it used to have a block on an article's page that showed what else people buying this product, also bought. This was a great way of finding out interesting related products, or even better versions of the stuff that you just found.</p>
<p>Of course that's not a thing any more. You just get emails and ads trying to sell you the same product you just bought. Their search has never worked for me, and I've had an account there for decades. It's just ads.</p>
<p>They have stagnated, act really shitty to their employees and I have been done with them for years, and I hope more people will turn away from buying from/through them.</p>
<p>Anyway.</p>
<p>Apart from me needing to stop posting rambling posts late at night, just go read the article :)</p>Transplanting files and directories to other repository keeping Git history2023-01-12T10:26:47+01:002023-01-12T10:26:47+01:00Michiel Scholtentag:dammit.nl,2023-01-12:/transplanting-files-keeping-git-history.html<p>Recently, I wanted to split off a few files from a Git repository in which I keep notes to a repository of their own. Reason was that they served an entirely different purpose than the rest, so it made more sense to separate the two sets.</p>
<p>However, they had quite …</p><p>Recently, I wanted to split off a few files from a Git repository in which I keep notes to a repository of their own. Reason was that they served an entirely different purpose than the rest, so it made more sense to separate the two sets.</p>
<p>However, they had quite some commit history in the original repository, and I didn't want to lose that. Thankfully, I found a neat way of doing just that.</p>
<p>If your history is sane, you can take the commits out as patch and apply them in the new repository:</p>
<pre><code class="language-bash">cd repository
git log --pretty=email --patch-with-stat --reverse --full-index --binary -m --first-parent -- path/to/file_or_folder > patch
cd ../another_repository
git am --committer-date-is-author-date < ../repository/patch
</code></pre>
<p>In the <code>patch</code> file (which you can of course name however you like), you can edit the paths if you like before importing again in the other repository; it is just a text file with all the commits in email format. Editing paths is for example useful when you have files in some subdirectory, and now want them in the root of the new repository, or in another subdirectory, or rename the files altogether.</p>
<p>Alternatively, you can do it in one line (of course skipping any renaming this way):</p>
<pre><code class="language-bash">git log --pretty=email --patch-with-stat --reverse --full-index --binary -m --first-parent -- path/to/file_or_folder | (cd /path/to/new_repository && git am --committer-date-is-author-date)
</code></pre>
<p><a href="https://stackoverflow.com/a/11426261">source</a></p>vim, a true coding knight2022-12-10T13:05:40+01:002022-12-10T13:05:40+01:00Michiel Scholtentag:dammit.nl,2022-12-10:/song-about-vim.html<blockquote>
<p>Verse 1:<br>
In the land of the hackers,<br>
Where the code never sleeps,<br>
There's an editor that rules them all,<br>
The one they call Vim. </p>
<p>Chorus:<br>
Vim, Vim, the editor of choice,<br>
For those who crave speed and power,<br>
With its shortcuts and commands,<br>
It will make you a coding …</p></blockquote><blockquote>
<p>Verse 1:<br>
In the land of the hackers,<br>
Where the code never sleeps,<br>
There's an editor that rules them all,<br>
The one they call Vim. </p>
<p>Chorus:<br>
Vim, Vim, the editor of choice,<br>
For those who crave speed and power,<br>
With its shortcuts and commands,<br>
It will make you a coding tower. </p>
<p>Verse 2:<br>
Some may prefer GUI,<br>
But for us command-line kings,<br>
Vim is the way to go,<br>
Our editing lord and savior. </p>
<p>Chorus:<br>
Vim, Vim, the editor of choice,<br>
For those who crave speed and power,<br>
With its shortcuts and commands,<br>
It will make you a coding tower. </p>
<p>Bridge:<br>
From its humble beginnings,<br>
To its current might,<br>
Vim has proven its worth,<br>
A true coding knight. </p>
<p>Chorus:<br>
Vim, Vim, the editor of choice,<br>
For those who crave speed and power,<br>
With its shortcuts and commands,<br>
It will make you a coding tower. </p>
</blockquote>
<ul>
<li>(<a href="https://chat.openai.com/chat">GPT</a>)</li>
</ul>There is no “software supply chain”2022-09-19T21:54:40+02:002022-09-19T21:54:40+02:00Michiel Scholtentag:dammit.nl,2022-09-19:/link-software-supply-chain.html<p>Good piece on how a (hardware) supply chain is something completely different from the software stack what we tend to call a 'software supply chain', but which really is not.</p>
<p>The problem is mostly that the providers of the moving parts that people (read: companies) are so dependent on and …</p><p>Good piece on how a (hardware) supply chain is something completely different from the software stack what we tend to call a 'software supply chain', but which really is not.</p>
<p>The problem is mostly that the providers of the moving parts that people (read: companies) are so dependent on and want to protect, are not similar to the suppliers that in a hardware situation one has contracts with, and more importantly, pay. There's a lot of hobby love here instead, and not much appreciation.</p>
<p>Something I identify with:</p>
<blockquote>
<p>I just want to publish software that I think is neat so that other hobbyists can use and learn from it, and I otherwise want to be left the hell alone. I should be allowed to decide if something I wrote is “done”. The focus on securing the “software supply chain” has made it even more likely that releasing software for others to use will just mean more work for me that I don’t benefit from. I reject the idea that a concept so tenuous can be secured in the first place.</p>
</blockquote>Installing Firefox as a (real) .deb in Ubuntu 22.042022-09-18T13:56:28+02:002022-09-18T13:56:28+02:00Michiel Scholtentag:dammit.nl,2022-09-18:/firefox-deb-ubuntu-2204.html<p>Canonical has a crush on <code>snap</code>. I don't. In Ubuntu 22.04 they replaced the native Firefox package with a snap package, making it slow and limited. It doesn't have to be that way.</p>
<p>Mozilla's Firefox team has their own <a href="https://launchpad.net/~mozillateam/+archive/ubuntu/ppa">PPA for Firefox</a>. As they use the same package name …</p><p>Canonical has a crush on <code>snap</code>. I don't. In Ubuntu 22.04 they replaced the native Firefox package with a snap package, making it slow and limited. It doesn't have to be that way.</p>
<p>Mozilla's Firefox team has their own <a href="https://launchpad.net/~mozillateam/+archive/ubuntu/ppa">PPA for Firefox</a>. As they use the same package name as the snap-based one, you'll need to both remove the latter, and configure the apt package manager to keep using the PPA-provided version.</p>
<p>First, remove the Ubuntu snap-based Firefox:</p>
<pre><code>sudo apt purge firefox
sudo snap remove --purge firefox
</code></pre>
<p>Add the Mozilla PPA:</p>
<pre><code>sudo add-apt-repository ppa:mozillateam/ppa
</code></pre>
<p>Add a pin file to the apt configuration so it keeps using the 'real' build of Firefox provided by the Mozilla team instead of re-installing the snap.</p>
<p>To do this, create a file <code>/etc/apt/preferences.d/mozillateam.pref</code> and put the following in there:</p>
<pre><code>Package: *
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 1001
</code></pre>
<p>(You can do this by for example using the <code>nano</code> editor: <code>sudo nano /etc/apt/preferences.d/mozillateam.pref</code>), but you are of course free to use vim like me ^_^ )</p>
<p>Now you can install the right Firefox package:</p>
<pre><code>sudo apt install firefox
</code></pre>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Note that this PPA does not provide localised (translated) versions, so installing for example <code>firefox-locale-nl</code> will install the snap again. If you prefer a translation or another edition of Firefox, you can use the alternative install method discussed next.</p>
</div>
<h2>Or use the version provided by Mozilla.org</h2>
<p>Alternatively, you can use <a href="https://www.mozilla.org/en-GB/firefox/all/#product-desktop-release">the tarball from mozilla.org</a> and copy its contents to for example <code>/usr/local/bin/firefox/</code></p>
<p>For the sake of fun, lets say you want to run the Nightly version of Firefox. I've been daily driving this build for over 5 year now, and apart from a few minor hiccups here and there, it actually is serving me pretty well.</p>
<p>From the above download link, choose the <a href="https://www.mozilla.org/en-GB/firefox/all/#product-desktop-nightly">Firefox Nightly version</a> that's right for your machine and preferred language and download this <code>.tar.bz2</code> file, say to your <code>~/Downloads</code> directory.</p>
<p>Now, move that file to <code>/usr/local/bin</code>:</p>
<pre><code>sudo mv ~/Downloads/firefox-106.0a1.en-GB.linux-x86_64.tar.bz2 /usr/local/bin
</code></pre>
<p>(make sure the file name is for the version you downloaded, it's <code>106.0a1</code> today, but new versions keep magically appearing of course :) ).</p>
<p>Next, unpack this tarball (which is similar to a zip):</p>
<pre><code>cd /usr/local/bin
sudo tar xf firefox-VERSION.tar.bz2
</code></pre>
<p>This will create a <code>firefox</code> directory with all the files inside. Make sure this directory belongs to your Linux user: <code>sudo chown -R YOURUSERNAME. firefox</code>, so for example <code>sudo chown -R aquatix. firefox</code> while you are inside the <code>/usr/local/bin</code> directory as done above with the <code>cd</code> command. Now, Firefox will be able to write its own files, which enables the auto-updater to function like it should.</p>
<p>Lastly, create a .desktop file that causes Nightly to show up in your launcher. <code>nano ~/.local/share/applications/firefox-nightly.desktop</code>:</p>
<pre><code>[Desktop Entry]
Version=1.0
Name=Firefox Nightly
Name[fr]=Firefox Nightly
Comment=Browse the World Wide Web
Comment[fr]=Naviguer sur le Web
GenericName=Web Browser
GenericName[fr]=Navigateur Web
Keywords=Internet;WWW;Browser;Web;Explorer
Keywords[fr]=Internet;WWW;Browser;Web;Explorer;Fureteur;Surfer;Navigateur
Type=Application
#Exec=/usr/local/bin/firefox/firefox-bin -P MyNightlyProfile %u
#Exec=/usr/local/bin/firefox/firefox-bin %u
Exec=env MOZ_USE_XINPUT2=1 /usr/local/bin/firefox/firefox-bin %u
#Exec=env MOZ_USE_XINPUT2=1 MOZ_X11_EGL=1 /usr/local/bin/firefox/firefox-bin %u
Terminal=false
X-MultipleArgs=false
#Icon=/usr/local/bin/firefox/browser/chrome/icons/default/default128.png
Icon=/usr/share/icons/Papirus/64x64/apps/firefox-nightly.svg
Categories=GNOME;GTK;Network;WebBrowser;
Actions=ProfileManager;new-window;new-private-window;
MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;x-scheme-handler/chrome;video/webm;application/x-xpinstall;
StartupNotify=true
StartupWMClass=Nightly
[Desktop Action ProfileManager]
Name=Profile Manager
Name[fr]=Gestionnaire de profil
Exec=/usr/local/bin/firefox/firefox -P
[Desktop Action new-window]
Name=New window
Name[fr]=Nouvelle fenêtre
Exec=/usr/local/bin/firefox/firefox -new-window -P MyNightlyProfile
[Desktop Action new-private-window]
Name=New private window
Name[fr]=Nouvelle fenêtre privée
Exec=/usr/local/bin/firefox/firefox -private-window -P MyNightlyProfile
</code></pre>
<p>There are some added goodies in the above .desktop file, notably the Papirus icon theme icon (the <code>Icon=</code> line) and the few alternative <code>Exec=</code> lines. The one that is actually active (without the # in front) sets <code>MOZ_USE_XINPUT2=1</code> which enables touch input in Firefox, handy when your laptop (or 2-in-1 or tablet if you are lucky) has a touch screen.</p>
<p>The alternative with the <code>-P MyNightlyProfile</code> is an example to let you use a different profile directory for this Nightly edition of Firefox, so you can keep using regular Firefox and Nightly next to each other without having to worry that one will mess up the other's profile. Replace <code>MyNightlyProfile</code> with another name if you like, it's the directory name inside <code>~/.mozilla/firefox</code> that contains the settings, history, addons and such.</p>Why Everyone Needs a Blog2022-06-13T20:04:52+02:002022-06-13T20:04:52+02:00Michiel Scholtentag:dammit.nl,2022-06-13:/link-everyone-needs-a-blog.html<p><img alt="Value signals" src="https://dammit.nl/images/content/corp-to-humans-1-650x405.png"></p>
<blockquote>
<p>The easiest way to see how much you need a blog is to do this thought exercise. Imagine going back in time to a 21-year-old in 1952 and asking them what their opinions are, and where you could find a book of those opinions. Here’s what they would say …</p></blockquote><p><img alt="Value signals" src="https://dammit.nl/images/content/corp-to-humans-1-650x405.png"></p>
<blockquote>
<p>The easiest way to see how much you need a blog is to do this thought exercise. Imagine going back in time to a 21-year-old in 1952 and asking them what their opinions are, and where you could find a book of those opinions. Here’s what they would say.</p>
<p>(looking behind them before turning back) Um, are you talking to me? I don’t … why … why would anyone care what I have to say?</p>
<p>Many of you are thinking that right now, in 2022. Why would anyone want to know what you have to say? That right there is why you need a blog. It’s not the 1950’s anymore. You are not your resume. You are a human with preferences, interests, and opinions. And many of those will resonate with others in ways you can’t imagine before you put them out there.</p>
</blockquote>
<p>You have more to say than you think. Even things you might find trivial like 'I just fixed this simpel issue I had this and this way' might help people. My more popular blogposts still are the various howto's.</p>
<p>Also, for some reason, it can be very satisfying to have a little corner of your own, even though (it seems) you're only talking to yourself. It helps me focussing my thoughts, fleshing out ideas and the act of having finished an article or even an about page is very rewarding.</p>Home Assistant: wake-up light2022-04-07T21:55:52+02:002022-04-07T21:55:52+02:00Michiel Scholtentag:dammit.nl,2022-04-07:/home-assistant-wakeup-light.html<p>Today I was hanging around in #nlhomeautomation on IRC as one does, and for some reason we started talking about alarm clocks. I wake up with a self-built wake-up light that is triggered by my Home Assistant instance and manifests as a nicely glowing bowl on my night stand that …</p><p>Today I was hanging around in #nlhomeautomation on IRC as one does, and for some reason we started talking about alarm clocks. I wake up with a self-built wake-up light that is triggered by my Home Assistant instance and manifests as a nicely glowing bowl on my night stand that starts as dark red and slowly gains strength and transfers to a brighter white.</p>
<p>Add as script:</p>
<pre><code>alias: Wake-up light slowly more bright
sequence:
- service: light.turn_on
data:
rgb_color:
- 255
- 0
- 0
transition: 1
brightness: 1
target:
entity_id: light.wakeup_lamp
- delay:
hours: 0
minutes: 0
seconds: 2
milliseconds: 0
- service: light.turn_on
data:
rgb_color:
- 255
- 0
- 0
transition: 1
brightness: 3
target:
entity_id: light.wakeup_lamp
- repeat:
count: '6'
sequence:
- delay: '00:00:10'
- service: light.turn_on
data:
transition: 3
brightness_step: 10
target:
entity_id: light.wakeup_lamp
- delay: '00:00:01'
- service: light.turn_on
data:
rgb_color:
- 255
- 129
- 1
transition: 3
target:
entity_id: light.wakeup_lamp
- repeat:
count: '12'
sequence:
- delay: '00:00:10'
- service: light.turn_on
data:
transition: 3
brightness_step: 10
target:
entity_id: light.wakeup_lamp
- service: light.turn_on
data:
rgb_color:
- 255
- 191
- 0
transition: 3
target:
entity_id: light.wakeup_lamp
- repeat:
count: '04'
sequence:
- delay: '00:00:10'
- service: light.turn_on
data:
transition: 3
brightness_step: 10
target:
entity_id: light.wakeup_lamp
- service: light.turn_on
data:
rgb_color:
- 255
- 218
- 109
transition: 3
target:
entity_id: light.wakeup_lamp
- repeat:
count: '02'
sequence:
- delay: '00:00:10'
- service: light.turn_on
data:
transition: 3
brightness_step: 10
target:
entity_id: light.wakeup_lamp
mode: restart
icon: hass:weather-sunset
</code></pre>
<p>And then add an automation to trigger on a certain time, or whatever you want, and call a service with type "script" and the name of the above script.</p>The End of Infinite Data Storage Can Set You Free2022-03-28T20:20:05+02:002022-03-28T20:20:05+02:00Michiel Scholtentag:dammit.nl,2022-03-28:/link-end-of-infinite-data-storage.html<blockquote>
<p>The belief that we could save endlessly online turned us all into information hoarders. What society needs instead is better systems for preserving public knowledge.</p>
</blockquote>
<p>One interesting find from this article: <a href="https://perma.cc/">Perma</a> which minimises link rot by converting hyperlinks in scholarly documents into “reliable, unbreakable link(s) to an unalterable …</p><blockquote>
<p>The belief that we could save endlessly online turned us all into information hoarders. What society needs instead is better systems for preserving public knowledge.</p>
</blockquote>
<p>One interesting find from this article: <a href="https://perma.cc/">Perma</a> which minimises link rot by converting hyperlinks in scholarly documents into “reliable, unbreakable link(s) to an unalterable record of any page you’ve cited” (Perma’s website notes that more than half of all cited links in Supreme Court opinions no longer point to the intended page).</p>
<p>Also, <a href="https://amberlink.org/">Amber</a>, which automatically preserves snapshots of linked pages in case the original versions become unavailable.</p>
<p>I don't think (the current) Web3 will do much good here; the underlying ideas there are good, but currently it's mainly used for speculating with wild NFT's and using way too much energy because of the way it's designed.</p>
<p>Myself, I try to at least curate my life-log pics and our family pictures as soon as possible to have a half-decent collection. Tagging them would be great, but I think that's not going to happen.</p>Infrastructure automation: hype2022-03-01T14:24:47+01:002022-03-01T14:24:47+01:00Michiel Scholtentag:dammit.nl,2022-03-01:/infrastructure-automation-hype.html<p>This weekend we did a big migration of our stack at work to a new data centre and I am stoked about how our applications and their virtual machines are set up now. Quite a bunch is already automated and having a decent base image is such a nice thing …</p><p>This weekend we did a big migration of our stack at work to a new data centre and I am stoked about how our applications and their virtual machines are set up now. Quite a bunch is already automated and having a decent base image is such a nice thing to have.</p>
<p>One of the parts where I want to improve a bit more, is in the area of our CI/CD. Currently, some parts are still manual, which is of course not optimal. I want to start using <a href="https://www.fabfile.org/">Fabric</a> which is just super useful to do remote commands. A step further would be using something like <a href="https://pyinfra.com/">pyinfra</a> which is an alternative to <a href="https://www.ansible.com/">ansible</a> and is taking care of the state of the nodes too, by describing what you need them to function. For example <a href="https://python.plainenglish.io/deploy-your-python-app-on-remote-server-with-pyinfra-42753ada37ca">this article: How to Deploy Python App on a Remote Server with Pyinfra</a> has some examples of how to do just that, and being some kind of combination of Fabric and Ansible to try to combine the best of both worlds.</p>
<p>But maybe I should just play around with <a href="https://github.com/chrisgo/fabric2-example">this Fabric2 Example</a> first. Enough food for play^H^H^H^Hthoughts :)</p>Attention attenti-oh look, shiny2022-02-06T13:47:29+01:002022-02-06T13:47:29+01:00Michiel Scholtentag:dammit.nl,2022-02-06:/attention-attenti-oh-look.html<p>I have things to say about our attention spans, about how they are getting influenced by certain things, but I can't currently focus on typing a blog post so I guess it will be done later.</p>
<p><em>Adds to todo list</em></p>Mobile blogging2022-01-02T20:35:33+01:002022-01-02T20:35:33+01:00Michiel Scholtentag:dammit.nl,2022-01-02:/mobile-blogging.html<p>Today I cloned the <a href="https://github.com/aquatix/dammit.nl">dammit.nl repo</a> on my phone, as apparently I hadn't done that just yet. I had wanted to post a short blurp on December 31th saying goodbye to 2021, but I was fresh out of laptop.</p>
<p>I put it on my phone mostly to be able …</p><p>Today I cloned the <a href="https://github.com/aquatix/dammit.nl">dammit.nl repo</a> on my phone, as apparently I hadn't done that just yet. I had wanted to post a short blurp on December 31th saying goodbye to 2021, but I was fresh out of laptop.</p>
<p>I put it on my phone mostly to be able to quickly write quick thoughts or experiences from my pocket.</p>
<p>It reminded me of posts like <a href="https://dammit.nl/20031223-stunned.html">Stunned</a> - which I jotted back in 2003 using <a href="https://en.wikipedia.org/wiki/Graffiti_(Palm_OS)">Graffiti</a> on my Palm (<a href="https://the-gadgeteer.com/2000/09/24/sony_clie_peg_s300_review/">Sony Clié S300</a>) in the train back from watching Lord of The Rings, <a href="https://dammit.nl/i-remember-writing.html">I remember writing</a> from 2018, and <a href="https://dammit.nl/20140420-planet-mobile.html">Planet Mobile</a> that I wrote in 2014 which featured a bunch of my then-current gadgets.</p>
<p>Ah, memories.</p>Do it, do it now2021-12-20T13:48:32+01:002021-12-20T13:48:32+01:00Michiel Scholtentag:dammit.nl,2021-12-20:/do-it-do-it-now.html<p>I stumbled upon <a href="https://galaxycow.com/2021/12/19/breaking-things-down/">this post by Vermyndax</a> earlier today and felt the urge to type.</p>
<p>His problem is one that I'm familiar with; I don't pretend to have a magic answer, but I learned some tricks to get myself started.</p>
<p>First of all: I don't think it's weird to want …</p><p>I stumbled upon <a href="https://galaxycow.com/2021/12/19/breaking-things-down/">this post by Vermyndax</a> earlier today and felt the urge to type.</p>
<p>His problem is one that I'm familiar with; I don't pretend to have a magic answer, but I learned some tricks to get myself started.</p>
<p>First of all: I don't think it's weird to want to sort-of jump to the end result. It's generally the scratch to some itch, and it better start scratching right now :)</p>
<p>What I learned to do myself, is, well, just start, preferably with something enticing so it is a bit more easy to gear yourself up for it. Ask yourself: "What's needed to set this up?" and then do so right away, instead of drafting a functional design and losing yourself in endless details. Then if there's something blinking Hello World in your face, start adding small things to it. After a while of tinkering you find yourself with something that actually does something more like your intended goal, and then it's 'just' ( :))) ) a matter of iterating. Also, don't fool yourself that a hobby project needs to be 100% done; I don't think they ever will, and as long as the 80% is something usable and fun, you're totally fine.</p>
<p><img alt="Kermit Darkside Do It" src="https://dammit.nl/images/content/kermit-darkside.gif"></p>
<p>I have no idea if there's really any coaching on it, apart from the 'getting things done' ways; maybe looking into 'rapid prototyping' or 'agile development' is relevant here. I do believe that minimising the distractions around you and forcing yourself to start is at least one way of putting a potential hobby project into gear.</p>
<p>The next problem was basically overthinking the project, getting lost in a lot of details about <em>how</em> to do things instead of doing it.</p>
<p>I suffer the same, and sometimes an idea is marinating for months in the back of my mind until I sit down and act on it. I might do some research in the meanwhile, filling in some gaps of knowledge.</p>
<p>About your brain being scattered... I know the feeling. I think that's part of the "just start" thing here, do not think too much, and when you start doing the little tasks setting up the environment, try not to sidetrack yourself and hopefully some kind of positive feedback loops start hooking you for a bit.</p>
<p>Anyway, that's my ramble about a subject I'm also not all that good in as well, so take it as you like.</p>
<p>Back to work, I guess ^_^</p>
<h2>Addendum @ 2021-12-20 15:23</h2>
<p>A long long time ago I read <a href="https://randsinrepose.com/archives/nadd/">N.A.D.D.</a> and it opened my eyes. Together with me realising I can barely focus on a book anymore - something I used to be able to do for weeks on stretch - I think it's a sign of our times that attention spans are crumbling.</p>
<p>Still, I've found that it's not impossible to actually get some work done on a hobby. It generally takes a higher level itch for me to get started, but doing those tiny tasks to fix/do one thing at a time, having disabled most of notifications and other things in my peripheral view actually gets me a solid 15 minutes of hacking at a time! ;)</p>
<p>If it's the quiet that makes your brain start wandering, maybe put up some headphones and music that gets you humming. Music for me generally is a good way of at least getting a few parts of my brain aligned to focus on a task.</p>
<p>Meditating is not for me, it's too much of a rest :P (Maybe I really should allow myself to defocus more, I'm too wired into my gadgets that I often do not give my family enough attention). A thing that I <em>do</em> do, is taking a morning walk through the park. Having some fresh air in my face and seeing some fractal shapes in nature somehow quiets my mind a bit and helps me through the day.</p>
<h2>Addendum @ 16:06</h2>
<p>Multitasking does not exist. I'm terrible at it (hah, contradiction). I have to keep continuous notes to even get through the day. Maybe that helps, making a small text todo file.</p>
<p>Context switching is killing indeed, it's also a thing I try to soften by closing myself off with music.</p>
<p>The franticness one can encounter is being antsy to get going, I think? I know the feeling, and it aligns with the "just get the fsck started", because otherwise the nervous energy just spirals out of control and my mind is incapable of focusing on anything anymore.</p>
<p>I discovered <a href="https://obsidian.md/">Obsidian</a> a while ago and it's great, some kind of personal wiki and brain dump. Not only helps me put some notes about a topic into one place, but also do braindumps of other thoughts so I can forgot about them for a bit and think about the subject at hand.</p>
<p>Don't beat yourself up about not connecting (yet?) with the thing you want to learn. First: do you <em>really</em> want to learn it? If yes, maybe try doing something stupid and simple in it. Something that you go into with a "why do I even bother?", but it helps you get familiar with that strange syntax, and you actually get something accomplished, even though it's something to throw away right away (something else I can't do).</p>
<p>If, on the other hand, you suspect that maybe Swift is not a thing you want to learn after all, spend that nervous energy on something else that has been playing through your mind. Maybe in a few months you discover more appetite for it again, or you discover something new that captivates you a lot more.</p>
<p>Indeed, I think the last 30 years have not been good on our attention spans. Enabling DND and focus modes really is a good thing, and convincing yourself that FOMO is really not needed might help here. Hard, but ever since I just stopped cold turkey with Twitter, my favourite news app and some other sources, I actually have some braincycles left to function. Turns out, I don't miss all that many things. What I mean is, you will feel guilty anyway; choose what weighs more: feeling guilty about missing some tweets, or feeling guilty about not spending another evening tinkering with $hobby?</p>RQ Python queuing system2021-09-28T19:40:57+02:002021-09-28T19:40:57+02:00Michiel Scholtentag:dammit.nl,2021-09-28:/rq-queuing.html<p>You might be acquainted with the <a href="https://docs.celeryproject.org/en/stable/">Celery Distributed Task Queue</a>, which is a proven way to process vast amounts of messages. Messages containing tasks for your software stack to eventually finish doing, for example.</p>
<p>However, Celery is slightly cumbersome to set up (no rocket surgery, but the RabbitMQ message broker …</p><p>You might be acquainted with the <a href="https://docs.celeryproject.org/en/stable/">Celery Distributed Task Queue</a>, which is a proven way to process vast amounts of messages. Messages containing tasks for your software stack to eventually finish doing, for example.</p>
<p>However, Celery is slightly cumbersome to set up (no rocket surgery, but the RabbitMQ message broker that generally is advisable to use in concert can be hairy). Enter the <a href="https://redis.io/">Redis</a> memory DB and <a href="https://python-rq.org/">RQ</a>.</p>
<blockquote>
<p>RQ (Redis Queue) is a simple Python library for queueing jobs and processing them in the background with workers. It is backed by Redis and it is designed to have a low barrier to entry. It can be integrated in your web stack easily.</p>
</blockquote>
<p>Ensuring Redis to have decent <a href="https://redis.io/topics/persistence">persistence</a> is key of course, as you likely do not want to lose messages if they contain jobs that really need to be done. Enabling RDB + AOF will take care of that, so be sure to set those in the Redis configuration file.</p>
<p>Myself, I've been enjoying (!) myself implementing background tasks at work. It makes scaling of course so much easier and better, and RQ might say it's simple, but it's pretty complete with things like the FailedJobRegistry, where information about jobs that somehow did not complete (e.g., crashed for example) is kept, including stack traces. Pretty nifty, and helpful to have in our dashboard.</p>
<p>Anyways, recommended for when you're looking into making your (Python) software a bit more asynchronous, and/or you want to spread the load over multiple nodes.</p>The Pocket Challenge2021-03-21T15:49:54+01:002021-03-21T15:49:54+01:00Michiel Scholtentag:dammit.nl,2021-03-21:/pocket-challenge.html<p>Recently I installed a <a href="https://forum.xda-developers.com/t/rom-flo-deb-unofficial-lineageos-18-1-2021-03-06.3569067/">new, unofficial Nexus 7 2013 ROM</a> on my trusty old handheld. It practically revived the device for me, as previously it was crashing in a repeated way and I thought it was finally done with its (notoriously iffy) flash storage. Now it runs the latest version …</p><p>Recently I installed a <a href="https://forum.xda-developers.com/t/rom-flo-deb-unofficial-lineageos-18-1-2021-03-06.3569067/">new, unofficial Nexus 7 2013 ROM</a> on my trusty old handheld. It practically revived the device for me, as previously it was crashing in a repeated way and I thought it was finally done with its (notoriously iffy) flash storage. Now it runs the latest version of Android (11) with up-to-date security, something it does better than my recent-ish phone, which is a story on its own.</p>
<p>The Nexus 7 2013, the second generation that Google/Asus made, has an excellent size for reading in portrait: it fits exactly in my hand, in ways my Lenovo Duet doesn't. The latter is a great tablet in a lot of other ways, but reading leisurely is a thing the Nexus just does better.</p>
<p>In that vein, I installed <a href="https://getpocket.com/">Pocket</a>, which I have been using for nine years now to store articles to read later. If at all.</p>
<p>See, the latter is a bit of a problem. (continued after the image)</p>
<p><img alt="Screenshot of Pocket to-read list with 1382 unread articles" src="https://shuttereye.org/galleries/various/dammit/Screenshot_20210315-123132_Pocket.png"></p>
<p>Like most of you, I encounter a lot of interesting articles, whether on daily reading sessions, getting linked by others, or even recommended by Pocket itself. However, a lot of these discoveries happen at a time when reading a long-form piece is not the best thing to do (like during a short break from work, at the end of a trip with public transport, you name it). Into Pocket it goes. Not only does Pocket remember it for you, you can neatly tag it with relevant markers, and best of all: it presents it without the clutter of the original website, and remembers the position you were last reading it.</p>
<p>It's a great reading tool. It's also just like my bookmark archive: mostly write-only, meaning that its collection just grows bigger, and isn't used as much as I would have thought. To be fair, there is a total of just over 2900 articles in my account, so it's not like I did not read anything; I just could do better.</p>
<p>Seeing this amount again, made me decide to actually take a good look at those articles again. In the six days since installing the app on my tablet, I have read or skimmed over 130 items, mostly the somewhat shorter ones. However, I have put it as a challenge to myself to read some articles every day, so this treasure trove will finally gets the eyeballs it deserves.</p>
<p>Related: <a href="https://github.com/aquatix/pocketstats">I wrote a <code>pocketstats</code> thing some years ago</a> which, if ran daily, summarises ones progress through their collection.</p>The ineffectiveness of lonely icons2021-03-18T21:13:19+01:002021-03-18T21:13:19+01:00Michiel Scholtentag:dammit.nl,2021-03-18:/link-ineffective-icons.html<blockquote>
<p>If your target audience is a general population, you should not be using icons alone to convey anything meaningful. By doing so, you have made assumptions that are unlikely to be appropriate to a general audience.</p>
</blockquote>
<p>You should not assume icons or UI elements are known to your users, as …</p><blockquote>
<p>If your target audience is a general population, you should not be using icons alone to convey anything meaningful. By doing so, you have made assumptions that are unlikely to be appropriate to a general audience.</p>
</blockquote>
<p>You should not assume icons or UI elements are known to your users, as those really are a part of a world of knowledge and conventions that people have to be aware of.</p>
<blockquote>
<p>After more than a year of using her tablet to read Email, my mother had no idea the Gmail application can be used to write an email.</p>
<p>Why? Because after more than 12 months of using an application, she still failed to recognise two vital core-feature UI components. Because they were just fucking icons.</p>
</blockquote>How Facebook got addicted to spreading misinformation2021-03-18T13:12:18+01:002021-03-18T13:12:18+01:00Michiel Scholtentag:dammit.nl,2021-03-18:/link-facebook-responsible-ai-misinformation.html<blockquote>
<p>When I described the Responsible AI team’s work to other experts on AI ethics and human rights, they noted the incongruity between the problems it was tackling and those, like misinformation, for which Facebook is most notorious. “This seems to be so oddly removed from Facebook as a product …</p></blockquote><blockquote>
<p>When I described the Responsible AI team’s work to other experts on AI ethics and human rights, they noted the incongruity between the problems it was tackling and those, like misinformation, for which Facebook is most notorious. “This seems to be so oddly removed from Facebook as a product—the things Facebook builds and the questions about impact on the world that Facebook faces,” said Rumman Chowdhury, whose startup, Parity, advises firms on the responsible use of AI, and was acquired by Twitter after our interview. I had shown Chowdhury the Quiñonero team’s documentation detailing its work. “I find it surprising that we’re going to talk about inclusivity, fairness, equity, and not talk about the very real issues happening today,” she said.</p>
<p>“It seems like the ‘responsible AI’ framing is completely subjective to what a company decides it wants to care about. It’s like, ‘We’ll make up the terms and then we’ll follow them,’” says Ellery Roberts Biddle, the editorial director of Ranking Digital Rights, a nonprofit that studies the impact of tech companies on human rights. “I don’t even understand what they mean when they talk about fairness. Do they think it’s fair to recommend that people join extremist groups, like the ones that stormed the Capitol? If everyone gets the recommendation, does that mean it was fair?”</p>
</blockquote>
<p>I get a sense of incompetence of the company as a whole, and some individuals, of even trying to fix the fundamental flaws of the way the growth-maximalisation technology and frame of mind is messing with the world.</p>
<p>So many smart people, so much - even internal - research outcomes that point to the destructive ways the Facebook ecosystem manipulates the information people get and thus the way they think, and so much unwillingness in actually tackling those problems.</p>
<p>Also, the only goal Mark Zuckerberg has, is growth. No matter what.</p>
<p><a href="https://maya.land/responses/2021/03/16/facebook-is-worse-than-even-us-antis-thought.html">Thanks Maya for the find</a>.</p>architecture.md2021-02-28T15:03:26+01:002021-02-28T15:03:26+01:00Michiel Scholtentag:dammit.nl,2021-02-28:/architecture-md.html<blockquote>
<p>If you maintain an open-source project in the range of 10k-200k lines of code, I strongly encourage you to add an ARCHITECTURE document next to README and CONTRIBUTING. Before going into the details of why and how, I want to emphasize that this is not another “docs are good, write …</p></blockquote><blockquote>
<p>If you maintain an open-source project in the range of 10k-200k lines of code, I strongly encourage you to add an ARCHITECTURE document next to README and CONTRIBUTING. Before going into the details of why and how, I want to emphasize that this is not another “docs are good, write more docs” advice. I am pretty sloppy about documentation, and, e.g., I often use just “simplify” as a commit message. Nonetheless, I feel strongly about the issue, even to the point of pestering you :-)</p>
</blockquote>
<p>The case for adding a document to a project's source code repository, telling the ones interested in the code how things fit together, and where to start looking for certain functionality.</p>About Sci-Hub: A spiritual successor to Aaron Swartz is angering publishers all over again2021-01-21T10:06:29+01:002021-01-21T10:06:29+01:00Michiel Scholtentag:dammit.nl,2021-01-21:/link-sci-hub.html<p>I do not endorse piracy and stealing.</p>
<p>On the other hand, I always found it odd to have so much scientific results locked away behind paywalls, that are even prohibitive even for 'wealthy' western students/scientists, let alone people from third-world countries and such that could benefit greatly from, and …</p><p>I do not endorse piracy and stealing.</p>
<p>On the other hand, I always found it odd to have so much scientific results locked away behind paywalls, that are even prohibitive even for 'wealthy' western students/scientists, let alone people from third-world countries and such that could benefit greatly from, and likely build further upon those works.</p>
<p>Anyway, food for thought.</p>