Pawns of Some Scripted Fate

We are not pawns of some scripted fate. It’s the invisible ties we forge that bind us.

— Robin, from Fire Emblem: Awakening

Fun Programming Projects

When I’m learning a new programming language, the biggest challenge I face is figuring out what to build with it. Programming challenge websites can be useful, but they rarely ever push you towards exploring real-world use cases for a language.

Thankfully, there’s a variety of resources available on the Web that walk you through building reasonably complex projects step by step. I’ve collected a few of my favorites here.

Darkest Dungeon

I never thought I’d be moved to tears by a review for a video game I haven’t even played, yet here we are. Nathan Grayson’s review for Darkest Dungeon touches on issues of burnout and overwork that I’ve struggled with throughout my twenties.

Darkest Dungeon is a turn-based RPG with an interesting mechanic: as you explore dungeons and battle enemies, your characters accumulate trauma and stress caused by those encounters. Left untreated, this trauma will make them entirely useless and you will have to remove them from your roster.

From Nathan’s review:

Trauma always leaves wounds. If left untreated for too long, those wounds fester, grow, and multiply. And yet, modern living subtly encourages people to ignore them. You gotta stay busy, the career world tells us. Taking care of yourself—whether that means taking some time off, seeing a therapist, or what have you—isn’t directly productive, and you’ve already got So Much To Do. If it’s not work, it’s social or family obligations. What will friends, significant others, or co-workers think if you disappear now? That you’re lazy? That you’re crazy? And anyway, where will you find the money?

You can try playing Darkest Dungeon like any other RPG — grind grind grind, fight enemy after enemy to get more XP, go deep into dungeons to get better loot — but you’re not going to have a good time.

As I played Darkest Dungeon, I tried so hard to follow the golden rule of progress, to play like I’d play any other video game. Sure, I’d retreat from battles or dungeons occasionally, but everything had to be in the name of slow advancement. I prioritized short-term gains over long-term decision-making, and I did it almost unconsciously. Other games taught me that it’d work; they told me that heroes are defined by the progress they’re making, the XP and items they’re earning, the stories they’re exerting agency over. So I picked my hill to die on, and god damn it I was gonna climb all the way to the top, no matter what got in my way.

I kept falling down, further and further.

It has taken me (nearly) thirty years of my life to know when to stop working and take a break. I still hurt myself, ignoring signs of burnout and pushing through the pain, but I’m slowly getting better at taking care of myself.

Turns out, willing yourself into being alright isn’t the same thing as being alright. Sometimes, digging your heels in and making one last push just gets you dirty feet.

Learning to be kind to yourself takes a long time. It’s almost an act of defiance against everything that has been drilled into our heads.

Sometimes, the best way to move forward is to find a way to stand still. On some occasions, you’ve gotta take a step back to create something sustainable. You have to take care of yourself.

Am I going to play Darkest Dungeon? Maybe. Probably. At some point. After I’ve finished these other twenty games in my backlog. Meanwhile, I’ll keep reminding myself every day that it doesn’t have to be so hard.

Reading List For 2020

On this page you’ll find my reading list for the year 2020.

This list is aspirational, which means I might not be able to get through every book I’ve listed here. Most of these are also pretty heavy reads in terms of subject matter, so I’ll certainly be taking breaks from them to dip into some fun YA fiction and trashy thrillers.

The purpose of this list is twofold. First, I want to know more about the lives and times of people who led popular mass movements against injustice in the twentieth century. Second, I want to understand the ideology and methods of the followers of Hindutva, a dangerous ideology that is currently tearing India apart.

With that out of the way, here’s the list.

English

  1. Gandhi Before India by Ramachandra Guha
  2. Gandhi: The Years that Changed the World by Ramachandra Guha
  3. Awakening Bharat Mata by Swapan Dasgupta
  4. Being Hindu by Hindol Sengupta
  5. The Hindu Way by Shashi Tharoor
  6. You Don’t Look Like a Muslim by Rakshanda Jalil
  7. Coming Out as Dalit by Yashica Dutt
  8. There’s Gunpowder in the Air by Manoranjan Bajpayee
  9. How to be a Dictator by Frank Dikotter
  10. Ambedkar: Towards an Enlightened India by Gail Omvedtt
  11. Jawaharlal Nehru: A Biography Vol. 1 by Gopal Sarvepalli
  12. Jawaharlal Nehru: A Biography Vol. 2 by Gopal Sarvepalli
  13. Jawaharlal Nehru: A Biography Vol. 3 by Gopal Sarvepalli
  14. America in the King Years 1954–63 by Taylor Branch
  15. America in the King Years 1963–65 by Taylor Branch
  16. America in the King Years 1965–68 by Taylor Branch

Hindi

  1. वे दिन by Nirmal Verma
  2. परिन्दे by Nirmal Verma
  3. पंद्रह कहानियाँ by Saadat Hassan Manto
  4. रेत-समाधी by Geetanjali Shree
  5. बारामासी by Gyaan Chaturvedi
  6. मैला आँचल by Phaneeshwarnath Renu
  7. गोदान by Premchand
  8. गबन by Premchand
  9. सेवासदन by Premchand
  10. कर्मभूमी by Premchand

Punjabi

  1. ਪਵਿੱਤਰ ਪਾਪੀ by Nanak Singh
  2. ਚਿੱਟਾ ਲਹੂ by Nanak Singh
  3. ਮਿੱਟੀ ਦੀ ਜ਼ਾਤ by Amrita Pritam
  4. ਪਿਂਜਰ by Amrita Pritam
  5. ਰਸੀਦੀ ਟਿਕਟ by Amrita Pritam

Stretch Goals

  1. The RSS: A View to the Inside by Walter K. Andersen & Shridhar D. Damle
  2. How the BJP Wins by Prashant Jha
  3. The Annihilation of Caste by B.R. Ambedkar
  4. Hindutva by V.D. Savarkar

Week 11: Side-projects, Hobbies, and Obsession

Welcome to 2019, everyone! If we all close our eyes and wish really really really hard, this year might be less of a dumpster fire than the last one.

The astute reader will ask why I haven’t posted anything for more than two weeks. One part of the answer, dear reader, is that I just didn’t feel like it. I’m on vacation. I want to spend this time wrapped up in a blanket, sipping on something warm, reading or listening to music or playing a game.

The other part of the answer is that I wanted to break a dangerous pattern I’ve noticed in my own behavior. It goes something like this:

Step 1: I take up a new activity. It could be music lessons, a new workout routine, writing reviews for all the music I listen to, or writing these weeknotes.

Step 2: In the beginning, the activity is fun because of the novelty. Eventually, though, the magic of the honeymoon period wears off. This is when you really need to start putting your back into the work, and also when most people quit.

Step 3: Even if I’m not as totally in love with the activity as I was in the beginning, I still keep showing up every day. At a logical level I understand that you don’t get good at anything without putting in the work, and it’s no fun doing anything unless you’re at least slightly good at it. So I show up each day, no matter what happens. Gotta keep that Seinfeld calendar going.

Step 4: Eventually I miss a day. It could be because I’m tired from work, or sick, or traveling, or because someone is visiting me. It could be a number of totally legitimate reasons, or it could be simply because I don’t feel like being productive that day.

Step 5: There was a time when, if I missed a day, my internal voice would start berating me. “You’re such a loser Ankur,” it would say. “You can’t even show up to the gym for three weeks without missing a day. You’re useless, you’re trash.” Over the years I’ve managed to reign in this voice, but missing a day still feels like I’ve committed a grave and unforgivable sin. As if I’ve done something morally reprehensible that I need to be punished for.

Step 6: The activity — whether it’s exercising, music practice, writing, or whatever else — starts to feel like a chore. I do it not because I’m interested and committed, but because I’m afraid. I don’t want to feel the guilt and shame that comes from skipping one day.

Step 7: I start associating the activity with negative feelings. Sometimes I stop doing it altogether. It’s easier to not do something than to do it semi-regularly and feel guilty all the time.

