Feed Link to Atom feed of posts

Micro Blog

three hundred eighty-two tiny posts on miscellaneous topics.

3 ↩️ 0 🔁 1 ♥️ via Phanpy

The air quality in has been so bad recently. No wonder it is triggering all my allergies, which are keeping me up all night.

Current AQI in my neighbourhood is 326 (equivalent to US AQI 203). Only thing that's keeping my family somewhat healthy is the three air purifiers that we run all the time.

1 ↩️ 0 🔁 2 ♥️ via Phanpy

One of the great things about , the minimal reader, is that it lets users override the UI styles. So I customized mine to make it more compact, colorful and contrasting.

1 ↩️ 0 🔁 2 ♥️ via Phanpy

Getting better equipment is like doing drugs. You get used to the better sound quality, you stop noticing it soon, and then you want even better quality. So you buy even better (and expensive) equipment, and the cycle repeats infinitely.

1 ↩️ 0 🔁 4 ♥️ via Phanpy

Moved into a new office. Now I have to reacquaint myself with all the new doors by remembering which ones to push and which ones to pull. Sigh.

1 ↩️ 0 🔁 0 ♥️ via Phanpy Dev

I often read on internet how so and so went out for a drive to calm down after a stressful event. I, on the other hand, am at my most stressed when I go for a drive. How's driving supposed to be calming‽

2 ↩️ 1 🔁 2 ♥️ via Phanpy

It's becoming difficult or expensive (because of high electricity bills due to running ACs) to work from home in because of the intense heat, and I hear that the local govt. wants to mandate work from home because of the water shortage. We are going to be stuck in a catch-22 situation.

1 ↩️ 0 🔁 0 ♥️ via Ivory for Mac

For those who may not be familiar, Uniplate is a generic data structure querying, traversal and transformation library. I find it indispensable for querying and transforming ASTs while writing compiler passes.

3 ↩️ 2 🔁 12 ♥️ via Ivory for Mac

I've been reading the in Small Pieces book, and it has helped me put names to a lot of concepts that I knew about Lisps and programming language design/implementation in general. It also provides a great historical perspective to , especially by mentioning all approaches that were tried but abandoned.

But other than being very very verbose, I find it hard to understand because it keeps changing the model of the interpreter every chapter. It starts with using Alists to model environments, then uses objects in the next chapter for the same, and in the next one, switches to using closures.

I get that it does this to showcase all possible ways of modelling an interpreter in Lisp, but it is quite disorienting to me as a reader.

2 ↩️ 0 🔁 1 ♥️ via Ivory for Mac

But I can't say that the author didn't forewarn me. This is literally the fourth sentence of the book:

“To explain these entities, their origin, their variations, this book will go into great detail.”

It is a decent read, though the language feels a little outdated. It is translated from French so that may be the reason of the overly magniloquent language.

12 ↩️ 3 🔁 13 ♥️ via Elk (canary)

I learned to escape the imperative programming languages, which in turn got me interested into and . Turns out, most of the real-world compilers are written in C and C++, so here I am back at square one.

After years of avoiding it for decades, I taught myself in the last couple of weeks. So anyway, does anyone want me to write a series of posts about making a interpreter (github.com/kanaka/mal) in C++?

5 ↩️ 2 🔁 2 ♥️ via Ivory for Mac

I've been writing for about a month now, and even though I have to lookup the docs very very often, the hardest thing I find is to keep track of lifetimes of objects, references and (smart) pointers. Using references and smart pointers gives an illusion of almost having automatic garbage collection. But one mistake of not tracking the lifetime correctly, and the object disappears, causing null pointers and segmentation faults.

I don't know if I'm running into these issues because I'm a noob or because that's how C++ programming goes. Hopefully it will become more intuitive with time.

1 ↩️ 1 🔁 3 ♥️ via Phanpy

The second biggest problem that I have faced with writing a PL implementation in is the lack of immutable data structures. I keep modifying the AST by mistake while walking over it. This is made much worse by the fact that I'm trying to implement a with immutable data structures (much like ).

When I copy container data to preserve the old versions, I feel bad because of the performance implications. There is no easy way to share internal data between different versions of same data structures (AKA persistent data structures). Maybe there is a library that can help me all this.

2 ↩️ 5 🔁 13 ♥️ via Web

I finished Make A in C++20 in about 2600 lines of code. I learned a lot about modern and managed to write the whole interpreter without writing a single C-style macro or pointer arithmetic or type casting.

Compared to my usual choice , C++ is way more verbose. I feel I can write the same interpreter in (idiomatic) Haskell in less than 800 LOCs. But it’ll probably be much slower.

Some time later in the year, I want to attempt writing a compiler for MAL in Haskell via QBE.

0 ↩️ 2 🔁 3 ♥️ via Phanpy Dev

I am extremely saddened by the news of Akira Toriyama passing away today at the age of 68. His creations were a big part of my childhood. I still read/watch Dragonball every 5 years.

0 ↩️ 0 🔁 1 ♥️ via Phanpy

What's with all the professors/academics in my timeline posting/boosting cat photos today? Is this some sort of tradition that I'm too uneducated to know?

1 ↩️ 1 🔁 0 ♥️ via Ivory for Mac

It's interesting how has had account list import and export support for while now, but there is still no service to publish, index and share lists among users.

0 ↩️ 0 🔁 0 ♥️ via Ivory for Mac

Using unstable channel as the base for the software I use is a double-edged sword. I get the security updates and fixes earlier than the stable channel, but on some days like today, I end up building CMake, Meson, TCL, Rustc, Git and so many other things from scratch. And it takes hourrrrrs.

0 ↩️ 1 🔁 2 ♥️ via Ivory for Mac

Today morning while I was brushing my teeth, I had a sudden realisation that the word “innings” is opposite of the word “outings”. It's just that we are indoor living people now, so we do more outings than innings these days. If we were people who spent most of the time outside, say in a forest foraging for food, and went to live in houses for winters, we’d call it "going for an inning”.

0 ↩️ 1 🔁 5 ♥️ via trunks.social

I keep reading on internet how some Americans love eating vegetables so much that they specifically plan to have them with particular meals. And here I am (with my tropics born people), eating vegetables in almost every meal since childhood, not even thinking about them. 🤷🏽

2 ↩️ 0 🔁 2 ♥️ via Phanpy

My life got 1.4x times better since I learned that I can have my orange juice alongside my coffee.

0 ↩️ 0 🔁 1 ♥️ via Ivory for Mac

It has happened to me so many times. I am trying to figure out something tricky, have spend considerable time without any success, cannot find any clues on the internet, give up and put the problem at the back on my queue.

Within a month or so, drops a new blog post or a Github PR or a new tool that does exactly what I want. Maybe I'm just lucky. Maybe I notice such things because I’m looking out for them passively. Either way, it feels great when solutions just fall into my lap.

0 ↩️ 0 🔁 3 ♥️ via Ivory for Mac

I tried to port the Racket to Assembly I wrote while following the Essentials of Compilation book (by @jeremysiek) to use QBE as the Assembly generation backend, but I couldn't because the book uses a shadow stack for tracking GC roots and QBE does not support that. Now I’m thinking of writing my own GC runtime to go along with QBE, maybe using libgc. Has anyone done something like this? Do you have any advice?

