cherkashin.dev @cherkashindev Channel on Telegram

cherkashin.dev

@cherkashindev


Александр Черкашин. Бойскаут, Борец с перфекционизмом.

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

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

LinkedIn: www.linkedin.com/in/cherkalexander
Блог: https://cherkashin.dev

cherkashin.dev (English)

Are you a tech enthusiast looking to stay updated with the latest trends and developments in the world of software development? Look no further than cherkashin.dev - a Telegram channel curated by the talented developer behind the username @cherkashindev. This channel is your one-stop destination for all things related to software development, coding tips, and programming tutorials. Whether you are a seasoned developer or just starting your coding journey, cherkashin.dev has something for everyone. Join now to connect with like-minded individuals, share your knowledge, and level up your coding skills. Stay ahead of the curve with cherkashin.dev!

cherkashin.dev

21 Nov, 08:39


Сейчас темп жизни такой, что на всё не хватает времени. И чтобы сэкономить время на уборке, в прошлом году я раскошелился и решил заменить свой старый робот-пылесос Xiaomi (который штурмовал каждую неровность) на новый, более современный.

После просмотра кучи обзоров остановился на DreamBot L10s Ultra. Если кратко о его использовании:
- чистой воды налил
- грязную вылил
- мешок для мусора вставил (раз в пол года)
а дальше он все сам:
- воды наберет
- мусор выгрузит
- даже тряпки сам помоет и высушит.

В общем, чая навели, пылесос включили и пошли на стендап.

---

А если вы вдруг давно думали сменить работу, то чтобы сэкономить вам время, я принес вакансию от своего земляка и тёзки в международную компанию Hoodies.

О продукте:
- Продукт для мониторинга упоминания компаний в соц сетях. 
- Задача продукта – с помощью AI помочь бизнесу упростить процесс маркетинговых исследований для понимания и управления репутацией своих продуктов.

О позиции:
- требуется Senior Frontend разработчик 
- стек — React, TypeScript, Next.js
- опыт разработки интерактивных дашбордов
- зарплата ~$5000
- удаленка, гибкий график
- разные варианты трудоустройства
- хороший английский

Полное описание вакансии и как откликнуться — в комментарии к посту, если что-то непонятно пишите в личку @cherkalexander.

#about_me #вакансия

cherkashin.dev

18 Nov, 07:55


return Promise 🆚 return await Promise

Что будет выведено в консоль?


async function test1() {
console.log('start-1');
return Promise.resolve();
}

async function test2() {
console.log('start-2');
return await Promise.resolve();
}

test1().then(() => console.log('done-1'));
test2().then(() => console.log('done-2'));

console.log('end');


@cherkashindev

#typescript

cherkashin.dev

15 Nov, 08:23


// @ts-nocheck

Помню, когда я только начал изучать TypeScript, мне часто попадалась фраза: "TypeScript — это надмножество JavaScript, и любой корректный JavaScript-код является также корректным TypeScript-кодом". В общем, если надоел JavaScript — меняешь расширение файла с .js на .ts и радуешься жизни (или нет).

Вчера поздним вечером я копался в нашем легаси, некоторому коду лет 10, а то и больше. И я вспомнил, как лет 6 назад менял расширение этих файлов на .ts.

У нас на проекте тогда уже использовался TypeScript, но был и пласт легаси на чистом JavaScript. Я попробовал переименовать их в .ts, и тут весь файл стал огненно красным. Не всё так просто, как говорили эксперты.

Но в версии 3.7 TypeScript появилась директива // @ts-nocheck. Просто добавляешь её в начале файла, и проверка типов отключается, и можно постепенно мигрировать на TS.

Потом переписывать их на TS, конечно же, никто не собирался 😄

#typescript

cherkashin.dev

07 Nov, 10:03


Я уже года 4 плачу за свой домен cherkashin.dev, где хостится мой мертвый и убогий блог, который я сделал во время ковида, и с тех пор ни разу не трогал. В то время я не слышал про 11ty, а Astro ещё не появился. ChatGPT тоже ещё не было, поэтому — я погуглил, поспрашивал знакомых и взял Jekyll.