Step 8: Pick a new activity and go back to to step 1.

This year I’m trying to break the pattern. In order to enjoy my hobbies and side projects, I need to prevent them from becoming obsessions. I need to know when to take breaks and go easy on myself – and also when to push myself to my limits. It’s important for me to keep reminding myself that hobbies are supposed to bring you joy, not to suck our your life force.

And so, when I didn’t feel like I was up to the task of writing a weeknote, I didn’t push myself. More than once I felt a twinge of guilt. I even started to write something one Wednesday, but then I reigned myself in and played a few more hours of Breath of the Wild.

I’m doing a few other things this year to improve my relationship with my work, and to make sure I don’t burn out like I’ve done in the years past. I’ll talk about them in my next weeknote.

For now, I wish you a happy 2019! Eat your vegetables, keep your sneakers clean, and be kind to yourselves.


Reading: Creative Quest by Questlove, and Lihaaf by Ismat Chugtai

Listening to: a bunch of old Parliament/Funkadelic records, a random assortment of Kanye’s old hits, Kids See Ghosts by Kids See Ghosts, and Remind Me Tomorrow by Sharon Van Etten.

Playing: The Legend of Zelda: Breath of the Wild. Trying really hard to keep myself from dropping $85 on Super Smash Bros.

Week 8: Going Home

The great thing about the weeknote format is that you can make your note as long or short as you want. I’m keeping it short today, with just a few important life updates.

2018 has been a tough year for me. My mental health is at an all-time low, so I’ve decided to take a long break from work and go live with my family in Delhi for a while. I’m planning to spend a lot of time cooking, reading, and playing games on my Switch.

By this time every year, I have a long list of new year’s resolutions. Last year’s list had no less than 20 items. I ended up accomplishing a lot of those goals, but they came at the cost of my health and well-being. I’m going to keep it simple this year and limit my list of resolutions to three or four tiny goals. Top of the list: take care of my health.

My throat is slowly getting better. I expect that I’ll be able to talk normally again in a month or two. Reddit tells me I might have something called Muscle Tension Dysphonia, but I’ll keep the self-diagnosis out of this and just do what my doctor tells me to.

A happy new year to whoever is reading this tonight! Hope you find whatever it is that you’re looking for.


Reading: Never Eat Alone by Keith Ferrazzi

Listening to: Bayaan by Seedhe Maut, i am > i was by 21 Savage, and a bunch of critically acclaimed albums from 2018.

Playing: Rayman Legends and SteamWorld Heist

Week 7: Melancholy, and Taking a Break

I’m in one of my Moods™. All my brain wants to do is scroll through Instagram looking at pictures of beautiful skinny perfect people wearing beautiful expensive perfect sneakers. On weekends, I can’t even summon up the motivation leave my blanket, let alone do normal functional adult things.

I’ve had to put in a Herculean effort to just sit down and type out this note. That’s why I’m publishing this on a Tuesday instead of a Sunday as usual.

This sense of listlessness and melancholy will pass in a few weeks, as it always does. In the meantime, getting any work done will be an uphill battle. There is nothing to do but take it easy for a while and wait for the feeling to pass.


Status of throat: please make it stop. I’m going to wait one more week to see if things improve, and then spend the first half of January visiting a few different doctors until I find someone who can figure out what’s wrong with me.


I’ve realized that the two keys to consistently doing creative work are to know when to take a break, and to know how to get back to your creative schedule after that break.

I find it easy to show up and put in the effort towards my music every day, but only for a few months at a time. Eventually there comes a time when I start to feel burnt out and empty—like right now—and then I fall off the wagon.

So the problem is not that I can’t show up and consistently write, but that I don’t understand when I’ve reached my limit and need to take some time off.

I spent a few hours this morning thinking about this problem and came up with some general guidelines for myself. I’m not going to share all of them here, but here are two significant ones:

Pretty obvious guidelines, but the most obvious things are often the ones that are the hardest to bear in mind as we go about our lives.


Reading: Never Eat Alone by Keith Ferrazzi

