thefoggiest.dev

Vocabulary training

Growing up in the Netherlands, when I was in school, I needed to learn a lot of foreign vocabulary. Especially in the years between 12 and 15, each week I was asked to learn a list of about a dozen French, German or English words. It being the eighties, these lists were offered in books and learning them typically involved using a second book to cover one column and trying to come up with the correct translations of the words in the other one. It was a tedious process and my results were less than reliable, I remember.

Until, that is, my father installed a simple program on his MS-DOS PC. It was audaciously called “Overhoor”, which translates into English as the verb “Quiz”. It didn’t come with its own prepared vocabulary lists, so the first part of every session was typing in the words I needed to learn. Overhoor required simple comma separated files, like so:

one,een
house,huis
cup,kopje
saucer,schotel
bike,fiets
train,trein

The list could be trained both ways. Each incorrect answer was followed up both immediately and again later on, until I had got every word right at least once. At the end, Overhoor offered to redo the ones I got wrong in the same manner. With this program, learning vocabulary became easy and reliable. It greatly improved my grades.

Today, there are many vocabulary tutors available on the internet, mostly in the form of websites or Android/iOS apps. In my opinion, they all fail. Many have prepared lists, preventing the student to go through a vital step of the learning process. Some are made for smartphones, allowing the student to use waiting and travelling time to use for learning. To learn, you need focus and plenty of time, so phones are not suitable. Lastly, being “for free” and closed source means that these apps will collect data about you in some fashion, which means that your identity will be collected and traded.

The old MS-DOS program is still available on archive.org (actually, the link above leads to a newer version than I ever used) but starting DOSBox to learn vocabulary is not something I’m prepared to suggest to my children. So I wrote a simple python 3 script called voca that does exactly what my old MS-DOS tutor did. You can find it on my Codeberg-account. Put it somewhere in your path, like /usr/local/bin/ on Linux. Create a file with an arbitrary name (such as lesson1.csv) in a text editor (don’t use a word processor) with contents like above. Save it, then start voca using:

$ voca.py lesson1.csv

By default, it will use the first column as questions and compare your answers to the corresponding items in the second column. User arguments -s to swap the columns and -r to review all the questions and their answers before practising. If you prefer a different delimiter, use -d. Starting voca without any arguments will show a short help text.

I haven’t tried to run it using anything else than Linux, but if you have Python 3 installed, I can’t think of a reason why you couldn’t.

Have fun and let me know what you think, either on Codeberg or here.


Using RSS like it’s 2008

Looking at my recent blogging hiatus, you wouldn’t be able to tell, but I’m somewhat of an RSS enthusiast and have been reading and listening to content sent to me using RSS without pause during that time. RSS, short for Real Simple Syndication, is a subscriber protocol where clients, called aggregator applications, can periodically ask a centralised server for new content. It was developed first in 1999 but got traction in 2005 and something can be said for the claim that the golden age of blogging was made possible by RSS.

There are aggregator applications that you can install on your PC to collect your desired feeds. Outlook offers this functionality under RSS Subscriptions, so does Thunderbird. But like email, you’d typically want to have your feeds available on all, or most, of your devices, including read/unread information. When I first found out that blogs offered RSS feeds, I started using Google Reader for that purpose. It being a website, I could access it on any device I wanted. When Google Reader stopped in 2013, I installed Tiny Tiny RSS (TTRSS), which did exactly what Google Reader did, except for sending Google Waves. I also briefly looked at Feedly but remembered liking TTRSS better at the time.

RSS is used for more than hypertext, though, because the protocol does not specify what kind of content is spread. One notable example is your podcast feed. When you search for content in your podcast app, it will query online resources that return a link to an RSS feed, which your app will then periodically ask for new audio files and accompanying metadata, such as the episode title, notes and cover picture.

The downside of RSS from the viewpoint of content creators is that there is no reason for readers to visit the originating website. This makes it harder to keep track of users and expose them to ads and (tracking) cookies. This is why many feeds today only contain a summary or even just the title of a post, making the feed more into a notification system than a stream with content.

Apart from these abbreviated RSS feeds, sites nowadays prefer to offer their content as mailing lists. This way, they can control exactly what the reader is exposed to. Substack is a good example. While they offer RSS feeds, these only contain the first half of every post, making them unusable.

These mailing lists, however, do form a solution for the shortened RSS feeds. Online aggregators Feedly and NewsBlur can import emails from mailing lists and present them as regular RSS feeds. Kill the newsletter is an aptly named separate service to do the same thing if you use your own aggregator. TTRSS cannot do that by itself, but I found a nifty little python script called AtoMail that will transform an email that it gets passed into an RSS XML file. To use it, you need a way to automatically intercept the email and pass it to the script. I use procmail, which is unmaintained but also unsurpassed, and with a simple regex I can tell it how to recognise that mail and then what to do with it when found:

:0:
 * ^From:.*badastronomy@mail\.beehiiv\.com
 | /usr/bin/python /path/to/atomail.py --title 'Bad Astronomy' --uri='http://path/to/badastronomy.xml' /path/to/feeds/badastronomy.xml

This will create an XML from the body part of any email coming from the email address in line 2 and put the XML at a location on my computer. TTRSS can then subscribe to it and voilĂ , the mailing list is a fully fledged RSS feed again with complete articles, links and pictures but presented in my chosen font and my chosen lay-out.

In the case of the mailing list of badastronomy above, it even improves the reading experience since the mail is sent in a single small column made to look good on phones, which is unsatisfactory, since it makes the gorgeous astronomy images Phil Plait uses much too small to appreciate. This way I can enjoy them in their full glory while reading the text above and below it.

