All posts by Abhishek Nagekar

Elementary Theme For Jekyll

It is hardly ever the case that I work on a single side project for years, a sentiment that my fellow software developers might share with me. This blog that you’re reading this article on is one such rare project. And although there have been crests and troughs in terms of my activity here, it has been fairly consistent, especially considering my reputation of abandoning projects.

Anyway. Where I was going with all that blabber was that this template that you’re reading this on is already two years old now, and I recently rolled out an update that I was pretty proud of. In this little post, I’d like to outline in brief how I reached the current version of this template and why I’m super happy with the outcome.

Backstory

I created the template by simply removing as many unnecessary parts of my then current template as possible and making it a simple, one request only template. It was essentially a blank HTML page with few lines of CSS, no JavaScript, default browser font and styles. Of course, it was blazingly fast but also quite ugly. I went to the extreme end of the spectrum as my starting point.

Slowly, I added stuff to it, on a strictly per-requirement basis. More CSS, some JavaScript, introduced SCSS to make the CSS maintainable, made the JavaScript optional as not everyone needs a dark mode and so on. I made the project installable via git submodule so that it is easy to customize it and at the same time pull updates from upstream.

Current status

It feels good to not trigger advertisement and tracker blocking tools like uBlock Origin. And by not loading hundreds of kilobytes of minified code that contains trackers, suboptimized routines and who knows what, I’m also being fair to my visitors who, when you think about it, trust you as the web developer by loading and executing your code on their machines.

On a more objective side of things, here are a couple of features (copied over from the project’s github readme) I’m super happy to announce:

  • Lightweight, <10KB CSS, <3KB (optional) JavaScript + 15KB Open Sans font file + your content. That's less than 40KB transferred for most pages
  • Highly accessible with semantic HTML
  • Structured data (schema.org) pre-added for blog posts
  • Dark mode (requires JavaScript for toggling class and saving user preference in cookies)
  • Reading progress slider on top (requires JavaScript)
  • JavaScript is optional (turn it off in _config.yml)
  • No request made to any third party
  • Installable as a git submodule

Try the project here: https://elementary-jekyll.github.io/. Below is a picture collage of interesting observations about the theme.


Picture showing 100 score on Google Page Speed, <1 second median load time, 100% cached on Cloudflare and a screenshot of the template running on Kindle
Picture showing 100 score on Google Page Speed, <1 second median load time, 100% cached on Cloudflare and a screenshot of the template running on Kindle. Mobile users can click on the image.

Here’s what the dark mode toggle looks like.

Dark mode demonstration

And this is the scroll progress indicator

Reading time indicator

Todo and future

I’m probably not going to give up on this template just yet. But I really want to move away from Jekyll now. No, I don’t dislike it. It is probably perfect if you just want to focus on writing as a person who doesn’t mind using text editors and the terminal. I just want to be able to dig into the source code of the build tool, the configuration files, write a plugin myself, be more comfortable with the whole ecosystem in general. To do that, it is important that I move to a tool that’s written in a language I know, or want to learn. Jekyll, and hence Ruby, just isn’t either of those.

If you’re thinking of starting a blog, or moving to a new template and see this one a good fit for your taste, do give it a shot. In case you actually end up using it, please write to me. Of course, it is open source and GPLv3 licensed. In the future, if I manage to move my blog elsewhere, I’ll port this template to the new system.

I remember wanting to have a simple static site generator after having struggled with tools like WordPress and Blogspot for this blog. I’ve reached a point where I feel like I need some of that complexity back. Guess I’ve reached the other side of the sine curve!

Thank you for reading.

Clean Code – Quotes

Listing down some interesting quotes I read in Clean Code by Robert Martin. To quote him, reading these things would only serve as a feel good exercise without the actual meat of his methods. Nevertheless, I felt they’re too good to not make it to my blog. Enjoy!

Nonsense! We will never be rid of code, because code represents the details of the requirements. At some level those details cannot be ignored or abstracted; they have to be specified. And specifying requirements in such detail that a machine can execute them is programming. Such a specification is code.

