Guess what the following lines of JS would evaluate to (no cheating with the console!): 
 'hello' . length 
 
 '🌝' . length 
 
 '🇮🇳' . length 
 
 '👨👩👧👦' . length 
 
 'दरबार' . length 
 It’s okay, take some time. 
 … 
 Done? 
 … 
 Alright, time for the grand reveal 🥁: 
 'hello' . length // 5
 
 '🌝' . length //…
Proxmox 9 is out and I wanted to repurpose my dusty, disappointment of an XPS 15 once again with the new release. I wanted to configure it such that the display turns off after a while to conserve power and I can put it in clamshell mode (aka lid closed). Turns out this is more straightforward than I imagined it’d be. The following should also work on other Debian based systems, I think.…
I’m getting ready to archive my 2000+ music track library on Spotify (very legit of course) and I wanted to do a test between some popular audio quality/bitrate formats to see what would work best for my current needs and near-future needs. So, I grabbed 3 different audio files for the same track and started playing each individually in VLC. But, this was getting quite cumbersome to…
Hallelujah! Apple seems to have finally addressed a long-standing peeve of mine with macOS Tahoe, iOS and iPadOS 26 Developer Beta — a proper dark mode toggle for PDF reading in the Preview app. 
 On macOS, this is under the View menu as an option called Use Dark Appearance for PDF . On iOS and iPadOS, it’s under the meatballs (3-dots) overflow menu and more pleasantly named as Dark…
