I removed the screen from my laptop—and it’s now more useful than
before.
Anyways, I recently got my hands on a used thinkpad X230 for around
60$.
The machine is great, the keyboard even better, but the TN panel is
genuinely unusable.
For a while, I used it like a laptop as intended, but I can only do
so much with a TN Panel whose max brightness is my Pixel’s 10%
brightness.
Instead, I decided to cut my losses and just remove the display
altogether, and use the thinkpad as a keyboard with my monitor.
The Hardware
Doing this was pretty simple, I just had to open up the back of the
laptop, remove the hinge screws, and then slowly disconnect all the
wires before removing the display assembly.
Additionally, I changed the Wi-Fi card to an atheros one for good
measure. (God bless Libreboot)
Main issue with this, was that the Thinklight is literally impossible
to remove from the casing, so I kinda had to snap that wire out.
I also removed the two wifi antennae that are glued to the display
casing, and kept it outside so wifi continues to work properly.
I kept the webcam too, removed from the case and double tape’d to my
monitor - since somehow this ancient laptop seems to have a better
camera than my modern laptop.
After doing all this, and very-safely electrical taping all the extra
wires if i ever decide to put a new display on this, I got a think-slab
:D
After shot of my setup
However, I had to add a few cmdline arguments on grub to make it
work.
The first 3 are common grub parameters that you always have, while
the last 2 are the special ones you need to add the :d parameter
disables LVDS-1 (internal display), and the :e parameter enables VDA-1
(in my case, the external display)
An update-grub later, everything magically started
appearing on my monitor!
The software
This worked great for research and other random stuff I did, but a
laptop from 2012 can only do so much in terms of computing.
To remedy this, I decided to just use the thinkpad keyboard with my
modern laptop using software KVM. Since my monitor has both VGA and
HDMI, I was able to connect my modern laptop to the HDMI port, and the
thinkpad to VGA.
Though I was just planning on using barrier like I did year’s ago, I
decided to go with Lan-Mouse this
time.
It is a rust-based application similar to synergy and barrier, but
with a proper gtk UI and supposedly better performance.
Now, since I have a wireless card that’s older than me on the
thinkpad, I had to do some ethernet magic for lan mouse if I wanted any
sort of real performance. Software KVM is a high-bandwidth task after
all.
So I connected an ethernet cable between the two laptops, and set it
up as follows
# On Modern laptopnmcli con add type ethernet ifname enp2s0 ip4 192.168.50.1/24# On Thinkpadnmcli con add type ethernet ifname eno0 ip4 192.168.50.2/24
And magically, I have a Gigabit connection between the two laptops
for Lan-Mouse to work through. Lan mouse is pretty intuitive to setup,
so im not covering it here.
In conclusion, this one day’s work turned out pretty well for me. I
now have a speedy “slabtop” for any research or minor work that I have,
and it doesn’t even take 5 minutes for this setup to convert into a
high-performance workstation either.
I’m still using the X230 without lan-mouse for home usage, when I’m
too lazy to get my laptop out of my bag, but this setup really helps me
when I need to get some real programming work done, which is 10x harder
without such a comfy keyboard like that of the X230.
Continuing from the last post, Badri and I took a flight from the Brunei International Airport to Kuala Lumpur on the 12th of December 2024. We reached Kuala Lumpur in the evening.
After arriving at the airport, we went through immigration. In a previous post, I mentioned that we had put our stuff in lockers at the TBS bus terminal in Kuala Lumpur. Therefore, we had to go there.
The locker was automated and required us to enter the PIN we had set. Upon entering the PIN, the locker wasn’t getting unlocked. After trying this for 10-15 minutes without any luck, we tried getting some help as there the lockers weren’t under supervision.
So, I roamed around and found a staff member, reporting that our lockers weren’t getting unlocked. They called the person who was in-charge of the lockers. He came to us in a few minutes and used their admin access to open the locker. We were supposed to pay for using the lockers by putting the banknotes inside through a slot. However, as the machine wasn’t working, we gave the amount for the use of our locker service to that person instead.
We soon went back to the KL airport to catch our morning flight to Ho Chi Minh City in Vietnam. At the flight counter, we were afraid we would have to pay extra as our luggage surpassed the allowed weight limit. This one was also a budget airline—AirAsia—and our tickets didn’t include a check-in bag.
Generally, passengers from countries requiring a visa to visit Vietnam (such as India) require going to the airline and showing their visa to get the boarding pass. However, when we went to the AirAsia counter at the Kuala Lumpur airport, they didn’t weigh our bags and asked us to get our boarding passes from an automated kiosk. So, we got our boarding passes printed and proceeded to the airport security.
While clearing the airport security, a lotion I bought from Singapore was confiscated because it was 200 mL, exceeding the limit of 100 mL per bottle. Had that 200 mL liquid been in two different bottles of 100 mL each, I would have been allowed to take it in my carry-on bag, but a single 200 mL bottle wasn’t! I was allowed to keep it in the check-in bag, but I didn’t have it included in my ticket. Huh, airports and their weird rules :( The lotion was an expensive one, so having it thrown away did ruin my mood.
Overview
We started our Vietnam trip from Ho Chi Minh City in the south on the 13th of December 2024 and finished it in Hanoi in the north on the 20th of December. We traveled from Ho Chi Minh City to Hanoi mostly by train, except for a hundred or so kilometers by bus, in chunks. On the way, we visited Nha Trang, Hoi An, and Hue. The distance between Ho Chi Minh City and Hanoi is 1700 km.
For your reference, here are those places labeled on Vietnam’s map.
We landed in Ho Chi Minh City early morning on the 13th of December 2024. I was tired and sleepy as I hadn’t gotten a good night’s sleep. After going through immigration, we went to a currency exchange counter to get Vietnamese Dong. Unlike other countries on this trip, money exchange counters in Vietnam didn’t accept Indian rupees. Therefore, we exchanged euros to get Vietnamese dong at the airport.
After getting out of the airport, we took a bus to the city center. It was 15,000 dongs—approximately 50 Indian rupees. Our plan was to meet Badri’s friend and stay the night at his apartment.
So we went to a café nearby and bought a coffee for each of us for 75,000 dongs. We went upstairs and sat for a while. The Wi-Fi password was mentioned on our bill. During the trip, I found out about the café culture of Vietnam. They have their own coffee brands (such as Highlands Coffee), and you can sit down at any of the cafés for work or wait for the rain to stop. It rained a lot while we were there, so we did use these cafés for that purpose.
Badri’s friend met us there, and we roamed around the area a bit, which included roaming inside a beautiful park. Then Badri’s friend took us to a restaurant. Because I do not eat meat, he took us to a vegan restaurant. Having been to four Southeast Asian countries at this point (excluding Vietnam), I was under the impression that there wouldn’t be a lot of things for my diet in Vietnam.
A picture of the park we roamed around in Ho Chi Minh City. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
However, I was pleasantly surprised at the restaurant. I found all the dishes to be tasty, especially their signature noodles called Pho. I liked another dish so much that I tracked down the restaurant again with Badri using the geotagged image of the bill I had taken earler to have it again. As a tip for vegans coming to Vietnam, the places having the letters “Chay” (without any accented letters) in their name are vegan only.
This is the restaurant Badri’s friend took us to. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
One of the dishes we had in the restaurant. This one was especially tasty. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
One of the dishes we had in the restaurant. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
These noodles are called Pho and are very popular in Vietnam. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
In the night, we went to a supermarket where I got myself some oranges and guavas. Then, we went to a Japanese restaurant where I didn’t have anything, as there was no vegetarian option available for me. Then we took a free bus to the place to Badri’s friend’s apartment. The construction company that built the apartment also runs this free bus service from their residential area to different parts of the city as a way of promoting their apartments. Anyone can take the bus, not just residents.
The next day, we took the free bus back to the city center and checked in to a hostel for a night. We took two beds in dormitories, which were 88,000 dongs (270 rupees) for each bed for a night. In Vietnam, if you can spend around 300 rupees per night, you can get a bed in a decent hostel.
Train from Ho Chi Minh City to Nha Trang
On the night of the 15th of December 2024, we boarded a train from Ho Chi Minh City to Nha Trang. The ticket for each of us was 519,000 dongs (1600 Indian rupees). The train name was SNT2. When we reached the Ho Chi Minh City train station, we noticed that the station was rather small by Indian standards.
After entering the train station, we went inside to the first platform, where the tickets were checked by a staff member. Ho Chi Minh City was the originating station for our train, so our train was already standing at the station. We had to cross the railway tracks on foot to reach the platform our train was on. Then we located our coach, where a ticket inspector was standing at the gate. He let us in after checking our tickets. In all these instances, we just had to show our digital boarding pass which we had received by email.
Unlike Indian trains, the train didn’t have side berths. Additionally, I liked the fact that it had a dedicated space to put our bags in, which was very convenient. The train departed from Ho Chi Minh City at 21:05 and arrived in Nha Trang at 05:30 in the morning.
Interior of our train coach. Trains in Vietnam don’t have side berths, unlike India. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
A picture of the berths from our coach. It had three tiers, similar to a 3 AC coach in Indian trains. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
The train had a cabin to put the bags in. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Nha Trang train station. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Nha Trang
Nha Trang is a coastal place, and we planned to go to a beach. We figured out that the bus to the airport goes can drop us near the beach. Therefore, we went to the bus station to get to the airport bus. The bus station was walking distance from the railway station. So, we decided to walk.
On the way, we stopped at a small shop for a coffee. The shop also gave a complimentary cup of green tea along with the coffee. I found out later that it is common for local shops to give a cup of complimentary green tea in Vietnam.
I got a complimentary cup of green tea along with coffee in Nha Trang. In this trip, Badri and I found out that this is customary at local places in Vietnam. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Soon we reached the bus station and took a bus to the beach. It was 65,000 dongs (₹200). After getting down from the bus, I had coconut water and some eggs at a small local place.
Eggs being cooked on a pan for my order. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Then we went to the beach, but nobody else was there. We spent some time there and went back to the place where the bus dropped us as it started raining. We couldn’t find a bus for some time. A taxi driver approached us and agreed to take us to the city center for 200,000 dongs (₹650). For reference, the place where he dropped us was 35 km from the place we took the taxi. Taxi fares in Vietnam were also cheap!
The beach we went to in Nha Trang. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Nha Trang was a beautiful place, and so we roamed around for a while. Then we stopped at a Highlands Coffee branch for a while. Since Christmas was coming up, the café had a Christmas tree, and I liked the Christmas vibes. They were playing Mariah Carey’s All I Want for Christmas Is You.
This one was shot in the city center. In this trip, Badri and I found out that this is customary at local places in Vietnam. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Inside a Highlands Coffee cafe in Nha Trang. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
A coffee I got from Highlands Coffee in Nha Trang. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
During the evening, we went to a local place to eat. The place mentioned “Chay” in its name, and you know what it means—it was a vegan place. There was a man there and no other customers. I don’t remember the names of the dishes we ordered, but it was a bowl of soupy noodles and a bowl of dry noodles. They were very tasty. To top that off, the meal was a total of 55,000 dongs (₹180) for both of us.
The host was welcoming and friendly. We had a nice conversation with the host. In Vietnam, restaurants give chopsticks to eat noodles. While Badri was good at using them, I wasn’t. So, the host of this restaurant helped me in using chopsticks. Although my technique was not perfect and I take a bit of time, I could now eat solely with chopsticks.
The restaurant we went to in Nha Trang. The word Chay in the name means it was a vegan restaurant. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Soupy noodles we got at that restaurant. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Dry noodles we got at that restaurant. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Our plan was to take a night bus to Hoi An, and we were hoping to find a bus stand. However, we couldn’t find one. Asking around about the pickup location of the Hoi An bus led us to many different locations. Finally, we ended up at a bus booking agency’s office where we found out that there were no tickets available for Hoi An.
At this point, we gave up on booking the bus and searched for trains instead. As we didn’t have a local SIM, we asked the agency to let us connect to their Wi-Fi so that we could look for trains. They were kind enough to let us do that. It also seemed like they were going to close the office in like 10 minutes.
Unfortunately, all the sleeper berths were booked from Nha Trang till Hoi An on the next train with only seating berths being available. It takes around 10 hours, so I wasn’t comfortable traveling on seating berths.
Here I came up with the idea to look for sleeper berths from an intermediate stop. Fortunately, there were sleeper berths available from the next stop, Ninh Hòa. Therefore, we booked a seating berth from Nha Trang to Ninh Hòa and a sleeper berth from Ninh Hòa to Trà Kiệu (the nearest railway station from Hoi An). The train name was SE6, and it was a total of 500,000 dongs per person (₹1600 per person).
So, we went to the Nha Trang railway station and boarded the train. We had to spend 40 minutes seated for the train to reach the next stop before we could go to our sleeper berths. Badri had some friendly co-passengers on that trip who gave him Saigon beer and some crispy papad-like thing. They offered me as well, but I thought it was non-veg, so I declined it.
Hoi An
On the morning of 17th December 2024, we got down at the Trà Kiệu station at around 09:30. Our hostel was in Hoi An, which was around 22 km from the station. There was no public transport to get there.
Instead, there was a taxi driver at the train platform. We told him the name of our hostel, and he quoted 270,000 dongs (around ₹850). We said it was too expensive for us, so he agreed to bargain at 250,000 dongs. At this point, we told him that we could give him no more than 200,000 dongs, but he didn’t agree.
Badri tried a trick. He asked the driver to show us prices in the Grab app (a popular taxi booking app in Southeast Asia). Unfortunately, the Grab app showed 258,000 dongs, which was more than the fare the driver agreed to.
So we walked away as if we had so many options (we didn’t!) to reach the hostel. We got out of the station and stopped at a small shop outside to have some coffee. As is customary in Vietnam, we got a complimentary green tea here as well.
This was the place we had our coffee in Tra Kieu. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
That taxi driver also joined us and sat in that shop. He started talking with the locals in the shop in the local language. The taxi driver was insistent on taking us to Hoi An for 250,000 dongs. At this point, Badri told the taxi driver (by the use of translation software) that we usually use public transport during our trips, and we aren’t used to paying high prices to get around. So, he can drop us somewhere in Hoi An for 200,000 dongs as we don’t mind walking a bit to reach our hotel.
After reading this, the taxi driver agreed to take us to our hostel for 200,000 dongs (₹660). He also had me take a picture with Badri after this. I think such a bargain tactic would not work in India.
Photo of Badri with taxi driver. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
The nice thing we noticed in Vietnam is, once bargaining is done and the deal is settled, people don’t try to bargain more or keep on talking about the subject. Before the deal, the driver was being somewhat insistent and argumentative, but after the deal was done, it was as if no argument had happened at all.
A picture of Tra Kieu area near the train station we got down at. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
We were treated to some beautiful scenery on the way to our hostel. Soon we reached our place and completed all the formalities for checking-in. During the time our room was being prepared for check-in, we had an egg sandwich with coffee in the hotel. I found the egg sandwich very tasty. The bread looked like the French baguette. The hostel was ₹240 per night for each of us.
The name of the hostel was Bana Spa. We liked staying here and we can recommend it if you find yourself there. It is operated by a family.
Our breakfast in Hoi An. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
A photo of the hostel we stayed in Hoi An. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
We also rented a bicycle for each of us—25,000 dongs per day (₹80)—and explored the old town during the evening. Hoi An is popular for Vietnamese silk. Tourists come here to buy fabric and get it done by the tailor. The buildings here looked old, and they were painted in yellow with a gabled roof.
Typical yellow house with gabled roof in Hoi An old town. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Here, I also had egg coffee for the first time, and I liked it. Egg coffee is a delicacy of Hanoi, but you can get it in other parts of Vietnam. If you find yourself in Vietnam, then I recommend you try egg coffee. We also bought some cool T-shirts and other souvenirs, such as a Vietnamese hat, from here.
Egg coffee I had in Hoi An. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Hue
The next day—the 18th of December 2024—we went to Hue by bus. As we could not take a bus on our own in Nha Trang, we asked the hostel to book it for us this time. We booked it a day before, and they told us to be ready by 07:00 in the morning. At 07:00, a minibus arrived, which took us to a bus agency’s office. There we waited for a few minutes and got into the bus to Hue.
The bus had sleeper seats, so I took the opportunity to catch some sleep. The ride was comfortable, so I am assuming the roads were good. In a couple of hours, we reached Hue. Again, we went to Highlands Coffee to have some coffee, charge our phones, and use the internet, not to mention using the bathrooms.
During the afternoon, we went to a local restaurant named Quán Chay Thanh Liễu. It was a vegan restaurant (remember the thing I mentioned earlier about “Chay” being in the name?). On the way, we had a steamed dumpling shaped like a momo called banh bao from a street vendor. It wasn’t very good, but I found it worthwhile.
Bahn Bao in Hue. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
At the restaurant, we ordered a hot pot. First, they brought noodles and a gas stove. Then came the stock and our gas stove was turned on. The stock was kept simmering on the stove. Then, we had it bit by bit with the noodles. A big hot pot at this place costs 50,000 dongs (₹170). Then we had bánh cuốn. These were steamed rolls made of rice flour for 10,000 dongs (₹33).
Hot Pot. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Added soup to the noodles. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Steamed rolls made of rice flour. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Restaurants in Vietnam usually add photos of the meals in their menu or write a description in English. So, even though the dish names were Vietnamese, we had no problems in ordering food there. In addition, all the places we went to provided free Wi-Fi. They either mention the Wi-Fi password on the bill, on the menu or paste it on the wall. This made our trip smoother without getting a local SIM.
Menu from a restaurant in Ho Chi Minh City with detailed description of the food. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Then we slowly walked towards the railway station, as we had a night train to Hanoi. We had egg coffee in a cafe. Near the railway station, we had a bánh mì (egg sandwich). As for sightseeing, we had plans to visit a couple of places in Hue, but we ended up spending all our time inside sheltered spaces due to heavy rain.
We had booked the train SE20 for Hanoi, which had a departure time of 20:41 from Hue. This one was 948,000 dongs (₹3100) for myself and 870,000 dongs (₹2900) for Badri. My ticket was pricier than Badri’s because I got a lower berth. Our train was late by half an hour, so we waited in the common area of the station. After the train arrived, we got inside and took our seats.
The cabin had four berths—two upper and two lower, similar to India’s First AC class. The ticket inspector came to us and offered us the whole cabin (two additional berths) for 300,000 dongs (₹1,000), which we declined. However, this hinted at the other two seats not being reserved. Eventually, we had the whole cabin to ourselves, as nobody else showed up for the other two berths. It was a 14-hour journey, and I got a good sleep.
Our berths in the train. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Hanoi
On the morning of the 19th of December 2024, we reached Vietnam’s capital, Hanoi. We had booked a private hotel room for ₹800. It was 1 km from the Hanoi Airport. However, it was pretty far from the railway station. So, we roamed around in the city and went to the hotel in the evening.
First, we walked to a place and had egg coffee with egg sandwiches. Then we went to Hanoi Train Street, which was walking distance from the train station. After clicking some pictures at the train street, we went to a museum nearby. Upon reaching there, we found out that it was closed.
Egg coffee in Hanoi. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Hanoi train street is a tourist attraction in Hanoi. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Then we went shopping for jackets, as Hanoi was cold compared to other parts of Vietnam we had been to, and since many of them are manufactured in Vietnam, we thought they would be cheaper. I liked some jackets, but they were not my size. Eventually, we didn’t buy anything at the clothes shop.
In the evening, I bought a Vietnamese-styled phin coffee filter and coffee powder from Highlands Coffee. We spent a lot of time in their cafes, so it made sense to buy some souvenirs from there. Badri bought a few coffee filters for his family at Trung Nguyen, where I also bought another filter.
We had dinner at a local place where we had pho and banh it. Bahn it was served packed in banana leaves and it was made of sticky rice.
A picture of pho we had in Hanoi. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Bahn it is served packed in banana leaves. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Bahn it. Photo by Ravi Dwivedi, released under CC-BY-SA 4.0.
Next, we went to Hanoi railway station to catch a bus to the airport since our hotel was 1 km from the airport. The locals there helped us take the bus. It took like an hour to get to the airport. We saw on OpenStreetMap that we can take a bus from there to the hotel, but we could not find it. So we walked to our hotel instead.
It was a decent hotel room for ₹800 for a night. We went outside to explore the area and had egg sandwiches and egg coffee at a local place. Again, we were given a complimentary green tea. We went to this place like three times. We had practically become regulars by the time we left.
The next day— 20th of December 2024 — we took a bus to the airport and boarded our flight to Delhi.
Credits: Thanks Badri, Kishy and Richard for proofreading.
It’s been another hectic week, but towards the end, it was a bit relaxing because of Ugadhi and Id breaks. Wish you all a happy Ugadhi and Id. The war continues. I doubt the folks who started the war know what they want or how they want it to end. This war is not just illegal but also foolish. I still think pushing India towards PNG (piped natural gas) is a bad idea. We should ideally move towards electricity, especially if you want to be energy-independent as a household, village, or state. Electricity is best suited.
Echo
It’s been hot and dry in Bengaluru. It’s been raining also, not a lot, but just enough to cool down a bit. I hope it continues. We have started using AC for roughly an hour every day. Just to cool the room before we go to sleep.
I played a game of pickleball with friends on Sunday morning. Now that seems like an ideal time for everyone. I also do two P.T sessions this week. I have started noting down the strength levels. Whenever I cross a milestone, I will try to add a record there.
There are lots of interesting things happening in the world of ActivityPub worth noting. Madblog exposes a bunch of Markdown files as a blog with full support for ActivityPub federation. It looks very easy to set up and run. Pubby is a Python library to manage everything related to the ActivityPub protocol. It makes it easy to bring AP to your Python applications. ap cli client is, as the name suggests, a command-line client to your AP server. And the most interesting one is holos.social, where you run the ActivityPub server on your phone (keys on the phone) and then expose it to the world through relay servers. Relay servers act as a middleman between your phone and the world. It also supports custom domains.
Note: This was written yesterday. But I forgot to post.
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.
One thing you should know is that I love bags, and I have quite a few of them, in different kinds. In my head, there are purposes behind it. But I am always looking for general-purpose bags. I have a couple of them, which are jack-of-all-trades kind of bags, which I love. Unfortunately, they are all getting old (5 to 10 years old) and are no longer available to buy again. For a long time, I didn’t have a motorcycling backpack; I have a small 10L Decathlon bag that’s probably a decade old. This works for short rides but is not comfortable on long rides. Also, it’s getting old, and I couldn’t buy it again :( So I started.
Requirements
Comfortable to wear the whole day
Good quality build
Big enough to hold enough water, phone, wallet, power bank, snacks, and maybe a multitool or additional pair of gloves based on need.
Ability to use it outside riding, say, while on a day hike or city walk.
Affordable
Solution
After quite a bit of research, I had the Navigator Hydration Backpack from Rynox, the Marine Neo Hydration Pack from ViaTerra, the Kreiga Trail 9, and the Wildcat 12L by Moskto Moto on the list. Both Kreiga and Wildcat are great on paper. But I think it’s too expensive ( > INR 20K) to buy without trying first. I will have to find a friend to try them out first. Marine Moto comes at a great price (INR 3399) and includes a hydration bladder. I found its minimal approach to being just a hydration backpack appealing. I wanted something more. So finally, I settled on the Navigator Hydration Backpack by Rynox.
Big LoopA selfie, Somewhere in the Ooty Ghat Section
Things I like
Total bag capacity is 4 Ltr. It’s not big, but it’s not very small either. I did buy a separate 2L hydration bladder (it can hold up to 3L). Depending on the situation, I fill 1L or 1.5L.
The water stays in the main compartment near the back; it’s quite stable. This compartment also has drainage holes. There are holes for the sipper; you can make it come out on the right or left side, as you prefer. This compartment can be fully opened for easy access, thanks to an all-around zipper. If you just add 1 L of water, you can easily fit a pair of additional gloves and some snacks. This also gives full access to adjust the shoulder harness so you can fit it nicely on your back. The main compartment also has a semi-transparent (plastic) pouch on the closing flap. Works well for a wallet or snacks, etc.
On the outside, there are two zipped pockets. One is deep. It can fit a power bank, phone, or camera. It is quite deep. There is a second zipped pocket; it’s not very deep, but it can still hold my phone and wallet together.
On the outside, there is an elastic cord-based compression storage. It has molle-like webbings for accessories as well. You can put your gloves, wet socks, etc., here. You can also attach accessories to webbings, though I don’t like it. I do have an LED blinker and a reflector clip that I attach here. However, I can use the Vioo Clip at the bottom for it.
The bag is sturdy and holds its shape. I also like how the back is designed for comfort and air circulation with enough sturdy foam. The backpack straps range from small to large, using the G-hooks from the main compartment. You can also make smaller adjustments outside using the straps. They have a Sternum Chest lock for effective load distribution, which I love. They have a standard waist strap. It is very comfortable to wear.
The build quality is good. It has YKK zippers, and I don’t think they have made any major compromises there.
Maybe a tidy bit bigger, 7 ot 9 Liters would have made it a bit more than the hydration backpack.
It doesn’t come with a hydration bladder. I think it’s always a good idea to sell them together.
At Rs. 5050 (3550 + 1500), it’s not cheap. I know it’s not as expensive as some foreign brands, but it is still expensive for many. But for the quality, I am okay to pay, I think. Only time will tell.
Conclusion
I have used it on the Big Loop, a 700 km single-day ride. I carried about 1L of water, Insta Go2, a Wallet, spare gloves, and a multitool. It was very comfortable. I didn’t feel much throughout the ride. Though I didn’t drink as much on the go (I would often forget), I think it’s a matter of practice. It was also easy to remove it and wear it. No fuss. It also fits well over my riding jacket. Zips were also accessible while wearing gloves—all in all, positive.
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.
It’s been a hectic week. Most of the things I had planned have been done, but there are always things left to do!
Visas are here. All of us got 3-year multiple-entry travel visas. Maybe we can make another visit to Australia and spend more time there. I would love to ride around Australia if possible. But before that, hopefully, airlines will have enough fuel to take us there.
Uma’s painting efforts.
March 15th is the last day to apply for NMG/2026. If you were planning to apply, please do. Also, please forward to interested folks.
I wrote a short blog post about using Moodle CodeRunner to run Bash questions. I use it for in-class lab.
Updated IDVC 2025 data and published it. I have also made the 2026 data live. But take it with a pinch of salt, as there have been very few survey submissions. But I think we will have enough items soon, maybe by the end of April.
I played a game of pickleball with friends this week. I could also attend two P.T sessions this week. I could do 3 sets of 10 reps at 55kg on lateral pulldowns. The goal is my body weight. I should cross it this year. I am very happy about it, given where I was at this time last year. BTW, I have lost weight and am now at my ideal weight – 58Kgs.
I have had a couple of OpenOffice bookings this week and had some great conversations about FOSS, OpenData, etc.
If you want quick access to Windows, here is a JavaScript emulator that runs Windows 2000 in a browser. I don’t know how Amazon implemented AI tools for its developers. For the organization that runs a lot of internet infrastructure, they should have been more deliberate and thoughtful. I wouldn’t agree to a code merge that is not reviewed and signed off by a person. Glad/sad to see Amazon coming to the same conclusion after disasters. Seems organizations and governments think Sovereignty in AI means deliberately hiding facts and sanitizing history, rather than conducting research and building. This thought process is completely different from what the FOSS world thinks about Sovereignty. India relaxes rules to allow easier Chinese investments again. It just shows how arbitrary these decisions are. We might even see TikTok soon!?! All Quiet on the Western Front (1930), an anti-war film, is now in the public domain. You can watch and share it using the Archive.org link. LibreOffice has Markdown support now.
Day 30: Finally 30 days. Last two paintings took 2 months. But anyway its done. I love painting and it calms me down. So all good. I will continue. 20260311Day 29: Sand dunes. Painted after a long time to burst the stress, didnt think much. 20260309
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 started it in December. The first 28 were completed in 34 days. The last two took almost two months. Though I would like to credit this delay to work becoming hectic, it’s mostly me not being able to prioritize. The work is still hectic, but I can take out 20 mins and do a painting.
Day 30: Finally 30 days. Last two paintings took 2 months. But anyway its done. I love painting and it calms me down. So all good. I will continue. 20260311
But I have learnt a couple of things during this exercise.
It’s important to complete and close even if it’s late.
Ability to prioritize even in a hectic schedule
One can work on painting and can become better
I love painting, and it calms me down
So after 91 days, my #30DaysOfWatercoloring are complete. You can visit the project page to see the progress and everything I did during that time. I am happy that this exercise is over. Now back to regular coloring.
Also looking forward doing for other 30DayChallenges. Send me some ideas.
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 have been teaching a course at APU that includes Bash scripting. I have a love-hate relationship with Bash. It’s a weird combination of a programming language and an iterative CLI. It’s confusing, easy to make mistakes, and hard to debug, but on the other hand, it’s available on almost all systems. It builds on the power of CLI and CLI tools available in the OS. Easy to write small and useful scripts that can automate your daily painful work. Hence, it’s worth knowing a bit of it even today.
The platform we (APU) use is Moodle. I have been in the MOOC industry for a decade now, and I have heard of Moodle so much, but this is the first time I have used it to run a course. To run a programming course, you will need an easy programming environment to challenge students. In my previous cases, we have used an NSJail-based environment with CourseBuilder (now called Seek), which works really well. But in this case, for Moodle, it’s CodeRunner plugin. It seems fairly easy to use. That said, Bash is not supported out of the box as user language. So I had to use Python to make it possible. This also assumes the environment (CodeRunner/JOBE) has Bash installed, though not directly accessible through API as user language.
The template Python code takes the TEST.testcode and prepends it to the user-entered STUDENT_ANSWER code. It also takes TEST.extra code and appends it. Then, it runs it as a bash script using Python subprocess by passing TEST.stdin as input. Captures STDOUT and prints it for comparison.
CodeRunner in Moodle. Customization using Templates for using Python to run Bash scripts written by user.
Example Question 1: Read an input as score. If the score is greater than or equal to 40, then print P. If the score is less than 40, then print U.
CodeRunner in Moodle. Example Bash question test case where STDIO is read and used.
Example Question 2: Write a function called cube. If a number is passed, it returns the cube of that number. For example cube 5 # will return 25
CodeRunner in Moodle. Example Bash question where we want to call a function user has written at the end. So it can be tested.
We did about three in-class labs using this. It worked well for all our cases. Though I must say we tried only Bash basics. Maybe there are use cases where this might break, but I think for most of it, this should work.
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.
Work has been hectic. But I can see the end, which is good, I think. Also, my orthodontic work is coming to an end. I should be free of steel cables in my mouth in three months.
Magna Tiles are a hit
Manju and I did a Big Loop Ride in a Day on Saturday. It was long and tiring, but we could do it. I am very happy that it was pain-free.
Summer is here. It’s been very hot all of a sudden. On the other hand, summer flowers are all over the city. It’s very pretty.
No games this week as friends were busy, and only one workout.
India needs to grow a spine and condemn the war on its friends. What’s the point of friends when they can’t even lend a voice during a crisis, or when your friends and guests get attacked in your own backyard, people who were there in the first place by our invitation? By being silent, one supports the crime. If not for others, we should speak for ourselves, but we seem to be in a situation where even spending our own money (a form of expression) requires someone else’s approval. It’s the cost of agreeing to terms in silence and not speaking up. I hope India responds before we lose all the respect we have. Also, this world doesn’t need another war, especially the ones that kill school children.
Summer is here – PinksSummer is here – Yellows
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.
ನಿತ್ಯಾನಂದ ಬಿ ಶೆಟ್ಟಿಯವರ ‘ಅಳವು ಅರಿಯದ ಭಾಷೆ’ ಪುಸ್ತಕಕ್ಕೆ ಇಸ್ಮಾಯಿಲ್ ಅವರು “ಕೇಡಿನ ಭಾಷೆಯೇ ಆಡುಭಾಷೆಯಾದಾಗ…” ಲೇಖನದ ಮೂಲಕ ಪ್ರತಿಕ್ರಿಯಿಸಿದ್ಡಾರೆ. ಸಮಯ ಸಿಕ್ಕಾಗ ಓದಿ. ಆ ಲೇಖನದ ಈ ಎರಡು ಪ್ಯಾರಾಗಳು ನನ್ನ ಮನದಲ್ಲಿ ಉಳಿದಿವೆ.
ಆ ದಿನಗಳಲ್ಲಿ ಕರಾವಳಿಯಿಂದ ಪ್ರಕಟವಾಗುತ್ತಿದ್ದ ಸುದ್ದಿ ಮಾಧ್ಯಮಗಳಲ್ಲಿ ಮಾತ್ರ ಬಳಕೆಯಾಗುತ್ತಿದ್ದ ‘ಅನ್ಯಮತೀಯ’ ಎಂಬ ಪದ ಈಗ ಕನ್ನಡ ನಾಡಿನ ಎಲ್ಲಾ ಮಾಧ್ಯಮಗಳಲ್ಲೂ ನಿತ್ಯವೆಂಬಂತೆ ಬಳಕೆಯಾಗುತ್ತದೆ. ಈ ‘ಅನ್ಯ’ರಲ್ಲಿರುವುದು ಯಾರೆಂದು ಈಗ ವಿವರಿಸಬೇಕಾದ ಅಗತ್ಯವೂ ಇಲ್ಲದಷ್ಟೂ ಎಲ್ಲವೂ ಸ್ಪಷ್ಟವಾಗಿಬಿಟ್ಟಿದೆ.
ಕುಂಬಳೆಯವರು ಮತೀಯ ದ್ವೇಷವನ್ನು ಕೆದಕುವ ಬೆಂಕಿ ಭಾಷಣಗಳನ್ನು ಹೆಚ್ಚಿನ ಮಟ್ಟಿಗೆ ರಾಜಕೀಯ ವೇದಿಕೆಗೆ ಸೀಮಿತವಾಗಿಟ್ಟಿದ್ದರು. ಈ ಕೃತಿಯಲ್ಲಿ ಆನುಷಂಗಿಕವಾಗಿ ಪ್ರಸ್ತಾಪವಾಗಿರುವ ಇತರ ಉದಾಹರಣೆಗಳು ರಂಗಸ್ಥಳದ ಮೇಲೇ ಆಡಿದಂಥವು. ಇವುಗಳನ್ನು ಆಡಿದವರು ವೈಯಕ್ತಿಕ ಬದುಕಿನಲ್ಲಿ ಬಹಳ ಕ್ರೂರಿಗಳೇನೂ ಆಗಿರಬೇಕಿಲ್ಲ. ಸಾಮಾನ್ಯರಲ್ಲಿ ಸಾಮಾನ್ಯರಂತೆ ಇರುವ ಸಾಧ್ಯತೆಯೇ ಹೆಚ್ಚು. ರಂಗದ ಮೇಲಿನಿಂದ ಆಡುವ ಮಾತಿಗೆ ರಂಗದ ಕೆಳಗಿನಿಂದ ಬರುವ ಚಪ್ಪಾಳೆಗಳು ಅವರ ಮಾತಿನ ತೀಕ್ಷ್ಣತೆಯನ್ನು ಹೆಚ್ಚಿಸುತ್ತಲೇ ಹೋಗುತ್ತವೆ. ಹೀಗೆ ಚಪ್ಪಾಳೆ ಹೊಡೆಯುವವರೂ ಸಾಮಾನ್ಯರೇ. ಫ್ಯಾಸಿಸಂ ಮಾಮೂಲಿನ ಸಂಗತಿಯಾಗಿಬಿಡುವುದೇ ಹೀಗೆ. ಸಾಂಸ್ಕೃತಿಕ ಬದುಕಿನಲ್ಲಿ ಕೇಡು ಮಾಮೂಲಿತನವಾದಾಗ ಸಾಯುವುದು ಮನುಷ್ಯರಷ್ಟೇ ಅಲ್ಲ. ಇಲ್ಲಿ ಚಿಂತನೆಯ ವಿವೇಕವೂ ಕೊನೆಯುಸಿರೆಳೆಯುತ್ತದೆ.
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.
We wanted to check whether we can ride for long hours if required. Also, just to check our physical condition. To do this, we had to ride a loop around Bangalore, covering different types of roads and elevations in a day, and at least 600 km. We had an idea of the route, then we rode. We were generally slow; it took longer than I expected, but it ended well, and we are happy with the results.
Somewhere in the Ooty Ghat Section
The route we finally took was Bengaluru – Malavalli (breakfast) – Mysore – Gundlupet – Ooty (lunch) – Coonoor – Avinashi (Tea) – Salem (Dinner) – Krishnagiri (Tea) – Hosur – Attibele – Bengaluru. It was around 672 km. We took lots of breaks, had lunch, tea, and took some pictures, that’s all. In total we road about 670KMs. I left home at 430AM and reached home back at around 12:30AM next day, roughly 20 hours, including all breaks.
National Knowledge Network (NKN) is one of India’s main National Research and Educational Network (NREN). The other being the less prevalent Education and Research Network (ERNET).
This post grew out of this Mastodon thread where I kept on adding various public graphs (from various global research and educational entities) that peer or connect with NKN. This was to get some purview about traffic data between them and NKN.
CERN
CERN, birthplace of the World Wide Web (WWW) and home of the Large Hadron Collider (LHC).
India participates in the LHCONE project, which carries LHC data over these links for scientific research purposes. This presentation from Vikas Singhal from Variable Energy Cyclotron Centre (VECC), Kolkata, at the 8th Asian Tier Center Forum in 2024 gives some details.
GÉANT
GÉANT is pan European Union’s collaboration of NRENs.
OK. Last year I wrote a short guide on mapping Indian addresses but I lost it in my tiny pursuit to delete myself. Today I suddenly came across the fact that the guide was actually used by mappers and, hence, as a result I am now writing this post to become a replacement for that old guide. Since this is a new one, I don’t want to just rehash the old stuff and instead this time I am going to take a simple problem and show how I would solve it from scratch.
A1, Tower 2, Sector 11, RK Puram, South West District, Delhi, India
A problem very similar to this one came up in OSM India’s XMPP channel today. So, how does one go about mapping this address?
As it’s usually the case we can ignore the district, state, and country part as they are all very well mapped in India. This leaves us with everything upto RK Puram.
If you are thinking that something as big as RK Puram should surely be already on the map then you are wrong; In my “career” I have actually seen larger areas without any nodes for them. So we will in fact check if it’s already on the map and, guess what, it actually is already mapped as a suburb, so that’s one less step for us! I should mention that in OSM there are three “neighbourhood” levels below the district: quarter, suburb, and neighbourhood in decreasing order of size. In most cases suburb and neighbourhood should be enough for you, but it is important to be aware of quarter for special situations.
Now let’s check for Sector 11. As of writing this, Sector 11 isn’t on the map. So I will put a neighbourhood node at the approximate centre of Sector 11. (Remember that neighbourhood is smaller than suburb.) We are making good progress.
Now let’s take care of Tower 2. It’s actually specifying a particular building, unlike the previous steps which were about specifying the area in which the building lies. In this case it should be “Tower 2” for housename and “Sector 11” for place. It’s important to specify the place because it could be the case that “Sector 45” node is actually closer to the building.
A small interjection: when mapping a building try to choose between housename and housenumber or place and street logically. If your address is “36, Shivaji Marg” then please please use 36 for housenumber and Shivaji Marg for street. If you do it incorrectly then there’s a 90% of divine punishment from OSM gods.
OK. The building is done. Now all you have to do is to add A1 to the unit tag as a separate node inside the building. Note that the A in this case does not refer to a block and so it should not be separated from the 1. Another important point is that even though A1 is referred to as housenumber in common language, in OSM it isn’t actually a housenumber since housenumber/housename are reserved for building. A1 is just a unit number which means that it is a part of the building. (In case you haven’t realized it yet, the given address was for an apartment.)
I forgot to mention but blocks are somewhat of a controversial topic. My method is usually to retain the blocks in housenumber if they are simple (such as the 1 in “1/265”) or move them into “place” if they are more complicated (like the Pocket E in “36, Pocket E”).
OK. Let’s see if you were reading carefully. Tell me how you would map
1/26/65EB, Gali Shanti, Near Phoole Wala Mandir, Chandni Chowk, Old Delhi
Were you able to do it? Here’s my answer:
Old Delhi is probably already mapped, Chandni Chowk would be a neighbourhood, I would ignore Phoole Wala Mandir, I would add Gali Shanti to the name of highway, then finally for the building I would add 1/26/65E as housenumber and Gali Shanti as street. Did you notice that I never actually told you that letters like E are allowed in housenumber? By that I wanted to show that this guide probably does not contain comments for each and every case, but it should work for the majority of cases. If you come across a difficult problem, then your best bet is always OSM Wiki. Just look it up!
I had to change my username after I accidentally connected it to my government ID and so this is my new domain. Meanwhile, I also took this opportunity to purge all of my blog posts for some obscure reason.
I spend an embarrassing amount of time in cafes, though honestly, I like the whole concept of a cafe way more than the coffee itself.
I know it’s a bit like going to a bar for the water, but the caffeine isn’t really the draw for me. I’m just there for the faces.
I’ve been staying alone in Mumbai/Thane for almost two years now.
My social life is pretty much non existent by choice, I guess, but let’s not digress into the why of it all right now.
The point is, I love the ambience.
When I’m tucked away in a corner of a cafe, I don’t feel so lonely; it feels like a safe space.
I get to observe so many great personalities, some eventually become “regulars”, some I see every six months, while others just remain figments of my imagination.
I don’t know, man. I just like spending 5 to 6 hours with my laptop, expertly pretending to work. Once in a while, I actually do get some stuff done, but mostly I’m just there for the environment.
At this point, I’m basically part of the furniture (LMAO), and I’m on a first name basis with the staff.
Blue Tokai is the winner for me so far. It helps that there’s a branch barely a kilometer away from my place and the wifi actually holds up.
Since I’m not there for the beans, I usually just go for their hot chocolate.
My credit card statement is the only thing side eyeing my choices right now.
But hey, if the price of feeling ‘kinda happy’ is a daily hot chocolate, I think I’m fine with the trade off.
Back in December, I was working to help organize multiple different conferences. One has already happened; the rest are still works in progress. That’s when the thought struck me: why so many conferences, and why do I work for them?
I have been fairly active in the scene since 2020. For most conferences, I usually arrive late in the city on the previous day and usually leave the city on conference close day. Conferences for me are the place to meet friends and new folks and hear about them, their work, new developments, and what’s happening in their interest zones. I feel naturally happy talking to folks. In this case, people inspire me to work. Nothing can replace a passionate technical and social discussion, which stretches way into dinner parties and later.
For most conference discussions now, I just show up without a set role (DebConf is probably an exception to it). It usually involves talking to folks, suggesting what needs to be done, doing a bit of it myself, and finishing some last-minute stuff during the actual thing.
Having more of these conferences and helping make them happen naturally gives everyone more places to come together, meet, talk, and work on something.
No doubt, one reason for all these conferences is evangelism for, let’s say Free Software, OpenStreetMap, Debian etc. which is good and needed for the pipeline. But for me, the primary reason would always be meeting folks.
In December 2024, Badri and I went to Brunei’s capital, Bandar Seri Begawan. Brunei—officially Brunei Darussalam—is a country in Southeast Asia, located on Borneo Island. It is one of the few remaining absolute monarchies on Earth.
On the morning of the 10th of December 2024, we reached Brunei International Airport by taking a flight from Kuala Lumpur. Upon arrival at the airport, we had to go through immigration, of course. When I was standing in the queue, I was reminded that I hadn’t filled out my arrival card. So I filled it out and submitted it online while I was in the queue.
The immigration officer asked me how much cash I was carrying of each currency. After completing the formalities, the immigration officer stamped my passport and let me in. Take a look at Brunei’s entry stamp in my passport.
Brunei entry stamp on my passport. Picture by Ravi Dwivedi, released under CC-BY-SA 4.0.
We exchanged Singapore dollars to get some Brunei dollars at the airport. The Brunei dollar was pegged 1:1 with the Singapore dollar, meaning 1 Singapore dollar equals 1 Brunei dollar. The exchange rate we received at the airport was the same.
Our (pre-booked) accommodation was located near Gadong Mall. So, we went to the information center at the airport to ask how to get there by public transport. However, the person at the information center told us that they didn’t know the public transport routes and suggested we take a taxi instead.
We came out of the airport and came across an Indian with a bus. The bus seemed more like a minibus by Indian standards. He offered to drop us at our accommodation for 10 Brunei dollars (₹630). As we were tired after a sleepless night, we didn’t negotiate and took the offer. There was nobody else on the bus, and it felt a bit weird using the minibus as our private taxi.
In around half an hour, we reach our accommodation. The place was more like a guest house than a hotel. In addition to the rooms, it had common space consisting of a hall, a kitchen, and a balcony.
Our room in Brunei. Picture by Ravi Dwivedi, released under CC-BY-SA 4.0
Upon reaching the place, we paid for our room in cash, which was 66.70 Singapore dollars (4200 Indian rupees) for two nights. We arrived before the check-in time, so we had to wait for our room to get ready before we entered.
The room had a double bed and also a place to hang clothes. We slept for a few hours before going out at night. We went into Gadong Mall and had coffee at a café named The Coffee Bean & Tea Leaf. The regular caffe latte I had here was 5.20 Brunei dollars. On another note, the snacks we got in Kuala Lumpur covered us for the dinner.
The next day—11th of December 2024—we went to a nearby restaurant named Nadj for lunch. The owner was from Kerala. Here we ordered:
1 paneer pepper masala for 5 Brunei dollars (320 rupees)
1 nasi goreng pattaya biasa for 4.50 Brunei dollars (290 rupees)
1 plain naan for 1.50 Brunei dollars (100 rupees)
1 butter naan for 1.80 Brunei dollars (115 rupees)
So, our lunch cost a total of 12.80 Brunei dollars (825 rupees). I didn’t like the fact that the naan was unusually thick.
After the lunch, we planned to visit Brunei’s famous Omar Ali Saifuddien Mosque. However, a minibus driver outside of Gadong Mall told us that the mosque would be closed in half an hour and suggested we visit the nearby Jame’ Asr Hassanil Bolkiah Mosque instead.
Jame’ Asr Hassanil Bolkiah Mosque. Picture by Ravi Dwivedi, released under CC-BY-SA 4.0
He dropped us there for 1 Brunei dollar per person, which seemed like the standard rate for any bus ride in Brunei. The person hailed from Uttar Pradesh and told us about bus routes in Hindi. Bus routes in Brunei were confusing, so the information he gave us was valuable.
It was evening, and we had the impression that the mosque and its premises were closed. However, soon enough, we stumbled across an open gate entering the mosque complex. We walked inside for some time, took pictures, and exited. Walking in Bandar Seri Begawan wasn’t pleasant, though. The pedestrian infrastructure wasn’t good.
Then we walked back to our place and bought some souvenirs. For dinner and breakfast, we bought bread, fruits, and eggs from local shops, as we had a kitchen to cook for ourselves.
The guest house also had a washing machine (free of charge), which we wanted to use. However, they didn’t have detergent. Therefore, we went outside to get some detergent. It was 8 o’clock, and most of the shops were closed already. Others had detergents in large sizes, the ones you would use if you lived there. We ended up getting a small packet at a supermarket.
The next day—the 12th of December—we had a flight to Ho Chi Minh City in Vietnam with a long layover in Kuala Lumpur. We had breakfast in the morning and took a bus to Omar Ali Saifuddien Mosque. The mosque was in prayer session, so it was closed for Muslims. Therefore, we just took pictures from the outside and took a bus to the airport.
Omar Ali Saifuddien Mosque. Picture by Ravi Dwivedi, released under CC-BY-SA 4.0
When the bus reached near the airport, the bus went straight rather than taking a left turn for the airport. Initially, I thought the bus would just take a turn and come back. However, the bus kept going away from the airport. Confused by this, I asked other passengers if the bus was going to the airport. The driver stopped the bus at Muara Town terminal— 20 km from the airport. At this point, everyone alighted, except for us. The driver went to a nearby restaurant to have lunch.
I felt very uncomfortable stranded in a town that was 20 km from the airport. We had a lot of time, but I was still worried about missing our flight, as I didn’t want to get stuck in Brunei. After waiting for 15 minutes, I went inside the restaurant and reminded the driver that we had a flight in a couple of hours and needed to go to the airport. He said he will leave soon.
When he was done with his lunch, he drove us to the airport. It was incredibly frustrating. On a positive note, we saw countryside in Brunei that we would not have seen otherwise. The bus ride cost us 1 Brunei dollar each.
A shot of Brunei’s countryside. Picture by Ravi Dwivedi, released under CC-BY-SA 4.0.
That’s it for this one. Meet you in the next one. Stay tuned for the Vietnam post!
Disclaimer: The goal of this post is not to attack Riseup. In fact, I love Riseup and support their work.
Story
Riseup is an email provider, known for its privacy-friendly email service. The service requires an invite from an existing Riseup email user to get an account.
I created my account on Riseup in the year 2020, of course with the help of a friend who invited me. Since then, I have used the email address only occasionally, although it is logged into my Thunderbird all the time.
Fast-forward to the 4th of January 2026, when Thunderbird suddenly told me that it could not log in to my Riseup account. When I tried logging in using their webmail, it said “invalid password”. Finally, I tried logging in to my account on their website, and was told that…
Log in for that account is temporary suspended while we perform maintenance. Please try again later.
At this point, I suspected that the Riseup service itself was facing some issues. I asked a friend who had an account there if the service was up, and they said that it was. The issue seemed to be specific only to my account.
I contacted Riseup support and informed them of the issue. They responded the next day (the 5th of January) saying:
The my-username-redacted account was found inviting another account that violated our terms of use. As a security measure we suspend all related accounts to ToS violations.
(Before we continue, I would like to take a moment and reflect upon how nice it was to receive response from a human rather than an AI bot—a trend that is unfortunately becoming the norm nowadays.)
I didn’t know who violated their ToS, so I asked which account violated their terms. Riseup told me:
I asked a friend whom I invited a month before the incident, and they confirmed that the username belonged to them. When I asked what they did, they told me they tried creating aliases such as floatup and risedown. I also asked Riseup which aliases violated their terms, but their support didn’t answer this.
I explained to the Riseup support that the “impersonation” wasn’t intentional, that the user hadn’t sent any emails, and that I had been a user for more than 5 years and had donated to them in the past.
Furthermore, I suggested that they should block the creation of such aliases if they think the aliases violate their terms, like how email providers typically don’t allow users to create admin@ or abuse@ email addresses.
After I explained myself, Riseup reinstated my account.
Update on the 10th of January 2025: My friend told me that the alias that violated Riseup’s terms was cloudadmin and his account was reinstated on the 7th of January.
Issues with suspension
I have the following issues regarding the way the suspension took place —
There was no way of challenging the suspension before the action was taken
The action taken against me was disproportionate. Remember that I didn’t violate any terms. It was allegedly done by a user I invited. They could just block the aliases while continuing the discussion in parallel.
I was locked out of my account with no way of saving my emails and without any chance to migrate. What if that email address was being used for important stuff such as bank access or train tickets? I know people who use Riseup email for such purposes.
The violation wasn’t even proven. I wasn’t told which alias violated the terms and how could that be used to impersonate Riseup itself
When I brought up the issue of me getting locked out of my account without a way of downloading my emails or migrating my account, Riseup support responded by saying:
You must understand that we react [by] protecting our service, and therefore we cannot provide notice messages on the affected accounts. We need to act preventing any potential damage to the service that might affect the rest of the users, and that measure is not excessive (think on how abusers/spammers/scammers/etc could trick us and attempt any action before their account is suspended).
This didn’t address my concerns, so let’s move on to the next section.
Room for improvement
Here’s how I think Riseup’s ban policy could be changed while still protecting against spammers and other bad actors:
Even if Riseup can’t provide notice to blocked accounts, perhaps they can scale back limitations on the inviting account which wasn’t even involved—for example, by temporarily disabling invites from that account until the issue is resolved.
In this case, the person didn’t impersonate Riseup, so Riseup could have just blocked the aliases and let the user know about it, rather than banning the account outright.
Riseup should give blocked users access to their existing emails so they have a chance to migrate them to a different provider. (Riseup could disable SMTP and maybe incoming emails but keep IMAP access open). I know people who use Riseup for important things such as bank or train tickets, and a sudden block like this is not a good idea.
Riseup should factor in the account profile in making these decisions. I had an account on their service for 5 years and I had only created around 5 invites. (I don’t remember the exact number and there’s no way to retrieve this information.) This is not exactly an attacker profile. I feel long-term users like this deserve an explanation for a ban.
I understand Riseup is a community-run service and does not have unlimited resources like big corporations or commercial email providers do. Their actions felt disproportionate to me because I don’t know what issues they face behind the scenes. I hope someone can help to improve the policies, or at least shed light on why they are the way they are.
I would have loved to include 4.0.0.0/8 and 8.0.0.0/8 with Lumen/Level 3 or 9.0.0.0/8 with IBM but parts of the address space have been handed out to other entities, like 8.8.4.0/24 and 8.8.8.0/24 for Google Public DNS and 9.9.9.0/24 for Quad9.
Then there were other famous netblocks like 18.0.0.0/8 with MIT and 44.0.0.0/8 which was with Amateur Packet Radio Network broken and brought up by Amazon. Amazon keeps on buying more and more of IPv4 address space. Right now, they’re the second highest IPv4 address space holder with 168+ million addresses under them, right behind the US DoD, which has more due to legacy reasons.
Note - HE’s list mentions addresses originated (not just owned). Providers also advertise prefixes owned by their customers in Bring Your Own IP (BYOIP) setups. The number of address space owned by entity would “mostly” be more than their customer owned space (originated by the entity).
There’s also 126.0.0.0/8 which is mostly Softbank.
In my last post, Badri and I reached Kuala Lumpur - the capital of Malaysia - on the 7th of December 2024. We stayed in Bukit Bintang, the entertainment district of the city. Our accommodation was pre-booked at “Manor by Mingle”, a hostel where I had stayed for a couple of nights in a dormitory room earlier in February 2024.
We paid 4937 rupees (the payment was online, so we paid in Indian rupees) for 3 nights for a private room. From the Terminal Bersepadu Selatan (TBS) bus station, we took the metro to the Plaza Rakyat LRT station, which was around 500 meters from the hostel. Upon arriving at the hostel, we presented our passports at their request, followed by a 20 ringgit (400 rupee) deposit which would be refunded once we returned the room keys at checkout.
Manor by Mingle - the hostel where we stayed at during our KL transit. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.
Our room was upstairs and it had a bunk bed. I had seen bunk beds in dormitories before, but this was my first time seeing a bunk bed in a private room. The room did not have any toilets, so we had to use shared toilets.
Unusually, the hostel was equipped with a pool. It also had a washing machine with dryers - this was one of the reasons we chose this hostel, because we were traveling light and hadn’t packed too many clothes. The machine and dryer cost 10 ringgits (200 rupees) per use, and we only used it once. The hostel provided complimentary breakfast, which included coffee. Outside of breakfast hours, there was also a paid coffee machine.
During our stay, we visited a gurdwara - a place of worship for Sikhs - which was within walking distance from our hostel. The name of the gurdwara was Gurdwara Sahib Mainduab. However, it wasn’t as lively as I had thought. The gurdwara was locked from the inside, and we had to knock on the gate and call for someone to open it. A man opened the gate and invited us in.
The gurdwara was small, and there was only one other visitor - a man worshipping upstairs. We went upstairs briefly, then settled down on the first floor.
We had some conversations with the person downstairs who kindly made chai for us. They mentioned that the langar (community meal) is organized on every Friday, which was unlike the gurdwaras I have been to where the langar is served every day. We were there for an hour before we left.
We also went to Adyar Ananda Bhavan (a restaurant chain) near our hostel to try the chain in Malaysia. The chain is famous in Southern India and also known by its short name A2B. We ordered
an onion dosa for 10 ringgits (200 rupees),
1 masala tea for 6 ringgits (120 rupees),
2 pooris for 8 ringgits (160 rupees) and
1 plate potato bajji for 7 ringgits (140 rupees).
Dosa served at Adyar Ananda Bhavan. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.
All this came down to around 33 ringgits (including taxes), i.e. around 660 rupees. We also purchased some snacks such as murukku from there for our trip.
We had planned a day trip to Malacca, but had to cancel it due to rain. We didn’t do a lot in Kuala Lumpur, and it ended up acting as a transit point for us to other destinations: flights from Kuala Lumpur were cheaper than Singapore, and in one case a flight via Kuala Lumpur was even cheaper than a direct flight!
We paid 15,000 rupees in total for the following three flights:
Kuala Lumpur to Brunei,
Brunei to Kuala Lumpur, and
Kuala Lumpur to Ho Chi Minh City (Vietnam).
These were all AirAsia flights. The cheap tickets, however, did not include any checked-in luggage, and the cabin luggage weight limit was 7 kg. We also bought quite some stuff in Kuala Lumpur and Singapore, leading to an increase in the weight of our luggage.
We estimated that it would be cheaper for us to take only essential items such as clothes, cameras, and laptops, and to leave behind souvenirs and other non-essentials in lockers at the TBS bus stand in Kuala Lumpur, than to pay more for check-in luggage. It would take 140 ringgits for us to add a checked-in bag from Kuala Lumpur to Bandar Seri Begawan and back, while the cost for lockers was 55 ringgits at the rate of 5 ringgits every six hours.
We had seen these lockers when we alighted at the bus stand while coming from Johor Bahru. There might have been lockers in the airport itself as well, which would have been more convenient as we were planning to fly back in soon, but we weren’t sure about finding lockers at the airport and we didn’t want to waste time looking.
We had an early morning flight for Brunei on the 10th of December. We checked out from our hostel on the night of the 9th of December, and left for TBS to take a bus to the airport. We took a metro from the nearest metro station to TBS. Upon reaching there, we put our luggage in the lockers. The lockers were automated and there was no staff there to guide us.
Lockers at TBS bus station. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.
We bought a ticket for the airport bus from a counter at TBS for 26 ringgits for both of us. In order to give us tickets, the person at the counter asked for our passports, and we handed it over to them promptly. Since paying in cash did not provide any extra anonymity, I would advise others to book these buses online.
In Malaysia, you also need a boarding pass for buses. The bus terminal had kiosks for getting these printed, but they were broken and we had to go to a counter to obtain them. The boarding pass mentioned our gate number and other details such as our names and departure time of the bus. The company was Jet Bus.
My boarding pass for the bus to the airport in Kuala Lumpur. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.
To go to our boarding gate, we had to scan our boarding pass to let the AFC gates open. Then we went downstairs, leading into the waiting area. It had departure boards listing the bus timings and their respective gates. We boarded our bus around 10 minutes before the departure time - 00:00 hours. It departed at its scheduled time and took 45 minutes to reach KL Airport Terminal 2, where we alighted.
We reached 6 hours before our flight’s departure time of 06:30. We stopped at a convenience store at the airport to have some snacks. Then we weighed our bags at a weighing machine to check whether we were within the weight limit. It turned out that we were.
We went to an AirAsia counter to get our boarding passes. The lady at our counter checked our Brunei visas carefully and looked for any Brunei stamps on the passports to verify whether we had used that visa in the past. However, she didn’t weigh our bags to check whether they were within the limit, and gave us our boarding passes.
We had more than 4 hours to go before our flight. This was the downside of booking an early morning flight - we weren’t able to get a full night’s sleep.
A couple of hours before our flight time, we were hanging around our boarding gate. The place was crowded, so there were no seats available. There were no charging points. There was a Burger King outlet there which had some seating space and charging points. As we were hungry, we ordered two cups of cappuccino coffee (15.9 ringgits) and one large french fries (8.9 ringgits) from Burger King. The total amount was 24 ringgits.
When it was time to board the flight, we went to the waiting area for our boarding gates. Soon, we boarded the plane. It took 2.5 hours to reach the Brunei International Airport in the capital city of Bandar Seri Begawan.
View of Kuala Lumpur from the aeroplane. Photo by Ravi Dwivedi. Released under the CC-BY-SA 4.0.
Stay tuned for our experiences in Brunei!
Credits: Thanks to Badri, Benson and Contrapunctus for reviewing the draft.
In production Kubernetes environments, access control becomes critical when multiple services share the same cluster. I recently faced this exact scenario: a GKE cluster hosting multiple services across different namespaces, where a new team needed access to maintain and debug their service-but only their service.
The requirement was straightforward yet specific: grant external users the ability to exec into pods, view logs, and forward ports, but restrict this access to a single namespace within a single GKE cluster. No access to other clusters in the Google Cloud project, and no access to other namespaces.
The Solution
Achieving this granular access control requires combining Google Cloud IAM with Kubernetes RBAC (Role-Based Access Control). Here’s how to implement it:
Add an IAM policy binding that grants users access to resources with your specific tag. The Kubernetes Engine Viewer role (roles/container.viewer) provides sufficient base permissions without granting excessive access.
Step 3: Create a Kubernetes ClusterRole
Define a ClusterRole that specifies the exact permissions needed:
Apply both configurations using kubectl apply -f <filename>.
How It Works
This approach creates a two-layer security model:
GCP IAM controls which clusters users can access using resource tags
Kubernetes RBAC controls what users can do within the cluster and limits their scope to specific namespaces
The result is a secure, maintainable solution that grants teams the access they need without compromising the security of other services in your cluster.
MiniDebConf Navi Mumbai 2025 which was MiniDebConf Mumbai, which in turn was FOSSMumbai x MiniDebian Conference, happened on 13th and 14th December, 2025, with a hotel as Day 1 venue and a college on Day 2.
Originally planned for the 8th of November, it got postponed to December due to operational reasons. Most of the on-ground logistics and other heavy lifting was done by Arya, Vidhya, MumbaiFOSS, and the Remigies Technologies team, so we didn’t had to worry much.
This time, I gave a talk on Basics of a Free Software Mirror (and how Debian does it) (Presentation URL). I had the idea for this talk for a while and gave a KDE version of it during KDE India Conf 2025. The gist was to explain how Free Software is delivered to users and how one can help. For MDC, I focused a bit on Debian mirror network(s) and who else host mirrors in India and trends.
Me during mirror talk
Credits - niyabits. Thanks for the pictures
At the onset someone mentioned my Termux mirror. Termux is a good project to get into mirror hosting with. I got into mirroring with it. It has low traffic (usually less than 20 GB/day) demands with a high request count and can be done on an existing 6 USD Digital Ocean nodes. Q&A time turned out more interesting than I anticipated. Folks touched upon commercial CDNs instead of community mirrors, supply chain security issues, and a bit of other stuff.
We had quite a number of interesting talks and I remember when Arya was telling me during CFP time, “bro we have too many talks now” :D.
Now, preparations have already started for MiniDebConf Kanpur 2026, scheduled for March 14th and 15th at the IIT campus. If you want to help, see the following thread. See you in the next one.
Goose is a local, extensible, open source AI agent that automates engineering tasks
I have recently packaged goose CLI for openSUSE tumbleweed & during the process, i had to patch the source code to disable the
self update feature, as it is a standard practice in most of the Linux distributions to disable self-update commands for such programs to maintain system stability and security. This prevents users from inadvertently introducing incompatible changes or vulnerabilities that could arise from the untested upstream updates.
Now, for those who know, maintaining such a patch in the distribution packaging needs constant attention & adapting the patch to any upstream code changes, which is not ideal path forward. Hence, I have decided to bake the feature directly in the goose codebase. The change was relatively simple. I just added a cargo feature, which when invoked during the compile time, stops the update process with an error when a user invokes it. The advantage of this approach is that it eliminates the need of maintain a separate patch for the distribution package maintainers.
I have submitted the PR to the upstream & it was merged after a review from the maintainers. This is my first contribution to an open source rust project & i am looking forward to do contribute more impactful changes to goose!
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?
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!
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 ðŸ˜
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.