Listening to: critically acclaimed albums from this year, including Wide Awake! by Parquet Courts, El Mar Querer by Rosalía, and A Brief Enquiry Into Online Relationships by The 1975. 2018 has been a disappointing year for music. I haven’t really discovered anything new this year that I still expect to be listening to five years from now.

Playing: nothing. I finished Diablo III a few days ago, and I now want a break from games for a few weeks.

Week 6: Mac and Cheese, Sore Throat, and Deep Roots

I’m writing this from Chennai. I’m here for the second time this year for a Visa appointment. It’s all very scary and stressful and dehumanizing and I just want it to end already. I have many opinions about traveling internationally as an Indian citizen, but if I start writing them down they’ll take up this entire weeknote. Let’s just move on, okay?

I skipped writing last week’s note because my brother was visiting me in Bangalore. I cooked mac and cheese for him and a bunch of friends using a recipe Pooja shared with me a long time ago, and it turned out great as always. I’m starting to be known as the guy who cooks mac and cheese all the time, and I ain’t even mad. Thanks Pooja!


Exciting throat update for those who have been following along: last week, my doctor stuck a camera down my throat to figure out if there was something seriously wrong in there. Turns out there is a very slight injury on my vocal cords, but nothing too serious. I don’t have much pain anymore, and I’m able to have short conversations without any problems. If I speak for too long, though, my throat starts to get sore. Saying nothing for two months might have something to do with it, and I’m hoping this problem will sort itself out in a few days. If not, then it’ll be another trip to the hospital.

Hospitals and airplanes. That’s how I’ve spent most of this year. Next year, I’m planning to stay put in Bangalore and prioritize my health over everything else.


I’ve been thinking a lot about this staying put business. Sitting still and just enjoying what I have is something I’ve never been able to do. In life, work, and art, my tendency has been to always move forward, to always keep looking for the next thing.

Learned how to use a new piece of technology? Great, now move on to the next trendy thing. Figured out how to produce a new genre of music? Cool, go check what else is hot on SoundCloud right now. Went on a great vacation? Start planning next year’s vacation before the bags have been unpacked. Reading a book on a lazy Sunday afternoon? Start thinking about how great the next one is going to be before this one is half finished.

Novelty is fun. It’s addictive. Always doing something new means I’m constantly learning new things, keeping myself challenged, meeting new people, discovering and rediscovering the world and, with it, discovering and rediscovering myself.

But I’m starting to get tired of all of this thrashing around. Listening to new music is great, but what about all my favorite music from years ago that I’ve lost touch with? Trying out new food is great, but what about the food from my childhood that comforts me and reminds me of simpler times? Taking up new hobbies is great, but what about the hobbies I’ve already invested thousands of hours—and rupees—into? Making new friends is great, but what about all the friends I’ve neglected to keep in touch with?

I’m not saying I need to stagnate, stop being curious about the world, and stop doing new things. I wouldn’t want to live a life that lacks the thrill of discovering something (or someone) new. No, stasis is worse than this constant turmoil.

However, as I’m growing older and taking stock of my life, I starting to crave deep roots. I crave friendships and relationships built on shared experiences over a long period of time (I’m grateful to have at least a few of these). I crave being part of a larger community. I crave a career that’s built on practical experience gained from years in the trenches, not bookish knowledge picked up from blogs and READMEs. I crave skills that have been sharpened by thousands of hours of deliberate practice.

I crave something that keeps me rooted when things go south, something that’s a constant reminder of who I am and where I came from. Even if it’s just daal makhani or trashy nu-metal music everyone pretends never happened.

I crave a kind of spiritual wealth accumulated by respecting what I have, being grateful for it, taking care of it, and slowing down.

That’s it, I think. I want to slow down. At least for a little while.


Reading: The Power of Habit by Charles Duhigg

Listening to: a random selection of favorites from Mitski’s Puberty 2, Run the Jewels’ RTJ2, St. Vincent’s Masseduction, and The Hotelier’s Goodness, among many others.

Playing: Diablo 3 (does this game ever end!?)

