<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog on Fail. Learn. Repeat.</title><link>https://faillearnrepeat.net/blog/</link><description>Recent content in Blog on Fail. Learn. Repeat.</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 21 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://faillearnrepeat.net/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Open-source ML homeworks with auto-tests - fundamental agorithms from first principles</title><link>https://faillearnrepeat.net/blog/sktech-ml-course/</link><pubDate>Sat, 21 Mar 2026 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/sktech-ml-course/</guid><description>&lt;p&gt;This year I&amp;rsquo;ve been designing homework assignments for an ML course at Skoltech (Russia&amp;rsquo;s answer to MIT/Caltech for science and technology). After bombing more job interviews than I care to count, I think I&amp;rsquo;ve finally figured out what I was personally missing during my studies - a deep understanding of a relatively small set of fundamental algorithms. Well, my pain is the next generation&amp;rsquo;s gain!&lt;/p&gt;
&lt;p&gt;In my engineering worldview, you can&amp;rsquo;t truly understand something unless you&amp;rsquo;ve built a replica from scratch with your own hands. At the same time, I didn&amp;rsquo;t want learning to stall at the terror of a blank page. I wanted to guide students toward each problem step by step. Show them how it&amp;rsquo;s assembled from small building blocks.&lt;/p&gt;</description></item><item><title>Little ML book club</title><link>https://faillearnrepeat.net/blog/little-ml-book-club/</link><pubDate>Thu, 16 Oct 2025 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/little-ml-book-club/</guid><description>&lt;p&gt;&lt;strong&gt;We are reading &amp;ldquo;&lt;a href="https://huggingface.co/spaces/nanotron/ultrascale-playbook"&gt;Ultra-scale playbook&lt;/a&gt;&amp;rdquo;. Together!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hello fellow ML geeks, my name is Andrey. Each day, I understand more about how little I know. Time to cover another gap - scaling LLM training. Most of the time I just plug in a library or ask an expert colleague. And&amp;hellip; I still want to do the same thing, but finally have a much better grasp on what is going on under the hood. Join in!&lt;/p&gt;</description></item><item><title>ML misfits club or what to do when nobody wants you</title><link>https://faillearnrepeat.net/blog/ml-misfits-club-or-what-to-do-when-nobody-wants-you/</link><pubDate>Tue, 24 Jun 2025 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/ml-misfits-club-or-what-to-do-when-nobody-wants-you/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; This summer I did not get into any of a bunch of research programs and schools. After crying into my pillow, I remembered someone smart saying that knowledge isn&amp;rsquo;t something you&amp;rsquo;re &lt;em&gt;given&lt;/em&gt;; you have to &lt;em&gt;take&lt;/em&gt; it. That seemed like a bright idea, so I am starting my own summer-ish school / research-padawan community &lt;s&gt;with blackjack and hookers&lt;/s&gt;. An &lt;a href="http://mlmisfits.org"&gt;educational-research collective for the misfits&lt;/a&gt; (&lt;a href="https://github.com/fxlrnrpt/ml_misfits/"&gt;upd: backup link&lt;/a&gt;). Expect deadlines, homework, and most importantly other equally obsessed people right beside you.&lt;/p&gt;</description></item><item><title>I failed my Anthropic interview and came to tell you all about it so you don't have to</title><link>https://faillearnrepeat.net/blog/i-failed-my-anthropic-interview-and-came-to-tell-you-all-about-it-so-you-dont-have-to/</link><pubDate>Wed, 12 Feb 2025 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/i-failed-my-anthropic-interview-and-came-to-tell-you-all-about-it-so-you-dont-have-to/</guid><description>&lt;p&gt;&lt;a href="https://www.anthropic.com/"&gt;Anthropic&lt;/a&gt; – those dudes behind &lt;a href="https://claude.ai/"&gt;Claude&lt;/a&gt;. It’s an alternative to OpenAI’s ChatGPT, backed by some seriously massive investments from Amazon. Rumor has it they’ve got a model even more powerful than OpenAI’s o3, but they’re so obsessed with safety (which is a great thing!) that they still keep it private.&lt;/p&gt;
&lt;p&gt;What I applied for: &lt;a href="https://alignment.anthropic.com/2024/anthropic-fellows-program/"&gt;Research Fellowship&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here’s something unusual: they asked for reference contacts—the folks you’ve worked with who can give you feedback. Yup, now that’s not just an academic thing anymore!&lt;/p&gt;</description></item><item><title>How to switch from software engineering to AI research if you are lazy as f**k</title><link>https://faillearnrepeat.net/blog/how-to-switch-from-software-engineering-to-ai-research-if-you-are-lazy-as-fk/</link><pubDate>Thu, 25 May 2023 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/how-to-switch-from-software-engineering-to-ai-research-if-you-are-lazy-as-fk/</guid><description>&lt;p&gt;For 7 years I happily played with web. For 6 months I was burning out. &lt;a href="https://faillearnrepeat.net/blog/how-i-burnt-out-in-faang-but-my-job-was-not-the-problem/"&gt;Next 2 quarters I tried to reassemble myself, looked for the meaning in life and fantasized how I would switch from SWE to AI on a whim&lt;/a&gt;.
After 3 more months, I have made barely any progress. At this pace, my first proper research publication is going to be written by my child in 30-ish years, and not me. Something has got to change.
In this post, I am going to share my old plan that miserably failed, self-reflect on what went wrong, and publish my new awesome plan that is destined to succeed!&lt;/p&gt;</description></item><item><title>How I burnt out in FAANG, but my job was not the problem</title><link>https://faillearnrepeat.net/blog/how-i-burnt-out-in-faang-but-my-job-was-not-the-problem/</link><pubDate>Mon, 13 Mar 2023 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/how-i-burnt-out-in-faang-but-my-job-was-not-the-problem/</guid><description>&lt;p&gt;Once upon a time, there was a boy who loved building websites. He also enjoyed sharing his findings at conferences. Then he moved from the middle of nowhere to London. Started working in the company of his dreams. 18 months later he collapsed hard, to a point where he wanted to throw his laptop out of a window and roam the mountains of Scotland indefinitely. After 3 more months, he figured it all out and became happy again.&lt;/p&gt;</description></item><item><title>Getting a talent visa in the UK for mortals</title><link>https://faillearnrepeat.net/blog/getting-a-talent-visa-in-the-uk-for-mortals/</link><pubDate>Mon, 21 Mar 2022 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/getting-a-talent-visa-in-the-uk-for-mortals/</guid><description>&lt;p&gt;Did you always think various &amp;ldquo;talent&amp;rdquo; immigration programs imply a Nobel prize? I am going to tell you how a regular software engineer from the middle of nowhere could get a talent visa in the UK based on my personal experience.&lt;/p&gt;
&lt;p&gt;In this post we will cover:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;How a software engineer could get in the UK&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Key differences between talent and skilled worker programs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;What documents and evidence you need to provide to get a talent visa&lt;/p&gt;</description></item><item><title>How to get an online Master's in CS for a price of your morning latte</title><link>https://faillearnrepeat.net/blog/how-to-get-an-online-masters-in-cs-for-a-price-of-your-morning-latte/</link><pubDate>Sat, 22 Jan 2022 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/how-to-get-an-online-masters-in-cs-for-a-price-of-your-morning-latte/</guid><description>&lt;p&gt;I&amp;rsquo;ll tell you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How I got into Georgia Tech&amp;rsquo;s Online Master of Science in Computer Science (OMSCS) program while working and living in Russia.&lt;/li&gt;
&lt;li&gt;Requirements to enroll for foreign students.&lt;/li&gt;
&lt;li&gt;How much it costs.&lt;/li&gt;
&lt;li&gt;My experience with the courses.&lt;/li&gt;
&lt;li&gt;Why I am still pursuing the degree even after I started working at Facebook.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="who"&gt;Who&lt;/h2&gt;
&lt;p&gt;Hiya!&lt;/p&gt;
&lt;p&gt;ℹ️ My name is Andrey G. I am a software engineer from London, UK. Primarily, I am a full-stack web developer (think React, Angular, Node.js), but I also have a keen interest in low-level stuff (hello, C) and finance (love-hate relationship with Pandas).&lt;/p&gt;</description></item><item><title>How I got multiple FAANG offers in Europe</title><link>https://faillearnrepeat.net/blog/how-i-got-multiple-faang-offers-in-europe/</link><pubDate>Mon, 30 Aug 2021 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/how-i-got-multiple-faang-offers-in-europe/</guid><description>&lt;p&gt;Yet another story of how an ordinary guy from the middle of nowhere in Russia managed to get multiple FAANG offers. This time, in Europe.
I&amp;rsquo;ll tell you a little about my background, share several tips and tricks that helped me to land the interviews and prepare for them, talk about the interviewing process, reveal my final choice.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;TL;DR. Sent hundreds of CVs. Solved 100 challenges on Leetcode. Read a book on system design. Went through 9 interviews. Got 4 offers. Accepted 1. Lived happily ever after.&lt;/p&gt;</description></item><item><title>Strict mode in TypeScript || help your compiler help you</title><link>https://faillearnrepeat.net/blog/strict-mode-in-typescript-or-help-your-compiler-help-you/</link><pubDate>Wed, 28 Jul 2021 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/strict-mode-in-typescript-or-help-your-compiler-help-you/</guid><description>&lt;p&gt;Recently, at Hazelcast we have migrated our Management Center to TypeScript. Not just TypeScript, but the strictest TypeScript there is. If you are interested in why we decided to enable all the strict flags and benefits they provide, welcome to this post.&lt;/p&gt;
&lt;h2 id="prelude"&gt;Prelude&lt;/h2&gt;
&lt;p&gt;50k lines of JavaScript code of a React app. A small team of 2, later 3. 166 bugs filed from 2018-04-24 to 2019-04-23. On average, we produced 9.66 bugs per month.
As developers, we are naturally lazy. Well, maybe, not truly lazy, rather highly unmotivated to do trivial repetitive work. Like fixing a color of a button or another simple, yet annoying bug. So what is the ultimate solution?
Option 1 - never-dying classics. One of us works on state-of-the-art AI for the next couple of decades. Another one puts everything they have into physics and creates a time travel machine over, roughly, the same amount of time. The last one goes above and beyond to prove that our efforts are worth it to the management for the next 30 years or so. In the end, we pack that coolest AI on a flash drive, jump into the time travel machine, go back to the present time, and make the AI do the dirty work of bug fixing for us. While this plan is almost spotless, we have faced one major problem - nobody wanted to be the last guy that deals with the management. So we had to find a different way.
Option 2 - create fewer bugs. &amp;ldquo;What&amp;rdquo; here is simple. The problem is with &amp;ldquo;how&amp;rdquo;. So how?
The holy grail of robust enterprise-grade frontend - TypeScript!&lt;/p&gt;</description></item><item><title>Immigration in IT - Choosing your new home objectively</title><link>https://faillearnrepeat.net/blog/immigration-with-numbers/</link><pubDate>Mon, 26 Oct 2020 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/immigration-with-numbers/</guid><description>&lt;p&gt;So, you have decided to move your ass someplace else, seeking a better life. The whole world is at your feet, but &amp;ldquo;the whole world&amp;rdquo; is not a specific place where you can be. You have to choose, if not a city, at least a country. Nowadays, there are plenty of places where your career can skyrocket, and you can have a great quality of life. Of course, it depends on your definition of the &amp;ldquo;quality of life&amp;rdquo;. In this article, we will try to set subjective factors that drive your decision aside. We will look at the numbers in different areas to rate and, later on, filter our potential relocation prospects for the next X years.&lt;/p&gt;</description></item><item><title>How to display a gazillion of metrics and keep your sanity</title><link>https://faillearnrepeat.net/blog/how-to-display-a-gazillion-of-metrics-and-keep-your-sanity/</link><pubDate>Wed, 26 Aug 2020 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/how-to-display-a-gazillion-of-metrics-and-keep-your-sanity/</guid><description>&lt;p&gt;Large scale equals distributed. Distributed equals inevitable complexity. Complexity at runtime equals extensive monitoring. At Hazelcast, doing distributed systems well is our bread and butter. It means we have no choice but to be huge fans of collecting all kinds of metrics to stay on guard of the data our users trust us with. &lt;br&gt;
In Management Center &lt;code&gt;4.2020.08&lt;/code&gt;, we drastically changed the model of how we transfer the metric data from the cluster members to the Management Center, how we store it, and how we display it. In this post, we are going to talk about the latter bit of the triad. &lt;br&gt;
We will discuss what to do when you want to display all the data at once, but your users have a limited number of monitors and only one pair of eyes. We will speculate about what users actually want to see when they look at a chart of a monitoring web app. We will go over different approaches to filter the data, and how an average, a median, and a definite integral play their key roles.&lt;/p&gt;</description></item><item><title>React - Lifting state up is killing your app</title><link>https://faillearnrepeat.net/blog/react-lifting-state-up-is-killing-your-app/</link><pubDate>Sat, 07 Sep 2019 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/react-lifting-state-up-is-killing-your-app/</guid><description>&lt;p&gt;Have you heard about &amp;ldquo;lifting state up&amp;rdquo;? I guess you have and that&amp;rsquo;s the exact reason why you&amp;rsquo;re here. How could it be possible that &lt;a href="https://reactjs.org/docs/lifting-state-up.html"&gt;one of the 12 main concepts listed in React official documentation&lt;/a&gt; might lead to poor performance? Within this article, we&amp;rsquo;ll consider a situation when it&amp;rsquo;s indeed the case.&lt;/p&gt;
&lt;h2 id="step-1-lift-it-up"&gt;Step 1: Lift it up&lt;/h2&gt;
&lt;p&gt;I suggest you to create a simple game of tic-tac-toe. For the game we&amp;rsquo;ll need:&lt;/p&gt;</description></item><item><title>node-config made type-safe</title><link>https://faillearnrepeat.net/blog/node-config-made-type-safe/</link><pubDate>Fri, 12 Apr 2019 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/node-config-made-type-safe/</guid><description>&lt;p&gt;&lt;a href="https://github.com/lorenwest/node-config"&gt;node-config&lt;/a&gt; has been serving the Node.js community as pretty much the default config solution for many years. Its simplistic, yet powerful design helped it to spread like a virus across multiple JS libraries. Yet those very design choices don&amp;rsquo;t always play nice with new strictly-typed kids on the block. Like TypeScript. How could we keep using our favorite config tool and stay on the type-safe side of things?&lt;/p&gt;
&lt;h2 id="step-1-make-an-interface-for-your-config"&gt;Step 1: Make an interface for your config&lt;/h2&gt;
&lt;p&gt;Supposedly, you have a &lt;code&gt;config&lt;/code&gt; folder somewhere in your project, which in the most simple case has this structure:&lt;/p&gt;</description></item><item><title>NodeJS logging made easy</title><link>https://faillearnrepeat.net/blog/nodejs-logging-made-easy/</link><pubDate>Sun, 07 Apr 2019 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/nodejs-logging-made-easy/</guid><description>&lt;p&gt;How many times did you write &lt;code&gt;logger.info('ServiceName.methodName.')&lt;/code&gt; and &lt;code&gt;logger.info('ServiceName.methodName -&amp;gt; done.')&lt;/code&gt; for each and every method of your service you wanted to log? Would you like it to be automated and has the same constant signature across your whole app? If that&amp;rsquo;s so, we&amp;rsquo;re very much alike, we have suffered the same pain too many times, and now we could finally try to resolve it. Together. Ladies and gentlemen, let me introduce&amp;hellip; &lt;a href="https://github.com/fxlrnrpt/class-logger"&gt;class-logger&lt;/a&gt;!&lt;/p&gt;</description></item><item><title>NodeJS logging made right</title><link>https://faillearnrepeat.net/blog/nodejs-logging-made-right/</link><pubDate>Tue, 26 Feb 2019 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/nodejs-logging-made-right/</guid><description>&lt;p&gt;What&amp;rsquo;s nagging you the most when you think about logging in NodeJS? If you ask me I&amp;rsquo;m gonna say lack of of industry standards for creating trace IDs. Within this article we&amp;rsquo;ll overview how we can create these trace IDs (meaning we&amp;rsquo;re going to briefly examine how continuation local storage a.k.a &lt;a href="https://github.com/jeff-lewis/cls-hooked"&gt;CLS&lt;/a&gt; works) and dig deep into how we can utilize &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy"&gt;Proxy&lt;/a&gt; to make it work with ANY logger.&lt;/p&gt;
&lt;h2 id="why-is-it-even-a-problem-to-have-a-trace-id-for-each-request-in-nodejs"&gt;Why is it even a problem to have a trace ID for each request in NodeJS?&lt;/h2&gt;
&lt;p&gt;Well, on platforms that use multi-threading and spawn a new thread for each request. There&amp;rsquo;s a thing called &lt;a href="https://en.wikipedia.org/wiki/Thread-local_storage"&gt;thread-local storage a.k.a. TLS&lt;/a&gt;, which allows keeping any arbitrary data available to anything within a thread. If you have a native API to do that it&amp;rsquo;s pretty trivial to generate a random ID for each request, put it in TLS and use it in your controller or service later. So what&amp;rsquo;s the deal with NodeJS?
As you know, NodeJS is a single-threaded (not really true anymore as we now have workers, but that doesn&amp;rsquo;t change the big picture) platform, which makes TLS obsolete. Instead of operating different threads NodeJS runs different callbacks within the same thread (there&amp;rsquo;s a &lt;a href="https://jsblog.insiderattack.net/event-loop-and-the-big-picture-nodejs-event-loop-part-1-1cb67a182810"&gt;great series of articles&lt;/a&gt; on event loop in NodeJS if you&amp;rsquo;re interested) and NodeJS provides us with a way to uniquely identify these callbacks and trace their relations with each other.&lt;/p&gt;</description></item><item><title>Reducer organization - taking a step further</title><link>https://faillearnrepeat.net/blog/reducer-organization-taking-a-step-further/</link><pubDate>Sun, 10 Feb 2019 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/reducer-organization-taking-a-step-further/</guid><description>&lt;h2 id="what-are-we-gonna-cover-here"&gt;What are we gonna cover here?&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;re going to overview evolution of reducers in my Redux/NGRX apps that took place over the last two years. Starting from vanilla &lt;code&gt;switch-case&lt;/code&gt;, going to selecting a reducer from an object by key, finally settling with class-based reducers. We&amp;rsquo;re not going to talk only about how, but also about why.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you&amp;rsquo;re interested in working around too much boilerplate in Redux / NGRX you might want to check &lt;a href="https://blog.goncharov.page/yet-another-guide-to-reduce-boilerplate-in-your-redux-ngrx-app"&gt;this article&lt;/a&gt; out.&lt;/p&gt;</description></item><item><title>Yet another guide to reduce boilerplate in your Redux (NGRX) app</title><link>https://faillearnrepeat.net/blog/yet-another-guide-to-reduce-boilerplate-in-your-redux-ngrx-app/</link><pubDate>Fri, 04 Jan 2019 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/yet-another-guide-to-reduce-boilerplate-in-your-redux-ngrx-app/</guid><description>&lt;h2 id="what-are-we-gonna-cover-here"&gt;What are we gonna cover here?&lt;/h2&gt;
&lt;p&gt;Several ways/tips/tricks/ancient black magic rituals to reduce boilerplate in our overwhelmed-with-boilerplate Redux (and NGRX!) apps I came up with over the years of first-hand production experience.&lt;/p&gt;
&lt;p&gt;Let me be honest with you, guys. I wanted to speak just about my new micro-library &lt;a href="https://github.com/fxlrnrpt/flux-action-class"&gt;flux-action-class&lt;/a&gt; at first, but it seems like everybody&amp;rsquo;s been complaining how tech blogs more and more look like Twitter, how everyone wants some meaningful long reading and etc. So I thought: &amp;ldquo;What the heck? I got some experience and best practices of my own which I spilled some sweat and blood over. Maybe, it could help some people out there. Maybe, people out there could help me to improve some of it.&amp;rdquo;&lt;/p&gt;</description></item><item><title>Edge hates your attributes</title><link>https://faillearnrepeat.net/blog/edge-hates-your-attributes/</link><pubDate>Thu, 17 Aug 2017 00:00:00 +0000</pubDate><guid>https://faillearnrepeat.net/blog/edge-hates-your-attributes/</guid><description>&lt;p&gt;A tale of how we thoughtlessly used a boilerplate with a whole arsenal of dependencies for a project, which nobody used in the end, how it haunted us after, when Edge support was requested, and how we heroically resolved what we had broken before. Wait, it&amp;rsquo;s way too long. A tale of how all browsers are attributophobes, with a select few standing out.&lt;/p&gt;
&lt;h3 id="a-little-history-first"&gt;A little history first&lt;/h3&gt;
&lt;p&gt;A colleague of mine once approached me with a quite fascinating quest: &lt;a href="http://c3js.org/"&gt;C3&lt;/a&gt; (a library for drawing charts) demo became almost unresponsive on Edge when we copied it into our AngularJS app. We got kind of afraid that, if our app was unresponsive, then our customer would also be unresponsive to our payment requests. First thought - let&amp;rsquo;s check-in other browsers. Chrome and Firefox had no doubt the app was nearly perfect performance-wise. Alright, it&amp;rsquo;s gotta be a dependency issue then. We started deleting dependencies from angular.module() one by one. Even when we were passing literally nothing the performance issue still stood. The next logical step - use a performance tracker incorporated into dev tools. Unfortunately, we looked in the wrong direction, analyzing each and every JS function over and over again. As a last resort option, we explored our CSS render time. It was huge! Digging deeper. We were instantly amazed by the size of the compiled and minified CSS file even though we deleted all user styles. It turned out we had &lt;a href="https://github.com/fxlrnrpt/flex-attr"&gt;flex-attr&lt;/a&gt; library as a dependency, which (what you think?) nobody used on this project! We inherited it from our corporate internal boilerplate.&lt;/p&gt;</description></item></channel></rss>