<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aakarshit Uppal</title>
    <description>The latest articles on DEV Community by Aakarshit Uppal (@aksh1618).</description>
    <link>https://dev.to/aksh1618</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F159173%2Fc731151d-e87b-4977-a4a1-d20571f3e697.png</url>
      <title>DEV Community: Aakarshit Uppal</title>
      <link>https://dev.to/aksh1618</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aksh1618"/>
    <language>en</language>
    <item>
      <title>Book Review: Designing Data-Intensive Applications</title>
      <dc:creator>Aakarshit Uppal</dc:creator>
      <pubDate>Sun, 29 Dec 2024 16:30:00 +0000</pubDate>
      <link>https://dev.to/aksh1618/book-review-designing-data-intensive-applications-19k2</link>
      <guid>https://dev.to/aksh1618/book-review-designing-data-intensive-applications-19k2</guid>
      <description>&lt;p&gt;&lt;span&gt;&lt;em&gt;⭐⭐⭐⭐ | Mandatory reading for every engineer&lt;/em&gt;&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;After seeing major recommendations from a lot of respected folks&lt;sup id="fnref:1"&gt;1&lt;/sup&gt;, I finally decided to read DDIA this year. And right off the bat, I’ll just reaffirm many of the things I heard/read — I agree that it should be mandatory reading for engineers. I also agree that it should be read multiple times, once every few years as you progress through your career. I for one feel quite unlucky not to have come across this gem of a book sooner, but at the same time really glad that I did now!&lt;/p&gt; &lt;p&gt;For me the greatest value the book provided was in the form of formalization &amp;amp; reaffirmation — as a Tech Lead with almost 6 years of professional experience working with distributed systems, albeit more on the user end of the spectrum, I’ve collected a lot of incidental knowledge that typically comes with such experience. And reading through DDIA, one of my main observations was that Kleppmann does a really great job at formalizing this knowledge. Working at the same organization for the past few years, I have left a long trail of decisions in my wake. For me DDIA provided great validation for some of those decisions — giving me more confidence in my ability in making them, often with a healthy dose of “Whew! I sure managed to dodge &lt;em&gt;that&lt;/em&gt; invisible bullet!” In other words, DDIA helps you reflect on your knowledge and decisions through a very clear lens of formalized knowledge.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;DDIA helps you reflect on your knowledge and decisions through a very clear lens of formalized knowledge&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;If you’re someone with relatively less experience, a lot of things might not click the way they would if you had more experience, but just trust me when I say that you’ll be much better off knowing them now than later. The fact that the concepts &amp;amp; knowledge I picked up from the book have already helped me multiple times in the past few months, a couple times in very critical situations, should be evident enough. And I’m fairly positive that they’ll continue to do so for years to come.&lt;/p&gt; &lt;p&gt;DDIA also teaches you what you should beware of — acting as a sort of a reference of things that can and will go wrong when working with modern systems. This aspect of it is invaluable in my opinion. Imagine being able to spend just a few hours of your life to gain knowledge of things that folks only get to learn over &lt;em&gt;years&lt;/em&gt;, often through ending up in very tricky situations. This knowledge allows you to create and improve a personal framework for architectural decision making.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Imagine being able to spend just a few hours of your life to gain knowledge of things that folks only get to learn over &lt;em&gt;years&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;Another impact it had on me was igniting an interest in the construction and internals of distributed systems, such as databases, brokers etc. I have a feeling that this is likely to have a major impact on my career trajectory in the near future. It also widened the sphere of my understanding — I recently attended P99 Conf, and was pleasantly surprised by how much of it I was able to absorb; the same goes for Dist Sys blogs I’ve been reading recently.&lt;/p&gt; &lt;p&gt;All this said, the book isn’t perfect in every way — at times the focus seems to deviate from things that most require it — but that might just be an artefact of my personal experiences and preconceptions. I also found it to be a demanding read in some sections, either by virtue of trying to cram too much into too little, or at times the structuring of contents requiring tracing too many references in order to grasp some concepts. Chapter 9 comes to mind as the main offender in this regard&lt;sup id="fnref:2"&gt;2&lt;/sup&gt;. But note that this is only relative to the rest of the book — DDIA is by far the easiest and smoothest to read technical book I’ve read. Kleppmann (along with Chris Riccomini) is working on the second edition&lt;sup id="fnref:3"&gt;3&lt;/sup&gt; currently, and in addition to being excited by all the new concepts that’ll be covered, I’ll also look forward to some of these being addressed to make for an even better book.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;… inviting you to break through the traditional approaches of designing distributed systems and give a fair consideration to the alternatives, lest they be missed in the noise&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;Another major goal that Kleppmann seems to accomplish is expanding your worldview on how to view and design distributed systems, inviting you to break through the traditional approaches and give a fair consideration to the alternatives, lest they be missed in the noise. I suspect his ideas played an important role in the development of things such as AtProto&lt;sup id="fnref:4"&gt;4&lt;/sup&gt;, indicating the continuing achievement of this goal. The discussion about ethical considerations in the end was also a welcome surprise: Kleppmann didn’t have to, but he still did, which I respect and admire. It will push me to consider the consequences of the things I build or help build in a more holistic manner, and also give some bandwidth to reflecting, both internally and externally, on such consequences in my body of (future) work.&lt;/p&gt; &lt;p&gt;As I hinted at the start — DDIA is definitely the kind of book that gives you more every time you read it, the most deserving of this claim, at least of all the books I’ve read. I’m certainly planning to revisit it in a couple years or so. And I think you should too.&lt;/p&gt;  &lt;p&gt;Thanks for reading! Feel free to share this with others on the &lt;a href="http://bsky.app/intent/compose?url=https://aksh.dev/&amp;amp;text=Check%20out%20this%20review%20of%20Designing%20Data-Intensive%20Applications%20by%20Martin%20Kleppman%20https%3A%2F%2Faksh.dev%2Fbook-review-designing-data-intensive-applications" rel="noopener noreferrer"&gt;butterfly site&lt;/a&gt;, the &lt;a href="http://your-server.probably-social/share?url=https://aksh.dev/book-review-designing-data-intensive-applications/&amp;amp;text=Check%20out%20this%20review%20of%20Designing%20Data-Intensive%20Applications%20by%20Martin%20Kleppman" rel="noopener noreferrer"&gt;elephant site&lt;/a&gt;, the &lt;a href="http://twitter.com/share?url=https://aksh.dev/book-review-designing-data-intensive-applications/&amp;amp;text=Check%20out%20this%20review%20of%20Designing%20Data-Intensive%20Applications%20by%20Martin%20Kleppman" rel="noopener noreferrer"&gt;&lt;del&gt;bird&lt;/del&gt; unicode character site&lt;/a&gt;, or maybe even the &lt;a href="https://en.wikipedia.org/wiki/Nope" rel="noopener noreferrer"&gt;orange site&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://aksh.dev" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://aksh.dev" rel="noopener noreferrer"&gt;https://aksh.dev&lt;/a&gt; on December 29, 2024.&lt;/em&gt;&lt;/p&gt;   &lt;ol&gt; &lt;li id="fn:1"&gt; &lt;p&gt;A very special thanks to Phil Eaton — he played a major role in reigniting my passion for reading via his &lt;a href="https://eatonphil.com/bookclub.html" rel="noopener noreferrer"&gt;book club&lt;/a&gt;, while helping me discover some iconic books. Make sure to check it out and join future runs! ↩︎&lt;/p&gt; &lt;/li&gt; &lt;li id="fn:2"&gt; &lt;p&gt;Murat describes this well in &lt;a href="https://muratbuffalo.blogspot.com/2024/10/ddia-chp-9-consistency-and-consensus.html" rel="noopener noreferrer"&gt;his review of chapter 9&lt;/a&gt;: &lt;em&gt;“The chapter tries to do too much. Almost an entire semester of distributed systems content is force-jammed into this chapter … For a more manageable load, much of this chapter should be moved to other chapters.”&lt;/em&gt; ↩︎&lt;/p&gt; &lt;/li&gt; &lt;li id="fn:3"&gt; &lt;p&gt;&lt;a href="https://www.linkedin.com/posts/riccomini\_designing-data-intensive-applications-2nd-activity-7234603892800450560-p\_pa" rel="noopener noreferrer"&gt;Chris Riccomini on LinkedIn: Designing Data-Intensive Applications, 2nd Edition&lt;/a&gt; ↩︎&lt;/p&gt; &lt;/li&gt; &lt;li id="fn:4"&gt; &lt;p&gt;Kleppmann &lt;a href="https://bsky.app/profile/martin.kleppmann.com/post/3l52cfxhqgd2i" rel="noopener noreferrer"&gt;posted about this&lt;/a&gt; on Bluesky, and has also co-authored the paper &lt;em&gt;&lt;a href="https://arxiv.org/abs/2402.03239" rel="noopener noreferrer"&gt;Bluesky and the AT Protocol: Usable Decentralized Social Media&lt;/a&gt;&lt;/em&gt;. As of writing he is serving as an &lt;em&gt;“Advisor to the Bluesky team”&lt;/em&gt; (taken from his Bluesky profile description). ↩︎&lt;/p&gt; &lt;/li&gt; &lt;/ol&gt; 

