Последние посты

Ayub Begimkulov - уроки по JS
6 сент. 2025 г., 09:28изменён
Последние несколько месяцев работаю над проектом, где в качестве стилизации используется Tailwind. И момент, который мне не особо нравился — это то, как базовые стили компонента переопределяются через important.function Base({ className }: { className: string }) { return <div className={clsx("px-4 rounded-full", className)}>...</div>; }function Parent() { // !rounded-xl перебивает rounded-full из базового компонента // используя !important return <Base className="!rounded-xl" />; }А, ну и для тех, кто использует Tailwind v4+ ! модификатор добавляется в конце класса — rounded-xl!.Так вот, недавно открыл для себя более удобный способ задать приоритет классу через &.function Parent() { return <Base className="[&&]:rounded-xl" />; }
Ayub Begimkulov - уроки по JS
14 мар. 2025 г., 13:27
Недавно для себя открыл утилиту open в терминале мака (из того, что я понял, работает только на маке, в linux есть xdg-open), которая позволяет открыть файл используя дефолтную для него программу (тоже самое что и двойной клик по файлу в file explorer).open ./index.html # открывает файл в дефолтном браузере open http://google.com # открывает url в дефолтном браузере open document.pdf # открывает документ в дефолтное приложении для pdfВроде мелочь, но бывает очень полезно. А то раньше часто приходилось отдельно открывать finder искать нужную директорию через CMD + Shift + G и руками открывать файл)
Ayub Begimkulov - уроки по JS
12 мар. 2025 г., 13:05изменён
Вчера вышла новость о том, что TS начали переписывать на Go. В планах к концу 2025 получить уже полностью рабочую версию с поддержкой всех фич.Новость не может не радовать. Я думаю все, кто работали над кодовой базой с 400к+ строк кода знают, что type checking может работать не так быстро, как хотелось бы.И если для процесса сборки это еще не настолько критично, так как там обычно используется babel или esbuild, которые игнорируют типы. А тайпчек делается в параллель или вообще отдельной задачей. То для перформанса в редакторе даже 1-2 секунды могут быть очень важны.На текущий момент бенчмарки уже показывают улучшение перформанса в 10 раз. Понятное дело, что фичи пока не все поддержаны и в будущем эти цифры могут чуть поменяться. Но разница точно будет заметна)https://devblogs.microsoft.com/typescript/typescript-native-port/P.S. Также в комменты приложил ссылку на интервью сMicrosoft NewsA 10x Faster TypeScriptEmbarking on a native port of the existing TypeScript compiler and toolset to achieve a 10x performance speed-up.
Ayub Begimkulov - уроки по JS
10 мар. 2025 г., 12:11изменён
Часто получаю вопросы о том, что делать если нужно тестировать локальный фронт (на localhost) с API, которая находится в testing/staging/preprod/prod (или любая другая среда), где строго прописаны правила CORS и кук.С CORS обычно проблем не бывает, вопросы с собесов уже давно всех научили тому, что это фича чисто браузерная, и при запросе через прокси-сервер все будет нормально.Однако когда дело доходит до кук, которые выставляются бекендом, у всех почему-то возникают проблемы. Хотя никто нам не запрещает делать то же самое. Куки ведь точно также выставляются бекендом и отправляются туда с помощью хедеров Set-Cookie / Cookie.Давайте сначала разберемся в том, в каких случаях сервер, развернутый на другом хосте не может выставлять куки:1. Safari и Firefox вне зависимости от ситуации будут блочить куки с полностью разных доменов без общего "родителя". Например, front.asdf.com =>
Ayub Begimkulov - уроки по JS
17 февр. 2025 г., 12:42
Для тех, кто еще не видел, Create React App стал deprecated. Если кто-то до сих пор его использует — то пора остановиться)https://react.dev/blog/2025/02/14/sunsetting-create-react-appreact.devSunsetting Create React App – ReactThe library for web and native user interfaces
Ayub Begimkulov - уроки по JS
8 февр. 2025 г., 06:39
Начал писать посты на канал, пошел стабильный рост подписчиков.Рост правда отрицательный)))


