Sid Verma Unnecessary tautology is unnecessary

Hi. I’m Sid. Some people also know me as Siddhartha.

I write software code for a living. For living, I take photographs, hike and bike across mountains, and explore filmmaking.

I’m currently available for hire. Feel free to reach out if you think we might work well together.
My previous employers are Tower Research Capital, CultureAlley and Smallcase.

ResumePhotosGithubInstagram

EmailTwitterKeybase


Eight months of unemployment and traveling

In March 2019, I left my job at Tower Research Capital, to take a small break from work and live aimlessly for a while. My mental health had been declining steadily for the last few years, and going away for a while seemed like the only way out.

I spent a lot of this period making small changes to my lifestyle. I started sleeping well (7 hrs is apparently a good sleep for me), and now I’m at a state where I’ve completely stopped using an audible alarm to wake up. Instead I’m mostly able to wake up at will. For really tight naps though, a lightly vibrating smartwatch has proven to be enough.

I think I’ve also made progress at becoming mildly competent at conversations, from being completely inept at it. I am reaching out to more friends now, and make sure to visit at least a few when I’m in their town. Dating, as a result is also much more easier and fun now.

I tried to get physical exercise into my schedule, but so far have failed to keep it up. I did, however, improve my diet a lot. Largely cutting out sugar and snacking did make enormous differences.

Most importantly, after a really long time though, I don’t feel depressed and anxious anymore. I’m able to focus more, and in general be more creative. Being intoxicated has gone back to being a leisure activity rather than an escape.

I’ve slowly incorporated back “work” into this lifestyle, and while it hasn’t been very long, it seems to be going pretty well. I’m working on being better at scheduling, managing stress, and being more efficient — which might be something for a later post.

A huge improvement, however, has been on how I travel. I spent the majority of the this time traveling around India and southeast Asia. While I was used to backpacking for long stretches, they were often localized to a smaller area. Leading a nomadic life on a budget for longer periods had other challenges. Things become expensive when you start covering large distances frequently. I started taking more items into consideration when traveling now. In no specific order, I’m just gonna list things I take into consideration now which I didn’t really before:

  • Location of the airport/station - The ticket cost is only part of the cost of getting from city A to B. Most airports tend to be located far away from the inner city or where I’d probably intend to stay. Arriving at odd hours could mean that public transport might not be available at that time, and I’d have to spend a quite a bit on taxis to get to my ho(s)tel. Sometimes, I spent a day for cheap near the airport, to move to a better place the next day.
  • Frequent flier miles - While budget airlines would often have cheaper tickets, sometimes you are able to spot cheap flights on full service airlines with rewards programs. If you fly frequently, factor in the value of miles you acquire too while making a decision. They can add up to quite a significant amount.
  • Wide open dates - Having wide open dates allows you to be able to choose cheaper options of travel, as cost of stay might not vary a lot between cities.
  • Keep day-to-day schedule light - Having too many things to do in a day can get a bit hectic, which might negate why you’re traveling in the first place. Keep a light schedule. It also allows you to opt for slower but cheaper public transport than otherwise.
  • Work for stay - I used workaway and worldpackers to find places where I can spend some amount of my time helping out small businesses or organizations in exchange for free stay/food. Worth checking out if you find something suitable.
  • Focus on your diet - It’s often easy to fuck up your diet while traveling. You want to try out the local food, dessert, beer, etc; and by all means - do, but keep track of your calories. If you’ve been planning on getting on a lighter diet, it can be a good time to start that too. I, personally feel a lot less hungry while I’m traveling, so I’ve been using that to my advantage. Eating less is cheaper too.
  • Fruits are your friend - Complement your diet with fruits. They tend to be a lot cheaper, and pretty good for you. Also, note that these two points don’t mean that you should be starving yourself. Use your brain and don’t fuck yourself up.
  • Layer up in colder climates - This is a popular advice which really helps in keeping your luggage light. On a snowy trail I was even able to get by with a thinner sleeping bag by sleeping in my layers. YMMV.
  • Invest in lighter/smaller items - When going camping, a very good part of my luggage would be made up of a foam mattress, a cheap sleeping bag and a heavy tent. Investing in slightly expensive tiny inflatable mattresses, denser sleeping bags and a lighter tent reduced my luggage by half in volume.
  • Reduce your baggage - A lighter bag allows you to move around in the city without massive pains. Sometimes, you can opt for leaving stuff you definitely won’t need, at a friend’s place, or in rented locker rooms (most airports, bus and railway stations would have them). Eg - work equipment, extra/unseasonal clothes, etc. Also, get into the habit of doing laundry and pack fewer clothes.
  • Embrace your laptop - I had gotten far too comfortable with my home and office setup to be able to work on a chiclet keyboard with a single tiny screen again. It took me a lot longer than expected to adapt to this setup. I wish that I had a smaller machine too, as a 15-inch laptop can sometimes be too big to carry and fit in day-packs. If you really like multiple screens, there are many laptop-sized portable USB-C powered screens available in the market which you can try.
  • Smaller power banks - It’s far more advantageous to carry multiple tiny power banks instead of one huge one. They are easier to carry around while using the device, and you can charge all off them parallelly in a short period of time.
  • Keep track of your expenses - At least weekly, go through your categorized expenses and check for anomalies. It’s quite common for people to save a lot while living in cheap hostels, but spend a huge amount on their pub crawls. I use Firefly III which is really powerful at what it does. But, even a plaintext list would work for a start.
  • Work from cafes - I tend to like working from cafes — all the white noise allows me to focus much more easily. On most last days in towns, when I check out in the morning and have to travel in the night, I’d just spend the whole day at a cafe, saving on the stay cost. Though, initially, quite a few times, I did burn myself by spending more at those cafes than I’d have if I’d just stayed at my hostel. So, do take that into consideration.
  • Break long journeys up - If your next destination takes a lot of time to get there (I get really restless after spending 4+ hours awake in a closed vehicle), it might serve good to pick a point in between to split the journey at.


