ru
Feedback
cherkashin.dev

cherkashin.dev

Открыть в Telegram

Александр Черкашин. Бойскаут, Борец с перфекционизмом. Для связи 👉 @cherkalexander Фулстек разработчик в decisions.com. Работаю со стеком TypeScript, React, C# Пишу о программировании и не только. https://cherkashin.dev

Больше
2 107
Подписчики
-124 часа
-17 дней
-930 день
Архив постов
Я заметил, что код руками пишу всё меньше — в основном пишу промпты агентам. И если код за меня печатает Codex, то промпты пр
Я заметил, что код руками пишу всё меньше — в основном пишу промпты агентам. И если код за меня печатает Codex, то промпты приходится набирать самому. Длинные. Много. Каждый день. А говорим мы в три раза быстрее, чем печатаем. В общем, попробовал Диктуй — российский голосовой ввод для Mac и Windows. Зажимаешь горячую клавишу, говоришь — текст появляется там, где стоит курсор. В Cursor, в терминале, в Телеге — где угодно. Что понравилось: — Заточен под русский, но «сделай рефакторинг useEffect в компоненте Header» напечатает как надо. Для редких слов есть словарь. — Трансформация: выделил текст, сказал «переведи на английский» или «сделай короче» — текст заменился. — Оплата российскими картами, в 2–3 раза дешевле аналогов. 30 минут в месяц — бесплатно навсегда, без карты. 🎁 По промокоду DEV — месяц подписки в подарок: регистрируешься на diktuy.ru, вводишь промокод — пользуешься. 👍 — если уже диктуете промпты голосом 👀 — если всё ещё печатаете #ai #диктуй

А вы замечали дискриминацию людей в ИТ? Сколько раз вы говорили "нам нужна документация" — а все вокруг отвечали "нафиг надо,
А вы замечали дискриминацию людей в ИТ? Сколько раз вы говорили "нам нужна документация" — а все вокруг отвечали "нафиг надо, таски делай". Сколько раз новички думали "где моя инструкция для онбординга", а все вокруг думали "нафиг, сам разберётся". Когда говорили "это нужно покрыть тестами", все отвечали "ну вот и покрой тестами, а пока вот эту фичу быстрее в прод кати". А как только что-то мешает ИИ-агентам: - мы им и CLAUDE.md напишем - и документацию к проекту добавим, чтобы наш дорогой агент знал, почему сделано так, а не иначе - и соломку в виде тестов насыпем обязательно, чтобы он не ошибся. Что за двойные стандарты? За что бездушной машине такие привилегии? Замечали такое? - 👍 — Было дело - 🤔 — Как-то нет

Судя по прошлому посту, многие работают с мобильной версткой, поэтому вам должно пригодиться расширение Mobile View. В общем,
Судя по прошлому посту, многие работают с мобильной версткой, поэтому вам должно пригодиться расширение Mobile View. В общем, расширение накладывает рамку мобильного устройства прямо поверх вашего сайта, и вы можете посмотреть, как ваше приложение будет выглядеть на конкретной версии телефона. При этом сайт и мобильная версия видны на экране одновременно. Также можно выбрать конкретную модель телефона и вертикальную/горизонтальную ориентацию. Понятно, что девтулзы частично решают проблему, но есть пара «но»: - они не дают посмотреть, как именно будет выглядеть сайт на телефоне с рамкой - вы можете одновременно видеть мобильную и десктопную версии сайта Если вам интересно, как здесь используется Shadow DOM или как реализована запись экрана, то обязательно почитайте статью на Хабре. #frontend #fridayreading

Товарищи, подскажите, есть ли у кого опыт использования Code Connect в Figma? Стоит заморочиться и настроить? Для тех, кто не знает: насколько я понимаю, мы можем настроить связь между компонентами в Figma и в коде. Тогда разработчику будет понятно, какой компонент использовать при реализации. Но кто сейчас волнуется о разработчиках? Это поможет агентам при реализации дизайна. Сейчас, если вы попросите агента реализовать дизайн, сначала для стилей он будет использовать Tailwind, а затем уже как-то начнёт использовать ваши компоненты. Code Connect должен помочь сэкономить токены: агент сразу будет использовать именно ваши компоненты. Для этого нужно настроить маппинг между компонентами в Figma и в коде. Вот здесь 5-минутное объяснение 👍 — использую 🤷‍♂️ — пробовал, не зашло 👎 — не использую #ai