These mails also do no longer reach my inbox, so I won’t get the content in two places. AtoMail makes it that my email is now for two-way communication again (and bills of course) and interesting articles are in my RSS aggregator.

As it should be.

Post Scriptum: Beehive, who do Bad Astronomy’s newsletter, do provide an RSS feed. However, it doesn’t contain the so-called premium content which I’m paying for.


Privacy paradox

Today I stumbled upon this little gem:

I use uBlock origin and Pihole to make using the Internet less annoying. Seriously. Sometimes I am confronted with a colleague’s screen showing a browser that lets through all kinds of ad banners and I really cannot fathom how they could focus on a site’s content with all that flashing above, under, next to and between said content. Also, uBlock origin and Pihole block malicious content such as trackers, so the internet becomes a little bit safer and the privacy of anyone in my household a little less unlikely.

Websites as the one above I usually avoid but I seemed to have clicked a link somewhere that brought me there. So reading the above, I understand that since I care about my privacy (and act accordingly), this site can no longer show me a popup to ask me if I care about my privacy, which they really need to because I live in a jurisdiction that makes that mandatory.

I apologise, but you’re not making sense.

Also, I use Firefox, not Brave.


Youth news programme undermines itself

Growing up in rural Netherlands in the eighties, we used to have a newspaper subscription at home. From the age of about eight I watched the “Jeugdjournaal” (Youth news programme), together with my brothers and parents and slowly but steadily a social and political awareness grew among us kids.

Today it is our generation’s turn so at home we receive a printed newspaper at home every Saturday in an attempt to teach the children that they should get their news from there and not from apps on their phones. Of course, our children also watch the modern version of Jeugdjournaal, to get them used to sound news sources. While they are watching my wife and I are present for any necessary interpretation for images from Ukraine, Gaza, Yemen, Sudan and all those other conflicts that can come in a bit raw for young children. After all, they only know unpredictable explosives in residential areas from the time around New Year’s Eve.

Of course, though they look interested, they quietly look forward to whatever programme they can select afterwards, but that’s not the point. Halfway through one episode last month, I told them out of sheer annoyance that they could turn it off and watch something else. Yes, Ukraine was mentioned and the host also made an effort to explain that no news coming from a region doesn’t immediately mean that nothing is happening. But the timing was weird. Russia had just rained down unprecedented bombs there in the days before.

The rest of the programme was different. It included an item about draconian fines for Singaporean cat owners, a country that is known for harsh penalties anyway. Another prominent item was about a sixteen-year-old from the UK who proved successful in the world of darts, a sport from a context for which he seemed barely of age. This young man was presented as someone “who does what he wants” and “eats pizza every day”. The latter was even speculated as if it were the cause of his sport achievements. In addition to videos of the athlete as a child prodigy, we saw interviews with other athletes from the field and, repeatedly, with a bartender.

Top-level sport costs society a lot. It is sometimes unhealthy, leads to tribal violence and countless other problems, including a huge waste of resources and large emissions of waste and greenhouse gases. An important reason for the acceptance of these problems, in addition to perhaps the entertainment value, is that top-level sport can inspire young people. If that is the case, Jeugdjournaal was missing the point entirely.

The entire episode was in fact full of sports. Every other item was interspersed with it. Of course, sport has news value and will appeal to the target group, one that for Jeugdjournaal is undoubtedly difficult to retain because it has to compete with other media. Using free phone apps, news is offered to them a lot more barrier-free than a television programme could. The question, however, is whether it is wise to exchange the news for attractive entertainment, or whether it would be better to dive more into the content in order to make a clear distinguishing difference.

“Check dit dan” (Check this) is a regular section of Jeugdjournaal, in which entertaining videos are shown that have been plucked straight from Instagram, YouTube and other apps and which phone-owning children likely have seen already. The main motive behind this, in addition to an obvious laziness on the part of the editors, also seems to be an attempt to hold on to the target group. Once again, however, the wrong example is being set and Jeugdjournaal is undermining what one would think should have been its main mission.

What must my children think when they see this? If even the news is reaching for TikTok, why shouldn’t I?


How to annoy a developer

Let’s say you’re a developer and you’re tired and unfocused from that last meeting with your enterprise architect and you forgot how to create a new git branch. Trust me, it happens.

So you DuckDuckGo “git create branch” or something to that effect, you click on one of the first carefully SEOd links populating your screen and what you get is a page with this line on the top:

# git checkout -B branchname

I’m kidding of course.

What you get is a full blown 1.000+ word article that starts with how many people use git and an intermezzo about the origin of git with a short biography of Linus Torvalds. You try to focus on scrolling past that but can’t stop yourself from accepting every cookie anyone remotely affiliated with that particular website cares to track you with until the rest of your tiresome days, just because that banner covered half the page.

After it’s gone you are presented a very well-written couple of paragraphs (AI is getting better at this all the time) telling you which famous companies use git and by the time you think you must now really get to what you were looking for in the first place, you get a nice friendly popup offering you a low traffic (we are really only interested in your email address) mailing list, at which time you click your browser’s back button.

Not kidding anymore.

This is the experience of anyone trying to get some simple technical information they need quickly that they don’t use very often or that they simply forgot for a moment, like how to turn on hybrid line numbers in vim, or even something new they’re after. It’s annoying and frankly, immoral. Instead of just offering help, these sites are there to turn you into their product, to keep you on their site and steal your personal data.

:set rnu

You’re welcome.


Not helpful

DuckDuckGo’ing for “SAP4HANA REST API”, I landed on this very well SEO’d (first link from what are after all Bing results) but rather minimalist documentation page:

I’m afraid that when I click “No”, they’ll ask me to provide feedback.