vita nouva
It is intended more particularly for reference, especially on our walks and travels, we must take it up and put it down again after a short reading, and, more especially, we ought not to be amongst our usual surroundings (Nietzsche, digression, 1881). last written 3 days ago, 27 june 2026.
newest · random · oldest
leaf 2 of 6
the days · 159
202651 202560 202418 202320 20229
the diary in numbers
first leaf
24 aug 2022
latest
27 jun 2026 · 3d ago
average
307 words / entry
longest
2,259 words, 20 jun 2025
busiest month
jan 2026 · 21 entries
longest silence
92 days, feb ’24–may ’24
entries by year
20229
202320
202418
202560
202651
junes past · this month over the years
28 jun 2025 Myth of Phantom Thread (2017) 21 jun 2025 Portrait of a North African (1870) 20 jun 2025 A Raw Definition of Capitalism 14 jun 2025 Some resources on William-Adolphe Bouguereau 13 jun 2025 she understood the music 7 jun 2025 Kierkegaard on the Joy of Natural Science 6 jun 2025 What Would Kierkegaard Do? 30 jun 2023 Useful text I found online about Nietzsche 24 jun 2023 ScienceDirect overviews 11 jun 2023 Freedman's Pursuit of Purity 3 jun 2023 Trying history trees
202651 days

18:41 Readings the unwritten laws of Engineering

Reading (King 1944), such a fantastic book, I wish I read it earlier in my life, but I will still read again the future. I picked some from it here Interesting laws of Engineering but I stopped when I noticed that I was about to copy the whole book. A must read definitely.

References

  • King, W. J. (1944). The Unwritten Laws of Engineering. The American Society of Mechanical Engineers.

01:03 How a philosopher should be

will see as God might see, without a here and now, without hopes and fears, without the trammels of customary beliefs and traditional prejudices, calmly, dispassionately, in the sole and exclusive desire for knowledge, knowledge as impersonal, as purely contemplative, as it is possible for man to attain.

#Philosophy #Modus Vivendi #Bertrand Russell

01:38 Kant’s deontology

Kant’s deontology starts from a simple idea: morality isn’t about outcomes, vibes, or damage control, it’s about duty. An action is moral only if it could be willed as a universal rule and if it treats people as ends in themselves, not as tools. This is where autonomy comes in. So respecting someone means respecting their capacity to choose rationally. The moment you lie, you’re not just bending the truth, you’re hijacking another person’s decision-making. You’re feeding them fake inputs so they act the way you want, not the way they would choose if they actually knew what was going on.

Take a concrete, uncomfortable case: you know a man is cheating on his wife, and one day she asks you directly whether it’s true. From a Kantian perspective, lying to “protect her feelings” isn’t kindness, it’s paternalism. By lying, you deny her autonomy, you decide, on her behalf, that she shouldn’t know, that she can’t be trusted with the truth. Even if the truth causes pain, telling it respects her as a rational agent who has the right to make decisions about her own life with full information. That respect outweighs consequences. The ethical failure isn’t the discomfort that follows the truth but the quiet arrogance of thinking you’re entitled to rewrite reality for someone else. #Immanuel Kant #Deontological ethics #Philosophy

22:05 When it's hard to be superior yourself

Reading (Hoffer 2010)

../i/22:05/2026-01-30_22-05-53_screenshot.png

References

  • Hoffer, Eric (2010). The True Believer: Thoughts on the Nature of Mass Movements. Kalima, Abu Dhabi Authority for Culture and Heritage.

20:23 Hugo Build

My Hugo build was taking almost 10 minutes.

Today I finally sat down to fix it. Ran hugo --templateMetrics and the culprit was immediately obvious:

Template                          | Total Time | Calls
----------------------------------|------------|------
_partials/resolve-roam-links.html | 9m 15s     | 866
_partials/native-backlinks.html   | 6m 58s     | 630

I wrote these partials naively. Each one iterates through all pages to build a lookup table (ID → URL, ID → title), uses it once, then throws it away. With ~440 pages, this meant O(n²) complexity. Each page triggers ~440 iterations, so 440 × 440 = ~193,000 iterations just for the ID map. Catastrophic.

The fix was embarrassingly simple, Hugo's partialCached function. Build the lookup tables once, cache them, reuse everywhere.

Created three new cached partials:

  • global-id-map.html — ID → URL map
  • global-title-map.html — ID → title map
  • bib-data.html — bibliography parsing

Then rewrote the slow partials to call these with partialCached.

The build now happens in 1770 ms. 300x faster.

Remember kids, never rebuild data structures you can cache. #Programming

23:57 George Orwell's writing rules

George Orwell's writing rules are quite interesting:

(i) Never use a metaphor, simile, or other figure of speech which you are used to seeing in print.

(ii) Never use a long word where a short one will do.

(iii) If it is possible to cut a word out, always cut it out.

(iv) Never use the passive where you can use the active.

(v) Never use a foreign phrase, a scientific word, or a jargon word if you can think of an everyday English equivalent.

(vi) Break any of these rules sooner than say anything outright barbarous.

14:59 WannaCrypt and NSA

TIL I learn that the WannaCrypt incident was based on a exploit developed by the NSA:

In 2017, the NSA discovered that the software was stolen by a group of hackers known as the Shadow Brokers. Microsoft might have been informed of this and released security updates in March 2017 patching the vulnerability. While this was happening, the hacker group attempted to auction off the software, but did not succeed in finding a buyer. EternalBlue was then released publicly on April 14, 2017.

On May 12, 2017, a computer worm in the form of ransomware, nicknamed WannaCry, used the EternalBlue exploit to attack computers using Windows that had not received the latest system updates removing the vulnerability.: 1  On June 27, 2017, the exploit was again used to help carry out the 2017 NotPetya cyberattack on more vulnerable computers.

#Programming #Microsoft #CIA #I really hate Microsoft

17:48 John Chivington

Reading (Akash 2002):

../i/17:48/2026-01-26_17-49-00_screenshot.png

It's strange what he is saying, John Chivington is not considered a "hero" at all. #hisotry #United States of America

18:02 Early settlers used to call America "Israel"

TIL that early settlers used to call America "Israel" (Akash 2002).

../i/18:02_Early_settlers_used_to_call_America_"Israel"/2026-01-26_18-04-34_screenshot.png

#The right to sacrifice the other: the american genocides #Israel #Politics

18:54 Ceiling of Livery Hall in Drapers' Hall, London

References

  • Munir Akash (2002). The Right to Sacrifice the Other: The American Genocides. Riad El-Rayyes Books S.A.R.L..

13:43 Stop Scala suffering

I need to suppress all these Scala suffering posts. Moreover I need to reply some emails, I also need to learn how to perform Etude, Op. 25 No. 11, and I generally need to do more good things.

16:24 metals-build-import

Can we talk about how absolutely fucking ridiculous it is that I have to manually tell my language server to import a build that my build tool already compiled successfully? Like, SBT just sat there, downloaded all my dependencies, compiled my entire project without a single complaint, and then Metals (supposed to make my editor experience better, read this if you need to know my opinion about the name: read this if you need to know my opinion about the name) is over here acting like purecsv and shapeless are mythical creatures that don't exist. “Not found: object purecsv”? Really? Are you for real?? It's RIGHT THERE. You literally share the same project directory. Why do I need to remember some arcane M-x lsp-metals-build-import incantation every time I add a dependency or the moon enters the wrong phase? The whole point of LSP was to make this stuff seamless. #Scala

13:05 I hate Scala

If Scala has a million haters then I'm one of them.

If Scala has only one hater then that's me.

If Scala has no haters then I'm dead. #Scala

14:20 Software industry needs some standards:

RT: Software industry needs some standards:

Until software engineering adopts the same standards, certifications, consistency, and accountability as traditional engineering, along with real consequences, these arguments don’t hold much weight.

This entire modern industry was built on the opposite philosophy: agile. Move fast, break things. Ship iteratively with minimal design. Drop production? Just revert. Outage? Oops.

Software is still treated like a toy. It’s playdough in the hands of toddlers led by other toddlers. You might be among the 1% who do things properly.. but the other 99% don’t.