За двумя зайцами 🐇🐇 погонишься — ни одного не поймаешь Умные люди говорят, что чтобы достичь цели, нужно сфокусироваться на самом важном и долбить в одну точку, пока не получится. Но в текущем быстро меняющемся мире, когда все вокруг рассказывают, какие они успешные, хочется хвататься за всё сразу: - тут кажется, что все уже настроили себе опенкло и невероятно оптимизировали рутину - все пилят пет-проекты с помощью ИИ, ведь теперь это так легко - там чувак набрал 1000 новых подписчиков, я тоже так хочу Но со временем всё начинает валиться из рук. Да и за всей этой суетой можно упустить то, что действительно важно. За последние несколько лет, мне кажется, я научился делать одну важную вещь: если чувствую, что у меня и так много дел, и при этом у меня загораются глаза новой идеей — я не хватаюсь за неё, если понимаю, что в ближайшем будущем у меня не будет времени её закончить. Я уже рассказывал об этом здесь. А чтобы избавиться от назойливых мыслей, я просто создаю заметки в Obsidian. Но всё равно бывает так, что обязательства накапливаются, появляется возможность, которую не хочется упустить. А если сейчас упустишь возможность — новая не подвернётся и будет поздно (не факт). Батарейка начинает садиться, и именно в этот момент как-то легко становится приоритизировать. Достаточно спросить себя: - А что такого случится, если я этого не сделаю? - А действительно ли мне это нужно? И чаще всего, ответ будет "ничего не случится", "не очень мне это и нужно". А ещё важно понять, что не всё нужно делать идеально. Где-то результат на троечку тоже подойдёт. Давно понял, что незаметно в очередной раз схватился за всё одновременно — и как-то стало тяжеловато. Сейчас поставил на паузу всё, что могу, от чего-то отказался или перенёс на потом. А ещё — довел до конца всё что хотел. Надеюсь, через месяц основная стадия ремонта закончится, получится вернуться к себе в квартиру — и станет немного полегче. Расскажите, а вы распыляетесь или фокусируетесь на важном? - 😅 — распыляюсь и хватаюсь за всё - ❤️ — фокусируюсь на важном - 😎 — просто живу свою лучшую жизнь #about_me

Я, так же, как и разработчики VK решил обновить свой ноут, но мне, в отличие от них ничего не удалили. Решил перейти со своег
Я, так же, как и разработчики VK решил обновить свой ноут, но мне, в отличие от них ничего не удалили. Решил перейти со своего MacBook M1 Pro 32 ГБ 14' на MacBook M5 Pro 48 ГБ 16'. Хотел взять также 14-дюймовый, но он тысяч на 30 дороже, не знаю почему, может спрос на него большой. Но, если не таскать ноут постоянно с собой, то работать на 16-дюймовом, конечно, намного удобнее. Единственный минус — теперь придётся купить подставку под монитор. По производительности. У нас на работе свой собственный бенчмарк производительности. За сколько проходит полный билд кодовой базы: - M1 Pro ≈ 10:30 мин - M5 Pro ≈ 7:20 мин В общем, маки стали ещё шустрее. Миграция со старого мака проходит почти так же бесшовно как и со старого айфона. Запускаете Migration Assistant и через полтора часа, у вас новый ноут, но совершенно вся начинка, включая горячие клавиши, перенесена со старого. Пока искал, где купить — прошустрил все магазины, маркетплейсы и запустил кучу исследований на ChatGPT. В итоге, опять купил в aj.ru, дешевле варианта не нашел — 256 000. Гравировку сделали, адаптер положили, а ещё по ключевой фразе "это итоговая цена или небольшой торг уместен?" сделали скидку в 3 тысячи. Мне интересно, а кто чем пользуется: - 🔥 — у меня мак - 👍 — у меня винда - 👨‍💻 — настоящие программисты сидят на линуксе

