Перейти к содержимому

Блог

New Advent of Code, new attempt

Every year I start solving Advent of Code.

Okay, I was sure that I did it every year, but it looks like I only did it in 2021 and 2022 — and after that I took a break. It seems like moving to a new country, changing jobs, and emigrating can change your memory or perspective.

But nevertheless — I started to solve it this year again. And great part about it that I not only have a awesome time, trying to solve problems and tickling my brain, but also I learn new things.

Discoveries at this moment:

  • The technique (or pattern, or special data structure) of a monotonic stack for solving problems. Basically, it’s a stack (obviously) whose elements are always increasing or always decreasing. I liked the explanation from here (clear example + list of related LeetCode problems) and here (interactive example of building a monotonic stack + when to apply it). I needed it for the Day 3 Part 2 problem, where I had to define the biggest possible number that I could construct from a sequence of numbers.

  • structuredClone method for creating deep clones of values in JS — very handy with arrays and objects. I almost wrote the familiar JSON.parse(JSON.stringify(arr)), but stopped for a moment and searched. I remembered that there is a newer API I can use. Powerful, but with some limitations (as everything good in this world): for example, functions and DOM nodes cannot be cloned with structuredClone. You can find some details about the algorithm on MDN.

Want to learn Russian? Curated list of resources

My American colleague recently asked me for recommendations on how to self-study Russian. I reached out to a friend of mine who teaches Russian as a foreign language professionally in Taipei, and now I’m happy to share a list of useful resources:

Free resources

Textbooks

Also here you can find a collection of free tools and materials https://gratisglobal.com/learn-russian-free/#news-media, but this list wasn’t tested personally by me, my friend or her colleagues. But there is definetely a lot of interesting and useful things.

Apps

  • Babbel+ is surprisingly good for Russian.

Youtube

Books

Не хотите быть тим-лидом? Возможно, придётся

Послушала эпизод подкаста Pragmatic Engineer c Laura Tacho, CTO в DX - и это захватывающее обсуждение влияния/роли AI в современной разработке. Рекомендую каждому, кто в индустрии или интересуется (на английском, если что).

Идея “измерьте, прежде чем делать выводы” — вроде бы очень простая, я в неё верю применительно ко всему (перформансу приложения, перформансу разработчиков, эффективности ai и даже уровню счастья и методам его достижения). Однако идея, которая мне очень срезонировала — это то, что скорее всего через пару лет каждый разработчик будет менеджером, который управляет командой AI-агентов. Так что даже если сегодня вы не планируете становится менеджером и лидом, возможно, надо подумать. Хорошее время, чтобы укрепить свою техническую экспертизу, навыки код-ревью и координации процессов (как будто есть плохое время, чтобы все это развивать, хе-хе).

P.S. Еще обсуждали интересный практический пример эффективного применения AI - для миграций. Как и юнит-тесты, мигранции обычно не вдохновляют приблизительно никого. Однако при правильном подходе здесь AI может и ускорить, и снять нагрузку.

Solved all React challenges on Hackerrank and not satisfied

I read that hakerrank has challenges organized by domain — for example, the React domain — and decided to solve them as part of my interview preparation.

I completed all of them, but not satisfied. Here’s why:

  1. The challenges don’t feel like real interviews. They give you a lot of code, while in actual interviews you often write components almost from scratch.
  2. The tests are not reliable. In one case, I had to remove the key from react element just to make their test pass. Test kept a reference to the element at the start and didn’t update it after re-render. In another challenge, tests used hardcoded outdated dates, so I had to add a weird condition just to pass.
  3. The platform itself has issues. Sometimes my progress wasn’t saved. A couple of times I submitted a solution, saw the “Congratulations” screen, went back to the challenge list — and it showed the challenge as unsolved. I had to redo the solution. Eventually, I started double-clicking the submit button just in case, because I didn’t want to retype everything again.

Overall, I regret the time spent a little, because mostly I fought with tests, not with solving problem. Moreover, challenges turned out to be not so interesting. I liked leetcode experience more.

Hakerrank page with completed challenges

Don't use display:none without serious reasons

Two days before release — and guess what? Suddenly, all popovers with information about meeting rooms in our app broke and stopped displaying. We hadn’t even changed anything related to this functionality — how could this happen?

Situation

It turned out that the popovers were broken in all browsers except Chrome. And after the latest Chrome update, they stopped working there too.

What happened?

Four years ago, someone decided it was fine to hide a <g> element using display: none, but still call node.getBoundingClientRect() on its child elements to calculate the popover’s position.

It worked… until it didn’t. Now, all modern browsers correctly return zero for the coordinates and size of any child inside a display: none element.

To be honest, I didn’t want to refactor much, so I replaced display: none with opacity: 0. In this case, the element is still invisible to the user but remains in the document flow and keeps its size.