GitHub Pages, насколько я помню, неплохо дружат с Jekyll, я взял какой-то простенький шаблон для быстрого старта и опубликовал блог. Но Jekyll написан на Ruby, а это значит, что придётся постоянно сталкиваться с ним для настройки и билда блога, поэтому я быстро забил. 

Этим летом я сходил на конфу подлодки и узнал про Astro. Нашёл темплейт и потихоньку мигрирую. На скрине текущее состояние блога.

Кстати, если вы используете Astro и вам нужна аналитика, то @xufostation есть Astro плагин для Яндекс Метрики. У плагина пока мало звезд — поэтому давайте исправим это. Нам не сложно, а автору будет приятно.

https://github.com/ufocoder/astro-yandex-metrika

#astro

@cherkashindev

cherkashin.dev

31 Oct, 09:01


✉️ Реализация инбокса в Obsidian с помощью Apple Shortcuts

Те, кто давно на меня подписан могут помнить, что я рассказывал как настроить Inbox для Notion с помощью Apple Shortcuts (тут и тут).

Если кратко — Apple Shortcuts позволяет делать автоматизации, которые, например, можно запускать нажатием на ярлык. Для Notion автоматизация была простая:
- Показывается текстовое поле
- Мы вводим свою заметку
- Вызывается API Notion и заметка добавляется в базу данных Inbox

Когда я начал мигрировать на Obsidian, всё это конечно перестало работать. Казалось, что придётся делать заметки в Apple Notes а затем ручками переносить всё в Obsidian.

Но после того, как настроил интеграцию Obsidian с GitHub понял, что можно добавлять заметки напрямую в GitHub репозиторий через GitHub API.

И это сработало, пришлось лишь сильно поменять реализацию шортката. Теперь это работает так:
- Показывается текстовое поле
- Мы вводим текст заметки
- Он кодируется в base64, так требует GitHub API
- Получаем текущую дату, она будет являться именем заметки
- Формируем URL для создания файла в репозитории — https://api.github.com/repos/{owner}/{repo}/contents/{path}
- Отправляем запрос, предварительно нужно сгенерировать GitHub Access Token.
- При открытии Obsidian сделает pull из репозитория и заметка отобразится в папке Inbox, или можно сделать pull вручную
- Готово 🚀

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

#obsidian #nocode #planning

@cherkashindev

cherkashin.dev

28 Oct, 08:03


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

#workingplace

@cherkashindev

cherkashin.dev

18 Oct, 16:47


Выходной в Пятницу

Решил приблизить конец недели и взял сегодня выходной, чтобы просто заняться накопившимися бытовыми делами и тупо отдохнуть.

В итоге:
- пересмотрел пару серий Игры престолов. Одичалые штурмуют стену, а Тириона Ланнистера хотят казнить.
- разобрал (почти) рабочий стол на ноуте
- удалил всякого мусора на 40 Гб
- съездил на теннис, зная, что мне не нужно мчаться на работу
- разобрал чеки и справки, которые лежали пару месяцев в ящике
- записался в больницу
- выставил ненужный хлам на авито
- а ещё нашел #obsidian плагин 🚀, который умеет в мультикурсор, прям как VS Code (CMD/CTRL + D), нужно только настроить горячие клавиши
- а теперь пойду забью кальян, пятница же

Жаль, что каждую пятницу так делать не прокатит 😅.

P.S. Ходят слухи, что некоторые компании практикуют 4-х дневную рабочую неделю, вы работали в таких? Или может хотя бы слышали? Куда слать резюме? 😄

UPD: ссылку на плагин добавил

#about_me

@cherkashindev

cherkashin.dev

16 Oct, 08:00


Отдельная страница для задач в Обсидиан

В 🇯🇵 Notion мне всегда очень нравилось, что каждая запись в базе - это отдельная страница, которая может содержать что угодно - от простых заметок, до вложенных баз или таблиц.

Я использовал Notion, как менеджер задач, и эта возможность была критически важной для меня - работая над сложными задачами, я всегда делаю заметки:

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

Хотя в обсидиан это не поддерживается из коробки, но всё же достаточно легко реализуется:

- Для задач использую obsidian-tasks плагин, по сути это просто ToDo лист
- Если нужно сделать много записей по задаче или приложить скриншоты - то просто превращаем задачу в ссылку на заметку
- Оборачиваем задачу в Wikilink [[]] и нажимаем на неё, заметка с именем задачи создастся автоматически
- Заметка создастся в стандартной папке для заметок, папку можно задать в Settings => Files and links => Folder to create new notes in.

#obsidian #notion

@cherkashindev

cherkashin.dev

02 Oct, 06:55


Пока я Индии поедаю сабудану и досу, мне в Курск пришла книга "Мама, Я тимлид!" от Жени Черкасова. Я конечно не тимлид, но книжку обязательно прочитаю.

Женя ведёт ламповый и очень уютный канал о личной и командной эффективности. Вот некоторые из моих любимых постов:
- Готовься к увольнению с первого дня
- Как всё успеть
- Сколько я заработал с блога
- Как на самом деле строятся процессы

А ещё Женя летает на параплане 😱, обязательно посмотрите.

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

#рекомендую_канал

@cherkashindev

cherkashin.dev

26 Sep, 19:08


Пока я сижу в Шереметьево и жду свой задерживающийся рейс в Мумбаи, расскажу вам кринжовую историю, которая произошла со мной сегодня утром в аэропорте Каира.

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

Обычное утро, заказываем убер и едем в аэропорт, мы жили в районе Гелиополис, поэтому доехали минут за 20. Рассчитываюсь с водителем и идём в аэропорт. Перед металлоискателями говорю жене: "Надеюсь, что мы пройдём всё очень быстро", и тут ощущаю тревожную лёгкость - рюкзак с ноутом и российским паспортом остался на заднем сидении такси.

Мысленно попрощавшись с ноутом и параллельно убеждая жену, что таксист ещё не успел его кому-то втюхать, пишу в поддержку убера. Чтобы связаться с водителем, я прошу номер телефона сотрудника аэропорта - российский номер не подходит. Спустя 10 минут попыток - связаться с таксистом так и не получилось. А Убер просит сообщить ему, если нам не получится вернуть рюкзак в течение 24 часов. Пока сотрудник аэропорта зовёт полицию - я понимаю, что придётся лететь домой без ноута и прикидываю, где купить новый макбук в Москве перед командировкой.

Спустя 5 минут приходит худощавый египетский полицейский со стволом, который повторяет каждые 10 секунд, чтобы меня успокоить: "Don't worry, I will help you. It is my job.". Он мне напомнил брутального копа из американских фильмов. Изучив профиль таксиста, он уходит смотреть по камерам куда скрылся злоумышленник.

Ещё минут через 5 жене приходит в голову шикарная идея - возможно на ноуте работает геолокация. Открываю на айфоне локатор и вижу, что мои наушники и ноут неподалёку от аэропорта, появляется небольшая надежда. Через пару минут, наушники снова оказываются на территории аэропорта - таксист вернулся. Я хочу выбежать на улицу, расцеловать таксиста вручить ему вознаграждение и наконец-то отправиться на регистрацию, но полицейский останавливает меня - нужно соблюсти бюрократические процедуры.

Когда со всем разобрались, завязывается диалог с полицейским (П):

Я: Как вы его нашли?
П: Это просто моя работа! "Как твои дела?" - спрашивает он на русском
Я: Очень хорошо! "Я бы сказал иначе, но не хочу материться." - переходим обратно на английский.
П: Ты куришь? Может хочешь, что-нибудь выпить?
Я: Нет, ещё раз большое спасибо.
П: Египтяне хорошие люди, приезжайте к нам снова.
Я: Непременно.

Подходим к металлоискателям, где другие "хорошие" египтяне разводят нас на 200 фунтов (400 рублей), но это уже совсем другая история.

P.S. Таксист не говорил по-английски, но он несколько раз повторил "Uber, SMS". Думаю, убер просто связался с таксистом и тот вернулся назад, а полицейский брутально присвоил всю славу себе. Но мы конечно всё равно ему благодарны.

Расскажите, какие подобные истории происходили с вами? 😅

#about_me #vacation

cherkashin.dev

17 Sep, 12:13


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

Сначала аэропорт SSH, теперь номер 11101, а дальше что?

Бустани канал, чтобы оставаться в курсе, а то мало ли что ...

#vacation

cherkashin.dev

11 Sep, 08:13


⏭️ Соседние селекторы в CSS

Сегодня утром прилетает баг - у элемента не виден горизонтальный скрол. Случилось это из-за новой фичи - появился новый компонент, из-за чего соседний немного съехал и скрол ушёл за пределы экрана.

Тут я подумал, что в первый раз в жизни смогу использовать "Родственные селекторы" ~, чтобы пофиксить стили если оба элемента отображаются на странице:


.new-feature-element ~ .element-with-scroll {
// тут фиксим стили, они применяются к .element-with-scroll
}


Посмотрел на разметку, понял что .element-with-scroll всегда идёт непосредственно после .new-feature-element поэтому можно поменять на +:


.new-feature-element + .element-with-scroll {
// тут фиксим стили, они применяются к .element-with-scroll
}


Основные различия + и ~:

- + выбирает только один элемент, который непосредственно следует за первым элементом.
- ~ выбирает все элементы, которые следуют за первым элементом, но не обязательно сразу за ним.

Посмотрел на разметку ещё раз и понял, что элементы видны всегда, а не по условию, поэтому просто пофиксил стили для .element-with-scroll без всяких соседних селекторов, но хоть потренировался.

#css

cherkashin.dev

06 Sep, 10:03


Notion 👋

Только ленивый не написал, что 9 сентября Notion прекращает работу для российских пользователей. Пару дней назад и у меня появилась желтая плашка, которая говорит “на выход”. Говорят, пользователи платных подписок точно потеряют доступ. Посмотрим, будет ли работать Notion через VPN для пользователей на бесплатном тарифе или нет.


У меня пока план миграции такой:

1. Экспортировал все данные из Notion
2. Импортировал в российские аналоги - Yonote и Teamly, на случай если понадобятся старые заметки в удобно читаемом формате (ну не совсем он удобный)
3. Обмазываюсь плагинами в Obsidian и пытаюсь разобраться, что лучше “папки или связи”


Теперь кратко про Obsidian:

- Настроил интеграцию с гитом, чтобы бэкапить всё на гитхаб
- Шаблоны Notion заменил на плагин Templates
- Настроил некоторые горячие клавиши, как в VS Code.
- Вместо баз данных Notion, установил плагин Projects. Он позволяет отображать данные в виде таблицы или канбан доски, как это было в Notion.
- Аналога инлайн баз данных в Obsidian нет, но есть dataview. С помощью SQL подобного языка запросов Dataview Query Language, можно писать запросы ко всем заметкам в базе знаний.
- Для миграции заметок из Notion можно использовать плагин Obsidian Importer. Я пока импортировал только, базу с постами для телеграмм. Импортировалось отлично. Нужно делать экспорт в HTML формате, не в Markdown. После импорта, настроил отображение с помощью плагина Projects и получилось примерно как было в Notion. И ощущение, что после этого Obsidian стал иногда подвисать, посмотрим как будет работать дальше.
- Создал папку для zero-links - по сути теги в виде страниц имена, которых начинаются с двух нулей, для оптимизации поиска.
- Так как инлайн баз данных нет, для ведения задач собираюсь попробовать плагин Obsidian Tasks.


Если вам интересна тема Notion и как с него съехать, то вам на канал Марии. Она активно освещает текущую ситуацию, и альтернативные продукты.

P.S. Расскажите, как вы ведёте базу знаний или список задач. На что мигрируете, если пользовались Notion? Тупит ли Obsidian у вас? 😅

#notion #obsidian

cherkashin.dev

23 Aug, 10:00


У нас на проекте есть 2 основных правила для написания стилей:

- У всех CSS-классов должен быть префикс dp-, выбранный по названию продукта
- Мы используем БЭМ — <block>__<element>--<modifier>

Однако есть большой пласт легаси стилей, где эти правила не используются.

И вот, при добавлении monaco-editor’а (текстовый редактор на котором построен VS Code) в новую фичу, прилетело ишью — у горизонтального и вертикального скролл-баров разная толщина.

А вся проблема в том, что наши глобальные стили для класса slider применяются к элементу с таким же классом в monaco-editor.

Именно эту проблему и решают префиксы — позволяют избежать коллизии имён с библиотечными классами.

#css #bem