Writing

Notes on code, craft, attention, and the examined life.

Essays and field notes on software, craftsmanship, and the practices that keep attention alive.

  1. The Knowledge Operating System A graph of five hundred interlinked notes taught me that capture and linking are not enough — knowledge needs structure to be documented, referenced, … emacsorg-modeorg-roamknowledge-managementzettelkasten
  2. How the Water Holds The water holds your body. It holds your attention. It holds what you carry. Notes on healing, disruption, and what a 4k swim through salt and tide … swimmingopen-watermental-healthmindfulnessattention
  3. The Poverty of Language and the Search for Emotional Precision Language compresses rich subjective experiences into symbols that others must reconstruct, making misunderstanding inevitable. Storytelling addresses … languagecognitionemotionscommunicationinformation-theory
  4. The Fear Tax Fear in the workplace is not a motivator. It is a tax. Leaders who let it persist — or quietly benefit from it — are paying that tax with their team's … leadershipempathyaiworkplacemanagement
  5. Keep the Friction AI is best at removing exactly the friction where craft, focus, and satisfaction used to live. Refusing it is a pose; there is no exit. The real move … aicraftsmanshipcreativityfocussoftware-engineering
  6. What I Got Wrong About Discipline, And You Might Too For years, I thought discipline was simply working hard and striving to improve. Only recently did I realize that true discipline is the resilience to … disciplinemotivationresilienceself-reflection
  7. Introducing ruby-upgrade-toolkit A Claude Code plugin for Ruby and Rails upgrades. Phased commits, real estimates, project-specific rules. Audit, plan, fix, verify, commit. upgradetoolkitclaudepluginrails
  8. Slow Down to Speed Up Why getting faster has always required slowing down first — and why the cycle never really ends. Lessons from the cube, the pool, and the codebase, … speedcubingswimmingsoftware-engineeringrefactoringtechnical-debt
  9. The Matrix Has No Exit The Matrix got the diagnosis right and the cure wrong — there is no Morpheus, no red pill, no city beneath the city, only the simulation we already … matrixsimulationsocietyattentioncapitalism
  10. Embrace the Wobble How Falling Fuels Your Success successgrowth-mindsetresilienceself-belieffailure
  11. Building a Scalable Ingestion Pipeline With Rust How to build a scalable ingestion pipeline with Rust rustsqsingestionpipeline
  12. Positive Effects of Exercise on Mental Health Exercise is also a form of meditation, has tremendous positive impact on mental health exercisementalhealth
  13. Neovim as a Java IDE Neovim has come a long way today from it’s original goal of being able to support asynchronous jobs. Today it comes packed with a ton of useful … neovimjavaidejdtls
  14. How to Speak Collection of my notes from the lecture titled 'How to Speak' by Patrick Winston how-tospeak
  15. Generic Callbacks in Rust In a recent project, we developed an ingestion pipeline in Rust. We wanted to execute asynchronous tasks in response to messages received from SQS, as … rustcallbacks
  16. DIY remote controlled pan & tilt CCTV using Raspberry Pi RPi CCTV in Action : A simple web interface to control the RPi CCTV : What you need to build this (hardware) : Raspberry Pi(1) (1)Preferably Raspberry …
  17. SSH Config Trick Update2 : As I have been informed now, there has recently been support added for including external files in the ssh config. Refer …
  18. Text Editor Choice & Peer Pressure I am a VIM user and have been for quite a long time(1) (1)~7 years . I am both a vim plugin author and also like to believe I have helped a lot of …
  19. Template with Context using ERB Recently, I was required to build a template rendering component that should render within a dynamic context, i.e. it would have methods / variables … erbrubytemplate
  20. Slack old school style Slack has gained a lot of popularity in recent times as a tool for inter-team communication and for the right reasons. It offers a lot of features … ircslackweechat
  21. WebRTC Broadcast WebRTC is fun! I recently gave a quick session on WebRTC at Bangalore Ruby User Group (BRUG). Following are the slides of my presentation. WebRTC from …
  22. Pristine – ZSH Theme A while back I posted about Amuse my prompt theme for ZSH targeting oh-my-zsh. Since this was a much appreciated theme, I would like to share another … prestinethemezsh
  23. Google open sources it’s machine learning system I am a huge proponent of open source technologies and having worked predominantly in various web technologies in the course of my career, I mostly … googleMachine Learningtensorflow
  24. Grow your brain! Learning is key in brain development. Of course what aspects and how much of brain function improve as a result depends on the mode / type / content … tedvideoyoutube
  25. Find huge files in linux Switching to SSD’s for better performance and compromising on disk space can be a tough decision to make. Though nowadays with the prices of … fileshugescriptshell
  26. Google Code Jam 2014 Qualifiers Google Code Jam has always been a competition I have cherished, simply because the problems they post are brilliant and the closest to reality as … codecodejamgooglejamruby
  27. VIM Custom TabLine Hi guys, VIM has an option tabline that one can use to configure how the tab line would look like. Back when I used to use gvim, I could very easily …
  28. Creating Custom Scratch Buffers in VIM The other day I wanted to open a scratch buffer to write some temporary code and the pass it on to a repl to test it out, the idea was that I could … scratchvimviml
  29. VIM – Filter Quickfix List If you are used to using the quickfix list in VIM there are times when you want to filter certain things out of the quickfix list to narrow it down to … filterquickfixvim
  30. VIM – Toggle Ruby Hash Syntax Ruby 1.9 introduced a new json style ruby hash syntax. Although we can use this to define static hash objects and puts a limitation on the key we can … hashrubyvimvimlvimscript
  31. VIM for Multiple Projects in separate Tmux windows My development environment setup consists of several tools, however the 2 most used and essential tools that have a great impact on my workflow are … tmuxvimvimlvimscript
  32. ActiveRecord like where for array of hashes in ruby Edit : Updated the code as per the suggestions made by Masklinn. Recently I was working on Issue#1 of my Soulmate Rails gem, which is a very simple … railsrubysoulmatesoulmate_rails
  33. VIM Markify Recently I picked up some minor configs for ruby from Time Pope’s vimrc. Here’s the code : autocmd FileType ruby \ if expand('%') … signsvim
  34. VIM Better FoldText Update 3: Improved the code for extraction of fillchar from fillchars option and taking foldcolumn into account. Update 2: Fixed the regex for … foldfoldingvim
  35. VIM Table Mode UPDATE 2: Released v 2.0 of the plugin. Check github for details. UPDATE : I have added more features to the original plugin, showcasing some core … modetabletable-modevim
  36. Amuse – ZSH Theme Amuse is a simplistic theme I built for the popular shell ZSH that I use. Features : Shows git prompt with additional support for dirty (! in red) and … promptthemezsh
  37. Vim Railscasts Colorscheme VIM in my muscle memory is one of my popular posts, the day I published it, I attracted over 3,200 unique views in a single day, mostly from Hacker … colorschemerailscastsvim
  38. Soulmate Rails UPDATE : I released the first stable version 0.2.1, it should be usable as is without any issues. One of the most common things to do in any standard … autocompleteautocompletionrailsredisruby
  39. Tmux Powerline Special Characters Issue Tmux is a terminal multiplexer like Screen on steroids. It is faster, slicker and much more easily extendable than screen. For why you might want to … powerlinetmuxubuntu
  40. Ubuntu on Macbook Pro As I have mentioned before ([Magician Chrome makes RAM disappear][1]), I had been facing several issues with Mac OSX. I use vim extensively, and so I … macbookmacbook proubuntu
  41. Magician Chrome makes RAM disappear Recently I have been experiencing a very weird issue on my Macbook Pro, I have Lion v10.7.4, with a decent configuration : 2.8 GHz Intel Core i7 … chromememoryram
  42. VIM in my muscle memory I have been an ardent VIM user for almost 4 years now, and it’s been a while since I have been wanting to write this Blog. My motivation is not … rubyvim
  43. Artificially Intelligent Spyware There has been tremendous advancement in the domain of Artificial Intelligence (AI) and Machine Learning (ML) in the recent years. Although people … AIArtificial IntelligenceMachine LearningMLSpyware
  44. Getting started with Ruby – TOC Hi, I have written a series of articles (in several parts) in an attempt to guide beginners to get comfortable with Ruby. This article is my attempt … beginnersguiderubytoctutorial
  45. MongoMapper Plugin – Versionable There was a requirement at one of our projects here at Artha42 Innovations Private Limited that our Mongo Mapper documents have inherent versioning so … mongomapperpluginrubyversionable
  46. Calculating Hashes Showcasing how to calculate hashes in Java, C# and Ruby! Java : public String getHash(String message, String algorithm) { try { byte[] buffer = … c-sharpc#csharphashjava
  47. Getting started with Ruby – Part 6 After having covered most of the basics of Ruby, lets get started on an actual problem, just like I had promised in my previous article – Getting … alienbeginnerslanguageproblemruby
  48. Getting started with Ruby – Part 5 Hi in my previous article Getting started with Ruby – Part 4 I covered Hashes & blocks. Today I will take you through the various forms of loops … all?any?beginnersbreakcollect
  49. Getting started with Ruby – Part 4 – Hashes & Blocks In my previous article Getting started with Ruby – Part 3 I started with Collections and covered basics of Ranges & Arrays. Like I mentioned … beginnersblockshashesruby
  50. Getting started with Ruby – Part 3 – Collections, Ranges & Arrays In my previous article Getting started with Ruby – Part 2 I introduced you all to Ruby & its philosophy and I started out with data type classes … arrayarraysbeginnerscollectionsrange
  51. Getting started with Ruby – Part 2 – Introduction & Philosophy Hi again, this is part 2 of my series of articles to help beginners getting started with the Ruby programming language. At this point of time I would … beginnersintroductionintruphilosophyruby
  52. Getting started with Ruby – Part 1 Before we get started with Ruby, let me first give you a brief on who I am, I am Dhruva Sagar, a software engineer having a little over 4 years of … beginnersruby
  53. Moving to Ubuntu I have worked on quite a few Linux distros, Redhat, Knoppix, BackTrack, PHLAK, ubuntu, etc. But most of the times I did that only to explore the realm … ubuntuwubi
  54. Cleaning data on my computer I remember my first computer which I had when I was in about 4th standard(1) (1)About 15 years back if I remember correctly . It was a real source of … computerfunnyjoke
  55. Calculating a MD5, SHA1, SHA256, SHA384, SHA512 Hash in C# Following up on my Creating a Hash in Java post, here I am giving another implementation through a simple function for calculating a Hash in C#. … c#csharphashmd5sha1
  56. Calculating a MD5, SHA1, SHA256, SHA384, SHA512 Hash in Java Hi, today I will show you with examples how to evaluate Hashes in Java programming language. I hope this information comes in useful for many people. … hashjavamd5sha1sha256