Category: Uncategorized

  • Speed Typing

    Speed typing is the idea of working and improving on typing speed. It is said that an average person types around 40 words per minute (or WPM for short).

    The reason I want to type fast is because I write a lot of blogs/notes. I don’t mind programming with a slower WPM since anyways that’s not the bottleneck. But during blogging, I would prefer if I can type at the pace of my thoughts.

    People say typing speed does not matter in programming. I think that is not entirely true, if you are above 60 wpm I think you are good. If not, typing should not be a hindrance to think and iterate for programming is what my I think.

    The journey to 100 WPM

    My current baseline is around 50-70 WPM, depending on the tool. On KeyBR, I was told “Your all time average speed beats 50.19% of all other people. Average speed: 51.7 wpm”

    Now on how to improve from here

    Tools to practice with

    There are a couple of categories here

    Games

    The most fun ones

    • ZType: This blew my mind. You basically type words and on a word press, one enemy ship goes down. So basically words are ammo. 🤯
    • TypeRacer: Fun game to play against friends

    Practice tools

    • MonkeyType: My current favorite. Great UI, lot of customization. Highly recommended.
    • KeyBR: Ruthless, long winded. probably the most useful since it says which keys I suffer with.
  • Protocols – Health

    Heads up: Heavily WIP. Still figuring it out.

    • Sleep is a lot more important than people think. Make sure you are getting a solid 7 hours of sleep every day.
    • Get a full body health checkup done start of every year. Get a doctor consultation to figure out an interpretation of readings and schedule top up tests depending on deficiencies.
    • Go get a routine ENT & dental checkup every year
    • Exercise at least for 2% every day, that is around 28.8 minutes.

    Some things I want to try

    • VO2 max test
  • On why companies should self host

    Consider the following use cases, and a hypothetical scenario of what would happen normally in an organization which does not solve these explicitly

    1. A developer wants to convert sensitive doc from base64 to plain text
      • people go to public websites & paste PII data due to ignorance
    2. People want to shorten links and create bookmarks. for example company.links/mis should take you to the data analytics platform
      • everyone creates there own set of bookmarks, and migrations to new domains are essentially messages on public channels etc..
    3. Dashboard of all internal services
      • bookmarks again
    4. People want to chat using ChatGPT / Claude
      • they user either personal accounts with their own configuration
    5. Marketing wants to transcribe a un-released, probably sensitive video and extract text
      • upload to some website which offers a free tier
    6. Convert & Join PDFs
      • some random online tools
    7. Share files between devices
      • personal whatsapp or telegram would be used

    There are many other use cases where employees default to their own preferred method without really thinking about data security

    Instead if the company opts to run a small server under a VPN, then for each of these problems, there is a nice solution which is data sec friendly

    Here is how it would look like in a world where the company uses something like runTipi to self host inside a VPN

    1. A developer wants to convert sensitive doc from base64 to plain text
      • Cyberchef
    2. People want to shorten links and create bookmarks. for example company.links/mis should take you to the data analytics platform
      • Shlink
    3. Dashboard of all internal services
      • a dashboard like Dashy or Homepage
    4. People want to chat using ChatGPT / Claude
      • Open webUI
    5. Marketing wants to transcribe a un-released, probably sensitive video and extract text
      • self hosted whisper based transcriber
    6. Convert & Join PDFs
      • Sterling PDFs
    7. Share files between devices
      • Something along the lines of Send

    The organization can have its own universe of self hosted & well designed tooling which solves these problems really well.

    More importantly, self hosting is deemed to be too scary. I disagree. Its actually very much doable with the current compute speeds and docker based backups.

    Companies should give it a honest shot at a small scale to start with and see how it goes.

  • Torrenting on Tipi

    Let’s say you want to download Sintel, the creative common licensed movie made in Blender from torrents.

    There are a couple of options for downloading torrents on your Tipi. We’ll use Transmission for now.

    Understanding the folder structure

    Tipi mounts folder /media/torrents for transmission to write into. Usually people prefer incomplete downloads to be placed in /media/torrents/incomplete & /media/torrents/complete for complete downloads.

    Permissions

    Make sure ~/runtipi/media/torrents is owned by user 1000. For this, ssh into your server and do ls -al ~/runtipi/media and see if the owner is user 1000. If not, run

    sudo chown -R 1000 ~/runtipi/media/torrents/

    The above should be automated in the install step on Tipi later on, this is temporary.

    Setting good defaults

    Go to settings in transmission

    Set Download to /media/torrents/complete & temporary folder to /media/torrents/incomplete.

    This will make sure torrents download to the folders shared with Tipi.

    You can later move the file to ~/runtipi/media/data/movies or ~/runtipi/media/data/music using an app like filebrowser.

    That’s it! Apps like Jellyfin have access to ~/runtipi/media and you should be able to watch it on your Tipi instance.

  • Review – Self hosted photo management apps

    There are only two options, in my opinion, that absolutely stand out right now. One is called PhotoPrism, and the other is called Immich.

    As I mentioned before, I run a modest Chrome Box as a home server. I’ve always wanted to move away from iCloud because it becomes expensive rather quickly, but I couldn’t find a solution that also offered a great user experience.

    I initially started with Immich, ran it once, and it crashed my server. I then migrated to PhotoPrism, which was more efficient, but the UI wasn’t great.

    After a few days, I switched back to Immich. I hoped I could make it work by disabling many options, and I was right. After completely disabling machine learning and video transcoding, Immich seems to be okay, although it still consumes a significant amount of CPU and heats the server.

    But as of now, there’s nothing else like it on the market, and this is the best we have. I hope they optimize the performance and eventually provide tips on disabling heavy features during installation, which would make the onboarding process easier. To be fair, Immich isn’t even at version 1.0 yet—it’s still considered beta software. For a beta, it’s extremely well-polished, so kudos for that.

    My recommendation would be to go with Immich, but carefully go through the settings to ensure you’re disabling any unnecessary or resource-intensive features.

    The rest of the article is a more formal analysis of the pros and cons.

    PhotoPrism

    Pros:

    • Does not disturb the external library, making it very easy to migrate and maintain.
    • Machine learning for face detection.

    Cons:

    • No Android or iOS app.
    • The UI could be more polished.
    • User management UI is not included in the free version.

    Immich

    Pros:

    • Excellent Android and iOS apps.
    • Beautiful UI.
    • Machine learning for face detection, etc.
    • Implementation of configuration for custom use cases.
    • Great administration UI, including views on jobs running, active, waiting, etc.

    Cons:

    • If you run a lighter home server and forget to disable machine learning and video transcoding features, it will push the CPU to 100% consistently. Some feature flag management at the setup level would be helpful to prevent this.
  • Rabbit holes

    I have a (unhealthy) habit of jumping into rabbit holes and spending days or sometimes months obsessing over a topic which is entirely unrelated to my day to day & probably is useless. But, its pretty damn good fun.

    So, here are the rabbit holes I jumped into

  • Experiment: Running a home server on a chrome box

    Status: Running

    I’m new to the self hosting server game. And in retrospect, this is kind of embarrassing to not foresee that this would not work TBH. Let’s start with the story.

    My friend has a old Mini PC lying around which was unused. Since I was currently running Tipi on my Thinkpad & kind of abusing it. I wanted to move to a more sustainable solution. So, I asked for it temporarily to see if I can use it as a home server while I figure out what hardware to buy. Or if it really fits the bill, probably buy it.

    On arrival I realized it was a chrome box. Damn it.

    Chrome box’s and chrome books are meant to be usually starter level compute boxes. Initially built for Students & Teaching organizations. Hence the doubts. But then this comes with an i5 4th gen or something along that lines. That’s a powerful enough CPU. So I kept my hopes high and kept going.

    First mistake: Deciding to run fedora workstation

    On my thinkpad, I run tipi on fedora. seems to work alright. So, I thought why not. I was lazy and did not want to experiment.

    A non-server OS comes with a couple of problems. Starting with a full graphical install. Power saving modes. By default, disabled SSH. sleep and suspend, login on boot, etc..

    Although all of these were manageable, it made more sense to just move to a server based operating system.

    So I moved to fedora server instead.

    The weird issue of needing a functional display to boot up

    SSH was setup on install, the os was pretty good. Everything was sorted on the software front. But interestingly, the system would not boot on power if the HDMI cable was not connected to a display.

    This was very weird, because the power was on and the system just did not start. After a lot of googling and some AI assistance, I realised that chrome boxes might have a setting to prevent stale starts, so they had this feature of not switching on the system if the display was not connected. I would have to deep dive into the bios settings to figure out if I could turn this off, but I thought I can live with this for a while and start using the server by manually switching it on every time it switches off.

    This was also okay because I had power back up at my place, so once it was on, it rarely switches off.

    Heating issues

    After installing the server and installing immich. I observed that the server randomly just goes down.

    This was unanticipated, after which I installed net data and started looking at temperatures. To see if it was a potential heating issue.

    As expected, the CPU was running around 10 3°C. Which is pretty high and naturally, the system was just shutting down.

    Chromebooks are not designed for servers. They don’t have great cooling systems. This is obvious, but for some reason, I was optimistic and thought I could wing it.

    I could add more cooling into the picture, probably add a fan, et cetera, but I still need to figure out the bios set up.

    Conclusion

    This is just the beginning of the set up. I have just installed image hosting application. I’m not yet installed Jellyfin, which is my media streaming service of choice. That would be more CPU intensive and probably even GPU intensive if it is present.

    If with one application, the system is just heating up and shutting down, there is not a lot of hope in deploying the entire stack.

    I have now returned the CPU. Time to be on a lookout for probably a better mini PC.

    Learnt about setting up

    • Server operating systems
    • Started looking into network attached storage
    • Learnt a lot about cooling and temperature monitoring, et cetera
    • Learnt about the limitations of using tipi and customs volumes

    All in all an interesting experiment of around 5 hours. Need to be on the lookout for the next server now.

    The journey continues…

  • On the power of communities

    A bit of a story, I recently wanted to buy a mini pc for my home server. That’s a 20+k investment, even if I buy it in second hand. While taking to a friend, I realized that one more common friend had a pc lying around which was unused. After asking him about it, he quickly offered to give it to me since it was lying unused.

    A couple of interesting things happened here. I saved a significant amount of money and time, which would have gone into researching and purchasing the pc. My friend got rid of some old unused hardware which was lying around. We effectively contained the carbon footprint of the community too since I did not purchase yet one another pc. I potentially prevented a computer from entering the landfill. That’s a pretty damn good outcome!

    On communities

    We are social animals, we thrive in communities/tribes. Each and every one of us is potentially part of multiple communities. Family community, workplace community, your friends who you play football with etc..

    There are resources scattered in these communities which are wildly under utilised..

    Economics of scale is a very powerful fact of life. With volume, almost always price comes down. If communities are formed, a lot of things organically start working out.

    Use cases

    • Sharing subscriptions like iCloud, google one, YouTube, prime video etc..
    • Car pooling across groups like apartment groups & office groups
    • Collation of community media and resources like videos, music etc.. For example, uploading pics of an event, sharing videos after an event. Uploading performances for everyone in the community to check out etc..
    • Communication like posting events & updates, requesting referrals etc.
    • Listings for leasing for or for not money and managing exchanges. For example, I have a raspberry pi at home which I’m not using which I’ll happily lend to a junior at office if he wants to experiment on IoT.

    Types

    Communities in my opinion are of multiple types by the nature of entry

    • By property: you’ll be a part of a community by property of being a part of a family. Or by property of being employed at a place.
    • By trust: you and your friends will be a part of the community

    Dynamics are quite different in these communities. For example, you might comfortably give away your bike to a friend for a week, but will think twice to give the same bike to a coworker in your office.

    Some financially profitable use cases to experiment with

    • Backups: backblaze seems to offer a terabyte worth of data storage on hot s3 compatible medium for around 7 dollars a month. For one person, this might be overkill, but for a family of four it makes sense.
    • YouTube and iCloud has family plans which could be shared and are fairly cheap per member.

    Closeknit: an experiment

    Looks like discovery is one of the most important bottleneck. Closeknit aims to be a discovery and management platform for items and subscriptions.

    With Closeknit, you can join communities and discover under utilized resources.

    Let’s see how this goes.

  • 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.

  • 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.