Not boring, and a bit of a condescending prick
114 subscribers
7 photos
45 links
Semi-digested observations about our world right after they are phrased well enough in my head to be shared broader.
Download Telegram
to view and join the conversation
And our next system design meetup video: designing WhatsApp / Telegram / FB Messenger.

With online whiteboards this time, hope you enjoy it! We had a lot of fun for sure, and, as always, we've learned something too.

As a fly in the ointment, my Ubuntu screen recording at 60FPS stared dropping frames, effectively freezing the video in the last quarter or so of the recording. The audio is fine. Lesson learned, I hope to do better next time.
And yesterday at the meetup we talked about reactive streaming.

I'm experimenting with formats tirelessly =) and this one was not really about discussing the design of a particular large-scale system, but more of a casual conversation on one of the important topics in modern software architecture.
Glad we're back to the TSLA curve from what seemed to be stalled as the gold one for a bit.

Wondering how would my Go career exit. Casually become a dan-ranked player around my retirement age would be close to how I approach life in general, and one's Go does resemble their life quite a bit.
I am cautiously optimistic for the world where the reopening does happen, but quite a few people still enjoy working from home.

This would give those of us who are both tech-people and people-people a tremendous opportunity: to live and work literally anywhere, and have business trips of a few days to ~1.5 weeks long once or twice a month.

With all my dislike of the modern corporate structure, if most of my team is remote, we gather often via video chats, and yet some ~half of us enjoy to see each other in person, which we do by gathering in various places for mini-offsites on the company's buck, as the company clearly understands the cost-effectiveness of such an approach ...

... that's the world I might enjoy living in.

~ ~ ~

Although it's all a distant dream so far. As of today, most places can't even be traveled to, and only the most adventurous of us are still up to asking the very "where to work from next month" question.

It is incredibly sad to see how herd-able by fear the people are. But, much like in 2008, a sober reminder is that in Mandarin "crisis" consists of two hieroglyphs: dangerous + opportunity.

Be safe & sane, everyone.
Sorry in advance for Russian, promise to keep this rare — интервью, которые мы с Тилеком Мамутовым (Outtalent.com) записали в Ололо в Бишкеке. Спасибо, было офигенно, и ты отличный интервьюер!
Forwarded from Грамм Тилека
Дима Королёв (@BoreMeNo) - архитектор программного обеспечения в Poker Stars, преподаватель, основатель Systems Design Meetup. Кроме этого он работал программистом в Google, Microsoft и многих других компаниях.

В этом интервью мы поговорим о собеседованиях по алгоритмам, systems design и о том, как можно развивать карьеру программисту.

https://youtu.be/iYvWLflZ9E4
A system design meetup episode on MapReduce: video, slides. Thanks folks!

And sorry my OBS Studio didn't record your questions this time — good thing I have a habit of repeating them from offline conferences :-) also, I should probably not forget to hide the taskbar next time.

#incrementalimprovements #practicemakesperfect #thanksforhangingalong
I'm experiencing a rare déjà vu.

As in the dev part of my career is, again, slowly expanding, from encompassing just the realm of C++ before, to now building JavaScript wrappers over it, enabling more and more people access the sacred performance of The Language.

It’s almost like my Java/JNI stint 2.5 years ago, but a lot better actually. Better because JavaScript is in fact a relatively good language to wrap C++ into, at least once the initial blockers are behind.

If all goes well, I’ll be generating (DSL, *.inl) C++ as part of the build step some time in the next few weeks, after which point shipping C++ code as npm modules, bundled with their TypeScript interfaces, may well become my second C++ nature, as long as the tasks I have to work on these days allow us to explore this direction.

Links: experiments, and my clean repo with example usage.

Fun times.
Exactly Once: today's system design meetup video. And the slides.

We covered the narrow edge between the easy problems and the hard one, touched on message sequencing / "serialization", Kafka, Lamport clocks, the CAP theorem (once again), and how to deal with them in practice, not just in theory.

I truly enjoyed it today, and hope the recording captures the spirit well enough 😊
After drinking the C++ metaprogramming cool aid for several months, we are now seriously debating whether it's a good idea to have a universal wrapper that would make functions accept arguments in any order.

They are all of different types, after all, and we use enum classes and user-defined literals everywhere, for readability reasons. So, there are no bool`-s left, and any number or string would likely be suffixed by some `27960_container_port or "/tmp/foo/bar"_host_dir.

Spoiler alert: I am now the one advocating against this idea.

Although the chaotic part of me wants to go full Haskell mode and implement an even stronger wrapper. So that "partial specializations" would result in "Currying 2.0": returning functions of lower arity, with some argument values already preset.

(The chaotic evil part of me is even thinking about compile-time checks that we should be able to associate with these wrappers.)
Embarrassingly, I knew it since forever that git upstreams can be local dirs, but it always felt a tricky feature to use.

So, even when we all knew a git proxy would help speed up cloning the repos, I was somehow reluctant to look into this.

Well, git upstreams can be /home/dima/.my_git_cache/${repo_name}. In other words:
• Create a .my_git_cache local dir.
• Clone everything you need there.
• (You may even "clone" from your local, already cloned, dirs, just make sure to change their upstream to the true ones.)
• Write a cron script to do git fetch in all those .my_git_cache/* repos every few minutes.
• For your new repo, add this .my_git_cache as one of the upstreams, e.g. cache.
• (You may also want to mark it read-only by preventing pushes to it, just to be safe).
• Now, establish a habit of saying git fetch cache every time you need to sync with the "true" upstream.

Voila. Time saved: hours and hours. A rewarding git experience: priceless.
In the meantime, the System Design Meetup is growing, and we are now 99 people in Slack.

If you are interested in making it a three-digit number, or in joining the meetup, or both, here's the invite link: https://tinyurl.com/sdm-slack-invite

To also take part in the on-the-record episodes, which we release on YouTube, please also fill the https://tinyurl.com/sdm-signup-form form.