4 ↩️ 6 🔁 35 ♥️ via Ivory for Mac

I ran a 10k race with @nid and @kitallis last night. My goal time was 1 hr 15 min and my actual time was 1 hr 15 min 7 sec. :pikachuDance:

My last 10k time four months ago in August was 1 hr 20 min. I trained in Heart Rate Zone 2 for last four months and the improvements have been massive. I was never out of breath last night, even though I was running as fast as I could.

My plan for the next year is to train to be able to do sub one hour 10k by the end of the year.

1 ↩️ 0 🔁 6 ♥️ via Phanpy

Official timing results just came and my official time was 1 hr 14 min 37 sec. So I did manage to do my goal time. :pikachuDance:

2 ↩️ 0 🔁 3 ♥️ via Ivory for Mac

कल रात अचानक से मेरी नींद खुल गई। जागते ही धूएँ की गंध आयी। परेशान होकर मैंने पूरे घर की जाँच की पर कुछ नहीं पाया। फिर खिड़की खोला तो पता चला कि धूआँ कही बाहर से आ रहा था । रात भर घर में धूआँ भरा रहा। सुबह उठा तो सर में दर्द था। पता नहीं कौन रात में कहा आग जला रहा था पर मेरी नींद तो पूरी ख़राब हो गई।

3 ↩️ 1 🔁 5 ♥️ via trunks.social

While trying to upgrade my VPS to 23.11, I found that fail2ban config format has changed from using strings to structs. I can't find a single example on the internet about how to use the new format. Now I have to read the code to figure it about. That's so .

1 ↩️ 0 🔁 2 ♥️ via Ivory for Mac

Figured this out and finally upgraded my VPS to 23.11 with minimal issues. I had to disable a service because it no longer worked (and I no longer needed) but rest went fine without any hitch.

0 ↩️ 0 🔁 0 ♥️ via Ivory for Mac

Checked Nixpkgs Github and someone filed an issue about the broken service just 30 minutes ago. Hopefully it gets sorted in few days.

0 ↩️ 10 🔁 8 ♥️ via Web

It's been a year since a bunch of friends and I started the fantastic.earth server. We currently have 10 active users and pay about 4.1 USD per person per month for hosting costs, which includes hosting a and a server as well for our members.

We have two sysadmins and two moderators. Thankfully we have rarely run into system or moderation issues over the last year.

We are invite-only and accepting new members. If you know any existing members personally, ask them for an invite.

0 ↩️ 0 🔁 0 ♥️ via Web

Starting today morning the automatically set time in is being set to some far back time in past, causing connections to all secure website to fail. For now I manually reset it to correct date and time. Is this happening to anyone else?

0 ↩️ 0 🔁 3 ♥️ via Ivory for Mac

I just made my + installation on macOS self-contained by making it so that running `nix-shell` anywhere uses the Nix package version in use by Home Manager, thereby sharing packages between the Home Manager installation and system-level Nix shells. I even deleted the `nixpkgs` channel after doing this because it's not needed anymore.

All I had to do was to add this shell hook:

```
shellHook = ''
export NIX_PATH=$HOME/.hm-nixchannels;
mkdir -p $NIX_PATH;
ln -f -s ${pkgs.path} -T $NIX_PATH/nixpkgs;
'';
```

and this session variable:

```
home. sessionVariables = {
NIX_PATH = "$HOME/.hm-nixchannels";
};
```

3 ↩️ 18 🔁 30 ♥️ via Ivory for Mac

While trying to upgrade fantastic.earth to 4.2.1 today, I accidentally ended up upgrading the service as well because both of them were using the same pinned channel. Mastodon upgrade worked fine but Bookwyrm refused to build because of some Python packaging issues.

So I just copied the previously working channel for Bookwyrm and changed its config to use the same, upgrading only Mastodon.

Doing these kind of things would be so cumbersome if I had not been using NixOS.

I also managed to wipe out the whole Nix store while trying to figure out the Bookwrym build issue (by running garbage collection). But no problem, I just ran the build again, and everything was back to how it was.

So, the point I'm trying to make here is, use NixOS for setting up your servers. The isolation and reproducibility (and composability) is worth learning the complex language.

0 ↩️ 0 🔁 1 ♥️ via Ivory for Mac

The upgrade went without a hitch, as have all previous ones. shines here as well because all the upgrade related changes are handled by the NixOS service code written and tested by expert maintainers, instead of random admins like me.

1 ↩️ 0 🔁 5 ♥️ via Phanpy

A test for a new feature I wrote started failing with different error diffs in every run. I was perplexed by it become all of my code is supposed to be deterministic, no random values created or used anywhere. After poking all over the code base and breaking my head over it for a day, I realized that the non-determinism comes from the hashmaps I used in my code. This is because iteration over hashmaps is non-deterministic, causing the output to be possibly different every time. 😩

0 ↩️ 0 🔁 8 ♥️ via Elk (canary)

I've quietly passed my one year anniversary of joining . With 324 original posts and over 1600 posts/replies/boosts, this is the most active I've ever been on a social network in the last decade. I've found some very interesting people here, and learned about many new things and perspectives. I hope this continues in the future.

0 ↩️ 0 🔁 2 ♥️ via Ivory for Mac

We put a slow automatic door closer on our house’s main door, because baby, and now every occasion of opening and closing the door is an exercise of patience and mindfulness.

1 ↩️ 0 🔁 2 ♥️ via Phanpy

I'm currently going through the phase where my beard is long enough to be annoying but not enough to be majestic. Usually I shave it off at this point, but this time I'm hoping to care for it better and let it grow up to a point where the payoff becomes positive.

1 ↩️ 1 🔁 3 ♥️ via Phanpy

I discovered a bug in my code last night just before falling asleep. It came to me out of nowhere while I was lying in my bed, half-asleep. Thankfully, I remembered it today when I started working. It's a severe bug, and now I have to spend my day fixing it.

0 ↩️ 0 🔁 3 ♥️ via Phanpy

Very few things match the thrill of `git bisect`¹ narrowing down a test failure from 35000 PRs to one.

¹ Well, an equivalent tool actually.

0 ↩️ 0 🔁 0 ♥️ via Phanpy

I love it when people write about many different things in their personal . But I always wish that they would tag their articles and provide tag-wise RSS , so that I could subscribe to particular articles I am interested in.

1 ↩️ 0 🔁 1 ♥️ via Ivory for Mac

