Telegram Web Link
Я на удивление часто начал пользоваться ast-grep

Очень удобно выискивать в проекте синтаксические конструкции.

attach({ effect: $ }) найдет только такие варианты использования

attach({ source: $$$, $$$ }) найдет только те, где есть source

Работает очень быстро.
Всем привет!

Мы запускаем 6-недельный интенсив по фронтенд-разработке.

Ведущие курса
Я — Сергей Сова и мой коллега Сергей Болтрукевич. У каждого из нас более 10 лет опыта работы в больших компаниях и стартапах, и мы готовы делиться этим опытом с вами.

На курсе вас ждёт
- от 20 до 40 видео с теорией
- еженедельные вебинары на разные темы
- кодревью пулл-реквестов
- оперативная поддержка в чате

В программе обучения
- от CI/CD и тестирования до теории продуктовой разработки
- техники планирования, инструменты и практика
- подходы к архитектуре

Изучим такие инструменты, как Effector, Atomic-Router, Feature-Sliced Design, Supabase.
И самое главное — вы на практике примените все полученные знания, создавая собственное приложение за эти 6 недель.

Курс не подойдет полным новичкам.
Необходимый минимум: базовое владение React и TypeScript.
Так как мы не сможем уделить время сотне человек, количество мест очень ограничено.

✈️Если вы готовы присоединиться, просто напишите мне @sovasergey.
Укажите, что хотите записаться на курс, чтобы я мог быстрее ответить.
🕐Мы организуем короткий звонок, на котором подробно расскажем о программе, какое приложение вы будете создавать и какие варианты оплаты есть.

Буду рад видеть вас на курсе!
☄️ 🍰 ⚛️
Please open Telegram to view this post
VIEW IN TELEGRAM
Хороший пост о том, почему писать логику в компонентах это не самая хорошая затея. Жаль блог умер

https://kelin2code-mu.vercel.app/posts/stop-writing-logic-in-components

Но я скажу так, что есть ситуации когда использование rtk, swr, react-query довольно оправданы и заниматься вынесением логики из компонентов нет смысла:

1. Сайты визитки/лендинги/сборщики email/прочее
2. Интернет-магазины
3. Админки

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

В админках тоже хорошо работает логика в компонентах: ведь самое сложное это обработать конкретные данные и отправить на сервер. Тут как раз react-query с кешем хорошо ложится. Правда, я не понимаю зачем в админках люди используют next.js, но всё же.

А вот в приложениях: музыкальные плееры, обработка документооборота, почтовый клиенты, поиск авиабилетов, монтажные программы, и тому подобное, это уже приложения, суть которых в логике на клиентской части. Вот здесь и нужно отделять бизнес-логику от компонентов.
Я собираю материал для видео/поста/треда на тему хейта интерфейсов Apple.

Мне очень нравится реализация интерфейсов macOS, i*OS, и прочих. Но есть довольно много фич, которые сделаны очень криво или просто не доделаны.
Одна из таких это Stage Manager — полностью бесполезная вещь на маке. Мак это же многозадачная система. Для iPad может быть еще куда ни шло, но на маке???

Еще одна классная статья, разбирающая возможности для улучшения управления окнами. Да, я знаю, что есть всякие тайловые менеджеры окон в Linux, но это не то же самое. Может быть если развить их идеи, сделать красивый интерфейс управления, добавить поддержку тачпада, очевидности в UI, ну и штук для нейропроцессора, тогда это будет удобно.

https://okusov.ru/uluchshaem-ya-pridumal-novuyu-fichu-zones-dlya-macos

Я очень люблю красивые интерфейсы. Поэтому, лучше выберу красивый и чуть-чуть под себя допилю, нежели буду юзать страшный, но зато много чего умеющий интерфейс Linux/Unix систем. Поэтому, примеры показанные в статье, мне очень зашли.

На маке, я управляю окошками через rectangleapp.com. На данный момент мне более чем хватает его возможностей. Но если есть аналог Zones из статьи, который не лагает и умеет в тачпад + хоткеи, скиньте плиз.
В комментариях к этому посту, вы можете вывалить всё, что вам не нравится в интерфейсах Apple:

- проблемные места в macOS, как можно улучшить, чего не хватает из других систем, что по вашему мнению сырое
- а также, все, что касается iPadOS, iOS, tvOS
- отдельно фич интеграции между этими системами.
Главное, не железные проблемы, именно софтовые.

Я довольно часто использую iPad как внешний монитор для мака. Невероятно радуюсь, что он может работать без провода (не долго конечно, из-за объема батареи, но все же).
Еще мне нравится, что можно поставить iPad рядом с маком и перетаскивать курсор на него из мака и печатать клавиатурой.

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

Пишите, что вас НЕ радует. С удовольствием почитаю.
Уже совсем скоро цифра 3 сменится на 4 в порядковом номере года.

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

Хочу пожелать всем нам удачи в новом году, потому что всё остальное мы можем сделать сами.

С наступающим 🎄
Please open Telegram to view this post
VIEW IN TELEGRAM
С Новым Годом!

2️⃣0️⃣2️⃣4️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
https://blog.rust-lang.org/2023/12/21/async-fn-rpit-in-traits.html

Вот это да, что таки заехало в rust 1.75.

Хорошее
Сейчас уже нет Настоящего Айкидо. В наше время айкидо называется, когда два чудака лупят друг друга пятками в челюсть или ломают друг другу суставы, или не знаю, чем они там ещё занимаются, не видел никогда.

А Настоящее Айкидо — оно было совсем другое. Оно заключалось в том, чтобы победить Неприятеля так, чтобы самому не сильно напрягаться. Для этого даже не обязательно с этим Неприятелем встречаться.


Вот скажем принесли вам в разработку макеты с Неведомой Фичей. Как её сделать — хз, нет понимания.

Приходит вам в голову мысль, как реализовать эту фичу с помощью Костылей. «Что поделать, инженерия — она такая», — думаете вы и берётесь за работу. В процессе к одному Костылю приходится прилепить ещё парочку и скрепить это для прочности подручными материалами. В общем, вы по ходу встречаете всё большие сложности и затем героически с ними боретесь. Получившееся решение громоздкое, хрупкое, но время на него уже потрачено, выкинуть жалко, да и в целом оно работает (почти всегда), так что что уж тут, оставляем.

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

Либо же вы ищете похожую задачу на Стэковерфлоу или спрашиваете у Чат-бота. И таким образом вы находите «Либу, которая решит все ваши проблемы». Правда помимо вашей задачи она решает ещё и парочку других проблем по пути, ну и тянет набор зависимостей на 500кб. Но это ладно, думаете вы, фичу-то надо сделать ещё вчера. «Ок, для временного решения сойдёт», — решаете вы и используете либу.

А потом, спустя год-другой нужно вам зависимости проекта обновить и вы находите эту либу, вспоминаете что к чему, хотите версию этой либы заодно поднять. Но либа уже заброшена владельцем и вообще новым Реактом не поддерживается. «Что поделать, надо выпиливать», — думаете вы и снова оказываетесь в самом начале.

Это не победа, Неприятель вас обхитрил, притворился побеждённым и вам снова нужно с ним сражаться. Это тоже не путь Настоящего Айкидо.

А как бы поступил Мастер Настоящего Айкидо? Он бы сел, подумал и вспомнил, что Браузер, для которого он пишет программу, уже и сам умеет в нужную фичу. И вот Мастер на митинге скажет «Это умеет Платформа», а потом возьмёт и напишет несколько строк кода, чтобы дёрнуть нужный браузерный API, закроет задачу и пойдёт пить чай. И его решение никогда не протухнет, ведь Платформа всегда обратно совместима.

Мастер Настоящего Айкидо прилагает большего всего сил, чтобы освоить базу, и затем стремится к применению усвоенных принципов. А когда ему приходит мысль, что ему всё ясно, то он говорит себе: «Этого недостаточно», и идёт дальше копать Базу. 🥷
Я очень люблю разные инструменты для анализа знаний и принятия решений.

6 лет назад попробовал матрицу Эйзенхауэра. И по сей день исследую вопрос рационального применения своих ресурсов. Текущий статус: тревожное расстройство, выгорание. Но кажется, что это не связано с попытками использовать время эффективно.

Хочу поделиться целым набором очень полезных инструментов