Of course you have been impeded by bad code. So then—why did you write it? Were you trying to go fast? Were you in a rush? Probably so. Perhaps you felt that you didn’t have time to do a good job; that your boss would be angry with you if you took the time to clean up your code. Perhaps you were just tired of working on this program and wanted it to be over. Or maybe you looked at the backlog of other stuff that you had promised to get done and realized that you needed to slam this module together so you could move on to the next. We’ve all done it.

They may defend the schedule and requirements with passion; but that’s their job. It’s your job to defend the code with equal passion. To drive this point home, what if you were a doctor and had a patient who demanded that you stop all the silly hand-washing in preparation for surgery because it was taking too much time?2 Clearly the patient is the boss; and yet the doctor should absolutely refuse to comply. Why? Because the doctor knows more than the patient about the risks of disease and infection. It would be unprofessional (never mind criminal) for the doctor to comply with the patient. So too it is unprofessional for programmers to bend to the will of managers who don’t understand the risks of making messes. The Primal Conundrum Programmers face a conundrum of basic values.

Clean code always looks like it was written by someone who cares. There is nothing obvious that you can do to make it better. All of those things were thought about by the code’s author, and if you try to imagine improvements, you’re led back to where you are, sitting in appreciation of the code someone left for you—code left by someone who cares deeply about the craft.

Will update from time to time…

Thank you for reading!

Lazy Person’s Guide To A Clean House

In this article, I want to document some tips and tricks I employ to make sure my house stays clean, more often than not. Why do I feel the need to write such an article? Because I think the default state, especially when you live alone, is to not care much about your house feeling like a dumpster. Also, thanks to our very adaptive minds, one quicky gets used to whatever surrounding they’re put into. And if I go down that route in the future, I’ll need something to spring back.

The other question is why I feel qualified to write about such a topic? I think that I’ve come a long way from my little flat that I rented towards the end of 2017, to jumping between several flats in Berlin and then learning some important aspects of living solo, many of them the hard way. Depending on your current circumstances, this article might seem off topic or too basic. Two years ago I would have found this article to be irrelevant as I was living with my parents and our house would clean itself (or so I thought).

Okay, so without further delay, let’s jump right into the guide.

Put things back when you’re done using them

In very simple words, whenever you take something out of its place, put it back after using it. That implicitly also means that everything has to have a place in the house (and if it doesn’t, check if you even need that thing). Just having everything in its place already makes a huge difference to how organized the house looks.

The best part here is that you don’t have to find extra time to do this. Just use any buffer time you find in between tasks to organize stuff. For example, when I’m waiting for stuff to cook on the stove, I put away all the cutting boards, knifes and spice bottles back to their places so that when I’m ready to eat, it is just the pot of food and my dishes out on the kitchen top.

Don’t leave dirty utensils in the sink overnight

It essentially takes the exact same time to either wash your dishes at night or in the morning. But the great feeling to see a clean empty sink in the morning is well worth pushing yourself to do the dishes before you go to bed. As an added bonus, your house stinks less over time.

Prevent, don’t just cure

Or in other words, don’t wait for dust to become visible on the shelves and fridge to stink before you start to think about doing something about it. Just like you wouldn’t wait to drink water up until your kidney hurts, make a cleaning schedule and stick to it irrespective of how unclean you felt on the particular day you planned to vacuum.

I prefer doing it in the first half of Saturday so that it feels like I have a shiny house for most part of the weekend.

Use the inertia to your advantage

The bad news is that if you get used to keeping your house just a notch above a hygiene meltdown, it will want to stay there and getting it back to normal would require significant effort (and probably a third party professional cleanup if you’re particularly good at not bothering with cleanliness).

The good news, similarly, is that if you keep it clean all the time, you’ll notice that if you skip cleaning a particular week (say you were travelling or just too tired), it wouldn’t feel terrible because the house is virtually just as clean. That’s just things wanting to stay the way they are, and it is easy to see how we can use it to our advantage.