Ayub Begimkulov - уроки по JS
5 февр. 2025 г., 10:49изменён
Так как все встроенные конструкторы (Array, Date, Function) и кастомные классы наследуются от Object, то их самих по себе отчистить нельзя. Придется и по цепочке вверх идти. Значит единственный вариант - это Object.Однако у объекта тоже есть методы (toString, hasOwnProperty и тд), которые могут использоваться где-то в коде. Поэтому безопасно подчистить их не получится.И тут как раз и приходит iframe, который внутри себя имеет отдельную среду со своим window, document и тд. Так как мы создаем iframe на той же странице, у нас есть доступ к его "кишкам" и мы можем спокойно доставать любые глобальные объекты из его window.Выходит, что у нас появляется доступ к объекту Object из другой среды, в которой он точно использоваться не будет. Поэтому мы можем спокойно подчистить его прототип и использовать в качестве объекта с прототипом null.Не думаю, что на собесе стоит писать такое
Ayub Begimkulov - уроки по JS
5 февр. 2025 г., 10:49
Готовил тут сheatsheet для собесов, хотел показать, как делается polyfill для Object.create. Казалось бы, все очевидно, сто раз такое делал)function Empty() {} function objectCreate(proto) { Empty.prototype = proto; const result = new Empty(); Empty.prototype = null; return result; }Придирчивые скажут, что есть еще второй аргумент propertiesObject который описывает, какие свойства надо создать в самом объекте и какой у них будет property descriptor (работает аналогично Object.defineProperties).Но, обычно им никто и не пользуется. Да и думаю большая часть тех, кто задает подобные вопросы на собесе вряд ли сами знают об этом аргументе. Поэтому данный момент можно упустить.let test = objectCreate({a: 10});console.log(test.a); // 10 console.log('a' in test); // true console.log(test.hasOwnProperty('a')); // false console.log(Object.getPrototypeOf(test)); // {a: 10}
Ayub Begimkulov - уроки по JS
25 янв. 2025 г., 07:15изменён
Вчера на стриме столкнулся с проблемой, что вместо нодовоской типизации fetch’а подхватывалась браузерная. И из-за этого были TS ошибки при попытке записать стрим в файл.const response = await fetch(...)// ...const fileStream = fs.createFileStream(fileName);stream.Readable.fromWeb(response.body).pipe(fileStream); // ^^^^^^^^^^^^^ // Argument of type 'ReadableStream<Uint8Array<ArrayBufferLike>>' // is not assignable to parameter of type 'ReadableStream<any>'.Ошибка вылетает потому, что тип response.body в браузере имеет другой тип, нежели в node.js. Вчера решил особо с этим не сидеть, чтобы не тянуть время, поэтому просто поставил @ts-expect-error.Но сегодня утром задумался, а откуда вообще берутся типы браузерные? В tsconfig стоит "types": ["node"], а свойство lib вообще не задекларировано.Сначала грешил на vscode, но и при запуске через cli появлялась ошибка. Так вот,
Ayub Begimkulov - уроки по JS
24 янв. 2025 г., 12:46
Друзья, кто может подключайтесь на стрим в 17:30 по мск (GMT+3). Продолжим разрабатывать приложение для замера скорости печати.В прошлый раз закончили с визуалом — реализовали каретку, перенос слов на новую строку и отображение ошибок в пробелах / переносах строк.В данном же стриме хотелось бы доделать следующие фичи: - Скрипт для генерации тестов из репозитория - Сбор статистикиНу и на ваши вопросы в чате тоже буду отвечать.https://www.youtube.com/live/hy1gzM0OdIsYouTube[7][LIVE] Пишем приложение на React для замера скорости печатиВ данном стриме будем писать приложение для замера скорости печати. Донаты: https://www.donationalerts.com/r/ayub_begimkulov Ссылка на Телеграмм канал: https://telegram.me/ayub_begimkulov_coding Код: https://github.com/Ayub-Begimkulov/typing-test Записи…
Ayub Begimkulov - уроки по JS
16 янв. 2025 г., 09:02изменён
[3/3]3. Понял, что только на дисциплине далеко не уедешь.Пару месяцев назад по совету одного из своих друзей решил обратиться к коучу по вопросам развития менторства. И в процессе ответов на интересно поставленные вопросы осознал, что у меня не совсем правильное отношение к дисциплине. И вместо того, чтобы искать реальную проблему я часто скидываю все на то, что надо взять себя в руки и идти дальше.Вопрос в том, что да, дисциплина помогает вместо ютуба и сладостей выбрать работу и нормальное питание, помогает делать что-то, не сразу видя в этом результат. Да и даже если делать то, что вам реально нравится, будут те неприятные 20% работы, которых никак не избежать.Но с другой стороны, если вам 100% времени приходится заставлять себя все делать и работать "из-под палки", то долго ли так можно продержаться? Хорошо подумав, я понял, что ни один такой "рывок воли" больше чем 6
Ayub Begimkulov - уроки по JS
16 янв. 2025 г., 09:02изменён
[2/3]2. Полностью поменялось отношение к работе и отдыху.Дам небольшую предысторию. Где-то последний год было ощущение того, будто спадает эффективность. Работаю также, делаю меньше, тренируюсь менее интенсивно, сплю больше, чувствую себя хуже, желания что-то делать сильно меньше. Питание +/- по бжу сбалансировано, витамины всегда пил. Анализы сдал - там тоже все нормально.И тут как раз в один момент времени мне сразу человека 3-4 сказали о том, что у меня перегруз. Как же так? Не так уж давно я делал сильно больше, спал меньше и чувствовал себя в разы лучше. По началу не хотелось даже брать в счет такую возможность. Но вариантов других особо и не было, поэтому решил полностью дать себе волю и отдыхать сколько захочется).Первые полторы-две недели спал по 11-12 часов. Причем по несколько заходов. Ночью 9-10, днем еще 2-3 часа. Работал, может, где-то 2 часа, в зал тоже не ходил.З
Ayub Begimkulov - уроки по JS
16 янв. 2025 г., 09:01изменён
[1/3]Итоги года и дальнейшие планыОбычно все пишут итоги под конец декабря, но я все откладывал, так как не было красивых цифр и больших достижений... Однако понял, что есть интересные моменты, которыми стоит поделиться. Да и для себя будет полезно закрепить результаты.Если говорить про цифры:- +1195 подписчиков, 148к просмотров на YouTube. Выпустил всего 3 видео и провел 6 стримов. - 19 постов в телеграм, +78 подписчиков.Тут, к сожалению, больше ничего и не добавить) Если не выпускать контент - то и роста понятное дело не будет. В этом плане кстати YouTube приятно удивил, все равно продолжает продвигать некоторые видео.В плане дохода пока все также не смог перебить свой рекорд в найме.Но тем ни менее нет ощущения того, что год прошел зря и я просто потерял время.Если говорить про прогресс, то основной рост, я бы сказал, был в переосмыслении и смене взгляда на многие
Ayub Begimkulov - уроки по JS
6 янв. 2025 г., 12:34
Давайте продолжим сегодня разрабатывать наше приложение для замера скорости печати. Кто может подключайтесь на стрим в 15:30 по мск. В прошлый раз мы полностью доделали подсчет слов в коде и унифицировали логику между обычным текстом и кодом. На данном
Ayub Begimkulov - уроки по JS
6 янв. 2025 г., 11:20изменён
Давайте продолжим сегодня разрабатывать наше приложение для замера скорости печати. Кто может подключайтесь на стрим в 15:30 по мск.В прошлый раз мы полностью доделали подсчет слов в коде и унифицировали логику между обычным текстом и кодом.На данном стриме планирую: - До конца разобраться с отображением текста. Сделать правильный перенос слов на маленьких экранах. - Добавить каретку. - Попробовать сделать скрипт, который бы парсил репозиторий и на его основе создавал заготовленные примеры кода для тестов.Ну и как всегда буду отвечать на ваши вопросы в чате)https://www.youtube.com/live/Qve3DgHnIYkYouTube[6][LIVE] Пишем приложение на React для замера скорости печатиВ данном стриме будем писать приложение для замера скорости печати. Донаты: https://www.donationalerts.com/r/ayub_begimkulov Ссылка на Телеграмм канал: https://telegram.me/ayub_begimkulov_coding Код: https://github.com/Ayub-Begimkulov/typing-test Записи…
Ayub Begimkulov - уроки по JS
25 дек. 2024 г., 15:49изменён
Пару месяцев назад в очередной раз столкнулся с проблемой при попытке использовать ts-node (выдавал ERR_UNKNOWN_FILE_EXTENSION, хотя импортировал только TS файлы).Точные детали ошибки не помню, но проблема была в том, что ts-node с не мог нормально подгрузить ESM модули при использовании ноды версии 20+. При откате на 18ю версию все работало.В процессе поиска решения проблемы самым нормальным вариантом оказалось просто съехать с ts-node на tsx (хотя возможно уже проблему решили).Но хочу сказать, что инструмент приятно удивил. За время работы с ним вообще никаких проблем пока не было. Работает быстро. Полностью имитирует интерфейс команды node + имеет watch режим (так что от nodemon тоже можно отказываться).Из минусов, нет проверки типов. Связанно с тем, что под капотом используется esbuild для компиляции кода (поэтому и проблем с esm/cjs модулями нет). Но для меня это плюс, так
Ayub Begimkulov - уроки по JS
21 дек. 2024 г., 12:28
Планирую сегодня в 15:30 по мск провести стрим, где мы продолжим разрабатывать наш проект для замера скорости печати. В прошлый раз мы разобрались с тем, каким образом можно считать количество слов в коде через AST. И подготовили функцию, которая отдает
Ayub Begimkulov - уроки по JS
21 дек. 2024 г., 07:44
Планирую сегодня в 15:30 по мск провести стрим, где мы продолжим разрабатывать наш проект для замера скорости печати.В прошлый раз мы разобрались с тем, каким образом можно считать количество слов в коде через AST. И подготовили функцию, которая отдает все словесные токены в нашем коде.На данном стриме планирую: - Доделать подсчет слов для кода по новой схеме с AST - Добавить каретку и прочие мелочи для удобства - Попробовать сделать скрипт, который бы парсил репозиторий и на его основе создавал заготовленные примеры кода для тестовУ кого есть время — заходите. Буду отвечать на все вопросы в чате)https://www.youtube.com/live/y8keVDARJ1MYouTube[5][LIVE] Пишем приложение на React для замера скорости печатиВ данном стриме будем писать приложение для замера скорости печати. Донаты: https://www.donationalerts.com/r/ayub_begimkulov Ссылка на Телеграмм канал: https://telegram.me/ayub_begimkulov_coding Код: https://github.com/Ayub-Begimkulov/typing-test Записи…
Ayub Begimkulov - уроки по JS
14 дек. 2024 г., 12:28
Друзья, хотел сообщить о том, что планирую сегодня в 15:30 по мск провести стрим. Продолжим писать проект для замера скорости печати. В прошлый раз провели небольшой рефакторинг и добавили окно настроек. Сегодня уже займемся полноценной поддержкой кода.
Ayub Begimkulov - уроки по JS
14 дек. 2024 г., 07:20
Друзья, хотел сообщить о том, что планирую сегодня в 15:30 по мск провести стрим. Продолжим писать проект для замера скорости печати.В прошлый раз провели небольшой рефакторинг и добавили окно настроек. Сегодня уже займемся полноценной поддержкой кода.У кого есть время — подключайтесь. Отвечу на все ваши вопросы в чате)https://www.youtube.com/live/muZIxdTIYFMYouTube[4][LIVE] Пишем приложение на React для замера скорости печатиВ данном стриме будем писать приложение для замера скорости печати. Донаты: https://www.donationalerts.com/r/ayub_begimkulov Ссылка на Телеграмм канал: https://telegram.me/ayub_begimkulov_coding Код: https://github.com/Ayub-Begimkulov/typing-test Записи…