</description>
      <category>distributed</category>
      <category>systems</category>
      <category>books</category>
      <category>reviews</category>
    </item>
    <item>
      <title>The Joy of Hackable Tools</title>
      <dc:creator>Aakarshit Uppal</dc:creator>
      <pubDate>Sat, 27 Jan 2024 00:15:00 +0000</pubDate>
      <link>https://dev.to/aksh1618/the-joy-of-hackable-tools-4fk7</link>
      <guid>https://dev.to/aksh1618/the-joy-of-hackable-tools-4fk7</guid>
      <description>&lt;p&gt;I just got my first neovim related MR merged!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcdhrkmgrpfwwlu4s93fc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcdhrkmgrpfwwlu4s93fc.png" alt="Screenshot showing a merged pull request on github titled 'Fixed get_xp and get_level'" width="657" height="107"&gt;&lt;/a&gt;&lt;br&gt;#FeelsGoodMan
  &lt;/p&gt;

&lt;p&gt;This got me thinking about the joy that is hackable tools: tools that allow you not just to customize, but to hack around and create stuff that you want. Customizability is becoming more and more an expectation these days, even if only at a very elementary level: it’s uncommon, for example, to find a website that doesn’t have a dark mode toggle. And I have really enjoyed customization with a lot of things, such as my android phone&lt;sup id="fnref1"&gt;1&lt;/sup&gt;, my OS (arch, btw), my terminal&lt;sup id="fnref2"&gt;2&lt;/sup&gt;, my browser&lt;sup id="fnref3"&gt;3&lt;/sup&gt;, my editors, my shell, the list goes on.&lt;/p&gt;

&lt;p&gt;However, customization can only take you so far. Here I was customizing lualine for my neovim setup, excited about adding Code::Stats xp&lt;sup id="fnref4"&gt;4&lt;/sup&gt; to it for a light dose of self gratification. But alas it wasn’t to be. After banging my head against some plugin configurations, it became clear that it was more than just a configuration issue. I was up against a bug.&lt;/p&gt;

&lt;p&gt;Remembering lazy’s dev directory option from ThePrimeagen’s neovim revamp stream&lt;sup id="fnref5"&gt;5&lt;/sup&gt;, I decided to take a look under the hood of the codestats plugin&lt;sup id="fnref6"&gt;6&lt;/sup&gt; itself. After tripping myself up by adding both the short name and the directory where lazy had cloned it by default (yep, it loops), I finally got a print statement in the plugin code to show up in neovim. Awesome! A few print statements later, I had the bug cornered, and a couple minutes later I had submitted a PR&lt;sup id="fnref7"&gt;7&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vrfatkle5sxz1m6eec5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vrfatkle5sxz1m6eec5.png" alt="Screenshot showing a diff where the short github url has been replaced by a local directory in a lazy.nvim plugin config" width="715" height="188"&gt;&lt;/a&gt;&lt;br&gt;The barrier to entry: A single line change
  &lt;/p&gt;