https://untools.co/
Ору с Винды
Ну зачем… что за говнолого.
Есть какие-то миграторы на Spotify?
Опять эти антивирусы.

У меня в квартире сидят два друга с разными ноутбуками.
У одного Касперский внезапно кричит, что была обнаружена атака, в ЛОКАЛЬНОЙ сети.
В это время, второй нажимает в своем Avast сканирование локальной сети.
Я давненько пишу на эффекторе и зачастую упираюсь в некоторые не очень красивые или практичные решения в проектах, в которые прихожу.

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

Хочу рассмотреть очень простой пример: Страница логина с 2FA аутентификацией.

Моя цель: отделить код самих страниц друг от друга, а также вынести код перехода между страницами и все эти правила за пределы страниц.

Тогда все, что касается страницы логина будет лежать в:
src/pages/auth-login/model.ts
При этом код отвечающий за проверки логики между страницами в:
src/processes/login/model.ts.

Можно представить модель каждой страницы как черный ящик с событиями, этот подход позволяет упростить редактирование страниц, а снаружи можно:
1) запустить процесс, дернув событие
2) отправить .abort внутрь модели
3) подписаться на успешное завершение логики модели
4) подписаться на завершение с ошибкой
5) и еще добавить кастомные события в зависимости от бизнес-логики

В моём случае, каждая модель страницы экспортирует что-то вроде:

// Should be called only from outside, here just listen
export const inputs = {
started: createEvent(),
aborted: createEvent(),
};

// Should be called by this model
export const outputs = {
finished: createEvent<UserSession>(),
};


В процессе обработки мы можем заимпортировать все нужные нам модели страниц и построить любую логику:


import * as loginModel from '@/pages/auth-login';
import * as login2FaModel from '@/pages/auth-login-2fa';

sample({
clock: loginModel.outputs.finished,
target: login2FaModel.inputs.started,
})


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

Это самый примитивный пример, но с его помощью можно строить довольно сложные процессы.
Первые два sample (15-25 строки) можно представить в виде вот такой диаграммы.

В данном случае, я вынес этот код в отдельный слой processes (по FSD), но это не обязательно.

Как в комментариях к предыдущему посту правильно заметили это просто pub/sub механика, реализованная вручную на effector.

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

———

Визуализация effector в виде блок-схем это довольно двоякая задача. Пример можно глянуть на anode.effector.dev.

Но основную сложность я вижу в том как выбирать какие семплы/ноды склеивать в общую схему, а какие разбивать на две.

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

К сожалению, так работает не всегда.
Снова вернулся к SSR на effector.

Так как у меня жутко болит от Next.JS, я поглядел в сторону Vite и его vite-plugin-ssr, который теперь называется Vike.

Файловый роутинг, куча хуков для кастомизации, любой UI-фреймворк, SSR, SSG, можно подключить свой роутер, любое направление деплоя.

Задача прикрутить к Vike effector, оказалась довольно тривиальной. Поверх Vike можно построить свой фреймворк с уже настроенными плагинами и структурой. В ближайшем проекте, которым я занимаюсь в свободное от курса время, будет Vike + Effector + React.

Мне очень нравится вайб этого проекта, очень похоже на Razzle, но с большим коммьюнити.
Волшебная ситуация

Чел выложил на свой статический сайт 3.44MB .mp3
Кто-то решил задудосить его скачивая файл множество раз с кучи устройств. А Netlify, где был выложен статический сайт, выставил счет на $104К.

Я был в подобной ситуации, когда игрался с Kubernetes на AWS. Но там мне прилетело около $20К, после разговора с поддержкой, счет аннулировали.

P.S.
Буквально час назад Matt CEO of Netlify написал, что счет тоже будет аннулирован. Спасибо за ссылку в комментах.

Но любопытно, все было бы точно также, если бы чел не написал о своей ситуации в Reddit, и там это не вызвало волну комментов?
У нового дизайна гугл очень много странных решений.

Две огромные близкорасположенные одинаковые визуально кнопки.
Странная вытянутая форма форма.

В других вариациях еще и места пустого очень много.

Объясните?
2025/07/07 03:35:45
Back to Top
HTML Embed Code: