cherkashin.dev – Telegram
cherkashin.dev
2.08K subscribers
188 photos
13 videos
244 links
Александр Черкашин. Бойскаут, Борец с перфекционизмом.

Для связи 👉 @cherkalexander

Фулстек разработчик в decisions.com. Работаю со стеком TypeScript, React, C#

Пишу о программировании и не только.


Блог: https://cherkashin.dev
Download Telegram
Forwarded from artalog (artalar)
codeium.com - отличная альтернатива копайлоту

Использую уже несколько месяцев, всем доволен. Не грузит комп, в отличии от табнайна. Бесплатен(!), в отличии от копайлота. Зарабатывают на enterprise лицензии.

Напомню как нужно пользоваться AI-уточкой. Эта штука НЕ должна писать за вас код. Никогда не спрашивайте у него алгоритмы или какую-то логику с условиями, или сложную асинхронную логику.

Что может копайлот и подобные? Анализировать контекст и повторять его с небольшим изменением. Это тулинг для конфигурируемого бойлерплейта! Тесты нагенерить, паттерн-матчинг (switch-case / насколько if-else / тернарки) расписать.

Я чаще всего пользуюсь однострочными подсказками. Депсы в useEffect проставить, опшены с апишки в компонент Select промапить и т.п.
👍9🔥1
🚮 Трата времени

Мне кажется больше всего времени мы тратим не на какую то рутину, а на следующие 2 вещи:

- начинаем что-то и не доделываем, хотя дело стоящее
- продолжаем делать то, что никому не нужно

Прежде чем за что-то браться — стоит подумать, а стоящее ли дело? Если дело стоящее, то получится ли довести его до конца? Возможно, у вас уже куча незаконченных дел и лучше посвятить свободный вечер именно им, а не пополнять этот список ещё одним незаконченным проектом. Лучше просто записать все мысли о новой идее, но не браться за неё прямо сейчас. В противном случае, вы рискуете просто потратить время и получить ещё одно незаконченное дело, которое будет вас преследовать.

Если взялись за дело и в процессе поняли, что оно лишено всякого смысла — лучше не тратить время впустую. Возможно вы хотите внедрить новую технологию в проект — сперва обсудите это с командой, возможно окажется, что это никому не нужно (а возможно наоборот).

Как-то будучи студентом, я решил реализовать мобильное приложение для онлайн-кабинета студента нашего универа, убил кучу времени и даже реализовал прототип. Затем, поговорив с начальником отдела разработки, понял, что это никому не нужно, а время уже потрачено. Можно было просто сперва обсудить это, сэкономил бы кучу времени.

Если говорить о незаконченных делах, то вот так выглядит мой список проектов в Notion. На многие из них я потратил больше недели, но так и не довёл до конца. В этом году всё-таки смог доделать несколько начатых проектов, посмотрим что будет в следующем.

О том, почему важно доводить проекты до конца, я писал здесь.

#planning #about_me
👍5
✍️ Мини-Курс на Хабре

В ноябре Хабр запускал мини-курс из 4-х занятий по написанию статей и ведению блогов компаний. Моей компании, корпоративный блог не нужен, но статьи время от времени стараюсь писать. Поэтому курс решил пройти и поделиться здесь некоторыми заметками, так сказать, чтобы всё лучше усвоилось.

👆 Формат статьи

Перед написанием статьи нужно определиться с её форматом, он повлияет на ход всей статьи, от названия до содержания. Вот 4 основных типа статей и примеры заголовков для них:

1️⃣ Кейс — “Как я водил слона по лабиринту”
2️⃣ Туториал/инструкция — “Как водить слонов по лабиринту: не повторяйте наших ошибок, держите за хобот”
3️⃣ Обзор — “Лучшие слоны для лабиринтов или почему мы предпочитаем индийских”
4️⃣ Аналитика — “Самые важные качества у слонов в лабиринтах на нашем опыте”

💡 Кейс

- Рассказываете, не что вы делали, а как, и описываете: процессы, ошибки, препятствия. То, как вы что-то делали — менее важно.
- Должно быть больше информации о непосредственном опыте именно вашей команды, а не какой-то абстрактной команды. Поэтому нужно больше деталей о работе вашей команды, о каких-то конкретных ситуациях.

📃 Туториал/инструкция

- Тут мы описываем конкретные шаги, поэтому конкретизация более важна.
- Детали компании/команды менее важны, но нужен минимальный контекст, чтобы было понятно, что вы знаете, о чём говорите.

🎨 Оформление

Когда мы пишем статью на Хабр, то помимо основного содержимого, нам нужно позаботиться о том, как статья будет выглядеть в ленте. Это нужно, чтобы завлечь читателя её прочесть. Здесь важно обратить внимание на:

- Заголовок
- КДПВ — картинка для привлечения внимания
- Лид — вводный абзац

📰 Заголовок

- Заголовок не должен вводить в заблуждение, должен отображать суть статьи
- Может состоять из 2-х частей: Игровой (креативный) заголовок + рабочий
- Рабочий заголовок — заголовок, который мы используем, когда пишем статью.
- Если пишем серию статей, то не нужно указывать “Часть 1”, “Часть 2”, …, чтобы не отпугнуть читателей. Лучше сделать каждую статью в серии самодостаточной, чтобы не требовалось читать предыдущие статьи из серии.

📝 Примеры заголовков

Рабочий заголовок: Как написать хорошую статью на Хабр

Игровой + рабочий: Редактируй трезвым: статья о том, как писать хорошие статьи на Хабр

Короткий: Топовая статья — как?

🔝 Вводный абзац (лид)

Тут нужно раскрыть:

- О чём вы хотите рассказать и почему
- Указать целевую аудиторию
- Представиться, так вы будете для них коллегой по цеху, а не каким-то абстрактным чуваком в интернете
- Лид не должен раскрывать все идеи статьи, нужно сохранять интригу, чтобы завлечь открыть саму статью

✍️ Основной контент

- Больше конкретики. Например, нужно писать не “наш проект очень старый”, а “мы пережили 2 миграции с Flash на JQuery и с JQuery на Angular”
- Описывать личный опыт и вполне конкретные ситуации/проблемы/провалы и успешные решения.
- Не нужно использовать заумные предложения, мы пишем не для научного издания. Например, можно задать себе вопрос “Сказал бы я так в жизни?”, и если нет, то лучше переформулировать.

#habr
🔥6
Баготерапия

Мне тяжело неделями пилить новые фичи. Фичи связаны с неопределенностью — мы не совсем понимаем, куда идем, что нас ждет впереди, что мы забыли или не учли. Короче, очень много энергии уходит на ДУМАНИЯ. Если пилить новые фичи 6 недель подряд, можно здорово выгореть.

С другой стороны, мне легко исправлять баги. Баги тоже связаны с неопределенностью, но другого вида — мы не понимаем их причину. Зато мы знаем, как работает сейчас и как должно работать. Бац, бац и багфикс готов. Еще полчаса и он уже в продакшене. Красота!

Поэтому я предпочитаю чередовать фичи и баги. Когда чувствую, что не могу больше пилить новое, переключаюсь на баги и отдыхаю. Это работает на уровне итераций и ежедневной работы. В первом случае после 6 недель работы над новыми фичами, мы планируем разгрузочную неделю на рефакторинг и багфиксы. Во втором случае я каждый день беру баг-два, чтобы передохнуть. Периодизация!

P. S. Конечно, это не касается гейзенбагов, пожирающих твою душу. Их нужно планировать, отслеживать гипотезы и планомерно исследовать день за днем. Их лучше запихивать «продуктовым налогом» в ближайшие итерации.
👍6
📺 Дизайн токены

Сегодня я порекомендую несколько докладов о дизайн токенах

1️⃣ MoscowJS 49 — Дизайн-система на фронтенде — Сергей Володин

Сергей рассказывает, как первый редизайн почты и других продуктов mail.ru — “где нужно было поменять только цвет” занял неделю и в нём участвовали 10 человек.

В итоге они поняли, что что-то не так с их архитектурой, и что одного компонентного подхода не достаточно. Mail.ru — большая компания, и на разных проектах могут быть разные технологии. Но помимо этого, ещё определённо будут разные платформы — не только веб, но и, например, мобилки. В таком случае у вас физически нет возможности заставить использовать всех одну и туже библиотеку компонентов.

Чтобы ускорить разработку, в проекте должна использоваться дизайн-система. Дизайн-система — язык, на котором описываются интерфейсы. Это не просто UI Kit, дизайн-система описывает как работать со шрифтами, как правильно компоновать компоненты, описывает анимации и прочее. К тому же, дизайн-система должна быть платформо-независимой.

И далее рассматриваются:

- Дизайн токены — ядро дизайн системы.
- Проектирование API компонентов. Что интересно, они запретили прокидывать в компоненты className и инлайн стили.
- Как реализовывать темы.

2️⃣ Токены в дизайн-системах / Юрий Ветров (Mail.Ru Group)

Еще один доклад от Mail.Ru. Здесь подробно рассказывается о том, как происходила унификация различных продуктов в компании, почему библиотека компонентов не решила все проблемы и как помогли дизайн-токены.

3️⃣ Дизайн-система на токенах в Figma, коде и проде – Константин Подрубный, Wrike

Тут можно посмотреть демку, как можно редактировать дизайн-токены прямо из фигмы, и как они сразу же уходили в продакшн.

Ещё по теме:

- Дизайн система Paradigm от Mail.ru
- КОД — клуб отечественных дизайн систем
- Styledictionary — инструмент для генерации дизайн токенов под разные платформы

#fridayreading #design #architecture
👍1
​​Если вы ещё не забыли, в предыдущем посте я упомянул, что прошёл мини-курс по написанию статей на Хабр.
А сегодня хочу поделиться статьями, которые написал за время обучения:

1️⃣ Как автоматизировать использование дизайн токенов с помощью Stylelint и PostCSS

2️⃣ Как я документацию для дизайн-токенов в Storybook генерировал

#frontend #design #automation #storybook
🔥2
📖 Скорбь сатаны — Мария Корелли

Сегодня пора отвлечься от кода и дать мозгу небольшой отдых — новый год уже близко! Можно немного отодвинуть ноут в сторону (но не слишком далеко) и расслабиться. На выходных дочитал “Скорбь сатаны” Марии Корелли.

Это одна из тех книг, от которых невозможно оторваться. Завораживающая история, которая рассказывает, что за деньги настоящее счастье не купишь. Очень рекомендую 👍.

Со временем всё забывается, поэтому пока свежи впечатления, решил поделиться некоторыми цитатами из книги:

- Как правило - богачи самые несчастные люди на свете.
- Я устал от самого себя. И Мне никогда не удается отдохнуть.
- Настоящее - самое приемлемое время.
- Дни — белые странницы божественной хроники человеческой жизни.
- Я смотрю на бесконечное будущее, на которое я обречен, скорее с ужасом, чем с благодарностью, так как я зря растратил свое время и упустил бесценные возможности.
- Как странно писать о себе в прошедшем времени, как о том, кто уже не имеет отношения к настоящему.
- Никогда ни на что не следует смотреть слишком мрачно.

---

Буду благодарен, если посоветуете, что можно почитать на новогодних праздниках 📚🙏

#book #fridayreading
👍3
📖 Хабр. Технотекст 2023

Ежегодно Хабр проводит конкурс статей Технотекст, где каждый может принять участие, чтобы заслужить почёт и славу (или же нет).

Если вы хотите прочитать пару-тройку интересных статей, то можете найти для себя много интересного в прошлогоднем шортлисте технотекста. Некоторые статьи из этого списка я уже рекомендовал ранее:

- Не трогайте разработчиков. Отстаньте. Просто не беспокойте
- Процесс ревью кода структурно порочен. Вот, как его исправить

В прошлом году я участвовал со статьями о Notion:

- Система личного планирования в Notion. Эпизод 1 — Инбокс
- Система личного планирования в Notion. Эпизод 2 — Управление проектами

А в этом году снова решил поучаствовать со статьёй Интегрируем Яндекс Музыку в Visual Studio Code.

Надеюсь, что в этом году фортуна улыбнётся мне 🤞.

#habr
👍2
☃️ Итоги 2023 года

2023 год был достаточно насыщенным, и наверно стоит немного оглянуться назад и подвести итоги: что удалось сделать, а над чем ещё нужно поработать. Ведь иначе может показаться, что за год ничего не было сделано.

🏃 Пробежал полумарафон

🎾 Начал играть в большой теннис  

🧳 Поездил по России и посетил 5 стран

🇷🇺 Москва, Краснодар, Тюмень, Екатеринбург 
🇧🇾 Минск
🇦🇲 Ереван
🇬🇪 Тбилиси
🇦🇿 Баку
🇹🇷 Стамбул, Каппадокия, Сиде

🌑 Сыграл в пейнтбол

✈️ 74 публикации в телеграмм канале

📝 6 статей на Хабре и VC:

- Интегрируем Яндекс Музыку в Visual Studio Code
- Свифт умирает или как получать валютные платежи в 2023 году
- Бессильный сборщик мусора или неуправляемая память в .NET
- Как платформа управления знаниями упрощает онбординг — TEAMLY
- Как автоматизировать использование дизайн токенов с помощью Stylelint и PostCSS
- Как я документацию для дизайн-токенов в Storybook генерировал

🧑‍💻 Довёл до ума VS Code расширение и Open API документацию для Яндекс Музыки

🧑‍💻 Поконтрибьютил в Storybook Design Token

📚 Прошёл пару курсов:

- Старт на Хабре
- Подготовка к алгоритмическому собеседованию

📖 Читал не много

- Проект “Феникс”
- Смелость не нравиться. Как полюбить себя, найти свое призвание и выбрать счастье
- Не мешай себе жить
- Скорбь сатаны — Мария Корелли

🧑‍🏫 Зарегистрировался на GetMentor

 Конечно, планов было гораздо больше и не всё удалось сделать.

- Не успел подготовиться к собеседованию в Яндекс. Поэтому не пошёл на второе этап.
- Не успел довести до ума утилиту для анализа Code Review
- Не нашёл времени на английский
- Осталось множество незаконченных проектов

Надеюсь следующий год будет по крайней мере не хуже.

Всех с наступающим новым годом! 🎉 🎄❄️☃️🌨️

#итогигода
🔥6👍2
📖 Михаил Горбачёв: В меняющемся мире

На новогодних удалось не только пить, есть, спать и сбить режим, но и немного почитать. Перед новым годом спонтанно зашёл в Читай Город и купил книгу “Михаил Горбачёв: В меняющемся мире”, очень интересная и читается на одном дыхании.

📚 Книга проливает свет на ключевые моменты истории СССР в период перестройки под руководством Михаила Горбачёва. Название отражает содержание, фокусируясь в основном на событиях, формировавших жизнь Горбачёва

💭 Уделяется внимание новому мышлению, которому следовала советская власть в период перестройки

💣 Особое внимание уделяется тому, каким образом останавливалась гонка вооружений и как завершилась холодная война, раскрывая усилия советского руководства, положившие конец этому периоду

🌐 Рассматривается оттепель в отношениях СССР и США при Горбачёве и Рейгане

🔗 В книге Горбачёв рассказывает, почему было важно сохранить СССР, и к каким проблемам мог привести его развал (и в итоге привёл). Естественно описывается как он в итоге распался.

#book #politics
👎1🤔1
Пару месяцев назад я упоминал codeium — бесплатную альтернативу копайлоту. На новогодних праздниках наконец-то попробовал его на своём пет-проекте, и довольно часто он действительно ускоряет разработку. На скриншотах можно увидеть как codeium:

- Выводит значение enum’а
- Помогает писать тернарники
- Генерирует код по запросу в чате
- Может сгенерировать JSDoc или объяснить код

В текущих реалиях нужно включать VPN, чтобы работать с ChatGPT из России, здесь же есть встроенный чат, который работает без VPN 👍.

#ai
👍83
🗓 Cron теперь Notion Calendar

Некоторое время назад Notion купил Cron, и вот недавно состоялся релиз, теперь Cron - это Notion календарь, в котором доступна интеграция, как с гугл календарём, так и с базами в Notion.

Базы отображаются в левом нижнем углу, а записи - в верхней части календаря.

https://calendar.notion.so

#notion
❤‍🔥3
🧹 Тестирование — подчищаем за собой

Так исторически сложилось, что у нас на проекте нет юнит тестов, только интеграционные и e2e.

Иногда в тестах приходится подчищать за собой — удалять созданные во время выполнения теста объекты в базе, чтобы не влиять на результат других тестов. Это конечно, лишь ухудшает читабельность кода.

Мы прошли некоторую эволюцию подходов для создания и удаления объектов:

1. Мы использовали try/finally , где все созданные объекты удаляются внутри блока finally. Выглядит сомнительно, когда нужно городить подобную конструкцию во многих тестах.
2. Перешли к использованию функций с колбэками. Утилитная функция создаёт и удаляет объект, а мы передаём лишь колбэк, в котором описываем логику теста и нужные нам проверки.
3. Внедрили IDisposable классы, которые мы называем Creator’ами. Они делают то же самое, что и функции с колбэками, но не добавляют ненужную вложенность, что улучшает читаемость кода. Они чем-то напоминают PageObjectModel в e2e тестах.

Использование паттерна с классами IDisposable также подходит для активации определенной настройки только в рамках одного теста и отключения её по завершении теста.

Такой подход не ограничивается только лишь C# — в TypeScript 5.2. уже появилась поддержка using и, возможно, скоро она появится и в JavaScript.

#csharp #javanoscript #typenoscript #tests
👍5
​​Напоминания в Notion

Сегодня немного о том, как я облажался, но не сильно. Обычно я оплачиваю подписку иви сразу за год — так дешевле, всего 2000р (≈170 руб / месяц). Но как только подписка заканчивается — списывается оплата за 1 месяц — 399р, что гораздо больше чем 170р.

Что можно сделать, чтобы не забыть оплатить подписку (отключить авто продление!)?

Если вы, как и я, ведёте свои задачи и проекты в Notion, то у вас скорее всего есть таблица, где отображаются задачи, которые вы должны выполнить сегодня. В таком случае вы можете:

1. Создать задачу в Notion
2. Указать дату выполнения, немного раньше завершения подписки
3. В указанную дату задача появится в вашем списке на сегодня

Например, моя подписка заканчивается 8 января 2025 года, поэтому я поставлю дату 27 декабря 2024 года, чтобы позаботиться об это заранее.

Я уже описывал этот способ в статье Система личного планирования в Notion. Эпизод 2 — Управление проектами.

#notion
👍4
​​Прошлой весной, я наконец-то зарегистрировался на GetMentor, и теперь время от времени мне поступают различные вопросы. Некоторые из них решил публиковать здесь на канале.

В
опрос: если для параметра указать тип React.DragEvent<HTMLDivElement> ,то в коде e.target.style.background = 'white’ TypeScript ругается, что в поле target отсутствует свойство style, почему так?

Ответ:

Тут всё дело в том target — элемент, на котором произошло событие (оно могло всплыть к текущему элементу от дочернего). Из-за этого заранее тип target’а не известен, поэтому его нужно привести к нужному типу. Например, вот так:


(e.target as HTMLElement).style.background = 'white';


Вместо target можно использовать поле currentTarget, тип этого поля всегда известен, потому что currentTarget всегда ссылается на текущий элемент, к которому прикреплён обработчик событий. В этом случае можно избежать приведения типа.


e.currentTarget.style.background = 'white';


Хорошее демо о `target` и `currentTarget` есть в доке.

Ещё по теме

- Объект события Event
- Событийная модель

#question #frontend
👍11
Media is too big
VIEW IN TELEGRAM
🍎 Ещё раз об интеграции Notion и Apple Shortcuts

Пару лет назад я рассказывал, как можно использовать Apple Shortcuts, чтобы настроить быстрое добавление записей в инбокс. А в прошлом году поделился шаблоном, где для использования достаточно вставить токен notion и идентификатор базы. Но вчера я заметил, что теперь даже этого делать не нужно.

Наконец-то, Notion добавил готовые экшины для добавления записей в Inbox, всё настраивается за минуту. Жаль, что новый способ работает только на телефоне, приложение Notion для Mac не поддерживает эти действия.

#notion #automation
👍5🔥1