Have visitors

When everything else fails, there’s this external motivator that works like a charm. Have people visit you from time to time. Bonus points if you have people who’ll visit you without or with very short notice. That way you’ll be forced to keep your house clean just out of the fear of embarrassment if nothing else.

Get motivated from within

I know, this one’s the hardest. But think about it this way: Why do people like going to the gym and working out? Or eating salads? Or studying? It is because they want to achieve the goal so desperately that they’re willing to put up with some hardships, that too with a smiling face. I feel like that’s the same with many things, including this one. You clean reguarly, not because you’re super fond of vacuuming the carpet, but because you like sitting on the couch on a saturday evening with the lights dimmed, chill music playing and everything smelling like a flower garden.

In closing

I hope that was informative. Caring for my place has made a huge difference to how homely I feel in this new city. No matter how tiring the day is, there’s always this one place, the place, where I can go at the end of the day and zone out of everything.

Thank you for reading

(Alternate) Web Development Trends

A question popped up recently in my office from our content team: What are the web development trends for 2020? It was directed towards us, the dev team, as it was assumed we might know a thing or two on this topic. We did suggest a few things here and there, but to me that spawned a deeper thought on what are the ‘trends’, if I may, that I’ve seen in professional web development that I personally care about.

An alternate and more appropriate (and perhaps a tad less clickbait-y) title for this post would’ve been…

What web developers actually talk about?

And I’d only talk about web developers for now, because one: that’s the people I spend a lot of time with, and two: the stuff we usually talk about hardly ever makes it to a magazine article listing trends. So, without further ado, let’s get right into it.

Talks about ethics in tech

Ethics, especially in tech, is part of every other conversation that we have. Many engineers I work with, and many I’m friends with care deeply about doing things right (with each of us having our own definition of what that means). I feel glad and fortunate to have such values driven people around me.

Cooking

We talk about cooking from time to time. We also cook good food sometimes, and sometimes mess things up. Food being such a basic necessity that it surprises no one that so many people have, at some points in their lives, taken cooking seriously.

Comics

A couple of us are also into comics. Reading, and sometimes even making. Most of us are very much into memes, but this is specifically about comics. They’re different, right? I think they are, but can’t explain how.

Clubbing

Back in college, my lack of exposure to many developers and the idealism of start years had led me to believe that developers hate doing anything that’s not to do with their computers and code. Clubbing and partying would’ve been the last things I’d have guessed a coder to do, but hey, we all learn.

Beer Making

That still does surprise me, but hey, why not?

Trying the new AWS stuff

Many of us are on our own side-learning quests. Someone is excited about learning Go while someone else is trying their hands on machine learning. We talk about it often, and share the material that we work with. Sometimes we even show each other code from our pet projects.

Native technologies

We often discus the new features that browsers ship, new paradigms that help better software development and make us better software developers. Frameworks come and go, but paradigms, patterns and best practices stay. ReactJS might not be here five years later, but separation of concerns might not become irrelevant anytime soon.

Web developers, especially the ones who work with JavaScript, know very well how volatile things can get, and having an idea of what is ephemeral and what not is critical.

Hiking

Hiking is something I got into because of my cousin. It is far less common back home than it is here in Europe. Here, many people around me frequently visit the nature and mountains. They bring back good stories from there, and one of my personal OKRs this year is going hiking. Let’s see how that goes.

Going back home to see friends & family

I work with many immigrants, and as such, there’s always the topic of going abck to see friends and family. The lucky Europeans do it multiple times a year, while the rest of us try to go back home at least once. We talk about how’s home, what we do when we’re there and if we’ll ever want to move back. It is quite surprising how similar it is for most of us.

Trying interesting food & travelling

Oh, the cliche. Like almost every other person, we are super into trying tasty food and travelling. We talk about new restaurants to try, and new places to explore. In fact, we take it very seriously, especially the lunch part. We bike to places around us and then join other groups from the office to try out new places. Honestly, I look forward to my lunch everyday at work.

