Blog
Thoughts on architecture, engineering culture, building products, and the occasional philosophical tangent.
Bring Your Own Library
Stop waiting for your college or employer to fund your future. In today's digital economy, the most successful students and early professionals in India are building their own productivity arsenals—and you should too. Just as you wouldn't attend coll...
Docker Community Edition on macOS
If you're a developer on macOS looking to use Docker without Docker Desktop—whether due to licensing, performance, personal preference or usage of VSCode DevContainers —this guide is for you. We'll walk through setting up a fully functional Docker en...
Enterprise Applications vs Speed of Building: What Are We Trading Off?
Over the last few years, Node.js and React have become the default stack for many new applications. They’re fast to pick up, have thriving communities, and make it easy to ship an MVP quickly — especially for self-taught developers or bootcamp gradua...
VSCode DevContainer for Python Programmers
In today's article, we will explore how to set up a VSCode devcontainer for Python programmers. We will cover the basics of what is a devcontainer and why it's useful, how to create one, and some tips on how to use it effectively. What is a DevContai...
Java, SpringBoot and MySQL in devcontainer
In this tutorial, we'll walk through the steps to create a simple Java Spring console application that connects to a MySQL database running in a Docker container, creates a "test" table, and lists all the tables. We'll use a devcontainer.json file to...
Managing Multiple GitHub Accounts: A Comprehensive Guide
A lot of organisations these days use Github for hosting their repositories. With BYOD as a normal practice, everyone wants to be able to differentiate their Git access for work from the one for personal use. Here is a way in which SSH based git acce...
Installing Docker for Windows Home for Standard User
As a learning requirement during my internship recently, I was required to learn the use of Docker. Now there will be people like me, who are new to the concept of what Docker is, this is how it is explained on the Amazon Web Services page for Docker...
A Privacy Practice Reminder
As a matter of privacy, please change your user ids to not have your birth dates, other dates of relevance, in there. You will be surprised how many times a username / password is leaked. Preferably, use a password manager. Apple, Google, Microsoft ...
End of the 16gb RAM era ?
Until recently, I always bought computers with 16gb RAM. As a developer, this was important, but also necessary for optimal performance. Specially with tools like Docker, and IntelliJ needing the resources they do. I don't mention Chrome, because tha...
VSCode DevContainer setup for C/C++ programmers
This article delves into getting a VS Code DevContainer Development environment based setup for early C/C++ programmer. The environment runs on Debian, and hence is a good place to start for all School / College students too. As part of my investigat...
Web application, Need they be complex ?
Over the past few weeks, I have started learning #Python, because all the students I teach, and mentor, come with that as the background. Until recently, I was helping them learn "different" programming languages, but with the noise around AI, LLMs a...
[HttpServer Series] Authentication and Role based Authorization (RBAC)
In the final step in the process of building out an HTTP based application is to put in place a Role based Access Control mechanism. So, in this article, I am going to walk you through the 20 odd commits, over 15+ days of brooding, exploring technolo...
[HttpServer series] Static File server, and Logging
As we delve deeper into the series, today we attempt to write a Static file server, and wire it up to serve css and html pages. As with the other posts, you can see the merge request for the code change, the repository for the entire code or the seri...
[HttpServer Series] Router - improved - more tests
( Note: You can read the full series at: https://blog.mandraketech.in/series/java-http-server ) As I started working on the Static file server piece of the http server project, I realised that I did not have enough test cases for the Router implement...
[HttpServer Series] The Http Router - from scratch
( Note: You can read the full series at: https://blog.mandraketech.in/series/java-http-server ) Next up in our "No Web Frameworks, No Annotations" series, is the http router. As we look at the HttpContextHelper, we can clearly see that there are some...
[HttpServer series] Testing the server
( Note: You can read the full series at: https://blog.mandraketech.in/series/java-http-server ) As I started the journey down the test route, the first thought was to unit test the individual Handlers. This required the implementation of a HttpExchan...
[HttpServer series] Getting Started - First context (endpoint)
( Note: You can read the full series at: https://blog.mandraketech.in/series/java-http-server ) Continuing in the series, let's write the first endpoint, a "ping", that responds a "pong". The HttpServer uses the HttpHandler interface to delegate the ...
[HttpServer series] The fight of the GenAI tools - ChatGPT, Bard, CodyAI?
( Note: You can read the full series at: https://blog.mandraketech.in/series/java-http-server ) Now that the Dev Environment is ready, lets get started. In the world of ChatGPT and Bard, I do not want to start from scratch. So, I will ask both of the...
[HttpServer series] Setting up the dev environment
( Note: You can read the full series at: https://blog.mandraketech.in/series/java-http-server ) Now that there is enough context on the objectives of this series, let's get started with setting up our dev environment. My preference is to use Docker, ...
[HttpServer series] Will it support the Performance, and Scale ?
( Note: You can read the full series at: https://blog.mandraketech.in/series/java-http-server ) What about "scale" and "performance" ? SpringBoot, and all other frameworks publicise the fact that they can handle tens of thousands of requests every se...
[HttpServer series] Frameworks, Annotations, and SpringBoot
( Note: You can read the full series at: https://blog.mandraketech.in/series/java-http-server ) I recently started and did a "Proof of Concept" for an application in the space of Financial Compliance. When I used to be an active programmer in the Jav...
[HttpServer series] Who uses Java anymore ?
( Note: You can read the full series at: https://blog.mandraketech.in/series/java-http-server ) It was only recently, after the release of Java 21, that I was re-energised about the language and its potential. To give you a background, I started prog...
Masterclass for CS Industry Readiness: Building a Future in Code
Greetings, tech enthusiasts! 🚀 Are you ready to take your coding journey to the next level? I'm thrilled to announce an immersive Masterclass designed for those aspiring to excel in the CS industry. The Challenge: Building a Distributed System The c...
Installing JDK in Docker: Control your tools
When it comes to Dockerizing your applications, optimizing the installation of essential components like the Java Development Kit (JDK) is crucial. The JDK is a fundamental requirement for many Java-based applications and services. In this blog post,...
Installing NodeJS in Docker: A Lightweight Approach
Node.js is a versatile runtime that allows you to execute JavaScript code on the server-side. It's a popular choice for web development, and many applications rely on it to power their backend services. The official Node Docker images are good, but ...
NodeJS on Ubuntu and Debian in Docker
For my current development project, I wanted to install NodeJS in my docker image, with the following constraints: OS starting point that I define ( monthly patched version of Debian-LTS ) Latest security patched version of the NodeJS binaries Nee...
Handling the Change Password url
Most web applications require user identification for login. There are normally two possible strategies (build vs buy): Build your own Use a 3rd Party identity service, like Google or Okta In either of the cases, there is the need to "change pass...
systemd, crond and Docker Container
Recently, I was in a situation where I needed cron jobs to run inside my DevContainer, to mimic the behaviour of my production machine. Specifically, in the context of log rotation. And, given that the default container images do not contain the syst...
Migrating Password Managers ?
Recently, LastPass, my favourite password manager until then, reported a leak. It got me thinking. Do I need another "paid" service, or have the "other" providers caught up? So, I went down the track of evaluating Bitwarden and iCloud. Between these ...
Understanding `async/await` in NodeJS/Typescript
Here is a Typescript example of evaluating, and understanding the behaviour of async/await in NodeJS. This example, triggers multiple async calls, without waiting ( testAwait ). testAwait in turn, awaits sayHello to execute. There is some additional ...
[DevContainer] Developing on Expo using VSCode and Docker
I am a productivity freak. I want my dev environments to be the best and most predictable, so that I can share them with my coworkers easily. You can read some of the posts around using VSCode and Docker based development environments I have written ...
Typescript: String Enums, the easy way
The most common use cases for an enum are: Keys and associated non-string values Keys, and string values that match the keys Now, don't read this wrong. I just don't want to replicate everything that is written in the Typescript Handbook ( https:/...
Multiplatform (iOS/Android/MacOS/Windows) Applications in 2021
If you are one of the "Write Once Run Anywhere" advocates, here is my analysis of where the Mobile/Desktop application world is going. The world is getting divided again. The groups this time: dotNet(MS), FB/MS and Google/JetBrains. Here is what is h...
Dev env using Docker-Compose and VS Code
Recently, I have been experimenting with moving my development environment to a Dockerized version, so that I can move it closer to production. In an effort to get there, I converted my personal project ( https://www.mocsh.com ) to a docker-compose b...
Dev Env using docker-compose and VSCode - Part 2
Continuing from the previous post where we setup a docker-compose file, in this part, we will connect to the environment and do some development. Remember that just deployed a docker-compose based environment with no code, just a volume, in it. Prer...
Text Editors, IDEs and Development environments in 2021
As the world was still relishing the success of Jetbrains IntelliJ over Eclipse, and other tools, a quiet horse was making strides. Sublime Text was making inroads into a small but influential community of people doing demos in the conferences. And...
PM2 and Docker in the world of NodeJS
NodeJS applications are, by design, single threaded. Well, not in the really, and for good reason, mainly the fact that multi-threaded applications are hard to maintain and debug. Its easier to build an application that has multiple instances of a si...
[DevContainer] Debugging ExpressJS app with Docker and Visual Studio Code DevContainers
When I started my journey with NodeJS and ExpressJS, one of the things I saw in the trainings and blogs were instructions on installing NodeJS runtime. Although its trivial, but coming from the world of Enterprise application development where deploy...