Related: Programmers and software developers lost the plot on naming their tools #Programming

15:23 Affairs part two

Part two of 21:02 About affairs.

So why is it a big deal whether it's punished structurally or not?

Because it actually has consequences. I will take forgiveness as a prime example, is forgiveness possible?. That question arrives too late and already assumes the wrong moral frame. The ethical question is not “can I forgive you?” but “what kind of world can exist after this?” And more precisely, who is now required to do the metaphysical labor of making reality continuous again?

So the person who breaks the structure gets to appeal to sincerity, remorse, growth, trauma, youth, confusion, loneliness, destiny. Meanwhile the person who was lied to is quietly conscripted into an ethical cleanup crew. If they forgive, they are mature. If they hesitate, they are bitter. If they refuse, they are cruel.

Let me iterate again over how affairs work, it does not just 'hurt', It reorganizes moral reality without consent. One person decides that continuity is optional and shared truth can be suspended temporarily and that another human being can live inside a partial fiction for an extended period of time aka unilateral world-editing.

And forgiveness is often proposed as a way to reverse that edit. But forgiveness cannot restore symmetry. It cannot un-know knowledge or make memory innocent again. At best, it offers a way to live with the fracture. At worst, it demands that the injured party perform moral theater in order to stabilize a structure they did not damage.

What people call forgiveness is often compliance dressed up as virtue. There is a strange ethical inversion at work. The one who violated trust is allowed complexity and their motives are examined, contextualized, humanized. The one who was violated is expected to be clean, generous, forward-looking, their anger is treated as a failure of character rather than a correct moral signal.

But doesn't refusing forgiveness keeps you trapped in the past? Well, being forced to live in a future built on unresolved falsity is not much better. Forgiveness that arrives before accountability is not healing, it is gaslighting with a moral accent.

There is no moral obligation to forgive someone who has restructured your world without consent.

Something that is often said also, is that, you gain "freedom" when you forgive, aka free yourself. freedom that requires denying the truth is not freedom but an amputation.

These are not tragedies because people feel too much or sensitive or love so much but ethical failures because someone decides that shared reality is negotiable. And once that line is crossed, the demand for forgiveness often becomes just another way to avoid paying the full cost of what was done.

Not every story needs reconciliation. Some need accuracy.

And accuracy, unlike forgiveness, does not care if it makes anyone comfortable.

“Writing is the soul's conversation with silence.”Franz Kafka

12:22 Scala did it for us

One of the oldest jokes in compi-sci/engineering communities is Bjarne Stroustrup's "I Did It For You All…", which basically states that, Stroustrup made C++ the terrible language it is, for the sake that engineers can make money out of using it (I'm unsure what's this strategy is called, but I saw sometimes people picking very obscure tech at work that they're the only ones familiar with it, so they can secure job security):

Stroustrup: Remember the length of the average-sized ‘C’ project? About 6 months. Not nearly long enough for a guy with a wife and kids to earn enough to have a decent standard of living. Take the same project, design it in C++ and what do you get? I’ll tell you. One to two years. Isn’t that great? All that job security, just through one mistake of judgment. And another thing. The universities haven’t been teaching ‘C’ for such a long time, there’s now a shortage of decent ‘C’ programmers. Especially those who know anything about Unix systems programming. How many guys would know what to do with ‘malloc’, when they’ve used ‘new’ all these years - and never bothered to check the return code. In fact, most C++ programmers throw away their return codes. Whatever happened to good ol' ‘-1’? At least you knew you had an error, without bogging the thing down in all that ‘throw’ ‘catch’ ‘try’ stuff..

Interviewer: But, surely, inheritance does save a lot of time?

Stroustrup: Does it? Have you ever noticed the difference between a ‘C’ project plan, and a C++ project plan? The planning stage for a C++ project is three times as long. Precisely to make sure that everything which should be inherited is, and what shouldn’t isn’t. Then, they still get it wrong.. Whoever heard of memory leaks in a ‘C’ program? Now finding them is a major industry. Most companies give up, and send the product out, knowing it leaks like a sieve, simply to avoid the expense of tracking them all down..

Interviewer: There are tools…..

Stroustrup: Most of which were written in C++.

Interviewer: If we publish this, you’ll probably get lynched, you do realise that?

Stroustrup: I doubt it. As I said, C++ is way past its peak now, and no company in its right mind would start a C++ project without a pilot trial. That should convince them that it’s the road to disaster. If not, they deserve all they get.. You know, I tried to convince Dennis Ritchie to rewrite Unix in C++..

Interviewer: Oh my God. What did he say?

Stroustrup: Well, luckily, he has a good sense of humor. I think both he and Brian figured out what I was doing, in the early days, but never let on. He said he’d help me write a C++ version of DOS, if I was interested..

Interviewer: Were you?

Stroustrup: Actually, I did write DOS in C++, I’ll give you a demo when we’re through. I have it running on a Sparc 20 in the computer room. Goes like a rocket on 4 CPU’s, and only takes up 70 megs of disk..

Interviewer: What’s it like on a PC?

Stroustrup: Now you’re kidding. Haven’t you ever seen Windows ‘95? I think of that as my biggest success. Nearly blew the game before I was ready, though..

Interviewer: You know, that idea of a Unix++ has really got me thinking. Somewhere out there, there’s a guy going to try it..

Stroustrup: Not after they read this interview..

Interviewer: I’m sorry, but I don’t see us being able to publish any of this..

Stroustrup: But it’s the story of the century. I only want to be remembered by my fellow programmers, for what I’ve done for them. You know how much a C++ guy can get these days?

Interviewer: Last I heard, a really top guy is worth $70 - $80 an hour..

Stroustrup: See? And I bet he earns it. Keeping track of all the gotchas I put into C++ is no easy job. And, as I said before, every C++ programmer feels bound by some mystic promise to use every damn element of the language on every project. Actually, that really annoys me sometimes, eve. I almost like the language after all this time..

I'm starting to feel that the Scala authors did the same thing. They did it for us all. #Scala #Programming

12:27 Languages and IDEs

If a programming language makes you feeling like it's necessary to use an IDE, then it's probably poorly designed, common examples are C#, Java, Scala. It's a lot of hassle to add a "dependency" for other project, for example, without doing a right click magic. In a good designed modular language, it's usually only an import statement #Programming

08:28

And then dying will be the end of something dazzling: dying will be one of the most important acts in my life. I’m afraid of dying: I don’t know what nebulae and milky ways await me ~Clarice Lispector

21:02 About affairs

People who have affairs always speak as if they are the first humans to discover desire. I've mistaken novelty for transcendence a lot of time as a kid, but I'm surprised adults do it more often as if the shelves are not already heavy with the corpses of people who thought they were special. There's no criminal psychology to answer for affairs (i.e. why people do it?) but literature (as well as gossip, religion, court records and living memories, but I'm talking literature for this) answered it unironically many times. One of the greatest answers IMHO is Anna Karenina, it's rarely discussed in the context of exceptionalism, which is what I would like to do.