I am a happy user of Tailscale. For the most part, it’s painless for my personal use of creating a VPN to connect all my personal and home devices. Moreover, it has this neat feature that turns a designated device into an exit node , which is like having your own home VPN gateway. Once I connect to Tailscale via my exit node, it’s as if I’m browsing the web from the comfort of my…
I took note of something I configured long back while I was doing the migration of AdGuard Home server to my Raspberry Pi running OpenWrt. It had to do with some suspicious pings that my two TP-Link access points (formerly my routers) were making to tp-link.com , even though I disabled any such explicit setting for telemetry collection. I mean, it might not be anything nefarious (I dunno, internet…
Witcher 3 was released on 19th May 2015, exactly 10 years ago today. That’s a long way to say: I’m friggin’ old. 
 In a couple of hours, exactly a decade ago, many of you would be getting ready to hit the New Game button in The Witcher 3: Wild Hunt. ⚔️ Thank you to everyone who made this launch a wildly happy memory that will stay with us forever. ❤️
 Now tell us, what’s…
I’ve been putting off updating OpenWrt running on my Raspberry Pi 4 for a while now because it seemed daunting. There is not a straightforward option in the LuCI interface to do such an upgrade (yet). Even if you put up with downloading the image file and flashing it manually, you’d keep the core config but lose all the additional packages you installed via opkg and would have to…
During a recent trip down the rabbit hole, I stumbled into an alarming GitHub issue ventoy/Ventoy#2795 : 
 
 Due to the recent XZ-Utils drama I checked the code and I’m appalled. There are more BLOBS than source code. 
 
 https://github.com/ventoy/Ventoy/tree/3f65f0ef03e4aebcd14f233ca808a4f894657802/cryptsetup 
…
I have renamed the TIL section to Notes. 
 I had the bright idea to start TIL after being inspired by the sections on the sites of Julia Evans and Simon Willison . The problem is, the Today part of the Today I Learned section became too dogmatic for me to publish the drafts whenever today passes by. 
 While I’m sure it won’t make a difference if I post it today or post it a…
I recently built and deployed a code playground component to render HTML+CSS+JS examples in my blog posts that enhances them with a live preview of how they’d look in tandem. Think of it as a read-only version of CodePen/StackBlitz/CodeSandbox embeds, but 10x cooler because it requires zero JavaScript and it’s built as a shortcode using Hugo’s templating features. 
…
While scrolling my Bluesky feed, I happen to chance upon @intenttoship.dev’s update about Blink shipping a CSS stretch sizing keyword. I was a bit puzzled at first since I totally ignored the sizing part of the announcement and was wondering why on earth are they posting about something that’s already shipped? 
 After patiently reading the full announcement, I realized this is…
From MDN : 
 
 It [@scope] allows you to define a precise scope inside which your selectors are allowed to target elements. 
 As of writing, @scope is supported in modern Chrome and Safari versions while Firefox implementation is behind a flag . 
 Let’s say we want to add a thick green border around all the images in an <article> with the following HTML structure except for…
Update (2025-02-28): Because of the way I’m accessing the worker via Caddy and since blog is being routed via Cloudflare DNS/Cache, the Cache-Control headers returned by the worker seems to be getting ignored. I updated the Caddy section to hardcode a Cache-Control header for now, which seems to work but this could be done better. 
 
 OpenGraph protocol defines the og:image meta…
I was looking into setting up Husky + lint-staged for a new Deno library that I recently open-sourced, when I came across a project called Lefthook . Unlike the duo, this is a single Go binary which can manage git hooks and run commands against staged files. Also unlike the duo, this is agnostic of the project language and doesn’t require having a package.json file. This intrigued me—two…
I’ve been on the hunt for an alternative desktop client to stream my Spotify library. You see, like countless others, I pay Spotify the monthly fee just to listen to music ad-free—that’s it. I don’t expect anything else from them other than ensuring the music playback is stellar and that I have access to their vast library all the time. Sure, the recommendations and playlists are…
We can quickly turn a FormData object into a plain object with Object.fromEntries() , which was added as part of ES2019 spec 1 and is available in Node since 12.x 2 as well as in all modern browsers: 
 const f = Object . fromEntries ( formData );
 console . log ( f );
 // {
 // name: 'Jon Doe',
 // country: 'USA',
 // email: 'jondoe@example.com'
 // }
 Web…
I was trying to install Windows 11 from a fresh ISO I pulled from the official site today for a throwaway VM and I stumbled into their recently added ridiculous requirement of forcing users to sign-in to their Microsoft accounts. Previously, there was an option in the UI to skip and create a local account but the ingenious product owners and salespeople decided that has to go, which I’m sure…
I’m not sure if I forgot about this or if this is totally news to me but early this year, Safari added a non-standard switch attribute to input 1 and it gives us native, toggleable switches! 
 < input type = 'checkbox' switch >
 < input type = 'checkbox' switch checked >
 < input type = 'checkbox' switch checked style = 'accent-color: firebrick' >
 gives us: 
…
macOS, iOS and iPadOS has this neat feature called Text replacements which allows you to create text shortcuts to insert some other, longer piece of text. For example, I would type xem and it’d expand to hello@example.com or xme and it’d expand to Sangeeth Sudheer . I chiefly use this to get beautiful glyphs like ↑ → ↓ ← when I’m texting or writing. If you ever typed omw while…
Safari on macOS Sequoia added a new feature called Video Viewer . You press ⌘ ⇧ R to activate it when you’re viewing a web page that has video playing like YouTube, just like how you can activate Reader mode for articles. There’s also a menu item under View if you want to use the pointer. 
 This feature came in handy last weekend while I was witnessing one of the most epic Formula…
Update (2024-11-17): Fixed the wrong sudo echo command with sudo tee . Updated Caddy installation steps to add a minimal Caddyfile which is required for Caddy to start without errors and for generating local certs. 
 
 If you’ve ever worked on multiple web projects locally, you might be familiar with the pain when it comes to serving them over localhost addresses: assigning and…
A listing of some of the things I own, use almost all the time and love talking about. 
 
 Compute
 # 
 
 
 MacBook Air 13" (M4, 2025) 
 MacBook Pro 16" (M1 Max, 2021) 
 MacBook Air (M1, 2020) 
 
 
 Desk
 # 
 
 
 Nuphy Air 75v2 (w/ Moss switches) 
 Magic Trackpad 
 Magic Keyboard (Mostly for TouchID these days) 
 Studio…
Suppose we have the following Hugo project structure and we want to exclude content/posts/private from getting published because we use this for templating and other purposes that relate to the editing experience: 
 ├── content
 │ └── posts
 │ ├── private
 │ │ └── template.md
 │ ├── hello-1.md
 │ └── hello-2.md
 ├── static
 ├── themes
 │ └── typo
 └──…
I was in need of archiving some web pages and was looking for an easy solution. Google Chrome allows exporting a web page with images and styling—even if they are loaded in via different URLs—as a single archival format called MHTML . 
 On macOS, go to File > Save Page As and select Webpage, Single File from the Format: dropdown. 
…
I noticed that the video elements in my recent post were not showing a thumbnail by default on iOS Safari. 
 











 

 
 
 

 
 
 :'( 
 
 
 
 
 Upon googling, found that this is a known issue. Luckily, there is a simple but kinda ugly fix for this by appending #t=0.001 to the src tag of…
If that abbreviation is new to you, TIL stands for Today I Learned . You usually use it as a prefix to an interesting piece of knowledge you acquired recently. For example: 
 
 TIL earth is round! 
 I noticed recently that folks like Simon Willison and Julia Evans have a TIL section in their sites. They use it to share small snippets of knowledge they happen to come upon in their daily…
Safari on macOS Sequoia added an awesome new feature called ”Hide distracting items” . You activate it, then click on the elements you don’t want to see in a website and boom—they are gone, forever… kind of. 
 
 
 
 
 Uh-oh! Your browser can't play this video. Please use a newer version of your browser.
 
 Here’s me Thanos snapping the Shorts carousel and Feed Filter…
I don’t know about you but I get tired of seeing the same font on my screens—especially when I’m coding. Which is why I procrastinate every now and then to switch up my terminal and editor fonts. I like to think it’s relatively well-known in the dev circles that you can indeed change the fonts in your IDE or your terminal. Well as it turns out, you can change fonts in your browsers too. 
…
Picture this—you are plugged in, furiously editing a config file in Vim over an SSH session to fix some issues in staging. Minutes pass by and you have keyed in some changes that might do the trick. You scroll through one last time before typing :w and Enter . Whoops! You annoyingly realize you don’t have the permissions to modify the file directly. You were supposed to run sudo vim to edit…
10 years ago, I entered college. I had decided back then that I’d continue maintaining Sabernova , my first sincere foray into blogging. But I knew it wasn’t well-built and had outstanding issues. A perfectionist mindset took over that made me hesitant to type out blogger.com . I never got around to authoring since. Over the years, I’d continue putting blogging on the back burner…
automagic 
 
/ˌɑː.t̬oʊˈmædʒ.ɪk/ 
 adjective 
 
 done with such ease and speed as to seem like magic 
 
 
 Heya! I’m Sangeeth. I hail from a magical place called Kerala , famously known as God’s Own Country . I live near the beautiful Malabar coastline surrounded by nature. 
 I geek out on tech, coding and design with a heavy bias towards web. 
…