This blog post’s introduction has been one of the toughest ones I had to write. Over the past 7 days, I think I rewrote it at least 20 times to not make it sound very sad. Finally, I chose to go with this one. Simply put, 2022 has been tough, but I think I made it through just fine.
Having witnessed many lows in 2022, I can’t help but wonder how it would’ve been if things were even worse. I am a firm believer in never giving up. I believe things can and will get worse if you give up or blame your fate instead of working on improving things that are in your control.
Nobody wishes for such a year. You make New Year’s resolutions hoping to better yourself or improve something around you or at the very least, to not make your situation worse. I made resolutions that fit one or more of these categories. What I really experienced was something else. I did end up being resilient. I learned a lot and am grateful to all the individuals that have been there for me during my tough times.
Hence, I’m grateful for the year it was.
Rewind
I don’t have a monthly breakdown of what I did in 2022, like the ones from my previous Happy New Year blog posts, but I have a few stats that I wanted to share on my blog.
Health
I did put on a lot of weight this year and I aim to lose of all of the bulk in a slow, steady, and sustainable way. But, that’s for later. I did try something new this year, Tennis. I enjoy playing tennis.
Travel
I did some light traveling this year. In August, I traveled to Seattle, WA and a few places in Montana. I loved Montana. In October, I went leaf peeping in New Hampshire.
Leo Messi is the greatest footballer ever to set foot on earth.
Today has been a very exciting day. I don’t know how the entire day went by. I have been cruising through it and I love it.
Lionel Messi has just sealed his status as the Greatest of All Time. Not that he needed a World Cup to prove it, but it’s more for the rest of the world. The debate just ended this morning. He has had a phenomenal tournament and carried Argentina to victory.
This whole tournament has been fantastic. The upsets, the surprises, the entertainment, the heartbreaks, the thrillers, and the drama – this World Cup had everything. And the finals — *chef’s kiss* — what an entertainer! The perfect result.
I want to write so much about Leo, but that’s for another time. For now…
Looks like WordPress has a new Jetpack Bot that posts updates to Telegram. This is convenient for people who use Telegram and follow my blog. You can now subscribe to the channel here: https://t.me/iam_mt_blog
2021 had a lot of ups and downs for me. The first six months of the year were great. I was killing it in terms of my resolutions and suddenly, everything went south. Everything I started came to a halt. I tried my best again to restart my efforts ever since and so far, it has been okay-ish. I talked briefly about it here. I plan on fixing it. Here’s an overview of my 2021 –
Overview
Health
2021 has been a polarizing year in terms of health and fitness for me. I have been the fittest and also had to deal with health issues. In terms of fitness, I set many PRs in 2021.
Workout data ever since I started tracking it with my Watch
I was at the peak of fitness before I fell sick and had to slow down and eventually end up stopping. The good thing that came out of it is that I know when I need to slow down and what needs to be improved in my training.
Side Projects
2021 was a bit different for me in terms of side projects. I started a few and barely found time to finish them. I finished some, but most of them haven’t had any code commits in a while. I got busy with office work and so I had to delay working on them. I should manage my time better in 2022 and finish working on these projects. I’m very excited and looking forward to publish them.
Travel
I consider myself very lucky to have been able to travel a little in 2021. I traveled to Virginia in July to meet my friends from Master’s. It was a fun trip and was very happy to see my friends. I even got a chance to go on a vacation to Hawaii in December. It was a wonderful experience. I visited the Big Island and stayed at the Waikoloa Village. Learned a lot about Hawaiian culture, history, and how to pronounce the word Ukulele.
In May, for my birthday, my wife and I went on a 14.2 mile hike at the Coastal Trail, Palomarin Beach. It hike was tough but we both enjoyed it. It was beautiful.
I ventured into new areas of computer science and it turned out to be very interesting. I’ve read a lot of white papers, which I plan on writing about in the future. I have a few drafts around some of the interesting ones that I’ve read. I am planning on sharing my findings and thoughts around those soon.
I also spent time learning Swift and Swift UI while learning iOS development. The projects I mentioned earlier are written in Swift UI for iOS. One of the biggest advantages of Swift UI is that it removes a lot of the boilerplate code that you typically end up writing for common patterns while building UIs for iOS.
New practices
In 2021, I started practicing a few new thing such as mindfulness, daily journaling, etc. These have proved to be very powerful. They’ve had a significant impact on the way I think and behave in general. I feel grateful, thanks to these practices.
I will have a separate post talking about mindfulness and how it has had a positive impact on me.
Resolutions
In 2021, I couldn’t stick with all of my resolutions. I had to abandon a few, but I’m not disappointed by it. I’m happy with the outcome of the effort I put in.
In 2022, I think I might take it easy on my resolutions for a bit. I will wait a little before coming up with new resolutions.
And with that, here’s to a much better year ahead – 2022! Cheers!
I have a habit of documenting ideas, thoughts, learnings, etc. Naturally, I tend to try out a lot of note-taking applications in an effort to find the perfect app. Over the years, I’ve used a lot of note-taking apps. Every single time, I saw myself coming back to the default Notes.app that ships with macOS/iOS. It’s simple and always fit my requirement perfectly well. Most features offered by other apps are just feature bloat that I never used.
As I documented information, I learned that this process had a name, Personal Knowledge Management. Before the pandemic started, around late 2019, I started researching and learning more about Personal Knowledge Management and was quickly sold on the idea as it was more or less similar to what I had been doing.
Personal knowledge management (PKM) is a process of collecting information that a person uses to gather, classify, store, search, retrieve and share knowledge in their daily activities and the way in which these processes support work activities.
Personally, for me, PKM has proved to be helpful in capturing ideas and thoughts, organizing, extracting insights and producing better ideas.
After I started practicing PKM, I realized that using the basic Notes.app wasn’t going to cut it. That’s when I discovered the tools for thought, specifically RoamResearch.
Tools for thought
Roam Research Logo
I use RoamResearch for PKM. Roam describes itself as A note-taking tool for networked thought. I love the tool due to its amazing feature set. I initially tried Roam for a month in early 2020 and it blew my mind. I instantly switched my plan from a monthly plan to Believer plan (their version of a long term subscription – 5 years) since I knew I was going to use it on a daily basis. Roam has a feature called “backlinks” and it is an absolute game changer. You can link different pages by using square braces like so [[example]]. Roam also allows you to backlink blocks. You can think of it as a way of linking different bullet points in various sections of the text like so ((example)). Seeing Roam’s success, a lot of other apps copied this functionality and you can now implement your own PKM in one of these alternatives available in the market. There are a few free open source alternatives (clones literally) such as AthensResearch, Logseq, Foam, Obsidian etc.
Zettelkasten
Zettelkasten
There’s an amazing PKM technique called Zettelkasten. It’s a way of managing your thoughts and ideas. I could never completely implement it in the original way, but I do have my own way of doing it. It’s slightly different, yet it yields good results. At a very high level, the idea behind Zettelkasten is that you document your understanding of a concept or a thought and try to create a repository of linked information. Linking these bits of information is the key here. Any new finding or information going into this repository will have to have at least one link with the existing information in some way. More the links, the easier it is to cultivate a brand new idea or thought. If there’s no link, it doesn’t go in. Over time, you’ll see new ideas pop up due to this technique as you discover different pieces of information in your repository linking with other ideas in your repository that you initially didn’t intend to link with. Finding such pattern feels magical. I’ve experienced that a few times and it is mind blowing.
After a while, you’ll see that what you’ve been doing is basically cultivating ideas by gathering information and linking them together.
I’m fascinated by how our brains work and how the tools we use work. It almost seems like humans are prone to building tools that don’t necessarily align with the way our brains work. UX designers have been battling with creating interfaces that make it intuitive to work with. We’ve only been iterating on the existing interfaces.
Typically, human brains take a top-down, depth-first approach to learning. It’s only natural to start thinking about something and when something else related to it pops up, we starting digging into it and the process goes on. In order to really understand a concept, you need to understand the basic concepts that contribute to the parent concept. Learning any related concepts is a bonus. Wikipedia is built on this idea.
When it comes to coming up with ideas, naturally, we take a bottom-up approach. We first come up with individual thoughts and then later link them together to build a cohesive and coherent idea. The tools for thought that I mentioned above facilitate with this sort of thinking by using the backlinks feature. These tools can be used to implement a system to learn, which aligns with the way our brains naturally think.
Let me know if you find any of these tools useful or if you know of any other interesting techniques to document information.
If you go by the face value of it, it might seem like there isn’t much to it. More often than not, we tend to focus on making sure we improve certain features of a project we are working on. Instead, if we take the following approach, we can get to a safer outcome –
Define the problem – what is the outcome that you’re trying to achieve?
Invert it – what would guarantee the failure of achieving this outcome?
Finally, consider solutions to avoid this failure
This is a great way to start projects and progress through them.
The last few months have been chaotic for me. They could’ve been better, but I managed to accidentally introduce confusion, making them chaotic.
I started way too many personal initiatives and ended up finishing none. These weren’t necessarily tech projects, just some personal initiatives around health, managing time, growth, etc. Not all of these initiatives were left unfinished due to my unwillingness to complete them. Some were interrupted by work-related stuff, health-related stuff, unexpected events, etc.
One major area that lacked progress is my blog. It’s funny really, ’cause I have around 30 drafts and none of them are even close to being published.
I just got back from a much needed break and I feel humbly motivated. During the break, I got a chance to calm down, take a step back and look at the whole picture to figure out what the problem is and how to fix it.
I won’t discuss the initiatives here except for the one about fixing my blog. I tried to transform my blog into something that it wasn’t and in hindsight, it’s clear that it was terrible idea. I haven’t paid much attention to it since a while now. I want to add more fresh content to my blog. I’m excited and feel motivated to move past this chaos.
Today, I sat down with the intention of designing a logo for myself. I needed one for my upcoming projects. I didn’t know where to start. So, I made the following list of things I wanted in the logo –
My initials, MT
Some sort of association with Taurus
I wanted to come up with a few ideas and got busy drawing. Here’re a few drafts –
The very first draft
I wanted to use the eyes and the jawline of the bull as “M” and the horns and the upper part of the skull as the “T”. With that vision, I started working on more drafts.
Iterations
I considered the following rules during my design process –
It needs to be legible at 16×16
It should be scalable (should be a vector graphic)
It should handle monochrome and colors as well
The obvious tool of choice was Adobe Illustrator. I started working on converting my hand drawn drafts in to something more nicer. I came up with the following designs –
Although these expressed my vision, I wasn’t happy with the design. For starters, the combination of curves and sharp edges, felt a bit odd and disconnected. Also, these designs were not legible at 16×16. So, I started working on another design with the goal to have softer edges for the bull’s face and more curves to the bull’s horns. After 12 iterations, I was able to get to the design that I liked. Here it is –
MT
The bull’s jawline along with the eyes make up the “M” and the horns with the top part of the skull make up the “T”. It took me roughly 10 hours from the idea inception to completion. Overall, I’m pretty satisfied with the outcome.
Last year, when I wrote the “Happy New Year 2020” post, COVID-19 had just begun its course. Very few people in the world were aware of the full glory of the havoc it was about to wreak on the world. Looking back at that post, I just smile at how oblivious I was to what was brewing in December 2019.
2020 was brutal. My heart goes out to all families that have lost family members due to COVID-19, directly or indirectly. There have been a lot of cases where people couldn’t even stay with their families to say final goodbyes to their loved ones. Just thinking about all of it, saddens me.
In 2020, I’ve learned a lot about many things in life such as passion, being grateful, the kind of person I am, etc. On March 11th, when WHO declared the COVID-19 outbreak as a global pandemic, most companies let their employees Work From Home (WFH). Very soon, I got frustrated being cooped up in the house all day.
One afternoon, around mid-May, I received a marketing phone call from my bank. The bank employee asked me how I was doing, to which, I answered – “Not so great”. I said so because I was just frustrated staying home all day. He asked me if I was sick. I said, “No”. He then asked me if I had lost my job. I said, “No”. That was it. Those two questions just changed my perspective of the whole situation. I realized how grateful I was.
2020 in review
January: Most of January, I was in India with my Dad. I had a great time in Hyderabad and I am grateful for the trip. Celebrated Sankranthi at home. Also, started growing my hair long
February: Watched Super Bowl with friends. Had a lovely Valentine’s day dinner with my wife. Attended Vir Das’s stand up with friends, in San Francisco
March: Started WFH
April: Washed my hands so much that my skin started peeling off. Learned to make Hakka Noodles
May, June: Sindhu made me a homemade cake for my birthday. It was awesome. Played a lot of board games. Sindhu even wrote a post about it here
July: Visited my cute little nieces. Decided to improve my health and stay fit. Started running and functional training
August, September, October: Comparing the health data from my previous years, these were the months that I had exercised the most. Also, experienced the worst wildfire impact in California. The orange pic below is an actual photo I took with no filter
November: Went hiking at Lands End. Moved to a new apartment. Celebrated Diwali
December: My sister and her family came to visit and I had a lovely time with my nieces. Celebrated my 5th wedding anniversary
Resolutions
Last year, I didn’t really have any resolutions. However, this year, I’m working on a few resolutions that I will share over the coming few months.
Hope
Everyone is hopeful that the world will be back to normal with the vaccines being out. From what I have read, it looks like the world might return to normalcy by summer. Hopefully, that’s the case.
To all the essential and healthcare workers – Thank you!!
Here’s to a new year filled with hope, good health, happiness, and positivity! Cheers! 🎉
I am a big fan of handwritten notes. I write down a lot while reading, brain-storming ideas, working on code, working on side projects etc. Naturally, I end up going over a lot of notebooks. I have some at work and some at home. To give you an idea, at work, it takes me around 1.5-2 months to finish an entire notebook. At home, it is usually around 3-4 months. That’s approximately 8-10 notebooks per year.
My biggest problem is storage. I am not a fan of storing these notes long term, since most of the notes are only useful at the time of my brain-storming. I usually store just the pages with notes I like to hang on to and throw away the notebook. I’ve always hated doing that.
I digitize my handwritten notes every now and then to store them permanently. This system has been working out ok for me so far. I was hoping to improve this process.
reMarkable 2
In order to solve this problem, I got the new reMarkable 2. I pre-ordered it in early March and after a lot of waiting, got it mid-October. After using it for two months, here are my thoughts.
reMarkable 2 and its Marker with eraser
What I like
I primarily use if for reading pdfs (love the highlighting and notes feature) and writing notes. What I like about it is that it has a distraction-free setup. The limited browsing access is something I really like. The display is great and the writing experience is just enjoyable. The sound that the marker makes while writing emulates the feel of writing on paper. The marker’s writing latency is just too good. It almost matches the Apple Pencil 2.
Writing experience on reMarkable 2
Also, the fact that it’s just a linux box open with the SSH interface, makes it more appealing to me.
The handwritten notes to text conversion feature in the reMarkable 2 tablet works well. I do have to make some changes to the final text, but that’s more easier than writing everything down again from the scratch.
What I don’t like
The price point of $399 (+ $49 for the pencil) seems high for what it offers and might not be right for everyone. I wish it was around $199. I do feel the marker is a bit heavy, but, it doesn’t bother me too much.
Its feature set is perfect for my usage and that was exactly what I was looking for.
Final Thoughts
I think the reMarkable 2 is a fantastic device and I like it. But, I don’t think it is meant for everyone. If you are like me who likes to write a ton, then it might for the right device for you. If you don’t care about the writing experience or are not bothered by the distractions an iPad ships with, then getting an iPad might be a better option.
My Google Chrome extension, Rearrange Tabs, hit the major milestone of 10,000 active users! I never expected this to happen and it goes without saying that I am elated.
I started the project so that I could move tabs around in the browser without having to use my mouse and to satiate my obsessive compulsiveness to arrange my tabs in a particular order. I decided to open source the code so that other users would benefit from it and maybe even build something better. To my surprise, I saw users contributing back to the project and adding new features, which was really cool. That’s the beauty of Open Source.
5.5 years later, the extension has now reached 10,000 active users. The fact that so many users actively use it and like it, makes me feel good.
Thanks to all the contributors of the project. Cheers to all of you and the extension’s userbase! 🥳 🎉
Starting a new project and not finishing it can be quite a discouraging experience. If it ends up becoming something you tend to do often, you lose the motivation to pursue new ideas and that can be bad.
How many times have you started a project and felt like you should’ve picked another one? What if you have a technique to figure out which idea/project to pick next? You should pick the one that you’re more inclined towards. But, how do you get clarity around this inclination?
It’s extremely important to have clarity on why you want to work on a project, how interested you are, and which technology you want to use. I’ve come up with a technique that I use myself for getting this clarity. It’s simple really.
PIT Score
PIT stands for Purpose Interest Technology. I consider these three as the key factors that provide clarity on which idea to pick next. I’ve tried this technique with a few ideas/projects now and I’m pleased to inform you that it has worked really well.
Who is it for?
Do you enjoy working on side projects in your spare time?
Do you have a lot of ideas that you want to work on, but never get around to?
Do you have trouble prioritizing your ideas?
If you’ve answered “Yes” to the above questions, this technique is for you. Although, it is not entirely just for people that fall in to this category.
How does it work?
The technique itself is fairly straight forward. You assign a certain inclination value for each of the key factors, for each of your ideas and calculate the PIT score of each idea and sort them by the score. Here’s how it is done.
I’ll be using the following list of ideas to explain and demonstrate the technique:
Learn Machine learning
Build a web UI for a CLI tool
Write a fun new game
Step 0: Define inclination values for each factor and assign scores
Each of the key factors i.e. Purpose, Interest, and Technology, need a pre-defined set of values that denote your inclination towards the corresponding idea.
Even though you can update these later, it will be rare.
For Purpose, your inclination values could be:
Personal use
Learning new technology
Help solve a problem for others
For Interest, your inclination values could be:
Very interested
Interested
May be with some external motivation
For Technology, your inclination values could be:
Very familiar
Sort-of familiar
Unfamiliar
These are some examples that I’ve come up with. They can be customized and changed per your needs.
Assign a score to each of these inclination values. You need to be careful with assigning scores since they make or break this technique. You can set up a scale for yourself and assign a score from that scale. In the current example, I’ve used a scale from 1 to 10.
Some example scores are –
Purpose:
Name
Score
Personal use
10
Acquire new skill
5
Help solve a problem for others
1
Interest:
Name
Score
Very interested
10
Interested
7
May be with some external motivation
2
Technology:
Name
Score
Very familiar
9
Sort-of familiar
6
Unfamiliar
2
These are just values that I’ve come up with. These are extremely subjective. So, you’d have to define these values appropriately, according to you. For instance, the scores you’d assign to “Unfamiliar” technology or “Acquire new skill” purpose, might be completely different from the scores I’d assign myself. As you’ll see, these scores play a crucial role in computing the PIT score.
Step 1: Apply PIT values to your ideas
For each of your idea, populate the Purpose inclination, Interest inclination, and Technology inclination values.
Idea
Purpose
Interest
Technology
Learn Machine learning
Acquire new skill
Interested
Sort-of familiar
Build a web UI for a CLI tool
Help solve a problem for others
Very interested
Unfamiliar
Write a fun new game
Personal use
Interested
Very familiar
Step 2: Calculate
This is by far the easiest part. You substitute the scores for each of the values and calculate the PIT score of each of your ideas using the following formula:
PITscore = Pscore + Iscore + Tscore
Here’s how the table would look like –
Idea
P score
I score
T score
PIT score
Learn Machine learning
5
7
6
18
Build a web UI for a CLI tool
1
10
2
13
Write a fun new game
10
7
9
26
Step 3: Sort
Sort the ideas by the PIT score in descending order. Voila! Your projects are now sorted by a score that provides clarity on which idea you’re most likely to finish once you start. This is due to the inclination you have towards the project or the idea.
Idea
P score
I score
T score
PIT score
Write a fun new game
10
7
9
26
Learn Machine learning
5
7
6
18
Build a web UI for a CLI tool
1
10
2
13
This sorted list provides clarity around the friction you’d face in order to start a project.
Higher the PIT score, lower the friction.
As you have probably noticed, even though the interest level is “Very interested” for the project “Build a web UI for a CLI tool”, the PIT score ended up being pretty low. This is due to the fact that the technology is “Unfamiliar” and the purpose is “Help solve a problem for others”, the scores of which are pretty low in the given example. Just by looking at the original list and assuming that you would want to start with that project would’ve been a mistake. On the other hand, “Write a fun new game” has the highest PIT score, even though the interest level is only “Interested”.
A spreadsheet can be a convenient option to maintain this list and the scores. Bonus, use spreadsheet functions to automate the calculation and sorting process. This is what I currently do. Building a simple web page to handle this would be really easy, but, it had a very low PIT score 😉 and so I avoided it.
Important
In order for this technique to work, you need to be careful while picking the scores for the inclination values.
Extensibility
You can extend this technique to add more factors to your ideas, finer-grained inclination values, and better scoring.
Applying this technique to my personal list of projects surfaced a lot more information about my projects. I was happy with the outcome.
Given a range, calculating the mid is a straight forward process.
mid = (low + high) / 2;
But, there’s a problem with this line. Adding two large positive numbers can result in an overflow, if the sum is more than the max positive number.
One way to fix it is to use the following:
mid = low + ((high - low) / 2);
This’ll prevent the expression from overflowing to a negative value. I’ve read this line in random code so many times and wondered why anyone would want to write it this way instead of the simpler and more straight forward way I mentioned in the beginning of this blog. It wasn’t until I read this lovely blog post that I understood the reason behind it.
I got an email this morning, with the subject “North + Google” from North. According to the email, Google had acquired them. A quick Google search about the company pleasantly surprised me that it was Thalmic Labs. I didn’t realize Thalmic Labs changed their name to North.
I still remember getting excited when I received one of their very first few devices back when they launched and were still small. It was called Myo armband. It seemed really promising.
I played around with it for a few days and wrote a tiny application to track hand gestures and control my OS with the gestures. It was fun. Then, I got busy with other things and completely forgot about the product and the company. I knew they had potential.
I am quite happy for them and believe that Google will use North’s resources wisely. For me, personally, reading the email reminded me of how much I enjoy working on fun side projects. I am glad that hasn’t changed one bit even today!
I’ve decided to move away from a Ligue 1 team and try out Bundesliga players. This was to help me upgrade my weak defense. Here’s my latest updated team –
I love Football and I play FIFA 20, especially FIFA Ultimate Team (FUT), a lot. I love the game in spite of the awful patches EA Sports releases to screw up the gameplay often times.
FUT in FIFA is a fun mode where you can build your own club with players from different clubs/nations/leagues. I enjoy curating my team. I tweak around the instructions you can apply to a player and see how the player performs during a match. It’s really fun.
So far, my pack luck has been great this season. I’ve packed Leo (94 rated CL untradable), Cristiano (93 rated CL untradable), Rijkaard (90 tradable Prime Icon) and Kante (89 rated untradable). I’ve managed to pack even Salah (90 rated untradable), Mahrez (89 rated ShapeShifter untradable), Lemar (87 rated FUT Birthday untradable).
Every year, I write a Happy New Year blog post to recap my previous year. I’ve been doing this every year since the past 10 years. It sort of became a tradition. Now that we’ve entered a new decade, I thought it’d be fun to start writing a blog post to recap my previous decade. This will be my first Decade In Review blog post.
My life completely changed in the past decade. I experienced a lot of ups and downs (I lost my Mom 💔). I learned a lot of valuable life lessons. All the difficulties I faced made me a stronger person. It has been a humbling experience. I feel very fortunate and am grateful for that.
Highlights 🎉
👨🎓Graduated with a Master’s Degree in Computer Science
👨💻Became a professional Software Engineer
🤵 💍 👰Got married
Influences & Inspirations 🙏
Here’s a list of people who’ve influenced or inspired me to be a better version of me in the past decade –
Holy cow! 2019 went by real quick. The theme I chose to go with for 2019 was Consistency. Whatever I did, I just wanted to do it consistently. Leading a disciplined life has always been something that I strived for, but, I never really put in my effort in the right direction. To lead a disciplined life, consistency is the key. Humility also adds a lot of weight to it.
The way I arrived at this decision was completely unexpected and accidental. In January 2019, I decided to come up with a resolution for the rest of the year. In order to do this, I made a big list of things I wanted to do. Then, I prioritized the list of things to figure out which one meant the most to me. I jotted down all the pros and cons of picking up a particular resolution from the list. I put in a lot of thought into this, since, picking up a resolution meant that I had to follow it through for the rest of the year. After a point, all the things I prioritized bubbled up the fact that I needed to be more disciplined about whatever I did.
I mean, by definition, a New Year’s Resolution means
A firm decision made on New Year’s Eve or New Year’s Day to do or refrain from doing something over the course of the coming year
Thus, I ended up discarding all my specific resolutions and sticking with a high-level resolution of being disciplined.
After carefully assessing my year, I feel like I did a decent job at maintaining consistency. I could’ve done better, but, I’m getting there. I’ve at least got the basics down. So, I can use this experience and knowledge to get better in 2020.
Highlights of 2019
→ Started at Adobe.
→ Went on a 3 day 32 mile backpacking hike/camping trip to Havasupai. Hiked to Havasu falls, Mooney falls & Beaver falls. It was an amazing experience. Highly recommend the hike.
I’m visiting India after 2 years and my first flight is via Dubai. It’s a 14 hour flight and I’ve decided to try something new this time. I usually like to watch movies during my flight. So, I’ve decided to do just that, except, this time, I’m planning on blogging my reviews of all the movies that I watch during the flight.
Let’s see how this one goes.
Uri: The Surgical Strike
⭐⭐⭐⭐
Rating: 4 out of 5.
It’s about India’s Surgical Strike. Worth a watch. I liked the screenplay of the movie. I didn’t get bored at any point during the whole movie. On to the next one.
Diego Maradona: A documentary
⭐⭐⭐
Rating: 3 out of 5.
This is just a documentary about World Champion, Maradona. Even though the documentary felt very long, it was good. Learned a lot more than I knew about Maradona, especially about Napoli, Italy, and Serie A during the late 80s.
Ad Astra
⭐
Rating: 1 out of 5.
Mostly picked this for Brad Pitt. After watching the trailer it seemed interesting and oh boy, I was so wrong. The movie is about how an astronaut learns that his father, another astronaut, is alive, after decades of believing that he died during one of the space missions to Neptune. Even though the idea of the story was fresh and even interesting, the movie itself was pure torture. Hope the next one is a better one.
Aladdin
⭐⭐⭐
Rating: 3 out of 5.
As a kid, I grew up watching Disney’s Aladdin cartoon. I liked the movie. Can’t tell if I liked it because it was better than Ad Astra or if I genuinely liked the movie. Either way, I enjoyed it.
At this point, I was really exhausted. I watched way too many movies back-to-back. Thought a little sleep might fix that and did just that. I did watch another movie after waking up.
Angel Has Fallen
⭐⭐
Rating: 2 out of 5.
I watched Gerard Butler’s Olympus Has Fallen and London Has Fallen movies. So, picking up Angel Has Fallen seemed like a no brainer. It’s about how his character in the movie is set up and how he overcomes it to prove his innocence. It was okay. It definitely wasn’t a great movie.
That wraps up my first flight. I’ll try to watch the El Classico on my next flight.
I am on my connecting flight now. I guess I have time for another movie.
The Hustle
⭐
Rating: 1 out of 5.
I felt like watching a comedy movie and picked The Hustle. It’s about how two con artists meet each other and run a long con. Sadly, the movie was disappointing.
Instagram is a simple and fun application. The simplicity of the application is what led to its success. It is extremely addictive.
However, its most important feature or lack thereof, is the regram functionality. Instagram doesn’t allow users to just repost the same image from another user natively. The absence of this functionality is just wonderful. Users can definitely install third party apps that support this functionality, but, Instagram doesn’t support it natively.
As a user, your feed is usually pretty clean. There’re no non-sensical memes or random images showing up in your feed. You definitely can subscribe to them, but, you don’t see them unless you specifically subscribe to them.
Personally, I think this is great. It keeps the app very focused and clean.
A while ago, I wanted to build a data aggregation service that’d allow its users to fetch data from a set of data sources defined by them. I wanted to allow the users to configure the data fetch interval for each source. This led to the birth of the Dashboard project.
Dashboard is a data aggregating web application that provides a way to customize and display the aggregated data. It’s an open source project. The code is hosted on GitHub.
Dashboard
Features
Webhook support to receive data
Fetch data from various sources at different intervals
Plugin support to enable extensibility
Use Cases
Dashboard can be used to display any arbitrary updates from various sources. Some specific use cases of Dashboard can be –
Keeping track of health of endpoints
Display data received from Git hooks
Monitor blogs for updates
The possibilities are endless.
Stack
The application backend is written in Go. For this use case, Go fits perfectly well and I really like Go. The current implementation of frontend is in vanilla JS (I feel primitive just saying that 😜). However, I do plan on using Vue or Preact.
For details regarding the future of the project and more, please check out the README file of the project.
Focus
Before I started working on this project, I made sure I focused on 3 things:
Simplicity
Extensibility
Data parsing/display
Every time I took a decision around a particular feature implementation, I went through this list to ensure none of these aspects were sacrificed.
Simplicity: I wanted to make the app very simple to setup, configure, and use. I put in a lot of emphasis on the simplicity of the application. There is no database. The installation is pretty straight forward. Just download the binary file and run it. Thank you, Go!
Extensibility: I made sure to allow users to write their own plugins. These plugins are shareable. Users can display data from whichever source they want to via these plugins.
Data parsing/display: Once we fetch the data from a source, we need to have control over which parts of it we want to display in the UI. The user should be able to display only the data that matters. Right now, this is static. But, I’m working on a solution to allow users to map data.
Development
The project is under development and is still in Alpha stage. I plan on working on it in my free time. Any contribution to the project is welcome.
After, what seemed like a long wait, WordPress 5.3 is finally here. Right on time. Congratulations to the WordPress team. I just finished upgrading my blog to the latest version of WordPress. I’ve been waiting to try out the final version of the brand new TwentyTwenty theme that ships with the latest version of WordPress.
My blog is currently running the TwentyTwenty theme. There are a few noticeable UI glitches, but, I’m OK with them. I definitely don’t want to switch back to the old theme because of these bugs. I’m sure these will be fixed soon. I haven’t investigated these bugs yet. These could even be caused by any of the plugins I’m using.
Before continuing to read this post, I would like to clarify that this is not an in-depth review of the Series 5 (S5) nor is an actual comparison of Series 5 against a Series 4 (S4). This is more of an observation based on the specs mentioned on Apple Watch’s website.
Most of Apple’s products are amazing. I love my Apple Watch. I watch all of Apple’s product announcements with a great deal of enthusiasm. Naturally, I was really looking forward to yesterday’s Apple event. The introduction video is really impressive.
I decided to switch back to using WordPress as my blogging platform this May. At the same time, I also took the decision of removing Google Analytics (GA) from my blog. I wasn’t sure if it was a good idea. So, I thought I’d remove GA for a few months and see if I miss its value.
I used GA primarily to identify which posts attracted the most readers and calculate the bounce rates. After a while, I felt like I didn’t really need this information, since, I wasn’t really doing anything with it. I just wrote about things that I thought were interesting. I was never motivated by my blog’s user engagement, to write about topics I wasn’t interested in.
I love coffee and side projects. I wanted to solve a coffee related annoyance that I faced on a regular basis. This post is about how I built a Coffee Pot Monitor, to track the coffee level in a coffee pot, remotely, using a Load Cell, HX711 amplifier, and a Raspberry Pi.
The Annoyance
Imagine yourself being busy with something important. You take a quick break to grab some coffee and walk over to the break room only to find an empty coffee pot.
Oh, the horror
There’s no way for me to know the amount of coffee left in the pot, without walking over to the break room and checking it out. The coffee pots we have at work are opaque. So, it’s not possible to know the amount of coffee left in the pot by looking at it.
Initial Solution
I came up with a solution to my problem. A camera mounted near the coffee pot would stream the video data to a Raspberry Pi. Using Computer Vision on this stream, I can identify when someone uses the coffee pot. When someone pumps the coffee from the pot, my algorithm decreases the coffee level in the coffee pot by a static value (one cup). A dashboard, which can be accessed via a URL, displays this data in realtime.
There’re several drawbacks to this approach. For starters, my algorithm assumes that every person pumps exactly one cup of coffee. Now, consider the case of an empty, opaque coffee pot. A person tries to pump coffee and realizes there’s no coffee left. In this case, my algorithm still decreases the coffee level by a cup even though no coffee is pumped.
To say the least, it is a convoluted approach.
I knew it was a convoluted idea. I wanted to build it anyway.
One fine day, I shared the idea with a friend from work, Rajesh. He liked the thought behind the project and suggested an improvement.
Improved Solution
Rajesh suggested using the coffee pot’s weight to calculate the coffee level. That was it. Suddenly, it became obvious. It’s a great way to track the volume of the coffee in a coffee pot.
The potential of the project got us both excited. We submitted the idea to the quarterly Hackathon at work. Long story short, we won the first prize for our implementation of this idea.
First, hook up the Load Cell to the HX711 as shown in the image below:
Connecting a Load Cell to a HX711 amplifier
Next, connect the HX711 amplifier to Raspberry Pi as follows:
VCC to Raspberry Pi Pin 2 (5V)
GND to Raspberry Pi Pin 6 (GND)
DT to Raspberry Pi Pin 29 (GPIO 5)
SCK to Raspberry Pi Pin 31 (GPIO 6)
Connecting a HX711 to a Raspberry Pi
That finishes our hardware setup. Let’s move on to the software side.
We use the HX711 python library in Raspberry Pi to read the Load Cell data from the Hx711 amplifier. Every three seconds, the Raspberry Pi posts the data to Firebase. A simple static HTML page serves as the dashboard by displaying the realtime data from Firebase.
The build
We need two pieces of wood. One of the pieces, acts as a base to place the coffee pot. The other acts as a stand for the Load Cell. These are placed on either sides of the Load Cell. In my case, a colleague of mine, Vijay, helped with cutting out these two pieces of wood.
Top view of the equipment
Side view from an angle
Load Cell positioned between two wooden planks
Load Cell zoomed in
Load Cell connected to the HX711 amplifier and Raspberry Pi
Another view of the Load Cell
Architecture
Data flow from Load Cell to the user’s browser
The Load Cell reads the weight of the coffee pot
HX711 module amplifies the Load Cell data and sends it to Raspberry Pi
Raspberry Pi posts the data to Firebase
Firebase publishes this data to all the clients
The browser displays the updates
How it works
There is a one time setup process. First, weigh the empty pot on the Load Cell. Let this weight be w1 (min). Next, weigh the coffee filled pot on the Load Cell. Let this weight be w2 (max). At any given point of time, the weight of the coffee pot ranges from w1 to w2.
Every time someone pumps (or pours) coffee from the pot, the weight of the coffee pot decreases. This data is published to all the clients using Firebase. It’s as simple as that.
Here’s the final product:
Coffee Pot placed on the wooden platform
Here’s an animation of the dashboard getting updated in realtime:
Dashboard getting updated in realtime
Conclusion
The entire cost of setting this up is approx. $45. It’d be great if we could build this at a much lower price. That way, it can be more affordable and practical. I’ll soon open source the code behind the project and provide the GitHub link to the repository.