&lt;p&gt;This little incident brought joy to me. The barrier to entry was actually that low: just a single line change and you’re off to the races. All of my lua knowledge was just the Learn X in Y minutes page&lt;sup id="fnref8"&gt;8&lt;/sup&gt; that I had gone through quickly before starting my setup. And getting my hands dirty with the plugin code made neovim plugin creation seem so much more approachable. If I wanted x feature I could just write my own plugin, et voilà, the feature is ready!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5j866gkxlpaq5kdowv6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5j866gkxlpaq5kdowv6.png" alt="Screenshot showing CodeStats XP for lua with value 9431 in lualine.nvim" width="328" height="42"&gt;&lt;/a&gt;&lt;br&gt;Getting pretty good at lua
  &lt;/p&gt;

&lt;p&gt;The debate on whether switching to vim et al is going to improve your productivity, or just lead to time being wasted in setting it up, is timeless. Even though I myself had been tending to the former side of this debate already, the thing that finally tipped me over was an unexpected one: the joy that comes from being able to get into the code that makes your tool work and change how a part of it functions. This joy is highly underrated in my opinion, and makes the debate entirely one-sided, at least for me.&lt;/p&gt;




&lt;p&gt;I had been hearing a lot about Obsidian. More and more people I tend to agree with or look to for inspiration had been talking about it. I can’t place the tipping point exactly, but it was probably a mix of No Boilerplate’s pitch&lt;sup id="fnref9"&gt;9&lt;/sup&gt;, jonhoo’s usage of it&lt;sup id="fnref10"&gt;10&lt;/sup&gt; and kepano’s philosophy&lt;sup id="fnref11"&gt;11&lt;/sup&gt;. But there was the thing of Notion hosting all my current knowledge-base, work journal and task management. So when the official migration plugin&lt;sup id="fnref12"&gt;12&lt;/sup&gt; was released, I decided to take the plunge.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdd4rhbfii1oxe029epiy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdd4rhbfii1oxe029epiy.png" alt="Screenshot showing graph view generated by obsidian" width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;Obligatory Obsidian Graph Screenshot
  &lt;/p&gt;

&lt;p&gt;I exported my workspace, selected it in the migration tool, and gleefully looked at all my notes getting translated and The Graph™ populating. However, once I went to see a couple notes, all was not well. My ToC were gone, and so were the intricately chosen emojis for each page. But most importantly, all my code blocks were weird and unhighlighted. I was taken aback for a moment. It was not to be after all. I remembered seeing a github link for the migration plugin, and went to see if there was an issue for this. Sure enough, there was one&lt;sup id="fnref13"&gt;13&lt;/sup&gt;, but it looked like it was already resolved. After double-checking the versions etc., I submitted another one&lt;sup id="fnref14"&gt;14&lt;/sup&gt;. Now to wait.&lt;/p&gt;

&lt;p&gt;And then it clicked. It’s an open source plugin! I don’t &lt;em&gt;have&lt;/em&gt; to wait, I can just fix it myself! Hmm, it’s typescript. I have coded all of 0 lines of javascript in my life. But maybe I can still give it a go? I just have to find and fix a bug. And the plugin being well-written, with all steps being nicely structured as separate functions, inspired some confidence. But now I’ll have to set it up :/ I don’t want a bunch of node modules on my laptop, eww. But it’s 2023, surely I can just open it up in some cloud IDE? Maybe codespaces won’t bug out this time and actually successfully open a project for once?&lt;/p&gt;

&lt;p&gt;It did. A few minutes of tinkering around (it wasn’t a couple hours at all), and I had figured out the commands and the built package file and where to place it to make it work in my obsidian. A couple iterations of change + build + copy-paste later, I had the code blocks formatting fixed.&lt;/p&gt;

