RSSAmplifier

Blog

girishjoshi.io

Recent content on girishjoshi.io

girishjoshi.ioRSS feed ↗10 posts

Latest posts

Birds in My Backyard: Six Years of Local Photography

Over the past six years, I’ve been quietly clicking photos of birds that visit my backyard. No fancy trips to sanctuaries or national parks; just whatever shows up right outside my window or in the trees around the house. All local birds. All regular visitors. It started almost by accident. I’d notice a new bird, grab the camera (or sometimes just the phone), and try to capture it before it flew…

Tauri 2.0 AppImage EGL Issue on wayland

I recently moved one of my Tauri apps (called lithographer) from v1 to Tauri 2.0. The app builds fine locally and in CI, but the AppImage refused to start properly on Arch Linux running Hyprland. This post is about the issue I ran into and the fix I ended up with. The Problem After building the AppImage in GitHub Actions (on Ubuntu), it would not start cleanly on my Arch machine under Wayland.

Self Hosting LLMs Using Ollama

In my previous post, I set up a simple paste bin app on a local Kubernetes cluster using Kind. Building on that experience, I’ve now turned my attention to hosting Ollama; a tool to run large language models locally. There is also a good web front end for it called openweb-ui I need both of these tools as I use Ollama API’s in some python scripts and Openweb-ui when I need to search…

Used Kubernetes for the First Time

I’ve never used Kubernetes before, and for the first time, I’m using it. This is what I’ve learned so far. For this, I did not use any cloud service. I had to create a local Kubernetes cluster and deploy an application using it. This time, I had just set up a new system with Ubuntu, so this post contains the installation steps for Ubuntu instead of Fedora. Here are the steps:

Using Address Sanitizer

Address Sanitizers, available in compilers like GCC and Clang, are powerful tools designed to unearth out-of-bounds and use-after-free bugs in C and C++ programs. Given the insidious nature of these bugs—which are common, elusive, and often lead to system crashes—it’s vital to understand and employ address sanitizers. How Does Address Sanitizer Work? The Address Sanitizer acts as a runtime…

Call Rust From Js Using Neon

In a previous post Writing python extension with rust I wrote about calling Rust from Python. This time, I wanted to do the same from JavaScript. I did it using a great module Neon. It does the exact same thing that maturin does for Python. Here’s how you can achieve this. Setup Install nodejs. Install Rust You are all set to start a Neon project. Initialize a project with Not cargo 😅 but…

Writing python extension with rust

To write a python extension in rust, the easiest way is to use maturin. It supports pyo3 rust-cpython cffi uniffi bindings rust binaries as python packages. To install maturin pip install maturin The steps to create a python extension looks like bootstrap a maturin project (which is a rust project). girish in ~/rust 🕙 10:16:10 ❯ mkdir projs girish in ~/rust 🕙 10:16:17 ❯ cd projs/

Using Exiftool After Postprocessing the CR3 Files

I use Canon 200D II for photography. For post-processing I use RawTherapee and Gimp on desktop and sometimes snapseed on android. (and a shemless plug, do check out my 500px and instagram profiles if you are interested 😛). One thing I need to do everytime I upload photos to 500px is to restore the exif to the post-processed file. The main reason behind that is RawTherapee by default does not read…

Changing Python's Grammer

A couple of months back, I was tinkering with the cpython’s source code. While going through the developer documentation I came across Changing CPython’s Grammar. I wanted to try it out. Using this documentation, I modified the import statement. Here is how I did it. It’s a two step process, Grammer modification. token and parser regenration. After cloning Cpython’s repo and…

Changing Entry Point of a C Program

By default compilers (gcc and llvm) looks for the function main for the entry point. To have a different function as an entry point, --redefine-sym flag of objcopy on the object file can be used -nostartfiles and -Wl,--entry=<function name> flags of gcc can be used. compiler directive can be used as -D<function name>=main in the gcc command can be used. for example, if the c code looks like