Clicky

Computable Multiverse

Hi, I'm Rakhim. I teach, program, make podcasts, comics and videos on computer science at Codexpanse.com. You can learn more about my work and even support me via Patreon.


Pocket App fails silently

Pocket is a popular “read later” app. People generally recommend it, and I haven’t heard many complains about it. But in my experience, Pocket fails, and does it in the worst possible way.

Pocket repeatedly omits portions of pages. Here are a few examples from my queue — try adding them to your Pocket to verify the problem:

  1. This link: 11 images omitted.
  2. This link: The last paragraph and all images omitted.
  3. This link: First 50% of the article omitted.

Of course, parsing pages and extracting information isn’t an easy task, and occasional hiccups are to be expected. The only reason I’m bringing this up is that, at least in my case, a significant amount of links end up problematic. Instapaper, a popular alternative to Pocket, doesn’t have these issues on such scale.

The worst part of this is that you might not even notice something is missing, but end up thinking the article had a weird start (you missed the intro paragraph), or ends abruptly, or could use some images. Pocket delivers a poorly retold story.

Pocket also fails (non silently, that is) to process seemingly simple pages. For example, it couldn’t pocket-ify this page about Structured Procrastination. Yes, there are HTML validation errors, but both Instapaper and Safari’s Reader mode render the simplified version perfectly fine.

This isn’t new: I’ve been coming back to Pocket roughly every year in the past 10 years, and it’s always like that. It’s owned my Mozilla now, and even has a paid plan, yet Pocket fails at its main task.

I recommend to avoid Pocket.

November 21, 2019 | permalink

The price of complexity

Computer programmers often talk about tackling complexity, yet they thrive on complexity. I believe tech people experience a constant dilemma: on one hand, we want things to be simple and straightforward; on the other hand we love complex structures and engineering marvels.

I think about this today as I’m performing some cleanup work on my blog. It runs on Hugo, content is written in Org mode, code is published on Github and the final website is deployed to Netlify. That’s a lot of moving parts, and, honestly, it feels excessive. Yet I love this setup.

Lately I’ve been trying to be conscious and mindful about the price my mind pays for all this complexity. I’m not a good programmer by any means, so your mileage may vary, but it takes an enormous amount of mental energy for me to re-understand something I already figured out before. Take Hugo for example, a flexible and powerful static website generator. Jekyll, which I used before Hugo, is complex, too, but Hugo drives me crazy sometimes. It’s a multi-layered system of interconnected logic and it took me a whole day to move from Jekyll.

Intermission: I just spent 5 minutes trying to create a relative hyperlink to that other blog post, and couldn’t. It took me a while to realize I’m in Org mode now, not in Markdown, my syntax was wrong. You know what a Wordpress or Ghost user would’ve done? Clicked a link button in their rich WYSIWYG editor and had finished the blog post by this time already.

Every time I need to make some changes to the setup — fix layouts, add pages, refactor templates — I feel completely lost. It happens rare enough for my brain to forget the structure and conventions. And this is the case for a dozen of software projects I touch throughout the year.

This feeling of being lost is similar to un-pausing a video game that was on pause for 6 months. I know I’ve been into this, but right now I don’t even know what buttons to press.

There are ways to fight this. One is to dramatically reduce complexity in the first place, maybe even sacrifice some of the features. My setup can be technically replaced by a bunch of HTML files, for example. Or switch to a “normal” thing like Ghost or Wordpress. Oh, and don’t host them yourself, but pay someone to take care of it.

Another way is to somehow capture the knowledge for easy retrieval. My problem with Hugo is that I rarely touch it, so I forget. I should at least add a README file for myself, explaining the current setup and structure. Keeping documentation in sync with code is another problem, sigh…

So far, I only know one good way of solving this: teach. I should just make a course about Hugo on Codexpanse, that’ll force me to really understand it and devise a good mental model.

November 20, 2019 | permalink

User Is Dead

User is dead. User remains dead. And we have killed him. How shall we comfort ourselves, the developers, the designers, the growth hackers? What was holiest and the final judge of all that the world has yet owned has bled to death under our a/b-tests and new features. Who will wipe this blood off us? What garbage collector is there for us to clean ourselves? What conference of atonement, what disruptive technology, what sacred meeting shall we have to invent? Is not the greatness of this deed too great for us? Must we ourselves not become users simply to appear worthy of it?

By saying “God is dead” Friedrich Nietzsche tried to express the fear that the decline of religion and the rise of nihilism would plunge the world into chaos.

Whether you believe that people require an external source of morality, or you accept the numerous philosophical and scientific arguments for intrinsic morality in behavior of complex animals, the fear remains relevant. The fear is not necessarily about God or religion, but about a moral compass, or lack thereof.

My arguably tasteless rewrite of Nietzsche’s passage expresses another fear, which, I sincerely hope many software developers share. For a long time, we had an external source of morality in software development. User. Simultaneously ephemeral stick figure of UML diagrams and a very real human, a friend, a colleague. The goal, the point, the final judge of success. Your product either satisfied the user or failed. Your software may occasionally have charmed User, but don’t be fooled, you are but a servant.

