It’s been a good week. I got lots of work done. I am still lagging on some tasks due to dependencies, but I am almost there. I should be on track before Christmas. Also, I have been able to do two workouts at Stairs (P.T.), one generic session at Gold’s, and one pickleball session this week. Not bad, no?
Uma at the wedding waiting for food.
I think this is the ideal amount of physical things I want to do. I wish I knew proper swimming. So I could alternate between playing pickleball and swimming. It is on my list for Summer/2026.
It’s been two years (WN-48/2023) since I uninstalled Instagram. I don’t miss it a bit. It’s been one of my best moves, right up there with uninstalling Twitter.
We will be in Thrissur in the last week of this year and the first week of January. We might also go to Kochi for a day for the Biennale.
We were in Magadi for one of Uma’s cousin’s wedding. Uma loved the simple yet tasty food served at the wedding. I loved it too. I got to have ragi mudde at a wedding for the first time in a really long time, so I had two.
I mapped the music I listened to along the road using a simple script. I want to visualize it better. If you have ideas, send them to me. I am also adding data to MusicBrainz as I make my playlists on ListenBrainz, especially Kannada music.
I renewed my omg.lol subscription for five years at once. It has become excruciating to use an Indian credit card to pay subscriptions online, and omg.lol is an excellent service. I would suggest it to anyone who wants to try building small websites or blogs, trying Mastodon or XMPP, etc. They have been really stable in terms of uptime and their commitment to the open web.
Software is not FOSS if it doesn’t grant users the four fundamental freedoms. I think people can and should call their software whatever they want, but that won’t make the software FOSS. Ideally, the software should be under a GPL-compatible free license or at least an OSI-approved one. But I prefer Free Software, which focuses on users’ freedom, unlike Open Source, which focuses on developers.
I have an A6 pocket sketch notebook from Factor Notes, which I love. It’s small enough to fit in my small bag, 120gsm is thick enough, and it lies flat for easy writing or drawing. It’s only 128 pages, but it’s big enough for me. I also love B7 (aka passport) size pocket books. I do have them.
Databases in CouchDB are cheap. So I have many, many databases inside my CouchDB. I do have an offline backup using the couchdb-dump script. But this week, I created a new server on fly.io and set up one-way continuous replication. If required, I can switch at any point.
BLRHUBBA is from January 16th to 25th. There are some amazing events, and most of them are free. Book yours. There are also affordable paid donor passes.
Once I finished blogging my recent ride to Kupalli and back, I thought it would be great to map the songs to the location. I was scrobbling my music to ListenBrainz, and any GPS was logged as usual. Using the good old way of using timestamps to match things, I mapped location to songs and produced a geojson. Here is the map of them. Since day 1 and day 3 were the longest, I heard as many songs as possible. I have added day 2 for completeness, but I didn’t listen to much music that day.
I was introduced to Free Software around 2019. I was curious when I saw my brother using an obscure website “DuckDuckGo” instead of Google for his searches. I naturally looked it up and the thing that got my attention was the word “filter bubble”. Unlike the other words that were used on their homepage, such as “privacy” and “safe”, “filter bubble” didn’t bring any meaning to my mind. I searched for it on YouTube and found a 9 minute Ted Talk by Eli Pariser. It was amazing. I soon gave up Google.
Then after around a year I picked up a random book from my library when I was super bored during the lockdown. It was Permanent Record by Edward Snowden, which was (of course) bought by my brother a few years ago. I soon picked up an interest in privacy and free software. I first started with deleting (or disabling) all of the Google apps on my mother’s phone. A few years later I suddenly found myself contributing translations to various free apps. A few months after that I was writing articles and removing vandalism (which was usually related to caste) on Hindi Wikipedia. Finally I got stuck on OpenStreetMap; nowadays most of contributions go there. However, I go back to my old projects once in a while.
The impact of that video by Eli Pariser in promoting my interest in Free Software cannot be overstated. It even (kind of?) nudged me towards pursuing further studies in Economics. I wonder what would have happened if I haven’t seen that video: would I have become like my friends, who seem indifferent to even the most extreme violations of privacy?
Anyway, coming back to filter bubbles: switching to things like Newpipe and DuckDuckGo definitely improved my status in terms of breaking out of my bubble. However, recently I have noticed a sort of new bubble that has been forming around me. Though there are various things that constitute this bubble, Mastodon seems to be the most visible one.
I like Mastodon, and it’s definitely an improvement over traditional microblogging websites which were controlled by corporations. However the feed that I am seeing nowadays seems to talk only about a narrow set of topics.
Currently I am following 14 out of the 20 Mastodon users from Delhi. Out of those 14, only 5 are active enough to populate my feed with their boosts. Those 5 people (namely Sahilster, Kishy, Contrapunctus, Disaster2Life, and Ravi) usually talk about and boost stuff related to their niche. So, Sahilster talks about the new sexy IPv4 address in town, Disaster2Life is keen on enbies and Delhi Transport Corporation buses with smooth metallic bodies, Ravi is worried about his visa, Contrapunctus wants to start a rebellion against our AI overlords, and Kishy is… doing something.
Now I am totally fine with reading about gender rebels and the official procedure to get a travel visa to Luxembourg. But once in a while I want to talk about something other than these topics. However this becomes very difficult on Mastodon. For starters, searching or using tags wouldn’t suffice since they would be biased towards my point of view. On the other hand, the trending page on my server en.osm.town looks like this:
Aah well that didn’t work. Maybe I should check the Live Feed instead.
Nope. The server is the real problem. I am going to mastodon.social since that is more popular…
Hmm… The first post is about mobility, and the second one is about IoT. Not bad but I would like something which is not very popular… but urgh. It’s not filtering out non-english-and-hindi stuff because I am from en.osm.town. Wait, is there a way to see the live feed of mastodon.social from en.osm.towm? DucksDucksGoes. Oh I missed that! Checks. Stares
I have sex with my wife almost every day!
Almost on Monday, almost on Tuesday, almost on Wednesday…
Welcome to the last month of the year. 2025 seems to be getting over quickly. Work for me has been hectic. I have been busy. I think it will be until the end of the year. Hopefully, next month will be better.
On our way from Kudremukha near Kottigehara.
Wrote a blog post about my ride to Kuppalli. It’s a picture-heavy blog post. You have been warned. It was a good ride. I really enjoyed the route and company. I also uploaded a bunch of images of Kavi Shaila and Kavi Mane to Wikimedia Commons. There is also a map view of these contributions.
Uma has started developing a sense of self (ego). So now, for almost everything, first she says “no”, and everything is about “me” or “baby”.
Cold weather continues in Bengaluru. I know winter is here, but even for winter it’s cold.
I am back to workouts at Steps. I couldn’t play this week. But I got to spend some time on the treadmill for cardio outside Steps, which was good.
Uma likes to draw at least a couple of times a week. I have not drawn things in a long time. I found these simple line drawings by Shihor, which are fun to draw with Uma. Add her to my blogring as well.
Netflix, which helped create screencasting (then called DIAL), is silently killing it. With Amazon, Hotstar, etc., inserting advertisements, I think we are entering an era of the end of streaming services. MatterCast on top of Matter looks interesting, but it’s a long way to go before it reaches all home devices. If you like 2600, you will like PagedOut, a free online magazine about programming and hacking. If you are a Bangalorean (ಬೆಂಗಳೂರಿಗ), then the K100 waterway project could be of interest to you. You may prefer to watch a video.
You can read this blog using RSS Feed. But if you are the person who loves getting emails, then you can join my readers by signing up.
I wanted to go on a long ride at least twice a year. I was not even thinking of really long rides, just a decent three or four day ride. Last year, we could ride to Gokarna in WN-05/2024 and to Valparai in WN-40/2024. But this year’s beginning was very painful due to radiculopathy. It was so bad that I thought I wouldn’t be able to ride any decent distance again. Thanks to my physiotherapists, I have recovered enough to ride another 850+ km, including some bad stretches without pain.
Thej, Manju and Sandeep
Most of us have read Kuvempu and have been fans of his writing. He was alive until the 1990s, but we didn’t get to meet him. So when we started talking about the destination to ride, I pitched Kuppalli and Kavishaila. And all of my friends immediately thought it was a great destination. We made it into a loop through Agumbe and Kudremukha to make the ride more fun.
Here is an interesting fact. I am visiting Kudremukha after 22 years. I was in Kudremukha in 2003 for a trek with friends, and it was the first travelogue that I wrote as an email for friends and blogged it here for strangers. Twenty-two years later, both processes are merged. I just blog now. 🔴 I have lots of pictures and two time-lapse videos. So this post is media-heavy. You have been warned.
Day 1: Bengaluru to Kuppalli/Theerthahalli
We started early, around 04:30 AM. The plan was to gather at Guraguntepalya and leave from there together at 05:00 AM. Sandeep had borrowed a C30, which we tried to connect to our group, but it failed miserably. We wasted a bunch of time on it and gave up. Finally, we left at 06:00 AM, with just Manju and me on comms.
On the way, Sandeep saw the Bhadra dam board and suggested we visit it. So we took a slight diversion to see it. It was worth it.
Bhadra dam backwatersBhadra damBhadra damNear Bhadra damOn the wayOn the wayBhadra dam backwaters
The Bhadra Dam or Lakkavalli Dam, which has created the Bhadra Reservoir, is located on the Bhadra River a tributary of Tungabhadra River. Bhadra Dam is located in Chikmagalur district on the border of Bhadravathi and Tarikere, in the western part of Karnataka in India.
I am in Kuppalli, the home of poet Kuvempu. We rode today and reached this evening. We are visiting the memorial of Kuvempu (Kavishaila) and Poornachandra Tejaswi here. Over the weekend, we are riding to Agumbe, Karkala, Kudremukha, and back to Bengaluru by Sunday night.
Kavi shailaKavishaila
💻 The workweek was hectic because it was a four-day workweek. And I was trying to fit everything. There were lots of meetings, interviews, reviews, clarifying things, and a bit of coding. I was also prepping for the ride, so that added to the business of the week. But it was a fruitful week.
ğŸ��ï¸�This ride to Kuppalli is my longest this year. I am happy I am in a state to do it, especially after the neck pain. Also, I have done three good rides since I restarted motorcycling last year, to Gokarna in WN-05/2024 and to Valparai in WN-40/2024, which isn’t bad.
�� I also took some time to review my riding gloves.
📚 Uma and I spent the first half of Sunday at the BIC Library attending a Young BIC event. It was meant for children from 6 to 14, but there were a few younger ones too. Your child can also get a library card by attending the event.
📮Added new postboxes. A friend sent a bunch as well. I am also trying to recover images from the previous Instagram-based work. I could pull it from my Instagram. I will have to check other contributors’ accounts now.
ğŸ�‹ğŸ�»â€�♀ï¸� Just one day of workout. No play this week as I couldn’t get people. Maybe I should also start playing with strangers.
🌦ï¸� Winter is here. It is pretty cold in Bengaluru, especially early in the morning. However long you sleep, it’s hard to wake up early because of this.
ğŸ“� Some of the GPX files stopped displaying on the site because the TopoJSON parser couldn’t parse them. These GPX files were missing an XML declaration at the top. XML declaration is not compulsory. So at some point, they were working, but suddenly stopped when the parser was updated. I had to update the files and then replace them in WordPress. I used Enable Media Replace to replace them easily. I could have also SSHed into the server and edited the files in place. I tried this plugin, so I could recommend it to friends if necessary.
ğŸŒ� It isn’t easy to grasp how far one light-day is. It is roughly 6.46 Lakh times around the Earth (24*60*60*3 lakh km)/40,075 km = 6.46 Lakh. Anyway, for the very first time, a man-made object is one light-day far from Earth. The EU forces Apple to implement the Wi-Fi Aware standard, which enables Airdrop/Share between iOS and Android. Hope to see it soon outside the OS, and in regular apps like LocalSend or KDEConnect. That way, it’s available on all platforms. It’s excellent news for interoperability. BTW, Localsend is a great FOSS app for sharing files and content across Windows, macOS, Linux, Android, and iOS.
You can read this blog using RSS Feed. But if you are the person who loves getting emails, then you can join my readers by signing up.
I am reviewing this late, but this is the first gear that I bought when I decided to restart motorcycling. I still think that, after you get a decent helmet (in my case, borrowed), you should get a decent pair of gloves. I have never bought or worn motorcycle riding gloves. I have had a pair of regular gloves that I also used for riding, mainly to protect against friction-induced skin rashes.
Yamaha with my regular riding gear – Helmet and Gloves
Requirements
Good knuckle protection
Scaphoid Protection System
Bright, reflective
Touch Friendly
Comfortable to wear
Affordable
Solution
I got myself a Scala Viper Gloves in Black and Neon. It kind of suited all my needs except maybe price. I had no prior experience with using riding gloves. I went by what I read and the suggestions from a couple of friends.
Scala Viper Glove – Black NeonAdult Trekking Silk Liner Gloves – MT 500 Black
Touch screen friendly tap Fingertips on index fingers
Cuff length and pre-curved fingers for comfort fit
Soft viper on the left hand, you can use it to clean the helmet visor in the rainy season.
Things to Improve
Inner lining is not that great. A stitching or seam leaves marks on my hands after a long ride, which isn’t great. After a bit of research, I found a pair of trekking silk liner gloves MT 500 Black at Decathlon. I use this as an inner lining for gloves, and it works really well. It does reduce touch sensitivity, but it doesn’t bother me. It’s stretchy, breathable, and also keeps your hands warm and dry. Also its easy to wash and keep this liner gloves clean. That way I don’t have to clean the inside of riding gloves often.
Conclusion
At around INR 4000, it’s not very cheap. But I have bruised my hands/palms before, so I think it’s a good investment. It has undoubtedly increased my confidence. I have also used it for more than 2000 km now, and it’s not bad. With inner-lining gloves, it’s been great.
You can read this blog using RSS Feed. But if you are the person who loves getting emails, then you can join my readers by signing up.
Bangalore has suddenly turned very cold, apparently due to a cold wave. It’s been at least 4 to 5 degrees colder in the early mornings. I had a bit of a temperature, a cold, and a sore throat most of the week, thanks to the weather and Uma. School kids are super spreaders. I missed a workout and game day.
Uma, collecting flowers on one of those evening walks.
It’s been a hectic week at work, too. I couldn’t focus much due to an irritating cold. Still, I am happy that I got the important stuff done at least.
I am trying to add image tags to the OSM post boxes. Currently, I am using images hosted here, panoramax, and on Wikimedia Commons. MapComplete has an option to upload images under CC-BY-SA that go to panoramax. It’s an easy way to upload to panoramax without knowing about it. Soon, I will have to find a standard way to do this. Maybe it’s here, Are.na and panoramax. That should guarantee that the images exist somewhere.
After a lot of thinking, I gifted myself a riding jacket. It’s a canvas urban riding jacket. I will write about it once I use it next week. Look and feel match the advertisement.
One of the most prominent features of Buddhism is free inquiry and the ability to question. It comes through clearly in the Kalama Sutta, which recounts a conversation between Gautama Buddha and the people of Kesaputta village. The sutta is very small, a couple of pages, but it is very dense. You could spend days thinking about it.
Public AI is a nonprofit, open-source project that supports the work of public AI model builders from Singapore, Switzerland, Sweden, and others. You can try them in chat mode.
You can read this blog using RSS Feed. But if you are the person who loves getting emails, then you can join my readers by signing up.
Just like a ship needs an anchor to stabilize and hold it to port, humans too, I feel, have and require anchors to hold them in life. It could be an emotional anchor, a physical anchor, an anchor that stimulates your curiosity, a family member, a friend or a partner or a spiritual being.
An anchor holds you and helps you stabilize in stormy weather. An anchor can keep you going or stop you from going. An anchor orients you, helps you formulate your values and beliefs.
An anchor could be someone or something or oneself (thanks Saswata for the thought). Writing here is one of my anchors; what’s your anchor?
I have not ridden a motorcycle for than a couple of kilometers since my neck pain started. Now, I don’t have pain. But I wanted to take a test ride with a heavier helmet before I go on my planned long ride. Also, I have not taken Yamaha on a long ride. And I had not been to Manju’s farm, which is around 80+ miles from the city.
Early morning start.
All this came together this week, as I rode a Yamaha for over 170 kilometers in a day, along with Manju. Yamaha rides well as it used to, the sweet-spot is still at 65 KMPH. It’s front shock absorbers are as good or as bad as they used to be. The overall ride was comfortable, except for a minor issue with the kick-start. But nothing a slight self-push in 2nd gear doesn’t solve. I suspect fuel injection.
There’s this Bollywood movie by the name of Special 26, and I have been wishing all my friends turning 26 with this, hence the name Special 26. There isn’t anything particularly special about turning 26 though I’m realizing I’m closer to 30 than 20 now.
The happenings on my birthday and subsequent home visits have made me more grateful and happy for having friends and family who care. With age, I have started noticing small gestures and all the extra efforts they have been doing for me since forever, and this warms my heart now. Thank you, everyone. I’m grateful for having you in my life. :)
Learning-wise, DNS, RFCs, and discovering the history of my native place have been my go-to things recently. I went heavy into Domain Name System (DNS), which also translated to posting 1, 2, 3 and eventually taking the plunge of self-hosting name servers for sahilister.net and sahil.rocks.
There has been a shift from heavy grey to friendly white clothing for me. The year was also marked with not being with someone anymore; things change.
In 2025, somehow I was at the airport more times than at the railway station. Can say it was the year of jet-setting.
Being in another foreign land opened my mind to the thought of how to live one’s life in a more mindful manner, on which I’m still pondering months after the trip. As Yoda said - “Do. Or do not. There is no try”, I’m trying to slow down in life and do less (which is turning out harder) and be more in the moment, less distracted. Let’s revisit next year and see how this turned out.
Continuing from where Badri and I left off in the last post. On the 7th of December 2024, we boarded a bus from Singapore to the border town of Johor Bahru in Malaysia. The bus stopped at the Singapore emigration for us to get off for the formalities.
The process was similar to the immigration at the Singapore airport. It was automatic, and we just had to scan our passports for the gates to open. Here also, we didn’t get Singapore stamps on our passports.
After we were done with the emigration, we had to find our bus. We remembered the name of the bus company and the number plate, which helped us recognize our bus. It wasn’t there already after we came out of the emigration, but it arrived soon enough, and we boarded it promptly.
From the Singapore emigration, the bus travelled a few kilometers and dropped us at Johor Bahru Sentral (JB Sentral) bus station, where we had to go through Malaysian immigration. The process was manual, unlike Singapore, and there was an immigration officer at the counter who stamped our passports (which I like) and recorded our fingerprints.
At the bus terminal, we exchanged rupees at an exchange shop to get Malaysian ringgits. We could not find any free drinking water sources on the bus terminal, so we had to buy water.
Badri later told me that Johor Bahru has a lot of data centers, which need a lot of water for cooling. When he read about it later, he immediately connected it with the fact that there was no free drinking water, and we had to buy water. Such data centers can lead to scarcity of water for others in the area.
From JB Sentral, we took a bus to Larkin Terminal, as our hotel was nearby. It was 1.5 ringgits per person (30 rupees). In order to pay for the fare, we had to put cash in a box near the driver’s seat.
Around half-an-hour later, we reached our hotel. The time was 23:30 hours. The hotel room was hot as it didn’t have air-conditioning. The weather in Malaysia is on the hotter side throughout the year. It was a budget hotel, and we paid 70 ringgits for our room.
Badri slept soon after we checked-in. I went out during the midnight at around 00:30. I was hungry, so I entered a small scale restaurant nearby, which was quite lively for the midnight hours. At the restaurant, I ordered a coffee and an omelet. I also asked for drinking water. The unique thing about that was that they put ice in hot water to make its temperature normal.
My bill from the restaurant looked like the below-mentioned table, as the items’ names were in the local language Malay:
Item
Price (Malaysian ringgits)
Conversion to Indian rupees
Comments
Nescafe Tarik
2.50
50
Coffee
Ais Kosong
0.50
10
Water
Telur Dadar
2.00
40
Omelet
SST Tax (6%)
0.30
6
Total
5.30
106
After checking out from the restaurant, I explored nearby shops. I also bought some water before going back to the hotel room.
The next day, we had a (pre-booked) bus to Kuala Lumpur. We checked out from the hotel 10 minutes after the check-out time (which was 14:00 hours). However, within those 10 minutes, the hotel staff already came up three times asking us to clear out (which we were doing as fast as possible). And finally on the third time they said our deposit was forfeit, even though it was supposed to be only for keys and towels.
The above-mentioned bus for Kuala Lumpur was from the nearby Larkin Bus Terminal. The bus terminal was right next to our hotel, so we walked till there.
Upon reaching there, we found out that the process of boarding a bus in Malaysia resembled with taking a flight. We needed to go to a counter to get our boarding passes, followed by reporting at our gate half-an-hour before the scheduled time. Furthermore, they had a separate waiting room and boarding gates. Also, there was a terminal listing buses with their arrival and departure signs. Finally, to top it off, the buses had seatbelts.
We got our boarding pass for 2 ringgits (40 rupees). After that, we proceeded to get something to eat as we were hungry. We went to a McDonald’s, but couldn’t order anything because of the long queue. We didn’t have a lot of time, so we proceeded towards our boarding gate without having anything.
The boarding gate was in a separate room, which had a vending machine. I tried to order something using my card, but the machine wasn’t working. In Malaysia, there is a custom of queueing up to board buses even before the bus has arrived. We saw it in Johor Bahru as well. The culture is so strong that they even did it in Singapore while waiting for the Johor Bahru bus!
Our bus departed at 15:30 as scheduled. The journey was around 5 hours. A couple of hours later, our bus stopped for a break. We got off the bus and went to the toilet. As we were starving (we didn’t have anything the whole day), we thought it was a good opportunity to get some snack. There was a stall selling some food. However, I had to determine which options were vegetarian. We finally settled on a cylindrical box of potato chips, labelled Mister Potato. They were 7 ringgits.
We didn’t know how long the bus is going to stop. Furthermore, eating inside buses in Malaysia is forbidden. When we went to get some coffee from the stall, our bus driver was standing there and made a face. We got an impression that he doesn’t want us to have coffee.
However, after we got into the bus, we had to wait for a long time for it to resume its journey as the driver was taking his sweet time to drink his coffee.
During the bus journey, we saw a lot of palm trees on the way. The landscape was beautiful, with good road infrastructure throughout the journey. Badri also helped me improve my blog post on obtaining Luxembourg visa in the bus.
The bus dropped us at the Terminal Bersepadu Selatan (TBS in short) in Kuala Lumpur at 21:30 hours.
Finally, we got something at the TBS. We also noticed that the TBS bus station had lockers. This gave us the idea of putting some of our luggage in the lockers later while we will be in Brunei. We had booked a cheap Air Asia ticket which doesn’t allow check-in luggage. Further, keeping the checked-in luggage in lockers for three days was cheaper than paying the excess luggage penalty for Air Asia.
We followed it up by taking a metro as our hotel was closer to a metro station. This was a bad day due to our deposit being forfeited unfairly, and got nothing to eat.
We took the metro to reach our hostel, which was located in the Bukit Bintang area. The name of this hostel was Manor by Mingle. I had stayed here earlier in February 2024 for two nights. Back then, I paid 1000 rupees per day for a dormitory bed. However, this time the same hostel was much cheaper. We got a private room for 800 rupees per day, with breakfast included. Earlier it might have been pricier due to my stay falling on weekends or maybe February has more tourists in Kuala Lumpur.
That’s it for this post. Stay tuned for our adventures in Malaysia!
During the conference, Subin had this crazy idea of shooting “Parody of a popular clip from the American-Malayalee television series ‘Akkarakazhchakal’ advertising Debian.” He explained the whole story in the BTS video. The results turned out great, TBF:
I managed to complete The Little Prince (Le Petit Prince) during my travel from Paris to Brest
Paris
Basilica of the Sacred Heart of Montmartre
View of Paris from the Basilica of the Sacred Heart of Montmartre
Paris streets
Cats rule the world, even on Paris streetlights
Eiffel Tower. It's massive.
View from Eiffel Tower Credits - Nilesh Patra, licensed under CC BY SA 4.0.
As for the next DebConf work, it has already started. It seems like it never ends. We close one and in one or two months start working on the next one. DebConf is going to Argentina this time and we have a nice little logo too now.
DebConf26 logo Credits - Romina Molina, licensed under CC BY SA 4.0.
Overall, DebConf25 Brest was a nice conference. Many thanks to local team, PEB and everyone involved for everything. Let’s see about next year. Bye!
2-3 months ago I changed my usual jeans + sports shoes + t-shirt attire to a weird combo of shorts + boots + aloha shirt. It worked. My friends appreciated my “fashion,” though there was some mumbling about showing too much skin. After that, 1 month ago I started using a 3M 6200 Respirator. If you don’t know what that is, try imagining a “nuclear mask” which only filters the usual pollutants in the air. I expected a lot of questions from my friends, but weirdly only 4-5 people asked me anything about the mask in that initial month. Even then those questions were pretty reserved.
Today however I had to go back to my usual black jeans since the shorts were in washing. I had to pair it with a shabby grey shirt, which resulted in the most normal outfit one can see in a college.
I didn’t expected its effects though. I was stopped in cafeteria, on the steps, in the corridor, and in the bathrooms, to inquire about my mask. At the end of the day, I had a nice talk with more than 8 new people. I was surprised by this sudden surge in interest. On some reflections, I found that it is probably due to my “uncool” clothes. Either my previous clothes were grabbing attention away from my mask, or they were displaying me as a cool person and hence unapproachable (which I am not).
People keep saying email is decentralised, and on a technical level that's true. Even today, anyone can fire up an email server and start sending emails to anyone else out there.
In practice, though, I've seen those who run their own mailservers increasingly complaining about the difficulty of managing their server's "reputation", especially in the spam filters of Big Tech companies. A lower reputation means your email are more likely to end up in a spam box—which makes Big Email very happy, because it'll tempt you to sign up and pay for their services after all (you don't always pay in money, but you do always pay).
To keep themselves happy, Big Email has very opaque or often nonexistent rules about how to get your email server off the blacklist if it ever falls into one. I learnt this the hard way when Snipette's servers got blacklisted due to a silly own-goal we did.
You see, even though we had our own mailbox, most of us were too comfortable with Gmail's familiar web interface to think of anything else. So we ended up using it the dumb way, which was to forward all snipettemag.com emails to our gmail.com address. Like all public email addresses, we used to get a lot of spam emails (would that actual article submissions were that frequent!) which we'd throw disdainfully into our spam box...or rather, to Gmail's spam box. That's where the trouble began, because all the email we were receiving was being forwarded from snipettemag.com to Gmail, so what Gmail learnt was that "dog, these snipettemag.com people sure do send a lot of spam!"
This led into a Black Mirror-esque series of bounced emails and documentation stonewalls to get our IP address reputation back—or at least, it seemed like things might go that way. Fortunately, we happened to anyway be shifting to a different webhost at the time, which came with a different IP address That allowed us to start again with a clean state (at the expense of whichever poor folks our old IP address was next assigned to).
Rather than auto-forwarding Snipette emails to Gmail's inbox, the better solution would have been to link up Gmail so that it managed Snipette's inbox directly (yes, adding an external IMAP server is a thing in Gmail, as is setting up an external SMTP server which we'd already done to be able to send emails fromsnipettemag.com rather than gmail.com).
Fortunately, we managed to go to the even better solution, which was to abandon Gmail entirely in favour of NextCloud Mail, whose interface had become good enough to use by then. (Local email clients like Thunderbird are also an option if you have a device of your own and don't have to keep borrowing your parents').
While things turned out well for Snipette, the lesson here is that if you care about delivering emails to Big Email users, mistakes can be costly. Worse, this helps spread the impression that email is "highly complex" or "difficult to set up" which would discourage new people from trying it at all. I don't know if this is just an impression that spread or something that has been deliberately perpetuated (maybe a bit of both?). It may be true of a very large-scale or specific email setups, but I've been hosting email myself on one domain or another since I was 12, with the process usually being so guided that setting it up was more like an automatic afterthought than a conscious decision.
This can have an impact even at the national level. I remember my friends studying at Rishi Valley, a small alternative school operating in rural Andhra Pradesh, emailing me using the local Rishi Valley operated email server. Today, by contrast, even IIT Madras opts to use Big Email for its newer programmes. (IIT Madras still operates its own email servers for its main domain, as do the IITs of Kharagpur, Bombay, Kanpur, and Delhi. Concerningly, every other IIT, despite being among the ranks of the country's top technical institutions, relies on Google or in some cases Microsoft instead of running their own email server.) Meanwhile, the government, in trying for digital souvereignty, has instead taken a leap backwards by shifting away from selfhosting to a Big Tech firm, albeit a local one.
Email isn't hard, but battling Big Email's spam filters can be frustrating and exhausting. Taking advantage of this are many "email delivery services" that have sprung up, offering you an API to deliver your emails for you in exchange for a subscription. They say they have the infrastructure to make sure your emails are delivered, but the more important ingredient is the organisational and legal clout and scale to make sure Big Email allows them in.
All this is much more work than it should be. And that's why, every so often, one selfhoster or another pops up saying they're giving up and going to switch to a bigger provider instead. This doesn't necessarily have to be Big Email—there are many not-so-big email providers to choose from as well—but it does defeat the goal of everyone being able to (theoretically) spin up their own email server.
A common problem faced by selfhosters is being in the stage where emails from your server aren't all summarily marked as spam, but the first email you send to any new Big Tech contact is marked so, nipping in the bud what could otherwise have been an engaging or fruitful conversation.
At Snipette, we do the hack of sending our first email to a new contact through one such delivery provider, Mailgun, with whom we already have a subscription for bulk delivery of our newsletter (a whole different story in itself). When they reply, we continue the conversation through our own mail server, because their spam filters would have figured out by then that ours is a desirable email.
Of course, this is only necessary for those providers which actually treat our emails in such a way. For us, it's mainly Google. Since a lot of places which use their own domains are still hosted on Google (looking at you, new IITs) a quick way to check this is to look up the MX record and see if it points to Google's domains.
These records aren't showing up any Google related domains like aspmx.l.google.com to me, so if I'm writing to anyone on an iitm.ac.in domain I don't have to go through the whole first-contact rigmarole (some of the subdomains are, sadly, a different story).
If you don't have a handy Big Tech email API lying around as a backup, you might begin to think: what's the point? Taking a step back, why selfhost at all if all your emails are going to end up at Big Tech inboxes anyway?
But here's the thing: if there's so many of us selfhosters having the same dilemma, perhaps we can at least email each other? I have no interest in setting up arbitrary barriers to people who want to contact me, and neither, presumably, do you.
So, to the selfhosters thinking of giving up and going to Big(ger) Email, I would say: do that if you must, but keep your small email around too.
It's the only way we can have the alternative email network—the truly open and decentralised one—up and ready.
It's also the place where we can figure out better, more inclusive ways of doing things. Spam is a serious problem, but it doesn't have to be Big Email who gets to decide how we handle it. As long as you have at least one other Small Email person to communicate with, your selfhosted server is serving an important purpose.
This conversation is from a discussion that took place on the FSCI groupchat. I decided to share it here since it might be useful for others as well. Your responses are slightly edited, but mine are copied more or less as-is.
I've spent so much money on renting a static IP address and buying machines to run Linux, BSD and other OSes to host open source stuff. But it's starting to get very expensive. Is it really worth it?
Maybe I should just focus on using AI so I can land a good job and then contribute to Free Software later...
Sounds fair about using proprietary software; not everyone has the luxury to use fully Free Software and even my brother has ended up having to use WhatsApp to maintain some social connections
But I just want to point out that using LLMs the way you're doing is also unlikely to make you successful and make you a good programmer
It could be a shortcut to getting semi-working prototypes, but think of it this way: if prompting is so easy, there's nothing stopping someone else from doing it rather than hiring you. What's going to set you apart is concrete skills like reading documentation and asking questions
If you really want to get in on the hype, the best place in my opinion is probably to learn more about the underlying mechanisms of LLMs and work on that: training, statistics, etc.
I see, thanks for the suggestions. I will try to improve my skills instead of wasting time on LLMs
I was learning about ML stuff to make models to achieve different tasks which is not a bubble like LLM: it has been used in the industry for a long time and hopefully it will be used even after the LLM bubble bursts
By the way, a couple of things I wanted to add are that there are ways to try out stuff even without spending a lot of money. I didn't have any access to online payment mechanisms when I started programming, so I used a free account on HelioHost and a patchwork of various other services where I could eke out an existence for my web projects. This helps me to call out bullshit even today when people say that I need to pay $5/mo for this or that service. There were some free things like domains on dot.tk that were available back then, which aren't around any more, but there must be new free things as well to work with. I would say not having money was a blessing in disguise, but it wasn't even really a disguise because I didn't feel any limitations.
The second is that community is important. The most obvious aspect of this is the ability to ask questions and conversely to help answer the questions of other people. I learnt this on the HelioHost forums and also on Q/A oriented places like Ask Ubuntu and other parts of the Stack Exchange network
One reason I dislike people asking LLMs for answers is that these answers (or the training for them) would have originally come from places like SE, but when people get an answer from an LLM there's no reciprocation—not even upvoting which would make a person happy to know their question is useful to many people and motivate them to engage more. Without engagement in those spaces, there's less motivation to ask new questions and write new answers, which is bad even from a hedonistic LLM-centred perspective as LLMs would end up relying on answers from an increasingly stale dataset
�
The main requirement for asking questions on those networks is a bit of patience while someone responds to your query. This wasn't an issue for me as my computer time was limited so I'd come back the next day to find an answer. In the longer run, you will also learn how better to frame questions even to the extent of narrowing down to the answer yourself (and still posting on SE, in case it helps someone else)
That was the obvious part of community, but the less often repeated part is to respect the resources you were given. I could have created multiple accounts on HelioHost to get around storage limits, but everyone doing this would lead to a breakdown of the entire system. Similarly, the first thing one used to learn about when getting into web crawling was to respect robots.txt directives. Big Tech companies have now violated this rule resulting in large swathes of the Web closing itself off behind memberships, registration-walls, and paywalls in an act of self-preservation
My advice here would be: take a bit of time to read and internalise the rules and norms of the community. Disobeying these rules and norms may be benificial to you in the short term (or even forever), but (a) it'll make people hate you, and (b) too much of it happening would disrupt the community itself. These norms are what make a community a community rather than a set of self-centred persons. And yes, "everyone who has a website on the Internet" is also a community of sorts
�
Finally, about programing itself: I think using LLM coding assistants are best likened to copy-pasting code snippets. They work to get a quick job done. Even I've done it (copy-pasting, I mean), including to build an ecommerce website using Perl, CGI, and minimal JavaScript. At the end of it, I had no idea I had used Perl and had only a minimal understanding of what CGI was, but it got the job done
😵
However, this was only a first step to understanding. It gave me the confidence that I could put something together and it'd work (maybe this is where LLMs differ as it's less of you putting things together and more of the machine attempting to do it). The next step is to go and read proper tutorials and documentation to get a good idea, from first principles, of how things work. My preferred method for this is O'Reilly books but I suppose there must be video resources and stuff to if that's what you prefer
Reading through the entire Django documentation for example gave me a good understanding of what the framework could do, so I could choose not just a way to do it but one of the optimum ways of doing it. It also helped me muddle my way through other frameworks like Laravel without reading the docs because I had a sense of "Django has an elegant way to do __, so there must be a similar way to do it in Laravel"
Since my computer time was restricted (as I mentioned before), having this full overview also allowed me to plan out code in my notebook and keeping it ready to type out. Indirectly, it would have accelerated my getting familiar with the code (I still plan things in my head quite often, though not necessarily in a notebook)
My strategy with code snippets right now is to type out the entire snippet again instead of copy-pasting: it's more time-consuming, but it helps me internalise and properly understand it. (When copying from my own code, I more often copy-paste because I already know how it works).
Code completion through static analysis and other methods is cool though; I only configured my emacs for it a few months ago and should look into fine-tuning it more 😇
Contrast this with someone I saw who made some code changes because "Claude told me to do it" but when the suggestions ended, they were totally lost about what the changes did and where to go next because they hadn't understood the code, only prompted an LLM to go through it
The conversation ended with an addendum from asd who encouraged me to post it to my blog:
The contradictions of capitalism is such that as long as claude is sending tokens and as long as you're willing to operate it, there'd be a capitalist who will want you to do it (and will pay your claude subscription fee) because he can sell your prompting labor for 10-50x what it costed him
...and they won't care if you know the craft of programming.
But they might care when they need somebody to fix the mess of a codebase that the LLM has produced?
Only if they can't get away with it.
Anyway in conclusion the above would help the reader become somebody I'd be able to think of hiring
Thanks for reading; please comment your thoughts and don't forget to like, share, and subscribe 🔔
Ctrl-C, Ctrl-V to your blog
But if I were to follow my principles I'd have to type it out again instead of copy-pasting ðŸ˜
I have been mapping addresses on OpenStreetMap since a long time. During this time I have been also frequently referring to the wiki page for guidance whenever I felt my method was wrong. This post is the result of all the stupid mistakes I found during this checking of wiki. I hope that others wouldn’t make those same stupid mistakes.
Though this post is based on my experience in India, it should be useful to people elsewhere in the world.
The mapping process looks like this:
Check if the neighbourhood or the street is present on the map. If it’s not, then add it.
Create the building if it’s not on the map. Then add addr:street (or addr:place) and addr:housenumber (or addr:housename) to the building depending on the address.
That’s it. Now let’s elaborate on some things.
Point (1) is not something which is mentioned frequently but which is needed if you want to use your addresses in apps like OsmAnd in a proper fashion. So, start adding those name to the roads and start creating label for your neighbourhoods!
The address should be always attached to the building instead of the shop/office/etc residing inside that building. This keeps the building nice and steady even as the things inside it keep changing. The address should be on only one feature, that is building. Use addr:unit to specify the address of different things inside the building. Ensure that the things are placed inside the building.
This one’s obvious but please don’t add the name of the place in addr:street.
The addr:place can contain anything that is written just after the housenumber or housename. It’s even OK to use things like “WZ Block” or “Pocket 5.” Just ensure there’s a proper hierarchy of places. In “156, Pocket 9, Sector 41, Dwarka, Delhi” for instance “Pocket 9” should go in addr:place, while Sector 41 should go in addr:suburb and Dwarka will go in addr:quarter. These last two can be ignored while actual mapping since they can be inferred from the data.
The addr:housenumber should contain the whole identifier that is used to locate the building. Something like “WZ-156/2A” is totally a valid identifier. It has been argued that since “WZ” is a block it should instead go in addr:block. I usually disagree with this sentiment since blocks in the Indian context refer more to a random group of houses instead of a proper city block. If one actually wants to separate the “WZ” part they should instead add something like “WZ Block” to addr:place. Even in that case the identifier should remain unchanged.
Also one should only use addr:street or addr:place in an address but not both. A lot of roads in Delhi have names that aren’t actually used by the locals. So, use addr:street only if it is used more often then the name of the neighbourhood. Similarly, one should only use addr:housename or addr:housenumber but not both.
When you are done, try looking up the street or neighbourhood on OsmAnd and be ready to be pleased with a nice list of all the addresses under that head.
I used to be amazed at depressed people talking about heartbreaks with intense passion. It can’t be that bad, right? That person might used to be very important to you, but surely you can easily overcome the sadness and move on to the next part of your life? The whole affair appeared simple.
And with those ideas I entered my college. I was never very popular at the school, though I had plenty of chances. It was mostly due to my poor communication skills; for an outsider, I must have looked like a mild case of “Komi Can’t Communicate.” So, I wasn’t expecting much for my new college life. My low expectations served me right as the first year passed quickly; I was friendless.
In the second year, however, I suddenly found myself with a close friend. I can’t remember how it started; I probably must have initiated by challenging her for a game of chess, since I had zero idea about the kind of stuff “normal people” usually talk about. Soon we slowly, or maybe suddenly, started talking a lot on WhatsApp. (Sorry. I wasn’t very knowledgeable about XMPP at that time.) I have no memory of these chats. What in the world could we have been possibly be talking about?
At some point out of time, I suddenly found myself debating with her on abortion. She turned out to be an anti-abortionist. (Ugh.) Unfortunately, She eventually “won” the debate. I explained it away as a temporary disorder in the sequence of my logic, but the experience was pleasurable nevertheless. We started debating more, and we started playing online games. It was going good. (There were occasional fights, but it was mostly me acting hurt to gain her sympathy or make her feel bad. Not nice.)
A few weeks later the exam started. It wouldn’t have been a good idea to continue our daily conversations at that time, so we ceased it more or less for our preparations. This was too much for me. I lost my supply of dopamine; and in its absence I started compiling a history of our past conversations. (I have zero idea why I did that.) I later showed it to her, which was a bad idea. She didn’t say much, but her disapproval was evident. I must have seemed kind of creepy.
Well anyway, we continued doing our thing once exams were over. But something was amiss. Things were omitted. Suspicion. It felt like she was trying to push me away. My frustration suddenly bursted one day when we were talking about Astrology. She believed in horoscopes and stuff. (The youth, minus me, these days!) My anger boiled over. Then her anger boiled over. End.
Surely the fight was just a blip and not complete destruction of the relationship? Weeks passed. Nothing happened. Months. Nothing. I wasn’t able to make new friends. So in the free time I started going back to OpenStreetMap and chess. My adventure into chess failed, with me losing some 20 FIDE elo points (which, for people who are unaware, is a lot). I got bored of OpenStreetMap a few weeks ago. I have started watching romances and comedies in Anime, and I will get bored of that too. On the other hand, I have started paying more attention to my education; I want to go to Japan in future.
A weak attempt at reconciliation was made by both of us sometime ago, but it failed badly because it is impossible for 2 young adults to communicate there emotions freely.
Meanwhile, each day at the college is very painful. A single glance, nay, even a whisper still excites me enough to imagine her coming back to me. I still keep thinking of her in the college. The home is the only respite from this torment. I want to get away from this college. I hate it. Breakup, even with just a friend, does hurt a lot.
So, here I am, broken yet hopeful for the future. Why am I writing this now? I didn’t want to disturb the process of reconciliation then, if there was even a minute chance of that. And why am I writing this here? Because there’s no where else to write this.
A few months ago I travelled to Darbhanga district of Bihar. This post draws from 3 of the places I visited during my journey: a poor village, a lower-middle class village, and a lower-middle class part of the city.
Agriculture
All crops have been destroyed due to low rainfall which has been appropriately labelled by one villager as “God’s Piss.” The fields are now full of weeds. Some desperate farmers have planted more plants, only for them to be burnt again. Other farmers with more money have used it to plant mango tress, which will only give fruits after many years. Another class of farmers have sold their fields to brickyards, whose owners are locally known as “Sand Mafias.” The selling of field gives the household a lot of money, but it is very likely that those funds would be exhausted soon and the farmer would end up landless. After the brickyard is done with the field, the empty hole turns into a pond. Nearby fields are now gradually getting destroyed as their sand is now falling in the pond. Some fields have already been destroyed like this. The ponds are also a hotspot for defecation.
Mini-forests are also common in the village, with an average family owning around 5 tress. The village I visited mostly contained mango tress and bamboo. The bamboo is used for constructing homes, and the villagers are careful to give the grass (bamboo is a grass) enough time to regenerate. It is easy to travel in the forest due to its low density.
Agriculture is mostly limited to self subsistence. Crops are usually consumed by the villagers, but a large part is sent to the family members living in the city. These people working in the city are usually males who are barely able to survive on their daily wages. However, due to crop failures this year, the trend has been reversed with people in city sending money to their families in the village.
Education
Thankfully, girls are now also being sent to schools. Households have enough funds to send all of their children. However, girls still face heavy discrimination. They have to do all of the usual household chores, while boys laze around and play games. The talks of marriage start as soon as they are 18, sometimes even before that. One girl who I talked to in the village told me how she is facing pressures from the family when she hasn’t even finished her bachelors. However, I was able to see some positive impact of Indian serials on gender roles.
The situation is quite different in the city. One can see couples wearing expensive clothes in the universities. The students seem very progressive on most ideas and they were speaking very fluent Hindi with little accent. This was quite a shock to me, as I wasn’t expecting such a high level of westernization in Darbhanga. I think it would be quite impossible for me to distinguish these people from the normal batch of students I meet in Delhi.
City
Like most Indian cities, there is significant urban sprawl. I suspect a legal ceiling on building height, since I didn’t saw any buildings higher than 5 floors. The city is highly dependent on private vehicles for transportation, due to virtual absence of public transport.
The houses are made of bricks and coloured with light colours like yellow and pink. (It was actually painful to see the pink houses. They didn’t look cute at all.) I was not able to find the outlet of drainage system, but I can at least confirm that they were not dumping it in the “3 lakes.” However, there are a lot of swamps, which are disappearing with creation of new residential homes. In fact, I was able to find more pigs than cows or horses in the area. Those houses, however, looked pretty comfortable. The houses of the poor regions, on the other hand, fared much worse. There was virtual absence of paint on buildings, and some 1 room houses were actually in the middle of a swamp, with people using scattered bricks to go inside their own houses.
Transportation
For people without private means of transportation, tempo is the only vehicle that they can use to travel from one place to another. Tempo can be thought of as a big auto-rickshaw with a capacity of up to 11 adults. For people from the poor village, the fare for the nearest market and railway station is ₹20. In the city, due to considerable urban sprawl, the fare for going from one corner of the city to another can cost even up to ₹100. The number of private cars have increased a lot since the last time I came here 5+ years ago. Cars, which are usually purchased by people in the city, can now be spotted even in the poor village. I don’t think there is any public transport.
Village
Most houses in the village only have a ground floor. The walls are made of bricks, while the roof is made of a combination of bamboo and ceramic tiles. Earlier the houses were made of mud and dry grasses, but the constant need for maintenance was very bothersome for the villagers. The houses become very hot during summers, so people would escape to the forest in afternoon. This escape is not possible for villages with little forest cover, and living in that heat is unbearable.
Most houses have toilet nowadays. One person told me how a group of vigilantes started slapping people who were defecating on the road, with the result of people shifting to forests for defecation. Groups of houses usually use a common hand pump. The hand pump gives cold water in the summers, and hot water in the winters. The water is drinkable. However, nearby villages are feeling a acute scarcity of drinkable water.
The electricity supply has improved over the years. Earlier there was electricity only at night with frequent cuts. Now it’s available both in day and night with less frequent cuts. Households have a smart phone or at least a dumb phone. The government have added street lamps powered by solar power at around 10m distance in the village. No lamp have been stolen yet. The younger generation exhibit some skill in operating the smart phones, but that only go as far as pushing a particular sequence of buttons. It is better than nothing though. A lot of houses have government subsidized TVs right in their home. Only a few years earlier there was only 1 TV in the whole village, with many people gathering at that house to watch TV in a very communal manner.
There is a sharp hindu-muslim divide in the village. So sharp, in fact, such that hindu live on one side of the road while muslim live on the other side. The hindus talk of the other side with much prejudice. However, I was surprised to see that during Muharram almost all hindus participated in the proceedings, providing lemon juice and money if they were not walking in the march.
In December 2024, I went on a trip through four countries - Singapore, Malaysia, Brunei, and Vietnam - with my friend Badri. This post covers our experiences in Singapore.
I took an IndiGo flight from Delhi to Singapore, with a layover in Chennai. At the Chennai airport, I was joined by Badri. We had an early morning flight from Chennai that would land in Singapore in the afternoon. Within 48 hours of our scheduled arrival in Singapore, we submitted an arrival card online. At immigration, we simply needed to scan our passports at the gates, which opened automatically to let us through, and then give our address to an official nearby. The process was quick and smooth, but it unfortunately meant that we didn’t get our passports stamped by Singapore.
Before I left the airport, I wanted to visit the nature-themed park with a fountain I saw in pictures online. It is called Jewel Changi, and it took quite some walking to get there. After reaching the park, we saw a fountain that could be seen from all the levels. We roamed around for a couple of hours, then proceeded to the airport metro station to get to our hotel.
A shot of Jewel Changi. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.
There were four ATMs on the way to the metro station, but none of them provided us with any cash. This was the first country (outside India, of course!) where my card didn’t work at ATMs.
To use the metro, one can tap the EZ-Link card or bank cards at the AFC gates to get in. You cannot buy tickets using cash. Before boarding the metro, I used my credit card to get Badri an EZ-Link card from a vending machine. It was 10 Singapore dollars (₹630) - 5 for the card, and 5 for the balance. I had planned to use my Visa credit card to pay for my own fare. I was relieved to see that my card worked, and I passed through the AFC gates.
We had booked our stay at a hostel named Campbell’s Inn, which was the cheapest we could find in Singapore. It was ₹1500 per night for dorm beds. The hostel was located in Little India. While Little India has an eponymous metro station, the one closest to our hostel was Rochor.
On the way to the hostel, we found out that our booking had been canceled.
We had booked from the Hostelworld website, opting to pay the deposit in advance and to pay the balance amount in person upon reaching. However, Hostelworld still tried to charge Badri’s card again before our arrival. When the unauthorized charge failed, they sent an automatic message saying “we tried to charge” and to contact them soon to avoid cancellation, which we couldn’t do as we were in the plane.
Despite this, we went to the hostel to check the status of our booking.
The trip from the airport to Rochor required a couple of transfers. It was 2 Singapore dollars (approx. ₹130) and took approximately an hour.
Upon reaching the hostel, we were informed that our booking had indeed been canceled, and were not given any reason for the cancelation. Furthermore, no beds were available at the hostel for us to book on the spot.
We decided to roam around and look for accommodation at other hostels in the area. Soon, we found a hostel by the name of Snooze Inn, which had two beds available. It was 36 Singapore dollars per person (around ₹2300) for a dormitory bed. Snooze Inn advertised supporting RuPay cards and UPI. Some other places in that area did the same. We paid using my card. We checked in and slept for a couple of hours after taking a shower.
By the time we woke up, it was dark. We met Praveen’s friend Sabeel to get my FLX1 phone. We also went to Mustafa Center nearby to exchange Indian rupees for Singapore dollars. Mustafa Center also had a shopping center with shops selling electronic items and souvenirs, among other things. When we were dropping off Sabeel at a bus stop, we discovered that the bus stops in Singapore had a digital board mentioning the bus routes for the stop and the number of minutes each bus was going to take.
In addition to an organized bus system, Singapore had good pedestrian infrastructure. There were traffic lights and zebra crossings for pedestrians to cross the roads. Unlike in Indian cities, rules were being followed. Cars would stop for pedestrians at unmanaged zebra crossings; pedestrians would in turn wait for their crossing signal to turn green before attempting to walk across. Therefore, walking in Singapore was easy.
Traffic rules were taken so seriously in Singapore I (as a pedestrian) was afraid of unintentionally breaking them, which could get me in trouble, as breaking rules is dealt with heavy fines in the country. For example, crossing roads without using a marked crossing (while being within 50 meters of it) - also known as jaywalking - is an offence in Singapore.
Moreover, the streets were litter-free, and cleanliness seemed like an obsession.
After exploring Mustafa Center, we went to a nearby 7-Eleven to top up Badri’s EZ-Link card. He gave 20 Singapore dollars for the recharge, which credited the card by 19.40 Singapore dollars (0.6 dollars being the recharge fee).
When I was planning this trip, I discovered that the World Chess Championship match was being held in Singapore. I seized the opportunity and bought a ticket in advance. The next day - the 5th of December - I went to watch the 9th game between Gukesh Dommaraju of India and Ding Liren of China. The venue was a hotel on Sentosa Island, and the ticket was 70 Singapore dollars, which was around ₹4000 at the time.
We checked out from our hostel in the morning, as we were planning to stay with Badri’s aunt that night. We had breakfast at a place in Little India. Then we took a couple of buses, followed by a walk to Sentosa Island. Paying the fare for the buses was similar to the metro - I tapped my credit card in the bus, while Badri tapped his EZ-Link card. We also had to tap it while getting off.
If you are tapping your credit card to use public transport in Singapore, keep in mind that the total amount of all the trips taken on a day is deducted at the end. This makes it hard to determine the cost of individual trips. For example, I could take a bus and get off after tapping my card, but I would have no way to determine how much this journey cost.
When you tap in, the maximum fare amount gets deducted. When you tap out, the balance amount gets refunded (if it’s a shorter journey than the maximum fare one). So, there is incentive for passengers not to get off without tapping out. Going by your card statement, it looks like all that happens virtually, and only one statement comes in at the end. Maybe this combining only happens for international cards.
We got off the bus a kilometer away from Sentosa Island and walked the rest of the way. We went on the Sentosa Boardwalk, which is itself a tourist attraction. I was using Organic Maps to navigate to the hotel Resorts World Sentosa, but Organic Maps’ route led us through an amusement park. I tried asking the locals (people working in shops) for directions, but it was a Chinese-speaking region, and they didn’t understand English. Fortunately, we managed to find a local who helped us with the directions.
A shot of Sentosa Boardwalk. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.
Following the directions, we somehow ended up having to walk on a road which did not have pedestrian paths. Singapore is a country with strict laws, so we did not want to walk on that road. Avoiding that road led us to the Michael Hotel. There was a person standing at the entrance, and I asked him for directions to Resorts World Sentosa. The person told me that the bus (which was standing at the entrance) would drop me there! The bus was a free service for getting to Resorts World Sentosa. Here I parted ways with Badri, who went to his aunt’s place.
I got to the Resorts Sentosa and showed my ticket to get in. There were two zones inside - the first was a room with a glass wall separating the audience and the players. This was the room to watch the game physically, and resembled a zoo or an aquarium. :) The room was also a silent room, which means talking or making noise was prohibited. Audiences were only allowed to have mobile phones for the first 30 minutes of the game - since I arrived late, I could not bring my phone inside that room.
The other zone was outside this room. It had a big TV on which the game was being broadcast along with commentary by David Howell and Jovanka Houska - the official FIDE commentators for the event. If you don’t already know, FIDE is the authoritative international chess body.
I spent most of the time outside that silent room, giving me an opportunity to socialize. A lot of people were from Singapore. I saw there were many Indians there as well. Moreover, I had a good time with Vasudevan, a journalist from Tamil Nadu who was covering the match. He also asked questions to Gukesh during the post-match conference. His questions were in Tamil to lift Gukesh’s spirits, as Gukesh is a Tamil speaker.
Tea and coffee were free for the audience. I also bought a T-shirt from their stall as a souvenir.
After the game, I took a shuttle bus from Resorts World Sentosa to a metro station, then travelled to Pasir Ris by metro, where Badri was staying with his aunt. I thought of getting something to eat, but could not find any cafés or restaurants while I was walking from the Pasir Ris metro station to my destination, and was positively starving when I got there.
Badri’s aunt’s place was an apartment in a gated community. On the gate was a security guard who asked me the address of the apartment. Upon entering, there were many buildings. To enter the building, you need to dial the number of the apartment you want to go to and speak to them. I had seen that in the TV show Seinfeld, where Jerry’s friends used to dial Jerry to get into his building.
I was afraid they might not have anything to eat because I told them I was planning to get something on the way. This was fortunately not the case, and I was relieved to not have to sleep with an empty stomach.
Badri’s uncle gave us an idea of how safe Singapore is. He said that even if you forget your laptop in a public space, you can go back the next day to find it right there in the same spot. I also learned that owning cars was discouraged in Singapore - the government imposes a high registration fee on them, while also making public transport easy to use and affordable. I also found out that 7-Eleven was not that popular among residents in Singapore, unlike in Malaysia or Thailand.
The next day was our third and final day in Singapore. We had a bus in the evening to Johor Bahru in Malaysia. We got up early, had breakfast, and checked out from Badri’s aunt’s home. A store by the name of Cat Socrates was our first stop for the day, as Badri wanted to buy some stationery. The plan was to take the metro, followed by the bus. So we got to Pasir Ris metro station. Next to the metro station was a mall. In the mall, Badri found an ATM where our cards worked, and we got some Singapore dollars.
It was noon when we reached the stationery shop mentioned above. We had to walk a kilometer from the place where the bus dropped us. It was a hot, sunny day in Singapore, so walking was not comfortable. We had to go through residential areas in Singapore. We saw some non-touristy parts of Singapore.
After we were done with the stationery shop, we went to a hawker center to get lunch. Hawker centers are unique to Singapore. They have a lot of shops that sell local food at cheap prices. It is similar to a food court. However, unlike the food courts in malls, hawker centers are open-air and can get quite hot.
This is the hawker center we went to. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.
To have something, you just need to buy it from one of the shops and find a table. After you are done, you need to put your tray in the tray-collecting spots. I had a kaya toast with chai, since there weren’t many vegetarian options. I also bought a persimmon from a nearby fruit vendor. On the other hand, Badri sampled some local non-vegetarian dishes.
Table littering at the hawker center was prohibited by law. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.
Next, we took a metro to Raffles Place, as we wanted to visit Merlion, the icon of Singapore. It is a statue having the head of a lion and the body of a fish. While getting through the AFC gates, my card was declined. Therefore, I had to buy an EZ-Link card, which I had been avoiding because the card itself costs 5 Singapore dollars.
From the Raffles Place metro station, we walked to Merlion. The place also gave a nice view of Marina Bay Sands. It was filled with tourists clicking pictures, and we also did the same.
Merlion from behind, giving a good view of Marina Bay Sands. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.
After this, we went to the bus stop to catch our bus to the border city of Johor Bahru, Malaysia. The bus was more than an hour late, and we worried that we had missed the bus. I asked an Indian woman at the stop who also planned to take the same bus, and she told us that the bus was late. Finally, our bus arrived, and we set off for Johor Bahru.
Before I finish, let me give you an idea of my expenditure. Singapore is an expensive country, and I realized that expenses could go up pretty quickly. Overall, my stay in Singapore for 3 days and 2 nights was approx. 5500 rupees. That too, when we stayed one night at Badri’s aunt’s place (so we didn’t have to pay for accomodation for one of the nights) and didn’t have to pay for a couple of meals. This amount doesn’t include the ticket for the chess game, but includes the costs of getting there. If you are in Singapore, it is likely you will pay a visit to Sentosa Island anyway.
Stay tuned for our experiences in Malaysia!
Credits: Thanks to Dione, Sahil, Badri and Contrapunctus for reviewing the draft. Thanks to Bhe for spotting a duplicate sentence.
I sometimes use Vagrant to deploy my VM's and recently when I tried to deploy one for Trixie, I could see one available. So I checked the official Debian images on Vagrant cloud at https://portal.cloud.hashicorp.com/vagrant/discover/debian and could not find an image for trixie on Vagrant cloud.
Also looked at other cloud image sources like Docker hub, and I could see an image their for Trixie. So I looked into how I can generate a Vagrant image locally for Debian to use.
this will install some dependency packages, will ask for sudo password if need to install something not already installed.
Let's call make help
$ make help
To run this makefile, run:
make <DIST>-<CLOUD>-<ARCH>
WHERE <DIST> is bullseye, buster, stretch, sid or testing
And <CLOUD> is azure, ec2, gce, generic, genericcloud, nocloud, vagrant, vagrantcontrib
And <ARCH> is amd64, arm64, ppc64el
Set DESTDIR= to write images to given directory.
$ make trixie-vagrant-amd64
umask 022; \
./bin/debian-cloud-images build \
trixie vagrant amd64 \
--build-id vagrant-cloud-images-master \
--build-type official
usage: debian-cloud-images build
debian-cloud-images build: error: argument RELEASE: invalid value: trixie
make: *** [Makefile:22: trixie-vagrant-amd64] Error 2
As you can see, trixie is not even in the available options and it is not building as well. Before trying to look at updating the codebase, I looked at the pending MR's on Salsa and found Michael Ablassmeier's pending merge request at https://salsa.debian.org/cloud-team/debian-vagrant-images/-/merge_requests/18
So let me test that commit and see if I can build trixie locally from Michael's MR
$ make help
To run this makefile, run:
make <DIST>-<CLOUD>-<ARCH>
WHERE <DIST> is bullseye, buster, stretch, sid or testing
And <CLOUD> is azure, ec2, gce, generic, genericcloud, nocloud, vagrant, vagrantcontrib
And <ARCH> is amd64, arm64, ppc64el
Set DESTDIR= to write images to given directory.
$ make trixie-vagrant-amd64
umask 022; \
./bin/debian-cloud-images build \
trixie vagrant amd64 \
--build-id vagrant-cloud-images-master \
--build-type official
2025-09-17 00:36:25,919 INFO Adding class DEBIAN
2025-09-17 00:36:25,919 INFO Adding class CLOUD
2025-09-17 00:36:25,919 INFO Adding class TRIXIE
2025-09-17 00:36:25,920 INFO Adding class VAGRANT
2025-09-17 00:36:25,920 INFO Adding class AMD64
2025-09-17 00:36:25,920 INFO Adding class LINUX_IMAGE_BASE
2025-09-17 00:36:25,920 INFO Adding class GRUB_PC
2025-09-17 00:36:25,920 INFO Adding class LAST
2025-09-17 00:36:25,921 INFO Running FAI: sudo env PYTHONPATH=/home/rajudev/dev/salsa/michael/debian-vagrant-images/src/debian_cloud_images/build/../.. CLOUD_BUILD_DATA=/home/rajudev/dev/salsa/michael/debian-vagrant-images/src/debian_cloud_images/data CLOUD_BUILD_INFO={"type": "official", "release": "trixie", "release_id": "13", "release_baseid": "13", "vendor": "vagrant", "arch": "amd64", "build_id": "vagrant-cloud-images-master", "version": "20250917-1"} CLOUD_BUILD_NAME=debian-trixie-vagrant-amd64-official-20250917-1 CLOUD_BUILD_OUTPUT_DIR=/home/rajudev/dev/salsa/michael/debian-vagrant-images CLOUD_RELEASE_ID=vagrant CLOUD_RELEASE_VERSION=20250917-1 fai-diskimage --verbose --hostname debian --class DEBIAN,CLOUD,TRIXIE,VAGRANT,AMD64,LINUX_IMAGE_BASE,GRUB_PC,LAST --size 100G --cspace /home/rajudev/dev/salsa/michael/debian-vagrant-images/src/debian_cloud_images/build/fai_config debian-trixie-vagrant-amd64-official-20250917-1.raw
..... continued
Although we can now build the images, we just don't see an option for it in the help text, not even for bookworm. Just the text in Makefile is outdated, but I can build and trixie Vagrant box now. Thanks to Michael for the fix.
I regularly use Bugzilla as part of my job, so I built an MCP server to streamline my workflow & make Bugzilla data accessible to LLMs. This is my first tool in the LLM ecosystem!
During the first week I tried the official SDK, but I didn’t like how it worked. Later I discovered the well-documented and easy-to-use Python library fastmcp, which made development much smoother.
Just a few days ago, I released v0.1.0 of mcp-bugzilla. It currently provides two tools: one that fetches bug details and another that retrieves bug comments. There’s also a prompt component that summarizes a bug’s comments. I plan to add more features soon. Try it out and share your feedback — I’d appreciate it.
On the 8th of August 2025 (a day before the Debian Trixie release), I was upgrading my personal laptop from Debian Bookworm to Trixie. It was a major update. However, the update didn’t go smoothly, and I ran into some errors. From the Debian support IRC channel, I got to know that it would be best if I removed the texlive packages.
However, it was not so easy to just remove texlive with a simple apt remove command. I had to remove the texlive packages from /usr/bin. Then I ran into other errors. Hours after I started the upgrade, I realized I preferred having my system as it was before, as I had to travel to Noida the next day. Needless to say, I wanted to go to sleep rather than fix my broken system. Only if I had a way to go back to my system before I started upgrading, it would have saved a lot of trouble for me. I ended up installing Trixie from scratch.
It turns out that there was a way to recover to the state before the upgrade - using Timeshift to roll back the system to a state (in our example, it is the state before the upgrade process started) in the past. However, it needs the Btrfs filesystem with appropriate subvolumes, not provided by Debian installer in their guided partitioning menu.
I have set it up after a few weeks of the above-mentioned incident. Let me demonstrate how it works.
Check the screenshot above. It shows a list of snapshots made by Timeshift. Some of them were made by me manually. Others were made by Timeshift automatically as per the routine - I have set up hourly backups and weekly backups etc.
In the above-mentioned major update, I could have just taken a snapshot using Timeshift before performing the upgrade and could have rolled back to that snapshot when I found that I cannot spend more time on fixing my installation errors. Then I could just perform the upgrade later.
Installation
In this tutorial, I will cover how I installed Debian with Btrfs and disk encryption, along with creating subvolumes @ for root and @home for /home so that I can use Timeshift to create snapshots. These snapshots are kept on the same disk where Debian is installed, and the use-case is to roll back to a working system in case I mess up something or to recover an accidentally deleted file.
I went through countless tutorials on the Internet, but I didn’t find a single tutorial covering both the disk encryption and the above-mentioned subvolumes (on Debian). Debian doesn’t create the desired subvolumes by default, therefore the process requires some manual steps, which beginners may not be comfortable performing. Beginners can try distros such as Fedora and Linux Mint, as their installation includes Btrfs with the required subvolumes.
Furthermore, it is pertinent to note that I used Debian Trixie’s DVD iso on a real laptop (not a virtual machine) for my installation. Debian Trixie is the codename for the current stable version of Debian. Then I took screenshots in a virtual machine by repeating the process. Moreover, a couple of screenshots are from the installation I did on the real laptop.
Let’s start the tutorial by booting up the Debian installer.
The above screenshot shows the first screen we see on the installer. Since we want to choose Expert Install, we select Advanced Options in the screenshot above.
Let’s select the Expert Install option in the above screenshot. It is because we want to create subvolumes after the installer is done with the partition, and only then proceed to installing the base system. “Non-expert” install modes proceed directly to installing the system right after creating partitions without pausing for us to create the subvolumes.
After selecting the Expert Install option, you will get the screen above. I will skip to partitioning from here and leave the intermediate steps such as choosing language, region, connecting to Wi-Fi, etc. For your reference, I did create the root user.
Let’s jump right to the partitioning step. Select the Partition disks option from the menu as shown above.
Choose Manual.
Select your disk where you would like to install Debian.
Select Yes when asked for creating a new partition.
I chose the msdos option as I am not using UEFI. If you are using UEFI, then you need to choose the gpt option. Also, your steps will (slightly) differ from mine if you are using UEFI. In that case, you can watch this video by the YouTube channel EF Linux in which he creates an EFI partition. As he doesn’t cover disk encryption, you can continue reading this post after following the steps corresponding to EFI.
Select the free space option as shown above.
Choose Create a new partition.
I chose the partition size to be 1 GB.
Choose Primary.
Choose Beginning.
Now, I got to this screen.
I changed mount point to /boot and turned on the bootable flag and then selected “Done setting up the partition.”
Now select free space.
Choose the Create a new partition option.
I made the partition size equal to the remaining space on my disk. I do not intend to create a swap partition, so I do not need more space.
Select Primary.
Select the Use as option to change its value.
Select “physical volume for encryption.”
Select Done setting up the partition.
Now select “Configure encrypted volumes.”
Select Yes.
Select Finish.
Selecting Yes will take a lot of time to erase the data. Therefore, I would say if you have hours for this step (in case your SSD is like 1 TB), then I would recommend selecting “Yes.” Otherwise, you could select “No” and compromise on the quality of encryption.
After this, you will be asked to enter a passphrase for disk encryption and confirm it. Please do so. I forgot to take the screenshot for that step.
Now select that encrypted volume as shown in the screenshot above.
Here we will change a couple of options which will be shown in the next screenshot.
In the Use as menu, select “btrfs journaling file system.”
Now, click on the mount point option.
Change it to “/ - the root file system.”
Select Done setting up the partition.
This is a preview of the paritioning after performing the above-mentioned steps.
If everything is okay, proceed with the Finish partitioning and write changes to disk option.
The installer is reminding us to create a swap partition. I proceeded without it as I planned to add swap after the installation.
If everything looks fine, choose “yes” for writing the changes to disks.
Now we are done with partitioning and we are shown the screen in the screenshot above. If we had not selected the Expert Install option, the installer would have proceeded to install the base system without asking us.
However, we want to create subvolumes before proceeding to install the base system. This is the reason we chose Expert Install.
Now press Ctrl + F2.
You will see the screen as in the above screenshot. It says “Please press Enter to activate this console.” So, let’s press Enter.
After pressing Enter, we see the above screen.
The screenshot above shows the steps I performed in the console. I followed the already mentioned video by EF Linux for this part and adapted it to my situation (he doesn’t encrypt the disk in his tutorial).
First we run df -h to have a look at how our disk is partitioned. In my case, the output was:
df -h shows us that /dev/mapper/sda2_crypt and /dev/sda1 are mounted on /target and /target/boot respectively.
Let’s unmount them. For that, we run:
# umount /target
# umount /target/boot
Next, let’s mount our root filesystem to /mnt.
# mount /dev/mapper/sda2_crypt /mnt
Let’s go into the /mnt directory.
# cd /mnt
Upon listing the contents of this directory, we get:
/mnt # ls
@rootfs
Debian installer has created a subvolume @rootfs automatically. However, we need the subvolumes to be @ and @home. Therefore, let’s rename the @rootfs subvolume to @.
/mnt # mv @rootfs @
Listing the contents of the directory again, we get:
/mnt # ls
@
We only one subvolume right now. Therefore, let us go ahead and create another subvolume @home.
If we perform ls now, we will see there are two subvolumes:
/mnt # ls
@ @home
Let us mount /dev/mapper/sda2_crypt to /target
/mnt # mount -o noatime,space_cache=v2,compress=zstd,ssd,discard=async,subvol=@ /dev/mapper/sda2_crypt /target/
Now we need to create a directory for /home.
/mnt # mkdir /target/home/
Now we mount the /home directory with subvol=@home option.
/mnt # mount -o noatime,space_cache=v2,compress=zstd,ssd,discard=async,subvol=@home /dev/mapper/sda2_crypt /target/home/
Now mount /dev/sda1 to /target/boot.
/mnt # mount /dev/sda1 /target/boot/
Now we need to add these options to the fstab file, which is located at /target/etc/fstab. Unfortunately, vim is not installed in this console. The only way to edit is Nano.
nano /target/etc/fstab
Edit your fstab file to look similar to the one in the screenshot above. I am pasting the fstab file contents below for easy reference.
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# systemd generates mount units based on this file, see systemd.mount(5).
# Please run 'systemctl daemon-reload' after making changes here.
#
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/sda2_crypt / btrfs noatime,compress=zstd,ssd,discard=async,space_cache=v2,subvol=@ 0 0
/dev/mapper/sda2_crypt /home btrfs noatime,compress=zstd,ssd,discard=async,space_cache=v2,subvol=@home 0 0
# /boot was on /dev/sda1 during installation
UUID=12842b16-d3b3-44b4-878a-beb1e6362fbc /boot ext4 defaults 0 2
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
Please double check the fstab file before saving it. In Nano, you can press Ctrl+O followed by pressing Enter to save the file. Then press Ctrl+X to quit Nano. Now, preview the fstab file by running
cat /target/etc/fstab
and verify that the entries are correct, otherwise you will booted to an unusable and broken system after the installation is complete.
Next, press Ctrl + Alt + F1 to go back to the installer.
Proceed to “Install the base system.”
Screenshot of Debian installer installing the base system.
I chose the default option here - linux-image-amd64.
After this, the installer will ask you a few more questions. For desktop environment, I chose KDE Plasma. You can choose the desktop environment as per your liking. I will not cover the rest of the installation process and assume that you were able to install from here.
Post installation
Let’s jump to our freshly installed Debian system. Since I created a root user, I added the user ravi to the suoders file (/etc/sudoers) so that ravi can run commands with sudo. Follow this if you would like to do the same.
Now we set up zram as swap. First, install zram-tools.
sudo apt install zram-tools
Now edit the file /etc/default/zramswap and make sure to have the following lines are uncommented:
ALGO=lz4
PERCENT=50
Now, run
sudo systemctl restart zramswap
If you run lsblk now, you should see the below-mentioned entry in the output:
zram0 253:0 0 7.8G 0 disk [SWAP]
This shows us that zram has been activated as swap.
Now we install timeshift, which can be done by running
sudo apt install timeshift
After the installation is complete, run Timeshift and schedule snapshots as you please. We are done now. Hope the tutorial was helpful.
See you in the next post and let me know if you have any suggestions and questions on this tutorial.
I have been using my Samsung Galaxy Tab A (2015) with PostmarketOS on and off since last year. It serves as a really good e-book reader with KOReader installed on it.
Have tried phosh and plasma-mobile on it, works nicely but slows the device down heavily (2 GB RAM and old processor) so I use MATE Desktop environment on it.
Lately I have started using this tablet along with my laptop as a second screen for work. And it has been working super nicely for that. The only issue being that I have to manually rotate the screen to landscape every time I reboot the device. It resets the screen orientation to portrait after a reboot. So I went through the pmOS wiki and a neat nice hack documented there worked very well for me.
First we will test if the auto-rotate sensor works and if we can read values from it. So we install some basic necessary packages
You need to replace the name of your touch input device in the script, you can get the name by using xinput --list , make sure to type this on the device terminal.
In our script here we are using a Zinitix capacitive screen, it will be different for yours.
Once your script is ready with the correct touchscreen name. Save and make the script executable. chmod +x auto-rotate-screen.sh
Then test your script in your terminal ./auto-rotate.sh , stop the script using Ctrl + C
Now we need add this script to auto-start. On MATE DE you can go to System > Control Center > Startup Applications, then click on Custom Add button, browse the script location, give it a name and then click on Add button.
Now reboot the tablet/device, login and see the auto rotation working.
In December 2024, Badri and I went to Vietnam. In this post, I’ll document our experiences with the visa process of Vietnam. Vietnam requires an e-visa to enter the country. The official online portal for the e-visa application is evisa.xuatnhapcanh.gov.vn/. However, I submitted my visa application on the website vietnamvisa.govt.vn. It was only after submitting my application and making the payment that I realized that it’s not the official e-visa website. The realization came from the tagline mentioned in the top left corner of the website - the best way to obtain a Vietnam visa.
I was a bit upset that I got tricked by that website. I should have checked the top level domains of Vietnam’s government websites. Anyways, it is pretty easy to confuse govt.vn with gov.vn. I also paid double the amount of the official visa fee. However, I wasn’t asked to provide a flight reservation or hotel bookings - documents which are usually asked for most of the visas. But they did ask me for a photo. I was not even sure whether the website was legit or not.
Badri learnt from my experience and applied through the official Vietnam government website. During the process, he had to provide a hotel booking as well as enter the hotel address into the submission form. Additionally, the official website asked to provide the exact points of entry to and exit from the country, which the non-official website did not ask for. On the other hand, he had to pay only 25 USD versus my 54 USD.
It turned out that the website I registered on was also legit, as they informed me a week later that my visa has been approved, along with a copy of my visa. Further, I was not barred from entering and found to be holding a fake visa. It appears that the main “scam” is not about the visa being fake, but rather that you will be charged more than if you apply through the official website.
I would still recommend you (the readers) to submit your visa application only through the official website and not on any of the other such websites.
Our visa was valid for a month (my visa was valid from the 4th of December 2024 to the 4th of January 2025). We also had a nice time in Vietnam. Stay tuned for my Vietnam travel posts!
Credits to Badri for proofreading and writing his part of the experience.
This method is for wayland based systems. There are better ways to do this on GNOME or KDE desktops, but the method we are going to use is independent of DE/WM that you are using.
I am doing this on sway window manager, but you can try this on any other Wayland based WM or DE. I have not tried this on Xorg based systems, there are several other guides for Xorg based systems online.
When we connect a physical monitor to our laptops, it creates a second display output in our display settings that we can then re-arrange in layout, set resolution, set scale etc. Since we are not connecting via a physical interface like HDMI, DP, VGA etc. We need to create a virtual display within our system and set the display properties manually.
Get a list of current display outputs. You can also just check it in display settings of your DE/WM with wdisplays
rajudev@sanganak ~> swaymsg -t get_outputs
Output LVDS-1 'Seiko Epson Corporation 0x3047 Unknown' (focused)
Current mode: 1366x768 @ 60.002 Hz
Power: on
Position: 0,0
Scale factor: 1.000000
Scale filter: nearest
Subpixel hinting: rgb
Transform: normal
Workspace: 2
Max render time: off
Adaptive sync: disabled
Allow tearing: no
Available modes:
1366x768 @ 60.002 Hz
Single physical display of the laptop
Currently we are seeing only one display output. Our goal is to create a second virtual display that we will then share on the tablet/phone.
To do this there are various tools available. We are using sway-vdctl . It is currently not available within Debian packages, so we need to install it manually.
$ vdctl --help
Usage: vdctl [OPTIONS] <ACTION> [VALUE]
Arguments:
<ACTION>
Possible values:
- create: Create new output based on a preset
- kill: Terminate / unplug an active preset
- list: List out active presets
- next-number: Manually set the next output number, in case something breaks
- sync-number: Sync the next output number using 'swaymsg -t get_outputs'
[VALUE]
Preset name to apply, alternatively a value
[default: ]
Options:
--novnc
do not launch a vnc server, just create the output
-h, --help
Print help (see a summary with '-h')
Before creating the virtual display, we need to set it's properties at .config/vdctl/config.json . I am using Xiaomi Pad 6 tablet as my external display. You can adjust the properties according to the device you want to use as a second display.
In the JSON, you can set the display resolution according to your external device and other configurations. If you want to configure multiple displays, you can add another entry into the presets in the json file. You can refer to example json file into the git repository.
Now we need to actually create the virtual monitor.
$ vdctl create pad6
Created output, presumably 'HEADLESS-1'
Set resolution of 'HEADLESS-1' to 2800x1800
Set scale factor of 'HEADLESS-1' to 2
Preset 'pad6' ('HEADLESS-1': 2800x1800) is now active on port 9901
Now if you will check the display outputs in your display settings or from command line, you will see two different displays.
$ swaymsg -t get_outputs
Output LVDS-1 'Seiko Epson Corporation 0x3047 Unknown'
Current mode: 1366x768 @ 60.002 Hz
Power: on
Position: 0,0
Scale factor: 1.000000
Scale filter: nearest
Subpixel hinting: rgb
Transform: normal
Workspace: 2
Max render time: off
Adaptive sync: disabled
Allow tearing: no
Available modes:
1366x768 @ 60.002 Hz
Output HEADLESS-1 'Unknown Unknown Unknown' (focused)
Current mode: 2800x1800 @ 0.000 Hz
Power: on
Position: 1366,0
Scale factor: 2.000000
Scale filter: nearest
Subpixel hinting: unknown
Transform: normal
Workspace: 3
Max render time: off
Adaptive sync: disabled
Allow tearing: no
Also in the display settings.
Display settings on Wayland with physical and virtual monitor output
Now we need to make this virtual display available over VNC which we will access with a VNC client on the tablet. To accomplish this I am using wayvnc but you can use any VNC server package.
Install wayvnc
$ sudo apt install wayvnc
Now we will serve our virtual display HEADLESS-1 with wayvnc.
$ wayvnc -o HEADLESS-1 0.0.0.0 5900
You can adjust the port number as per your need.
The process from laptop side is done.
Now install any VNC software on your tablet. I am using AVNC, which is available on F-Droid.
In the VNC software interface, add a new connection with the IP address of your laptop and the port started by wayvnc. Remember, both your laptop and phone need to be on the same Wi-Fi network.
AVNC interface with the connection details to connect to the virtual monitor.
Save and connect. Now you will be able to see a extended display on your tablet.
Enjoy working with multiple screens in a portable setup.
If your bank is like mine, its website doesn’t allow you to copy your password and paste it by performing a simple Ctrl+V. I tried the Don’t Fuck With Paste extension in Firefox, which could paste my bank account’s profile password but not the login password.
Therefore, I asked on Mastodon a couple of days ago and got some responses. The solution that worked for me was to use Shift+Insert to paste the password. It worked for me in LibreWolf and Firefox, and that’s all I needed.
Furthermore, this behavior by bank websites leads to users choosing insecure and memorable passwords. Using this trick will help you choose strong passwords for your bank account.
I prefer to use random and strong passwords generated using the password manager pass. It is a freedom-respecting software, unlike popular proprietary password managers promoted by YouTubers. Feel free to check out their webpage here. The reason I use pass is that it stores all the passwords locally (and optionally in a remote Git repository) in encrypted form, which can only be decrypted using your private GPG keys.
I have been using Disroot as my primary email ever since
openmailbox.org stopped. I am very grateful for Disroot’s service and
I occasionally donate to them.
Recently, my Disroot inbox has been flooded with spam. On an average
day, I used to receive around 90% spams on entire email
count. However, the situation has improved since then. I contacted the
Disroot team, and they informed me that they are aware of the
situation and planning to migrate to Rspamd from Spamassassin.
I don’t know whether they deployed Rspamd, even if so that only going
to process incoming mails, I am looking for a way to identify spams
and purge that are already entered my Imap folders.
Later I found this script nh2/rspamd-move[1], which seems fit my need.
I made couple of trivial changes in the script for my use case. I
wasn’t sure of directly running this on my Mail/ dir, so I cloned my
entire local mail directory to another directory and made available to
podman container where I script and rspamd instance exist. I trained
rspamd from the /Spam. Later, I manually moved couple of mails to
/spam folder/. I requested friends to share their spam folder in the
#debian-in channel, but that didn’t happen :P
$podman run -it --mount
type=bind,source=/home/abhijith/$MAILS/,target=/container-mail-clone
id:latest
$script.py
(It took some time since I have around 10000+ emails)
Wow, it was quite a successful attempt, I was able to catch most of it
and move to spam/ and couple of false positive in a different
folder. Now I want to do the same in the actual maildir yet very
skeptical. While going through the cloned folder with mutt -f I
remembered that the mails are already indexed by notmuch.
So all I need to do is operate tagging and deletion with notmuch and
it will be synced back to the original mail dir. Ta-da. I cleaned by
Inbox.
As i was unable to figure out the errors building the nodejs flatpak apps from source, I have patched the upstream project’s electron build system to support aarch64 linux binaries (both deb & rpm). This enabled me to support the respective flatpak binary starting with the v0.32.0 release. From the packaging side, I have updated the flatpak manifest & update script to support the new architecture.
I do not have an aarch64 hardware to test the build, Hence. I reached out to fellow fediverse users who could lend a hand by testing it. Fortunately, I quickly got a respose from a kind human who tested it & confirmed that the application is indeed working!
In the meanwhile, Frappe Books has reached 3000+ downloads via flatub! This update will enable a few more users to try out the application.
Most of our mapping parties, if not all, start with a brief introduction. The newbies are informed about the various benefits of using and contributing to OpenStreetMap, such as massive improvements to the individual’s privacy and an easy mechanism to correct data.
However, I have been wondering if this approach is the optimal path. This doubt started nagging me after I picked up The Theory of the Leisure Class by Thorstein Veblen. If class distinctions are really so pervasive as theorized in the book, shouldn’t we try to incorporate these findings in our promotion of OSM in mapping parties and everywhere else?
A clear description of the context would be in order. Though our existing method of extolling the benefits of OSM is good, I don’t think it is the best one for India. India has, unfortunately, one of the lowest proportion of people contributing to social activities. In conversation with my friends, I often find them considering the idea of “doing something for free” repugnant. Maybe its due to the oppressive nature of the Indian classes, where people’s aspirations are mostly reduced to the singular objective of rising above their current class. Whatever is the reason, we can at least conclude that the current system of promoting OSM is unsatisfactory in the context of India.
We can, for instance, try to frame OSM as a hobby and actively compare the intensity of mapping activity with other mappers (say, by focusing on the heat map that is displayed on the OSM profile page). Setting aside the moral considerations this entails, I believe this approach is likely to bring some interesting results. People may or may not be excited by the idea of increasing their reputation by performing conspicuous leisure in the form of contributions. However, it must be tested on field before we derive any conclusions.