<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>sreeraj.dev</title><description>DevOps, Programming, and Treks</description><link>https://sreeraj.dev/</link><item><title>My Distributed Dev Workflow</title><link>https://sreeraj.dev/distributed-dev-workflow/</link><guid isPermaLink="true">https://sreeraj.dev/distributed-dev-workflow/</guid><description>How I run my dev workflows across a Macbook Pro, a Hetzner instance and my phone, stitched together with tmux, Tailscale and Claude Code.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Converting a multipage pdf to tiff</title><link>https://sreeraj.dev/converting-a-multipage-pdf-to-tiff/</link><guid isPermaLink="true">https://sreeraj.dev/converting-a-multipage-pdf-to-tiff/</guid><description>Converting a multipage pdf to tiff</description><pubDate>Thu, 08 Feb 2024 08:35:40 GMT</pubDate></item><item><title>Kuari Pass Trek</title><link>https://sreeraj.dev/kuari-pass-trek/</link><guid isPermaLink="true">https://sreeraj.dev/kuari-pass-trek/</guid><description>After doing the Deorital-Tungnath hike, it was time to get back to the trails. One of my friends at the time wanted to do one as well, so we decided to do Kuari Pass. Kuari Pass is suited for first time hikers, only having three days of hiking and 2 nights of camping in the woods. It&apos;s also a rewarding trek in terms of visuals, passing through beautiful forests, with beautiful snow capped peaks in the background. We did it in the first week of March, so we got to experience some snow at higher a</description><pubDate>Sun, 20 Aug 2023 12:06:59 GMT</pubDate></item><item><title>Flashing an ESP8266-01</title><link>https://sreeraj.dev/flashing-esp8266/</link><guid isPermaLink="true">https://sreeraj.dev/flashing-esp8266/</guid><description>Flashing a ESP8266? Follow this guide written by a beginner for beginners.</description><pubDate>Fri, 04 Aug 2023 09:20:24 GMT</pubDate></item><item><title>Benchmarking UUID v4 vs ULID</title><link>https://sreeraj.dev/uuid-vs-ulid/</link><guid isPermaLink="true">https://sreeraj.dev/uuid-vs-ulid/</guid><description>Benchmarking UUID against ULID.</description><pubDate>Wed, 22 Feb 2023 07:03:20 GMT</pubDate></item><item><title>UUID vs Serials</title><link>https://sreeraj.dev/comparing-indexes-in-postgres-for-different-column-types/</link><guid isPermaLink="true">https://sreeraj.dev/comparing-indexes-in-postgres-for-different-column-types/</guid><description>Benchmarking UUID and Serial Values in Postgres and Python.</description><pubDate>Wed, 21 Dec 2022 17:12:14 GMT</pubDate></item><item><title>Adding Basic Authentication via NGINX in Kubernetes</title><link>https://sreeraj.dev/adding-auth-to-kibana-via-nginx/</link><guid isPermaLink="true">https://sreeraj.dev/adding-auth-to-kibana-via-nginx/</guid><description>Basic Auth via NGINX in kubernetes</description><pubDate>Wed, 26 Oct 2022 14:24:31 GMT</pubDate></item><item><title>Django Kafka Integration</title><link>https://sreeraj.dev/django-kafka-integration/</link><guid isPermaLink="true">https://sreeraj.dev/django-kafka-integration/</guid><description>Django Kafka Integration using Faust.</description><pubDate>Wed, 26 Oct 2022 08:31:33 GMT</pubDate></item><item><title>Routing stuff using traefik/nginx</title><link>https://sreeraj.dev/routing-stuff-using-traefik-nginx/</link><guid isPermaLink="true">https://sreeraj.dev/routing-stuff-using-traefik-nginx/</guid><description>Using traefik/nginx as a Reverse Proxy.</description><pubDate>Fri, 15 Apr 2022 09:52:25 GMT</pubDate></item><item><title>Setting up OpenTelemetry in Django gUnicorn ASGI</title><link>https://sreeraj.dev/setting-up-signoz-opentelemetry-in-django-gunicorn-asgi/</link><guid isPermaLink="true">https://sreeraj.dev/setting-up-signoz-opentelemetry-in-django-gunicorn-asgi/</guid><description>Setup OpenTelemetry for Django running on gUnicorn ASGI.</description><pubDate>Sat, 29 Jan 2022 16:59:50 GMT</pubDate></item><item><title>Using sidecar containers in k8s</title><link>https://sreeraj.dev/sidecar-containers/</link><guid isPermaLink="true">https://sreeraj.dev/sidecar-containers/</guid><description>Pods are the basic unit of deployment in k8s and in a typical k8s setup, your application container is probably running inside a pod. Pods themselves are containers, and you can run multiple containers sharing the same volume and network interfaces of the pod concurrently. This is called the sidecar pattern.
We run an emr django application connected to a RDS postgres database using RDS IAM auth. To make this work, we run a cronjob which generates a token every 10 minutes which is used by the a</description><pubDate>Sat, 22 Jan 2022 12:48:06 GMT</pubDate></item><item><title>Setting up AWS Amplify for a Next JS SSR app with Terraform</title><link>https://sreeraj.dev/setting-up-aws-amplify-for-a-next-js-ssr-app-with-terraform/</link><guid isPermaLink="true">https://sreeraj.dev/setting-up-aws-amplify-for-a-next-js-ssr-app-with-terraform/</guid><description>Setting up Amplify for nextjs SSR via Terraform</description><pubDate>Fri, 21 Jan 2022 08:57:54 GMT</pubDate></item><item><title>Kedarkantha Trek</title><link>https://sreeraj.dev/kedarkantha-trek/</link><guid isPermaLink="true">https://sreeraj.dev/kedarkantha-trek/</guid><description>Summary of kedarkantha trek</description><pubDate>Tue, 11 Jan 2022 16:05:43 GMT</pubDate></item><item><title>Reducing our Deployment times by 87%</title><link>https://sreeraj.dev/reducing-deploy-times/</link><guid isPermaLink="true">https://sreeraj.dev/reducing-deploy-times/</guid><description>Leveraging github actions by using state to determine whether to build a dockerimage or not.</description><pubDate>Mon, 03 Jan 2022 17:41:31 GMT</pubDate></item><item><title>Moving from AWS Loadbalancers to Nginx</title><link>https://sreeraj.dev/nginx-ingress-k8s/</link><guid isPermaLink="true">https://sreeraj.dev/nginx-ingress-k8s/</guid><description>We run a k8s cluster for our healthcare EMR application. At the time, we only had one public facing service, so we used a Kubernetes Service of Type LoadBalancer.
resource &quot;kubernetes_service&quot; &quot;django&quot; {
metadata { name      = &quot;django&quot; namespace = kubernetes_namespace.app_namespace.metadata[0].name annotations = tomap( { &quot;service.beta.kubernetes.io/aws-load-balancer-ssl-cert&quot;         = var.django_acm_arn, &quot;service.beta.kubernetes.io/aws-load-balancer-ssl-por</description><pubDate>Sat, 18 Dec 2021 11:18:35 GMT</pubDate></item><item><title>Chopta Chandrashila Trek</title><link>https://sreeraj.dev/chopta-chandrashila-trek/</link><guid isPermaLink="true">https://sreeraj.dev/chopta-chandrashila-trek/</guid><description>Pro Tips
1. Add/plan for buffer days for bad weather. Summit hikes usually go to the highest altitude possible, and the weather at those places can change within minutes. 2. Prebook your hotels/hostels. Internet connectivity is spotty. Use hotel aggregator apps to look for hotels and call them up. Sometimes you might get a cheaper rate. Ask if geyser and other facilities are available before booking. 3. Figure out multiple ways to get to your base village of the hike. If you miss your bus, k</description><pubDate>Sat, 13 Nov 2021 17:36:33 GMT</pubDate></item><item><title>Django Bulk Save - 2 Fast 2 Big</title><link>https://sreeraj.dev/django-bulk-save-2/</link><guid isPermaLink="true">https://sreeraj.dev/django-bulk-save-2/</guid><description>Continuing from Django Bulk Save, I wanted to test how would the copy_from function perform when I scale to over a million records.
The copy_from scales incredibly well, it took 4 seconds to write 1.6 million rows.
The rest of the article strays away from the actual topic.
I decided to play around with different CSV libraries and figure out what would be the most efficient library to use when you have a file this large. You&apos;d probably never encounter a scenario where you&apos;d have to parse a mil</description><pubDate>Thu, 15 Jul 2021 20:48:33 GMT</pubDate></item><item><title>Streaming through millions of records trying to match an encrypted field : Java</title><link>https://sreeraj.dev/java-streaming-through-millions-of-records-trying-to-match-an-encrypted-field/</link><guid isPermaLink="true">https://sreeraj.dev/java-streaming-through-millions-of-records-trying-to-match-an-encrypted-field/</guid><description>A year ago I was working on a really tiny part of a large non-consumer facing product (idk what&apos;s the correct term). I can&apos;t divulge much, I have done a lot of illegal things like calling a politician an idiot on social media, so I don&apos;t want to add more to the list.
Imagine you ran an ice cream subscription service, and you had a lot of people on the payroll tasked with managing renewals for subscribers. Let&apos;s call them agents. You had an online portal for customers to manage/renew their subsc</description><pubDate>Thu, 15 Jul 2021 20:48:12 GMT</pubDate></item><item><title>Connecting Django to RDS via pgbouncer using IAM auth</title><link>https://sreeraj.dev/connecting-django-to-rds-via-pgbouncer/</link><guid isPermaLink="true">https://sreeraj.dev/connecting-django-to-rds-via-pgbouncer/</guid><description>Setting up the infra
We primarily use a django backend with RDS postgres in a kubernetes cluster for production environments. We were trying to setup an environment which would be HIPAA compliant and secure as well, as well as keep complexity to a minimum in the backend layer.  We decided to go with IAM authentication to connect to RDS for the django application.
The tricky part was to figure out how we would add pgbouncer between RDS and django to manage connection pooling issues.
We setup a</description><pubDate>Sat, 10 Jul 2021 10:39:59 GMT</pubDate></item><item><title>Django Bulk Save</title><link>https://sreeraj.dev/django-bulk-save/</link><guid isPermaLink="true">https://sreeraj.dev/django-bulk-save/</guid><description>Using bulk_create? You could switch to copy_from if your usecase fits.</description><pubDate>Wed, 07 Jul 2021 21:54:43 GMT</pubDate></item></channel></rss>