TinyLög
avatar: 🚬
2025-04-04 Bonobo hoots
“Hoot” would be a nice term for short-form social media posts. The meaning it conveyed would be less complex than that of the bonobos, though: “Yada yada yada. Pay attention to me.”
Their meanings appeared different enough from those of their constituent calls that they seemed to count as nontrivial combinations. “High hoot and low hoot” was one of these. “Low hoot,” the team found, is often used in situations of high excitement, and appears to mean something like “I am excited.” “High hoot” is used when bonobos want to alert others to their presence and may mean “Pay attention to me.” But the combination of the two calls doesn’t simply mean “I am excited, pay attention to me”; instead, it conveys a more nuanced message. It is used specifically when another individual is putting on an aggressive display. The bonobo using this call combination might be trying to stop the other individual from displaying or get others in the group to pay attention to the caller, the authors suggest.
2025-02-22 Лайка browser
As they say, there are two hard problems in computer science: naming things and CSS. For my toy gemini browser, first I had to tackle CSS styling – it made me want to write Rust. So I decided to add DNS over TLS support – but the type design of the rust library I used made me want to (learn and) write JavaScript!
pub type TlsClientStream= TcpClientStream>>>;
In the meantime, as I’ve been eating my own dog food on the Geminispace, I also solved the naming. I reused the name I had given to my terminal browser, but anyways it’s a cache-hit. Lo and behold, Laika browser with all its glory:
When client authorization, input query submitting and proper response caching is implemented, it would be ready for testing on different operating systems and devices.
2025-02-15 More on line joining with calendar entries
On each interactive shell, I am reminded by the events of the day via calendar(1) command. Some things are worth remembering, and some are worth –as a poet articulates– keeping in mind like a nail.
But it always bothered me that the events were not being sorted by date. I quickly tried piping to sort(1), and since most of the entries have the year at the end, before piping I could copy it to the beginning and remove afterwards. However soon I noticed that it wouldn’t work as some entries occupied more that one line. And ended up with a long-standing TODO in my shell configuration, which I finally sorted out.
Here’s a snippet from `calendar.history`, saved as /tmp/calendar.demo:
01/03 Margaret Thatcher becomes the longest-serving British Prime Minister in the 20th Century, 1988 01/03 Benito Mussolini announces he is taking dictatorial powers over Italy, 1925 02/18 Joseph Goebbels delivers the Sportpalast Total War speech, 1943 12/19 Hitler becomes Supreme Commander-in-Chief of the German Army, 1941
Normally I use `calendar -A0` to display just today’s entries, but for demonstration purposes:
$ calendar -f /tmp/calendar.demo -W 365
18 Feb Joseph Goebbels delivers the Sportpalast Total War speech, 1943
19 Dec Hitler becomes Supreme Commander-in-Chief of the
German Army, 1941
3 Jan Margaret Thatcher becomes the longest-serving British
Prime Minister in the 20th Century, 1988
3 Jan Benito Mussolini announces he is taking dictatorial powers
over Italy, 1925
And the combination of line joining, sorting with year shuffling, and final line breaking:
$ calendar -f /tmp/calendar.demo -W 365 \
|awk 'NR==1 { x=$0; next }
/^\t/ { sub(/^\t/," "); x=x $0; next }
{ print x; x=$0 }
END { print x}' \
|awk '{ match($0,/[12][0-9]{3}/); print substr($0,RSTART,RLENGTH) $0 }' | sort -g \
|sed -E 's/^[0-9]{4}//;s/^/\t•/' | ufmt -s -w 99 | sed 's/^\t•//' | ufmt -p $'\t'
3 Jan Benito Mussolini announces he is taking dictatorial powers over
Italy, 1925
19 Dec Hitler becomes Supreme Commander-in-Chief of the German Army, 1941
18 Feb Joseph Goebbels delivers the Sportpalast Total War speech, 1943
3 Jan Margaret Thatcher becomes the longest-serving British Prime Minister
in the 20th Century, 1988
Edit(2025-02-16): Updated to find year anywhere, not just at the end.
awk '$NF~/^[0-9]{4}$/ { print $NF $0; next }9'
2025-02-02 Philosemitism
More and more I’ve been seeing a manifestation of samsāra where, after overshooting the targeted sweet-spot on the vicious cycle, one arrives at the opposite. To make things worse, the path to nirvāna does not look clear. The old paths are either bulldozed or gentrified.
2024-12-25 Deirdre of the Sorrows
I used to (almost) live for music – buying couple of albums per week, exchanging mixtapes of rarities and (later) chasing bootlegs through mailing lists and FTP servers. For some years now, I don’t really care for music.
I recently found out that some of those most candid recordings were originating from a KCRW FM radio programmer, who also taped each. And there’s a stream of those recordings, from late 80s through the 90s.
I’m not nostalgic (those who are so good with words, would give another word for it) but nowadays I enjoy listening to them. It’s like an interesting time machine to the heyday of avant pop – even occasionally calling people to write letters to Amnesty International, as “knowing that being seen changes things”.
Happy Christmas / Hanukkah / Holidays for those that celebrate, and a happy Festivus for the rest of us!
2024-12-05 A Taste of Armageddon
When we are bombarded with televised war news, I always remember that old Star Trek episode I’d seen as a kid. Ddg search still works good enough that I could find the name of the episode at first attempt – without AI assistance.
Unfortunately I couldn’t find an actively seeded torrent for that episode, and I’m no trekkie to download hundreds of gigabytes of old episodes. Also, I don’t understand why they tried to enhance the CGI effects.
2024-11-20 line breaks with fmt and translation tip with Shortcuts.app
I’ve always been bitten by the GNU-fmt and BSD-fmt beeing two separate programs with different flags. Luckily, there is gnu coreutils (brew install coreutils) with its g-prefixed (gfmt, gdate etc.) binaries. However, their line breaking algorithm falls ‘short’ with multibyte characters – terribly so with East Asian or Caucasian languages.
Instead of re-compiling with that patch, I switched to the coreutils rust port (brew install uutils-coreutils) with the u-prefixed binaries.
It’s handy to line-break for terminal output; and line-join for scripts that expect unbroken paragraphs, like this on-device translation shortcut:
alias translate-to-english='shortcuts run "Translate to English" --output-path - --input-path - |cat'
2024-11-06 Svendborg Poems
Du der du, sitzend im Buge des Bootes
Siehest am unteren Ende das Leck
Wende lieber den Blick nicht weg
Denn du bist nicht aus dem Auge des Todes.
— Berthold Brecht
Seated up in the boat's bows, as you
Notice the leak down at the other end
Better not turn your eyes away, my friend
For you are not outside Death’s field of view.
2024-10-27 Without nomberynge a man can do almost nothynge, with the helpe of it you maye attayne to all thyng
In 1538, Cromwell mandated that every parish should keep a register to record ‘the day and year of every wedding, christening and burying made ... and also there insert every person’s name that shall be so wedded, christened or buried’. People feared that it was a ruse for a new tax. The truth was subtly worse: it was an attempt to pin them down, to fasten social identity to irrefutable documentary evidence. Big data for the Leviathan.
I suppose this tradition continued via neo-Pythagoreans to Brethren of Purity and mystic commentaries of Abrahamic religions:
What mathematical heads can sense – and what the rest of us would do well to remember – is that at the bottom of number there is a holy mystery. Can something truly be the same as itself? (If so, it can be counted.) Numbers present us with the oscillation between likeness and difference, mathematics with a language that might bridge the human and divine. Adelard of Bath, who pioneered the translation of Arabic mathematical works into Latin in the 12th century, wrote that ‘all visible things are subject to number ... [which] is latent in the reality of things themselves.’ He quoted Xenocrates: ‘The soul is number moving itself.’ In premodern England, this soul was alive and kicking, present in the fingers, the grain of the tally, the geometrical line drawn in the sand. Number had a texture.
2024-09-09 Email reactions
TIL email reactions via Alex Schroeder’s post. I’m not sure if received reactions can be integrated into (neo)mutt without a separate database, but sending reactions would certainly be doable.
Google’s single-emoji approach looks saner. But for the time being, I think the proper way to compose reactions would be using both specifications inside a MIME multipart/alternative container.
Edit (2024-09-18):
- Implemented a converter in Rust. I couldn’t find a crate to mutate the MIME tree and had to use MIME part offsets to manually modify the message.
- Also tried Python, and found my Python to be rusty. But the `email` library doesn’t handle the new Content-Disposition header and injects unwanted stuff, and need to fallback to doing it manually. 😩
- Haven’t checked how to integrate with Neomutt yet.
2024-08-23 Why Bodhidharma came from the west
I’ve always felt Mahāyāna Buddhism’s influence on unorthodox western beliefs. But Kotyk’s book shows the other half of the interrelation, using primary sources.
2024-08-13 Steve Jobs on privacy
After an insightful talk, Steve Jobs gets a question from the audience about “probable privacy issues”. Although he was laying out a vision about future problems and solutions, he simply evades the question by saying “I haven’t heard a ton of issues concerning these giant databases knowing everything about us”.
2024-08-12 Olympics
It’s clear that the current clustering criteria do not produce a fair competition. The whole professional sports is optimised for the sponsors and broadcasters, even the gender controversies and the resulting enmity among groups with different viewpoints.
I didn’t watch any of the games except for the Turkey-Serbia air pistol mixed team event. Şevval İlayda Tarhan was as cool as her teammate.
2024-08-11 Hebrew alphabet
Spent the day learning how to read in Hebrew alephbet. If I can find time to practice couple of words per week, it might stick. Still need to find about the intricacies of the letters that sound the same in modern Hebrew, but got tired of the clickbait YouTube videos.
יְהִי אוֹר
2024-07-20 Pythagorean symbola
Formatting in gemtext was a challenge, the popular Lagrange browser cannot render the Arabic parts properly and with a TUI it’s mostly at the mercy of the terminal emulator.
Apart from the legends attributed to them, i think these are the only remnants from the Pythagoreans.
Later, people used these for utilitarian purposes like teaching rhetoric – as is the case with their mathematics, acoustics and philosophy.
As a side note, it reminded me of the Greek Anthology from Brautigan’s “Willard and His Bowling Trophies”.
2024-07-13 Firefox 128 and adtech
Why wasn’t this opt-in-by-default feature ‘advertised’ better, Firefox?
Edit (2024-08-09): Gems from 2017 Google ad strategy document
2024-06-19 Remembrance
Remembrance
>
When a pair of doves take wing
When roasted cloves smelling
Not something to remember, but
Out of blue, comes to mind
>
It was almost sunrise
You too, like all, would rise
Still drowsy perhaps
Your night comes to mind
>
Like the names of flowers I love
Like the names of streets I love
Like the names of all my loved ones
Your names come to mind
>
Hence the shame of comfy mattress
Hence the pensiveness of kisses
Meeting through holes of trellis
Your fingers come to mind
>
I've seen many loves, friendships
I've read historical heroisms
Solemn, simple, and befitting our times
Your behaviour comes to mind
>
When a pair of doves take wing
When roasted cloves smelling
Not something to forget, but
Can't help, comes to mind
>
— Melih Cevdet Anday (translation: sy)
2024-06-02 umlaut and diaeresis
They look the same, but their functional difference can be understood from word origins. One is from from German Umlaut, from um ‘about’ + Laut ‘sound’. The other is via Latin (denoting the division of one syllable into two) from Greek diairesis (διαίρεσης) ‘separation’, from diairein ‘take apart’, from dia ‘apart’ + hairein ‘take’.
An anecdote on The New Yorker’s diaeresis:
[S]he used to pester the style editor, Hobie Weekes, who had been at the magazine since 1928, to get rid of the diaeresis. She found it fussy. She said that once, in the elevator, he told her he was on the verge of changing that style and would be sending out a memo soon. And then he died.
>
This was in 1978. No one has had the nerve to raise the subject since.
2024-05-29 Prison Notebooks
I like how Gramsci’s “Quaderni del Carcere” resemble tinylogs.
Unelaborate in style, yet with a broad scope and a multitude of references to what others have written.
2024-05-24 Super Mario no jump challenge
I’m so not-a-gamer that I didn’t know that 3D Super Mario was even a thing until recently. Curious about the recent news, I’ve learnt enough to appreciate what they have been doing.
And that’s crazy! Not just half-a-button crazy, but four-parallel-universes crazy!
2024-05-22 CLI for macOS dictionary
Apple removed the calendar data from /usr/share/calendar with the previous release of their OS. Unless people download and put it in $HOME/.calendar from BSD repository, they wouldn’t know that on this day in 1813 Wagner was born in Leipzig or in 1973 Ethernet was first described.
I wouldn’t bet on them to provide a CLI for their DictionaryServices either. Here’s a binary that I use daily – from the shell with various aliases, and from vim based on 'spelllang's.
$ dictionary -d arab -d simplified -d german -d greek gemini
Greek - English (Stavropoulos Oxford Greek-English Learners Dictionary)
┄ Gemini | ˈdʒemɪnaɪ | n C (αστρολ.) Δίδυμοι.
German - English (Oxford German Dictionary)
┄ Gemini | BrE ˈdʒɛmɪniː, AmE ˈdʒɛməˌnaɪ | noun (Astrology, Astronomy) Zwillinge Pl.; Gemini Pl. see also Aries
Simplified Chinese - English (牛津英汉汉英词典)
┄ Gemini | BrE ˈdʒɛmɪniː, AmE ˈdʒɛməˌnaɪ | noun
① uncountable Astronomy 双子(星)座 shuāngzǐ(xīng)zuò
② uncountable Astrology (sign) 双子宫 shuāngzǐgōng [黄道第三宫]
③ countable plural Geminis Astrology (person) 属双子(星)座的人 shǔ shuāngzǐ(xīng)zuò de rén
Arabic - English (Oxford Arabic Dictionary - عربي-إنجليزي • إنجليزي-عربي)
┄ Gemini | BrE ˈdʒɛmɪniː, AmE ˈdʒɛməˌnaɪ | noun
⒈ (sign) بُرْج الجَوْزاءِ
⒉ (person) [من مَواليدِ بُرْجِ الجَوْزاءِ]
2024-05-21 Empires do not like rich islands with strong defences
Thasians had to demolish their walls at least twice: first, at the request of Darius I of Persia, and then by Athens. Empires do not like rich islands with strong defences.
2024-05-20 Gemini and rustls
Two simple things took me hours to sort out with rustls:
- Some gemini servers do not set the correct version bit for their self-signed X509 certificates (v3), and advertise an outdated version (v1) – which is against PKI recommendations. Rustls does not support it with the web PKI verifier.
- When trying to downcast and match the Arc<dyn Error> that rustls returns for the self-signed certificates, I was trying and failing to cast and match to the wrong Other error type.
Tried to add a GUI for fun. Although documentation is sparse, I was amazed how easy it was with iced-rs¹. There are still rough edges; settings, menus, dialogs, copy-paste and disk persistance is missing. I also need to dig into async integration etc, but the rapidly-putting-together-a-gui experience was way better than other (mostly immediate mode) options.
2024-05-15 Benshi
Surfing the small web more lately. Thought a little about the parallels between cinema and the web as media.
Benshi (弁士) were Japanese performers who provided live narration for silent films
Edit (2024-06-02): Related short video:
2024-05-13 kristall browser for gemini
I couldn’t find a good TUI gemini browser and installed kristall¹ browser. To build on macOS, you need to get the qt@6 libraries out of reach.
brew unlink qt make build/kristall brew link qt
Edit (2024-05-15): Also need this patch to render local gemtext
diff --git a/src/protocols/filehandler.cpp b/src/protocols/filehandler.cpp
index 32beeb0..1a8abda 100644
--- a/src/protocols/filehandler.cpp
+++ b/src/protocols/filehandler.cpp
@@ -28,6 +28,7 @@ bool FileHandler::startRequest(const QUrl &url, RequestOptions options)
QMimeDatabase db;
auto mime = db.mimeTypeForUrl(url).name();
auto data = file.readAll();
+ if (file.fileName().endsWith(".gmi")) mime = "text/gemini";
emit this->requestComplete(data, mime);
}
else if (QDir dir = QDir(url.path()); dir.exists())