Author: bharatkalluri

  • Review – Umbrel for self hosting

    Checkout the self hosting dream post for more context

    Verdict: The closest to ideal solution right now on the market.

    Pros

    • Stunning UI & UX
    • Great visuals
    • Seamless installs & updates. dependencies just work.
    • Authentication for all apps using a proxy in front of all services
    • Vision: these folks also do hardware. seem to be playing the long game. excited to see where they’ll take it.

    Cons

    • No WordPress support (blocker for me personally)
      • Umbrel operates in a single user, single app install territory. which means by philosophy multiple wordpress instances won’t work. Multi-site would work though. Which is good enough if they happen to deliver. Maybe I can make a PR.
    • No systematic & scheduled backups – as of yet at least (blocker again)
    • They seem to stress on crypto. Not a big fan.
    • No multiple user support
  • Remembering life through photos and videos

    Inspired by Johnny Harris’s video on remembering life

    We tend to remember the big events. The marriages, first bike ride, first job offer, college festival’s etc.. but there is a lot of beauty in the day to day too. The short visit to cafés, jokes at get togethers, sunsets with friends are worth being nostalgic about in their own right.

    Here’s how I go about remembering life.

    Volume

    Take a lot of pictures, you can always delete them later.

    Every once in a while, I sit and start deleting cruft from my photos. Delete ruthlessly though since you don’t want to be having 10 TB of random junk.

    iPhone also comes with a decent duplicate photo delete functionality.

    Metadata

    Metadata is key, every snap on my iPhone comes with

    • Date
    • Location
    • People recognised from contacts
    • Self added caption

    This is actually a ton of data.

    With this, a couple of queries become possible. For example

    • What is the name of the cafe we visited in allepy last April? A lookup for a picture on that date and then look up on the location of the photo will get you that data
    • When did I last visit Goa? Just go to the maps view and click on pictures from Goa.

    Some minor notes, WhatsApp seems to trim metadata off pictures. So prefer something like local send, airdrop or iMessage.

    Backup

    iCloud is pretty good , but just in case. Also see if you can do a monthly or quarterly backup of all your pictures.

  • The self hosting dream

    If mobile apps have gotten so good with local sqlite databases, why can’t we hold ourselves to the same standards for servers?

    Families or individuals should be able to self host their own software under a sub-domain, give limited access to its some folks and run the show from their servers.

    A man can dream, So let’s dream for a bit..

    In an ideal world, a customer orders a box with storage of say, a TB and a domain for a year as well.. Should have a small screen which boots up.

    Something like Umbrel home.

    On power on, the screen boots up. Post startup asks you to connect Ethernet and once done asks you to scan a QR code which will open a url for onboarding. Where it’ll ask

    • Admin username & password
    • Base domain or maybe tailscale setup for networking.

    At this point , an authentication solution like authentik is setup which all the services will use going forward.

    At this point a vpn, something like Tailscale should also be setup so that secure access is shared cross devices.

    Now the installer suggests installing some apps like Jellyfin, omnivore, vaultwarden, WordPress etc.. & guides the user to start using that website on their other devices. The App Store clearly highlights which apps support SSO and which apps don’t.

    Apps should not ask for any input from the user, similar to how mobile apps don’t ask anything from the customer while installing. Similarly during uninstalling, the app will ask if it wants to delete data along with it or not.

    App Store listings should also come with companion app information along with QR codes for installing them on other devices. The App Store should also have feedback/reviews similar to Apple App Store.

    If an app requests for file permissions, they should just pop up stating that they require access to a certain directory similar to how phones do it.

    Stuff like backups are sorted so that if the device happens to be corrupted or non functional for some reason, you should be able to connect the phone & hit restore to the latest functional version. Even backups at a app level are sorted so that restoring to a particular checkpoint is seamless & can be done through admin panel.

    Upgrading storage should be a breeze, similar to how you would plug in a 512 GB SD card and move data into it.

    Support should be always at reach, maybe with a cost per consultation. So that if an elderly person is not able to log into her Jellyfin account, someone can take control & fix it seamlessly.

    Autoscaling should be possible, the user should be able to purchase a new node and during onboarding select that this is a non leader node. The leader will be responsible for managing load.

    Status

    Settled on using Tipi running on a chromebox.

    I’ve currently explored CasaOS, Umbrel, RunTipi and settled on Tipi. I’m also working on a tool to simplify all of this, a project I call Citadel.

  • Stack

    The tools I use to run my day to day life.

    Phone

    Currently I use a iPhone 16.

    Apps on my phone

    Communication & Social Media

    • WhatsApp
    • Telegram
    • Instagram
    • X (formerly Twitter)
    • Slack

    Productivity & Organization

    • Google Calendar
    • Apple Notes
    • TickTick
    • Sheets
    • Docs
    • Drive

    Finance & Banking

    • HDFC Bank
    • DBS
    • Paytm
    • Cred
    • Fi
    • OneCard
    • Zerodha Coin
    • Zerodha Kite

    Entertainment & Media

    • YouTube
    • Apple Music
    • Audible
    • Booksplayer
    • Jellyfin

    Travel & Transportation

    • Google Maps
    • Uber
    • Ola
    • Rapido
    • Namma Yatri

    Food & Delivery

    • Swiggy

    Health & Fitness

    • Strava

    Shopping & E-commerce

    • Amazon

    Reading & Information

    • Goodreads
    • Hoarder

    Security & Privacy

    • Bitwarden

    Utilities & Tools

    • LocalSend
    • Tailscale
    • Jetpack
    • Shazam
    • Bitwarden authenticator

    Email & Cloud Storage

    • Gmail
    • Protonmail

    Movie & Event Booking

    • Book My Show
    • PVR

    Coding & Development

    • GitHub

    Podcasts

    • Apple Podcasts

    AI & Chat

    • ChatGPT
    • Claude

    Expense Sharing

    • Splitwise

    TV & Movie Tracking

    • Trakt

    Work Management

    • Zenduty

    PC

    I run Fedora on my Thinkpad.

    • Zen Browser
    • Libre office
    • Pycharm
    • Libation
    • VLC
    • Foliate
    • VS code
    • Zed editor
    • Steam

    Server

    I run Tipi on a chromebox & run it at home. Runs the following.

    • Jellyfin: For movies, TV shows & Audiobooks streaming. I use it with jellyfin on iOS for movies & TV show streaming & Plappa.
    • Deluge
    • Immich: Beautifully done photo management solution. Syncs well with all devices, has clients everywhere.
    • Duplicati: For backing up photos mainly
    • Beszel for monitoring
    • Flowise AI for building AI tools
    • OpenWeb UI for GPT
    • Uptime Kuma for uptime monitoring
  • Practical self hosting

    Self hosting absolutely everything I feel is not practical as of today. Hopefully it will be possible one day, but currently is not. In that case, what can we actually self host? Maybe the question to ask is, why do we self host?

    Why do we self host?

    Privacy : Placing all our personal data in the hands of large multi national companies which in-turn sell our data or use it to train their large scale AI models is unfortunately the world we live in today. With self hosting, privacy is protected.

    Cost : Sometimes the storage costs of certain services mean that the subscription cost of services tend to be prohibitive. Self hosting that service means that we don’t have to incur that cost.

    Why don’t we already self host everything?

    Although this sounds like a stupid question, its very important to think through this one. The reasons I specifically do not self host for the longest time is

    • Deployment complexity: A non issue with projects like Caprover
    • Opportunity cost of failures: sometimes the opportunity cost of an action failing is higher than the subscription cost itself. For example, the opportunity cost of an email send or receive failure could mean a lot. During some ops work or because of some other random reason, what if the disk gets corrupted or data gets partially deleted. Can I just hit a button and restore my stack back what it was today morning? This seemingly simple ask is surprisingly complex.
    • Missing Network effect: Cannot move people from Instagram or Whatsapp. With the current setup, meta knows everything and there is nothing we can do about it if we want to live normally in this society unfortunately.

    With this information, what is that I use day to day but can’t self host (for context, look into the stack post)

    • Finance apps : PayTM, Fi bank etc.. obviously
    • Social media & distribution channel apps: Instagram, Whatsapp etc.. cannot ask people to move to matrix suddenly. Similarly Uber, Youtube, Prime video cannot be a self hosted solution since the moat is the network.
    • Critical communication apps: gmail, google calendar. The cost of missing an email or an invite is super high and not worth it. Better to switch to more secure apps like proton mail etc..

    So what can we self host then?

    App picks

    Library streaming solution – Jellyfin

    Libraries tend to be irrationally large after a while, hosting jellyfin on a old PC at home & using that as a base and streaming media to your TV / mobile across your family members & yourself is extremely cost effective. Going the subscription route will be extremely expensive.

    Password management – Vaultwarden

    Bitwarden is a beautifully done software to manage passwords across all kinds of devices. Vaultwarden is the rust implementation of Bitwarden.

    Bookmarks management – Omnivore

    Looking forward for omnivore to wrap up their self hosting setup so that I can start self hosting. Right now it does not exist.

    Status monitoring – Statping

    Simple, straight to the point and solid. Recommended!

    Missing apps in the ecosystem

    • A great to do app similar to TickTick with solid reminders, good apps on mobile & collaboration.
    • Sync solutions for photos & files. Automatically backing up photos, videos & documents so that information is not lost. An alternative for iCloud.
    • A great note taking / voice notes app with solid mobile apps and collaboration. Alternative for iCloud notes, simplenote etc..
    • Health tracking, ideally with hardware.

    Also, checkout The self hosting dream

  • My digital garden workflow

    I’ve been searching for long on how to get this right. I think I have simple enough requirements, but have been complicating it without a reason.

    Here is what I want

    • WYSIWYG editor for easy writing
    • Drafts
    • Writing on mobile / tab / laptop
    • Light website which loads decently fast
    • Good search

    The idea is that, If something comes to mind. Converting it to text & putting it out in the garden should be friction less.

    Current setup

    WordPress happens to tick all the boxes. Now I run wordpress on a 7$ instance on Digital Ocean.

    It has

    • A fantastic editor
    • Support for drafts
    • Insane collection of themes
    • Great app to write & manage the website on the go (WordPress Jetpack)
    • Good search
    • Light website with cloudflare caching
  • Command line tools

    I use many CLI tools for my day to day job.

    The emphasis on compatibility means that tools can be stitched together to accomplish a lot of things. I use a combination of saw, choose, jq & grep to parse production JSON logs all the time, and it is possible because each of them does one thing and does it well & most importantly is designed to allow data to be piped in and results to be piped out.

    Some of my favorites

    • FZF: A command line fuzzy finder. In my opinion, one of the smartest and well-made tools which just does one thing, but does it impeccably. I use this to replace ctrl + R to fuzzy search through history every day.
    • saw: A AWS cloudwatch tool
    • choose: alternative to cut
    • jq: command line JSON processor
    • aws cli: the official AWS command line application
    • zoxide: A smarter cd alternative
  • Minimalism

    “We buy things we don’t need with money we don’t have to impress people we don’t like.” ― Chuck Palahniuk, Fight Club

    There is a principle from extreme programming called YAGNI, stands for “you ain’t gonna need it”. I think this applies very well to possessions in life too. We own a lot of things we do not need and carry no emotional value. If an item does not provide value, get rid of it.

    Experiment to see what it takes to travel with less & experience more: One bag

  • One bag

    A man is rich in proportion to the things he can live without – Henry David Thoreau

    Philosophy

    Life would be much more simpler and high quality if all we need fits in a 50lt bag.

    List

    • 50 liter Backpack
    • Smaller backpack for travel

    Wear

    • 6 T shirts (mostly march tees)
    • 4 pairs of sweat pants
    • 1 Hoodie (march coffee hoodie or white hoodie. iff weather is cold)
    • 6 pairs of socks
    • Travel under garments
    • 4 gym pants
    • 4 gym shirts
    • Travel towel
    • Sun glasses
    • Head cover for while wearing helmet

    Electronics

    • Phone with a good camera (iphone SE)
    • Earphones (Airpods)
    • Kindle with at least 5 books ready to go
    • Laptop
    • Smart watch
    • USB thumb drive
    • Type C to HDMI cable
    • Power bank (ideally compatible with both laptop and phone)
    • Wireless Mouse
    • Bluetooth speaker

    Wallet

    • Proof of Identity
      • Aadhaar card
      • PAN
      • Passport
      • Driving License
    • 1 Credit card (One card)
    • 1 Debit card (Fi Card)
    • Some cash

    Toiletries

    • Sunscreen
    • Shampoo
    • Razor
    • Soap
    • Deo
    • Toothbrush & tongue cleaner

    Miscellaneous

    • Medicines
  • Quotes

    A compilation of my favorites

    And those who were seen dancing were thought to be insane by those who could not hear the music – Nietzsche

    If someone says it’s raining and another person says it’s dry, it’s not your job to quote them both. Your job is to look out of the window and find out which is true – Jonathan Foster on journalists

    We buy things we don’t need with money we don’t have to impress people we don’t like – Chuck Palahniuk, Fight Club

    Yeah, seems like we’re all trying to climb a ladder. It’s crazy what we’ll do to climb it faster. It’s like we throw away the things in life that really matter. Just so we can make it to the top and wonder what we’re even climbing after – NF in 10 Feet Down

    Ships are safe at the harbour, but that’s not what they are built for

    If someone could only see your actions but not hear your words, what would they say your priorities are?

    Hard times create strong men. Strong men create good times. Good times create weak men. And, weak men create hard times. – G. Michael Hopf, Those Who Remain

  • Welcome to my digital garden

    This is my personal wiki where I share everything I know & learn. Think of this more to be public note taking.

    I try to dive into a lot of fields. Next time the same path is traversed by someone else, It should be significantly easier and faster. Hence, this is an effort to document my explorations of various rabbit holes & notes on opinions.

    Who am I?

    Hi, I’m Bharat Kalluri, I lead banking engineering team @ Refyne. I’ve been lucky enough to be a founding member and have witnessed the company scale from scratch.

    I love trekking, writing & teaching. You can mostly find me reading a book or listening to podcasts.

    Some interesting starting points

  • Gripes with reality

    Things which need fixing. Consider picking up one of these if you want to start a new project.

    I’m always available to talk if you want to work on one of these. Most of these piss me off so much that I’ll spend a very good amount of time fixing them. So happy to work together!

    • No central, privacy focused repository of bio markers / health markers
    • Scattered contact information with no system of keeping in touch
    • Difficulty in tracking money flow from income to expense patterns
    • Battery life on Linux is horrible. Compared to windows, I seem to get significantly lesser battery life on Linux.
    • Lack of credit score equivalent to establish credibility in the NGO world
    • We keep collectively wasting time for writing request types, response types and HTTP clients for rest APIs. There needs to be a better way. Why can’t I directly call a function from a server directly, why deal with api endpoints, error codes with no obvious documentation etc..
    • Why can’t a family simply share images of a event like marriage, engagement etc.. at bulk at once and get done with it without involving a multi national corp like Facebook or Google? Even if we do involve them, what’s a quick way to follow up and share pictures?
    • Lack of public data sources for maps. Open street maps is good, but is no where as exhaustive as google maps. And possibly will never be because google has the infra to tour around with 360 degree cameras, high accuracy GPS devices and AI & ML setups to gather data automatically.

    Things I solved for

    • Cleaning up your email is hard. Why? and why are tools around this paid & expensive?
      • Built CleanMail for this. Works great for a v1. Is perfectly functional, UX could be better though.
  • Ideapad

    Personal finance manager & tracker

    • Solving for: visibility into finances for course correction & planning
    • Sources to snapshot personal finance data from
      • zerodha coin for MF
      • zerodha kite for stock markets
      • HDFC FD for FD
      • HDFC savings for savings

    Dump notes and retrieve on demand

    • Solving for: The paralysis of organization
    • Two modes: input / search
    • Input mode
      • no distractions, command k to search existing files and quickly jump in and write
      • opens up a new note with heading & notes
      • tags on demand, command+p and add tags
      • metadata will be captured as you type, auto suggest tags on demand using chatGPT
    • Grep mode
      • Search by tags, synonyms, plain text, image metadata, URLs
  • Watches

    This is what you need to know to understand & appreciate how watches are made. This is a basic 101 to introduce the ideas behind watch making.

    Watches & watch collecting can be an expensive hobby, But it does not have to be. The best place to be is to have watches tied up to significant memories so that the thing on the wrist reminds you of something that makes you happy.

    Watch movements

    There are broadly speaking three types

    • Quartz / Digital
    • Mechanical hand wound
    • Mechanical Automatic

    Quartz

    Quartz are technically the advanced, but much more simpler to make in bulk. A quartz crystal vibrates at a particular rate when current is passed. This vibration in turn drives the seconds hand & therefore the time in the watch.

    Although this is technically more advanced, since the number of moving parts are very less. This type is much easier to make in bulk. Thus also driving the price down. Most of the cheaper watches are running quartz.

    Since this is simply battery driven, accuracy of these watches is also very high.

    Mechanical hand wound

    In the beginning of watch making, there was no electricity or batteries. Hence people used a loaded spring as a store of energy. And this spring would continuously release power, which would be then directed towards moving gears. This is how mechanical watches work. These are complicated to make and involve a lot of moving parts.

    Also, since this is relying on a loaded spring. Depending on the spring, the charge reserve is also variable. Charge reserves usually are anywhere around ~ 30 hours – 80 hours. And after that, they would need to be manually wound and “recharged”.

    Since they are mechanical in nature, the time drift is also a problem. These watches could be off by a second or often times by a couple of seconds every day. So, recalibrating the watch once in a while is also important.

    Mechanical automatic

    Mechanical watches require to be wound manually every once in a while, automatics get rid of this problem by having a loaded weight at the back of the watch. Since the watch will be moved around when its worn, the loaded weight will move back and forth. Which in turn generates potential energy to charge the spring.

    The automatic & mechanical watches have definite downsides, but the reason people buy them is in appreciation of the craftsmanship & engineering which goes in making them. My father has a HMT mechanical watch which was bought during his childhood, which still runs like a charm. The fact that these watches are built to last forever is very appealing to a lot of watch enthusiasts.

    Watch glass

    Broadly classified into a three categories

    • Resin: very basic, easily scratched. Very cheap to manufacture.
    • Mineral glass: slightly better, scratch resistant to a good extent. Slightly more expensive.
    • Sapphire crystal: Extremely scratch resistant & transparent. Try to go for this if your budget permits. Obviously more expensive to maintain. Apparently only diamonds can scratch a sapphire crystal.

    Other important notes

    • Case diameter & thickness: These tend to be deciding factors when buying a watch. Watch makers usually have a couple of options here. Try them before buying to understand what size fits your wrist size.
    • Water resistance: Unless you plan on swimming with your watch, most of the times this is not a massive deal breaker and most watches come with decent water resistance by default. There is a class of watches called the divers watch’s, these are meant to be worn by divers and have a very high water resistance (usually around 200m). If you plan on swimming then get a watch which is certified to be 100m/10 bar/10 ATM.

    Respected brands in the industry

    Not all brands of the conglomerate are listed, these are just some of my favorites

    • Swatch group
      • Tissot
      • Hamilton
      • Omega
      • Rado
    • Seiko
      • Seiko
      • Orient
      • Grand Seiko
    • Citizen
      • Citizen
      • Bulova
      • Miyota
    • Rolex & Tudor
    • Casio
    • Timex

    A lot of the fashion brands like tommy hilfiger, Giorgio Armani etc.. actually source their machinery from Fossil usually. And just have a markup in price because of the branding. If that’s something you enjoy, then it makes sense. Otherwise, it usually makes sense to go for the titans of the industry.

    My wish list

    I would want to have one of each:

    • Dress watch: An open heart automatic for me. Something to wear for formal or special occasions. It needs to look classy and clean.
    • Daily driver: Something that is possibly not very expensive & something which looks good when you dress up & dress down.
    • Beater: Something along the lines of a G-Shock or a Casio duro. A watch you would wear for sports, treks, etc..

    Watches I own or plan on owning:

    • Fossil machine
      • The first serious watch I ever bought, bought it after my first job.
      • This has been my daily driver for the longest time.
    • Seiko presage automatic watch: blue open heart
      • My dress watch of choice.
      • My first mechanical automatic, bought it as a sign of reaching a particular milestone in my career and life.
      • Always wanted an open heart automatic. When I got to know that a friend was on vacation in Japan, I asked them to get it from there. It happens to be about half the cost in Japan.
    • Seiko 5 sports SBSA053
      • Looking forward to add this into the collection. Will be the preferred watch for daily wear if I happen to get this.
    • Timex weekender
    • Casio Duro
  • Protocols – Personal Finance

    This is work in progress! Feel free to reach out to me @bharatkalluri for suggestions and feedback.

    One of the first things I think people should be taught when they start earning is managing personal finances. There are some fundamentals on how to manage personal finances. Once these are sorted, you can resort to more niche investment instruments if needed.

    Understanding the baseline

    Answer these questions for yourselves. No need to justify any of these numbers, just be aware.

    • How much are you spending per month on average?
    • If for some reason, the company you have shuts down. What’s your runway?
    • God forbid, if something happens to you. Is your family financially secure? Similarly if there is an accident and someone in the family needs an immediate operation. Do you have the capacity to handle it with composure financially? These answers are extremely important. Please make a note of these either on paper or mentally.

    Basics

    Emergency fund

    Keep 2 * (monthly spend) separately in an FD or an account. The idea is not to get returns on this amount. The idea is to just have a safe backup of cash in case something urgent comes up. Do not touch this fund until & unless an absolute emergency comes up. Once its dealt with, immediately work on replenishing the fund. Once the basics are taken care of, work towards making this 6 * (monthly spend) and eventually 12 * (monthly spend).

    Health insurance

    Make sure your family & yourself is insured. Take as much cover as possible: 15L, 30L or higher if you can. The younger you are, the cheaper the cost of the monthly premium. The idea of top-ups exist, utilize them if possible. An employer usually gives out a health insurance, make sure to check on that & understand details around it too. Also, make sure to cover your dependents (parents / spouse).

    Term life insurance

    If something unfortunate happens, your dependents should not be worried about financials. Make sure you get a term insurance of 15-20x the family’s total annual expenses. #todo descriptions on insurance can be better

    Clear debts or have a plan for clearing debts

    Debts come with an interest and the longer the debt, the more it affects your peace of mind. Make sure you have a highly disciplined plan & a clear timeline for clearing debt.

    Wealth growth: Level one

    Once the basics are covered, now we can discuss how to accumulate left over wealth. Before starting out on this journey, make sure you understand

    • inflation
    • compounding
    • interest calculations (IRPA) #todo attach resources explaining the basic concepts

    Grow your income stream

    Growing income through financial instruments is a low probability game, the much more high return/high impact game is to grow in your career. Optimize for this for longer term gains.

    Mutual funds

    The left over income which is unspent, start investing. This is for long term wealth growth. You do not want your money to stay in an instrument which grows less then inflation since its reducing in value. The safest option in mutual funds would be an index fund. There are numerous videos on the internet explaining what these funds are. But basically the growth of the fund is directly proportional to the top 50 or 100 companies of the country. Which means that the growth of wealth is tied up to the growth of the country. Historically index funds have yielded around 12-15% returns.

  • Self quantification

    The idea is of collecting data points about thyself, in hope of drawing constructive inferences and use that to make positive changes to lifestyle.

    Here are some data points I would like to collate and analyze

    Data sources

    • Movies watched: Trakt
    • Books read: Goodreads
    • Song listening history: Last.fm
    • Run tracking: Strava
    • Habits
    • Programs used on the computer
    • Travel data
    • Caffeine intake
    • Food and corresponding calories
    • Financial Transactions
    • Podcasts
    • Chat history
    • Videos watched
    • Videos linked
    • Articles read
    • Articles liked
    • Websites visited
    • Articles I would want to refer later
    • Notes from books
    • Sleep tracking
    • Purchasing history
    • What do I ask alexa?
    • EMail data
    • Keystrokes
    • Calendar events
    • Phone calls
    • Investments
    • Apps used on phone
    • Mood tracking
  • Personal finance management

    A lot of this would be geared towards Indian banks and the Indian financial ecosystem.

    Basics

    Understanding how we lose accumulated value over time, and how to prevent it is critical to long term growth.

    Inflation

    Inflation: Inflation is a general increase in the prices of goods and services in an economy (wikipedia)

    Understanding inflation is fundamental before we proceed. Assume you could buy all your necessitates today for ₹100, if the inflation of india is at 5%, that means that the same set of goods will be costing you ₹105 next year.

    Which means

    • If you did not get a hike from last year to this year, you are theoretically working for cheaper
    • Money sitting in the Safe box is actually losing value over time
    • If your bank account gives a return of 3% while the rate of inflation is around 5. Then you are still losing money overtime

    So to actually increase value over time (not money, since money itself is not an accurate representation of value) you would need to invest in a financial instrument whose returns are higher than inflation.

    Taxes

    Taxes are the amount you pay to the government so that the government can share amenities back to the public. The sad part is that the tax paying group in India is extremely small.

    The higher earning & salaried segment end up paying a lot of taxes. If you are in the “>15 lakhs per year” earning category, then the tax is pretty much 30% flat.

    3 months out of the 12 months you work in an year is for the government

    For any investment, it can be taxed at two distinct places.

    • On the investment (Principle investment)
    • On the interest/gains earned

    Let us say for suppose a person had invested 10k in mutual funds. And the style of the fund is in the IDCW (formerly called dividends) plan. Which means he/she will get back the dividends to the account instead of it going back into the fund and compounding. Let us say he/she earned 1k in gains for a given year. This would mean that the income tax slab applies on the capital gains too.

    There are also taxes to central government (CGST) & state government (SGST) which are paid on what you buy & use. For example: road tax, water tax, professional tax etc.. Which cannot be avoided.

    Remember that the effective interest rate of an investment should be calculated post tax deductions, an interest rate of 6% is actually 4.2% post 30% taxation.

    Financial instruments for investing

    Financial instrumentPrinciple investmentCapital GainsApprox. Average returns (as of Aug 2022)Liquidity aspectInterest type, frequency
    Public Provident FundExempt (Section 80C limit)ExemptPartial withdrawalAccrual, half yearly
    National savings certificatesExempt (Section 80C limit)~6.8No liquidityAccrual, half yearly
    National pension systemExempt (Section 80CCD limit)ExemptMarket ratePartial withdrawal after certian period
    General Provident FundExempt (Section 80C limit)8.10%Partial withdrawalAccrual, half yearly
    Tax free bondsExemptIssue rate (5-8%)Through stock marketTo account, Yearly payment
    Bank Fixed Deposits5-7%On demandAccrual/(Monthly
    Bank Tax saverExempt (Section 80C limit)5-8%After completion of 5 yearsAccrual/(Monthly
    Mutual fundsstock market drivenOn demand
    ELSS mutual fundsExempt (Section 80C limit)stock market drivenAfter 3 years, computed from buy date
    Equitystock market drivenOn demand
    RBI bonds7% (NSE + 0.35%)7 years, half yearly interest payment to bank accountTo account, half yearly payment
    Real Estate Investment Trust (REIT) units90% of the surplus income distributed as dividend every quarterOn demand through stock exchangeTo account, quaterly dividend
    Housing loanExempt (Section 80C limit)Exempt (Upto 2.5 lakhs)
    InsuranceExempt (Section 80C limit)
    Corparate fixed deposits7-8%No liquidity until tenureAccrual or monthly/quaterly

    Personal Finance Setup

    I currently use

    • HDFC account as my primary account
    • PhonePe for all the UPI transactions
    • Zerodha Kite/Coin for Stocks/Mutual funds
    • Amazon pay credit card (very rarely, since there is usually a 5% discount in amazon if this is used)

    I’ve been experimenting with a Double entry ledger system called Beancount. It’s a beautifully designed software which works out of plain text files.

    The csv bank statements are downloaded and imported into beancount using a HDFC bank statement importer I’ve written for myself. It uses keywords in the narration to classify transactions.

    I wish life was easier for personal finance management and data exports in general. The state of personal data & infrastructure is sad.

    Bank feature matrix

    For data interoperability, I would like some basic features around data. Ideally having APIs would be awesome, but we currently do not have APIs for any Indian banks.

    Bank Name / featureTabular transactions statement (CSV or Excel)UPI remark in narrationInstant virtual card on account creationUnique transaction reference number in bank statement
    DBSYes, 90 days per download & of 18 months in the past. CSV is actually an excel file with wrong file ext.No??
    HDFC bankYes, can download excel year by year. For the last 5 years.Yes?Yes
    Union bankYes, can download excel year on year. Does not seem like there is cap for the pastNo??
    Fi BankNo, only PDFYesYes?
    JupiterNo, only PDFYesYes?

    This is a sample, if you feel like there needs to be more features in the matrix. Ping me and we will talk.

    Notes

    • Whenever making transactions in UPI, make sure you have some notes in the corresponding UPI app. This will later show up in the bank statement. Otherwise, the bank statement narration would be unrecognizable, you wouldn’t want Transferred 500 to 12412234141, the same narration would show up as Transferred to 12412234141, food if there was a comment. Using tags is a good idea if you want to parse it later. Note that all banks do not do this, refer to the feature matrix above.
    • There does not seem to be a way to look up UPI IDs in the bank statement
    • Subscriptions tend to add-up pretty quickly if not carefully looked into. Make sure all of this is being budgeted.
    • Try to buy things only after having a plan to give away / sell the other thing in hand. Do not hold multiple of the same type. For example, if you are planning to buy a new phone, exchange the current one to get the new one.
  • How to deploy a service from scratch

    This aspires to be the go to guide when starting up a infra stack from scratch. If you feel any other important piece is missing, feel free to message me on either telegram or mail

    Let’s say you have your own shiny new web server ready and you now want to deploy this to a production grade, highly reliable & durable infrastructure setup. So like all the big players, you choose AWS. And before we can start thinking about the server, we’ll need to first start from the foundation. The network stack.

    The Network Stack

    The network is where all infra foundations are built on and based out off. Let’s start with the most fundamental block, the VPC.

    Virtual Private Cloud

    The service needs a network to run on. AWS calls your own bubble of network a Virtual Private Cloud, VPC in short. The idea of the VPC is very simple, you can group a certain set of IPs and setup all your services inside that bubble. This is great because you can truly isolate services at a network level. which means if a service is trying to access another instance which is private in another bubble, it will never be able to. So you can have multiple network bubbles for different services or environments.

    Apparently in 2006 AWS launched EC2 instances, and companies started raising concerns on security, isolation & privacy. This lead into AWS launching their own logically separated isolated network units in 2009 with a guarantee that there will be no overlap in VPC unless explicitly configured.

    But how do we define this bubble? We start by selecting a large range of IPs. People do this by making use of CIDRs (Classless Inter-Domain Routing). Let’s zoom out a bit. Every server runs with an IP. An example IP would be 10.0.0.1. What if you want to select a whole range of IPs? it would be cool to say 10.0.x.x where x can range between 0 to 255. That’s exactly what CIDR does. All IPv4’s are 32 bit. 255.255.255.0 in binary reads to be 11111111.11111111.11111111.00000000, so 255.255.255.0/24 masks the first 24 bits, which makes everything from 255.255.255.0 to 255.255.255.255 valid. But not 255.255.225.0.

    With this tool, we can now define a range of IPs which fall into the VPC.

    Sub nets

    Now that the VPC is defined, we’ll create smaller bubbles with very strong properties. These properties enable us to draw strong boundaries and make sure wrong configurations don’t backfire. Inside the VPC, we can further create divisions called subnets. Subnet’s as the name implies, are sub networks inside the VPC. We’ll again use the CIDR notation to borrow some IPs into the subnets.

    For example, if the VPC is 10.0.0.0/16 (that is 65536 IPs in the block!), subnet’s could be 10.0.0.0/20 (4096 IPs), 10.0.16.0/20(4096 IPs), 10.0.160.0/20(4096 IPs) etc.. The suggestion is to create one sub net per availability zone. The reason for this is that if for some reason in Hyderabad on AZ (availability zone) goes down because of a natural calamity or unforeseen circumstances, the other AZ in Hyderabad will still continue to function.

    Why do all this? Well we can make our subnet’s respect some boundaries. We can create 3 sub nets (one per AZ) and decide them to be public facing and 3 sub nets which are private facing. Inhernetly a subnet anyways is private, we inculcate these properties into the subnets by setting up the route tables.

    Route tables

    Probably the most straight forward idea here. The route tables decide how the network traffic should be routed in a particular bubble of network. We’ll use the route tables to enforce the properties of the sub nets.

    NAT gateway

    NAT stands for Network Address Translation. We’ll setup our private sub nets traffic to go through the NAT gateway. The property of a NAT gateway is such that it only allows outgoing network requests and the corresponding responses. But no incoming.

    This is a great idea for a couple of reatsons. The first being that all the traffic in that sub net will be routed through a single point. This means any client / service provider wants to whitelist an IP so that you can hit their servers peacefully? Just share the NAT gateway IP and you are sorted. Second is that all the external traffic can be now measured and analyzed thoroughly basis from IP, to IP, packet size etc.. . Third is obviously that the private sub net stays private.

    So, in the route tables. we’ll connect the private sub nets to a NAT gateway so that under no circumstance if a server is started in a private sub net, it can be accessed directly from outside.

    Side note: NAT is billed per GB sent & the NAT running cost per hour. on top of this, if packets are sent across AZs. The bill is higher. NAT’s get pretty expensive pretty fast. Use with care.

    Internet gateway

    Some instances require two way traffic. For example, maybe you would want to deploy an instance and directly expose it out to the public. That might not be a good idea if you are exposing a service to a large set of customers, but not really a bad idea for an internal service for an organization.

    Internet gateway allows traffic both ways into the sub net. So if an instance is in the public sub net with a static IP, users can directly hit the static IP. And also if the instance wants to reach out to the public internet, internet gateway allows that as well. With this, the public sub net is actually public. So without an internet gateway, no IPs will ever be exposed from the VPC.

    With this, we finally wrap up setting up the foundation of the network infrastructure. On top of this we now will deploy applications.


    Network Stack with Infrastructure as code

    The same in AWS CDK code would be

    
    
    
    
    
    const envDetails = {account: "<accountId>", region: "ap-south-1"};  
    const vpcName = 'uat-vpc'  
      
    export class NetworkStack extends cdk.Stack {  
        constructor(scope: Construct, id: string, props?: cdk.StackProps) {  
            super(scope, id, props);  
      
            new cdk.aws_ec2.Vpc(this, "vpc", {  
                vpcName: vpcName,  
                availabilityZones: ['ap-south-1a', 'ap-south-1b', 'ap-south-1c'],  
                ipAddresses: cdk.aws_ec2.IpAddresses.cidr('10.0.0.0/16'),  
                createInternetGateway: true,  
                enableDnsHostnames: true,  
                enableDnsSupport: true,  
                natGateways: 1,  
                ipProtocol: IpProtocol.IPV4_ONLY,  
                subnetConfiguration: [{  
                    subnetType: SubnetType.PUBLIC,  
                    name: 'public',  
                    mapPublicIpOnLaunch: false,  
                    cidrMask: 24,  
                }, {  
                    subnetType: SubnetType.PRIVATE_WITH_EGRESS,  
                    name: 'private',  
                    cidrMask: 24,  
                }],  
            });  
        }
    }
    const app = new cdk.App();
    new NetworkStack(app, "NetworkStack", {env: envDetails});

    This construct sets up 3 public sub nets, three private sub nets, configures an internet gateway, NAT gateway with three AZ’s.


    The Application Stack

    This is for constant / persistent load. For burst load, the recommended path is to deploy via lambdas.

    Now that the base is built, let’s build the application stack on top.

    There are some basics requirements for our application stack

    • Versioned application artifacts
    • Deploy application code
    • Auto scaling based on metrics
    • Logging and monitoring
    • Blue green deployment with zero downtime’s. We don’t want the instances to restart all at once and because of that the application would be unresponsive for a brief period of time.

    We’ll be using docker. Using docker as a packaging format has some great advantages like

    • Runs everywhere including on macOS, Linux, Windows etc..
    • Easy to store, a lot of infra is already built around storing and pulling docker images
    • Platforms built to support docker also pipe logs, metrics etc.. comes nicely out of the box
    • Auto scaling up & down will be easier since we are operating in the container territory and not on bare metal. AWS deploys images to a service called Elastic Container Service, which has a whole host of these pre-built features. So we’ll just be using that.

    Application deployment architecture

    We’ll be deploying our application using docker images. Docker images in AWS are deployed on the Elastic Container Service (ECR). The containers will be deployed on the private sub net.

    We’ll need a load balancer so that traffic is managed effectively across containers. So we’ll have an application load balancer in the public sub net with a public IP.

    Docker image for the application

    For this example, we’ll just use crccheck/hello-world which will just spit out hello world on hitting /.

    We’ll not be covering the idea of how to have build docker for your applications in too much in depth, but the idea is very straightforward. Have a simple DockerFile in your repository. Run docker build, docker tag to tag it to the commit ID and latest & then finally push it to Elastic container service (ECR). We’ll be using this image to deploy it to the servers.

    Deploying the image

    Elastic Container Service (ECS) is the service offered by AWS to deploy docker images in the platform. Traditionally deployments happened on EC2 instances / dedicated servers. Now a days it’s quicker to just deploy and spin up & down containers rather than an instance.

    To work with ECS, we’ll need to understand three important ideas

    • Task definitions: These are the blueprints/specification files for defining which docker image to pull, which command to run in the docker image, how much CPU to allocate, how much memory to allocate etc..
    • Clusters: A cluster sets some max specifications and there are containers spun up inside the cluster
    • Tasks: The task is the deployment of the task definition into the container. So, if 15 pods run that’s 15 tasks running inside a cluster.

    So to start off, the image definition we’ll opt for would be with the image of crccheck/hello-world, setup the container port at 8080, setup some environment variables, a role with some accesses & setup CPU and memory constraints.

    Auto scaling

    Any production grade infra stack needs to scale up & down based on some metric like network traffic, CPU etc..

    For example, when the CPU goes above 80% we might want to start one more instance to manage the workload. And when the CPU goes below 70 we might want to scale down the container count since the traffic is reducing. This policy is what is called as a scaling policy.

    With this policy, we’ll set a min of 1 instance and a max of 3 instances. As the CPU goes up we’ll spawn one more container, max containers at any point can be three. You’ll see this policy neatly laid out in code.

    With this, effectively the service on deploy will be up and running with / will respond with hello world.


    
    
    
    
    
    export class HelloWorldApplicationStack extends cdk.Stack {  
        constructor(scope: Construct, id: string, props?: cdk.StackProps) {  
            super(scope, id, props);  
      
            const applicationId = 'HelloWorldApplication'
      
            const vpc = cdk.aws_ec2.Vpc.fromLookup(this, 'vpc', {vpcName: vpcName})  
            const applicationLoadBalancer = new cdk.aws_elasticloadbalancingv2.ApplicationLoadBalancer(this, `${applicationId}LoadBalancer`, {  
                vpc: vpc,  
                internetFacing: true,  
                vpcSubnets: {subnetType: SubnetType.PUBLIC}  
            });  
            const taskRole = new cdk.aws_iam.Role(this, `${applicationId}TaskRole`, {  
                assumedBy: new cdk.aws_iam.ServicePrincipal('ecs-tasks.amazonaws.com'),  
                managedPolicies: [{managedPolicyArn: 'arn:aws:iam::aws:policy/SecretsManagerReadWrite'}, {managedPolicyArn: 'arn:aws:iam::aws:policy/AmazonS3FullAccess'}]  
            })  
            const helloWorldApplication = new cdk.aws_ecs_patterns.ApplicationLoadBalancedFargateService(this, applicationId, {  
                vpc: vpc,  
                taskSubnets: {subnetType: SubnetType.PRIVATE_WITH_EGRESS},  
                loadBalancer: applicationLoadBalancer,  
                assignPublicIp: false,  
                cpu: 2048,  
                memoryLimitMiB: 4096,  
                taskImageOptions: {  
                    image: new cdk.aws_ecs.RepositoryImage('crccheck/hello-world:latest'),  
                    containerPort: 8000,  
                    environment: {  
                        'NODE_ENV': 'uat'  
                    },  
                    taskRole: taskRole,  
                },  
            });  
      
            const scalableTarget = new cdk.aws_applicationautoscaling.ScalableTarget(this, `${applicationId}ScalingTarget`, {  
                serviceNamespace: cdk.aws_applicationautoscaling.ServiceNamespace.ECS,  
                resourceId: `service/${helloWorldApplication.cluster.clusterName}/${helloWorldApplication.service.serviceName}`,  
                scalableDimension: 'ecs:service:DesiredCount',  
                minCapacity: 1,  
                maxCapacity: 3,  
            });  
            const scalingPolcy = new cdk.aws_applicationautoscaling.TargetTrackingScalingPolicy(this, `${applicationId}ScalingPolicy`, {  
                scalingTarget: scalableTarget,  
                targetValue: 70,  
                scaleOutCooldown: cdk.Duration.seconds(60),  
                scaleInCooldown: cdk.Duration.seconds(60),  
                predefinedMetric: cdk.aws_applicationautoscaling.PredefinedMetric.ECS_SERVICE_AVERAGE_CPU_UTILIZATION  
            });  
        }  
    }
     
    new HelloWorldApplicationStack(app, "HelloWorldApplicationStack", {env: envDetails});

    Figure out the load balancer’s URL, hit and the response should be hello world!

  • Fragrances

    Perfume comes from the french word parfum. “per” meaning “thorough” and “fumus” meaning “smoke”.

    Types

    Depending on the concentration, they are classified into multiple tiers

    • Eua De Toilette (EDT): 5-15% aromatic compounds
    • Eue De Parfum (EDP): 15-20% aromatic compounds
    • Parfum : 20-30% aromatic compounds

    Vocabulary

    • Longevity: Describes how long a fragrance lasts
    • Projection: Describes how far someone can smell you from
    • Sillage: The trail left behind while walking
    • Top notes: These are the initial scents you get when you apply. This usually last for around 5-15 minutes.
    • Middle notes / heart notes: These are the set of scents which you get in 20-60 minutes
    • Base notes: These are the set of scents which lasts from the first hour to around six plus hours
    • Decanters: Fragrances are expensive. A good fragrance easily ends up costing 5k+ for a 60ml bottle. You would not want to buy a fragrance you regret. So there are people who import multiple bottles, and then they sell small quantities (10ml, 20ml etc.. ) of expensive fragrances at logical rates (usually). This means that with around 3k INR, you can experiment with 5 fragrances and get a feel for them. Once you decide, you can get a bigger bottle.
  • Cardistry

    To learn

    Basics

    • Charlier cut
    • Swing cut
    • Swivel cut (later)
    • Revolution cut
    • Sybil cut
    • Sybil cut 5 face
    • Spring flourish
    • Dribble flourish
    • Thumb fan
    • Smear fan
    • Table spread
    • Scissors cut
    • Hotshot cut
    • WERM
    • Faro shuffle