Week 4: Snow Pigeons, Finding Peace, and Building an Audience

I survived Siberia! After my talk last Sunday, I had two days in Novosibirsk to spend as I pleased before my flight back to Delhi. I spent those days walking around the city center, reading, and writing. The temperature fell to -13°C while I was there, so I had to keep ducking into random cafes and restaurants every half an hour to keep myself warm. It goes without saying that I had a lot of caffeine in my system by the time I got back to my hotel each night.

Coming from a hot country like India, and having seen snow only on Christmas specials on TV, the city center looked like something out of a fairytale.

At one point I was walking through a park and spotted a flock of pigeons sitting in the snow (how!!?) When I went close to them to take a picture, the entire flock waddled towards me and surrounded me on all sides. They made themselves comfortable, ruffled their feathers until they were all big round grey balls of fuzz, and stared at me in anticipation as I struggled to operate my phone with my freezing fingers. I think they were expecting me to feed them, but the only feed I had on me at the time was my Instagram feed (badum-tish). Sorry to disappoint, pigeons. Maybe next time.

A group of pigeons gathered on a snow-covered ground. Some of the pigeons are huddled together, seeking warmth. All of them are very, VERY round.

I made sure to end each day in Novosibirsk with a bowl of solyanka. My first order of business when I get back to Bangalore will be to figure out how to make this delicious soup in my own kitchen!


This year I’ve read several books about creativity and the creative habit, the most recent one being The Practicing Mind by Thomas M. Sterner. It puts into words many truths about creativity that I’ve discovered for myself over the last few years but haven’t had the vocabulary to express.

While reading the book I had a realization: even though 2018 has been a terrible year for me in all respects, I’ve found a sense of peace and calm thanks to my own creative practice.

This year I’ve had to deal with failing health, close friends moving away, a wonderful relationship ending, a pet dying, and a frustrating career slump. Through all of this, I’ve found a sanctuary in writing and making music. The simple habit of sitting down at the same time each day, shutting out the world for a short time, and writing down one word after another has kept me grounded, sane, and oddly contented through these rough times.

The knowledge that I’ll wake up tomorrow morning and spend some time writing gives me great comfort. I can only hope that I’m able to keep up with this habit long-term. It’s something I would be devastated to lose in the chaos of everyday life.


One of my recent technical posts on the Uncommon blog—titled The Baseline Costs of JavaScript Frameworks—made it to the top of HN last week. I wasn’t expecting it to blow up as fast or as much as it did, but the Internet is an unpredictable beast.

While I’ve had about 30k impressions on the post so far, it hasn’t really generated any leads for new business. I can’t say I was expecting it to get us new business immediately, but I do find it a little disappointing that it resulted in absolutely zero enquiries.

Ah well, on to the next one. I know that it takes a large body of work over a long period of time before writing and speaking starts to bring in prospective customers. Keeping that in mind, I’ve already started working on my next post.

In my head, an ideal situation would be to have enough content on the Uncommon blog to attract 250-300k monthly readers even when we’re not actively writing. We can then begin to figure out how to convert these readers into clients. I’m confident we’ll get there within 12-18 months of regular writing.

It’s a long road ahead. Good thing writing is so damn fun.


Reading: The Practicing Mind by Thomas M. Sterner

Listening to: DiCaprio 2 by JID, CARE FOR ME by Saba, and Be the Cowboy by Mitski

Playing: Diablo 3 and Celeste

Week 3: Siberian Winter, Public Speaking, and Recognizing What I'm Bad At

Hello from Novosibirsk, Siberia! The temperature outside is -9°C, the streets are covered in fresh white snow, and I’m sipping hot chocolate at a cafe near the Novosibirsk Opera and Ballet Theatre. I came here to speak about Rust and WebAssembly at DevFest Siberia 2018, and I’m staying here for a few extra days so I can explore the city.

A picture of me. I'm dressed in a skiing jacket, warm boots, and a backpack. I'm standing on a snow-covered road while more snow falls around me. In the background you can trees and shrubs blanketed in snow. My face is mostly covered by the hood of my jacket, and all you can see is my eyes, nose, and mouth peeking out. Against all odds, I'm smiling.