Замечательно, что не нужно ездить в налоговую для перевыпуска цифровой подписи. Правда в инструкции по установке и устранению
Замечательно, что не нужно ездить в налоговую для перевыпуска цифровой подписи. Правда в инструкции по установке и устранению проблем, для её установки — 68 страниц, иногда проще и съездить, если не удаётся решить проблему 🤣 Возможно, кому-то сохраню несколько часов жизни, которые вы бы потратили на посещение налоговой. Если у вас высвечивается ошибка "Insert carrier ... to open container ..." при попытке входа в личный кабинет с помощью цифровой подписи: 1. Установите последнюю версию Яндекс Браузера 2. Запустите его через консоль /Applications/Yandex.app/Contents/MacOS/Yandex --no-sandbox (источник) 3. Всё должно сработать У Точки есть отличная инструкция по настройке цифровой подписи. Расскажите, а как вы работаете? - 😎 — Я ИП - 🧑‍💻 — Я просто сотрудник - 🔥 — временно безработный

Вчера нужно было нарисовать небольшой экран, чтобы понять чего хочет бизнес. Открыл фигму, а там появились агенты в бете. В о
+1
Вчера нужно было нарисовать небольшой экран, чтобы понять чего хочет бизнес. Открыл фигму, а там появились агенты в бете. В общем, получилось худо бедно, что-то накидать без дизайнера. Сейчас был на подлодке, там показывали Pencil. Можно подключить Codex или Claude по MCP и попросить нарисовать дизайн. Во время доклада запустил, попросил сгенирировать дизайн систему для пет проекта. Выглядит неплохо. Раньше кнопки красили, а скоро будем и дизайнить их 😢 #ai

Я не очень часто имею дело с мобильной вёрсткой, в основном всё время занимаюсь разработкой десктопных приложений. Но на своё
+2
Я не очень часто имею дело с мобильной вёрсткой, в основном всё время занимаюсь разработкой десктопных приложений. Но на своём пет-проекте мне понадобилось немного подебажить мобильную версию. Спросил Codex, и он рассказал мне, как сайт открытый на реальном айфоне, можно нормально смотреть через Web Inspector в Safari. На Android, насколько знаю, есть что-то похожее. Делается так: - на iPhone включить: Settings → Safari → Advanced → Web Inspector - подключить iPhone к Mac по кабелю - на Mac открыть Safari и включить меню разработчика: Safari → Settings → Advanced → Show features for web developers - открыть сайт на iPhone в Safari - на Mac выбрать: Develop → [твой iPhone] → [страница] После этого можно смотреть console, network и elements как в обычных DevTools. А ещё можно включить iPhone Mirroring. Тогда экран телефона видно прямо на ноутбуке, и не нужно постоянно перекладывать взгляд с мака на айфон и обратно. Ставьте: 👍 - если часто занимаетесь мобильной вёрсткой 🔥 - если в основном работаете с десктопными приложениями 🤷 - если вы не фронтендер #frontend

А вы заметили, что в консоли хрома появился ИИ? Я сперва думал, как это применить, а потом мне понадобилось очистить все браузерные данные для одного Progressive Web App. - Написал коммент // generate code to remove all local data stored in browser for this app прямо в консоли хрома - Нажал cmd + i - Хром сгенирировал код - Нажал tab - Все готово #ai

🎉 Результаты розыгрыша: 🏆 Победитель: 1. RB (@distribate) ✔️Проверить результаты

До завтра разыгрываем 🎟 бесплатный билет на Podlodka AI Crew. Как обычны, по одному докладу утром и вечером всю неделю 15 — 19 июня. Особенно приходите, если вы ещё не уверовали в AI 😉