Doing sysadmin things through Terraform

Disclaimer: I have not worked as a sysadmin anywhere in my professional life, nor do I consider myself to be very good at it.

I’ve self-hosted a small part of my personal infrastructure (IRC bouncer, VPN server, torrent client, etc) for a while now. These services were set up over the course of a week on the tiniest DigitalOcean instance five years ago, never to be touched again for the next three years.

Two years ago, at Hackbeach 2017, Arun Singh gave a small talk on Infrastructure as code and Terraform. Around then, I had recently started frequenting /r/selfhosted, and decided to start self-hosting more of my services. Upon finally logging in into my server after three years, I couldn’t understand anything about the way it was set up. Port 443 seemed to be occupied by OpenVPN (for punching through restrictive firewalls), which proxied HTTP traffic to HAProxy which proxied it to a web server, and so on.

I didn’t quite remember how I had set it up, which configurations should be where, and had to go through quite some documentation to get up to speed on navigating the system.

This reminded me of the very similar problems that Arun had mentioned, which Terraform was trying to solve. I decided to give it a go, using the Docker provider to manage all the services.

This led to me reworking my entire infrastructure, where every service was deployed via Docker, and managed by Terraform. This included monitoring infrastructure, an RSS reader, a VPN server, a mailing list, etc. Later on, I also started managing my home-server (mostly media related services) with Docker and Terraform, with the former server acting as the edge node of it. Even the DNS rules related to the infrastructure (domain names of the various services, mail-server related records, etc) are now managed by Terraform using the Cloudflare provider.

Even after all this, I noticed that I sometimes still had to SSH into my server to setup some new services. Upon identifying those, they mostly seemed to be creating users+groups, creating some folders with special permissions, modifying iptables rules, and cleaning up after the services I’d removed – deleting the associated users and files/folders they left behind on mounted volumes.

This has led to me writing a provider, which I have crudely named Linux Provider. I am aware that this is not remotely accurate name. If you have a better but not restrictive name, feel free to me.

As I am currently the only user I know who uses it ⁠— It mostly utilizes commands found in some common linux distros. Mine are Ubuntu and Raspbian.

I have now arrived at a state where I don’t ever (almost) have to SSH into my server, to set up, modify, or completely remove a service. I can just delete mailman.tf and everything related to the setup of my mailserver will be removed from the system (almost again - explanation below). And I can see everything about my configuration in just a single folder, while navigating around using simple grep commands.

Explanation for (almost): I am still working on adding more capabilities to the provider. I still have to sometimes login into the machine modify firewall rules, if dealing with a non-HTTP service. Also note that my motivation is not to never use SSH; it is to make the configuration powerful enough that it doesn’t need me to.

Links to the code:

  • Terraform Linux Provider - As of writing this, it supports connecting to the client with SSH (key-based or password-based), and manage CRUD operations on files, folders, users and groups. Will keep working on improving this to add more resources.
  • Terraform code of the infrastructure - This contains two terraform modules (folders, basically), HAL-9000 and SAL-9000. The former is my home-server, a Raspberry Pi 4, and the latter is a DigitalOcean instance (a basic 4GB RAM one, costs around $20 per month). The home-server runs services like Kodi for media browsing, samba server for sharing the media as a Windows Network Share with everyone connected on the Wi-Fi, monitoring infrastructure, etc. The cloud server would have much more services like a wiki server, IRC clients and bouncer, Finances and social management server, Kanban board, VSCode editor, Wallabag (Pocket alternative), CalDAV and CardDav servers, and some more.

I have shown this to some of my DevOps friends, and not everyone seems to be a fan of it. Common complaints were “too much abstraction”, which I somewhat agree with, but am fine with, as the pros outweigh the cons for me.

Another complaint was that this was adding an unnecessary tool to a system which is usually pretty minimal (just SSH into a server, run a few commands, and log out). My take is that since this works in an agentless way, I can always move back if I ever needed to. This gives me an added benefit of using version control to see the system history (and revert changes), have all services+configs be reproducible and in a single folder, and be able to browse my system in a safe and easy way.

If you too have some strong reasons about this should not be done, feel free to tell me through .



Russians are harvesting our faces!


This Forbes article says that Faceapp is evil because they are harvesting user-data:

That (Faceapp’s TOS) may not be dangerous and your likeness may stay on Amazon servers in America, as Forbes has determined, but they still own a license to do whatever they want with it. That doesn’t mean the app’s Russian parent company, Wireless Labs, will offer your face to the FSB, but it does have consequences, as PhoneArena’s Peter Kostadinov says:

You might end up on a billboard somewhere in Moscow, but your face will most likely end up training some AI facial-recognition algorithm.

For context, here’s the lines from FaceApp’s Terms of Service which are been targeted:

You grant FaceApp a perpetual, irrevocable, nonexclusive, royalty-free, worldwide, fully-paid, transferable sub-licensable license to use, reproduce, modify, adapt, publish, translate, create derivative works from, distribute, publicly perform and display your User Content and any name, username or likeness provided in connection with your User Content in all media formats and channels now known or later developed, without compensation to you. When you post or otherwise share User Content on or through our Services, you understand that your User Content and any associated information (such as your [username], location or profile photo) will be visible to the public.

In comparison, here are a few current (and one defunct) websites where users are known to share their faces quite a bit:

Facebook:

When you share, post or upload content that is covered by intellectual property rights (e.g. photos or videos) on or in connection with our Products, you grant us a non-exclusive, transferable, sub-licensable, royalty-free and worldwide licence to host, use, distribute, modify, run, copy, publicly perform or display, translate and create derivative works of your content (consistent with your privacy and application settings). This means, for example, that if you share a photo on Facebook, you give us permission to store, copy and share it with others (again, consistent with your settings) such as service providers that support our service or other Facebook Products that you use.

Instagram:

When you share, post, or upload content that is covered by intellectual property rights (like photos or videos) on or in connection with our Service, you hereby grant to us a non-exclusive, royalty-free, transferable, sub-licensable, worldwide license to host, use, distribute, modify, run, copy, publicly perform or display, translate, and create derivative works of your content (consistent with your privacy and application settings). You can end this license anytime by deleting your content or account. However, content will continue to appear if you shared it with others and they have not deleted it.

Snapchat:

For all content you submit to the Services other than Public Content, you grant Snap Inc. and our affiliates a worldwide, royalty-free, sublicensable, and transferable license to host, store, use, display, reproduce, modify, adapt, edit, publish, and distribute that content. This license is for the limited purpose of operating, developing, providing, promoting, and improving the Services and researching and developing new ones. Because Public Content is inherently public and chronicles matters of public interest, the license you grant us for this content is broader. In addition to granting us the rights mentioned in the previous paragraph, you also grant us a perpetual license to create derivative works from, promote, exhibit, broadcast, syndicate, sublicense, publicly perform, and publicly display Public Content in any form and in any and all media or distribution methods (now known or later developed). To the extent it’s necessary, when you appear in, create, upload, post, or send Public Content, you also grant Snap Inc., our affiliates, and our business partners the unrestricted, worldwide, perpetual right and license to use your name, likeness, and voice, including in connection with commercial or sponsored content. This means, among other things, that you will not be entitled to any compensation from Snap Inc., our affiliates, or our business partners if your name, likeness, or voice is conveyed through the Services, either on the Snapchat application or on one of our business partner’s platforms.

Twitter:

By submitting, posting or displaying Content on or through the Services, you grant us a worldwide, non-exclusive, royalty-free license (with the right to sublicense) to use, copy, reproduce, process, adapt, modify, publish, transmit, display and distribute such Content in any and all media or distribution methods (now known or later developed). This license authorizes us to make your Content available to the rest of the world and to let others do the same. You agree that this license includes the right for Twitter to provide, promote, and improve the Services and to make Content submitted to or through the Services available to other companies, organizations or individuals for the syndication, broadcast, distribution, promotion or publication of such Content on other media and services, subject to our terms and conditions for such Content use. Such additional uses by Twitter, or other companies, organizations or individuals, may be made with no compensation paid to you with respect to the Content that you submit, post, transmit or otherwise make available through the Services. Twitter has an evolving set of rules for how ecosystem partners can interact with your Content on the Services. These rules exist to enable an open ecosystem with your rights in mind. You understand that we may modify or adapt your Content as it is distributed, syndicated, published, or broadcast by us and our partners and/or make changes to your Content in order to adapt the Content to different media.

Google:

When you upload, submit, store, send or receive content to or through our Services, you give Google (and those we work with) a worldwide license to use, host, store, reproduce, modify, create derivative works (such as those resulting from translations, adaptations or other changes we make so that your content works better with our Services), communicate, publish, publicly perform, publicly display and distribute such content. The rights you grant in this license are for the limited purpose of operating, promoting, and improving our Services, and to develop new ones. This license continues even if you stop using our Services (for example, for a business listing you have added to Google Maps). Some Services may offer you ways to access and remove content that has been provided to that Service. Also, in some of our Services, there are terms or settings that narrow the scope of our use of the content submitted in those Services. Make sure you have the necessary rights to grant us this license for any content that you submit to our Services. Our automated systems analyze your content (including emails) to provide you personally relevant product features, such as customized search results, tailored advertising, and spam and malware detection. This analysis occurs as the content is sent, received, and when it is stored.

Youtube:

By submitting Content to YouTube, you hereby grant YouTube a worldwide, non-exclusive, royalty-free, sublicenseable and transferable license to use, reproduce, distribute, prepare derivative works of, display, publish, adapt, make available online or electronically transmit, and perform the Content in connection with the Service and YouTube’s (and its successors’ and affiliates’) business, including without limitation for promoting and redistributing part or all of the Service (and derivative works thereof) in any media formats and through any media channels. You also hereby grant each user of the Service a non-exclusive license to access your Content through the Service, and to use, reproduce, distribute, display, publish, make available online or electronically transmit, and perform such Content as permitted through the functionality of the Service and under these Terms of Service.

Vine:

You acknowledge that you have granted us a worldwide, non-exclusive, royalty-free license (with the right to sublicense) to use, copy, reproduce, process, adapt, modify, publish, transmit, display, and distribute such Content in any and all media or distribution methods (now known or later developed). We may modify or adapt your Content in order to transmit, display, or distribute it over computer networks and in various media and/or make changes to your Content as are necessary to conform and adapt that Content to any requirements or limitations of any networks, devices, services, or media. You are responsible for your use of the Vine Archive, for all Content you provided, and for any consequences thereof, including the use of your Content by other users and our third party partners. You understand that your Content may be syndicated, broadcast, distributed, or published by our partners and if you did not have the right to submit Content for such use, it may subject you to liability.

I’m not telling you to go install this app and bombard social media with aged photos of yours, but if you do - that photo is now with FaceApp, and also almost every other platform you shared it on.

The only difference would be that FaceApp has a Russian developer, while the rest of the companies are American.