Namaste! /ˈnʌməsteɪ/ 🙏

I write about product, engineering, insights, and learnings. 

Using Generative AI For Creating Game Assets

Generative AI can be a powerful tool for creating game assets in several ways. Here are some ways in which generative AI can assist in the creation of game assets: Procedural Content Generation: Generative AI algorithms can generate game assets procedurally, meaning they can create content algorithmically based on predefined rules or patterns. This can include generating terrain, landscapes, textures, buildings, and other environmental elements. Procedural generation allows for the creation of vast and diverse game worlds without the need for manual design of every individual asset....

May 19, 2023 · 4 min · Sourav Badami

Workspace in Golang 1.18+

Introduction Go 1.18 introduced workspace which makes life easy with multi-module development spaces. Here’s a sneak peak on how to use it and set up the develoment environment on Goland. Each module has it’s own go.mod and all the dependencies can be synced in one shot throughout the project. What’s a Golang Workspace? Workspaces in Go 1.18 let you work on multiple modules simultaneously without having to edit go.mod files for each module....

September 13, 2022 · 2 min · Sourav Badami

Heating Issues with Macbook Pro

This post covers a set of configurations and external factors to assess and fix heating issues with Macbook Pro. Some of the below might work for you and some might not. I’ve curated this list from my own hit and trial experiments. Device: MacBook Pro (16-inch, 2019) Activity Monitor Check your activity monitor and figure out the processes with max CPU and Memory consumption. Manually close some of them if you’re not using it....

May 31, 2022 · 2 min · Sourav Badami

Deploying Service to Google App Engine Using Github and Github Actions

Introduction What the hell is Github Actions and Google App Engine? GitHub Actions makes it easy to automate all your software workflows, now with world-class CI/CD. Build, test, and deploy your code right from GitHub. Make code reviews, branch management, and issue triaging work the way you want. Google App Engine is a Platform as a Service and cloud computing platform for developing and hosting web applications in Google-managed data centers....

July 23, 2020 · 2 min · Sourav Badami

Identifying Default vs Unset Values in Google Protocol Buffers (proto3)

What are Protocol Buffers / Protobuf? Protocol buffers are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages. Problem In proto3, all fields are “optional” (it is not an error if the sender fails to set them)....

June 24, 2020 · 2 min · Sourav Badami

Systems and methods for leasing equipments or facilities using Blockchain technology

Introduction A method for leasing equipment or facilities using blockchain technology may include: receiving, through a blockchain network, a request from a lessor device or lessee device to initiate an electronic lease agreement transaction between a lessor and a lessee for a select equipment or facility; verifying an identity of the lessor and the lessee via a digital identity of the lessor and the lessee stored in a blockchain shared ledger to determine if the lessor and lessee are authorized users of the blockchain network; verifying an identity of the equipment or facility via a digital identity of the equipment or facility stored in the blockchain shared ledger; and if the identities of the lessor and lessee and the equipment or facility are verified, electronically executing a smart contract for the lease agreement between the lessor and the lessee, the smart contract including rules for enforcing the lease agreement....

June 13, 2020 · 5 min · Sourav Badami

Emacs Configuration

Introduction This is my personal emacs configuration tree, continually used and tweaked since the last 365 days, and it may be a good starting point for other new emacs users. Configuration init.el (require 'package) ;; Define package repositories (add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/")) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) ;; Load and activate emacs packages. Do this first so that the ;; packages are loaded before you start trying to modify them....

June 12, 2020 · 5 min · Sourav Badami

First Contribution to Open Source

It’s hard. It’s always hard the first time you do something. Especially when you are collaborating, making mistakes isn’t a comfortable thing. We wanted to simplify the way new open-source contributors learn & contribute for the first time. Reading articles & watching tutorials can help, but what’s better than actually doing the stuff in a practice environment? This project aims at providing guidance & simplifying the way beginners make their first contribution....

November 2, 2019 · 1 min · Sourav Badami

Important Http Status Codes

HTTP_100_CONTINUE = 100 HTTP_101_SWITCHING_PROTOCOLS = 101 HTTP_200_OK = 200 HTTP_201_CREATED = 201 HTTP_202_ACCEPTED = 202 HTTP_203_NON_AUTHORITATIVE_INFORMATION = 203 HTTP_204_NO_CONTENT = 204 HTTP_205_RESET_CONTENT = 205 HTTP_206_PARTIAL_CONTENT = 206 HTTP_207_MULTI_STATUS = 207 HTTP_300_MULTIPLE_CHOICES = 300 HTTP_301_MOVED_PERMANENTLY = 301 HTTP_302_FOUND = 302 HTTP_303_SEE_OTHER = 303 HTTP_304_NOT_MODIFIED = 304 HTTP_305_USE_PROXY = 305 HTTP_306_RESERVED = 306 HTTP_307_TEMPORARY_REDIRECT = 307 HTTP_400_BAD_REQUEST = 400 HTTP_401_UNAUTHORIZED = 401 HTTP_402_PAYMENT_REQUIRED = 402 HTTP_403_FORBIDDEN = 403 HTTP_404_NOT_FOUND = 404 HTTP_405_METHOD_NOT_ALLOWED = 405 HTTP_406_NOT_ACCEPTABLE = 406 HTTP_407_PROXY_AUTHENTICATION_REQUIRED = 407 HTTP_408_REQUEST_TIMEOUT = 408 HTTP_409_CONFLICT = 409 HTTP_410_GONE = 410 HTTP_411_LENGTH_REQUIRED = 411 HTTP_412_PRECONDITION_FAILED = 412 HTTP_413_REQUEST_ENTITY_TOO_LARGE = 413 HTTP_414_REQUEST_URI_TOO_LONG = 414 HTTP_415_UNSUPPORTED_MEDIA_TYPE = 415 HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE = 416 HTTP_417_EXPECTATION_FAILED = 417 HTTP_422_UNPROCESSABLE_ENTITY = 422 HTTP_423_LOCKED = 423 HTTP_424_FAILED_DEPENDENCY = 424 HTTP_428_PRECONDITION_REQUIRED = 428 HTTP_429_TOO_MANY_REQUESTS = 429 HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE = 431 HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS = 451 HTTP_500_INTERNAL_SERVER_ERROR = 500 HTTP_501_NOT_IMPLEMENTED = 501 HTTP_502_BAD_GATEWAY = 502 HTTP_503_SERVICE_UNAVAILABLE = 503 HTTP_504_GATEWAY_TIMEOUT = 504 HTTP_505_HTTP_VERSION_NOT_SUPPORTED = 505 HTTP_507_INSUFFICIENT_STORAGE = 507 HTTP_511_NETWORK_AUTHENTICATION_REQUIRED = 511

October 26, 2018 · 1 min · Sourav Badami

Use mysql’s `replace into` safely!

Introduction MySQL’s popular replace into destination_database.destination_table (fields) select fields from source_database.source_table; query can be very dangerous if not used properly. Illustration Say, you have schema’s like: create table source_table ( field1 bigint not null, field2 int not null, field3 varchar(50) default '0' not null, primary key (field1, field2) ); create table destination_table ( field1 bigint not null, field2 int not null, field3 varchar(50) default '0' not null, primary key (field1, field2) ); Now, if you want to replace some data from source table to the destination table, you can do something like:...

September 20, 2018 · 2 min · Sourav Badami