This is the first time in the 28 years I’ve been alive that I’m seeing snow. When I boarded my flight from Delhi I was afraid that I wouldn’t be able to deal with the sub-zero temperatures in Siberia, but when I got here on Thursday I discovered that central heating exists. I’m glad to report that I’m cozy af, and the only time I have to deal with the cold is when I’m running from a building into my Yandex Taxi.

I think today I’ll venture out for a long walk around the city center. Wish me luck.


Yesterday afternoon I spoke to an audience of about 150 people about drawing the Mandelbrot set on a <canvas> using Rust compiled to WebAssembly. While I knew my material well, I hadn’t practiced verbally delivering my talk before I went on stage. The injury to my vocal cords still prevents me from speaking at length without pain, so all the run-throughs I’d done involved me mouthing words in front of a mirror.

Problem is, things sound way cooler when you say them in your head. When I actually vocalized my words in front of my audience, my jokes fell flat and the explanations that had sounded lucid and coherent in my head came out sounding ambiguous and confusing. Even the SpongeBob GIFs didn’t do much to excite my audience.

I’m going to do this same talk at another conference in January next year, and I plan to start preparing for it as soon as I get back to Bangalore. The current state of my vocal cords makes it impossible for me to do multiple run-throughs of the talk in a single day, but I can certainly practice it once or twice a week so that I’m better prepared to go on stage by the time January rolls around.

A few specific things I noticed about my talk:


In last week’s note, I mentioned that I wanted to write about a few reasons I’ve failed at doing my job effectively this year. I’m going to list them out now.

(For context, I recently stopped being a lone freelance developer and started working at Uncommon so I can build a Web Engineering team here.)

I don’t ask for help when I need it most. It’s not because I feel I don’t need it, or even that I’m ashamed of reaching out. It’s genuinely something that does not occur to me at all. This is one of the reasons I’ve been a bad collaborator throughout my life. Too often, I’ve spent days researching solutions to a problem when I could have just walked across the office and asked somebody.

This is a habit that I’m slowly starting to change. I’ve been a lone-wolf (well, more a lone-puppy than a lone-wolf) developer for the last five years so it’ll be a while before I learn how to work well with people. But I recognize that programming is a team sport, and I’m confident that I’ll get there.

I avoid tough conversations. Just the thought of conflict makes me so anxious that it becomes hard to function. If I find myself in a difficult conversation with a client or co-worker, I’m so exhausted by the end of it that I can barely get work done for the rest of the day. This has cost me dearly in both my personal and professional life, and I honestly don’t know how to fix this.

If you have any ideas, I’d love to hear from you over email or twitter.

I overestimate my own abilities. I feel everyone has been guilty of this at some point in their lives. It becomes a real problem when you end up burning yourself out or hurting yourself physically, both of which have happened to me a couple of times now.

As I grow older, I’m learning to anticipate my body’s needs more and prioritizing my health over getting work done.

I work reactively. I often react to situations as they arise instead of planning ahead. This is frustrating because, if I’m spending all my time putting out fires, I’m not working on my long-term goals. This is another problem I don’t know how to fix yet.

I don’t make full use of the resources available to me. This is a strange one, and I still don’t understand why I do it. Here’s an example: I recently needed a spare Android phone to test something I’d been working on. The model I wanted cost about $150. Instead of just asking my company to buy me one—which they would have happily done—I spent a week looking for somebody who could lend me one for a few hours.

Recognizing these issues has taken me a long time, and dealing with them is going to take an even longer time. However, I’m grateful that I got this far. These are all normal issues that can be tackled, and I plan to do just that in the coming few months.


Reading: Americanah by Chimamanda Ngozi Adichie.

Listening to: FM! by Vince Staples, CARE FOR ME by Saba, and Be the Cowboy by Mitski.

Playing: Diablo 3, and Mario + Rabbids: Kingdom Battle.


Until next time, Ankur.