I use flakes for managing my homeserver that’s running NixOS. The non-flake version of Nix uses channels, and any nix shell created on a system that doesn’t use flakes also seems to inherit package versions from whatever channel the system is using. For my flake-based setup, I’m using the unstable channel to import nixpkgs. However, the nix shell appears to use some really old…
I discovered recently that Oracle Cloud has 4-core arm64 instances in their free tier. So I signed up for an account and set out to get an instance for myself. However, the instance creation failed stating that my chosen region did not have any capacity left for additional instances. A little bit of googling turned up this:…
I use Nix and Devenv to manage dependencies and build environments for all of my hobby projects. While I got the tutorial server up and running in a terminal relatively quickly, I had some trouble figuring out how to invoke it as a CLI from Claude Desktop’s MCP configuration. During development, I typically run nix develop --no-pure-eval to enter a devShell and then have access to all the…
My employer has a few LLMs available internally via OpenAI-compatible endpoints. They also have an internal-only VSCode extension that’s configured to use those endpoints and provide code completion and a chat interface. Unfortunately, I don’t like using VSCode, plus I find the extension’s interface to be rather limiting. I haven’t fully embraced using an LLM as a coding…
Tail wags through the air, butt follows closely. Pure joy. I’ve been having a rough few days. My partner thinks it’s because of the Daylight Savings switch, and maybe she’s right. It’s true that I’ve had similar rough patches at around the start of spring, and historically I’ve attributed them to the sudden change in the pace of life around me. Being an…
One of my favorite quotes of all time is this definition of insanity: Insanity is doing the same thing again and again and expecting different results. It’s thinking - “this time it’s going to be different”. I don’t know where the original quote comes from (Benjamin Franklin? Gandhi?) but I heard it for the first time from a villain in the game “Far Cry…
I ran into several issues when trying to create a Fedora CoreOS template on Proxmox using Packer, so here’s how I got it working. Overview Using Packer, we will boot a VM with a CoreOS live cd ISO attached. We will then run coreos-installer to install CoreOS to a disk attached to that VM, and finally Packer will convert that VM to a template. The Packer VM needs to boot up with…
The main terraform provider for proxmox is not very polished. It works, but doesn’t appear to perform any validation of your inputs, and also does a terrible job of communicating errors thrown by proxmox. Consequently, any time you make a mistake in your resource, you’re likely to see an extremely unhelpful message that says: 400 Parameter Validation failed When this happens, add…
While attempting to build an Ubuntu 22.04 image using Packer, with the build running on a Proxmox VM, I got the following error: ==> proxmox.ubuntu_k3s: Post "https://<ip>/api2/json/nodes/proxmox/storage/local/upload": write tcp <local ip>-><ip>: write: broken pipe ==> proxmox.ubuntu_k3s: delete volume failed: 501 Method 'DELETE /nodes/proxmox/storage/local/content/' not implemented Build…
Recently, I had a hell of a time figuring out how to handle authentication for running Terraform against Google Cloud. Most of Google’s documentation is way more complicated and uses a lot more jargon than the corresponding AWS documentation. Additionally, most of the existing blog posts I could find by other users talked about creating a service account and then downloading its key, and…
Today, I found myself needing to change the master/leader node on my k3s cluster. Or rather, I found myself needing to enable full-disk encryption on the hard disk attached to the master node. After trying and failing to add luks encryption to one of the worker nodes (it wouldn’t finish booting up after) I ended up starting from scratch with a fresh OS installation on all the workers. I…
I found it rather tricky to set up a Traefik TCP ingress for connecting directly to a PostgreSQL server running inside Kubernetes. There are a few moving parts, and they all need to be right for the ingress to work, but most resources I found on the internet left out one (or more), so here they all are in one place. While I’ve only tried this with PostgreSQL, it’s likely that other…
In the last part, we wired up the backpack and all drives. Now, you might be tempted to keep building and - say - wire the toolhead. If so, you may skip to the next part of this build log. However, I would strongly recommend taking a break to turn on your printer and verify both the assembly as well as your wiring. You’d be surprised at the issues you find, ranging from something as simple…
⚠️ DISCLAIMER - Incorrect wiring can pose a serious health risk. The instructions in this post are my effort to be helpful, but they should not be taken as expert device. I accept no responsibility for any damages you might experience by following these instructions. You could choose to finish all wiring before turning on your printer. I recommend that you not do this, and instead test things…
Take a look at the eDrawing to see where everything goes inside the backpack. Mounts Let’s get all the mounts attached first. UHP power supply Insert 1x M3 tall heatset insert into each mount as shown below Figure 1: First heatset insert installed into uhp mounts Hold your power supply next to a mount to figure out which of the two adjacent holes the second heatset insert needs to go into.
For the toolhead, you have a choice of extruders and hotends. I chose to use a Mosquito (clone) and Sherpa Mini. I also chose to use the (optional, but strongly recommended IMO) Mosquito Net to keep your hotend rigid. Toolhead heatsets Insert tall M3 heatset inserts into the holes shown below: Figure 1: Heatset inserts for top side of the toolhead If you’re using the mosquito net, insert…
The gantry has four tensioners: two on the stationary X rails and two on the Y. The X tensioners are identical (not mirror images) to each other and the Y tensioners are identical to each other. Printed parts are identical for all four tensioners. X tensioners and Y cross BOM For each tensioner, you’ll need the following: Printed parts 2x Long M3 heatset inserts (not pictured) 2x Short M3…
Let’s build the gantry motors and idlers. There are two versions: Short Motor, Tall Idler and Tall Motor, Short Idler. Tall Motor, Short Idler BOM 1x Printed parts (mind you get the right accent part, the “ears” are slightly shorter) 1x Printed pulley alignment jig 1x Motor (missing from the picture below) 2x 12mm pulleys 2x 625 bearings 6x M4 heatsets 1x M5x35 shaft (missing…
In this part, we’re going to build and install the frame that the bed sits on. We’re also going to install the bottom plate, feet, tighten the Z tensioners, and bolt them in. Let’s get started. Building the bed frame Take a look at the eDrawing and note the orientation of the four extrusions that make up the bed frame. The two extrusions with holes through them sit…
Installing the Z belt Pick a corner to work on. Take your roll of 12mm belt and unroll it so that you have about 4 feet of belt to work with. Feed the end down through the Z idler: Figure 1: Z belt fed through the idler Feed it through the bed lifting part: Figure 2: Z belt fed through the bed lifting part Feed it up through the drive, over the pulley and back down:
BOM For each Z drive, you will need: Printed parts Laser-cut stainless steel parts, bottom and top Motor 4x M4x45 SHCS 2x M3x45 SHCS (the eDrawing said M3x40 when I built mine, but those were too short) 2x M3x8 SHCS 2x M3x8 Flat-head or Pan-head tapping screws 1x Worm gear 1x Spur 1x Thrust bearing 1x 5mm x 60mm steel shaft 3x 625-2RS bearings 1x 9mm toothed pulley 2-3x M5 x 3mm spacers 1-4x M5 x…
Preparing the rails After you unpack the rails, pour some 99% Isopropyl Alcohol into pot/vase/similar container, about 5-6 inches off the bottom. Put zip ties into both ends of each rail, slide the carriage down to one end and stand the rails inside your container. Ensure that the carriages are fully submerged, leave for about 24 hours. Afterwards, lift one rail at a time, slide the carriage back…
After sourcing all the parts for an Annex K2 Summit Edition, I finally started building it. I’m documenting my build process here along with pitfalls I ran into and how I overcame them. Preparing the extrusions I chose to get unprepared extrusions, so I had to drill and tap them myself. The printer’s repository has STLs with jigs and fixtures for drilling if you’re using a hand…
I ran into some issues getting a sample OpenGL application with GLFW working with Zig on Windows, so I figured I’d write a short post outlining what’s needed to get it working. Build GLFW Download GLFW and build it from source. The pre-built windows static libraries available for download are compiled with a flag that is incompatible with the way Zig builds libraries. I discovered this…
I ran into a bit of trouble getting a custom property defined in a godot-rust project to show up in the Godot editor. It finally turned out that my difficulties were unrelated to Godot or godot-rust and actually a library misconfiguration error (I renamed my library’s name in Cargo.toml and forgot to fix the .gdnlib) but in the process I discovered that godot-rust’s documentation is…
After putting about two weeks of effort into creating Swift bindings for the Godot engine, I’ve decided to abandon the idea. Here’s what I got working: Use api.json to generate Swifty wrappers around Godot’s classes Register custom classes that extend a Godot class (godot-cpp does this) or have a Godot instance as an attachment (godot-rust does this) Register methods associated…
Yesterday, I started playing around with Swift 5.2 on Linux (Ubuntu 20.04). This is mostly motivated by my desire to see if I can create a Swift module for the Godot engine. I started - as you’re supposed to - by using the Swift Package Manager to create a new package. The final form of this package is supposed to be a dynamic shared library, one that will be loaded by the game engine.
For about half of my life, I’ve felt like an outsider looking in. As far as I can tell, this started back in middle school when my parents moved me from one school to another. In my previous school I’d been the popular kid and a teachers’ pet, so I naively took all that bluster and confidence with me to the new school. This ultimately culminated in a dressing-down by the class…
> If you do a good deed and nobody knows, does it count? I hate litter, and as a kid I even hated people who littered. The streets of India have a lot of trash on them, and I would go out of my way to pick up large pieces of trash and deposit them in trash cans. I wonder, is all the trash I picked up tallied in a ledger somewhere?
We get caught up in our daily lives. Exercise. Bills. Friends. Commitments. The pursuit of happiness. And slowly but surely, the world gets smaller. And smaller. And smaller. And smaller. And it’s not as obvious as the pictures above. You’re busy living life after all. Pursuing the dream. Work hard today, and you will get everything your heart desires.. somewhere down the line.…
After writing my previous post about cleaning up my Continuous Deployment solution for deploying this site, I decided to experiment with AWS’s CodePipeline to set up my own home-grown pipeline to build and deploy the site instead of relying on CodeShip. Infrastructure setup For all its features, AWS doesn’t make it easy to set up and tweak things in a secure fashion. The recommended…
I remembered recently that this blog has been sitting around idle for a while. I figured that the continuous deployment solution I’d set up (CodeShip + Amazon S3) might’ve died by now (well, the CodeShip part anyway) but no, it’s still around. Those folks seem to be going strong, much to my surprised and delight. However, a lot has changed in the past two years. For one, Github…
Getting OpenCV 3 up and running with Python 3.5+ on Ubuntu 14.04 is a pain in the ass. For the most part the instructions here are the same as in this guide, with a few changes needed specifically for Python 3.5+. I’m going to assume that you already have pyenv and pyenv-virtualenv installed for the purpose of this guide. Install prerequisites sudo apt-get update sudo apt-get install -y…
With the new root protection feature in El Capitan, it’s hard to install pip packages into the system python. Besides, it’s generally considered bad practice to clutter up your system python’s library with packages. Most developers prefer to set up their own virtualenv for python and then install packages into that local environment. I did the same for setting up Jupyter Notebook…
For the past few years I’ve been looking forward to an extended stay in the States. I had a long list of things I’d do, people I’d meet, places I’d see, dishes I’d try, etc. I’ve been here for about six weeks now, and the only thing (well, one of two things) that’s consistently on my mind is.. the next quiz. The next homework. The assignment that’s…
Time to pull back the veil a bit. I’ve been absent for the past few months because I couldn’t write about what I was up to. And that’s because I was busy applying for college, getting admitted and then working out the logistics of paying fees, finding a place to stay and moving to a whole new country. Now that all that is done and I’m sitting in a lounge on campus, I can…
In my last post I talked about how members of a community are expected to follow some basic rules in order to make that community thrive. And that’s one of the requirements for a successful community. And what do members of a community get out of said membership? A sense of belonging. Humans are social animals by design. It is in our nature to thrive in a group of like-minded individuals…
There was a time - back in college - when I could see the world in black and white. Things people did could be unilaterally classified as “good” or “bad, and anyone doing even a single bad thing was equivocally bad. A friend of mine rebuked me for taking such a hard stance; she insisted that one could not look at the world in monochrome, that things only exist in shades of grey.
Recently a friend tried to cheer me up by asking me to imagine him dancing with Alia Bhatt. In retrospect it would’ve worked, but at the time I had no clue who Alia Bhatt is, so it didn’t really work. Upon looking her up and see how cute she is, I set out to watch the three newest films she’s been in: 2 States, Humpty Sharma Ki Dulhania and Highway. After watching the first two…
Figure 1: Why do I have so many photos?? Don’t worry, this is not an “impressions” piece or a review. There will be no spoilers. I just wanted to remark upon something I found odd to start with but accepted upon deeper thought. As you probably know, the game has Tell Tale-style decisions that supposedly affect what you experience further in the game (although as several have…
I tend to use the word “weird” to describe anything that I find somewhat strange or atypical. Is it raining at an odd time of the year? “Hey, that’s weird!”. Is that apple unusually big? “Wow, that’s weird!”. Is your name something I haven’t heard before? “That’s a weird name!”. However, it looks like the people I hang out…
They say that it’s better to be a small fish in a big pond than a big fish in a small pond. That way you’ll look around, see all the bigger fish and be inspired to better yourself so that you can become one of the big fish and then move your family to a house in an even bigger pond. But what do you do if you’re a kangaroo in a pond?
A cabin out in the woods. No, this is not a setup for a meta-horror flick. I actually want a cabin of my own out in the woods. Preferably with a reasonably fast internet connection so that I can work remotely. And preferably at least a couple of hours drive away from the nearest town. Why do I want an abode out in the wilderness? It’s not that I’m a recluse who abhors all human…
Spoilers ahead. It’s not often that a scene from a movie gets stuck in my head. Over 20-plus years of watching movies, there have been only a handful of such instances. Keanu Reaves towards the end of The Matrix, holding up his hand and stopping bullets. Jim Carrey, standing at the edge of his known world in The Truman Show, struggling with doubt and the reassuring words uttered by the…
At my previous company, I would typically wake up at 9 on a work-day. At my current company, I’m forced to wake up at 6.30 instead so that I can beat the morning rush hour and reach the office in a timely fashion. As a result, my brain is typically zonked from sleep deprivation by the time I leave the office and I find my thoughts wandering down weird paths in the cab ride back home.
Amazon’s office happens to be pretty far from my place of residence. The distance via the shortest route is about 24 kilometers, the distance via the fastest route is 28 kilometers, and during non-peak hours it takes a car about 45 minutes to cover that distance on Bangalore’s roads. During peak hours, it typically takes more than twice as a long. To help its employees commute easily,…
As most of my close friends know, I’m a big fan of post-apocalyptic scenarios. If I saw a zombie shuffling towards me with bits of gore sticking out of its mouth and its entrails trailing on the ground, I’d probably yell for joy. No surprise, then, that a fair amount of my dreams (the sleeping kind) involve similar settings. What was unusual about last night’s dream was that it…
Today my teammates gave me some presents as a farewell gift. And a couple of them pressed me to give a speech. Since this was just a group of friends, I coudln’t exactly give the speech I have planned for the actual, official farewell. I demurred several times but they kept insisting, so I gave in against my better judgement. I’m sure they were expecting me to narrate a humorous…
Chandrika - a college junior and a dear friend - visited Bangalore over the weekend for some work. Since we haven’t met since graduating from college four years back, we naturally decided to touch base once her work got done. We spent a couple of hours at a restaurant called “Punjabi by Nature” in Koramangala catching up. I was taken aback back how much she’s changed, both…