Я более-менее регулярно хожу на конференции Подлодки по Реакту, но в эпоху ИИ стараюсь больше разбираться с тем, как правильн
Я более-менее регулярно хожу на конференции Подлодки по Реакту, но в эпоху ИИ стараюсь больше разбираться с тем, как правильно выстроить работу с ИИ-агентами. Слышал, есть ещё ретрограды, которые отрицают использование ИИ-агентов 😅 (Саня привет 👋) Сам я почти все задачи решаю с помощью агентов, поэтому хочется посмотреть, как другие ими пользуются. В этот раз иду на Podlodka AI Crew, которая пройдёт онлайн с 15 по 19 июня 📅. Формат у Подлодки, как обычно, удобный: пять дней живых Zoom-сессий утром и вечером, закрытое комьюнити в Telegram и обсуждения со спикерами. Можно спокойно посещать конфу и не выпадать из работы на целый день. Посмотрел программу, пока хочу посетить: - Жизнь после Spec Driven Development, как не убить качество — трансляция, кстати, будет доступна для всех 10 июня - Дизайн без дизайнеров: генерируем UI с помощью AI - Как эффективно проверять код, сгенерированный AI - Eval Driven Development: как перестать проверять AI на глаз Если вам кажется, что онлайн-конференция — это примерно то же самое, что потом посмотреть записи на YouTube, то нет. На Подлодке можно задавать вопросы спикерам, обсуждать доклады в чате и знакомиться с другими участниками. 🎫 Купить билет можно здесь. А по промокоду cherkashin_dev_ai будет скидка 500р. А теперь давайте перейдём к самой интересной части — розыгрышу 🎁. Запущу его завтра, поэтому включайте уведомления, чтобы не пропустить. Правила простые: если вы подписаны на канал и нажали «участвовать», вы получаете шанс выиграть билет. #ai #conference

Сегодня ровно 9 лет как я не менял работу 🙈 У нас в компании дают дополнительный месяц оплачиваемого отпуска за 10 лет работы 🔥 - если думаешь, дотяну до 10 лет 😱 - если думаешь, сольюсь раньше

Вы же знаете, что в нашем App Store недоступны многие приложения — например, ChatGPT. Поэтому если вы вдруг захотели кодить и
Вы же знаете, что в нашем App Store недоступны многие приложения — например, ChatGPT. Поэтому если вы вдруг захотели кодить из такси в Codex по пути домой (вдруг вы хотите кодить не переставая?!), то ничего у вас не получится. Это я к чему: решил создать себе второй Apple-аккаунт. Арендовал американский номер, включил КВН, но постоянно вылетала ошибка: Your account cannot be created at this time. Я грешил на то, что использовал почту Яндекса. Потом товарищ сказал, что он регистрировал второй аккаунт на российский номер. Я решил попробовать: ввёл свой российский номер, почту Яндекса — и всё сработало. Регион указал канадский. В общем, не нужны никакие виртуальные номера. Вроде как я использовал тот же номер, который уже привязан к другой учётке, так что даже вторая симка не понадобилась. Настолько привык к запретам, что не знал, что так просто ещё можно что-то сделать) Правда, слышал, что зарегистрироваться на российский номер получается не у всех. Так что, возможно, тут как повезёт. Тут описано, как использовать новый Apple ID в App Store, не выходя из основного аккаунта. Через ChatGPT придумал канадский адрес и телефон. Телефон никто не проверяет, по крайней мере на этапе авторизации. 🔥 — если у вас есть зарубежный Apple ID 👍 — если обходитесь российским 🤷‍♂️ — у меня андроид