In closing

Of course this article is written for fun. I know how stressful job hunting can be, and sometimes it is good to read the trends in web development to check if you’re going going completely tangent. As you can tell from this article, trends can mean different things for different people. For job seekers, it could be the stuff to learn to become more relevant, while for companies, it could be sticking to tools and technologies that make finding talent easier. For a developer in their day to day life, it could be, as you just read, something totally different. I hope it was fun reading this one. Until the next one then!

Thank you for reading!

2019 Year Review

We entered a new year couple of weeks ago. I was a bit occupied with stuff around the new year’s time, but finally I can sit down and reflect upon how the last year went by for me. I’ll try to follow the same format as last year by writing what was good, what wasn’t, and my hopes for 2020. You can also check out 2019’s year review article.

In short

The start of this year was very busy given that I would be in India only for a week before setting out for Germany. There were a lot of feelings within me, all mixed together like the flavours in Bhel Puri. It wasn’t super comfortable knowing that I’m moving away from the comforts of home in a totally foreign country where I knew no one, and didn’t speak the language. Integrating in Germany was actually easier than what I had expected, and I think I was super lucky to find a good set of people around me. There was a lot of moving around in the city, travelling within Europe, meeting new people and making friends, trying all sorts of food and much more.

2019 was a busy year, but a very positive one in that. It was the year when I could understand a bit more about the kind of person I was, and the kind of people I like having around. I am genuinely thankful to all the people who touched my life this year. Following are a few highlights from the past year and TODOs for this one.

Highlights

  • No sick days, at work or otherwise.
  • Lost weight and got back into good health, started doing sports again and rode bike regularly.
  • Started learning German. Did A1, and that really changed my experience in Germany.
  • Did well socially, made sure I have no regrets when I think back about my start in this new world.
  • Got super comfortable with what I do professionally and got some clarity on the kind of professional expertise I’d like to develop in the long run.
  • Played board games, card games, chess, did karaoke, went to the lakes, biked 58kms in a day, lost my flight and luggage on the way to Berlin and many such memorable events.
  • Travelled solo to a number of neighboring cities and countries.
  • Realized my dream of turning a flat into my home with a lot of interesting customizations; warm and cozy with fairy lights, a good place to work, listen to music, read etc.
  • Became much more confident about the kind of person I am, and gained insights about how I react in certain situations, especially adverse ones.
  • Exchanged gifts with many people–friends and strangers–throughout the year. Learned the joys of giving.

#TODO in 2020

  • Try and eat healthier food, cook often. Prepare lunch for office?
  • Money management: Keep an eye on spending habits.
  • Make faster progress with learning the German language.
  • Read more.
  • Lower the time spent on social media / reddit / youtube.
  • Talk to even more people from around the world, get better socially and be a pleasant person.
  • Help, teach and mentor people. Share whatever knowledge and experience I have more actively.
  • Travel more than just superficially, explore by means other than air, go hiking.
  • Get a license, go driving on the autobahn and Nurburgring. Bonus +50XP Drive a BMW.

Other Random Thoughts

Since everyone is talking about us moving into a new decade, here are a few of my thoughts and reflections. 10 years ago I was in my 10th grade, preparing for that big SSC exam every adult had scared us students about. That was the last thing we had to work hard for before we soar high in the comforts of adulthood, we were told.

Alas, like many things we’re told as kids, that wasn’t true. What was true, however, was that I stopped taking academics seriously from that point on. I remember learning how to ‘hack’ into Windows registry and change random config options to impress my friends in our computers lab. The list of embarrassing stuff I did back in the day is longer than I’m willing to admit publicly.

Interestingly, 10 years ago at this stage I still wanted to pursue science and not computers as a career. Computers were kind of new, science was the long term interest. Fascinating how things turned out, and how they could have if I had gone along the other path. Could be an article for another day. This is it for now.

Thank you for reading!

Tesla Coil Speaker