“Move fast and break things”, “disruption” and “growth” have killed User. No more do we try to offer invisible quality. Instead of software that blends into background by virtue of its non-obtrusive robustness and simplicity, we aspire to create The Product Experience. The first pleases User. The latter pleases Shareholder.

The Holy Texts are forgotten or, worse, perverted. Apple’s famous Human Interface Guidelines ironically describe the many ways in which modern Apple products do not behave. The Agile manifesto became The Certified Agile Coach Training Program and a cargo cult. The very first principle of the Agile Manifesto states:

Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

How many of us feel this during another a/b-test-driven, metric-based sprint?

The 7th principle is:

Working software is the primary measure of progress.

An honest, but naive assumption that we all share a similar criterion for “working”. Turns out, the height of the bar is inversely proportional to the proximity of another funding round. By the 90s standards, a lot of today’s software is just defunct.

When User dies, only Beta Tester remains. Beta Tester is not human. It’s an expendable tool, a lab rat, a database record.

What can we do as developers? Honestly, I don’t know. Coming up with a manifesto, a set of principles, another guideline — it all seems futile now. The problem isn’t that we forgot about User. We just collectively adapted to the new definition of normal. Breaking changes are normal. Updates for the sake of updates are normal. The house is on fire, but this is normal.

What can we do?.. “Must we ourselves not become users?”

October 22, 2019 | permalink

Be Wary of Self Described Benefits

Picking a university was one of the main tasks in the last year of high school. That and exams. I wasn’t sure what to study and which place to pick. I had no idea how one can make these choices. There weren’t too many resources available at the time. So, a lot of us relied on promotional info provided by universities themselves.

The one I ended up in was called SDU. Its official description says: “SDU is a secular higher educational institution located in Kaskelen, near Almaty.”

It was the only university that actually claimed to be secular. That’s good, right? I had no interest in studying at a religious institution. Secular is good.

Turned out, it wasn’t very secular. No, we didn’t study Holy Texts. Officially, nothing religious was going on. But the Islamic values did indeed feel affecting the policies and decisions everywhere. The dormitories for males and females were separate buildings in different neighborhoods. I had actually never seen the women’s dormitory, nor had any male student around. The girls just went to a mysterious place every evening. A large proportion of students held a religious fast (Ramadan). Several instructors gave bonuses to fasting students. So I had to work harder to get the same grade because I was being secular at a secular university.

I dropped out after 4 months. Thank God.

Later, I started to notice this pattern. Often, people, communities, companies and even countries seem to blindly put positive descriptions out. As if they wanted others to notice.

It becomes very clear in case of countries. Here are some famous authoritarian regimes:

  • Democratic People’s Republic of Korea
  • Democratic Republic of the Congo
  • People’s Republic of China
  • People’s Democratic Republic of Algeria
  • Federal Democratic Republic of Ethiopia

Right.

So I learned to be wary of self described benefits. It’s kind of obvious and silly once you think about it.

Yours truly, not passive aggressive at all, Rakhim.

September 3, 2019 | permalink

Process of Learning

A process of learning is analogous to an attempt of building a three-dimensional model from two-dimensional photos.

You approach a new area of knowledge. You know nothing at all. You stumble upon a first piece:

That’s more than nothing, but still very little. You don’t understand it. At best, you’re able to make a few uncertain assumptions.

Beginners often seek good book recommendations. They would google a top-10 list and then ask “which one should I start with?”. The answer is almost always “it doesn’t matter”. Start with any non-shitty book. One book alone would not provide enough data to build a good model anyway. If you want to really understand something, you’ll have to read several books, listen to different people, try various approaches. Nobody knows what’s going to work best for a particular person. Each model building machine is unique. The starting order of feeding it data is not very important, unless that information is truly harmful.

(“What is harmful” is a topic for another discussion, and I by no means argue that finding non-harmful books is an easy task. In fact, I’d call many popular programming books harmful, especially when it comes to teaching the basics of programming with Java. So, at least minimize the potential harm by not focusing on a single book.)

Another basic book will provide a different view:

You still can’t understand it. But keep going, and at some point you’ll arrive at a single complete picture.

This tells you more than before, you can even make some conclusions or reason about certain aspects of the object. But you don’t have a complete model yet, one 2D picture is not enough. Your brain haven’t met such objects in the past, there’s nothing to cling on to. This is why it’s essential to have various sources of information: other books, people, lessons, different mediums.

New pieces keep emerging, and it’s disconcerting. They don’t seem to make any sense, this puzzle feels broken.

This is the toughest stage of the learning journey. Often, any hope is lost. Disconnected pieces provoke the feeling of meaninglessness. You can’t see the big picture.

I think I understand each individual topic, but have no idea how they are connected. And why did I learn all that. Nothing makes sense…

But if you keep going, soon you’ll get to another full picture:

Interesting! A completely different point of view. Same object, new aspects. A complete 3D model is still impossible to deduce, but there’s more space for assumptions. Having multiple pictures increases the chances of seeing something familiar. It’s a new topic alright, but topics are rarely completely isolated from the universe.

A few more pictures and you get a pretty accurate model.

The first picture was extremely valuable, but each new picture brings less and less valuable data. At some point you have a decent model in your head, so that new pictures don’t give you anything new.

This analogy helps me learn new things. I try to remember the following:

  1. At first, everything is interesting and easy. The first picture gives a lot of data at once. This is the pleasant stage.
  2. In the middle motivation will decrease. That’s okay. Keep getting data and trust the system.
  3. Do not focus on a single picture. Maybe, in order to understand it you need another picture first.
  4. At some point, notice the diminishing returns of new data. Consider increasing the area of study.
July 29, 2019 | permalink

Bicycles and Love

I love bicycles.

The first memories I have are bike-related. The best ones are, too.

My first bicycle was a tricycle

I don’t remember a time I didn’t bike. Bicycle means freedom.

My first serious bicycles, the ones that let me explore the city, were old, steel soviet tanks. They were simultaneously indestructible and always broken.

My friend Eugene and I spent summers biking around town, forests and river valleys. It was awesome.

Eugene riding away, my bike in front

Those bikes were all-purpose vehicles. Well, at least for us they were. Pavement, gravel, sand, water, whatever. They go where we go. They were simple and stupid, and I loved that. No speeds, no hand brakes.

I used to live with my grandma until I was 13. Her apartment had a narrow corridor connecting the entrance to the room, and I can’t imagine it without a bicycle. It was always there, and when it wasn’t, I wasn’t home. Out biking god knows where.

I had a dream of driving a city bus, so quite often I spent hours biking along the bus routes, stopping at bus stops, emulating a bus. An old pen was diligently placed inside the handlebar, sticking about 2 inches outwards: it was my fake turn signal lever. I had to make the turn signal clicking sound myself, of course.

Then I moved to Canada. My next bike was a pretty cool steel Schwinn I got as a gift from my host family in Ottawa. Bicycle freedom had suddenly expanded. Now I could ride to another province where people speak a different language and traffic lights are horizontal. I could bring my bike on the train and get further than ever. I could disappear into the city and nobody could find me.

I didn’t appreciate this bike enough. I wish I could get that frame back…

Several random used bikes later I decided I’m ready to spend serious bucks and try road biking. With 1000 Canadian dollars in hand, I walked into a bike shop in western Ottawa and got myself a beautiful aluminium Trek 1.1.

Freedom was reinvented once more. With this light, fast bike I could go further than ever before. First 100 km ride was a revelation. Then 350km in 2-day group event. Then 500km in three days. Then more than a 1000 km in a week across multiple provinces to see the ocean.

At the end of my long trip to see the Atlantic Ocean, New Brunswick, Canada

I was in love again.

I was about to finish my computer science degree and was feeling somewhat down at times. That bike was the best thing in my life.

Biking and computer science made perfect sense to me. Both are about efficiency. Both are tools, but at the same time fun in and of themselves. Both let you be alone.

They let you disappear into a vast domain and get lost.

After moving from Canada to Kazakhstan, I stopped biking. It took me almost 5 years to re-ignite the passion.

After moving to Finland, I decided to try a single-speed and got a pretty Swedish Stålhästen Sport fixed gear bike with a flip-flop hub. Fixed gear is not my cup of tea, so I flipped the wheel and started discovering the Helsinki area.

It was pretty sexy.

But alas, we weren’t for each other. We just didn’t click. A bicycle is an intimate object for me, along with backpacks and computers. I can’t just have one, I must love it. So I sold it to someone who, hopefully, loved it.

And got myself a cyclocross Kona Rove Al 2015.

The relationship with this one was complicated. I loved it and sometimes hated it.

I loved my Kona because it was very comfortable, fast and looked very cool. Its brownish color was a perfect fit for the forests and fields I took it to. Disc brakes — first for me — made me more confident on narrow descents and uneven terrain.

But I didn’t love the maintenance. It was equipped with the cheapest components. Decent, but not awesome. Shimano Claris groupset and mechanic disc brakes were never perfect. The bike was never perfectly tuned, never perfectly silent. And I’m ashamed to admit, but I’m a crappy handyman when it comes to bikes. Actually, I’m a crappy handyman in all areas where “undo” is not an option, but I’m particularly bad with bicycles. Derailleur adjustment and disc brake calibration are black magic to me. Hours of sweat and profanity and I end up with a subpar configuration. It works and it’s fine, but it’s just not very good. Then I say “screw this!” and bring the bike to a mechanic.

By the way, good bike mechanics are pretty expensive in Finland.

I’ve later learned that better groupsets and hydraulic brakes (or at least the hybrid dual-piston ones) are so much better, and I honestly almost convinced myself to spend two grand on a very good bicycle. Because then I will ride more, right?

Kona Rove Al was my bike for three good seasons, but the furthest I took it was a 120 km one day ride. It never saw other regions of the country even. We weren’t too adventurous together.

This summer, after another failed attempt to eliminate 100% of the disc brakes noise, I decided to say goodbye to Kona and look for something new.

A romanticized and, perhaps, irrational desire to simplify struck me again. What is the simplest bicycle possible? Single speed with coaster brake. I love handbrakes, so, rim brakes then. But I wasn’t sure I could do single-speed again. I love my knees.

Then I discovered internal hubs. They look and feel like single-speed from the outside: no derailleur, no cable slack. My girlfriend and I got ourselves small folding bikes with Shimano Nexus 3-speed hubs and they are very nice. Simple, reliable, solid.

There also exist 7-speed Nexus hubs, but I haven’t tried one. They are pretty heavy and it’s a pain to install them with dropbars.

Turns out, there are also automatic hubs! Woah! Extremely curious, I got myself an old Fixie Inc. Floater with Sram Automatix 2-speed automatic hub.

The experience is… interesting. You just start pedaling and at about 15 km/h the gear changes automatically. It’s pretty solid, no wobble or anything. It’s like you’re suddenly teleported into higher gear. This shift point it ridiculously low though. It was pretty easy to disassemble the hub and change the shift point by unwinding a tiny metallic spring (here’s a good description).

At first, it seemed like a good compromise. Almost as simple as a single-speed, but the second gear allows to keep a sane cadence at higher speeds. Unfortunately, the hub is not as isolated from the outside world as other internal gear hubs, so it will require some maintenance.

I took it on multiple rides and just didn’t love it. What a picky, delicate flower I am.

And then, completely by chance, I had a chance to ride Bombtrack Arise. A single-speed, steel gravel bike.

Yes! It made me smile!

I’m not a fast rider, so when it comes to gearing, comfortable climbing is more important to me than going fast. Finding the perfect ratio for a single-speed takes time and lots of cogs, but this bike came with what seems to be the perfect ratio for me: 42 teeth chain ring and 17 teeth rear sprocket. With 28” tires, it yields 69 gear inches, which works very well for the steepest hills in my area and is good enough for descents.

This handy bike calculator helps to figure out the good ratio for a given cadence and speed. For my new bike, 90 rpm produces 28.4 km/h, and the high cadence of 130 rpm yields 41 km/h.

Single speed forces me to be more disciplined and think ahead. I can’t just attack a hill on a granny gear anymore, I have to save as much momentum as possible. At the same time, this creates ultimate freedom. I don’t think about optimal gearing, I am always in the wrong right gear.

Steel frame is lovely and comfortable, it feels softer, yet more confident. The simplicity of not having so many extra things inspires almost a zen-like feeling. Oh, and it’s quiet. No chain slap.

I am yet to take the Bombtrack on a truly long ride, and it might not be as peachy as I describe. But so far, with about 250km behind, I remain in love.

Find a bike you enjoy, it will make you happier.

July 27, 2019 | permalink

80-characters limit for text is wrong

I believe the 80-characters (or any other number) line limit for text to be wrong. Not archaic or irrelevant, but wrong. It violates a fundamental idea of computer science: separating layers of abstraction.

Not talking about code today, although, I don’t think a strict limit is a good thing there either, for other reasons. I’m talking about human text.

Many programmers stick to the 80-characters line length limit while writing documentation, emails, etc. Emacs and other editors even have special modes or plugins for automatic hard wrapping.

Often, results look like so:

Without hard-wrapping, this email had a chance to look normal everywhere. Any app can interpret and present it in any way. With hard-wrapping though, this email can only look normal in certain conditions. Namely, a certain lower limit for window width.

Imagine joining a web project and seeing a users database table with values like <strong>Jason Norwig</strong>. Your reaction might include profanity, because mixing data and presentation is wrong. Person’s name (data) and its presentation (HTML) are different layers of abstraction.

Hard-wrapping lines by inserting \n symbols where they don’t have any semantic meaning is the same sin. The whole character return thing was relevant in a context where data was inseparable from presentation: typewriters and paper.

A key argument for hard-wrapping goes something like this: “modern screens are too wide, it’s uncomfortable to read long lines”. But modern screens come with modern apps, which can handle presentation to your preference. By modern I mean “developed after the ‘70s”. Text editors (including vim and Emacs) have been able to soft-wrap lines at arbitrary comfortable column for decades.

If your text presentation tool can’t present text to your preference, consider replacing it. Moving this responsibility into data itself is not a solution.

So can we please
stop doing this
to each other.

May 30, 2019 | permalink

Office hours

As an experiment, I am holding paid office hours for several weeks. I’d love to share whatever limited experience I’ve gained so far. You can schedule a 30 or 60 minute audio call to talk (in English or Russian) about any of the following topics:

  1. Computer science and programming.

    • Discuss a fascinating idea.
    • Feeling lost and want to understand something.
    • No code review or debugging. Consider hiring a private mentor (on sites like codementor.io) for that.
  2. Software development career. I have experience being hired and hiring developers, being managed and managing teams, working on client projects, freelancing and on my own private businesses.

    • How to chose what to learn and where to work.
    • Freelancing vs. full time work.
    • How to grow professionally.
    • How to get promoted.
  3. Professional immigration. I’ve been through several work-, education- and entrepreneurship-based immigration processes in Canada (Federal and Quebec) and Finland.

    • How to chose a country that suits you and your family.
    • North America vs. Europe
    • English exams
    • Preparation, process, first steps after landing.
  4. Entrepreneurship and startups.

    • Starting your own business.
    • Raising funds.
    • Growth, goals and metrics.
  5. Education and/or immigration.

    • Learning English.
    • What to study in college.
    • How to study abroad. Scholarships, immigration, work after graduation.
  6. Self management.

    • Getting things done
    • Focusing on hard tasks
    • Managing distractions
    • Reducing mindless browsing, social media influence, digital addictions
  7. Other:

    • simplifying life
    • digital essentialism
    • managing complexity in life
    • public speaking
    • podcasting
    • blogging
    • … and almost anything else :)

Book your meeting at calendly.com/rakhim. Payment is processed there, along with the booking. Email me at contact@rakhim.org if you have any questions.

UPD (2.7.2019): the office hours experiments is concluded. Thank you!

Testimonials

I had a chat with Rakhim about education and mindfulness. His broad vision and aspiration to immerse in the asked questions helped me validate my current knowledge and gave me the direction for further growth. I recommend office hours if you feel kind of lost in a topic and want to know where to move on.Andrew R.

One hour Q&A session had helped me to better determine my career goals and new ways to fulfill my interests in different areas of software engineering. Thanks to Rakhim, I’ve found new opportunities and ideas on how to improve my computer science knowledge, English, and other things. Thank you bro!Rustem Z.

Me and Rakhim were talking about doing business in Finland. We had just 30 minutes, but we managed to discuss visa, tax and legal aspects of working in Finland. Rakhim also sent me a bunch of useful links after the chat. It was a nice experience overall, can totally recommend.Dmitry N.

May 21, 2019 | permalink

Rethinking Twitter

Good old days

Twitter is the only social media I’ve ever used. Sure, I had accounts on other sites, but was never really engaged elsewhere. I couldn’t understand all those “facebook addiction” stories, honestly. Facebook was always extremely boring, while Twitter was always exciting.

From the beginning, it was a perfect, geeky, simple thing that is kind of hard to explain. Just a stream of short thoughts. Cool links. One liners. A public chat room.

I joined Twitter in 2007. Woah, 12 years ago! I was studying in a university, and smartphones weren’t really a thing yet. This is totally a “back in my days” kind of rhetoric, but hell, that Twitter was nice.

Most people didn’t have a Twitter account. Because it’s weird, what’s the point? So, like other internet communities, Twitter started as a selected group of weirdos, acting constantly amazed about the fact that they’re all here. Tweeting.

The timeline was chronological, and the world seemed ordered. It was more like RSS than like Facebook or TV: you could only see the people you explicitly subscribed to. Never an unknown face in your timeline. Retweets weren’t a feature, it was just a thing people did: copying a tweet and putting “RT” in front of it. I think it’s a better strategy overall: if you retweet something this way, you put your face on the message, you own it now. So, the value of retweets was higher, nobody wanted to copy every mildly interesting thing.

There were no likes, this added sugar of engagement and interaction. You like something? Well, say it. Tell it to the author, do a retweet with an encouraging comment. Do something you’d do in real life.

Twitter was allowing people to communicate via a digital medium. Not communicate in a new digital way.

And Twitter wasn’t like TV.

Outsourced schizophrenia

A HackerNews user had put it nicely:

I think the problem is that Twitter is a platform for evolutionary selection of slogan-based-dialog. I kind of imagine two armies standing across a battlefield from one another carefully deciding which volley of pithy digs to throw at one another.

Yeah. It’s like switching TV channels every 5 seconds.

This article had hit home hard for me. I’ll just include a few quotes:

There are people you know whose voice you can hear in your head […], or people who you even consult with in your head for wisdom (“What advice would my dad give here?”) […]

…it can be a huge mental lease we’re signing when we invite a few hundred people into our Twitter life. To some degree, it is choosing to subject ourselves to thousands of ads throughout the day, but ones that come from trusted sources we care about, so they’re actually impactful.

Yes! And especially today, thanks to both natural and artificial (algorithmic) selection, these short ads are hyper-optimized for stickiness and virality.

We’ve surrendered a massive amount of mental and emotional energy without making the explicit choice to do so–it’s simply imposed on us by subscribing to the channel and checking it.

The worst part is that nowadays you see a chaotic stream from people you haven’t explicitly subscribed to: retweets, liked and promoted tweets, ads, etc.

Mentally, we just aren’t capable of simultaneously empathizing with hundreds of people–let alone thousands or millions. The result is we either build up a calloused, jaded, or cynical defense against empathy or find a way to block out more.

I can hardly manage interacting with a single person for more than a few hours, let alone with hundreds, even via virtual channels.

This one describes me very well too:

I’ll admit: I’m an annoyingly oversensitive person. I do believe this is both a strength and a weakeness. […] I also have a tendency to listen carefully to any criticism or disagreement I hear, internalize it, reflect on it, and evaluate it, then conclude some thought on it. Until I do that, it just sort of hangs there in my head. The degree to which it dominates my headspace is largely a question of how much it impacts me.

If nothing else, I want you to consider this quote:

[…] Twitter is outsourced schizophrenia. I have a couple hundred voices I have consensually agreed to allow residence inside my brain.

I assume not everyone is like that, and not everyone experiences social media this way. But Adam, the author of that post, does. I do too.

His essay is fantastic, really:

I’ve realized how Twitter has made me break up my thoughts into tiny, incomplete, pieces–lots of hanging ideas, lots of incomplete relationships, punctuated by all manner of hanging threads and half-forked paths.

Change

But Twitter has been very beneficial to my career. With a few thousand followers, links to my projects had consistently brought me hundreds of hits, readers, clients. This is my strategic failure: I haven’t been working on maintaining an independent outlet for my audience, a newsletter or a consistent blog. For more than a decade, Twitter has been the main channel of distributing my work.

So, I decided to make a few changes and conduct an experiment.

  1. Unfollow everybody. No more timeline.
  2. Tweet via an app like Buffer, without opening Twitter itself.
  3. Open Twitter and reply to mentions only on weekends.
  4. Invest energy into maintaining a consistent blog and a personal newsletter. You can subscribe to the newsletter here or with a form below:

I will maintain this system at least until the end of 2019 and we’ll see how it goes.

TWEET THIS NOW!

May 15, 2019 | permalink

Easy slides (for me)

As a software developer, at some point you discover simple slides and presentation generators: Markdown-to-PDF/HTML converters, Emacs extensions, LaTeX exporters, VIM plugins, etc. The idea makes perfect sense, because:

  1. I don’t want to use PowerPoint or Keynote.
  2. I don’t want to use the mouse.
  3. I want plain text.
  4. I want simplicity.

You can create presentations without leaving your favourite editor or command line. But unfortunately, the majority of the results are just text with an occasional poorly positioned funny GIF (that didn’t load because wifi is down).

I completely understand the desire to make things as simple as possible and forget about clunky GUI-based presentation software. I don’t like them either, and yeah, I’d love to be able to do things from the comfort of my text editor. You might say that text is mostly enough, animations and other flashy effects don’t contribute to the value.

But I argue that animations, visualizations and transitions are tools, and like any other tool, they add value when used correctly. By sticking to text-only slide generators, you disregard a whole set of tools and potentially a whole set of problems they might help solve.

A title flying out from the corner probably doesn’t do any good, the effect has no meaning. But if you want to explain something non-trivial (not to you, but to your audience), consider using something to illustrate your point or even just to focus viewer’s attention. It’s not about animation or burning flames effect, it’s about anything above the typewriter in the pyramid of technology.

Dimming. Colors. Shapes. Transparency.

Computer science is full of complex ideas, multiple levels of abstraction, non-obvious connections and relations. It pains me to see whole presentations, thick books and long manuals with essentially zero visuals, zero attempt to convey an idea with something other than text.

Your slim Markdown-to-PDF converter serves one purpose: make your life easier. Nothing wrong with that. But there are also viewers who might benefit from a more detailed visual presentation. Of course, not all viewers would. For many, text and your speech are more than enough, after all, many of us became programmers because of the ability to understand complex, abstract, non-visual ideas to begin with. This is where lack of diversity starts from, I believe. We filter out people by their adaptability to certain styles and formats of explanations. We filter out people by their learning medium.

You need a cartoon to understand closures? Good luck. Maybe, programming isn’t for you?..

Now, I understand that it takes time, and you might just not have enough of it. I am not bashing these wonderful tools and not saying you must produce visuals and animations. I just wanted to remind you that plain-text presentations are compromises. It’s absolutely fine to mindfully and intentionally make compromises.

April 21, 2019 | permalink

How to podcast

Here is a TL;DR version:

  1. Record using whatever. Even smartphones produce decent sound nowadays. Just make sure to have a consistent volume, i.e. maintain constant distance between your mouth and the phone.
  2. Compress to 96kbps mp3 constant bitrate. Or use an online encoder like Pinecoder.
  3. Pick a podcast hosting provider:
    1. pinecast.com: starts at $5/month with unlimited storage, unlimited shows, basic analytics and website generator.
    2. simplecast.com: starts at $15/month per show. Cool player, website generator.
    3. transistor.fm: starts at $19/month with unlimited storage, unlimited shows. Limited at 5k downloads per month.
    4. Or one of many others, including podbean, libsyn, fireside or even soundcloud (probably not the best idea, since the company’s finances aren’t great)
  4. Add your podcast to public catalogs:

    1. Apple Podcasts (iTunes)
    2. Spotify
    3. PocketCasts
    4. Google Podcasts
    5. Player FM
    6. TuneIn

    Some podcast hosting providers can submit your feed to those catalogs on your behalf, but I suggest you do everything manually to keep 100% control over your content.

Preparation

This part is very subjective, so I’ll just describe my own process.

Since each of my episodes follows a specific topic, I start thinking about it weeks before, just allowing ideas, thoughts and just random pieces of info simmer in my head for hours. I do my best to write down these things, but often just forget them. It’s okay. I have learned to let go of “obviously genius” ideas.

I never hesitate to write down whatever comes to mind though. It could be an analogy, a funny phrase, a weird comparison.

At some point I feel ready to jot down the structure. I’ve been using a large notepad and iPad pro with Apple Pencil, but lately have been enjoying MindNode on the desktop. Having a large, tree-like structure fits my way of thinking very well. I just “walk” the tree during recording, trying to visit all the nodes.

Recording

There are different levels here.

Level 1: Just use whatever.

Your phone or internal microphone of your laptop are okay. Not great by any means, but keep these in mind and you’ll be fine:

  • Pick a quiet spot. Humming noises are the worst (loud fridge, AC, etc.)
  • Maintain constant distance between your mouth and the mic
  • If possible, record in a smaller room with lots of soft objects to minimize echo. Books, blankets, pillows, curtains reduce echo significantly.

Level 2: USB headset

A good and cheap way to improve your sound significantly is using almost any good USB headset. But it must be USB. Those headsets that connect via jack cables are simply using your computer’s audio card and the sound might not be much better than with an internal mic.

Level 3: USB microphone

USB mics are the combination of “real” microphones and the convenience of USB. You usually don’t need anything else, just plug and play.

There are several good choices in this category:

  1. Rode Podcaster (my only mic for 10+ years, produced hundreds of podcasts and videos with it)
  2. Blue Yeti
  3. Audio-Technica ATR2100-USB
  4. Shure PG42-USB
  5. Audio-Technica AT2020USB+

Level 4: XLR microphone

When you’re ready to go “full podcaster”, go read Marco Arment’s Podcasting Microphones Mega-Review. There are audio samples, too.

Editing

I edit my podcasts heavily. 60 minutes of recording usually result in about 35-45 minutes of end result. Marco Arment wrote about this in Easy listening and I agree: “you just need to care”.

Free and open source Audacity is more than capable for both recording and editing, but, to be honest, I find it extremely cumbersome and ugly. Once you’re serious, I think it’s worth to invest into buying and learning a tool like Adobe Audition (my choice) or Apple Logic Pro X.

Publishing

Podcast is basically an RSS feed with media files. You can generate it yourself and host mp3 files wherever. If you already have a blog running on Wordpress, it makes sense to just continue using it. On wordpress.com they have a special feature for podcasting, and if you run your own wordpress instance, this plugin will help you.

It is much easier to use one of the specialized hosting providers:

  1. pinecast.com: starts at $5/month with unlimited storage, unlimited shows, basic analytics and website generator.
  2. simplecast.com: starts at $15/month per show. Cool player, website generator.
  3. transistor.fm: starts at $19/month with unlimited storage, unlimited shows. Limited at 5k downloads per month.
  4. Or one of many others, including podbean, libsyn, fireside or even soundcloud (probably not the best idea, since the company’s finances aren’t great)

Most of them can even generate websites for your shows, although, their design choices are questionable at times.

All of my shows are hosted by pinecast: it’s a fantastic value for the money and everything works perfectly fine. Here is my referral coupon code for 40% off for 4 months: r-a6562b. Use it at checkout.

Questions?

Feel free to email me at contact@rakhim.org, and I’ll try to add more info to this guide.

April 15, 2019 | permalink

Frontend vs. Functional Programming Conferences

February 27, 2019 | permalink

Christmas Wish

December 17, 2018 | permalink

If real life were as buggy as software

November 30, 2018 | permalink

Evolution of Frontend vs. Backend

November 16, 2018 | permalink

The Ultimate AI answers the Ultimate Question

November 7, 2018 | permalink

Dazed, depressed, defunct

I’ve been journaling daily for 6+ years, but stopped this summer. There are many reasons, but one stands out: it makes me sad to read my journal.

DayOne app has a nice feature: show entries for “this day over the past years”. I used to start each morning by reading 5-6 journal entries from the previous years. This routine has been more or less automatic, and it didn’t feel like it was in any way affecting me. It took me an unreasonable amount of time to realize how disturbingly repetitive my journal entries are. Most of the time I was “temporarily sad” or “feeling depressed” or “tired and frustrated, whatever”.

It goes on and on…

Getting lonely