Давно, я не рекомендовал статьи, а сегодня принес «Иногда лучше делать, а не планировать». Там описывается одна простая мысль: за последние десятилетия реализация проектов погрязла в бесконечных совещаниях и согласованиях. Несколько примеров: - Эмпайр-стейт-билдинг построили за 410 дней: с 22.01.1930 по 01.05.1931. - Космическая программа «Аполлон» — от формулирования задачи 12.09.1962 до высадки на Луну 20.07.1969 — заняла менее 7 лет. В наши дни только получение разрешения на строительство может занять несколько лет или десятилетий. Потом ещё несколько лет уйдёт на документацию, подготовку инфраструктуры и т. д. Например, строительство высокоскоростного поезда между Сан-Франциско и Лос-Анджелесом началось в 2015 году и не окончено до сих пор. Самая классная фраза из статьи: «Время, потраченное на обсуждение пункта, обратно пропорционально рассматриваемой сумме». Это правило называется законом Паркинсона. Думаю, все замечали, как на каком-нибудь митинге чрезмерное внимание уделяется мелочам. Например, можно 20 минут обсуждать название кнопки или порядок полей в форме, хотя всем примерно понятно, что надо сделать. Каждый считает, что важно сделать именно так, как хочет он. При этом сложные моменты, где нужно приложить усилие и реально подумать, люди часто пропускают. То же самое часто происходит и во время код-ревью. Все мастера указать на неправильное именование переменной, но чтобы разобраться в архитектуре, многие не хотят тратить силы. Это ещё называется bike-shed effect или «эффект велосипедного сарая». Год назад у нас произошла большая реструктуризация, и появился скрам со своими планированиями и грумингами. На груминге можно долго обсуждать, как лучше что-то сделать, где могут появиться подводные камни, что ещё нужно учесть и прочее. Но я вижу, как все терпеть не могут эти митинги. Все хотят просто сидеть и заниматься своим делом. Для некоторых важных задач, конечно, нужно обсудить подход и понять, как мы будем это решать. Но, кажется, что гораздо важнее полностью понять требования, а что до реализации  — для некритичных задач проще спросить у Клода или Кодекса: «что сломается, если я внесу это изменение?» или «как лучше реализовать это?», а не тратить время всей команды на обсуждение. Да и иногда проще быстро спрототипировать — спасибо тому же Клоду — и спросить у команды: «вот так нормально?», чем снова собирать всех на обсуждение. Раньше что-то переписать могло занять дни, а теперь — часы. Поэтому мне кажется, что это не такая уж плохая идея. Ещё один интересный момент из статьи: В 1944 году ЦРУ выпустило инструкцию по саботажу работы компаний для своих диверсантов. Среди советов: всё прогонять через формальные каналы, чаще делать длинные доклады, спорить о формулировках, поднимать несущественные вопросы и возвращаться к уже принятым решениям. Задача — снижать продуктивность, но выглядеть так, будто ты просто соблюдаешь правила. Иногда кажется, что многие современные менеджеры отлично с этим справляются. Ставьте: - 🔥 — если митинги заколебали - 👍 — если вы везунчик и у вас минимум митингов #fridayreading

Я пару месяцев назад сделал экспорт постов из Телеги в свой блог написанный на Astro, и агент навайбкодил мне такую конструкц
+1
Я пару месяцев назад сделал экспорт постов из Телеги в свой блог написанный на Astro, и агент навайбкодил мне такую конструкцию — for await.
for await (const message of client.iterMessages(entity, { reverse: false })) {
  // ....
}
for await...of — это цикл для перебора асинхронных коллекций. Обычно он используется, когда данные приходят не все сразу, а постепенно: например, из API, базы данных, файла или постраничной загрузки. Сообщения подгружаются постепенно: for await берёт сообщения одно за другим, а когда текущая загруженная порция заканчивается, iterMessages делает следующий запрос в Telegram за новой порцией. Минимальный пример выглядит так:
const delay = (value, ms) =>
  new Promise((resolve) => setTimeout(() => resolve(value), ms));

async function* makeNumbers() {
  yield await delay(1, 1000);
  yield await delay(2, 1000);
  yield await delay(3, 1000);
}

async function run() {
  for await (const number of makeNumbers()) {
    console.log(number);
  }
}

run();
Наиболее простой для понимания пример применения — пагинация. Мы можем инкапсулировать всю работу с получением данных в асинхронном генераторе, и пройтись по коллекции с помощью for await. Реальный пример можно посмотреть здесь или на второй картинке. ⚠️ Важный момент: for await работает последовательно. Он не запускает все итерации параллельно. 👍 — было полезно 👀 — уже знали про for await А выгруженные посты, можно посмотреть 👉 здесь. #javascript