Exceptionalism is the belief that rules are for other people. That patterns exist until I arrive. IMO affairs are not driven by desire which is (IMHO) common and boring. What drives affairs (I'm tired of implying that this is my humble opinion, so take it as an implicit from now on) is the conviction that consequences are negotiable if your interior life feels sufficiently profound.

Anna Karenina is not a story about love but about a woman who mistakes intensity for transcendence and sincerity for immunity. Anna does not think she is immoral she thinks she is honest. She thinks her suffering sanctifies her choices and that because her feelings are real, the structure of the world will rearrange itself around them. I used to think something similar, until I didn't (plot twist; the world does not).

Tolstoy was so damn merciless because reality is indeed merciless. Anna stepped outside the social order not quietly but so loudly, it acknowledge her pain as justification. The punishment is not divine or some sort of magic it's literally structural, just like mechanics (I need to assure you society does have dynamics, but maybe I can elaborate on that somewhere else. Or never.)

She lost anything socially speaking. Doors close. Rooms go quiet. People do not scream at her anymore. They simply stop seeing her as human. Vronsky does not turn evil but he turns finite. His ambition and pride assert themselves because love does not abolish psychology and for Anna’s identity, it collapses inward. People do not scream at her anymore because screaming still acknowledges a human subject. They simply stop recognizing her as one.

This is what structural punishment looks like, aka ontological downgrade. Anna becomes an inconvenience in the social grammar. A disruption. Something that makes others uncomfortable by existing. And discomfort is always managed by distance.

Vronsky does not become a villain (my guess is that it's a fantasy belongs to sentimental readers). However, like I mentioned, he becomes something much worse, finite. Psychology (or mind, for the lack of a better word) does not evaporate in the presence of passion. It waits then it collects its debt.

Now let's restate the obvious; the affair does not free her from social structure. It expels her from it. And outside structure there is no meaning, only exposure. Every glance becomes a trial and every silence becomes a verdict. Without shared norms, there is no shared reality.

This is why exceptionalism always fails. Not because society is vindictive, but because systems do not tolerate permanent exceptions. Anna believes her feelings should count as a new law and sadly laws are not persuaded by sincerity.

People love to say she was punished for loving too deeply. That is a so biased analysis. She was punished for believing depth conferred exemption and that her interior life outranked external order. For believing that because something felt necessary, it therefore was.

It's untrue that love destroyed her. Love survives all kinds of bad decisions. However, she mistook love for sovereignty. And, again, sovereignty claimed without structure always ends the same way: isolation, paranoia, collapse.

Now imagine the counterfactual people love to hide behind. What if she cheats and nothing collapses? What if the affair is civilized and almost elegant?

Structure is not only social but also epistemic. The moment one person knows, the system is already unstable, not emotionally but ontologically (very smart face emoji), knowledge is asymmetrical FYI. And asymmetry is unstable.

The one who knows becomes a structural weight by existing (even if no acts). They carry a truth that cannot circulate and truth that cannot circulate does not disappear but curdles. And the relationship no longer has a shared map of reality.

The cheated-on partner becomes something new that destabilizes systems simply by remembering. They do not need to accuse but you can say that just their knowledge changes the gravitational field for others.

Meanwhile, the cheater must now manage two realities; public continuity and the private deviation. This requires constant cognitive partitioning. A divided self is not tragic yet, but it is expensive and life becomes logistical, memory becomes selective, language bcomes strategic. and all of that over time erodes coherence aka entropy.

But actually let's suppose none of this erupts. Suppose everyone behaves impeccably. No confessions. No slips. Still, the structure has already changed.

The cheated-on partner now lives in a world where their perception is unreliable by design. They are expected to trust a narrative that excludes crucial data. Over time, this produces one of two outcomes: hypervigilance or dissociation. Either the world becomes a crime scene, or it becomes numb, both states love can not survive them.

People think tragedy requires exposure. It does not. Exposure is usually just the visible ending. The real punishment happens earlier, in structure. In the fact that once one person knows, the relationship is no longer a shared reality but a managed illusion.

This is why the fantasy of “no one gets hurt” is incoherent (I already proven that it is not possible). Hurt is not the metric, integrity is. And integrity, once breached, does not announce its departure. It simply stops doing its job.

Later, if you want structure, it looks like this:

  • First, asymmetry of knowledge.
  • Then, asymmetry of power.
  • Then, asymmetry of reality.
  • Then, slow institutional collapse of trust.
  • Then, either revelation or emotional extinction.

People expect a sudden strike, instead, things slowly wear away, and when that happens, no one feels guilty.

00:35 Flowers

Most people do not know how to gift flowers. Fewer still know how to receive them. Men usually perceive it a something that women like. And most women don't like flowers actually or have a reason for loving them but they blindly follow mimetic activity of how romance was introduced to them and how they define themselves as receivers of it. I love flowers, and to me, to give a flower is to acknowledge finitude. I believe that roses, or any kind of plant, is a lovely symbol of life, and maybe of death too. It lives, it decays, and in that decay it shows off what all presence is, something already in the process of leaving.

When I give someone a flower, I offer my presence in the same way; alive, fragile, and implicitly dying. Not as tragedy or sadness, but as truth. Life happens precisely because it does not last.

And life happens. Sometimes the symbol dies, sometimes the connection renews itself and another living thing appears between us (let that be you getting something else alive from me, like another rose), and this state of continuous maintainability of a relationship between two, is symbolized, to me, in the process of gifting, taking care, and reestablishing something that is alive.

To gift a flower, to care for it, to replace it after death and wither is how I run feelings towards anyone, or anything at all, sustained attention to something alive. #Modus Vivendi

  • [2026-02-13 Fri 01:20] I just noticed a Byron poem that relates to my notion of connection:

    So, we'll go no more a roving So late into the night, Though the heart be still as loving, And the moon be still as bright.

    For the sword outwears the sheath, And the soul wears out the breast, And the heart must pause to breathe, And love itself have rest.

    Though the night was made for loving, And the day returns too soon, Yet we'll go no more a roving By the light of the moon.

11:20 Why can't I Some() directly?

A question that I had while reading Scala specs, is that why do we need Some at all? When we return an option of T, we are usually returning Some(T) or Nothing. But why not T or Nothing directly? I didn't see anything that makes Some make sense to me so far, other than it add an absence notation context (this is to say, that Some(T) means T in the context of the possibility of absence of T).

The reason that I found so far is that there is no runtime discriminator, which is basically a JVM limitation;

A runtime discriminator is data that tells you which alternative you have. Option looks like this:

sealed trait Option[+A]
case class Some[A](value: A) extends Option[A]
case object None extends Option[Nothing]

At runtime, an Option[A] value is either:

  • an instance of Some, or
  • the singleton object None

That class identity is the discriminator.

Pattern matching works because the JVM can ask:

isInstanceOf[Some[_]] ?
isInstanceOf[None.type] ?

Now remove Some and None

def findT(id: Int): T | Nothing

The issue here is that there is no value of type Nothing. It's compile-time only. I would even imagine that the type erasure in the JVM makes all the following equivalent:

User
User | Nothing
Option[User]

#Scala

07:10 Rules for a happy life from Aristotle

Reading Aristotle’s 10 Rules for a Happy Life - The Atlantic (link). Why there's always that strange tendency for journalist to a reference study from a psychology journal or a a science journal after everything? I'm not expecting Aristotle's views to supported by the APA, moreover, most of the links are really irrelevant, it's almost like he/she just needed to have some blue-colored words .

10:25 There are two main problems with exceptions

The book Functional Programming with Scala mentions two main problems with exceptions:

  • Exceptions are not type-safe. The type of failingFn, Int => Int tells us nothing about the fact that exceptions may occur, and the compiler will certainly not force callers of failingFn to make a decision about how to handle those exceptions. If we forget to check for an exception in failingFn, this won’t be detected until runtime.
  • Java’s checked exceptions at least force a decision about whether to handle or reraise an error, but they result in significant boilerplate for callers. More importantly, they don’t work for higher-order functions, which can’t possibly be aware of the specific exceptions that could be raised by their arguments. For example, consider the map function we defined for List: def map[A,B](l: List[A])(f: A => B): List[B] This function is clearly useful, highly generic, and at odds with the use of checked exceptions—we can’t have a version of map for every single checked exception that could possibly be thrown by f. Even if we wanted to do this, how would map even know what exceptions were possible? This is why generic code, even in Java, so often resorts to using RuntimeException or some common checked Exception type.
  • As we just discussed, exceptions break RT and introduce context dependence, moving us away from the simple reasoning of the substitution model and making it possible to write confusing exception-based code. This is the source of the folklore advice that exceptions should be used only for error handling, not for control flow.

If I'd name a single thing that turns me down from using a certain language, it would be definitely exception handling. #Exception handling #Programming #Scala

11:22 Scala will prefer LUB

Interestingly, Scala will prefer LUB type of an expression instead of doing a type union or doing Either , so:

  val result = if (true) "what?" else 4

result type here is Any instead of a union or Either type (like String | Int). Scala 3 solves a bit of this with type unions:

  val result: String | Int = if true then "what?" else 4

#Scala

12:44 Scala the good the bad and the ugly

Scala the good the bad and ugly. Most of the mentioned problems in "bad" were radically solved by the way the Go programming language was design. It's strange that in the last two decades, no language designers were able to design something strict that prevents these issues, other than the Go designers. #Scala

15:34

My dear God. Was that really necessary?

../i/15:34/2026-01-18_15-39-46_screenshot.png

Could we live without some 'magic'?

15:35 Liquid Glass

I just disabled liquid glass from my MacOS 26 machine, and I found out that Apple includes all the old features that were removed with apple glass, see for example "compact mode" in Safari:

../i/15:35/2026-01-17_15-38-30_screenshot.png

Maybe a kind of Bug compatibility. #Apple Glass

17:17 recursion in Scala

Avoid writing the following form of recursive functions:

def fib(n: Int): Int =
  if (n <= 1) n
  else fib(n - 1) + fib(n - 2)

This usually cause exponential time even when optimized. Imagine a call to fib(n) goes as follows:

fib(n)
├─ fib(n-1)
  ├─ fib(n-2)
  └─ fib(n-3)
└─ fib(n-2)
   ├─ fib(n-3)
   └─ fib(n-4)
  • fib(n-2) is computed twice
  • fib(n-3) is computed three times
  • fib(n-4) is computed five times

Instead, you should use a local tail-recursive helper:

def fib(n: Int): Int = {
  @annotation.tailrec
  def loop(i: Int, prev: Int, curr: Int): Int =
    if (i == 0) prev
    else loop(i - 1, curr, prev + curr)

  loop(n, 0, 1)
}

Now, something important to note here, if someone changes anything in the function call, it will break, silently. Moreover, the meaning of prev / curr isn’t obvious from the signature, which is important in functional programming; the invariant is not enforced by the type system. This is usually acceptable because:

  • loop is local → no external caller can misuse it
  • The invariant is encapsulated, not exposed
  • The outer API fib(n) remains clean and total

#Scala

17:25 Currying

"This is named after the mathematician Haskell Curry, who discovered the principle. It was independently discovered earlier by Moses Schoenfinkel, but Schoenfinkelization didn’t catch on." Lol. #Mathematics

13:46 Hearing from the wrong people

RT: there's this kind of hilarious thing that happens where the people who I most want to hear from and would totally clear my schedule to talk to are very cautious about respecting my time, but often the people who I am least enthusiastic to talk to feel the most ownership over it. #Modus Vivendi

19:11 When you buy pleasure

When you buy pleasure. Posting a very strong letter from Tanjia Rahm to her old customers. I wrote before about the pornography industry, and I'm wondering whether the same message of degradation can be used for the former consumers. I doubt, however, that consumers of both kinds are moved at all by someone denoting that what they're consuming is, indeed, fake.

“All moments exist simultaneously in memory.”Ibn Arabi

12:34 Gratitude

I want to express gratitude for God for he made me read Les Passions de l'âme a long time ago. I've made an Anthology of Les Passions de l'âme before, but I think I need to revisit it soon again. #Modus Vivendi

03:08 Scala's multiple parameters

Multiple parameter lists are weird in Scala. I could only think of a good use of them as:

// by Knut Arne Vedaa
// Retrieved 2026-01-14, License - CC BY-SA 2.5

scala> def foo(as: Int*)(bs: Int*)(cs: Int*) = as.sum * bs.sum * cs.sum
foo: (as: Int*)(bs: Int*)(cs: Int*)Int

scala> foo(1, 2, 3)(4, 5, 6, 7, 9)(10, 11)
res7: Int = 3906

Scala author suggest it's useful with complex type inference situation, but I can't think of any. #Scala #Programming

11:14 Scala's exceptions

Apparently Scala handles exceptions pretty well, and you can even have kind of a type-safe partial-functions using something like the Try call. #Exception handling #Scala

15:22 Scala's companion types

One of the things some websites add as a reason to use companion types in Scala, is that not having the "new" keyword is cool. Since when we drop language specifications on their level of coolness? #Scala

02:58 Private life of Thomas Jefferson

I'd have never known that reading about a president's private life will help me understanding the nonidentity problem. Also why Thomas Jefferson's privates are well documented like that? #Philosophy #Power imbalance (and the Jefferson-Hemings example)

23:44 Kierkegaard Twitter Bot

I was inspired recently by the Clarice Lispector twitter bot to create something similar for Kierkegaard. For a non-anthology author like him (and her, Clarice, too in fact), it was a bit difficult to imagine how this will work, how can you cut sentences randomly so they make some context, not that full and not that ambiguous? The raw materials were three source files: a 594KB EPUB of Either/Or, an 825KB EPUB of personal journals and papers, and a 507KB text file of selected writings. Together, they contained over a million words. Not every sentence in a philosophy book is quotable. Chapter headings, footnote markers, translator notes, and incomplete fragments vastly outnumber the gems. A naive approach of random selection would produce mostly garbage: "See vol. II, pp. 234-256" or "Continued from previous section".

So I designed a relatively simple filtration,

private val philosophicalKeywords = Set(
  "soul", "despair", "anxiety", "freedom", "faith",
  "existence", "dread", "passion", "eternity", "infinite",
  "spirit", "silence", "god", "death", "suffering",
  // 180+ more terms...
)

def score(text: String): Int = {
  val keywordCount = philosophicalKeywords.count(kw => lower.contains(kw))
  val keywordScore = math.min(25, keywordCount * 4)
  
  val lengthScore = text.length match {
    case l if l <= 120 => 25  // ideal length
    case l if l <= 150 => 22
    case l if l <= 200 => 15
    case _ => 5
  }
  
  keywordScore + lengthScore + rhetoricalScore + structureScore
}

on top of which a kind of an intelligent quote (shall I call it IQ?) scoring;

  • keywords (180+ terms like "despair", "anxiety", "faith", "existence")
  • Rhetorical patterns (semicolons, em-dashes, contemplative ellipses)
  • Length optimization (60-150 characters scores highest)
  • Aphoristic bonus (short quotes with multiple keywords get extra points)

Shorter quotes with words like "existence" bubble to the top. After running this on all three source files, I got 15,455 quotes sorted by quality. Top score: 81. They're available in the source control if you are interested to have a look: github.com/larrasket/kierkegaa… #Programming

16:31 Other intelligence note

I realized that most people confuse Intelligence Science to be about how a person perform in a success matrices and day-to-day life. However, most intelligence studies I've read were much more focused on abstract intelligence, without any perspective to any other life areas. For instance, someone might be just very intelligent but they're in not interested in these perspective that define the success metric for most people. Moreover, I've met enough successful people in life to be able that even that metric has absolutely nothing to do with abstract intelligence but with some agreed-on facts that most people simply ignore. Take drinking water for example, most people do not take this seriously, and definitely no studies will ever show that drinking enough water usually has to do with being intelligent, since they're interested in, again, abstract type of intelligence, however, drinking water regularly has many other effects, like good health and clearer mind in general, which both definitely do affect what people take for intelligence, or the aforementioned metrics. #Modus Vivendi

03:59 Dorothy Day Letter to Forster Batterham

Dorothy Day's letter to Forster Batterham. What can I say, it's just so beautiful. عتاب جمل: 10 Dec, 1932.

Dear Forster.

I got your letter Friday afternoon and I’ve been pondering since whether or not to answer it. It doesn’t seem much use, but still I can’t let some of your statements go without telling you what I feel.

As to my feeling about sex, I do indeed now feel that sex is taboo outside of marriage. The institution of marriage has been built up by society as well as the Church to safeguard the home and children as well as people who don’t know how to take care of themselves. Of course anyone who is sane and sound mentally will agree that promiscuity and looseness in sex is an ugly and inharmonious thing. You have always in the past treated me most casually, and I see no special difference between our affair and any other casual affair I have had in the past. You avoided, as you admitted yourself, all responsibility. You would not marry me then because you preferred the slight casual contact with me to any other. And last spring when my love and physical desire for you overcame me, you were quite willing for the affair to go on, on a weekend basis.

Sex is not at all taboo with me except outside of marriage. I am as free and unsuppressed as I ever was about it. I think the human body a beautiful thing, and the joys that a healthy body have are perfectly legitimate joys. I see no immediate difference between enjoying sex and enjoying a symphony concert, but sex having such a part in life, as producing children, has been restricted as society and the Church have felt best for the children.

I believe that in breaking these laws one is letting the flesh get an upper hand over the spirit, so I do not want to break these laws.

St. Augustine says, “If bodies please thee, praise God on occasion of them.” And I feel no sorrow for all the joys we have had in the past together.

When I laughingly spoke about many a young girl holding out—you should have understood what I meant. You seem to think that one should always succumb immediately to any promptings of the flesh, and you think of it as unnatural and unhealthy to restrain oneself on account of the promptings of the spirit. What I meant was that many people in the past have observed the conventions and rules, for the sake not only of convention but of principle. It is hard for me to talk to you seriously,—you despise so utterly the things which mean so much to me. I wish you’d read more of Aldous Huxley, and imbibe a little of his rational tolerance.

You think all this is only hard on you. But I am suffering too. The ache in my heart is intolerable at times, and sometimes for days I can feel your lips upon me, waking and sleeping. It is because I love you so much that I want you to marry me. I want to be in your arms every night, as I used to be, and be with you always. I always loved you more than you did me. That is why I made up with you so many times, and went after you after we had had some quarrel. We always differed on principle, and now that I am getting older I cannot any longer always give way to you just because flesh has such power over me.

Of course I understand your allusion to smoking and drinking and such indulgences, and as I said before, I do agree with you and would give them all up for you. I really don’t think I over-indulge very often. I consider drink only sinful inasmuch as it affects one’s health, and I’m most ashamed for every time I do over-indulge. Sex and eating and drinking may easily be put in the same class since they are both physical gratifications. Still, even the slightest sexual lapse may have terrible and far-reaching consequences and so these laws have been built up. Of course all intelligent people can say—Oh, I’m so smart this doesn’t apply to me, but I think that such laws, whether one considers them human or divine, have to be obeyed by all. It all is hopeless of course, tho it has often seemed to me a simple thing. Imaginatively I can understand your hatred and rebellion against my beliefs and I can’t blame you. I have really given up hope now, so I won’t try to persuade you any more.

Dorothy

Her words are so alive, so honest. (Usher 2016)

04:10 From: “Marcel Proust to Jacques Porel”.

From: “Marcel Proust to Jacques Porel”

“I envy people who are capable of uttering such cries that, at first, I thought someone was being murdered, but I realized what was happening when the woman’s cries quickly resumed an octave below the man’s, and was reassured.”

Relatable.

References

  • Shaun Usher (2016). Letters of Note: Sex. Canongate Books.

15:51 about Sara Hegazy

Revisiting the Sara Higazy incident today. I was participating in the discussion of deleting her Wikipedia page. This was around 6 years ago. Back then, the whole story struck me with an intensity I can’t quite reconstruct now. I remember feeling genuinely shaken, moved in a way that felt deep and urgent. Today, the sadness is still there, but it’s quieter, more distant, almost abstract. What I can’t fully explain is why it affected me so strongly at the time.

The sexual rights movement, which once felt like a defining moral battlefield, feels to me now as a strangely disproportionate to the scale of suffering and disorder in the world. Not wrong, exactly, just small. Almost trivial when placed beside poverty, war, genocide, poverty again, and the quiet, grinding injustices that shape most human lives. I’m surprised, in retrospect, that Sara herself, someone from a relatively ordinary, middle-class background, would stake so much of her life, and ultimately lose it, over something that now feels so marginal.

There’s also something uncomfortable in admitting this: maybe what moved me then wasn’t Sara alone, but the version of myself who needed her story. A younger self, more eager for clean moral lines, more convinced that tragedy must always point toward meaning. Nietzsche taught me that this is not always the case.

Now, older and less certain, I’m left with grief stripped of narrative payoff. No lesson neatly learned, no cause vindicated—just a human life that encountered the full weight of cruelty and didn’t survive it. #Politics

16:32 Qad saqānī min lamāh

Qad saqānī min lamāh Khamratun tughaddī sanāh Sirtu lā a‘shaqu siwāh Wa tajallā fawqa ṭūrā

Wa intathā waraqu al-khayāl Wa badā badru al-jamāl Wa ghadā fī al-kulli ghāl Bi-bahā’in wa surūrā

Nūruhu lā zāla ‘ālī Baḥruhu fayḍu al-kamāl ‘Aṭfuhu ‘inda al-wiṣāl Laḥẓuhu sayfan batūrā

Khaddahu nāru al-ma‘nā Ḥarruhā lil-ṣabbi janna Farquhu rawḍātu janna Fīhi anwā‘u al-zuhūrā

#Music #Rafa't Lila al-Stora #Poetry

18:28 Ballade No. 1

Listening to #Ballade No. 1 in G Major, Op. 23 by Hélène Grimaud. What a battle #Music

“Memory is where the soul keeps its most precious secrets.”Jorge Luis Borges

18:30 Maxfield Parrish (1870 – 1966)

18:41 Shaqia Rouh

Anta taḥyā fī kiyānī wal-hawā Fīhi aḥyā kayfa as-lū aw alūm? Fīhi ʿumrī wa-shabābī wal-munā Wa-maghānī ash-shiʿri fir-ruʾyā tahīm

#Music #Shaqiq Rrouh by Ghada Shbeir

09:21 Annoying bug on Github

There's an annoying bug in GitHub's "download raw file" feature, when I click download, nothing happens. Finally I had to replace my own parameters in a pattern I found online to resolve the bug and be able to download the file. Did I mention that I really hate Microsoft? #Programming

10:27 Scala docs

#Scala documentation gives me let over lambda vibes. #Relearning Scala

../i/10:27/2026-01-06_10-27-49_screenshot.png

19:14 A discussion regarding the IDF database.

I microblogged about a discussion regarding that IDF database suggests that at least 83% of Gaza dead were civilians. Posting my repsonses here in full length, since HN flagged the post, and non-users can't read it.

tguvot wrote;

17% are terrorists that IDF can identify by name. Unidentified people with RPGs in their hands that were blown up don't suddenly become civilians. If we stick with that logic, 99.9% of dead in war in Ukraine are civilians, because opposite party can't identify them

My response:

In war, a person is civilian unless positively identified as a combatant. “Unidentified” does not mean militant. that’s true in international law, conflict research, and even the IDF’s own internal counting. The “17% identified by name” point actually supports the claim. Israel’s own intelligence database–which Israeli sources call the only authoritative militant tally–shows ~8,900 confirmed or probable militants killed out of ~53,000 total deaths at the time.

The “RPGs in their hands” is a strawman. The database does not count assumptions; it requires intelligence-linked identification. Israeli investigations and internal testimony show civilians were routinely misclassified as “terrorists” in field reports to inflate ratios

The Ukraine comparison is simply wrong. Ukraine has uniforms, unit records, POW lists, and mutual identification. Gaza is a besieged civilian population where Israel itself admits it cannot identify most victims. No serious dataset suggests 99.9% of Ukraine’s dead are civilians.

moreover, many independent investigations suggest the same. Airwars’ civilian harm analysis documented unprecedented civilian casualty patterns (large family deaths, high women/child counts), far exceeding norms seen in other 21st-century conflicts gaza-patterns-harm.airwars.org

Even conflict data experts (e.g., Uppsala Conflict Data Program) note that the proportion of civilians in this conflict is far higher than typical war patterns and comparable only to extreme cases like Rwanda and Mariupol

breppp wrote:

He is right, the logical leap would be hilarious if not a symbol for today's journalistic standards.

Let's say the IDF has positively confirmed 17% combatants. The negation of that set is not "Non combatants" but "Not positively identified by the IDF as combatants". which means that some may still be combatants, and most probably some are as the standard here is to confirm names, something hard to do when someone is under the rubble. Therefore the title here which says 83% civilians according to IDF data is simply false.

That's forgetting the other issues with this article (single IDF unit not tasked with research, multiple databases with different numbers, using Hams death data, forgetting about non-Hamas non-PIJ groups, low reputable source, etc) but I am sure that if you can see this misstep you can understand the general value of what you read there

My response:

I'm not sure if you understand how casualty classification works. “not positively identified as combatant” is not logically equivalent to “proven civilian.” No one claims it is. What it does mean is that the IDF has no evidence those people were combatants. And in law, statistics, and every serious conflict dataset, you don’t get to assign lethal status based on vibes.

Also calling Aman “a single unit not tasked with research” is false. It’s Military Intelligence, and Israeli sources say this database is the only one they can stand behind. If your position requires assuming thousands of unidentified dead people were combatants without evidence, then your position is not analytical rather ideological.

tguvot wrote:

so, your position that 10 unidentified, people each with rpg that they were observed to used, without military uniform, blown up count as 10 civilians ? right ?

My response:

No and this is misleading. First, that’s not how civilian status is determined. Civilian vs. combatant is not decided by uniforms or post-strike assumptions but on direct participation in hostilities at the time and positive identification. Someone actively firing an RPG is a combatant at that moment but that does not justify retroactively classifying every unidentified body as militant. I'm honestly surprised that I've to explain that.

Second, the example is a hypothetical case to erase the real issue. The claim about ~80% civilian deaths is not based on “assuming everyone is civilian,” but on subtracting those Israel itself could identify as militants using intelligence-linked, name-based records. Israel’s own database explicitly excludes people it merely suspects or assumes were fighters.

Third, this logic fails at scale. Gaza’s death toll includes tens of thousands of women, children, elderly, and entire families killed in homes, shelters, hospitals, and aid lines, not people observed using RPGs. Field reports and Israeli investigations show many victims were later posthumously labeled militants without evidence, inflating numbers.

Forth, the argument flips the burden of proof. You don’t get to call people militants because you can’t identify them. If that standard were accepted, any mass-casualty air war could declare most of its victims “terrorists” by default, which is exactly why serious militaries and conflict datasets reject that logic.

That user, tguvot, has a specious activity on almost every Israel-related post, gives Unit 8200 vibes. #Israel #Conversation #Politics

202560 days

18:32 ibn al-Muqaffa on friendship

[Arabic Original Below]

Abdullah ibn al-Muqaffaʿ said: Know that true brothers are the finest gains of this world: an adornment in times of ease, a promise in times of hardship, and a support for both livelihood and final return. Do not, then, be careless in earning their companionship, nor negligent in seeking the ties and paths that lead to them.

I have read his letter to Yahya ibn Ziyad al-Harithī, and it appears to be one of those very ties he spoke of in his counsel, The Peerless Pearl. It is among the best words ever addressed to a friend. In it are qualities of companionship that delight the soul, guide it by example, and awaken hope for oneself and one’s companions. For this reason, I chose to translate it and share it, to read it closely and to offer it as a gift to those among my friends who are dear to me.

You have conducted yourself with people along a praiseworthy path of loyalty and generosity—so much so that you have been known for its virtue, your mentions adorned by it, and your praise made fair through it. The tongue of truth has borne witness for you, and by it you have become known for your noble traits and marked by your virtues. Thus brothers hasten toward you out of desire, racing to win your affection and to bind themselves to you, as rivals compete for a coveted prize. You have set before them a goal toward which seekers run, and which only the foremost attain.

Whoever God has secured in your esteem as one worthy of trust and refuge—who has filled his hand through you with the share of a loyal brother and an unbroken bond, who has found rest with you in a safe shelter and a guarded covenant, and is enveloped by your grace in affection—finds himself attempting to repay you in ways beyond his capacity, striving to reach a height whose summit is hard to attain. Were you to accept as brothers only those who could fully return your affection and reach the limits of your excellence, you would have no brothers at all, and you would stand empty of companionship. Yet your brothers acknowledge your merit, while you accept from them what ease they can offer of affection. You do not burden them with the cost of matching you, nor with attaining your measure of virtue in what lies between you and them.

I did not intend by this praise to flatter you, seeking closeness thereby or a tether to secure myself to you. Rather, I sought truth and sincerity in what I described, and avoided falsehood and blame. For a little truth, pure of deceit, is better than much truth tainted by error.

I have spoken of your virtues and the fairness of your conduct, yet I fear for you the trial that comes when one hears the praise of oneself and the recounting of one’s merits. For praise corrupts the heart and stirs conceit. Still, I hope for you protection and steadfastness, for I have mentioned nothing but what is true—and truth expels vanity and the arrogance of pride from the discerning soul, leading it instead toward balance and humility.

Seeing, then, that you are as I have described—rich in virtue and loyalty—I resolved to claim my share of your affection, and to bind my cord firmly to yours, so that between us may flow the bonds of brotherhood through which affection grows strong and covenants endure. I knew that to forgo this would be loss, and to neglect it ignorance; for whoever abandons his rightful share enters into loss, and whoever turns from right judgment drifts toward error. So desire from my affection what you desire from yours, for I have left nothing undone by which I might draw forth your goodwill or awaken your friendship. Every path that leads to you I have taken, every mount I have set in motion toward you, that you may see the earnestness of my care for your affection and my longing for your companionship. Peace.

I see nothing that ennobles the bond of brotherhood more than such clarity: the open declaration of the desire for friendship, the wish for its endurance, the balance of giving and receiving. And the worst of lands is that in which one has no friend at all.


قال عبدالله بن المقفع: اﻋﻠﻢ أن إﺧﻮان اﻟﺼﺪق ﻫﻢ ﺧير ﻣﻜﺎﺳﺐ اﻟﺪﻧﻴﺎ، زﻳﻨﺔٌ ﰲ اﻟﺮﺧﺎء، وﻋﺪةٌ ﰲ اﻟﺸﺪة، وﻣﻌﻮﻧﺔٌ ﻋﲆ المعاش والمعاد، ﻓﻼ ﺗﻔﺮﻃﻦ ﰲ اﻛﺘﺴﺎﺑﻬﻢ واﺑﺘﻐﺎء اﻟﻮﺻﻼت واﻷﺳﺒﺎب إﻟﻴﻬﻢ.

وقد قرأت له رسالته إلى يحيى بن زياد الحارثي، ومما بدى أنها كانت إحدى الوصلات التي تكلم عنها في وصيته "الدرة اليتيمة". وهي من خير ما يقال لصاحب، وبها من صفات الصاحب ما تُعجب به النفس، وتقدي بها، وترجوا بها لنفسها ولرفقائها. فأثرت ترجمته ومشاركته، وقرأته وأهديته على من عزّ علي من أصحابي.

وقد لزمت من الوفاء والكرم فيما بينك وبين الناس طريقة محمودة، نُسِبْتَ إلى مزيتها في الفضل، وجمل بها ثناؤك في الذكر، وشهد لك بها لسان الصدق فعُرفت بمناقبها، ووُسِمْتَ بمحاسنها، فأسرع إليك الإخوان برغبتهم مستبقين يبتدرون ودَّك ويصلون حبلك ابتدار أهل التنافس في حظ رغيب، نصبت لهم غاية يجري إليها الطالبون ويفوز بها السابقون، فمَنْ أثبت الله عندك بموضع الحرز والثقة، وملأ بك يده من أخي وفاء ووصلة، واستنام منك إلى شِعْب مأمون وعهد محفوظ، وصار مغمورًا بفضلك عليه في الود، يتعاطى من مكافأتك ما لا يستطيع، ويطلب من أثرك في ذلك غاية بلوغها شديد، فلو كنت لا تؤاخي من الإخوان إلا مَنْ كافأ بودك، وبلغ من الغايات حدك؛ ما آخَيْتَ أحدًا، ولصِرْتَ من الإخوان صفرًا، ولكن إخوانك يقرُّون لك بالفضل، وتقبل أنت ميسورهم من الود، ولا تجشمهم كُلَف مكافأتك، ولا بلوغ فضلك فيما بينك وبينهم، فإنما مثلك في ذلك ومثلهم كما قال الأول:

ومَنْ ينازع سعيد الخير في حسب ينزع طليحًا ويقصر قيده الصعد

ولم أُرِدْ بهذا الثناء عليك تزكيتك ليكون ذلك قربة عندك وآخية لي لديك، ولكن تحرَّيت فيما وصفت من ذلك الحق والصدق، وتنكَّبت الإثم والباطل، فإن القليل من الصدق البريء من الكذب أفضل من كثير الصدق المشوب بالباطل.

ولقد وصفت من مناقبك ومحاسن أمورك، وإني لأخاف الفتنة عليك حين تسمع بتزكية نفسك وذكري ما ذكرت من فضلك؛ لأن المدح مفسدة للقلب مبعثة للعُجْب، ثُمَّ رجوت لك المنعة والعصمة؛ لأني لم أذكر إلا حقًّا، والحق ينفي من اللبيب العُجْب وخيلاء الكِبْر، ويحمله على الاقتصاد والتواضع.

وقد رأيت — إذ كنتَ في الفضل والوفاء على ما وصفتُ منك — أن آخذ بنصيبي من ودك، وأصل وثيقة حبلي بحبلك، فيجري بيننا من الإخاء أواصر الأسباب التي بها يستحكم الود ويدوم العهد، وعلمت أن تركي ذلك غبن، وإضاعتي إياه جهل؛ لأن التارك للحظ داخل في الغبن، والعائد عن الرشد مرجف إلى الغي، فارغب من ودِّي فيما رغبت فيه من ودِّك، فإني لم أدع شيئًا أستتلي به منك الرغبة وأجتر به منك المودة إلا وقد اقتدت إليك ذريعته وأعملت نحوك مطيَّته، لترى حرصي على مودتك ورغبتي في مؤاخاتك، والسلام.»

ولست أرى أن هناك ما يُقدر في علاقة المؤاخاة بمثل هذه الشفافية، بإيضاح الرغبة في المؤاخاة وإطالة العهد، والأخذ والعطاء، وشر البلاد مكان لا صديق به. #Modus Vivendi

16:51 Why Go Maps Return Keys in Random Order

There's a good answer to this question:

So that no one gets dumb enough to depend on them being in any particular order because the order can change for reasons under the hood and out of your control.

Pragmatically speaking, this is a bad design. However, from an engineering perspective, it's a perfect one. This is the same way I like to think about OOP; yes it's really powerful, but it's not suitable enough for engineering once you get so many rules that the team should work with, that are not enforced by any means. #Go #Programming

02:52 Device is left behind.

Apparently, if you go somewhere far from home (or any usual stay place) with multiple Apple devices and leave one behind, the FindMy App alerts: "device left behind" The irony is my MacBook is named "saleh" so the notification says: "saleh is left behind" and idk about that

“The page becomes a home for the homeless heart.”Jalal ad-Din Rumi

19:15 Mulan (1998)

There's an observation that I thought about as a kid watching that movie, powerful training montage where Mulan is struggling to complete the challenge of retrieving an arrow from the top of a tall wooden pole. The movie supposed to go in the theme that after some life-changing exercises, effort, and most importantly mindset, she is finally able to do this very hard challenge. But She actually were never able to, what happens instead is that instead of letting the weights drag her down, she uses them as tools. She loops the straps of the weights together to form a grip, anchoring herself on the pole. While this sounds smart and everything; it is not what the exercise is meant for, otherwise there would be many other smarter and easier ways to get the arrow, the exercise was meant for bare brute strength, not thinking differently. #Cinema

21:29 Upper and upper-middle classes in Egypt have an

Last Wednesday I was celebrating my last working day (before starting my short vacation and moving on) with my coworker, he suggested that we can do it around the workplace, which happens to be a common open-air outing for the Egyptian middle to upper-middle classes. It was quite fun.

As we walked around, I noticed dozens of Christmas trees scattered across which felt oddly dissonant. Familiar, but still entirely out of place.

I understand why I'm writing this blog in English, and why I can relate to European drama more than I can to my local ones; English is lingua franca, and I was exposed to foreign culture more than I was to my local one. But what I don't understand is this strange eagerness to inherit symbols that were never ours. I found a lot of Christmas trees at work yesterday. I think they were the usual Picea abies, a tree that has never grown naturally in the landscapes of the Middle East: not in our deserts, not along our Mediterranean coastlines, not even in the highlands. Even Middle Eastern Christians, for nearly two millennia, never practiced this tradition; it spread only recently through the soft power of American and Northern European culture. The tree itself has origins in pre-Christian pagan rituals of northern Europe, symbols of winter vitality adopted and reinterpreted over centuries, yet we imported it without the mythology, without the climate, without the story.

The same happens with Halloween, a Celtic festival marking the thinning veil between worlds, reshaped by Irish immigrants in the US, and then exported back to the globe through a cultural gravity the MENA region was never meant to orbit. It’s not that these borrowed traditions are wrong; they are simply unrooted. They give the illusion of participating in a universal culture while quietly eroding the questions that shaped our own. Perhaps the real issue is that we’re adopting symbols that grew from someone else’s winters and someone else’s fears.

My biggest issue, though, is that I cannot find authenticity in this or enjoy it, because it feels totally engineered by media. Perhaps I would find it fun if I were born in the US (even as a Muslim, in fact some people in Egypt attributed my thoughts about these events to radical Islam, it has nothing to do with it. I would celebrate an authentic Egyptian holiday for instance), for example. Experiencing it from here, however, feels like watching someone else’s memory and pretending it’s mine. It makes me wonder whether culture today is something we choose or something curated for us, shaped and streamlined until we mistake repetition for belonging.

When every tradition can be packaged into a trend, it becomes difficult to tell where genuine fascination ends and subtle social engineering begins. If a ritual becomes universal through marketing rather than meaning, does it still count as culture, or is it simply a very successful advertisement?

At what point do we stop being participants in culture and become mere receivers of whatever is most efficiently broadcast? #Egypt #Modus Vivendi

12:00 I really hate Microsoft

I don't think I ever got to talk about much I hate Microsoft. I will use this post to express how much I hate Microsoft.

I'm pro-FOSS and pro-Freedom, however, people who know me know that I do hate Apple and other big tech, but just not as much as I hate Microsoft. I believe that Microsoft is responsible for making one of the most terrible operating systems ever (along with other many low quality products) which was (is?) responsible for making the computing experience really terrible for people who are not much into computing. This resulted in making every task that might require using a computer a burden to these people.

I'm not talking about power users or developers who can work around Windows' quirks (like removing copilot or using the server version of Windows 10 for their desktop). I'm talking about your aunt who needs to send an email, the small business owner trying to manage inventory, the teacher preparing a presentation. Microsoft took what should have been straightforward tasks and wrapped them in layers of mysterious failures, cryptic error messages, and mandatory restarts.

The real issue isn't that software has bugs, every system does. The real issue is that Microsoft built an operating system that treated its users with contempt. Windows 95 through Windows 11 trained an entire generation to believe that computers are fundamentally unreliable, that losing work is just part of the deal, that random crashes are inevitable.

They normalized dysfunction. Microsoft convinced the world that computing is inherently fragile and frustrating.

Modern Windows is an archaeological dig. You've got Control Panel coexisting with Settings, two different interfaces for system configuration because Microsoft couldn't commit to either. You've got ancient Win32 APIs next to WinRT next to whatever they're calling the current framework (and don't get me started at how they name it). Each generation of Windows just changes (or contributes to) how terrible the experience is.

This matters because it destroys predictability. In any well-designed system, once you learn the patterns, you can reason about how things should work. Windows teaches learned helplessness. Settings might be in Control Panel, or Settings, or a right-click menu, or a PowerShell command, or not exposed at all, or in some registry, or in a file under System32 folder. Every task becomes a treasure hunt.

People who defend this as "backward compatibility". It is not. Backward compatibility is running old binaries. This is keeping decades of UI confusion and architectural mistakes on life support because Microsoft can't be bothered to make clean breaks1.

Microsoft normalized the idea that computers need to be rebooted to function properly. Not rebooted to apply updates, that's reasonable. Rebooted because something got into a weird state and nobody knows what. Rebooted because that's just what you do when Windows acts up.

This became the universal tech support answer because it actually worked disturbingly often. That's not a feature, it's an admission that the system's state management is so broken that burning it down and starting over is easier than debugging.

Servers running Linux or BSD regularly go years between reboots. macOS machines might reboot for major updates but rarely for anything else. Windows? "Have you tried turning it off and on again?" became a cultural meme specifically because of Microsoft's inability to build a stable operating system.

Microsoft had the resources and market position to build something genuinely excellent. They built something barely adequate and spent decades defending it. They trained the world that computing is supposed to be painful.

That's why I hate Microsoft more than Apple or Google or any other tech giant. Apple locks you into their ecosystem, sure. Google vacuums up your data. But Microsoft convinced generations of people that computers are fundamentally hostile tools that barely work. They normalized dysfunction at a scale that damaged the entire industry's relationship with its users.

Propaganda

Here's some anti-Microsoft propaganda that I like

  1. Microsoft won't let me pay a $24 bill
  2. Update from Microsoft
  3. Microsoft's Software Is Malware
  4. Microsoft lacks quality control
  5. Why is Microsoft Teams still so bad?
  6. Why is GitHub UI getting so much slower?
  7. Casey Muratori incident
  8. Microsoft is going to preload it in the background, because it's slow
  9. Markdown files not openable because of GitHub Copilot
  10. It's over
  11. STOP. please microsoft
  12. Microsoft keeps losing
  13. Why does Microsoft never improve?
  14. Windows 11 Start Menu Revealed as Resource-Heavy React Native App
  15. Microsoft Recall Required??
  16. Migrating from GitHub to Codeberg
  17. New Windows 11 bug causes flash bang when opening File Explorer
  18. Microsoft Is A Blackhole Of Talent And Money
  19. The Cult of Microsoft
  20. Microsoft, anybody home?
  21. GM replies to Bill Gates
  22. [2026-01-08 Thu 17:06] People are calling Microsoft now "Microslop" I would like to denote that AI/LLMs (Or like how the GNU priest calls them, bullshit generators) have absolutely nothing to do with how mediocre, low quality and buggy MS products are. People that believe so, usually haven't interacted with MS products a lot before LLMs regulations, or they didn't find the buggy software before buggy, and they only got to realize it when the scale of bugs increased when they depended more on LLMs. Google uses LLMs, Apple did too. They got mistakes as well, but MS's issues are more about a philosophy rather bugs.
  23. [2026-01-05 Mon 21:26]
    Adding:

  24. [2026-01-06 Tue 08:57]
    Microsoft is renaming all their products link
  • [2026-01-20 Tue 10:47]
    Adding: link
  • [2026-01-26 Mon 20:53]
    Adding link
  • [2026-02-07 Sat 18:34]
    I don't want to start even talking about the development experience on Windows. ../i/2026-02-07_18-35-09_screenshot.png
  • [2026-02-12 Thu 02:47]
    Just off my head: HKLM/HKCU is nonsenes. It always has a broken uninstall state and MSI rot. NTFS has 8.3 filenames (legacy for compatibility). Reparse points layering. PATH + DLL search order is terrible; System32 precedence. Side-loading attacks. Dependency hijacking.
  • [2026-02-19 Thu 23:31]
    link
  • [2026-03-19 Thu 09:22]
    link

    Joan sent another Microsoft Teams link. This time, audio failed and the browser app prompted me to update some SDK. I tried the desktop app with the same room id, but it said “meeting not found.” Alright, as a user of Microsoft software first half of my life I was not surprised

    Right.

Casey Muratori incident

From: news.ycombinator.com/item?id=3…

Microsoft’s new terminal application rendered text extremely slowly, like 10 minutes to cat 1gb of text slow.

Casey submitted a bug saying that it’s slow and should be much much faster. Microsoft responded something like “text is hard … … phd dissertation on rendering text”

Casey made a terminal renderer with more features than Microsoft’s renderer in a weekend, it performed orders of magnitude faster, had zero optimization work performed and he jokingly (and hilariously) titled the video “a phd dissertation”.

Next, the excuse parade rolled in and came up with all manner of excuses as to why Muratoris renderer was so much faster, so he made a follow up video addressing the excuse parade, as well as containing some very minor optimization.

Also note that Casey’s implementation isn’t even as fast as things could be. His optimizations are minor.

https://github.com/microsoft/terminal/issues/10362 m.youtube.com/playlist?list=PL…

Footnotes

23:59 Old journals

Unsure when I will be able to read my old journal, bravely. I had this in my daily TODOs: "Run salih/org-search-entries-with-today-date and salih/open-journal-file-for-today". these were elisp functions that were showing me my log and journal for the same day of the current month, but for past years. Sounded like a fun idea at first, but it started to get extremely gloomy after couple of days, then weeks. Then I completely stopped doing it because it really harmed my mood. I rescheduled the activity to the far future, hopping that better me will be able to handle his feeling appropriately. He will probably come through this note in November's 21st, I hope he will be glad.

02:36 Some other notes on exception handling

  • [2025-11-26 Wed 15:52]
    Reading ieeexplore.ieee.org/document/7… today. It mentions that most common uses of catch: 1. Logs the error rather than recovering from it 2. About 80% of people are using the common "Exception" class, rather than their subclasses.

I wrote about exception handling before in my draft on programming languages, generally, I consider exception handling to be extremely distasteful, and before you relate this to me being biased toward functional states, no I had this feeling from the first day writing C#; I was always astonished by how the MS documentation was strictly telling us "hey be careful with this thing" and hopping for the best, and for the way my app needed a "global exception handler" that swallows everything, and I looked and looked for a way in which I could just know whether a function throw or not, I assumed that I'm getting something wrong, because I couldn't believe that this is a standard practice and due to my insufficient experience back then, I couldn't find any literature discussing this problem. I wrote about a similar concern in my old mentioned draft, but it's far from complete in the regard of why throwing exceptions is generally a terrible idea. Here I'm sharing some of contributions that I found: 1. Exception Handling Considered Harmful1 2. 13 – Joel on Software 3. Exceptions Considered Harmful 4. Why Go gets exceptions right | Dave Cheney. From the other side: 1. You’re better off using Exceptions – Eirik Tsarpalis' blog and I have a quick response for some issues it demonstrates; a. An Awkward Reconciliation: this assumes that the programming language you are using, library or other called functions are going to throw, which is invalid if you can never have this state in your language. b. Boilerplate: this is a style preference IMO, most of Go developers for example do not mind the infamous if err != nil for me it's explicit and eloquent. c. Where’s my Stacktrace?: exporting the Stacktrace has nothing to do with throwing exceptions, it's very possible to expose it in almost all languages (including Go) without exceptions. 2. Exceptions vs. status returns | Ned Batchelder2. #Programming #exception handling


23:59 nwalsh gallery website is very inspiring

Just wanted to say that I love photos.nwalsh.com/. I contacted Norm a year ago: "Hi Norm, I really enjoy browsing through your gallery photos.nwalsh.com/images/ndw I would like to build something similar, is the software that serves the website available for others to use? Thanks in advance." he responded: " I’ve reimplemented that a couple of times. I don’t think I ever published the current incarnation. It’s Node.js on the front and Postgresql on the back, so pretty standard stuff. I’ll put “package it up in a public repo” on my todo list, but it’s a long, long list. :-) Be seeing you, norm". I responded: "Thanks. If possible, please let me know if you release it someday. That might be a fit for an additional line in your todo :).". He responded: "I’ll try to remember. To be honest, if I was starting over today, I’d be looking hard at setting up a Pixelfed instance. That might be worth exploring. Something for your todo list, perhaps :-) Be seeing you, norm". This was at Fri, 23 Aug 2024 13:50:01 +0100. I found his response fun. I added it indeed to my long TODO, and I consider pinging him in couple of months.