&lt;p&gt;That joy again! The possibilities were endless: even though not that simple this time due to my complete lack of knowledge of the JS ecosystem, I could hack around and fix anything I wanted, or even add features to make things work the way I wanted: which is exactly what I did over the next few days&lt;sup id="fnref15"&gt;15&lt;/sup&gt;. Even though my MR was rejected&lt;sup id="fnref16"&gt;16&lt;/sup&gt; in favour of the actual Notion migration contributor’s much more elegant and sensible fix&lt;sup id="fnref17"&gt;17&lt;/sup&gt;, I went on to add support for random things that bothered me about the imported notes&lt;sup id="fnref15"&gt;15&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fanc1s9i64fj7fpr6775k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fanc1s9i64fj7fpr6775k.png" alt="Screenshot of obsidian importer window showing 2 configuration options for Notion import and hacked version of it showing 4 extra options related to code highlighting, removing ToC and adding emoji as sticker" width="800" height="617"&gt;&lt;/a&gt;&lt;br&gt;Official Version vs My Hacked Version
  &lt;/p&gt;

&lt;p&gt;Again, there is the debate of whether you should get into Obsidian, with the added overhead of setting it up with plugins that might go unmaintained any day and overpriced or over-complicated syncing, or just stay with Notion and focus on doing your thing instead. Here it’s easier to tend to the former side for me. But when I went through the experience of hacking away and adding a bunch of features that resulted in an importing experience that was arguably an upgrade from Notion even visually, there was no doubt left.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1g7fhlivyetd4kxc5s9g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1g7fhlivyetd4kxc5s9g.png" alt="Screenshot of a note on Kotlin Coroutines open in 3 side by side windows: first in obsidian with unhacked importer (with unhighlighted code and unlinked ToC), second in Notion (with ToC linked and code lightly highlighted) and third in obsidian with hacked importer (with nicely highlighted code and auto-generated ToC in a hovering side panel)" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;Imported note before hacking | Original Notion page | Imported note after hacking
  &lt;/p&gt;

&lt;p&gt;And even though right now I’m writing this blog in Notion (sorry for not giving you a perfect ending&lt;sup id="fnref18"&gt;18&lt;/sup&gt;), I’m going to switch away this year to Obsidian without a doubt. I’ve already enlisted my wife as a test subject (albeit with partial success) by forcing her to switch over from Evernote (eww) and Notion to Obsidian and setting up hacky syncing via dropbox. It’s even part of my resolution for 2024, so of course it’s bound to happen no matter what.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffc56t1sos9igselsi1rj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffc56t1sos9igselsi1rj.png" alt="Screenshot of my tweet (umm X post?) showing a list of three tech resolutions for 2024: neovim, obsidian and split keyboard; with 24 views" width="343" height="258"&gt;&lt;/a&gt;&lt;br&gt;Can't let those 24 people down
  &lt;/p&gt;

&lt;p&gt;But for now I’m going to proceed with my neovim setup, with part of me hoping to encounter a bug that I can just go ahead and fix and be on my way with a bunch of joy.&lt;/p&gt;