19 июня еду на CPC.Forum — международный форум про перфоманс-маркетинг и рекламные системы. Сейчас почти у всех одна и та же история: реклама дорожает, лиды добываются сложнее, цикл сделки растет, а планы по продажам никто не снижает. На форуме как раз будут разбирать, что с этим делать. Особенно ценно, что в программе: ▪️ 100+ спикеров (Amazon, «Яндекс Реклама», Flowwow, Calltouch, RUTUBE, PREMIER, Skyeng, «Самолёт», Skillbox, GeekBrains, Clickise, «Купер», «Ёбидоёби» и др.); ▪️ Более 4-х залов по разным темам (записи выступлений тоже будут); ▪️ Большая выставка известных компаний (мерч, интерактивы, розыгрыши); ▪️ Организованный нетворкинг; ▪️ Панельная дискуссия по трафику от топ-экспертов рынка; ▪️ Церемония CPC.Awards; ▪️ VIP-afterparty с концертом от суперзвезд! Хедлайнер форума — Ксения Собчак. Лично я очень хочу послушать выступления: - Денис Сметнёв — «Инструменты, которые стали возможны благодаря AI» - Артур Саркисян — «Новая операционная система бизнеса: ИИ, данные и клиентская память» - Алексей Дощинский — «Как расти через контент в 2026 году: площадки, системный постинг, автоматизация, аналитика и ИИ-советы» - Владимир Сургай — «SurgayGPT: ИИ-автоматизация маркетинга TFA.digital» 📅 19 июня, пятница 📍 Москва, Конгресс-центр ЦМТ Надеюсь, увидимся там с вами! Цены скоро станут выше, успевайте приобретать билеты со скидками ❤️

У меня уже давно была идея реализовать проект «Второй Мозг». Я долгое время пользовался Notion, но они редиски, и поэтому я перебрался в Obsidian. И в эпоху ИИ понимаю, что это было самым правильным решением. Так вот, я думал, было бы круто взять свой Obsidian Vault, положить его на VPS, прикрутить к нему телеграм-чат и нейронки. Тогда мой список дел и проектов всегда был бы под рукой. А ещё можно записывать, что готовит жена, и в следующий раз, когда она спросит «что приготовить», быстро спросить ИИ, что было приготовлено за последние 2 недели, и выбрать. 😄 Тут на прошлой неделе сходил на вебинар OpenClaw и понял, что всё уже реализовано... Иногда чувствую себя дедом, когда выходит новый инструмент. Кажется, что все вокруг уже давно со всем разобрались, а я ещё понятия не имею, зачем этот инструмент нужен. Если кратко, OpenClaw — это такой open-source AI-агент, который можно поднять у себя и подключить к своим данным, файлам, сервисам и общаться прямо в Телеге. Получается, это примерно тот самый личный ассистент поверх Obsidian, о котором я и думал. 😅 Благодаря ребятам из Guide DAO получается держать руку на пульсе. Сейчас у ребят появились курсы по: - OpenClaw - Курс по клоуд коду - Курс вайбкодер - Курс по созданию агентов - скоро появится курс по созданию продукта и его монетизации Покупая один курс, вы получаете доступ ко всему. А сейчас по промокоду 🏷 CHERKASHIN действует скидка 15%. В общем, теперь хочу разобраться, где лучше хостить OpenClaw, обязательно ли нужен Docker, какой хостинг подешевле выбрать, как синхронизировать Obsidian Vault на VPS и локально и прочее. Если вы уже со всем этим разобрались, расскажите в комментариях 🙏 Расскажите, а вы пользуетесь OpenClaw? Какие задачи он для вас закрывает? - 🔥 — активно пользуюсь - 👍 — потыкал немного - 👀 — не довелось #ai #obsidian

Часто при генерации кода ИИ использует в JavaScript ключевое слово void. Я, конечно, видел void, но обычно где-то в минифицированном коде. Сам никогда не использовал, если не считать C# 😄, поэтому такое немного мозолит глаза:
void fetchUser();
Зачем он нужен? Оператор void вычисляет переданное выражение и всегда возвращает undefined.
const result = void fetchUser();console.log(result); // undefined
Но в примере с fetchUser смысл обычно другой: так явно показывают, что промис запускается «в фоне», а результат мы специально не ждём.
void fetchUser().catch((error) => {  console.error('Failed to fetch user', error);});
👍 — если знали про void ❤️ — если тоже видели, но не использовали 😱 — если ИИ уже успел нагенерить вам такого в проекте #frontend #javascript