A long, long time ago I ordered a tesla coil speaker from Banggood out of sheer impulsive buying habits. I thought it would be a good DIY project to work on and was less than 4 euros at that time. But since I don’t have something like the India Direct Mail shipping here in Germany, the delivery took a month. I was very skeptic if it will ever make it, given that it was a super-cheap, super-fragile little DIY kit. But it did.

Upon receiving it, I soldered the kit together with the soldering station that I received as a birthday present, and headed out to a hobby electronics store to get a variable power supply. Turned out, even the simplest of them cost more than EUR40 in the brick and mortar stores here in Berlin. I wasn’t willing to spend that much to power this little kit. I had to go back to Banggood.

Not wasting any more time, I ordered a 12-24V 4.5A supply from Banggood for less than EUR10. Knowing well that this time it would take more than a month on account of the holidays in the middle, I forgot about it. That was until today, when it arrived at my work. Full of excitement, I got home and powered this project up! Here’s a glimpse from during the testing.

To go along with this project, I have a FM radio module that I’ll hook up with this Tesla Coil speaker. Hopefully, after figuring out a way to cool the speaker, I’ll be able to use it for extended durations of time.

Thank you for reading!

Looping Over Stuff In Javascript

Occasionally, I get stuck wondering what I should use to iterate over a list/collection of items in Javascript. There seem to be a hundred ways of achieving it. To tackle that and have a handy little reference, I’m writing this guide touching all the common ways of iterating that I use and the kind of data they are a good fit for.

for