&lt;p&gt;Thanks for reading, and don't forget to spread the joy! Share this on the &lt;a href="http://twitter.com/share?url=https://aksh.dev/the-joy-of-hackable-tools/&amp;amp;text=An%20interesting%20read%2C%20thought%20I%27d%20spread%20the%20joy%21"&gt;&lt;del&gt;bird&lt;/del&gt; unicode character site&lt;/a&gt;, the &lt;a href="http://your-server.probably-social/share?url=https://aksh.dev/the-joy-of-hackable-tools/&amp;amp;text=An%20interesting%20read%2C%20thought%20I%27d%20spread%20the%20joy%21"&gt;elephant site&lt;/a&gt; or maybe even the &lt;a href="https://en.wikipedia.org/wiki/Nope"&gt;orange site&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at&lt;/em&gt; &lt;a href="https://aksh.dev/the-joy-of-hackable-tools/"&gt;&lt;em&gt;https://aksh.dev&lt;/em&gt;&lt;/a&gt; &lt;em&gt;on January 21, 2024.&lt;/em&gt;&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;&lt;a href="https://xdaforums.com/m/a_k_s_h_.8009238/#recent-content"&gt;A_K_S_H_ | XDA Forums&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;&lt;a href="https://github.com/kovidgoyal/kitty/discussions/3720"&gt;Cycling tabs in recently used order · kovidgoyal/kitty · Discussion #3720 · GitHub&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;&lt;a href="https://www.reddit.com/r/FirefoxCSS"&gt;userchrome&lt;/a&gt;, anyone? ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn4"&gt;
&lt;p&gt;&lt;a href="https://codestats.net/users/aksh"&gt;Code::Stats&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn5"&gt;
&lt;p&gt;&lt;a href="https://youtu.be/ZWWxwwUsPNw?si=xJQ4b1RgPqvzcgfz&amp;amp;t=3620"&gt;Neovim Config - Part 1 - Lazy Vim - YouTube&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn6"&gt;
&lt;p&gt;&lt;a href="https://github.com/liljaylj/codestats.nvim"&gt;GitHub - liljaylj/codestats.nvim: Code::Stats plugin for Neovim&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn7"&gt;
&lt;p&gt;&lt;a href="https://github.com/liljaylj/codestats.nvim/pull/3"&gt;Fixed get_xp &amp;amp; get_level by aksh1618 · Pull Request #3 · liljaylj/codestats.nvim · GitHub&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn8"&gt;
&lt;p&gt;&lt;a href="https://learnxinyminutes.com/docs/lua/"&gt;Learn Lua in Y Minutes&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn9"&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=DbsAQSIKQXk"&gt;Hack your brain with Obsidian.md - YouTube&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn10"&gt;
&lt;p&gt;&lt;a href="https://youtu.be/xmqpzpzdjI8?si=OZiS8BZBoIzkS6ZT&amp;amp;t=4880"&gt;Hardware and software [2024 edition] - YouTube&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn11"&gt;
&lt;p&gt;&lt;a href="https://stephango.com/file-over-app"&gt;File over app — Steph Ango&lt;/a&gt;, see also: &lt;a href="https://obsidian.md/about"&gt;Obsidian's manifesto&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn12"&gt;
&lt;p&gt;&lt;a href="https://obsidian.md/blog/free-your-notes/"&gt;Free your notes - Obsidian&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn13"&gt;
&lt;p&gt;&lt;a href="https://github.com/obsidianmd/obsidian-importer/issues/82"&gt;Notion code blocks are imported without line breaks · Issue #82 · obsidianmd/obsidian-importer · GitHub&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn14"&gt;
&lt;p&gt;&lt;a href="https://github.com/obsidianmd/obsidian-importer/issues/107"&gt;Notion code blocks still being imported without line breaks · Issue #107 · obsidianmd/obsidian-importer · GitHub&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn15"&gt;
&lt;p&gt;I got so excited that I went completely overboard and actually created a release! &lt;a href="https://github.com/aksh1618/obsidian-importer/releases/tag/1.3.1-aksh-0.1.0"&gt;Release 1.3.1-aksh-0.1.0 · aksh1618/obsidian-importer · GitHub&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn16"&gt;
&lt;p&gt;&lt;a href="https://github.com/obsidianmd/obsidian-importer/pull/108"&gt;Notion: Fix codeblocks being imported without line breaks by aksh1618 · Pull Request #108 · obsidianmd/obsidian-importer · GitHub&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn17"&gt;
&lt;p&gt;&lt;a href="https://github.com/obsidianmd/obsidian-importer/pull/118"&gt;fix newlines in notion codeblocks by joshuatazrein · Pull Request #118 · obsidianmd/obsidian-importer · GitHub&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn18"&gt;
&lt;p&gt;I did end up editing it in Obsidian before publishing, so I guess there was a happy ending after all! I wanted to go for footnotes instead of links for this one to enhance readability, and a &lt;a href="https://github.com/MichaBrugger/obsidian-footnotes"&gt;couple of&lt;/a&gt; &lt;a href="https://github.com/charliecm/obsidian-tidy-footnotes"&gt;Obsidian&lt;/a&gt; &lt;a href="https://github.com/heycalmdown/navigate-cursor-history"&gt;plugins&lt;/a&gt; came in really handy ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>opensource</category>
      <category>tinkering</category>
      <category>neovim</category>
      <category>obsidian</category>
    </item>
  </channel>
</rss>
