<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Fenils Blog</title><description>What does it mean to be strong Takamura-san?</description><link>https://fknil.com/</link><item><title>Weeknote 32 2026</title><link>https://fknil.com/weeknote/2026-week-32/</link><guid isPermaLink="true">https://fknil.com/weeknote/2026-week-32/</guid><pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Life&lt;/h2&gt;
&lt;h3&gt;Cats&lt;/h3&gt;
&lt;p&gt;There&apos;s this cat who had been purring at me whenever I used to bring back milk, I didn&apos;t understand what that meant till one fine day I saw its kittens and realized it might be wanting the milk itself! Kittens are in all colors, one is the same as her mother&apos;s color, one is spotty orange (maybe just spotty stupid then 😂), and one is pitch black. Black is strong enough that you wouldn&apos;t notice it&apos;s presence in shadows. This along with those shining predator eyes, I bet this creature is going to scare someone in the future. 🦁&lt;/p&gt;
&lt;p&gt;So, I have been feeding them milk for a few days, but my sister informed me today that most cats are lactose intolerant and they don&apos;t consume milk!?? I really don&apos;t want these cute bunch to fall sick on me. Kitten with the same fur as mum already looks pretty weak 😓. If anyone reading this has more insights on this matter, please do let me know 🙏.&lt;/p&gt;
&lt;p&gt;Till then enjoy the family dinner photo ( these are the times I wish I had a better camera ):&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;https://bin.wantguns.dev/wfUg65.webp&quot; alt=&quot;cat family enjoying their dinner&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;/p&gt;
&lt;h3&gt;House hunting&lt;/h3&gt;
&lt;p&gt;I have been house hunting in Indiranagar, and oh boy its a blood bath out there. I wasn&apos;t looking for a newly rented house but instead a pre-occupied one. I realized one needs to quick on his feet to respond on facebook posts and visiting the house to finalize it, if you miss by a few hours, you are done.&lt;/p&gt;
&lt;p&gt;I primarily had my eyes on two properties, first one was really really nice and also in the same society as one of my climbing friends! But the tenants were non-vegetarians and heavy smokers. They were upfront about the point that they would smoke in the common area too &lt;code&gt;:(&lt;/code&gt;. I had told yes to them initially out of desperation but then I found another property with a guy who is vegetarian and non-smoker. Best part of all, he actually wanted to meet me before all the other candidates because we both are &lt;a href=&quot;https://en.wikipedia.org/wiki/Jainism&quot;&gt;Jain&lt;/a&gt; 😭. Not sure on the religious front, but community helps 🫂.&lt;/p&gt;
&lt;p&gt;I also realized I shouldn&apos;t be so hasty in these things, quality of life has always mattered to me, and I would really have preferred to not leave my current place in Jayanagar. Its so beautiful. But sometimes life gives you lemon, and you have to gulp down the lemonade.&lt;/p&gt;
&lt;p&gt;I have finalized the property by paying the token amount. Currently completing the formalities of deposit, talking to the new house owner, buying few things which old tenant is taking back with him. Overall, pretty excited for a new chapter in this Bengaluru journey! Godspeed to myself &lt;code&gt;:P&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Youtube RSS feed&lt;/h3&gt;
&lt;p&gt;I have also set few youtube channels in my RSS feed, I am trying this out as an experiment to see if I could remove all the subscriptions from my current account and rarely open the feed when I actually want to discover new things. One of my gripes has been shorts also getting delivered in the same feed as videos. This is SUPER IRRITATING to me, I have disabled shorts in the frontend using extensions because I really am not interested in short form of content. Send me that 3 hour long read/watch which is human made and I will consume it slowly over days, but I am not interested in these clickbaits/brain drainers anymore.&lt;/p&gt;
&lt;p&gt;Apparently there are ways to remove shorts from the same feed by &lt;code&gt;s/UC/UF&lt;/code&gt; or &lt;code&gt;s/UC/UULF&lt;/code&gt; and &lt;code&gt;s/channel_id/playlist_id&lt;/code&gt; but unfortunately neither of these tips work anymore. I also tried to use a bunch of generator websites, which take in direct youtube channel URL with their custom ID and outputs different RSS feeds with only videos, videos + shorts, etc. But none of them seemed to have worked &lt;code&gt;:(&lt;/code&gt;. So for now, I will just ignore them by marking them as read whenever they show up.&lt;/p&gt;
&lt;h3&gt;Chill&lt;/h3&gt;
&lt;p&gt;This Friday and Saturday were very very weird, I did not do anything, didn&apos;t work, didn&apos;t code, like nothing. For these two days I might have labelled myself as the 5 star ambassador. &lt;a href=&quot;https://www.youtube.com/watch?v=WdYDUuvROEU&quot;&gt;Eat 5 star do nothing&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I have been trying to understand what caused this slug, best suspect is my manager visiting the whole week and me not getting to express my discontent with work properly to him? I might need to introspect more on the same. 🧘&lt;/p&gt;
&lt;h2&gt;Food&lt;/h2&gt;
&lt;p&gt;This week was the sugar rush week and also loads and loads of outside food. All this after I told myself to cut down on outside food in last weeknote 😭.&lt;/p&gt;
&lt;h3&gt;Karantaka sweets&lt;/h3&gt;
&lt;p&gt;I tried out a few different Karnataka local sweets this week from the same &lt;a href=&quot;https://maps.app.goo.gl/Hu1w6ba5PPRveAYK9&quot;&gt;Sambar Paliye&lt;/a&gt; place:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vegrecipesofindia.com/moong-dal-payasam-recipe/&quot;&gt;Moong daal payasam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hebbarskitchen.com/gasagase-payasa-recipe-khus-khus-kheer/&quot;&gt;Ghas Ghase payasam&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I liked ghas ghase payasam a lot more than moong daal one! It was also pretty expensive compared to Semiya or Moong daal. They sell latter for 70 rupees and this was 120! Well it was worth it though &lt;code&gt;:)&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Onion podi dosa&lt;/h3&gt;
&lt;p&gt;I have been seeing a guy eat Onion podi dosa, every Sunday morning at my no name go to South Indian breakfast place, so I finally ordered it, and it was pretty good! I would definitely miss this place when I move to Indiranagar! Cheap, tasty and actually cleanly cooked food.&lt;/p&gt;
&lt;h3&gt;Boom Sandwiches&lt;/h3&gt;
&lt;p&gt;I also tried &lt;code&gt;Boom Sandwiches&lt;/code&gt; from &lt;a href=&quot;https://eatclub.in/&quot;&gt;EatClub&lt;/a&gt; the same evening. My exact order was:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pesto Paneer Cheese Sandwich&lt;/li&gt;
&lt;li&gt;Veggie delight&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While Pesto Paneer one was almost 100 rupees more expensive, veggie delight still slapped better 🙃.&lt;/p&gt;
&lt;h3&gt;Spettacolare&lt;/h3&gt;
&lt;p&gt;I ended up in &lt;a href=&quot;https://maps.app.goo.gl/gunSyQDP1ruvQBHK9&quot;&gt;Spettacolare&lt;/a&gt; again 🫠. We ordered a bunch of other pizzas and pastas and all the desserts I hadn&apos;t tried. Again same conclusions, pastas were really good, aglo oglio was the best. Pizzas could do with better toppings, but this place definitely has better bread than 4Ps. And finally all the desserts are SO SO GOOD 🤌.&lt;/p&gt;
&lt;h3&gt;Monkey bar&lt;/h3&gt;
&lt;p&gt;As my manager was in town, our team had a small social gathering at the &lt;a href=&quot;https://maps.app.goo.gl/SBdB3kveNSSL8Xzh8&quot;&gt;Monkey Bar&lt;/a&gt;. Company&apos;s social gathering is mostly about drinking, which I don&apos;t do, so I was hanging around with all the senior team members talking random shit. Good thing I didn&apos;t get too excited and didn&apos;t blabber dangerous gossip.&lt;/p&gt;
&lt;p&gt;Food was really really good, sadly they only had half a page menu with three items for non-alcoholic drinks. With such limited items, you would expect them to be good, all of them were very very bad, luckily diet coke saved my day! Do try out their nachos and paneer bites, they are really tasty and less oily too! Sadly, desserts didn&apos;t slap at this place, Tiramisu, cheese cake, nothing was good. Overall, I didn&apos;t like this place a lot, hoping to not visit it again.&lt;/p&gt;
&lt;h3&gt;Offbeat Cafe&lt;/h3&gt;
&lt;p&gt;And finally on Saturday evening, I went to visit &lt;a href=&quot;https://maps.app.goo.gl/EjgaxZHRdqad5DEu8&quot;&gt;Offbeat Cafe&lt;/a&gt; with &lt;a href=&quot;https://yashgarg.dev/&quot;&gt;Yash&lt;/a&gt; and his girlfriend. We weren&apos;t much hungry so we ordered a simple Cheese Garlic Bread and I got a &lt;code&gt;Strawberry Earl Grey&lt;/code&gt;. Garlic bread was really well made and drink was tasty too! I think I might visit this place once more before leaving Jayanagar &lt;code&gt;:)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;https://bin.wantguns.dev/nCxe3c.webp&quot; alt=&quot;offbeat neon sign&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;img src=&quot;https://bin.wantguns.dev/rJJUsj.webp&quot; alt=&quot;strawberry earl grey drink&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;img src=&quot;https://bin.wantguns.dev/wvj9c7.webp&quot; alt=&quot;cheese garlic bread&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;DAMN, I am feeling even more guilty after writing this whole section down, I might have to go on a bit of aggressive cut in &lt;a href=&quot;https://en.wikipedia.org/wiki/Paryushana&quot;&gt;Paryushan&lt;/a&gt; next month. Maybe I will end up not eating for 5 days from the total 8. Don&apos;t want to do the &lt;a href=&quot;https://en.wikipedia.org/wiki/Fasting_in_Jainism#Types_of_fasting&quot;&gt;atthai&lt;/a&gt; again, cause that will weaken my body too much for climbing back again 😅.&lt;/p&gt;
&lt;h3&gt;Climbing&lt;/h3&gt;
&lt;h3&gt;Last weeks set&lt;/h3&gt;
&lt;p&gt;I was able to send both of the remaining level 5s! I got the yellow on Sunday itself, but pink one with side dyno took a LOT MORE TRIES. I finally managed to successfully send it on Tuesday! I don&apos;t have the video of Pink one right now, but enjoy the yellow send &lt;code&gt;:)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;https://www.youtube-nocookie.com/embed/e6rCMh9_1Zw?mute=1&quot;&gt;https://www.youtube-nocookie.com/embed/e6rCMh9_1Zw?mute=1&lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;New set&lt;/h3&gt;
&lt;p&gt;This week, wall on the second floor got reset. Sadly, all the routes were too easy. I flashed everything till level 5s. I call them &quot;too easy&quot;, cause one of the 5s was done by people who weren&apos;t getting level 3s properly. What has happened to setting in this gym, bring back better setters 😭. As the setting is so easy and shitty, I am not going to post a video of any sends till level 5 from this wall. There&apos;s a few interesting level 6 and 7s, if I manage to send any, only then expect a video &lt;code&gt;:P&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Swimming&lt;/h2&gt;
&lt;p&gt;This whole week I have been waking up 5-10 minutes before alarm. I think my body has finally completely adapted to this timing of waking up, I might attempt to remove alarm and see if that works out &lt;code&gt;:)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Overall, this week was pretty chill, I completed 900ms almost everyday except on Friday, when I wanted to take a chill session, but still ended up completing 800m anyways 🫠.&lt;/p&gt;
&lt;p&gt;I also made progress on endurance swimming front, I tried to swim 700m continuously. It was a successful run! I was actually not tired even at the end of 700m, it felt like my body could keep swimming for hours at end, maybe one day I should buy tickets for three hours and actually attempt a 3km run &lt;code&gt;:P&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Also, something funny happened on Saturday, one guy literally wore a &lt;code&gt;Lehar&lt;/code&gt; underwear and tried to swim. He knew that wasn&apos;t allowed and hence he tried to escape the head coach by running into the shower and looking for his blind spot to jump in the pool. Funnily enough, buddy had swimming googles, proper googles but no costume 😭. It was so funny to watch him trying to explain his underwear was a swimming costume with lehar written around it&apos;s waist rubber. People are amazing, I don&apos;t understand how they get the confidence to do these things 😂.&lt;/p&gt;
&lt;h2&gt;Work&lt;/h2&gt;
&lt;p&gt;Manager came for a surprise four day visit to office starting Monday. Initially I wasn&apos;t going to go to office on Monday, but ended up coming just cause I wanted to be somewhere outside. Well decision wasn&apos;t bad &lt;code&gt;:P&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Though I wasn&apos;t able to make much of his visit, one fine day I would gather the courage and talk about the shit&apos;s that&apos;s been happening around and why am I not getting any good work 😓.&lt;/p&gt;
&lt;h2&gt;Tech&lt;/h2&gt;
&lt;p&gt;I found some free time in office and sneaked in working on my personal project, I was finally able complete the nested loop join!! It currently takes 11s to run which is a perfect playground for optimizations, I am pretty pumped to get my hands dirty on the optimization process!&lt;/p&gt;
&lt;h2&gt;Watch&lt;/h2&gt;
&lt;p&gt;I finally completed watching &lt;code&gt;Journal With Witch&lt;/code&gt; and oh boy I am in love with this show, what an anime!! Here are some of the lines from last few episodes which hit me pretty deep:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;We are all so forgiving of our own contradictions yet show no sympathy for the contradictions of others.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Did I really say you didn&apos;t need to write the truth in your journal? I think it was less about what to write and more about what not to write. At the end of the day, as long as you are not lying to yourself, it&apos;s probably fine.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;If I keep giving water to my lonliness, could a flower bloom in the dead of the night in this desert?&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;It might be lame, but getting hurt constantly wears you down. So instead, you affirm and conciously desensitize yourself. Dull your senses and numb your feelings. After a while, you numb youself enough that it dulls your heart. You dull your heart enough to not feel happy or sad anymore.&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Another thing I have grown to love is also it&apos;s opening, its a beauty!! If you are into Japanese songs, do check it out: https://www.youtube.com/watch?v=rTCruzbXBWY&lt;/p&gt;
&lt;h2&gt;Reads&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Medieval lives on medieval bridges: https://fakehistoryhunter.net/2026/08/02/medievalbridges/&lt;/li&gt;
&lt;li&gt;Great list of amazing developer blogs: https://x.com/eatonphil/status/2083672167196107102/&lt;/li&gt;
&lt;li&gt;&lt;code&gt;The Student&lt;/code&gt; by &lt;code&gt;Anton Chekov&lt;/code&gt;: https://www.ibiblio.org/eldritch/ac/student.html&lt;/li&gt;
&lt;li&gt;Map moving with the scroll is so lovely 🤌: https://www.kashyapsuhas.com/blog/gj-rj-trip&lt;/li&gt;
&lt;li&gt;Forever goals: https://loufranco.com/blog/forever-goals-arent-smart
&lt;ul&gt;
&lt;li&gt;I would definitely want to list down all of mine in a future post&lt;/li&gt;
&lt;li&gt;Also this part of the blog:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;I have also found programming to be incredibly fun and do it for enjoyment. I never made any kind of SMART milestone to get better at programming, but have no problem doing the work that makes me better at it. SMART-like goals were imposed on me by employers, so I guess they were in the mix. If the only reason to program was to meet the goals of my employers, I think I would have given up a while ago (or not have been as successful or happy).
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This hit a bit too hard, I have been introspecting, is this the reason I don&apos;t like programming as much on my employment side?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;https://blog.rust-lang.org/inside-rust/2026/08/05/rust-langrust-is-adopting-an-llm-policy/
&lt;ul&gt;
&lt;li&gt;So Rust also outrights bans writing code with LLMs?&lt;/li&gt;
&lt;li&gt;&lt;code&gt;It&apos;s fine to use LLMs to answer questions, analyze, distill, refine, check, suggest, review. But not to **create**.&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;https://kristoff.it/blog/asynchrony-is-not-concurrency/&lt;/li&gt;
&lt;li&gt;https://matklad.github.io/2026/08/06/neat-io-threaded.html&lt;/li&gt;
&lt;li&gt;https://hollie.eilloh.net/
&lt;ul&gt;
&lt;li&gt;Found an interesting page on hachyderm, thanks to &lt;code&gt;#blogust&lt;/code&gt;, I have been wanting to follow someone who writes about their life daily.&lt;/li&gt;
&lt;li&gt;Have added it to my RSS feed and its been a week, reads are simple and enjoyable&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;https://michaelharley.net/posts/2026/08/06/what-happens-to-our-blogs-when-we-die/
&lt;ul&gt;
&lt;li&gt;I have thought about this before but hopefully its pretty far away to not worry about such things, but interesting to look someone preparing for the same and their thought process!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Found it on an HN thread: https://news.ycombinator.com/item?id=49136063
&lt;ul&gt;
&lt;li&gt;Thread lists a bunch of cool projects!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;This was a nice one &lt;code&gt;xD&lt;/code&gt;: https://www.explainxkcd.com/wiki/index.php/3282:_Trick_Play&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Fifth Elephant 2026</title><link>https://fknil.com/blog/fifth-elephant-2026/</link><guid isPermaLink="true">https://fknil.com/blog/fifth-elephant-2026/</guid><pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently attended &lt;code&gt;The Fifth Elephant&lt;/code&gt; &lt;a href=&quot;https://hasgeek.com/fifthelephant/2026/&quot;&gt;conference&lt;/a&gt; on 31st July 2026, it was an interesting experience overall, I got to learn a lot of things, and also had a fanboy moment! Read on for the whole scoop &lt;code&gt;:)&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Speaker to attendee&lt;/h2&gt;
&lt;p&gt;Hasgeek had reached out to my &lt;code&gt;$WORK&lt;/code&gt; for submitting a talk to the conference and I had gladly volunteered! Topic was already decided, it had to be about &lt;code&gt;Composable Query Engines&lt;/code&gt;. Basically covering all the rave about &lt;a href=&quot;https://github.com/apache/datafusion&quot;&gt;datafusion&lt;/a&gt;, &lt;a href=&quot;https://github.com/apache/arrow/&quot;&gt;arrow&lt;/a&gt;, etc. Projects of this new era which are allowing everyone to build their own versions of specialised databases with shared infrastructure easily. Historically, it has been hard to introduce proper abstractions in databases. Abstractions which respect the performance and provide extensibility at the same time followed a super delicate balance. &lt;a href=&quot;https://github.com/alamb&quot;&gt;Andrew Lamb&lt;/a&gt; took on this challenge and has developed a remarkable project. By the way, this is just about the query engine. Similar credit goes to arrow and other awesome projects which are following the UNIX philosophy of doing one thing and designing it much better than any of the individual implementations in disparate databases could ever reach.&lt;/p&gt;
&lt;p&gt;I was pretty delighted to get an opportunity to share a marvellous piece of engineering with a hall full of people who were interested in similar topics! I had prepared my slides, had an editorial feedback round and also did demo runs. All this and then just a week before the conference, they inform me they had to cut down my talk from 30 minutes to 15 minutes to &quot;accommodate more talks&quot;. This was a huge bummer and it smelled like a big mismanagement from the team who&apos;s literal business is organizing these conferences. I had a talk internally at my &lt;code&gt;$WORK&lt;/code&gt; and withdrew my talk respectfully.&lt;/p&gt;
&lt;p&gt;Later, I received a reach out apologizing for the mishap and was offered a ticket to attend anyways. While I was pondering on whether to go or not I realized, a bunch of database folks were gonna attend this conference and above all &lt;a href=&quot;https://x.com/sunbains&quot;&gt;Sunny Bains&lt;/a&gt; was coming to give a talk! I have been following him on twitter for a very long time. His diligence, love for the craft, depth of knowledge, everything is super inspiring to me! With that settled I was ready to attend the conference &lt;code&gt;xD&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Talks&lt;/h2&gt;
&lt;p&gt;My cook was late that morning and consequently I didn&apos;t make it in time at the venue. I couldn&apos;t make it to first talk of the day which I was excited about : &lt;code&gt;Optimized AI inference with llm-d and a case-study on sovereign AI on heterogenous GPU cluster&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Agents broke your architecture, not your data model`&lt;/h3&gt;
&lt;p&gt;It wasn&apos;t that sad though because immediately after that was the keynote with Sunny! To be frank, I am not sure what I was expecting from the talk, but it was disappointing? He put heavy emphasis on elasticity of the cluster i.e. workload management and working with huge number of ephemeral tables. But all the talk about LLMs seemed a bit forced, at times I even felt he was controlling himself from shitting on them 😛. Overall, a company marketing pitch which seemed like Sunny wasn&apos;t as excited to deliver.&lt;/p&gt;
&lt;h3&gt;Full refresh to incremental: rebuilding denormalization for reporting at Razorpay scale&lt;/h3&gt;
&lt;p&gt;This is another talk I was super excited about. I know Piyush Goel has recently joined &lt;a href=&quot;https://razorpay.com/&quot;&gt;Razorpay&lt;/a&gt; to take the helm of their data platform division. I have known him since &lt;code&gt;Papers We Love&lt;/code&gt; days, so its exciting to see him in a place which I think he totally deserves. Getting to the content, speaker talked about over 6-8 months of their recent experience in scaling Razorpay from single digit million to triple digit million transactions scale. They grew from relying on a &lt;code&gt;MySQL&lt;/code&gt; deployment to a full fledged lakehouse deployment.&lt;/p&gt;
&lt;p&gt;They had moved from &lt;code&gt;MySQL&lt;/code&gt; to &lt;a href=&quot;https://www.pingcap.com/&quot;&gt;TiDB&lt;/a&gt; as their first move, but &lt;code&gt;TiDB&lt;/code&gt; having it&apos;s own storage format was getting too expensive to maintain. That&apos;s when they decided to introduce lakehouse and hence S3 backed data storage in the mix. They shifted to a hybrid architecture of &lt;code&gt;TiDB&lt;/code&gt; for hot path and &lt;a href=&quot;https://delta.io/&quot;&gt;delta&lt;/a&gt; tables for slow path. One of the main usecases of this was report generation, and not analytics, so SLAs were really small, that&apos;s when they ditched delta and started looking into streaming engines. They ended trying &lt;a href=&quot;https://pinot.apache.org/&quot;&gt;Pinot&lt;/a&gt; and streaming joins but their joins were so big, engines weren&apos;t able to handle the load.&lt;/p&gt;
&lt;p&gt;That&apos;s when they decided to take a step back and solve the huge JOINs problem. To circumvent the joins, they pre-joined the table and created facts table so that they don&apos;t have to rely on heavy engine deployments which failed from time to time. For supporting these super wide fact tables, they moved to &lt;a href=&quot;https://iceberg.apache.org/&quot;&gt;Apache Iceberg&lt;/a&gt;. They claimed to have observed better results with Iceberg due to its metadata structure, which helped them in pruning out a lot of data.&lt;/p&gt;
&lt;p&gt;Their final form was, &amp;lt;5 minutes report generation from &lt;code&gt;TiDB&lt;/code&gt; and slightly delayed report generation from lakehouse. While later catching up with Piyush I asked him how were they not having memory problems with such wide tables. They mentioned me that they now have only 11 tables (down from 24) in the fact table and the rest are computed with joins again. This seems to have been a good tradeoff landing them at &amp;lt;90% of the price of previous pipelines. Win-win situation!&lt;/p&gt;
&lt;p&gt;Another interesting point I found in their talk was how they built secondary indexes to serve some instant query workloads. I asked if they ever considered &lt;a href=&quot;https://hudi.apache.org/&quot;&gt;Apache Hudi&lt;/a&gt;, as that has supported indexes from a long time. The answer was herd mentality &lt;code&gt;:P&lt;/code&gt;. Not even kidding, the decision was literally taken cause whole Industry is moving towards using Iceberg now &lt;code&gt;:)&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;High concurrency &amp;amp; low latency serving on Apache Iceberg&lt;/h3&gt;
&lt;p&gt;This was sadly another marketing talk, even though the speaker kept trying to say that &quot;What would you do outside of &lt;a href=&quot;https://startree.ai/&quot;&gt;Startree&lt;/a&gt;&quot;, everything was just about them.&lt;/p&gt;
&lt;h3&gt;Your voice agent is (probably) doomed, OR how not to fall victim to outdated voice agent playbooks&lt;/h3&gt;
&lt;p&gt;This was the most whackall talk of this whole conference. It was about building a sports companion chat avatar which is named &lt;code&gt;Googly&lt;/code&gt; and is a monkey talking about cricket??? Its seeming usecase is accompanying livestreamers. Tech side, talk was utterly straight forward industry knowledge. Instead, my big takeaway from this talk was, people are super delusional, they make such dumb products and actually talk about taking it to market.&lt;/p&gt;
&lt;p&gt;Next few talks I skipped and worked on a personal project of mine, the ones I just sat through with earphones were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Sponsored talk: The practical guide to reverse-engineering XXL codebases with agentic AI&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;An Agent That Builds Agents: AI-Powered Recipe Generation for Local-First ETL&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Architecting Observability Platform on S3 + Lambda&lt;/h3&gt;
&lt;p&gt;This was another talk I was super excited about because something similar has been cooking up at my &lt;code&gt;$WORK&lt;/code&gt; too. So these guys are basically rebuilding observability on lakehouse powered by &lt;a href=&quot;https://github.com/quickwit-oss/tantivy&quot;&gt;Tantivy&lt;/a&gt;, Datafusion, S3 and lambda. They even claimed to have beaten &lt;a href=&quot;https://clickhouse.com/&quot;&gt;Clickhouse&lt;/a&gt; in a benchmark they ran! First suspicion was when they gave some rough details about benchmarking setup but nothing about the actual queries used.&lt;/p&gt;
&lt;p&gt;I really don&apos;t know if they are serious or not cause they may see some gains on small synthetic benchmark but they seriously can&apos;t win the game when fast caching, large aggergate heavy queries with spilling and distribution get involved. This is where my point about people being delusional was proven even more, how are people getting on podium and making such bold claims which have no footing. They don&apos;t deserve a skin in this game!&lt;/p&gt;
&lt;h3&gt;Billboards near a coffee shop: making proximity search fast in ClickHouse&lt;/h3&gt;
&lt;p&gt;Finally, last talk was about geospatial query optimization on Clickhouse, unfortunately I had to leave the talk half way to get back home for an urgent errand &lt;code&gt;:(&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Conversations&lt;/h2&gt;
&lt;p&gt;I had some pretty nice conversations with different database developers!&lt;/p&gt;
&lt;p&gt;When trying to approach Sunny on their &lt;code&gt;TiDB&lt;/code&gt; booth, I ended up buzzing near a group enough and I got to talk with Chandra from &lt;a href=&quot;https://www.cockroachlabs.com/&quot;&gt;Cockroach Labs&lt;/a&gt; and Amit Gupta from Google! They both seem to be working on workload management, Vector DB and query optimization, pretty interesting stuff!&lt;/p&gt;
&lt;p&gt;I also got to meet someone from &lt;a href=&quot;https://datanimbus.com/&quot;&gt;DataNimbus&lt;/a&gt;, did you know this company serves Banks as their escrow partners and is a consulting arm of &lt;a href=&quot;https://www.databricks.com/&quot;&gt;Databricks&lt;/a&gt;!!?? These are like two completely separate companies, but surprisingly they do this under the same roof!&lt;/p&gt;
&lt;p&gt;I also met someone working on &lt;code&gt;DocumentDB&lt;/code&gt; in Microsoft, I tried to probe him if they got into any trouble with lawsuit between &lt;a href=&quot;https://github.com/FerretDB/FerretDB&quot;&gt;FerretDB&lt;/a&gt; and &lt;a href=&quot;https://www.mongodb.com/&quot;&gt;MongoDB&lt;/a&gt; about wire protocol, but it seems everything was good there. Guess Mongo won&apos;t mess around with Microsoft &lt;code&gt;xD&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;While talking with Sunny I also spoke with &lt;code&gt;Sayyaparaju Sunil&lt;/code&gt;. I had a really lively conversation with him about his experience at &lt;a href=&quot;https://aerospike.com/&quot;&gt;Aerospike&lt;/a&gt;, variant of LSM trees they used, DPDK, O_DIRECT, etc etc. I only realized after receiving a LinkedIn request that he was &lt;code&gt;VP Of Engineering&lt;/code&gt; 😭. Its good to talk to people with genuine curiosity, that&apos;s the secret to networking &lt;code&gt;:)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Next I met with Sunny Bains finally!! And to my absolute surprise, HE ALREADY KNEW ME 😭💃. We have followed each other on twitter for a while, but I never knew he really liked my curated posting about systems engineering blogs and was asking why hadn&apos;t I posted in a while. Truth be told, I had stopped using twitter, but I might just come back after this conversation 🥹.&lt;/p&gt;
&lt;h2&gt;End&lt;/h2&gt;
&lt;p&gt;And yeah, this was it, amazing experience all over and excited to attend TheFifthEl next year too &lt;code&gt;:)&lt;/code&gt;.&lt;/p&gt;
</content:encoded></item><item><title>Hampi Day 3</title><link>https://fknil.com/blog/hampi-june-2026-day-3/</link><guid isPermaLink="true">https://fknil.com/blog/hampi-june-2026-day-3/</guid><pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently (26th-28th June 2026) went on a three day climbing trip to Hampi and this is my day to day log of a small set of things that happened. Find day 1 &lt;a href=&quot;/blog/hampi-june-2026-day-1/&quot;&gt;here&lt;/a&gt; and day 2 &lt;a href=&quot;/blog/hampi-june-2026-day-2/&quot;&gt;here&lt;/a&gt;. Onto day 3:&lt;/p&gt;
&lt;h2&gt;Longest session&lt;/h2&gt;
&lt;p&gt;Well well, promise was broken again but not as bad this time, we started our hike by &lt;code&gt;07:00&lt;/code&gt; AM. It was early morning but weather was already starting to looking promising. Not much direct sun, big non-rain clouds till the horizon. It was the literally the best weather to climb! We decided to go to Rishimukh Plateau itself because some of my friends wanted to climb there again. I would have preferred going to a new area and trying new boulders but hey, majority wins! Weather got me so excited to climb that I did not do a long warmup and got straight onto a boulder. I definitely did not start with the harder routes, early on it was just a few 5-ish range routes. I had done them my previous session and previous season too, they are my feel good warmup climbs. Could not find links to all of them, but here are some:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.thecrag.com/en/climbing/india/hampi/route/9061314930&quot;&gt;Nice and Easy&lt;/a&gt;: &lt;code&gt;6a&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.thecrag.com/en/climbing/india/hampi/route/9057612159&quot;&gt;Little Double Arete&lt;/a&gt;: &lt;code&gt;4&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next, we headed onto some new boulders down the Rishimukh Plateau. I did a &lt;code&gt;6a&lt;/code&gt; and a maybe &lt;code&gt;6b&lt;/code&gt; on a single boulder. &lt;code&gt;6a&lt;/code&gt; named &lt;code&gt;Little Double Arete&lt;/code&gt; (linked above), it was very easy but &lt;code&gt;6b&lt;/code&gt; had a sharp crimpy start with a strong &lt;a href=&quot;https://www.climbgrades.com/BoulderingDefinitions/heel-hook&quot;&gt;heel hook&lt;/a&gt; and body in a cramped box. After establishing the start, first move was a thrust up to a &lt;a href=&quot;https://www.climbgrades.com/BoulderingDefinitions/jug&quot;&gt;jug&lt;/a&gt;. After that it was easy, rock had enough features (lines on rock deep enough for me to feel comfortable or in climbing terms, hang on) after the initial jug. After struggling on the starting move on the first attempt, with some help from experienced climbers, I understood the &lt;a href=&quot;https://www.climbgrades.com/BoulderingDefinitions/beta&quot;&gt;beta&lt;/a&gt; and sent the route!&lt;/p&gt;
&lt;p&gt;Next one of my friends started trying the route but he could not establish the start at all. Heel hook wasn&apos;t locking for him. We were trying a bunch of different betas to feel stable, but ultimately his fingers gave up on those sharp crimps and with that, we decided to move on.&lt;/p&gt;
&lt;h2&gt;Rishi boulder&lt;/h2&gt;
&lt;p&gt;Next up, we tried a &lt;code&gt;6b+&lt;/code&gt; called &quot;&lt;a href=&quot;https://thetopo.com/crags/hampi/routes/rishimuk-crack&quot;&gt;Cracky&lt;/a&gt;&quot;. This was a messed up route! Its starting holds were jugs but they dug deep into your skin, I got a &lt;a href=&quot;https://www.climbgrades.com/BoulderingDefinitions/skin-flap&quot;&gt;flapper&lt;/a&gt; 😭 on my pinky finger due to the same. We spent a lot of time with experienced climbers trying to get a beta which could work, but all in vain.&lt;/p&gt;
&lt;p&gt;One could take right or left side of the &lt;a href=&quot;https://www.climbgrades.com/BoulderingDefinitions/crack-style&quot;&gt;crack&lt;/a&gt; to climb. As no one was making progress on the left side, I tried a beta on the right side. Here I was able to reach an almost &lt;a href=&quot;https://www.climbgrades.com/BoulderingDefinitions/topout-top-out&quot;&gt;top out&lt;/a&gt;!! But unfortunately rock on the right side had no feature for top out.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;https://www.youtube-nocookie.com/embed/PGX7mmeSOoo?mute=1&quot;&gt;https://www.youtube-nocookie.com/embed/PGX7mmeSOoo?mute=1&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;This video shows the try when I figured out top out wasn&apos;t possible from the right side &lt;code&gt;:(&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;While we were trying this, girls took onto another route on the same Rishi boulder named &quot;&lt;a href=&quot;https://www.thecrag.com/en/climbing/india/hampi/route/9074176332&quot;&gt;Scoopy&lt;/a&gt;&quot;. This was a &lt;code&gt;6a&lt;/code&gt; and many of them were able to send it giving them a good morale boost!&lt;/p&gt;
&lt;p&gt;By the end of this, everyone was dead tired. And thats why, we decided to go to party boulder??? 😵‍💫 Makes no sense right? That&apos;s climber logic 🫠. Well the friend who was our saviour and guiding light the last night, wanted to try the &lt;code&gt;Physics&lt;/code&gt; line. Yes, the line we tried on our first day evening climb. This route never disappoints, it slapped us and scolded us to go back, only to return when we are well rested and fresh in a new session. This time we FINAL FINAL decided to head back down. By now all the clouds had disappeared and sun was already dancing on our heads ready with its straw to drain our remaining life energy.&lt;/p&gt;
&lt;h2&gt;Afternoon&lt;/h2&gt;
&lt;p&gt;This afternoon, we again chilled at Wanderlust. Morning session was the longest session we had in our trip till now, and hence everyone was dead tired. And after having some good food, there&apos;s only one option left. (Snoring noises intensify 💤). While everyone was sleeping, I utilized that time to jolt down my first day experience and sneak in some super interesting conversations with friends. I got a hint of what these quant traders actually do and why are they so rich! I am super satisfied with what I earn even now, its way more than I need for a VERY LONG TIME, but you know who would not want free money? 🤑&lt;/p&gt;
&lt;h2&gt;Thungabhadra&lt;/h2&gt;
&lt;p&gt;Google had notified me about a very high chance of rain that evening and hence we all decided not to climb that evening. FUCK YOU Google it didn&apos;t rain at all!! Of course we didn&apos;t know this at the moment, so we decided not to climb and instead go on a mini adventure. It was a place hyped by one of our experienced climber friend. Well, I was initially baited just by wanting to see a &lt;code&gt;7a&lt;/code&gt; route called &quot;&lt;a href=&quot;https://thetopo.com/crags/hampi/routes/airplane&quot;&gt;Airplane&lt;/a&gt;&quot;. But it seems that right next to it was banks of Thungabhadra river.&lt;/p&gt;
&lt;p&gt;While getting there we crossed a single man make shift bridge again, it was a good spot to actually enter the river cause there were wobbly slippery rocks to reach right in the middle of the river. I took a photo from here linked below. Looking at it feels like I am standing right in the middle of the river &lt;code&gt;xD&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-3/middle-of-river.webp&quot; alt=&quot;Seeemingly standing in the middle of the river&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-3/petting-cat.webp&quot; alt=&quot;Me petting cat&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-3/ducks-forming-love-shape.webp&quot; alt=&quot;Swans/Ducks standing as if making heart shape with their necks&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;Along these banks were the ruins of an &lt;a href=&quot;https://en.wikipedia.org/wiki/Vijayanagara_Empire&quot;&gt;ancient kingdom&lt;/a&gt;. I was literally standing in the middle of hills full of boulders, river beneath the feet, ruins to ponder upon, amazing breezes to soothe the soul and finally sunset time to get the perfect golden hour shower. THIS IS WHY I LOVE SPENDING TIME OUTSIDE!! My soul felt cleansed and I wanted to lie there forever.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;https://www.youtube-nocookie.com/embed/yW7R8vIoi60?mute=1&quot;&gt;https://www.youtube-nocookie.com/embed/yW7R8vIoi60?mute=1&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;We experienced two interesting animal acts here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I saw 2-3 otters (again first in life!!), but they didn&apos;t seem to be happy having us around.&lt;/li&gt;
&lt;li&gt;A dog caught a fish in front of me and started eating it raw. We had initially assumed he would be a shy one cause he was collared, but village dogs are a different breed!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Skipping stones&lt;/h2&gt;
&lt;p&gt;Next, we did another must do river-bank activity, SKIPPING STONES 🪨. I am not very good at getting enough hops, but I absolutely love doing it! Here is a video of me skipping one.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;https://www.youtube-nocookie.com/embed/AUMxBLY2Zb0?mute=1&quot;&gt;https://www.youtube-nocookie.com/embed/AUMxBLY2Zb0?mute=1&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Interestingly, I also skipped an assasination attempt. While teaching one of my friends how to throw stones with power and technique, he threw it in a weird way and the stone narrowly escaped my chest 💀.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;https://www.youtube-nocookie.com/embed/KDcMtpUby4M?mute=1&quot;&gt;https://www.youtube-nocookie.com/embed/KDcMtpUby4M?mute=1&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Some more goofing around and it was almost dark. We started to head back, but were held down by this beauty!! OH MANNNN, look at the color, look at the reflection, it looks beautiful in photo? Seeing it in person was just heavenly!&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-3/moon-reflecting-on-river.webp&quot; alt=&quot;Moon reflecting on river&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;After glaring at it for some time, we went back to our home stay. Already feeling down, grumbling about everything ending so fast.&lt;/p&gt;
&lt;p&gt;Everything feels even more beautiful with a lovely group to enjoy with, this was US! Thanks everyone! 🙇&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-3/group-photo.webp&quot; alt=&quot;Group photo&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;It was a bittersweet feeling, but I am more excited than ever to return back to Hampi. I ABSOLUTELY LOVE SPENDING TIME OUTDOORS!&lt;/p&gt;
&lt;p&gt;Till next time, CHAO! 👋&lt;/p&gt;
</content:encoded></item><item><title>Hampi Day 2</title><link>https://fknil.com/blog/hampi-june-2026-day-2/</link><guid isPermaLink="true">https://fknil.com/blog/hampi-june-2026-day-2/</guid><pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently (26th-28th June 2026) went on a three day climbing trip to Hampi and this is my day to day log of a small set of things that happened. Find day 1 &lt;a href=&quot;/blog/hampi-june-2026-day-1/&quot;&gt;here&lt;/a&gt;. Onto day 2:&lt;/p&gt;
&lt;p&gt;Promises. At their core they are born out of an evolutionary feature. One which helped us grow stronger. Which helped us stay in tight knit packs and rise higher in the natural hierarchy. Its a feature called trust. At its core, promises are based on trust. If you introduce a constraint which makes a person compelled to do something in the name of promise, that&apos;s not a promise, that&apos;s an order. Promises are mutual agreements based on trust. Trust is difficult to form and even harder to maintain. Broken trust can sever relationships permanently and leave one down the spiral of sorrow. Well, we had made a promise to wake up at 6 o clock in morning, and...that didn&apos;t happen. We all slept through till &lt;code&gt;07:00&lt;/code&gt;-&lt;code&gt;07:30&lt;/code&gt;. (I am not hurt by it at all, just wanted to sound profound 😛).&lt;/p&gt;
&lt;h2&gt;Morning&lt;/h2&gt;
&lt;p&gt;I did wake up late, but it seems some of my other friends were already up cause five new friends had joined us for second and third day!! As they got settled in, freshend up, satisfied their hunger, it was already past &lt;code&gt;7:30&lt;/code&gt;. As we were late, I had a quick coffee and set out with everyone for climbing. We took the same path as yesterday, hiked up the hill, and crossed few peaks to land at a new area this time, named &lt;a href=&quot;https://www.thecrag.com/en/climbing/india/hampi/area/411584895&quot;&gt;Rishimukh Plateau&lt;/a&gt;. This is a big plateau just besides Rishimukh peak and is home to iconic routes and boulders like &lt;a href=&quot;https://www.thecrag.com/en/climbing/india/hampi/route/1952102631&quot;&gt;PyscoBloc&lt;/a&gt;, &lt;a href=&quot;https://www.thecrag.com/en/climbing/india/hampi/area/411584895#n10783464156&quot;&gt;TV Boulder&lt;/a&gt;, &lt;a href=&quot;https://www.thecrag.com/en/climbing/india/hampi/area/411584895#n9058923090&quot;&gt;Shield&lt;/a&gt;, etc etc. &lt;code&gt;Pshycobloc&lt;/code&gt; is the same route I talked about in my last blog, my special flash!&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-2/temple-from-rishimukh-plateau.jpeg&quot; alt=&quot;Temple from Rishimukh plateau&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-2/weird-rock-on-plateau.jpg&quot; alt=&quot;Weird rock on Rishimukh plateau&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;/p&gt;
&lt;h2&gt;Skin&lt;/h2&gt;
&lt;p&gt;I had decided to take this morning session a bit more chill, core reason being skin conditioning. What is skin conditioning? I am not talking about some alovera based cleansing/rejunvenation potion here. In climbing, skin is amongst the best indicator of how hard can you push further. Often climbers look at their hands and decide how further long their session is going to last. This is because their skin, mostly fingertips can tell them how long and hard they have been climbing. Thinner skin means they have trying really hard and maybe they should call it a day. In a fresh session, skin usually feels much thicker and ready to rock and roll! 🎸.&lt;/p&gt;
&lt;p&gt;Skin, specifically skin on your fingertips, is the indicator here. Besides fingertips, thickness of your skin in the hand area is also super important. As climbers rely on their grip strength a lot, their skin on hands take a pretty big toll. It is mandatory for a climber to have calluses. When someone is new to climbing it takes time for the skin to adjust and it could be hurtful at times too. But if one survives through that, you get THICK THOCK skin, mockingly its called &quot;genda chamdi&quot; in Hindi. For non other hindi readers, it basically means skin as thick as the Rhino&apos;s 🦏. Once you have the thick skin all around your hand, skin is mostly not in the way. Same is not true for fingertips cause they are are almost always in contact of the rough edges and hence they get sanded out pretty fast. There are even deeper concepts like levelling up the skin with sandpaper, you would see professional rock climbers do this very often cause the more unlevelled you skin is, higher the chance of &lt;a href=&quot;https://climbinghouse.com/how-to-deal-with-flappers/&quot;&gt;flappers&lt;/a&gt;. And trust me boi, YOU DO NOT WANT FLAPPERS! They can be super painful and seldom take quite some time to heal.&lt;/p&gt;
&lt;p&gt;For outdoors, this is even more important cause we are climbing super sharp rocks! Remember, I had mentioned in first part of the series that boulders in Hampi are made up of quartz, feldspar and mica minerals? Well, climbers just call them crystals, and theses crystals love your rose petal skin. They will cut through, rip it to shreds, and leave paper thin layer behind. Thin enough that you would bleed every session for months after that! Personal experience, after my last Hampi trip it took me 3-4 months before my skin was good enough to not bleed after indoor sessions &lt;code&gt;:(&lt;/code&gt;. Even for climbers who have conditioned their skin indoors by doing a lot of volume, they need to spend at least a few days doing easy outdoor routes to allow their skin to grow thick for them to project much harder boulders. This is a &lt;a href=&quot;https://youtu.be/APqvV_vIIZE?si=KKQjE3FAvvF38qsB&amp;amp;t=385&quot;&gt;good video&lt;/a&gt; which talks about all of this in more detail.&lt;/p&gt;
&lt;h2&gt;Plateau&lt;/h2&gt;
&lt;p&gt;Well as the customs, we &lt;em&gt;yapped&lt;/em&gt; (uhm uhm..I mean warmed up) and after some nice deep stretches, we started with few &lt;code&gt;5&lt;/code&gt; and &lt;code&gt;6a&lt;/code&gt; warmup routes. As I was only there for three days, I had decided to use this morning to grow some thicker skin. Now that I think about it, maybe it was just straight up stupid given my trip outline? But also I was tired from last night&apos;s session, so kinda makes sense? Well, back to the plateau, amongst new friends was a Spanish climber who has been living in India for 12 years. He is our friend and climbs in &lt;a href=&quot;https://maps.app.goo.gl/ZDkyZVnszpjXnv3KA&quot;&gt;Equilibirum Indiranagar&lt;/a&gt; all the time. He is super strong. You would see him flash level 6 indoors like it was a stroll in the park. This guy flashed &lt;code&gt;PsycoBloc&lt;/code&gt;, and next one of my other friend sent it after a couple of tries. Now now, I was completely baited into trying the boulder. Just once, I told myself and got onto it! And well I got my ass whopped again.&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-2/me-on-psyco-bloc.jpeg&quot; alt=&quot;Me attempting on psycobloc this season&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-2/resting-between-climbs-on-plateau.jpeg&quot; alt=&quot;Resting between climbs on plateau&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;I think this was my lowest point of the trip. I was completely shitting pants on a climb which I had done with ease just a few months back. I finally properly realized how weak I had turned after taking almost two months break due to my ankle injury. I decided at that time to climb with ease for the remaining trip. No pressure, cause I was nowhere near my prime. After a few hours of loitering around, we had sun right on top of us drinking all the energy out of us. Exclusive photo of the same is linked just below 😂 (&lt;a href=&quot;https://www.youtube.com/watch?v=HMRcFS35Mv8&quot;&gt;GluconD&lt;/a&gt; MY GOAT 🐐). With no GluconD around, we decided to hike down and rest for the long evening session. Or so we thought, one of the new friends had another experienced climber who knew about A LOT OF LINES. She started showing us around, and we got distracted looking at those beautiful lines, here we saw &lt;a href=&quot;https://www.thecrag.com/en/climbing/india/hampi/route/415844679&quot;&gt;Shield&lt;/a&gt;, &lt;a href=&quot;https://www.thecrag.com/en/climbing/india/hampi/route/415844580&quot;&gt;Crimpy Piano&lt;/a&gt;, &lt;a href=&quot;https://www.thecrag.com/en/climbing/india/hampi/route/9078478005&quot;&gt;The Middle&lt;/a&gt;, &lt;a href=&quot;https://www.thecrag.com/en/climbing/india/hampi/route/415841361&quot;&gt;Indian Summer&lt;/a&gt; and loads more!! Path to &lt;code&gt;India Summer&lt;/code&gt; from &lt;code&gt;Shield&lt;/code&gt; had a cave, and it was covered in such lovely smell. There was Tulsi and lemon grass all around! I wish there was a way to record smell and link it digitally to reproduce, cause THAT SMELLED OUTDOORS!&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;https://exchange4media.gumlet.io/news-photo/126795-SUN.jpg&quot; alt=&quot;GluconD Ad where sun sucks energy out of a child with straw&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;After the &quot;look at that beautiful line over there and over there and over there&quot; session, we hiked down and headed directly to Wanderlust for lunch. There was enough time to kill before food got prepared, so we started playing &lt;a href=&quot;https://puzzlewocky.com/brain-teasers/situation-puzzles/&quot;&gt;Situations&lt;/a&gt;. This was unexpectedly super fun! We were dead tired but maybe our brains were not. Tickling brain with stupid little puzzles was enticing enough &lt;code&gt;:)&lt;/code&gt;. We had a really good time playing it and then enoying the HEAVY LUNCH. Did you know lunch tastes even better when you haven&apos;t had breakfast and got your ass kicked for hours 🙈.&lt;/p&gt;
&lt;h2&gt;Taare Zameen Par&lt;/h2&gt;
&lt;p&gt;After lunch, while others were sleeping, I took onto the practice of village uncles. You see, our house was right alongside the highway. House door opened to the road itself. I took a chair and sat under some shadow observing everything happening in the village and on the highway road. This boredom somehow led to a stroke of inspiration and I scribbled a &lt;a href=&quot;/blog/poem-joy-of-a-send/&quot;&gt;poem&lt;/a&gt;. It&apos;s been a while since I lucked out on my brain just inking rhytmic words upon the paper. Suprising of all, I hadn&apos;t even sent anything to actually talk about the experience on the trip 😭. Well, my brain knew the feeling already. I have worked on dozens of hard indoor projects for weeks and have managed to send them. Satisfaction at the end is SO SO ADDICTING! Well after the stroke of luck, I was pretty motivated and started writing another poem, but brain just said, &quot;this is enough for today&quot; and that attempt didn&apos;t land anywhere &lt;code&gt;:P&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To get my mind off writing, I started doodling and recognizing shapes in clouds. I really liked this part cause I was just sitting there for hours without thinking about my phone. My &lt;a href=&quot;https://www.imdb.com/title/tt27503384/&quot;&gt;Perfect Days&lt;/a&gt; recreation goal has been coming to life slowly but surely. Deleting instagram at the start of the year hasn&apos;t caused me to go into any kind of addict recovery loop. That&apos;s awesome and it has also helped me pick up really good things to do instead in my free time. Or at times just sit, observe and appreciate things around me. LIVING IN THE MOMENT. 💃&lt;/p&gt;
&lt;h2&gt;Little Cave&lt;/h2&gt;
&lt;p&gt;By the time I had created hundreds of shapes from passing clouds it was evening already and we were ready for our next session!! All of us took our dosages of needed coffee and started hiking to the &lt;a href=&quot;https://www.thecrag.com/en/climbing/india/hampi/area/411585255&quot;&gt;&lt;code&gt;Little Cave&lt;/code&gt;&lt;/a&gt; area. This is an area right besides the plateau but slightly harder to reach, one has to hike up to a bunch of caves, then hike down and then slightly up again to reach it. It was a mini adventure on its own.&lt;/p&gt;
&lt;p&gt;There is an open area, just before little cave, with loads of warmup boulders. We decided to warm up in this section. Some of my friends who had just come that day, decided to rest this session out, they also found an excuse in an amazing spot to stare at the sky. Sky was SO SO BEAUTIFUL. I had heard somewhere, a young boy&apos;s teacher had mentioned they should look at the sky more often, cause adults stop doing so. Well, living in Bengaluru, if you not looking at sky, then you really do have a busy and stressful life. Stay strong friend! But for other cheerful mortals, Hampi&apos;s sky was like 10X better than Bengalurus!&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-2/beautiful-sky-1.jpg&quot; alt=&quot;Beautiful sky 1&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-2/beautiful-sky-2.jpg&quot; alt=&quot;Beautiful sky 2&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;P.S. These are from my phone, thats why the sky looks very bad.&lt;/p&gt;
&lt;p&gt;Photos don&apos;t do justice to how beautiful the clouds looked. Striped rain and sunlight patches in far away distance. Golden sunlight falling on a far off mountain peak, cutting through dark clouds like a gateway to the heaven itself 👼. It was definitely hard to concentrate on the warmup amidst such beauties. Every few minutes someone would find an even more beautiful sight in distance in another direction.&lt;/p&gt;
&lt;h2&gt;Shed&lt;/h2&gt;
&lt;p&gt;Few astute readers would have spotted rain in the last paragraph, well I also mentioned it was far away. Unfortunately after just a few shoulder rotations, they were knocking on our doors!! (I feel like an American, using shoulder rotations as a measure of time, anything but the standard metric units 😂 ). A bunch of our group started panicking cause they could not spot any shelter. Little Cave, as the name suggested was LITTLE. It could not hold 10 people and all of our equipment. Luckily, your boi 😎 knew a shelter in a nearby bouldering area, called &lt;a href=&quot;https://www.thecrag.com/en/climbing/india/hampi/area/411585315&quot;&gt;&lt;code&gt;Access Denied&lt;/code&gt;&lt;/a&gt;. All of us ran to the shed, and it took no time to start pouring instead of dirizzling. We were all bummed cause we knew we were going to be stuck there at least for a few hours. And climbing after this?? No chance. &lt;code&gt;:(&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Well I made it sound grim, but a bunch of friends know how to liven up any situtation. Soon all of the baggage was tucked and covered with pads in the middle of the shed. And music was ON! It almost felt like a disco dance floor! Headlamps and floodlights were repurposed as red lights, and at point their frequency of flicker led me to believe someone might get a seizure 😂. Everything seemed SO TRIPPY. We all sung and danced to the music and made most out of the moment.&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-2/red-light-under-shed.jpeg&quot; alt=&quot;Main in red light under shed&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;a href=&quot;https://www.youtube-nocookie.com/embed/TIzZ4MKBmmU?mute=1&quot;&gt;https://www.youtube-nocookie.com/embed/TIzZ4MKBmmU?mute=1&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Few songs in, a part of the group realized they were now standing in foot deep water on open side of the shed, it was raining pretty heavily and this shed had poor water management &lt;code&gt;:(&lt;/code&gt;. One of my friend was looking into the water with his headlamp on, and I noticed he accidentally created vibrant strands of water reflected on the roof of the shed. As the rain contributed more to the pool, we kept seeing interesting patterns. Small disturbance causing whole fabric to spring up in a seemingly random, but globally coherent dance. It was like our own planetarium at home. VIBES WERE IMMACULATE!! A good rain would cause a generation older to think about Chai and Pakoda, but newer ones think of ciggs and grass. To my surpise, someone actually carried all of the material up and was already rolling up a joint 🚬. Smokers are very dedicated people I learnt that day! And with the joint they made the vibes literally HIGH &lt;code&gt;xD&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;https://www.youtube-nocookie.com/embed/T6YnWrDfUVk?mute=1&quot;&gt;https://www.youtube-nocookie.com/embed/T6YnWrDfUVk?mute=1&lt;/a&gt;
&lt;/p&gt;
&lt;h2&gt;Firefly&lt;/h2&gt;
&lt;p&gt;We didn&apos;t know how long we would be stuck there, it didn&apos;t worry us, still everyone wanted to just go home at this point. People who smoked were now complaning about being hungry too. Luckily for us, rain stopped after an hour or so. We did some inspection on the clouds and decided this was the best time to SCOOT. All of us prepared to leave, formed a line to not get confused or hurt. All the equipment was taken up by boys (good lads in my group). Navigators at the head of the queue, headlamps carrier at the tail and all the girls in the middle. This got a bit dicey and funny cause the experienced climber navigating, who hadn&apos;t smoked, got us lost in the forest. We promoted our leopard girl to the start, who btw had smoked heavily, and she helped us get back on the way 😂. Who said girls are bad at navigation!?&lt;/p&gt;
&lt;p&gt;It felt weird cause we literally could not see a phone&apos;s flashlight away. And maybe because of this, WE HAD A LOT OF SLIPS. Thankfully we all survived and were down the hill without any major injuries.&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-2/finding-way-back-after-rain.jpeg&quot; alt=&quot;Finding way back after rains&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;a href=&quot;https://www.youtube-nocookie.com/embed/xrbhDMSYpKE?mute=1&quot;&gt;https://www.youtube-nocookie.com/embed/xrbhDMSYpKE?mute=1&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Once we reached the river bank, I had another &quot;first&quot; experience of my life. I saw a Firefly!! Unforuntately, there was only one 😓. All of us sat there for a couple of minutes watching it do its delicate dance, swinging with the breeze all over the river, until it went near a bush and disappeared!?. We are almost 100% sure some toad/frog ate it 😭. I get it minecraft, I get why you removed the feature of frogs eating firefly. DON&apos;T SPOIL THE ATOMSPHERE. (They actually removed cause fireflies can be toxic to frogs, but hey go with my story for now!!).&lt;/p&gt;
&lt;p&gt;I wondered on the way back, how magical it would feel to have fireflies all around you! Apparently, there&apos;s a village in Maharastra where this happens, they call it the &lt;a href=&quot;https://blog.lohono.com/your-complete-guide-to-the-firefly-festival-in-maharashtra/&quot;&gt;firefly festival&lt;/a&gt;. Someday I would like to visit the place! Maybe I get my Disney princess moment there after getting betrayed by butterfly heaven.&lt;/p&gt;
&lt;p&gt;After this long arduous way back, we had a quick dinner at Wanderlist and instantly went to sleep. Of course again with a &quot;promise&quot; to start at &lt;code&gt;06:00&lt;/code&gt; in the morning 😂.&lt;/p&gt;
</content:encoded></item><item><title>Hampi Day 1</title><link>https://fknil.com/blog/hampi-june-2026-day-1/</link><guid isPermaLink="true">https://fknil.com/blog/hampi-june-2026-day-1/</guid><pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently (26th-28th June 2026) went on a three day climbing trip to Hampi. It wasn&apos;t enough for climbing, but definitely enough for healing my soul through and through. This is my day to day log of a small set of things that happened.&lt;/p&gt;
&lt;p&gt;On our first day, we arrived sleep deprived in &lt;a href=&quot;https://maps.app.goo.gl/FuQuaQu5bLeR9aEU6&quot;&gt;Hospete&lt;/a&gt; and took an auto to &lt;a href=&quot;https://maps.app.goo.gl/X6ytwvY2SAPJiMYN6&quot;&gt;Hanumanhalli&lt;/a&gt;. Our abode was Mani&apos;s homestay (theres no maps link for it 🫠). It is a minimal 1980s style house with owning family living in a small part of the house, leaving four rooms open for lodging.&lt;/p&gt;
&lt;p&gt;We were all dead tired from floating in air most of the night in the bus. To top it off, it was already sunny enough outside. With all this, we decided to explore and take rest in the day, and climb in evening and night. 🌝&lt;/p&gt;
&lt;p&gt;After some delicious doses and paddus [1] for breakfast, we took onto exploring the trail of getting upto foothills of &lt;a href=&quot;https://koppal.nic.in/en/tourist-place/rushyamukha-hill/&quot;&gt;Rushyamukha hill&lt;/a&gt;. Apparently, this is the place where &lt;code&gt;Ram&lt;/code&gt; and &lt;code&gt;Sugriva&lt;/code&gt; agreed to be allies against &lt;code&gt;Ravana&lt;/code&gt;!! Check out &lt;a href=&quot;https://en.wikipedia.org/wiki/Ramayana&quot;&gt;Ramayana&lt;/a&gt; for more details.&lt;/p&gt;
&lt;p&gt;Besides its historical significance, this is also a boulder heaven! This path upto the foothills is a mini adventure on its own. As we start walking away from village, we first came across &lt;a href=&quot;https://thetopo.com/crags/hampi/routelist/baba-cafe&quot;&gt;Baba boulders&lt;/a&gt;. These are two lone boulders sitting on the side of a farm and just outside the village. We tried to checkout climbing lines on these boulders, but they looked frighteningly difficult. Crossing the boulders we reach the banks of &lt;a href=&quot;https://en.wikipedia.org/wiki/Tungabhadra_River&quot;&gt;Tungabhadra river&lt;/a&gt;. While river didn&apos;t look impressive, our friend started recalling her experience of leopard sightings last time she was at the exact same spot. I definitely felt my spirit floating out of my body, but it ran back in as soon as she mentioned they are not fond of humans and, loud music in night would keep them away easily. This is the bell &amp;lt;&amp;gt; bear equivalent to leopards 🐻.&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-1/walking-along-banks-of-river.jpeg&quot; alt=&quot;Walking along side banks of Tungabhadra river&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;River in this section was pretty narrow and small, with loads of super shiny rocks. This shine is SO weird, they almost look like plastic under sunlight. On &lt;a href=&quot;https://youtu.be/eAypgtLbvxI?si=l5-ertgqS1NJkXJ7&amp;amp;t=137&quot;&gt;reading&lt;/a&gt; up a bit more, it seems like this is because of their composition of quartz, feldspar and mica minerals, very very interesting. As there were more rocks than river in this particular area, people have placed one man walk stones to cross it. We crossed this section to enter a small foresty line which is your average foot hill. But after that comes one of my most favorite sections. A walk through elevated trails amidst paddy fields. There&apos;s a super narrow one person path crossing all these fields. In the day, one can enjoy the view of these fields plus forest around. In the night, it becomes an orchestra of toads and crickets, all singing on top of their lungs to create what I have started calling: &quot;Climbers Remix&quot; presented by our very own supertalented, super duper experienced and god of all music: &quot;nature&quot;.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;https://www.youtube-nocookie.com/embed/TbAQ_bNwRUQ?mute=1&quot;&gt;https://www.youtube-nocookie.com/embed/TbAQ_bNwRUQ?mute=1&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Seems too ordinary to like this setting? I think anime has taught me to love this, I really like those small village slice of life animes where protoganist(s) are also walking through the fields, listening to cicadas screaming, exactly the same as the scenario above :)&lt;/p&gt;
&lt;p&gt;After crossing these fields, we come across a sign with different legs pointing in different directions to Hanumanhalli, Hampi, etc. And another one saying: &quot;Welcome to the edge of nothingness. May your presence be a gift&quot; and in the middle: &quot;May you be a blessing to you all you meet&quot;.&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-1/sign-before-foot-hill.jpg&quot; alt=&quot;Sign before foothill&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-1/second-sign.jpeg&quot; alt=&quot;Second sign before foothill&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;These signs act as a good marker on where to take a left turn, to reach the exact hike starting spot. Also, they feel a bit cute, full positive vibes before an exciting time ahead! Crossing the signs, we take a left to cross a small stream by parkouring like Takeshi&apos;s castle &lt;a href=&quot;https://www.youtube.com/watch?v=VKkM9BF0JBE&quot;&gt;skipping stones&lt;/a&gt; 🏃&lt;/p&gt;
&lt;p&gt;And here we reach a small butterfly heaven. 🦋&lt;/p&gt;
&lt;p&gt;It felt divine standing in the middle of swarms of butterflies flying all around you! It had SO SO many different butterflies in a small place completely surrounded by 8-9ft trees. I had tried having my disney princess moment here. I stood still there with my hand out, sadly no butterfly landed on me 😭.&lt;/p&gt;
&lt;p&gt;Once we cross this, we finally reach foot of the hills. For our first day&apos;s morning walk, we hiked few minutes up the trail to see a boulder named &quot;&lt;a href=&quot;https://www.youtube.com/watch?v=oFJSIL2xyBo&quot;&gt;double arete&lt;/a&gt;&quot;. This was our limit for this morning, we turned around and went back to our stay for some good lunch and bus-lagged sleep.&lt;/p&gt;
&lt;p&gt;Refreshed, everyone gulped coffee at &lt;a href=&quot;https://maps.app.goo.gl/STnBy3UeGMExicF79&quot;&gt;Wanderlust&lt;/a&gt; [2] and took the same trail, this time with loads of climbing equipment, and also actually up the hills. I absolutely love hiking with minimal human interaction. This was the perfect place to scratch that itch, we were walking through soothing nature, coming across dozens of small lizards, variety of birds but above all, SO MANY AWESOME BOULDERS!! Hype was building up as we approached &quot;&lt;a href=&quot;https://climbingaway.fr/en/climbing-areas/hampi-island-plateau-party-boulder&quot;&gt;Party Boulders&lt;/a&gt;&quot; area. This was going to be today&apos;s climbing destination. It&apos;s a set of rocks marked by two primary boulders in the center with huge illumnati style eyes sprayed on them.&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-1/me-carrying-climbing-equipment.jpeg&quot; alt=&quot;Me carrying climbing equipment up the hill&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-1/eyes-of-party-boulder.jpg&quot; alt=&quot;Eyes of party boulder&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-1/colorful-lizard.jpeg&quot; alt=&quot;Colorful Lizard&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;As it was already &lt;code&gt;17:30&lt;/code&gt; by the time we started, it was close to sunset when we were in the middle of our warmup and I swear to god, this golden hour was one of the most beautiful I have ever experienced. We got some really good photos, sadly can&apos;t link them right now cause they are still getting developed, might end up updating the blog later. Well after that golden distraction we started warming up on nearby boulders. There was a relatively small boulder just in front, that was a bit taller than me, still low enough for warmup. So we got some feel for the rock texture, and did a &lt;a href=&quot;https://www.climbgrades.com/BoulderingDefinitions/sit-start&quot;&gt;sit start&lt;/a&gt; reaching the top to start it safe. Next, we started our trip&apos;s proper routes with a &lt;code&gt;5&lt;/code&gt; (understanding &lt;a href=&quot;https://cdn.shopify.com/s/files/1/0298/8159/8051/files/Rock_Climbing_Grades_Conversion_Chart_600x600.jpg?v=1718444205&quot;&gt;grading&lt;/a&gt;) named &lt;code&gt;Short Overhung Arete&lt;/code&gt; (74 in photo). I was confused on it in the start, but got the main rockover move and feet placement on my 3rd attempt and with that I had first send of this trip!! 🎉 Next was a &lt;code&gt;6a&lt;/code&gt; named &quot;&lt;a href=&quot;https://www.thecrag.com/en/climbing/india/hampi/route/9057781017&quot;&gt;Scoop&lt;/a&gt;&quot; (73 in the photo). Aptly named, cause it scooped everyone&apos;s asses, even experienced climbers took 10-15+ attempts to send it and to no-ones surprise I had to give up on it 😭. With its super spanny start move and above waist high right foot (injured ankle side) placement, it just wasn&apos;t for me. I do truly believe, it is not made for shorter climbers, you need certain amount of height to call it a &lt;code&gt;6a&lt;/code&gt; (which should be easy for me mind you, no climbing ego &lt;code&gt;:P&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-1/finding-party-boulder-area.jpeg&quot; alt=&quot;People standing in an open area trying to find Party Boulder Area&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-1/party-boulder-lines.png&quot; alt=&quot;Climbing lines on party boulder&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;While we tried &lt;code&gt;Scoop&lt;/code&gt;, it was already dark, so we got our floodlights and headlamps out. This was my first time climbing in the night surrounded by complete darkness, an hour away from civilization. You could hear the night, touch the chill, shine under moon and live among the stars. With such peace, I subconsciously started crooning &lt;a href=&quot;https://www.youtube.com/watch?v=JYuyWrkwpok&quot;&gt;&lt;code&gt;Fly me to the moon&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/hampi-june-2026-day-1/night-sky.jpeg&quot; alt=&quot;Night sky&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;And as if whole world was conspiring to make this moment better, I found my first outdoor project. Its named &quot;Physics&quot; graded &lt;code&gt;6b+&lt;/code&gt; (75 in the photo). On my last Hampi trip, I had &lt;a href=&quot;https://www.climbgrades.com/BoulderingDefinitions/flash&quot;&gt;flashed&lt;/a&gt; a &lt;code&gt;6b+&lt;/code&gt; called &quot;PsychoBloc&quot;. &lt;code&gt;6b+&lt;/code&gt; as a grade is not as easy as people would assume, but depending on style (crimpy, slabby, slopy, overhung, etc) a person generally doing &lt;code&gt;6b+&lt;/code&gt; indoors might or might not be able to do it outdoors. Luckily, &lt;code&gt;PhyschoBloc&lt;/code&gt; was overhung and crimpy and heal hook centric, perfect for my style :)&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;https://www.youtube-nocookie.com/embed/epawVCzG5fU?mute=1&quot;&gt;https://www.youtube-nocookie.com/embed/epawVCzG5fU?mute=1&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;P.S. I was thinking it was not a flash when doing it, but it actually was &lt;code&gt;xD&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This led me to not think much about &lt;code&gt;Physics&lt;/code&gt;. Of course it did not seem easy, but also something I couldn&apos;t have judged just based on the looks. And man, it didn&apos;t disappoint, it absolutely kicked my ass. I couldn&apos;t do anything after the second move 😭.&lt;/p&gt;
&lt;p&gt;I knew it was hard cause even other two experienced climbers with us couldn&apos;t complete the full route in one go. But it was safe to assume they couldn&apos;t do it because it was their first day, and I know it cause they mentioned they had sent it earlier &lt;code&gt;:P&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;After 10-15 serious attempts on it, I didn&apos;t have any juice left in me, and so was the case with others. We decided to head back to civilization and reached back by &lt;code&gt;22:00&lt;/code&gt;. All of us took much needed relaxing showers, had good home food for dinner and went to sleep, promising an early start at &lt;code&gt;06:00&lt;/code&gt; the next day.&lt;/p&gt;
&lt;p&gt;And that was the end of day one, second day will be available on: https://fknil.com/blog/hampi-june-2026-day-2.&lt;/p&gt;
&lt;p&gt;[1] Bengaluru why are you shutting down shops selling them?? 😭 &lt;br /&gt;
[2] What a scenic restaurent, absolute fav place to hang out in Hampi&lt;/p&gt;
</content:encoded></item><item><title>Joy of a send</title><link>https://fknil.com/blog/poem-joy-of-a-send/</link><guid isPermaLink="true">https://fknil.com/blog/poem-joy-of-a-send/</guid><pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;
&lt;img src=&quot;https://fknil.com/rss-images/blogs/non-tech/2026/poem-joy-of-a-send/under-stars-in-front-of-boulder.jpg&quot; alt=&quot;Me sitting under stars in front of a boulder getting ready to climb it&quot; style=&quot;width:30%;height:20%&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;Preface: In climbing lingo, sending a project means completing a route you were working on as a project.&lt;/p&gt;
&lt;pre&gt;
&lt;em&gt;
On the stone, on the rock
On the boulder, I sit in shock.
The project I dreamed about all while,
I sent it with a smile.

Last season it felt so hard,
Couldn&apos;t do the first move,
Couldn&apos;t complete the first half.

But here I am today, STANDING ON THE ROCK,
Shouting on top of my lungs &quot;FUCK OFF&quot;.

I look above in the sky,
feeling confident enough to fly.
What was the notion? What was the emotion?
Should I beat my chest? Or should I cry?
Should I be at my best? Wait, why do I look wry?

Confused stance captures the roll,
But the joy is atop and sole.

I get on the ground, have a look around,
Isn&apos;t that route overhung!?
And there starts another battle unsung.
&lt;/em&gt;
&lt;/pre&gt;</content:encoded></item><item><title>Static image URLs for RSS in Astro</title><link>https://fknil.com/blog/astro-rss-static-img-urls/</link><guid isPermaLink="true">https://fknil.com/blog/astro-rss-static-img-urls/</guid><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Motivation&lt;/h2&gt;
&lt;p&gt;I have talked about image handling problems in Astro &lt;a href=&quot;https://fknil.com/blog/new-website-2026/&quot;&gt;before&lt;/a&gt;. My main gripe was the usecase of RSS, while it is an excellent &lt;a href=&quot;https://docs.astro.build/en/recipes/rss/&quot;&gt;integration&lt;/a&gt; in Astro, there are some interesting corner cases when it comes to images and MDX. MDX is hard to handle in general, combination of JSX and MD? Recipe for confusion. So it is understandable that Astro is still figuring out ropes on it. But image handling? That&apos;s a different case. Astro does helpfully provides ways to optimize images used in your blog, but its integration with its own RSS plugin has a gotcha. Image URLs generated by astro on each build are not the same. A typical astro generated image URL is of the form:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://basedomain.com/_astro/image_name.hash.webp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;image_name&lt;/code&gt; is the file name of the image in your project, but the hash, that can change! That means an image can have one URL in todays build, but a completely different URL in tomorrows build. This is not a problem if everyone visits your website for reading your blogs, but when sending content over RSS to readers, they may decide to cache it, which would mean those URLs would stop loading! I do not want that to happen. That means I need a saner way to get static URLs for an image.&lt;/p&gt;
&lt;p&gt;Second problem, is more about the structure of the project. Currently, I have blogs as a &lt;a href=&quot;https://github.com/feniljain/fknil&quot;&gt;submodule&lt;/a&gt; in website repo, this allows me to keep everything in blogs repo as markdown files and deal with just code in the main website. This also allows me to add a private submodule, which I have recently done it the form of weeknotes. I want my weeknotes to have a static link, but not listed anywhere and only show the latest one in RSS feed. I dont want to lay out my full life for someone to see on a github public repo, but also keep sharing latest tid-bits about myself to my friends. My current structure had all images in the website repo, which would have broken this private arrangement of weeknotes. So I wanted to move all the images just next to the blog post, in the same dir. My current structure for blogs is:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;➜  blogs git:(main) ✗ tree
.
├── non-tech
│   ├── 2024
│   │   └── writing-more
│   │       └── BLOG.md
....
├── README.md
└── tech
    ├── 2021
    │   └── ieee-ctf
    │       └── BLOG.md
...
34 directories, 23 files
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;i.e. main segregation of tech/non-tech as categories, year wise segregation, slug as the dir name under year and finally, a file named BLOG.md containing the actual blog, and now, all the images alongside it. This is a really good structure! It makes logical sense to keep images just next to the associated blog entries. Theres another reason I mentioned this structure here, which will come to help later, so keep it in mind.&lt;/p&gt;
&lt;p&gt;Thridly, I was also using MDX in my blogs/weeknotes, this was done initially to just get the website with blog integration out. One battle at a time. JSX allowed me to import images using &lt;code&gt;import&lt;/code&gt;, which was handy and it also allowed me to resize images with ease. I couldnt use &lt;code&gt;img&lt;/code&gt; tag cause that needed static URLs and couldnt use markdowns img syntax cause that did not allow resizing of images. The problem with having JSX in your blog content is it gets bundled in my RSS content, that was super annoying to see! I could have written a custom extension to remove the &lt;code&gt;import&lt;/code&gt;s from markdown to HTML converter, but that does not seem like a clean solution to me. Any tags I add in future, would mean me remembering to remove them from the RSS HTML generator.&lt;/p&gt;
&lt;p&gt;So in summary, main motivations were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get static image URLs in astro&lt;/li&gt;
&lt;li&gt;Improve image storage structure&lt;/li&gt;
&lt;li&gt;Not use MDX&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Solution&lt;/h2&gt;
&lt;p&gt;Lets tackle one thing at a time, but you would see how all of this comes together at the end. Also why I am writing about these things together.&lt;/p&gt;
&lt;p&gt;First thing, lets talk about improving structure. I moved images from website repo to individual blogs/weeknotes repos and did not remove &lt;code&gt;import&lt;/code&gt; JSX statements. This was easy to do, I just added:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&quot;@blogs/*&quot;: [&quot;./blogs/*&quot;]
&quot;@weeknotes/*&quot;: [&quot;./weeknotes/*&quot;]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;to my &lt;a href=&quot;https://github.com/feniljain/fknil/blob/87e67b1ea550b3fd2d019f7cdf367ee5f11631ca/tsconfig.json#L9-L10&quot;&gt;tsconfig.json&lt;/a&gt; and that allowed me to write import statements without worrying about relocating submodules in the future! But I still had to write down full paths from base of the submodule project to the blog post.&lt;/p&gt;
&lt;p&gt;Next let&apos;s talk about static URLs. I was talking about this problem with &lt;a href=&quot;https://msfjarvis.dev/&quot;&gt;Harsh&lt;/a&gt; in last IndieWebClubBlr meetup and he mentioned I should dump all images in &lt;code&gt;public/&lt;/code&gt; folder and that would give me static URLs for all of them. I decided to do just that, but at build time! So I wrote a &lt;a href=&quot;https://github.com/feniljain/fknil/blob/3ba3b63947db91ed2cad4ec23c35add587c8d67b/scripts/copy-rss-images.sh&quot;&gt;bash script&lt;/a&gt; which:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;is executed &lt;a href=&quot;https://github.com/feniljain/fknil/blob/87e67b1ea550b3fd2d019f7cdf367ee5f11631ca/package.json#L9-L10&quot;&gt;before&lt;/a&gt; astro build is called&lt;/li&gt;
&lt;li&gt;moves images from respective dirs to &lt;code&gt;public/&lt;/code&gt; but with same dir structure&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What do I mean by same dir structure? For example, if an image is at &lt;code&gt;./blogs/non-tech/2026/chinaga-betta-hike/amongst-the-clouds.jpeg&lt;/code&gt;, it goes into &lt;code&gt;public/&lt;/code&gt; as &lt;code&gt;public/rss-images/blogs/non-tech/2026/chinaga-betta-hike/amongst-the-clouds.jpeg&lt;/code&gt;. Now this was easier to do because I fixed the dir structure above to move images right next to the blog! That means I get structured image URLs without much effort!&lt;/p&gt;
&lt;p&gt;Next step was converting all the MDX files to MD by replacing image imports with &lt;code&gt;img&lt;/code&gt; tags and &lt;code&gt;href&lt;/code&gt; as &lt;code&gt;public/rss-images/...&lt;/code&gt; URLs. I could do this now because I had static image URLs, I get resizing benefits and simple markdown supported HTML without much hassle.&lt;/p&gt;
&lt;p&gt;Three birds with one stone!! 🐦🪨&lt;/p&gt;
&lt;h2&gt;Gripe&lt;/h2&gt;
&lt;p&gt;What I dont like about this solution is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New step in build process which build worker should support. Luckily in my case, cloudflare pages build worker had all the tools I needed.&lt;/li&gt;
&lt;li&gt;Opting out of Astro image optimization pipeline. [&lt;a href=&quot;https://docs.astro.build/en/guides/images/#where-to-store-images&quot;&gt;astro docs&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I am more worried about second, cause image loading can be an important metric in website load times, but I will think about optimizing this in future.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;For now, enough building, I am going to focus on writing more! Part of it was writing this blogpost, and hopefully many more to come!&lt;/p&gt;
</content:encoded></item><item><title>Minimal CSS for everything</title><link>https://fknil.com/blog/minimal-css-for-everything/</link><guid isPermaLink="true">https://fknil.com/blog/minimal-css-for-everything/</guid><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today I am going to talk about minimal CSS to make responsive websites. This is the best time to write this down cause I have built &lt;a href=&quot;fknil.com&quot;&gt;my website&lt;/a&gt; recently, and I fought through a jungle of different loosely connected pieces of ideas I had in my brain to make this website responsive and with no horizontal scroll. Please please remove horizontal scrolls from your websites, it is not that hard. Personally if I come across one, it drives me nuts. And this is not just noobs writing CSS who introduce them, I just saw it yesterday on Github compare page!! A multi-million dollar company, with all the resources in the world, and they can introduce such bugs. Its still present as of writing this blog i.e. 10-06-2026-06-09 in DD-MM-YYYY, check it out &lt;a href=&quot;https://github.com/apache/datafusion/compare/main...feniljain:datafusion:feat-offset-pushdown&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I was doing a lot of web-dev during my college days. Being part of a super active club, we used to conduct a lot of events! And each one required at least a website, with android/iOS app being optional. We were always in build mode, one event goes, another one is knocking on the door. You would think with all this pressure, why not use something like Wordpress? Well there are two reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We had some of the best designers, they have wild imaginations and pushed us to our limits always&lt;/li&gt;
&lt;li&gt;We were students and we wanted to learn!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This was pre-LLM era, so all we did was &lt;a href=&quot;https://www.youtube.com/watch?v=AOPZuXh-f5M&quot;&gt;Fuck Around Find Out&lt;/a&gt;. Ahh the golden days. But due to all this grinding, we had become super efficient at base responsiveness of any page. For each project, we would bang out responsive base layouts pretty fast, hard part was things like rendering a 3D globe (well this was a library so we escaped), or making CSS animations with canvas, etc. I was involved in almost all the projects either as a frontend guy or a backend guy, sometimes both :P&lt;/p&gt;
&lt;p&gt;Around when I took over most of the development, something flipped in development practices of our team. I had pushed a rule of not using any CSS frameworks. I had recently learnt about flexbox, and it felt magical! I wondered to myself: What have I been doing till this day. Trying to use loads of media queries, z-index, float, display and what not to make the website just barely responsive. Responsiveness was just a weird screen away from breaking. As soon as I learnt about it, and built enough intuition I realized: all these frameworks were helping with was hiding skill issue. There were zero reasons, for a complete learning project to use any frameworks. So they were banned, but this meant literally hand-rolling everything in the whole website, now this could be a CTF website or recruitment portal, anything which the next event and design curiosity led to.&lt;/p&gt;
&lt;p&gt;The reason I am talking about this today is I recently read an interesting article from &lt;a href=&quot;https://matklad.github.io/2026/06/04/css-unavoidable-bad-parts.html&quot;&gt;Matklad&lt;/a&gt;. While I follow his blog posts for systems engineering/low level/PL design, etc, this one stuck to me. No-one wants to learn oddities of CSS, this is especially true for people who want to control everything about their website but not be bothered with too much framework complexity, I am still that guy! So following his lead, what are my rules which I follow and want to remember to make this happen?&lt;/p&gt;
&lt;p&gt;With this motivation, I am going to give you a recipe which has worked for me over the years! Lets get started:&lt;/p&gt;
&lt;h2&gt;Box Sizing&lt;/h2&gt;
&lt;p&gt;First set:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;* { box-sizing: border-box; }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Make all the elements use &lt;code&gt;border-box&lt;/code&gt;. By default CSS does not include padding and border as part of the height and width calculation of the element, it just feels unintuitive to me, as well as to Matklad too xD&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/box-sizing&quot;&gt;MDN link&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Flexbox&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;display: flex;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Anywhere where you want to arrange multiple elements in a way where they can wrap, you want them to be strictly stacked, strictly next to each other, strict space between or any such scenarios, use flexbox. I am not doing a proper justice to how important and life changing flexbox is. So, for this one thing, do sit and read full &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/CSS_layout/Flexbox&quot;&gt;MDN reference&lt;/a&gt;. It is really good! And you would definitely forget it, so next time you will have to come and see this again for few things xD&lt;/p&gt;
&lt;p&gt;Next is:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;justify-content: center;
align-items: center;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;How to center a child div? SOLVED!&lt;/p&gt;
&lt;p&gt;I am not even kidding, this is it. And its not just this, &lt;code&gt;justify-content&lt;/code&gt; has other values like &lt;code&gt;start&lt;/code&gt;, &lt;code&gt;end&lt;/code&gt;, &lt;code&gt;space-between&lt;/code&gt;, &lt;code&gt;space-around&lt;/code&gt; and &lt;code&gt;space-evenly&lt;/code&gt;. Again &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/justify-content&quot;&gt;MDN page&lt;/a&gt; gives a good interactive example for these properties.&lt;/p&gt;
&lt;p&gt;and same for &lt;code&gt;align-items&lt;/code&gt;: &lt;code&gt;stretch&lt;/code&gt;/&lt;code&gt;center&lt;/code&gt;/&lt;code&gt;start&lt;/code&gt;/&lt;code&gt;end&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;There is one question to ask though, why two properties? why not just one? Well for that we will have to understand flexbox a bit and this explanation will also double down as our introduction to next two flexbox properties. Again, I am only going to touch just enough to give an idea, for detailed documentation do refer to its official &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Flexible_box_layout/Basic_concepts&quot;&gt;MDN page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Flexbox has two directions in which it tries to reason about its child element. One is called the &lt;code&gt;main axis&lt;/code&gt; and other is called the &lt;code&gt;cross axis&lt;/code&gt;. By default, &lt;code&gt;main axis&lt;/code&gt; is horizontal and &lt;code&gt;cross axis&lt;/code&gt; is vertical. So, if you say:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;justify-content: start;
align-items: start;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can expect all children to be in the left hand side upper corner of your parent element. Or, if you set:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;justify-content: end;
align-items: end;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;they will be in the right hand side lower corner. There are loads of different combinations. You should personally play with these combinations to get the best feel! Once you understand these, it will start to feel like superpower :)&lt;/p&gt;
&lt;p&gt;There is one catch though, values of main and cross axis can change according to &lt;code&gt;flex-direction&lt;/code&gt;, which can be &lt;code&gt;row&lt;/code&gt;, &lt;code&gt;row-reverse&lt;/code&gt;, &lt;code&gt;column&lt;/code&gt; or &lt;code&gt;column-reverse&lt;/code&gt;. Main axis in each case is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;row&lt;/code&gt;: left-to-right&lt;/li&gt;
&lt;li&gt;&lt;code&gt;row-reverse&lt;/code&gt;: right-to-left&lt;/li&gt;
&lt;li&gt;&lt;code&gt;column&lt;/code&gt;: top-to-bottom&lt;/li&gt;
&lt;li&gt;&lt;code&gt;column-reverse&lt;/code&gt;: bottom-to-top&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One can easily infer about cross-axis. And finally there&apos;s &lt;code&gt;flex-grow&lt;/code&gt;. This is used to tell an element to take a stretch factor in free space. A simple example to understand it would be:&lt;/p&gt;
&lt;p&gt;Imagine there&apos;s a website with body set as 100% of screen space. At the top there&apos;s a header and at the bottom there&apos;s a footer, in the middle you have dynamically sized content. Header is of height 10% and footer, 5%. Now we can set &lt;code&gt;flex-grow&lt;/code&gt; on middle element to &lt;code&gt;1&lt;/code&gt;, which would make it automatically occupy all the remaining space between them.&lt;/p&gt;
&lt;p&gt;In this example one could compute the height of middle element as 85%, but think of multiple elements of varying size, some fixed, some dynamic, all of them interacting with each other and they are dynamically inserted in any order, having properties like &lt;code&gt;flex-grow&lt;/code&gt;, helps in that case!&lt;/p&gt;
&lt;p&gt;There are other properties on flexbox, but I don&apos;t remember now if I used any regularly in college, at least I didn&apos;t need any in my current website.&lt;/p&gt;
&lt;h2&gt;Single media query&lt;/h2&gt;
&lt;p&gt;Just use:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@media (max-width: 480px) { /* all needed CSS */ }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;for any mobile phone specific stuff. Important to note point will be: it is only to be used for things like: image size is 30% on desktops, but on phone it needs to be 50%. DO NOT use it to get responsiveness. Flexbox should have everything you need to achieve that!&lt;/p&gt;
&lt;h2&gt;Margin on body&lt;/h2&gt;
&lt;p&gt;For some reason Firefox (not sure about other browsers), had a default margin of 8?? This caused so much confusion to me :(&lt;/p&gt;
&lt;p&gt;Setting it zero removed horizontal scroll and overflow I was debugging xD&lt;/p&gt;
&lt;p&gt;By default just remove it on &lt;code&gt;html&lt;/code&gt; and &lt;code&gt;body&lt;/code&gt; tag:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;html, body {
    /* by default it has 8 margin 🤦 */
    margin: 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;From Matklads blogpost I also learnt about other such non-intuitive things browsers set and hence every website should perform a so called &quot;CSS Reset&quot;, basically a small set of sane properties to keep at the the top of project and start building from that base. One linked by Matklad was &lt;a href=&quot;https://www.joshwcomeau.com/css/custom-css-reset/&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Percent over pixels for margin and padding&lt;/h2&gt;
&lt;p&gt;Percentage scales better for different screen sizes by default, so stop hard-coding pixels! Btw these pixels do not map to actual pixels of your screen. Its just a logical construct which has a mapping decided by browser to the actual physical pixels!&lt;/p&gt;
&lt;p&gt;There could be a case where margin and padding looks off on different screen resolutions. I usually keep two sets, one for mobile and one for any other screens.&lt;/p&gt;
&lt;h2&gt;Rem over pixels for font size&lt;/h2&gt;
&lt;p&gt;Again don&apos;t hard code using pixels, just use rem. While its intuitive, a &lt;a href=&quot;https://matklad.github.io/2022/11/05/accessibility-px-or-rem.html&quot;&gt;good read&lt;/a&gt; on the same was linked in Matklads post.&lt;/p&gt;
&lt;h2&gt;CSS variables for light and dark mode&lt;/h2&gt;
&lt;p&gt;Use global CSS variables for setting light and dark mode colors and use them with system preferences like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:root {
    --bg: #fafafa;
    --fg: #212121;
    --muted: #5a5a5a;
    --logo-backdrop: #1565c0;
    --alt-bg: #e0e0e0;
    --border: #d0d0d0;
    --text-color: #212121;
}

@media (prefers-color-scheme: dark) {
    :root {
        --bg: #212121;
        --fg: #dadada;
        --muted: #a0a0a0;
        --logo-backdrop: #42a5f5;
        --alt-bg: #424242;
        --border: #3a3a3a;
        --text-color: #dadada;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This would change theme of the website according to system preferences by default. You can also force it using a button on your website :)&lt;/p&gt;
&lt;h2&gt;Don&apos;t forget LVHA&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;Love/Hate&lt;/code&gt; relationship of CSS. Its basically a rule covering how CSS loads properties on anchor tag in a particular order:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;:hover&lt;/code&gt; must come after &lt;code&gt;:link&lt;/code&gt; and &lt;code&gt;:visited&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:active&lt;/code&gt; must come after &lt;code&gt;:hover&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you does not follow these, you might see properties being overridden randomly. So always remember these!&lt;/p&gt;
&lt;h2&gt;Semantic tags&lt;/h2&gt;
&lt;p&gt;Try to use HTML semantic tags like &lt;code&gt;&amp;lt;em&amp;gt;&lt;/code&gt; for &lt;code&gt;italic&lt;/code&gt;, &lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt; for &lt;code&gt;bold&lt;/code&gt; , etc. These are for text decoration, but there are tags for loads of other things like &lt;code&gt;lists&lt;/code&gt;: &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt;, navigation lists etc. There are a ton of semantic tags baked into HTML, try to make use of them as much as possible and leave the defaults as they are!&lt;/p&gt;
&lt;h2&gt;Divs&lt;/h2&gt;
&lt;p&gt;And finally, use divs liberally when trying to make sense of some responsive layout, I usually find giving borders of different colors to different divs a pretty good way to debug CSS issues. Now, I know we have a very powerful &lt;code&gt;Inspector&lt;/code&gt;, but you know to debug two very different elements together in a complex hierarchical top-down dependent system (flexbox all the way down), this trick is useful xD&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;And that&apos;s it, a good example of all these tips in use is my website&apos;s &lt;a href=&quot;https://github.com/feniljain/fknil&quot;&gt;codebase&lt;/a&gt;. Not saying, these are the golden rules which are absolute perfect, there could be things wrong with this. Accessibility comes to mind as the major footgun when discussing webdev. So, would love to hear about things which can go wrong or are incorrect! Thanks for reading and until next time, ciao!&lt;/p&gt;
</content:encoded></item><item><title>My new small space in the vast web</title><link>https://fknil.com/blog/new-website-2026/</link><guid isPermaLink="true">https://fknil.com/blog/new-website-2026/</guid><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Motivation&lt;/h2&gt;
&lt;p&gt;I have been pilled by &quot;write more&quot; propaganda, and its not something new, I have written &lt;a href=&quot;https://fknil.com/blog/writing-more-2024/&quot;&gt;about it before&lt;/a&gt; but never actually made progress on it. Something has changed this year, I utilized my new year to go through the book of &lt;code&gt;Accidental Genius&lt;/code&gt;, it talks about freewriting, basically a concept about just typing out words till the editor in your brain takes a step back and you can get your original ideas out, a process of self discovery you can say. Well this is one benefit, mostly importantly I really liked writing as a means to gain clarity. This could work for anything life, work, problem solving, etc. To be frank, I hadn&apos;t written much after reading the book in January, but you know there are few things which grow over you? I think the idea has grown over me. So now, I just bang out lines, edit it once maybe and hit &lt;code&gt;push&lt;/code&gt;. I even migrated to using markdown files for this, lower the friction to actually publish a blog post, the better.&lt;/p&gt;
&lt;p&gt;This is one part of the equation, second is, I have grown to start liking &lt;a href=&quot;https://indieweb.org/&quot;&gt;IndieWeb&lt;/a&gt; concept. I first discovered the concept through &lt;a href=&quot;https://codeberg.org/susam/wander&quot;&gt;Susam Pal&apos;s Wander instances&lt;/a&gt;. When I first visited it, I felt like my child like curiosity came back again, it was so wonderful to visit people&apos;s websites, read what they have been up to in life/tech, etc. I wanted a little space of my own too, not as fancy as some of those neocities pages, but just my own little simple space where I can host my own interests.&lt;/p&gt;
&lt;p&gt;Thirdly, I have finally been able to get my RSS reader set up! I use &lt;a href=&quot;https://github.com/newsboat/newsboat&quot;&gt;newsboat&lt;/a&gt;, its simple and it works! This time I made sure to very slowly add URLs to my feed, and also do regular scrutiny of which feed I want to keep. This has allowed to sustain a habit of actually opening RSS reader everyday and looking forward to new content 😁. Btw one of the key to achieving this was also having a rather regular cadence feed, for me that is &lt;a href=&quot;https://thedailywtf.com/&quot;&gt;DailyWTF&lt;/a&gt; and &lt;a href=&quot;https://xkcd.com/&quot;&gt;xkcd&lt;/a&gt;. Its so fun to read them! With all this working out, of course I want a RSS feed of my own writing and we need a hosted space for that to happen, so why not build one!?&lt;/p&gt;
&lt;h2&gt;Execution&lt;/h2&gt;
&lt;p&gt;Now lets talk about details, how I achieved it, what I liked about the way I took and what I didn&apos;t.&lt;/p&gt;
&lt;h3&gt;Requirements&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Keep writing blog posts in markdown files&lt;/li&gt;
&lt;li&gt;Simple framework without any client-side javascript&lt;/li&gt;
&lt;li&gt;Still able to use &lt;code&gt;npm&lt;/code&gt; packages, basically easy to leverage community work&lt;/li&gt;
&lt;li&gt;Keep draft blogs private if possible&lt;/li&gt;
&lt;li&gt;Easy to deploy&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I dont want to increase friction of me writing, a simple markdown file, edit in obsidian and that should do it!&lt;/p&gt;
&lt;p&gt;I want to have it load super fast!! No heavy frameworks like React, Vue, etc. I really don&apos;t want client side javascript. It should be build once, keep serving always after that! Basically a static site.&lt;/p&gt;
&lt;p&gt;There are a bunch of neat things which you can find in &lt;code&gt;npm&lt;/code&gt; packages like better markdown parsers, fancy wallpapers, dangerous malwares 💀 (:P). I definitely want to be able to use some of them if possible.&lt;/p&gt;
&lt;h3&gt;Ditching hugo&lt;/h3&gt;
&lt;p&gt;For my old website, which my old self made, I used a simple Hugo template. It might have been easy to get up and going at that time, but I am not a fan of these templating engines myself. When I decided to revamp the website, I realized I needed a hugo binary on a specific version, cause it was not building with latest! Some people push their binaries itself to the repo, but what about changing machines? Working across different architectures, etc. I decided I did not want to deal with this crap. So what to do now? Well recently, I migrated my resume from all these templating engines to a custom HTML/CSS file. It is so beautiful now, I can make any changes, add as many points as I want, lay it out as I want, this is what I was looking for! LaTex? Hold my gun, HTML/CSS are always the original king 👑.&lt;/p&gt;
&lt;p&gt;I wanted to replicate same success with my new setup too, so that&apos;s why I started writing my website in .... HTML and CSS. I could do all my pages with it, but what about markdown files, I would have to write scripts for rendering them? And then actually managing/using them in website is also a bit painful.&lt;/p&gt;
&lt;h3&gt;Enter Astro&lt;/h3&gt;
&lt;p&gt;While I was figuring all this out, I attended a IndieWebClubBengaluru meetup and there, some of my old colleagues showed me their websites which were built using Astro. I initially wasn&apos;t interested as I thought it would be another heavy client side javascript framework. But then they stared showing me their lighthouse score, how fast their sites loads and how it did not have &quot;client heavy javascript&quot;! Bingo, that was all I wanted to hear. That&apos;s when I started exploring Astro, and went through full &lt;code&gt;guide&lt;/code&gt; section in its &lt;a href=&quot;https://docs.astro.build/en/concepts/why-astro/&quot;&gt;documentation starting from here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And OH BOY!! I had hit jackpot, somehow these guys had exact thoughts like I had and had everything needed to fulfil my requirements. Markdown files to html? Content management from a third folder of all the markdown content? No client side javascript? RSS? EVERYTHING WAS PRESENT! And everything was supported first class!&lt;/p&gt;
&lt;p&gt;There is just one thing amongst my requirements, which you would be confused about, how do you &lt;code&gt;keep draft blogs private if possible&lt;/code&gt;, that&apos;s technically not something these frameworks can support. Well, to solve this I created a content collection, basically a folder which has all the blog posts. Astro would walk all the dirs/sub-dirs in this collection and make an array of blog posts. Main catch is, this folder is a &lt;a href=&quot;https://github.com/feniljain/blogs&quot;&gt;separate repo&lt;/a&gt; in my case. I added it as a submodule, and while it is public for now, I can convert it into a private one at any anytime. I can clone the submodule because I have access to it, but others can&apos;t. I can still keep the website code open though! Match made in heaven xD.&lt;/p&gt;
&lt;h3&gt;Not so good parts&lt;/h3&gt;
&lt;p&gt;So till now, we discussed how Astro is ticking all the boxes, but nothing is perfect, there were a few caveats. First is resizing images in markdown. Images can be of varied size but resizing them dynamically is a very common usecase. Well it seems like Astro does not have good support for the same with markdown files. I had to convert my blog of &lt;a href=&quot;https://fknil.com/blog/chinaga-betta-hike/&quot;&gt;chinaga betta hike&lt;/a&gt; to a MDX file and inject Astro specific JSX to get it working, this was a huge bummer for me. Before moving on to MDX I tried a bunch of things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;img&lt;/code&gt; tag in markdown file with local path&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;span&lt;/code&gt; and &lt;code&gt;div&lt;/code&gt; tag in markdown file with local path&lt;/li&gt;
&lt;li&gt;Try to use &lt;code&gt;githubusercontent&lt;/code&gt; URL of the image with height and width mentioned in URL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of these worked 😓. At the end, I had to shift to MDX which obsidian does not support out of the box, it does not even show it in UI!! Well this was one grievance.&lt;/p&gt;
&lt;p&gt;Next was, &lt;code&gt;astro/@rss&lt;/code&gt; by default does not support linking to images. So if I convert my markdown files to HTML for RSS consumption it does not separate out images in those with some kinda permalink. I am not sure if this an Astro problem, but the OutOfTheBox experience kinda broke here. For now, I am sending MDX files directly in RSS feed without even linking to the images :(&lt;/p&gt;
&lt;p&gt;One last problem, was a surprising behaviour. When I first added frontmatter to all my blogs, registered it as content collection, Astro&apos;s hot refresh didn&apos;t pick them up at all. There were no errors in logs, browser console anywhere?? I had my &lt;code&gt;npm run dev&lt;/code&gt; running from the morning since I have been building website incrementally. But I for some reason decided to kill and restart the server, and low and behold it didn&apos;t start. It failed with an error. Frontmatter of one of the markdown files was not proper (it was reading root README.md too). Well well, I spent so much time, tweaking &lt;code&gt;content.config.ts&lt;/code&gt; and frontmatter for all the blogs, this was very frustrating.&lt;/p&gt;
&lt;h2&gt;Further plans&lt;/h2&gt;
&lt;p&gt;But you know, as they say, all&apos;s well that ends well. Except it hasn&apos;t ended, I will take a pause on development for now, but will come back to try to make fixes for the image handling flow for HTML rendering and RSS readers.&lt;/p&gt;
&lt;p&gt;I don&apos;t want this to be a passion project for now, it is more of a means to an end, to fulfil the core motivations I listed in the beginning of this blog. I want to take it slow, not try to go full speed once and then never come back to touch it. Core goal is writing more, so we will focus on that above all!&lt;/p&gt;
&lt;p&gt;There&apos;s also one thing I wanna do before taking on work of image flow fixing, that is adding wander instance to my webpage, that would be fun to have, a corner of mine in the small/indie web community :)&lt;/p&gt;
&lt;p&gt;For now, you can find &lt;a href=&quot;https://fknil.com/&quot;&gt;my website here&lt;/a&gt; and &lt;a href=&quot;https://fknil.com/rss.xml&quot;&gt;RSS feed here&lt;/a&gt;. Till next time, chao! 😺&lt;/p&gt;
</content:encoded></item><item><title>Upgrading to neovim 0.12</title><link>https://fknil.com/blog/neovim-v12/</link><guid isPermaLink="true">https://fknil.com/blog/neovim-v12/</guid><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently upgraded my neovim to 0.12.2, I have been chipping away at it slowly using &lt;code&gt;NVIM_APPNAME&lt;/code&gt; feature so that my day to day activities are not hindered. One of the things I found interesting in using &lt;code&gt;NVIM_APPNAME&lt;/code&gt; is, I saw a blog where author manually create all the &lt;code&gt;~/.local/share/nvim-next&lt;/code&gt; etc dirs, I did the same cause I was not aware, but later I realized that one can literally just say &lt;code&gt;NVIM_APPNAME=nvim-next ~/.local/share/bob/0.12/bin/nvim&lt;/code&gt; and neovim will automatically make all those dirs for you. Also yes, I use awesome &lt;a href=&quot;https://github.com/MordechaiHadad/bob&quot;&gt;bob-nvim&lt;/a&gt; for managing neovim versions. With that out of the way, lets get started!&lt;/p&gt;
&lt;h2&gt;Major changes&lt;/h2&gt;
&lt;p&gt;Cool, lets talk about major changes, listing them out first:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;vim.pack&lt;/code&gt;: Migrating to builtin package manager&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lsp&lt;/code&gt;: Ditching nvim-lspconfig etc for &lt;code&gt;vim.lsp.enable&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ui2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;no vimscript in config&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Migrating to builtin package manager&lt;/h3&gt;
&lt;p&gt;Neovim now comes with an inbuilt package manager called &lt;code&gt;vim.pack&lt;/code&gt;, its currently experimental but is considered good enough for daily driving. I have used a bunch of package managers over time, vim-plugin, packer, lazy and now &lt;code&gt;vim.pack&lt;/code&gt;. While I don&apos;t care about them a lot, each migration has been inspired by reasons. vim-plug -&amp;gt; packer, lua shift of whole ecosystem. packer -&amp;gt; lazy.nvim, extra features like dependencies, clean config, etc and finally lazy -&amp;gt; vim.pack cause I want to reduce count of external dependencies. With all the changes happening upstream, I am really hopeful that some day my whole config will just fit in a small file!&lt;/p&gt;
&lt;p&gt;But I couldn&apos;t simply move to using vim.pack, I had to evaluate if it was strictly an upgrade. Factors I looked for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do I depend on dependencies feature of lazy?&lt;/li&gt;
&lt;li&gt;Does it slow down my startup times?&lt;/li&gt;
&lt;li&gt;Does separating config in &lt;code&gt;vim.pack&lt;/code&gt; make config structure worse?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For &lt;code&gt;dependencies&lt;/code&gt; section, I went through my plugin list and realized I had these dependencies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;aerial.nvim on nvim-treesitter and nvim-web-devicons&lt;/li&gt;
&lt;li&gt;telescope on telescope-fzy-native, telescope-live-grep-args and plenary.nvim&lt;/li&gt;
&lt;li&gt;nvim-treesitter-context on nvim-treesitter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These don&apos;t seem that bad, all of them are loaded much later in the neovim startup process and I could just keep them in a particular order to make the resolution pass. Well I tried it and that did work out, so ticked this off.&lt;/p&gt;
&lt;p&gt;For my startup times, I used &lt;code&gt;nvim --startuptime startuptime.log .&lt;/code&gt;. If you are not familiar with this command, it instructs neovim to write a log of its startup activities and to get startup time you would look for log &lt;code&gt;--- NVIM STARTED ---&lt;/code&gt;, first number in that row is the amount of seconds it took to startup your neovim. I measured this and realized I hadn&apos;t used &quot;lazy&quot; in lazy.nvim package manager 😭. But I never felt the need to make it go faster, cause I wasn&apos;t able to perceive a delay when starting it. Day I start noticing the delay is the day I bring down my hammer. I had done this earlier for my &lt;a href=&quot;https://github.com/feniljain/blogs/tree/main/2024/faster-shell-boot&quot;&gt;shell&lt;/a&gt; too. But after the migration, timings seemed the same, actually a bit better than lazy.nvim, so I was already happy :)&lt;/p&gt;
&lt;p&gt;For config structure, I really liked how lazy forced a dir structure of &lt;code&gt;plugins&lt;/code&gt; and encouraged keeping config along side plugin installation line itself. It was a clean way. With &lt;code&gt;vim.pack&lt;/code&gt; I had two ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;keep installation line with config in top level &lt;code&gt;plugin/&lt;/code&gt; dir&lt;/li&gt;
&lt;li&gt;keep all installation lines together and config separately&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I wanted to maintain order remember? That can easily be done with a single &lt;code&gt;vim.pack.add&lt;/code&gt; and listing down all the plugins together with their install order. But with &lt;code&gt;plugin/&lt;/code&gt; dir, I would have to name files &lt;code&gt;0_&lt;/code&gt;, &lt;code&gt;1_&lt;/code&gt; etc. This is because files in &lt;code&gt;plugin/&lt;/code&gt; are loaded automatically by vim and neovim in sorted order. Naming files like that was a turn off for me, so I went with single &lt;code&gt;vim.pack.add&lt;/code&gt; call and created a new dir called &lt;code&gt;plugins/&lt;/code&gt; in &lt;code&gt;lua/&lt;/code&gt; dir and shoved all plugin related config there. I enforced &lt;a href=&quot;(https://github.com/feniljain/dotfiles/blob/9681a844aadc971dae416836e2dc75feb328b8d3/nvim/.config/nvim/lua/fenil/plugins/init.lua#L1-L8)&quot;&gt;setup order&lt;/a&gt; in &lt;code&gt;lua/plugins/init.lua&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;With all of this out of the way, migration was really SMOOTH! And I kinda love that I am not pulling a heavy dependency like lazy.nvim in my dep tree :)&lt;/p&gt;
&lt;p&gt;If you have advanced usecases or want to understand the feature better, there are two awesome guides: official manual and then &lt;a href=&quot;https://echasnovski.com/blog/2026-03-13-a-guide-to-vim-pack.html&quot;&gt;this&lt;/a&gt;. Read it end-to-end, each section has something you can take away. It is the most comprehensive guide out there right now.&lt;/p&gt;
&lt;p&gt;One small trick I learned from the article above is placing &lt;code&gt;vim.loader.enable&lt;/code&gt; speeds up startup times for free and this is blessed on us by Folke himself!! Ofc I added that and instantly realized 25ms off the loading time xD&lt;/p&gt;
&lt;h3&gt;LSP&lt;/h3&gt;
&lt;p&gt;Neovim v0.12 also brings in more ergonomic LSP usage support. Now, you can place LSP server setting in &lt;code&gt;lsp/&lt;/code&gt; dir and just call &lt;code&gt;vim.lsp.enable(&amp;lt;file-name-in-lsp-dir&amp;gt;)&apos;&lt;/code&gt; and this is all the setup you need! &lt;code&gt;nvim-lspconfig&lt;/code&gt; is now reduced to just maintain settings for upstream LSP servers. As these rarely change, I just copied from upstream and placed in my &lt;code&gt;lsp/&lt;/code&gt; dir, I also realized I only use two of them now: rust_analyzer and taplo (toml LSP server, also for rust dev :P). With this, I was able to cut down a bunch of lines in my LSP config and also trim down deps of &lt;code&gt;nvim-lspconfig&lt;/code&gt; and &lt;code&gt;mason-lspconfig&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;ui2&lt;/h3&gt;
&lt;p&gt;This is an experimental feature where command line meets messages meets pager meets dialog windows. Honestly its best explained in &lt;a href=&quot;https://neovim.io/doc/user/lua/#ui2&quot;&gt;official docs&lt;/a&gt;. This was an interesting change which allowed me to trim down a dep I really liked: &lt;code&gt;fidget.nvim&lt;/code&gt;. It shows LSP progress on the bottom right corner. Now I do it in ui2 itself using &lt;a href=&quot;https://github.com/feniljain/dotfiles/blob/9681a844aadc971dae416836e2dc75feb328b8d3/nvim/.config/nvim/lua/fenil/config/autocmds.lua#L33-L48&quot;&gt;this&lt;/a&gt; autocommand, that&apos;s it, 15 lines are all we need. I get the progress in same place as command line without &lt;code&gt;Hit Enter&lt;/code&gt; prompts.&lt;/p&gt;
&lt;p&gt;This works best with &lt;code&gt;cmdheight = 0&lt;/code&gt; , which prevents &lt;code&gt;Hit Enter&lt;/code&gt; prompts. &lt;code&gt;cmdheight&lt;/code&gt; feature was merged in 0.11 itself, I had tried it then but it felt incomplete and weird, but now with ui2 it has the perfect UX, they have really nailed this! There&apos;s just one small hiccup, somehow I am not able to see marco record messages, I could reproduce it on master with minimal config so its definitely an upstream issue, hopefully that gets fixed, but till then I have &lt;a href=&quot;https://github.com/feniljain/dotfiles/blob/9681a844aadc971dae416836e2dc75feb328b8d3/nvim/.config/nvim/lua/fenil/config/autocmds.lua#L58-L73&quot;&gt;two hacky autocmds&lt;/a&gt; which almost do the same job just slightly worse 🙃.&lt;/p&gt;
&lt;h3&gt;No vimscript in config&lt;/h3&gt;
&lt;p&gt;I finally took the leap and ditched out all the vimscript from my config, its completely lua based now! I know I am very late to the party, but I really wanted to keep it around so that I can use it on VMs where vim is the default. Well what finally prompted this move was making a minimal vimscript based vim config, which I can easily drop anywhere and get productive with vim! &lt;a href=&quot;https://github.com/feniljain/dotfiles/blob/main/vim/minimal-vimrc&quot;&gt;Here&apos;s&lt;/a&gt; the minimal config for the curious. I also have a minimal tmux config in the same lines &lt;a href=&quot;https://github.com/feniljain/dotfiles/blob/main/tmux/.tmux.conf.minimal&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Bugs discovered&lt;/h2&gt;
&lt;p&gt;This is an interesting section cause I usually never come across any hiccups when upgrading, neovim is a super polished, heavily tested software. People are out there doing builds super frequently to test latest and greatest! ( I was one of them till few years ago :P )&lt;/p&gt;
&lt;p&gt;But this release I came across two interesting bugs!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macro recording message display with ui2 and cmdheight=0&lt;/li&gt;
&lt;li&gt;a memory segfault with ui2 + invalid rtp and syntax on!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;First one we have already discussed, I hope it gets fixed in an upcoming version or even next release is fine :P&lt;/p&gt;
&lt;p&gt;For the second one, this is something severe and I was very astonished to come across it! First, link to &lt;a href=&quot;https://github.com/neovim/neovim/issues/39815&quot;&gt;bug report&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;minimal repro is just:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;require(&apos;vim._core.ui2&apos;).enable()
vim.cmd [[
set rtp+=$LMAO &quot; Cannot be a non-existing dir, needs to be an env var which does not exist
set syntax
]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So conditions are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ui2 should be enabled&lt;/li&gt;
&lt;li&gt;rtp should be set to an env var which does not exist&lt;/li&gt;
&lt;li&gt;syntax should be on&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The reason I came across this is because of this weird rtp setting I had set in &lt;a href=&quot;https://github.com/feniljain/dotfiles/blob/8ee7f08e3d5c978d3a667ff3479f4150d10ceeda/nvim/.config/nvim/plugin/sets.vim#L17&quot;&gt;my config&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;set rtp+=$GOPATH/src/golang.org/x/lint/misc/vim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I have no recollection why I had added this, I have messed around a lot with my config over the years, so there are artifacts I still find in weird corners. But main point being, I don&apos;t have golang installed in my system, so &lt;code&gt;GOPATH&lt;/code&gt; is not set and hence satisfies condition we mentioned above. I am not exactly sure what is causing this crash in neovim internally, it needs some investigation 🧐.&lt;/p&gt;
&lt;p&gt;But yeah interesting times! I created a new APPNAME with nvim-debug and managed to track it down to this config and also reproduce on latest &lt;code&gt;master&lt;/code&gt;. I have reported it, let&apos;s see if someone upstream picks it up before I get my hands dirty 🏃.&lt;/p&gt;
&lt;h2&gt;Sides&lt;/h2&gt;
&lt;p&gt;I was checking &lt;code&gt;:checkhealth vim.lsp&lt;/code&gt; and realized I hadn&apos;t seen &lt;code&gt;:checkhealth&lt;/code&gt; in a while, I did that and boom, it was so much cleaner!! Now we have ✅ and ❌ and ⚠️ to show overall health of the features etc, and in general it looked really really clean!&lt;/p&gt;
&lt;p&gt;There are also other features like &lt;code&gt;:restart&lt;/code&gt;, etc which I didn&apos;t delve into much cause I wasn&apos;t sure how to make use of those features right now. There are bunch of other features too, do go through all the &lt;a href=&quot;https://neovim.io/doc/user/news-0.12/#news-0.12&quot;&gt;release notes&lt;/a&gt;. Amount of things I have realized by reading the release notes in detail is mind blowing, 100% recommended!&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Overall, I am super happy with this new release, only thing I couldn&apos;t change this time is colorscheme, I didn&apos;t have any lined up to try out 😓.&lt;/p&gt;
&lt;p&gt;Except that, I am already looking forward to more amazing things in upcoming releases (multi-cursor looking at you). Till then, chao!&lt;/p&gt;
</content:encoded></item><item><title>Working with LLMs</title><link>https://fknil.com/blog/working-with-llms/</link><guid isPermaLink="true">https://fknil.com/blog/working-with-llms/</guid><pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;As we usher in this new era of LLMs, it is interesting to see how different people are starting to work with them. And as a typical keyboard thudding monkey, I want to optimize my workflow too. Because a true master understands tools at it his/her disposal the best.&lt;/p&gt;
&lt;p&gt;The way I currently work with them is straight forward way popularized by Claude Code, plan with it first in plan mode, then jump into implementation. I try to manually approve everything, but still I lose context in the &quot;hit enter&quot; hell. To over come it, I sometimes just let it make all the changes and then go back and start editing it. Now, ideally this should work, you plan meticulously and once the plan is solid, bang on, all code will be perfect. Right? Right?&lt;/p&gt;
&lt;p&gt;I think that&apos;s a wrong model to think how software engineers work. Most of the times, we discover/realize things on the fly, and that could be as small as a super small limited scope change to a complete re-design. So it is more of an iterative loop rather than a one shot model. In that case, one would go in and out of plan mode refining the spec as they learn more.&lt;/p&gt;
&lt;h2&gt;My questions&lt;/h2&gt;
&lt;p&gt;But before trying to refine our process, lets try to come up with points I want answers to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;How do I know I have explored all the possible ways to attack a problem, could there a simpler solution?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Another is, breaking down abstractions at correct boundaries, I think LLMs struggle with this right now. I see a lot of people dumping code in places where it shouldn&apos;t belong in the first place. Why is it dumped there, cause no one cared enough to think about boundaries. Well, this was a problem before LLMs too, but its much more worse right now.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Writing code by hand is a process which forces one to slow down and look at the surrounding code, think about frictions we face when coming up with code. Just being lazy and realizing a lot of things. LLMs don&apos;t have that (1). How to bring back this process of slowing down? And in what form? Hand-write everything again?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;How do I trust the tests written by LLM? Amount of people who are not reading generated tests is baffling high. No one, literally no one I know is reading generated tests. They think if there are tests its enough. Amount of times I have found generated tests to not be helpful is actually very high. Like the saying of man goes: &quot;To know a man, check his trash&quot;. &quot;To know about an implementation, check its tests&quot;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;How to find subtle problems within the implementation, Antirez put it nicely: &lt;code&gt;&quot;but still things that superficially work do not mean they are optimal.&quot;&lt;/code&gt;(2)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;User workflows&lt;/h2&gt;
&lt;p&gt;Before we try to answer these questions, lets try to read Antirez&apos;s use of LLMs for array type support in redis (2) (3). Summarizing it the way I understood it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;He wrote first design draft completely by himself&lt;/li&gt;
&lt;li&gt;Brought in LLM, started attacking draft from different angles, this would have likely required him asking correct questions to LLM&lt;/li&gt;
&lt;li&gt;He read whole code line by line with extreme care. I liked this a lot: &lt;code&gt;but still things that superficially work do not mean they are optimal.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;He rewrote the whole implementation again in a mix of manual and LLM mode&lt;/li&gt;
&lt;li&gt;Extensive testing, a complete month dedicated to just that&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In his own words towards the end:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;For high quality system programming tasks you have to still be fully involved, but I ventured to a level of complexity that I would have otherwise skipped. AI provided the safety net for two things: certain massive tasks that are very tiring (like the 32 bit support that was added and tested later), and at the same time the virtual work force required to make sure there are no obvious bugs in complicated algorithms. To write the initial huge specification was the key to the successive work, as it was the key to review each single line of sparsearray.c and t_array.c and modifying everything was not a good fit.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As we are at it, these are some ways I have seen people around me use it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clowns: Absolute direct vibe code, this is just dumb&lt;/li&gt;
&lt;li&gt;GreatPretenders: Give the problem to LLM, act like they understand it by saying: &quot;we manually accepted edits&quot;, test it on basic cases and ship to production.&lt;/li&gt;
&lt;li&gt;Meticulously try to plan things with it, try to attack from different angles. From here on two more routes:
&lt;ul&gt;
&lt;li&gt;Strategist: Write code using a LLM assisted autocomplete&lt;/li&gt;
&lt;li&gt;OldieGoldie: Write code completely by hand&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We are not going to talk about Clowns and GreatPretenders at all except one statement to these people, PLEASE stop making my life difficult.&lt;/p&gt;
&lt;h2&gt;Thoughts on my questions&lt;/h2&gt;
&lt;p&gt;Now that we have everyone&apos;s workflows in place, let&apos;s try to come back to our questions. (Answers in the same bullet point number as the question)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;I like Antirez&apos;s approach here, he took a month just to write the spec, and he didn&apos;t write first draft with the help of LLM, it was completely by himself. This is where I think Strategist and OldieGoldie&apos;s get defeated, I believe key point is: not reading the approach given by LLM first. Cause there are times, they just don&apos;t know, and they don&apos;t know what they don&apos;t know. They are not able to come up with few of the strategies you might come up with. You could call this the creative step or whatever. I have noticed, reading LLMs output first creates a bias in the mind, and also we might get hindsighted on asking the correct questions. That&apos;s why try to come up with a plan on your own and then work with LLM to try to attack it from different sides to solidify it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On this part, I think there are two steps where this comes up, first is when planning i.e. 1st step and next is when actually writing code by hand and noticing a friction point. First part is addressable during first step itself, this is usually the easy part. But when it comes to the latter, I think it correlates with 3rd point of mine.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now this is a tricky one, one needs to slow down, we slowed down once in the initial planning phase, but when next? In the iterative cycle I mentioned above, how do we slow down during the actual implementation section to notice these frictions? Well one way is converting into OldieGoldie, it is slow but definitely works! Though one could be lost completely in implementation details and want to complete it fast, which would lead us to the pre-LLM era problem of people writing absolute horrendous code without respecting any abstractions.&lt;/p&gt;
&lt;p&gt;So, completely automated is bad, completely hand written is dicey, then Strategist wins? Well, I don&apos;t think so, again this is a point about slowing down, fancy autocompletes are not a great way to slow down and understand cross module dependencies. Well then what? I like Antirez&apos;s way here, seemingly he generated all code first as a PoC, realized few things during PoC to fix, re-generated it, assumed just reading everything in extreme detail would help but he didn&apos;t know the answer to: &lt;code&gt;but still things that superficially work do not mean they are optimal&lt;/code&gt;. So he went back and rewrote whole implementation in a mix of manual and AI-assisted mode.&lt;/p&gt;
&lt;p&gt;The difference between Strategist and this is using code as a throw-away signal, Antirez used the first version as a PoC, that&apos;s it. He then, rewrote the implementation in his own way completely, this makes the process so much faster and more context aware than one shotting the implementation and making abstractions etc on the fly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For this point, Antirez said two things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&quot;Everything was working, and this type has massive testing, thanks, again to AI&quot;&lt;/li&gt;
&lt;li&gt;&quot;When this stage was done, I started, during the third month, to stress test the implementation in many different ways.&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I don&apos;t think there&apos;s info on what he did here. As such testing is a very subjective topic and how to do it properly for a particular system is a monster of its own. For now, I try to follow the same procedure as before, try to come up with test cases myself and then involve LLMs to expand upon them on their own and combine to form a better list. This helps avoid a bunch of test cases which add 1K lines of abstractions on their own to test a simple thing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For this one, I think 3rd point above goes in enough details about everything. Key to this point I believe is slowing down and reading code multiple times to try and think from different angles.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This kinda also lays out how I want to try using LLMs going forward.&lt;/p&gt;
&lt;h2&gt;Unanswered Questions in Antirezs&apos; article&lt;/h2&gt;
&lt;p&gt;Taking a small detour and going back to Antirez&apos;s article, I have a few things I would have liked to understand in more details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When he used in LLM in the planning phase, what part of it was him trying to probe questions out of LLM as an experienced user and what part of it was, LLM finding defects/improvements on its own?&lt;/li&gt;
&lt;li&gt;What part of codebases did he rewrite manually and what parts were rewritten using LLM? How did he decide which part to allocate to who?&lt;/li&gt;
&lt;li&gt;How did he approach testing in general, did he check LLMs generated tests in super detail? Did he rewrite them too? What did his one month of testing look like in detail? How did LLMs help outside unit tests?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;It was interesting to think about these things while writing this article down. I would have not imagined myself thinking about these things because I had previously been haunted by a college senior of mine being too strict on writing down huge number of pages of LLD, HLD, PRD, etc etc for club projects. Ofc we never finished the projects which he was supervising. I still don&apos;t know if all of this was coherent or just random rambling. Well, there&apos;s one thing for sure, I have something new to try and I will make sure I keep the rigor up in LLM age! [4]&lt;/p&gt;
&lt;p&gt;Footnotes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(1) &lt;a href=&quot;https://bcantrill.dtrace.org/2026/04/12/the-peril-of-laziness-lost/&quot;&gt;peril-of-laziness-lost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;(2) &lt;a href=&quot;https://antirez.com/news/164&quot;&gt;antirez blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;(3) &lt;a href=&quot;https://github.com/redis/redis/pull/15162&quot;&gt;redis github PR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;(4) &lt;a href=&quot;https://oxide-and-friends.transistor.fm/episodes/engineering-rigor-in-the-llm-age&quot;&gt;engineering-rigor-in-the-llm-age&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item></channel></rss>