1
2
3
4
5
6
7
8
const arr = ['apple', 'ball', 'cat'
for(let i = 0 i < arr.length i++) {
  console.log(arr[i
}
// Output:
// apple
// ball
// cat

The regular for loop (with a loop variable that iterates from some number to some other number with user supplied increments) is the most common form of for loop. I try to use as little of this one as possible as there’s usually a better suited loop available for the job. But if nothing else fits, know that the ‘regular for’ has your back.

for..in

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const obj = {
  firstName: 'John',
  lastName: 'Doe'
}
for(const prop in obj) {
  console.log(prop

// Output:
// firstName
// lastName

const arr = [3, 2, 1
for(const prop in obj) {
  console.log(prop

// Output:
// 0
// 1
// 2

for..in loop can be used to iterate over properties of an object. Supplying an array to for..in will give the index in the loop variable. In either case, doing a obj[prop] or arr[prop] should enable looping over the object’s key values or array items.

for..of

1
2
3
4
5
6
7
8
const arr = [3, 2, 1
for(const prop in obj) {
  console.log(prop

// Output:
// 3
// 2
// 1

for..of loop is useful for linearly looping over iterables like strings and arrays from the first to last item. I often mistake the for..in loop for this, but adding a new loop was how ES6 prevented breaking all the legacy code that depended on for..in to give array indices and not array items.

Array.prototype.forEach

1
2
3
4
5
6
7
8
const arr = ['World', 'Alice', 'Bob'
arr.forEach(word => {
  console.log('Hello', word

// Output:
// Hello World
// Hello Alice
// Hello Bob

Array.prototype.forEach will accept a callback function (say (item [, index, array]) => {}) and call it with each item in that array. An optional second argument will carry the current item’s index. Optional third argument passes the reference of the original array if you wish to operate on it inside the callback.

Note that Array.prototype.forEach simply means that you can invoke this method directly on an array, like [3, 2, 1].forEach(...)

Array.prototype.map

1
2
3
4
5
6
7
const arr = [10, 20, 30
const arr10x = arr.map(item => {
  return item * 10
})
console.log(arr10x
// Output:
// [100, 200, 300]

Map maps over the items in the array, calls a callback with each item and returns a new array created from the values returned from callback functions.

Array.prototype.filter

1
2
3
4
5
6
7
const arr = [1, 2, 3, 4, 5, 6, 7, 8
const onlyEvens = arr.filter(item => {
  return item % 2 == 0
})
console.log(onlyEvens
// Output:
// [2, 4, 6, 7]

Filter calls a callback function with each item in the array and returns a new array with only the elements for which the callback returns true. In general, the callback function implements the logic to determine if a given element should be present in the resultant filtered array (returns truthy if it should).

Array.prototype.reduce

1
2
3
4
5
6
7
const arr = [1, 2, 3, 4, 5, 6
const sum = arr.reduce((accumulator, item) => {
  return accumulator + item
}, 0
console.log(sum
// Output:
// 21

It took my a long time to get used to Array.prototype.reduce, most likely because I don’t use it often. But it shows up quite often when you’re working on functional code, or functional programming languages like Haskell.

The Array.prototype.reduce method takes two arguments, a reducer function (of the signature (accumulator, curr) => return newAccumulator) and an initial accumulator value. In the first iteration, the accumulator takes the initial value. In the next iterator, the return value of the previous iteration becomes the new accumulator value. After the last iteration, the accumulator value is returned from the Array.prototype.reduce method.

Object.keys() and Object.values()

1
2
3
4
5
6
7
8
9
10
const obj = {'a': 1, 'b': 2
const keys = Object.keys(obj
console.log(keys
// Output:
// ['a', 'b']

const values = Object.keys(obj
console.log(values
// Output:
// [1, 2]

Object.keys() and Object.values() take in an object and return an array of all the keys and values of that object in an array respectively which can then be used with the looping methods discussed above.

Object.entries()

1
2
3
4
5
const obj = {'a': 1, 'b': 2
const entries = Object.entries(obj
console.log(entries
// Output:
// [ ['a', 1], ['b', 2] ]

Object.entries takes in an object and returns a multidimensional array with each item a pair of key-value pair from the object.

while and do..while

1
2
3
4
5
6
7
8
9
const arr = [1, 2, 3, 4, 5
const index = 0
while(arr[index] < 4) {
  console.log(arr[index
}
// Output:
// 1
// 2
// 3

while and do..while are the other classics apart from the good ‘ol for loop. I don’t use while and do..while loops for iteration. They’re generally useful when you’re repeating a task without knowing in advance the number of times you’ll be repeating (for..in and for..of do that) or you’d want to only run the loop until a specific condition holds true (for can do that).

An interesting use case where while loops shine is when we need to iterate indefinitely (until the given condition is true), which isn’t really iteration and hence I have put this section at the end, just as good to stuff.

In closing

That’s it. I hope that simplifies iteration for you a bit. It certainly did for me. Did I miss any way of looping over iterables? Do let me know! I hope you learned something from this article. Thank you for reading!

Quotes – Brief History Of Nearly Everything

Listing down some interesting quotes from the book ‘A brief history of nearly everything’ by Bill Bryson.

  • Although the creation of a universe might be very unlikely, Tryon emphasized that no one has counted the failed attempts.
  • He makes an analogy with a very large clothing store: “If there is a large stock of clothing, you’re not surprised to find a suit that fits.”
  • “Huge parts of the world are still unexplored” “In terms of trilobites?” “No, in terms of everything”
  • Oh fuck, not another phylum
  • It is very easy to overlook this thought that life just is. As humans we are inclined to feel that life must have a point. We have plans and aspirations and desires. We want to take constant advantage of all the intoxicating existence we’ve been endowed with. But what’s life to a lichen? Yet its impulse to exist, to be, is every bit as strong as ours — arguably stronger. If I were told that I had to spend decades being a furry growth on a rock in the woods, I believe I would lose the will to go on. Lichens don’t. Like virtually all living things, they will suffer any hardship, endure any insult, for a moment’s additional existence. Life, in short, just wants to be. But — and here’s an interesting point — for the most part it doesn’t want to be much.
  • To a first approximation, as David Raup likes to say, all species are extinct.
  • …but you could have all Bdelloid Rotifer experts in the world to dinner and not have to borrow plates from the neighbors.
  • “And I suppose that’s why you value someone who spends forty-two years studying a single species of plants, even if it doesn’t produce anything terribly new?” “Precisely”
  • From an evolutionary point of view, sex is really just a reward mechanism to encourage us to pass on our genetic material.
  • It cannot be said too often: All life is one. That is, and I suspect will forever prove to be, the most profound true statement there is.

Thank you for reading!

24 Years Old And Other Stuff

The 3rd of this month marked the completion my 24th year of existence, 24 revolutions around the sun, 24 years of the limited time that we are all handed when we board this earth train.

These were 24 years of great health, a relatively problem free life and great learnings. I’ve met and became friends with some amazing people who’ve made me question my priorities and values. Speaking of priorities, they’ve changed as well, although whether for the good or otherwise is something only time will tell. From someone who read and preached science (and be annoying sometimes), to becoming obsessed with my desktop PC and learning security (and be annoying most times), picking up social skills and learning how to talk to people (if you’re surprised this is something people need to learn separately, you’re probably not friends with many nerds), getting into web and open source, getting a full time job and so on. Life has had its share of twists and turns but it has been a joyride so far.

So how does it feel to be 24 years old? I think it is a superb feeling. Many things are changing, mostly for the good. People take you seriously, sort of. You feel the added responsibility when making decisions; decisions about your life and about those who surround you. People also seem to trust you with your decisions, which is nice. It feels like, finally, you’re in the driver’s seat. Eating what you like, taking care of your health and fitness and those kind of things have also picked up pace. On a health related note, I did a fair bit of outdoor sporting this year after around a decade long pause. With a sample size of one, I also think that the tendency to do things to please others, in general, goes on diminishing as we age.

At some point, I realized that some regrets are better than others. Regretting your decisions is better than other people’s. Similarly, regretting doing something is often better than the regret of not doing it. You also realize that many problems that you face are actually your choices. You can’t escape problems, but you can choose the ones you’d like to tackle by making conscious choices.

In the past couple of years, I’ve become a bit more independent; earn enough to support myself and my hobbies, and lived alone in my own flat. Moving to Berlin was by far the main highlight of this year. Like I keep mentioning, moving to a new city is like being handed a blank book. You can correct your past regrets, and try to be the person you always wanted to be, and not worry about your past self’s image in other people’s mind conflicting with the new one (for reasons which I’d not try to justify, I find it similar to starting a new code project versus fixing a legacy one).

And as always, with the added authority comes added responsibility. I noticed that I think longer before making decisions or even simply speaking, since those things now have consequences (and some people, my parents included, sometimes count on me to do the thinking). Overall, the theme of the last couple of paragraphs is that 24 is a good age to gain some autonomy, confidence in your self, control over your life and explore a bit. Not physically, necessarily, but philosophically, in the sense of what your values are, what do you expect from the people around you and what do you give them in return.

Thank you for reading!

Cheat Sheet To Good Experiences

I wasn’t sure where an article like this belonged. Essentially, I wanted to document some of my philosophies (which is just a fancy way of saying that if I face a situation, these are the guiding principles that help me make decisions) that I think have helped me experience a lot more positivity within and from others wherever I’ve been (but mostly concerning places away from home). These are, of course, very personal and subjective. As with everything, I expect these to evolve over time and I myself might disagree with some of them at a later point in time. But then, reading my old thoughts and values, and documenting the new ones is exactly the point of this blog anyway.

Writing them down in no particular order.

Smile first

On an imaginary (and intuited) bell curve that covers all of humankind (and dogs), from the ones who wouldn’t smile no matter what you do, to the ones who’d smile without any reason, I find that most people fall around the region where they’ll smile if they get a smile, where smile is just a metaphor for acting kindly in some way. That is to say that most people are good at heart, just not very upfront about it. A small act of kindness from our end is enough to tap into that ocean of goodness that just lies below the hard top surface.

My point is, most people are super nice in some or the other form

The worst that happens here is that they don’t return the smile back, but giving away is usually in itself quite rewarding. Between a win and a jackpot, and I’m good with either.

Assume best of intentions; Try seeing things from a different perspective

Many things make sense only when we see them from another point of view. And thanks to the complexity of the world we live in, that’s not always possible. There are far too many factors that can influence the way a person thinks. Acknowledge that. Try to see if the case in question has a right/wrong solution or is it just a matter of difference in perspective. More often that not, latter is the case. For that reason, give the other person the benefit of doubt. Probably they had a good reason for acting in a certain way or saying what they said.

Don’t judge before understanding

One useful tool that I’ve developed over time is to resist the urge to judge someone or something before I have a complete understanding of the picture. Even if I somehow think I do, just knowing that a simple picture with zigzag lines is enough to confuse my mind, let alone complicated situations with hundreds and hundreds of variables, keeps me away from making very bold statements and trusting my thoughts too much.

Optical Illusion – Wikipedia

In this case, being a software developer helps too. Anyone who has done any software engineering knows that no matter how good they get, they can never make statements like my code doesn’t have any bugs. In fact, the more software one writes, the less likely one is to make a statement like that. The same is true, I feel, for other walks of life.

Don’t be scared of looking stupid, making mistakes

Things will go south from time to time, not work out as per plan and even leave lasting bruises. Ideal outcome is just one of the many possible outcomes. I think these setbacks matter much less than our attitude in dealing with them. Sure, there’s the momentary joy in seeing things work out well, but there’s learning in seeing things not work out well. And learning goes much further than momentary joy (and of course, difficult times make for great stories).

Think of all the people in high school that you were once too scared to look stupid in front of. Think of the number of extracurriculars you didn’t participate in, skills that you didn’t learn, questions you didn’t raise your hand to answer to, just so that you could save yourself the momentary embarrassment in case you mess it up. Think of how many people are still in touch with you, or care about you, or even think about you once in a month. On this Earth-sized stage, the only definition of sanity is the one you set for yourself.

Laugh at yourself

Nothing is more powerful than the power to laugh at yourself. All of us have enough mistakes under our belt to write fat comic books out of it. From accidentally making inappropriate remarks that make me cringe whenever I remember them, to less intense fun mistakes that were quite painful at the time, I’ve done it all. And I’m not going to keep a straight face if you tell me you haven’t.

Don’t take it too seriously

I think we often overestimate how important we are. We’re granted a very limited time slot on this Earth stage, so why spend it under a false illusion of self importance and delusional (sometimes pretentious) seriousness. I think of myself as a macro-nihilist, meaning that while I understand the importance of my everyday, micro activities, I keep my emotional extremes in check by not forgetting that in the long run, none of my epic successes or catastrophic failures really matter much.

Being open to new cultures

You can’t shake hands with a closed fist. Similarly, if you’re too proud of the fact that you were randomly born into a specific geographic location or culture or religion or speak a particular language, you’ll find it very difficult to accept the majority of the human race that just as randomly happened to be born in another location or culture or religion or speak a different language. For me, it is a matter of celebration of similarities and differences, of simulating my life in a new culture and environment. That arouses a genuine interest in knowing things, and most people are willing to talk for hours if you show an interest.

On the other hand, being too proud of accidental things, while does feel good to practice thanks to our evolutionary history of tribalism, doesn’t help much when we meet people and experience cultures which are very different from our own.

Being predictable

When I was little, there was this thing about being unpredictable that I thought made people cool and edgy. But as I grew up, I realized that I’m most comfortable around people who’re predictable. That doesn’t necessarily mean that I agree with them all the time, but just that they’re consistent in their behavior even with things, thoughts and ideas that I don’t agree with.


That’s what I try to adopt for myself. Just trying to be consistent with the way I am, having a more values driven approach towards decisions. It is like being a particularly shaped piece in a box full of puzzle pieces that’s constantly shaking. You can be weird, crazy, stupid, no problem. Eventually, you’ll end up with other pieces you are a perfect fit with.

In closing

I hope this article was interesting for you to read. I certainly did have fun writing it. I’m curious to read this piece again in about a year or so and see if there’s anything to add or remove. Thank you for reading. Ciao!