I felt lonely most of my life. I can’t say I had ever had long, true friendships or partners. I remember tolerating most of the circumstances and people, at best. But, being a young university student around 10 years ago, it wasn’t an issue: there were too many things to worry about, and there were ways to relax and dumb down the brain, if you know what I mean. The body can really take a beating so that the mind is spared.

Closer to graduation, I found myself frustrated with everyone and everything around me. I deliberately made myself completely alone and isolated, in a foreign country, working in a different town, so that I can “leave” multiple times a day: leave home, leave the town to commute, then leave the office, leave the group. I didn’t talk to anyone except colleagues during weekdays and the person who became my girlfriend and life partner several years down the road. She eventually became the only person I could discuss these issues with.

For almost 8 months I had a bizarre groundhog day experience every day. It didn’t do good.

In 2012 I left the country, changed jobs, got back into public speaking, finally met that girl. It felt like things are changing for the better.

Turned out, those external events had nothing to do with the way I felt inside. It’s hard to fathom: even a 100% change in circumstances and environment could theoretically contribute exactly 0% to the internal feeling.

I didn’t take notice and kept chasing. Another city, another job, another side project. 10 months in — no, back to the other city, another job. No, working for the man is not for me, I want my own business. Attempt one, attempt two, attempt three… I have no idea what I’m doing. I know! Startup! Investors! Rounds! Yes, this is what I was missing!

I went all in. Quit my job, started learning about startups, lean and customer development. Pitching like crazy, applying to bootcamps and “accelerators”. Dreaming of Round C. It was an efficient, but costly life-filler.

As you can imagine, that didn’t do good either.

Getting frustrated

Co-founding a startup when you’re not right mentally and when you have no idea what you want is a bad, bad idea. Almost hitting rock bottom money-wise, risking the livelihoods of multiple people and your own legal status in a country you’re trying to make your home is a fucking shit show of emotions and, surprisingly, numbness.

I guess, statistically I was numb most of the time, not frustrated or tired or depressed. Just numb, slowly moving towards that dark and moist sweet spot of groundhog-day-like existence. Daily routines became the refuge. Weekends became wanted again, not because I could relax, but because I could ignore.

I remember washing dishes being the best thing to do some days. Yeah, washing dishes for an hour, slowly going through a pile, seeing definite progress, having my hands in nice, warm water, having a feeling of accomplishment in the end.

Surprise! Investors don’t really like it when you’re stalling. Or have no plans for the next quarter. Surprise! You’re not CEO material. Not leader material, really. Surprise! You still have no idea what you want.

Self-hatred-driven personal development is a promising area of self-help literature, I think.

Surprise! You suck! Go, write that in your dreary sobbing journal.

Getting defunct

While external positive circumstances don’t really change much, external negative circumstances do work as advertised. Feeling depressed? How about feeling depressed and broken? There you go!

As an example of things piling up on top of all this: the government retroactively stripped me of the scholarship they awarded me with 12 years ago for “violating” a condition that is not in my contract, but exists in their internal documents which they failed to provide after numerous requests. Seven years after graduation, I was handed a large, unexpected student debt. Suing the government doesn’t really work there, so, yeah…

Or a business partner threatening us (co-founders) with “legal action” for not taking the canonical growth startup path, but rather deliberately deciding to stay small-ish.

After multiple roller coasters, after months of not being able to do any meaningful work, after a personal trip that didn’t go well, I found myself broken. I didn’t have suicidal thoughts, don’t worry, but I remember feeling that it doesn’t matter if I die. I mean, I don’t want to, and it won’t be good for my partner and parents, but, you know… it’s not… yeah. It’s just “whatever”.

It made me shiver when my mother, whom I see about once a year since I left home at 18, told me “your eyes seem faded”. Before that I used to think I’m pretty good at hiding this shit inside.

Last week I decided to step down as CEO of Hexlet, the company I co-founded in 2015 with Kirill Mokevnin. I started it as a hobby project in 2008 and it grew to a profitable educational business with 200 000 users and 7 employees. It has great potential, but it needs a real leader.

What now?

I don’t know.

I guess, first things first, I need to fix myself at least to the point of making money to pay off the unexpected debt. I know intellectually this is possible. And maybe this is the kick in the butt that’ll do good. Or not.

Sometimes I am able to force myself to work creatively and produce something like an article for this blog or a video for my channel or a podcast. The moment of publishing and getting any sort of feedback brings a fleeting feeling of hope, but inevitably leads to a period of numb emptiness, followed by self-deprecation for feeling that way. Sustainable creative work is the hardest thing to achieve.

There are things that definitely contribute positively: I started working out and taking care of sleep, I’m trying to cut on bad food and understand nutrition better. Again, intellectually it all makes sense, but for now, I am as lost as ever, dazed and uncertain.

I don’t know why I’m writing all this. It promised to be cathartic, but maybe I should stop listening to external promises…

October 31, 2018 | permalink

Important Git Realization

October 29, 2018 | permalink

Every movie that involves computers

October 23, 2018 | permalink

Kids nowadays are LIKE stupid

October 22, 2018 | permalink