My five day long vacation starts today and I was hoping to every day, but I ran into a bench yesterday and now my knee is hurt :(
I hope that it heals by tomorrow.

0 ↩️ 0 🔁 2 ♥️ via Phanpy

I follow some extremely start people here, and sometimes I read their conversation threads where I don't get 90% of what they say; I just stare in awe. Often I find links to interesting papers and posts in these conversations that expand my knowledge horizon. I hope that if I keep reading them, I'll eventually understand the conversations as well.

2 ↩️ 8 🔁 11 ♥️ via Ivory for Mac

Now that I’m finding it harder and harder to scroll through the entirety of my feed every day (too many posts, too less time), I have taken to subscribing to the RSS feed of some accounts I’m particularly interested in.

My feed reader (Reeder5) pulls their posts and saves them for me till I have free time, typically once in a week, to go and read them. This works even if the server removes their old posts. I feel like this a secret trick not many know about.

0 ↩️ 10 🔁 12 ♥️ via Web

is joining the , making it possible for people to follow Wordpress blogs right from your Fediverse accounts. But what if you have static-site generator based ? Use the excellent (and free) Bridgy Fed service fed.brid.gy by @snarfed! For example, you can follow my blog at @abhinavsarkar.net@abhinavsarkar.net, made available on fediverse using Bridgy Fed.

0 ↩️ 0 🔁 3 ♥️ via Ivory for Mac

I really hope that makes their daily suggested workouts visible on their phone app. I really hate to click three different buttons on my watch seven times to see what is the next workout.

1 ↩️ 0 🔁 0 ♥️ via trunks.social

@wallabag package on seems to be broken. I suspect that's because the latest release did not bundle the JavaScript assets. Trying to create a release by myself to validate this.

0 ↩️ 0 🔁 0 ♥️

Turns out the real issue was actually how I packaged the app for . Something changed between the updates and I had to fix the packaging for it.

2 ↩️ 0 🔁 2 ♥️ via Ivory for Mac

@ivory I have noticed that Ivory crashes every time when macOS pauses it when it reaches screen time limit. And when it restarts it forgets the timeline positions and starts showing posts from many days ago. Please fix this bug.

4 ↩️ 5 🔁 2 ♥️ via Ivory for Mac

I wonder if there is a book written in the style of Dive into Python or Real World Haskell, which teaches entire Rust (or most of it) by going through a set of real world projects from many different domains instead of giving simple artificial examples or focussing on some particular domain or aspect of Rust.

8 ↩️ 2 🔁 2 ♥️ via Ivory for Mac

My fork of the digest has accumulated enough new features that I'm getting antsy of writing , which is what the original is written in. I’m thinking of a rewriting it, but I'm conflicted between using , which is my comfort language, , which may be easier for others to contribute to, and , which I want to learn.

The program involves fetching a bunch of JSON data from the internet, doing some statistical calculations on that data, and then outputting an HTML page.

What do you think I should rewrite it in?

Haskell
Golang
Rust
Something else
146 votes
3 ↩️ 4 🔁 12 ♥️ via Ivory for Mac

As many upgrade their servers today to 4.2, I'd like to remind them to set up a scheduled job to periodically clean the databases and disks. Here is what mine looks like:

```
tootctl media remove --days=1
tootctl preview_cards remove --days=1
tootctl media remove --prune-profiles --days=1
tootctl statuses remove --days=90 --continue
tootctl search deploy --clean --no-import
tootctl accounts prune
```

Here's the result of a sample run:

```
Removed 7506 media attachments (approx. 4.57 GB)
Removed 5619 preview cards (approx. 188 MB)
Visited 214058 accounts and removed profile media totaling 1.82 GB
Done after 33s, removed 8833 out of 8836 statuses.
Done after 50s, removed 2075 out of 2075 media_attachments.
Done after 24s, removed 7309 out of 7309 conversations.
Indexed 0 records, de-indexed 8786
OK, pruned 366 accounts
```

Keep your servers clean so that your users don't face any surprise downtimes.

2 ↩️ 0 🔁 2 ♥️ via Phanpy

After a decade of using Google Android phones, I'm very tempted to switch to iPhone 15 this time.

1 ↩️ 0 🔁 2 ♥️ via Phanpy

One of my biggest regrets of my life is not being able to watch on stage because I was stuck in a typhoon, just 100 meters away from the stage. In grief, I gave up listening to them almost completely for many years after that.

1 ↩️ 0 🔁 1 ♥️

I could hear the echos of the songs they played from where I was stuck, utterly drenched and tired. The far-away sounds still haunt my dreams.

0 ↩️ 0 🔁 1 ♥️ via Phanpy

I almost died of hypothermia that night but that's a story for another time.

1 ↩️ 0 🔁 0 ♥️ via Ivory for Mac

Spending my Sunday cleaning up:

$ nix-collect-garbage -d --delete-old
4122 store paths deleted, 5492.07 MiB freed

1 ↩️ 2 🔁 4 ♥️ via Ivory for Mac

I love having waterproof electronics because when they get dirty, I can wash them with water and soap, like this:

0 ↩️ 0 🔁 1 ♥️ via Ivory for Mac

Unfortunately, the only truly waterproof electronic thing I have is my Garmin watch, which I do wash with soap occasionally. In fact, that is the officially recommended way to clean it.

2 ↩️ 1 🔁 2 ♥️ via Ivory for Mac

Seems like almost everyone uses tail or some variation of it to follow log files. Well, I'm glad that there is at least one person out there who uses less to follow logs like me.

2 ↩️ 5 🔁 12 ♥️ via Ivory for Mac

I've been trying to build a personal for for myself for some time and I've got a basic version working. Here's how it works:

1. Fetch posts in my home timeline for last 24 hours.
2. Apply my Mastodon filters on them to remove unwanted posts.
3. Remove private posts.
4. Remove posts that I have liked, boosted or replied to.
5. Remove foreign language posts.
6. Fetch like, boost and reply counts for the posts from their origin server.
7. Partition posts into boosts and non-boosts, and apply next steps for each partition separately.
8. Assign scores to posts using this formula:
`score = geometric_mean(like_count, boost_count, reply_count) / square_root(follower_count_of_poster)`
9. If a post contains any of my specified favourite tags, increase its score by multiplying it by a constant factor (I use 1.2).
10. If a post is from any of my specified favourite accounts, increase its score by a constant factor (I use 1.2).

1/2

1 ↩️ 0 🔁 2 ♥️ via Ivory for Mac

continued …

11. Reduce the scores of each post by a factor of `power(2, (time_now - post_create_time)/half_life)` where `half_life` is something like 6 hours. This causes older posts to have lower scores.
12. Group posts into threads they are part of, if any. Then select the highest scored post from each thread. This prevents posts from popular threads from taking over.
13. Sort posts by their score and select top 10% of posts.
14. Randomly select some posts from the bottom 90% of posts.
15. Render these posts as a webpage and serve on internet.
16. Run this entire process twice or thrice a day, and read the rendered webpage, interacting with the posts.

The initial inspiration for this algorithm came from @MattHodges's work (steps 1–4, 7–8, 13, 15) that I improved upon (steps 5–6, 9–12, 14, 16).

I have few more ideas like reducing the scores of posts with certain tags, but the current algorithm works pretty well for me. I'm also thinking about how to make it near-realtime instead of a batch process.

2/2

4 ↩️ 6 🔁 11 ♥️ via Phanpy

I feel happy when I find people who are/were programmers and also write/wrote fiction . Like here's a person who has mastered the languages of both the natural and machine world. It give me hope for my own creative endeavors beyond .

1 ↩️ 0 🔁 2 ♥️

Today, after a long time, I'm playing my playlist of songs I want to learn to play on drums. Some are easy to play, some are difficult, all fun though.

0 ↩️ 0 🔁 2 ♥️

I must have been very ambitious back then because this playlist has My Favorite Things by John Coltrane in it. 🤯

1 ↩️ 0 🔁 0 ♥️ via macos shortcuts

Injured my back while lifting the baby. Is this what being old feels like?

1 ↩️ 16 🔁 16 ♥️

Finished reading "Type Systems for Memory Safety" borretti.me/article/type-syste by Fernando Borretti. It is a comprehensive review of various type system features across different that are used to enforce (varying degrees of) memory safety at compile time.

As expected, it talks a lot about because Rust is probably the most used PL with compile time memory safety, but it features other languages like Ada, Val and Austral as well.

An interesting read if you are interested in .

3 ↩️ 0 🔁 5 ♥️

I wonder where this "it's impossible to quit Vim" meme comes from. I have successfully quit Vim dozens of times in my decade long career.

0 ↩️ 0 🔁 3 ♥️ via Ivory for Mac

If you are wondering why there was a gap of 40 minutes between the posts, I was busy trying to quit Vim.

1 ↩️ 1 🔁 3 ♥️ via Ivory for Mac

Read noidea.dog/glue by @whereistanya and found this:

> In fact, doing glue work too early can be career limiting, or even push people out of the industry.

This reminds me of the time when I was the only senior (and glue) engineer in an important team of a big e-commerce company in India. I was coordinating seven projects between multiple teams, seting up the CI process, doing code reviews, mentoring multiple people, writing design documents etc.

At the end of the year, my manager gave me a bad review saying I didn't have enough code contribution. Ironically, that was probably the year when I had most impact on a company’s bottom-line. But the bad review after such hard work broke my heart. I switched to a different job soon after. It has been the shortest work stint of my whole career (1.25 years).

It's great to be a glue engineer if that's what you love doing. But it is very important to make sure that your contributions are counted.

0 ↩️ 0 🔁 1 ♥️ via Ivory for Mac

To be honest, the aforementioned company was infamous for its bad work culture. A friend had a bet going with me that I wouldn't last even a year in it. Well, I won the bet but at the cost of my mental health.

0 ↩️ 0 🔁 0 ♥️

I'd also like to know if removing the old posts using the maintenance command removes them from the search index.

1 ↩️ 0 🔁 0 ♥️ via Ivory for Mac

I really miss a conference in . There used to be Functional Conf, which at least covered functional PLs, but they are not running anymore. And I can't be bothered to secure a visa to go to abroad ones. :sadface:

0 ↩️ 0 🔁 4 ♥️ via Ivory for Mac

Being a to a new human, I can never tell why I'm feeling unwell. Is it lack of sleep? Stress of feeding the baby? Stress of work? Daily commute wearing me down? An infection? Am I just hungry? Ate something wrong yesterday? Am I unwell because the baby is unwell? Or is it the other way? I have no clue.

2 ↩️ 0 🔁 2 ♥️ via macos shortcuts

TIL that I have to run `home-manager expire-generations` before running `nix-collect-garbage` to actually delete all the old stuff in my store. Till now I kept wondering why I have five versions of VSCode installed on my machine.

0 ↩️ 0 🔁 5 ♥️

The good thing about having cucumber juice is that you are well hydrated. The bad thing about it is cucumber.

0 ↩️ 0 🔁 2 ♥️ via macos shortcuts

Is it weird to crave ice-cream all the time because you haven’t slept a full night in over a year? Too bad, there is no ice-cream in the fridge because I ate all of it already.

0 ↩️ 0 🔁 3 ♥️ via macos shortcuts

I’ve been on Mastodon for nine month now, so maybe I should make an introduction post now?

0 ↩️ 0 🔁 3 ♥️ via Ivory for Mac

Me starting to learn in 2023:

HEY COMPILER, if you know where to add the missing semicolons, why don't you add them yourself‽

5 ↩️ 25 🔁 27 ♥️ via Ivory for Mac

This post led me to explore clients with unconventional interfaces and I found some interesting one:

– Ebou (terhech.de/ebou) has the layout of a desktop messenger: leftmost column shows account names that have posted recently; clicking on them shows recent posts by them in an adjacent column, and clicking on the posts shows their conversation threads in the next column.

– Tut (tut.anv.nu) is a terminal UI client inspired by Vim, the code editor. It supports Vim like keyboard navigation as well.

– Macstodon (github.com/smallsco/macstodon) is a Classic Mac OS app, and looks kind of like old-school IRC clients.

– Stomp (stomp.social) run on Apple watch. You can scroll timelines or mention or lists but only one post at a time.

– Mastotron (github.com/mastotron/mastotron) completely eschews the concept of linear timelines and instead presents posts as graph of connections.

If you know any other such unconventional clients, please feel free to add to this thread.

2 ↩️ 0 🔁 3 ♥️ via Ivory for Mac

Forgot to mention Toot.

– Toot (github.com/ihabunek/toot) is a CLI client, which provides you commands to interact with Mastodon. For example, to see the recent posts by me, you can run `toot timeline -1 -a abnv@fantastic.earth`. You can also use it to automate interactions. For example, to follow accounts that recently made posts with the Haskell tag on the discuss.systems instance, you can run: `toot timeline -1 -i discuss.systems -t Haskell | grep -oP "@[^ ]*@[^ ]*" | sort -u | xargs -n1 toot follow`. I love it!

0 ↩️ 0 🔁 1 ♥️ via Ivory for Mac

Analysed the run time data from today's 10km race.

5%ile = 52 min
10%ile = 55 min
25%ile = 60 min
50%ile = 68 min
75%ile = 79 min
90%ile = 87 min
95%ile = 95 min

1 ↩️ 0 🔁 5 ♥️ via Ivory for Mac

A month later, most of my runs are in 5k+ range. Though my pace hasn't improved much, my endurance has certainly gotten better. I'm able to run 15k+ every week now. One more month to go before the race.

3 ↩️ 3 🔁 18 ♥️

After three months of Couch-to-10k training, today I ran the 10k . I'm so happy to see the progress over time. Next, I'll rest for three days and then start training for the next 10k race aiming for a better time.

4 ↩️ 2 🔁 7 ♥️ via Ivory for Mac

fantastic.earth went down for few hours today because decided to build the new nodejs package from scratch on the server. And that ate all the CPU and memory, causing the server to become unresponsive. I need to figure out a remote building strategy for Nix so that this doesn’t happen again.

2 ↩️ 1 🔁 3 ♥️ via Ivory for Mac

@arun and I have finally succeeded in setting up the remote build for the fantastic.earth setup.

We ran into an issue where Nix runs a command on the remote machine with sudo, but we didn't want to give sudo permissions to the remote build user. It turns out, sudo is not really needed and the build works fine without it. So @arun hacked up a no-op sudo substitute, which when put in the $PATH satisfied Nix and the build worked. ¯\_(ツ)_/¯

Finally, no more build caused downtimes!

0 ↩️ 0 🔁 0 ♥️ via macos shortcuts

I really wish feed readers would support syntax highlighting of code in blog articles. Then I’d finally have no reason to go to blog websites, and would read everything from the comfort of my reader.

0 ↩️ 0 🔁 0 ♥️ via macos shortcuts

I’ll never forgive Sword Art Online for making Isekai so popular that 90% of anime made these days are Isekai. The deluge of so many mediocre Isekai anime has completely destroyed my interest in the subgenre that used to me one of my favourite.

1 ↩️ 0 🔁 1 ♥️ via macos shortcuts

The biggest problem with mechanical is that you can buy one only once in ten years but the new models keep coming out all the time.

0 ↩️ 0 🔁 0 ♥️ via trunks.social

Done with the first day of the course. I have a better understanding of ownership in than before, but coming from garbage collected languages like Java and Python, I am still struggling a bit with move and copy semantics of variables.

0 ↩️ 0 🔁 0 ♥️

Now that will have list import and export in version 4.2, someone should build a service to share lists. That would make it easier for new people to join and get started.

0 ↩️ 0 🔁 2 ♥️ via Ivory for Mac

Switched to yearly licence for @ivory after some fighting with the Apple payment system. I hope Ivory adds more useful features to make it worth it.

0 ↩️ 0 🔁 0 ♥️ via Web

My today's cab's engine sounds like a sports car one. Though there is no opportunity to go fast because of this terrible traffic. Maybe the driver uses this car for racing in nights?

0 ↩️ 0 🔁 2 ♥️ via Ivory for Mac

Well, I filed the tax returns with more than five hours to go before the deadline, so I'd call it a great success.

0 ↩️ 0 🔁 2 ♥️ via trunks.social

Made some code multithreaded today. Now it runs in 30 minutes instead of 2 hours. Protip: always log the thread name in multithreaded programs.

0 ↩️ 0 🔁 3 ♥️ via macos shortcuts

is playing me 80s Bollywood disco music today for some unknow reason. This is not a complaint.

0 ↩️ 0 🔁 2 ♥️ via Ivory for Mac

My shoes used to wear out on the inside of the feet because I have flat feet, and caused me knee pains. So I started using the foot arch support insoles for correction, and then my shoes started wearing out on the outside of the feet. ¯\_(ツ)_/¯

Now, I alternate between using and not using the insoles so that my shoes wear out evenly.

1 ↩️ 0 🔁 0 ♥️ via trunks.social

I just noticed that @trunksapp app has gained inline threading of posts in timelines! This makes it so much easier to read threads. However it sorts threads by the first post date instead of last, which causes new replies to old posts to appear much later in timelines. I wish they'd fix this.

1 ↩️ 0 🔁 1 ♥️ via trunks.social

I took two back-to-back early morning flights last weekend and only today I feel rested enough to do any mental work. I'd have recovered quicker but baby fell sick and I couldn't sleep at nights. I was on vacation the whole week but all I could do was to watch Netflix and scroll Mastodon. Couple of more days left in my vacation, in which I hope to write and publish a blog post.

0 ↩️ 0 🔁 1 ♥️

Of course, I wasn't able to write a blog post. Between caring for the baby, working for my job, and training for the 10k run, I barely have enough mental and physical strength left to do anything else productive. It feels bad but there is nothing I can do but persevere till I build enough stamina to be able to do my other hobbies. On the bright side, I can run over 8km now and not almost die afterwards.

0 ↩️ 0 🔁 3 ♥️

I'm not getting a Threads account. It took a lot of effort for me to get out of Facebook's grip, I'm not going back just like that.

2 ↩️ 0 🔁 2 ♥️ via Ivory for Mac

I've been writing a lot of code these days after a gap of five years, and while newly introduced generics make working with collections tolerable, the error handling is still terrible. Also, I’m never sure if I should be using pointers or values. Are there any established practices for writing good Go these days?

1 ↩️ 2 🔁 4 ♥️ via Ivory for Mac

Some interesting (at least to me) charts from my training data:

1. Average running power seems to be linearly correlated to running pace.
2. Average heart rate seems to be correlated to running pace as a logistic curve.
3. Average running cadence seems to be uncorrelated to running pace.

0 ↩️ 0 🔁 0 ♥️ via Ivory for Mac

Crunched some numbers today and found that I made three times more money (adjusted for inflation) in last five years as a senior software engineer than I made as a junior and mid-level engineer in the ten years prior to that.

2 ↩️ 9 🔁 18 ♥️ via Ivory for Mac

I ported @mattmight’s CPS conversion code (matt.might.net/articles/cps-co) to and after some fighting with the type system, it worked! To make the interpreters work with the Cont monad, I had to remove recursive lets and hence, functions being able to call themselves recursively, but the rest works fine.

The attached images show the conversion of the Fibonacci function into the CPS version.

3 ↩️ 0 🔁 0 ♥️ via Ivory for iOS

After upgrading my server to 23.05, my Nix based CI that runs as a service fails to run `nix-build` with the error "unable to mount /proc". Something has changed in Systemd sandboxing that is breaking my previously working code. Does anyone have any clues?

2 ↩️ 0 🔁 0 ♥️ via Ivory for Mac

Update: removing these lines from service config fixed the issue:

ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;

Though, I feel like this is something that should be addressing instead.

EDIT:

Found out that having the ProtectKernelModules flag does not actually cause any issues. So the fix now it to remove ProtectKernelLogs and ProtectKernelTunables flags.

0 ↩️ 0 🔁 1 ♥️ via Ivory for Mac

Sometimes I have my computer read my posts to me aloud for the purpose of proofreading. It is really funny to hear it say "Right arrow curving left" again and again when it encounters the footnotes.

0 ↩️ 1 🔁 0 ♥️ via Ivory for Mac

Latest software update added running dynamics measuring to my watch! It's a completely unexpected but great surprise. But now I have to worry about my low vertical ratio.

0 ↩️ 1 🔁 2 ♥️ via Ivory for Mac

OK @ivory, you win. You've made a subscriber out of me. Now please implement post threading in the timelines. I really hate reading posts in reverse order.

0 ↩️ 0 🔁 7 ♥️

Upgraded my server and fantastic.earth to 23.05. Faced only one issue of Man cache generation not working, which I then disabled because I don't need Man cache on a server anyway. Rest went smooth.

1 ↩️ 0 🔁 1 ♥️

I love @ivory, it is probably the best client there is, but I really miss threaded posts in my timeline, which @phanpy and @elk do really well. Another feature I wish Ivory had is Boost carousels from Phanpy. If Ivory adds these two features, I'd use it all the time, on all my devices.

1 ↩️ 2 🔁 13 ♥️

Today I ran my first 5k in the Couch-to-10k training. It was hard but I feel really good about it. It took 6 minutes more than what it used to take pre-pandemic, but I'll get back there with time.

7 ↩️ 1 🔁 3 ♥️

Today I had to write code that looked like this:

```
blah.overrideAttrs (oldAttrs: {
x = oldAttrs.x.overrideAttrs (oldAttrs: {
y = oldAttrs.y.overrideAttrs (oldAttrs: {
outputHash = "xxxxx";
});
});
});
```

folks, is there a better way to do this kind of nested overriding of attributes?

1 ↩️ 0 🔁 0 ♥️

Trying out the client @phanpy for the first time:

— Rounded corners everywhere, which is a little too much for my taste.
— I love the Boost carousels, and clean post threading, and post detail popups.
— The light mode somehow looks better than the dark mode, which is very unexpected because I use almost everything in dark mode.
— Really missing having keyboard shortcuts for navigation and actions.

I'm going to try it for a couple of days to see how it compares to my current client @elk.

1 ↩️ 0 🔁 0 ♥️

Also, I don't like how @phanpy hides the multi-column view under Shortcuts settings, and how changing the timeline from home to something else reverts the view to single column.

1 ↩️ 0 🔁 1 ♥️

Update after two weeks of trying @phanpy: I love it and now I am using it full time in the browser (I use @ivory elsewhere). I still miss the keyboard navigation and shortcuts though, but Phanpy is so much better for quickly going over hundreds of posts when I wake up. I'm guessing that's because of the way it groups boosts.

0 ↩️ 0 🔁 0 ♥️ via Web

Drove a car for 84 kms today, the longest I've ever. Can't say that I'm a fan of cars yet, but it wasn't as bad as I had imagined it would be.

0 ↩️ 2 🔁 3 ♥️

Tired: using to write formal emails.
Wired: using AI to turn emails in pop songs:

(Verse 1)
Hey Josh,
I've got a question for you.
Can you tell me when the slides will be available?
I've got a meeting that might conflict,
So I need to know the schedule.

(Chorus)
Hey Josh,
I need to know the timing.
Can you please let me know?
I'm counting on you,
So don't let me down.

(Verse 2)
I know you're busy,
But this is important to me.
I need to know the schedule,
So I can plan accordingly.

(Chorus)
Hey Josh,
I need to know the timing.
Can you please let me know?
I'm counting on you,
So don't let me down.

(Bridge)
I know you'll come through for me,
Josh.
You're always there for me,
And I appreciate it.

(Chorus)
Hey Josh,
I need to know the timing.
Can you please let me know?
I'm counting on you,
So don't let me down.

(Outro)
Thanks, Josh!
I knew I could count on you.

0 ↩️ 0 🔁 0 ♥️

The downside is the I have to face outside. I forgot to wear a pollution mask today, and now I'm fighting my allergies. When running, I can't even wear a mask, so I need to wake up crazy early like 5am to avoid all the dust and smoke.

0 ↩️ 0 🔁 0 ♥️ via Elk (canary)

I generated these by taking screenshots using headless Chrome, like this:

`chrome --headless --disable-gpu --screenshot --window-size=500,255 <url>`

That's why they look so unrefined.

1 ↩️ 0 🔁 0 ♥️ via macos shortcuts

Configured a macos shortcut to post to so that I can be even more of my lazy self.

0 ↩️ 0 🔁 0 ♥️ via Elk (canary)

I'm really starting to like this shortcut. Now I can post more of my random thoughts in much quicker way!

1 ↩️ 0 🔁 0 ♥️ via Elk (canary)

How do I find which revision of nixpkgs-unstable is available in cache for darwin-x86_64? Every time I update to latest unstable revision, I have to rebuild a lot of packages and it takes hours.

1 ↩️ 0 🔁 0 ♥️ via trunks.social

Left the air purifier running at home for three weeks of vacation, came back to clean air and the unexpected electricity bill.

0 ↩️ 0 🔁 0 ♥️ via trunks.social

And the kid forget how to walk because we left the walker at home. Though it came back to them in 5 minutes.

1 ↩️ 0 🔁 1 ♥️ via Elk (canary)

Pulled some visit numbers for my website abhinavsarkar.net. It seems it is slightly more popular in months I don't publish new posts, as compared to four years ago. But on the other hand, my recent posts don't get as much traffic as the ones before.

3 ↩️ 1 🔁 2 ♥️ via Ivory for iOS

One downside of purely chronological timeline in is that my home feed is mostly silent during my day time, and most active during my night time. So I read all the interesting stuff hours later, and I have to scroll my entire feed for that.

I'd love it if one of the third party clients can surface most interesting
posts by locally running some algorithms based on boost and favourite counts.

1 ↩️ 0 🔁 0 ♥️ via Web

Installed MonaApp for on MacBook. I can’t say I like its old-school Mac sliding panes UI. But it does have scores of settings and seems pretty configurable. Maybe I’ll give it a shot later.

1 ↩️ 0 🔁 0 ♥️ via Web

Ran into a bug in @MonaApp almost immediately. It assumes that posts have character limit of 160, which is not true on my server.

1 ↩️ 0 🔁 1 ♥️ via Ivory for iOS

I wish readers supported dark mode. I have dark mode turned on everywhere, but I still have to road PDFs like cavemen staring into blindingly bright fires.

1 ↩️ 1 🔁 1 ♥️ via Elk (canary)

OK great! The output of `pipenv install` is actually not fixed and fixed-output derivation does not work either. If someone with more experience in packaging applications for can help me out, I'd be very grateful.

3 ↩️ 1 🔁 2 ♥️ via trunks.social

Our small instance has 99.91% uptime according to DO uptime check. That is 39 minutes of downtime in 30 days. I wonder how other small instances are doing.

I haven't personally experienced the downtimes though. They must be happening while I'm asleep.

2 ↩️ 0 🔁 0 ♥️

I wonder if I should write a rebooster script that will boost my (or your) certain posts periodically, for a week or a month. Would people be interested in that?

1 ↩️ 0 🔁 0 ♥️ via Elk (canary)

I've been feeling unusually sleepy today morning, and I just realized that I forgot to drink today. I wonder if I can still drink a cup without wrecking my early sleep plan.

0 ↩️ 0 🔁 0 ♥️ via Elk (canary)

Using the iPad Air as an extended screen for my MacBook makes me wish I bought an iPad pro instead. :(

0 ↩️ 0 🔁 4 ♥️ via Elk (canary)

One downside of using dark mode everywhere on my laptop is that I rarely notice the dirt slowly accumulating on the screen. So I guess that's a ... win-win?

2 ↩️ 0 🔁 3 ♥️ via trunks.social

This maybe a specific thing, I wonder why nobody turns off their vehicles at traffic signals. Even if you don't care about the environment, why not save some money, fuel being so expensive now.

3 ↩️ 0 🔁 0 ♥️ via Web

One think no one tells you about having children is how difficult it is to get the forever looping baby rhymes our of your head.

3 ↩️ 0 🔁 1 ♥️

Updated to the latest version and had to input my password three times. Sometimes I rue the day I chose the super long password for extra security.

1 ↩️ 0 🔁 0 ♥️

Yep, I have the . In retrospect, I should have guessed this when I drank 2l of water in the morning itself.

1 ↩️ 0 🔁 1 ♥️

About 15 days later, I finally felt recovered enough to pre-sickness level. Is it me or the recovery time increases with age?

0 ↩️ 2 🔁 4 ♥️

I really wish for more to support per tag RSS/Atom so that I can subscribe to content that interests me and not clutter my feed reader.

1 ↩️ 0 🔁 1 ♥️ via Elk (canary)

Spent hours trying to debug this memory leak, just to fail again and again. Finally, decided to read the docs of all libraries used and the first one itself says:

0 ↩️ 0 🔁 2 ♥️ via Elk (canary)

Lesson learned: thoroughly read the docs and source of your dependencies. Or at least skim them once.

0 ↩️ 1 🔁 0 ♥️
An apt metaphor for most of the corporate jobs is painted right on my office building's wall.
0 ↩️ 0 🔁 1 ♥️

Wrote the script in and found myself mixing `filter`, `itertools`, `yield`, generator expression and list comprehensions, and `for` loops. It offends me to use so many different control flow mechanisms at the same time. I feel like there must be a better way to do this, but I'm no Python expert.

1 ↩️ 0 🔁 0 ♥️

is very dry this year because it hasn't rained in over four months. I don't remember when was the last time it didn't rain in winter here. Thinking of getting a humidifier, but then it may start raining this month.

1 ↩️ 0 🔁 0 ♥️

Changed the commenting service on my website from Staticman to a self-hosted Isso instance. Looks good so far.

0 ↩️ 0 🔁 0 ♥️

Now, only if someone would comment on one of my posts ...

1 ↩️ 0 🔁 0 ♥️ via Ivory for iOS

Someone commented just “Roll credits!” on my post and I think l am either too old or too non-american to understand what it means. Anyone's got any clues?

2 ↩️ 1 🔁 5 ♥️

Upgraded my website generator to use 9.4 and it took two hours to build. Well, that's the cost I pay for using bleeding edge software.

0 ↩️ 0 🔁 0 ♥️

To clarify, it wasn't GHC that took two hours to build. It was my website builder which uses and Shake.

0 ↩️ 0 🔁 2 ♥️

My cab is taking an unusual route today and as a result I am back in parts of that I have not been in many years. Things have changed but at the same time, they seem very much the same.

I've lived in so many different parts of Bangalore over the last decades that travelling within the city sometimes triggers waves of nostalgia.

1 ↩️ 0 🔁 0 ♥️

Running a massive update on my VPS today. I wonder what changed to cause this.

1 ↩️ 0 🔁 0 ♥️

I should integrate nvd in my deploy script to be able to see diffs.

1 ↩️ 0 🔁 2 ♥️

Went to a chafé today for some tea. Some people were sitting with their laptops as usual. But there was this woman sitting next to me with an entire server computer with her. I didn't disturb her.

3 ↩️ 0 🔁 3 ♥️

On the other side of my table was sitting a guy with a small laptop, wearing a black hoodie, with the hoodie on in this heat. I overheard him say, “The deployment is broken because some new guys checked in some code in our repo. I think the right way to solve this is to break our repo into smaller repos and create more microservices from them.” I didn't disturb him either.

0 ↩️ 0 🔁 2 ♥️

I hate how the hum of the cab engine hides the bassline of the I listen to while commuting. But I'm too cheap to buy good headphones with noise cancellation. So I guess this is my life now.

1 ↩️ 1 🔁 0 ♥️

What's a reasonably priced and good RSS feed to email service that I can use to send my posts to my twelve subscribers?

0 ↩️ 1 🔁 2 ♥️ via Web

Went for a morning walk after a long time. It's strange how expending energy makes us feel better compared to conserving energy as a couch potato.

2 ↩️ 1 🔁 4 ♥️

A random Netflix show about a guy going around the world on a inspired me to dust off my bike and go out for a ride.

Almost immediately I was reminded of why I don't cycle in anymore: Dust and smoke everywhere. Even with mask and goggles on, it was in my nose and eyes. Not to mention, the broken roads with pot holes and the terrible traffic.

5 years ago, I used to commute to work daily on my bicycle. Now it is hard for me to even imagine doing that. 😭

1 ↩️ 0 🔁 2 ♥️

Now my website's search indexes my Mastodon posts as well, along with my blog posts and notes. Another step towards .

0 ↩️ 0 🔁 0 ♥️

Switched from LocalStorage to IndexDB for caching the search index on the browser. Apparently, that's the recommended thing now. 🤷

0 ↩️ 0 🔁 2 ♥️ via Web

I've started downloading files to the temp directory now. That way, I don't have to go back and delete all the junk later on. And if something is important enough to be kept around, I move it the proper location fearing the automatic deletion.

1 ↩️ 0 🔁 1 ♥️

Turns out it was because of adaptive charging in which reduces the charging rate when you charge the phone at night. It expects me to charge the phone for the whole night, but I kept unplugging it in the middle of the night. Turned off adaptive charging and my phone is fully charged now.

1 ↩️ 0 🔁 1 ♥️

Set up a mesh router in my house. Finally I can read Reddit in each of my washrooms.

0 ↩️ 0 🔁 0 ♥️

I have feed reader apps on my phone, my iPad, my laptop, and my Kindle. Now to actually read all these blog posts ...

1 ↩️ 2 🔁 5 ♥️

The Man-running-to work-with-a-briefcase metal statue at the Sarjapur junction makes me feel understood when I pass it by on my way to work.

0 ↩️ 0 🔁 0 ♥️

I tried out @elk and I've decided that I'll switch to be as soon as they add support for hashtag and account lists.

0 ↩️ 0 🔁 1 ♥️

Some days I wake up inexplicably even after a full night's sleep. Today is one of those days.

0 ↩️ 0 🔁 0 ♥️ via Web

Spent the day thinking about how to compile my small language with coroutines to Javascript, without actually doing a CPS transform of the AST. I think I may have a solution involving yield* and setImmediate. Proof of concept yet to be done.

1 ↩️ 0 🔁 1 ♥️ via Web

Last week I spend almost three days to figure out a bug in my code. And the final fix was a single line change. It was both infuriating and exhilarating at the same time.

3 ↩️ 0 🔁 2 ♥️ via Web

I really like reading things on my Kindle. I wish there was an easy way to read all these interesting blog posts on it. Maybe a service to which I can send URLs, or points them to an RSS feed and it sends me a book for them.

0 ↩️ 0 🔁 1 ♥️

Is it me or this year's seems too heavy on automata, game plays and simulations? I was hoping for more parser and interpreter related problems.

1 ↩️ 0 🔁 1 ♥️ via Web

It worked! Couldn't figure out how to patch the service, so I copied the file, made the change in it, and replaced the service module with the copied one.

0 ↩️ 0 🔁 2 ♥️ via Web

Decided to play some old school today as work , instead of the usual. Liking it so far.

1 ↩️ 0 🔁 0 ♥️ via Web

The new Arctic Monkeys album is even more mellow than the previous one. Maybe I'll grow to like the new AM, but for now I miss the old one.

0 ↩️ 0 🔁 0 ♥️ via Web

TBH, I like the albums in the middle the most, around early 2010s. When they started out to mellow out, but were still Rock like.

0 ↩️ 0 🔁 1 ♥️ via Web

I use the bookmarking feature on as a read-later list to mark interesting posts that I want to read in depth, but I can't at the moment while scrolling the timeline. After reading them later, I remove the bookmark. Am I doing it right?

0 ↩️ 0 🔁 2 ♥️ via Web

I'm not doing all of this year after doing it for past couple of years. Most of the problems seem very similar to those in previous years. So this time, I'm going to pick only the ones that truly interest me.

1 ↩️ 0 🔁 1 ♥️ via Web

My plan this year was to solve them in . Unfortunately, Zig 0.10 is not available on and I was too lazy to install it manually. So I defaulted to .

0 ↩️ 0 🔁 0 ♥️

Also hooked up IFTTT to hit a webhook to deploy my website when I post a toot here.

0 ↩️ 0 🔁 0 ♥️ via Web

Looks like I'll also need to write a parser and use a tree zipper. Great!

1 ↩️ 0 🔁 0 ♥️ via Web

Saw someone's toot about trying to learn how to drive a geared car (or drive stick, as they say in USA). And here I am driving a geared car, and hating it, being anxious all the time about missing gear changes and driving in wrong gear. I'd love to not drive stick, but I can't buy a new car right now.

1 ↩️ 0 🔁 2 ♥️ via Web

I like solving #AdventOfCode problems with one liners, and I cannot lie (split into multiple lines below for your convenience):

solve n input =
(+ (n - 1))
. fst
. fromJust
. find ((== n) . length . snd)
. zip [1 .. ]
. map nub
. transpose
. map (flip drop input)
$ [0 .. (n - 1)]

1 ↩️ 0 🔁 0 ♥️ via Web

Turns out, ChatGPT cannot write quines, at least in Haskell. Quite a serious limitation.

0 ↩️ 0 🔁 1 ♥️ via Web

Took my 3am server admin sleep break to drink a cup of water and to ban those DDOSsing domains.

0 ↩️ 0 🔁 1 ♥️ via Web

Finally found time to catch up with my feed reader.

0 ↩️ 0 🔁 1 ♥️ via Web

If you are running a instance, be sure to ban the bad bots using Fail2Ban. Otherwise they'll soak up all your bandwidth by crawling the public assets and media.

0 ↩️ 0 🔁 0 ♥️ via Web

TBH, this is how it looked before I golfed it down:

1 ↩️ 1 🔁 1 ♥️ via Web

The upgrade to 22.11 worked almost smoothly! I had to
— disable a python service because of "infinite recursion encountered" error (I wanted to disable it anyway),
— change config of one service, and
— fix dependencies of two services.

0 ↩️ 0 🔁 1 ♥️ via Web

Advent Of Code '22 Day 1 was easy

Solved in GHCI REPL:

λ> import Data.List.Split (splitWhen)
λ> maximum . map (sum . map read) . splitWhen (== "") . lines <$> readFile "input1"
λ> import Data.List (sortOn)
λ> import Data.Ord (Down(..))
λ> sum . take 3 . sortOn Down . map (sum . map read) . splitWhen (== "") . lines <$> readFile "input1"

0 ↩️ 0 🔁 0 ♥️ via Web

I'm a bit disappointed that the hashtag is not about the 90's movie about a speeding bus that could travel in time.

1 ↩️ 0 🔁 0 ♥️

I've found and followed so many interesting people from different walks of life on Mastodon in the last one week. I don't think this would be possible on the Twitter of now.

1 ↩️ 0 🔁 1 ♥️ via Web

: Mastodon creates and exposes a public key for each user at <instance-url>/users/<username>.json.

I wonder if that can used for signing things we put on internet.

0 ↩️ 0 🔁 0 ♥️ via Web

I hate waking up and finding spam comment on my blog 😠

0 ↩️ 1 🔁 0 ♥️ via Web

Trying to figure out how to write health checks for on . Can't find anything on Google. Netdata docs are not straightforward.

2 ↩️ 1 🔁 0 ♥️ via Web

/ protip for people an Nginx server: add the following line to your Nginx virtual host config so that you can be found by a search like @me@yourdomain.com:

rewrite ^/.well-known/webfinger.* https://<your-mastodon-host>/.well-known/webfinger?resource=acct:<your-username>@<your-mastodon-host>? permanent;

1 ↩️ 1 🔁 1 ♥️ via Web

For example, my server at abhinavsarkar.net has this config:

rewrite ^/.well-known/webfinger.* https:// fantastic.earth/.well-known/webfinger?resource=acct:abnv@fantastic.earth? permanent;

(Minus the space after https://. Mastodon converts it to a link so I had to put the space.)

1 ↩️ 0 🔁 0 ♥️ via Web

So you can find me in Mastodon search by @me @abhinavsarkar.net

(Minus the space between. Mastodon automatically convert it to the resolved account so I had to put a space between.)

0 ↩️ 0 🔁 0 ♥️ via Web

Hardest part of is fixing the damned fail2ban that is too eager to ban everyone, including myself. But I wrote those ban rules so I'm the one to blame.

0 ↩️ 1 🔁 0 ♥️ via Web

Watching Mastodon Sidekiq logs is a very unhealthy obsession.

1 ↩️ 0 🔁 0 ♥️ via Web

Code to run Mastodon was only 20 lines. Rest was for system setup and security.

0 ↩️ 0 🔁 0 ♥️

I live on a ball of dirt going really fast around a ball of fire.

2 ↩️ 0 🔁 1 ♥️ via Web

So this is what happens behind the scene when you post a toot. All of sends requests to your server within seconds. I can imagine why Mastodon instances are so overloaded these days.

0 ↩️ 0 🔁 0 ♥️ via Web

Holding off moving completely to self-hosted instance till it reaches better feature parity with Mastodon. One thing I'll definitely miss is the Glitch-soc UI.

1 ↩️ 0 🔁 0 ♥️ via Web

I wonder if it can show highlighted code?

main = putStrLn "Hello world"
0 ↩️ 0 🔁 0 ♥️ via Web

Well, no code highlighting but at least we got:

  1. numbered
  2. lists
  • Bullet
  • lists
2 ↩️ 0 🔁 0 ♥️

I knew about for at least a few years but I was afraid that the clients would be unpolished. Now that I'm here, I must say I am pleasantly surprised by how good all Mastodon apps are. Both Android and iOS apps are easy to use and reasonably smooth. Though I don't use the web UI much, it's pretty good as well.

0 ↩️ 0 🔁 0 ♥️

Still trying to get Bridgy Fed working on my website. I can see my website on Mastodon but I don't see any posts, neither am I able to follow it. I guess it's time to look at the Nginx logs.

1 ↩️ 0 🔁 0 ♥️

I uninstalled Reddit, Hacker news and Twitter apps from my phone so Mastodon is my only friend now.

0 ↩️ 0 🔁 0 ♥️

My levels of yak shaving:

1. Get on Mastodon.
2. Enable Activity Pub for my website using Bridgy Fed.
3. Embed h-card on my website's home page.
4. Add support for transclusion in Markdown files.
5. Modify Mustache templating code to add support for chasing dependencies using Shake build system.

Fortunately, the stack has unwound now, for I am posting this on Mastodon, and my website is Activity Pub enabled.

0 ↩️ 0 🔁 0 ♥️ via Web

So I got on Mastodon. Next, find people to follow.