artalog @artalog Channel on Telegram

artalog

@artalog


Развернутые ответы на вопросы в чатах, мысли от рабочих процессов.
Вопросы - @artalar.

artalog (Russian)

artalog - это канал на Telegram, который предлагает развернутые ответы на вопросы в чатах и мысли от рабочих процессов. Если вас интересует обсуждение темы и получение глубоких и информативных ответов, то artalog идеальное место для вас. Здесь вы можете найти подробные разъяснения и анализы по самым разнообразным темам. Главная идея канала - обогащать и расширять понимание пользователей, предоставляя им полезную информацию. Если у вас возникли вопросы или хотите узнать больше о какой-то теме, обратитесь к @artalar и получите качественные ответы и размышления. Присоединяйтесь к artalog и погрузитесь в мир интересных дискуссий и полезной информации!

artalog

25 Jan, 10:16


#daily_reminder безголовые браузеры для тестов очень даже быстрые!

Этот тест с использованием @web/test-runner:
time wtr src/*.test.{ts,tsx}

2/2 test files | 34 passed, 0 failed

Finished running tests in 0.6s, all tests passed!

1,17s user 0,31s system 136% cpu 1,080 total

artalog

24 Jan, 07:40


Продолжаем подводить итоги 2024 - доклады, стримы и остальные видео.

Генерация реактивной модели из контрактов - главное событие года для меня, доклад получился, на мой взгляд, очень интересным, и достаточно качественным и проработанным (редкость для меня).

Всё о стейт-менеджерах: что такое менеджер состояний - приятный разговор на площадке хекслета, хотя нам бы там еще часов 5, что бы все нормалаьно раскрыть :)

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

Reatom против debounce и throttle - очень интересный и важный рассказ, подробно расскрывающий тему из этой статьи.

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

artalog

23 Jan, 07:28


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

Мне в доку реатома пришлось добавить гайды для ключевой тройки (еще предстоит узнать что там с bun и deno), и там все у всех по разному. Еще и по версиям отличается, я указал только про то что сам знаю.

Бай зе вей, если вы попробуете запустить npm dedupe "@package-scope/*" нпм это радостно проглотит, но задедупит вообще все нод модули. Свинюшка.



Зачем синглтоны вообще нужны?

Примеров много, приведу только один. Мне нужно трекать создаваемые объекты со всех пакетов экосистемы, точнее выставлять им какую-то мета инфу. Писать в объекты - грязно и не производительно (портит хиден шейпы). В теории решение простое - иметь шаренную WeakMap в которой эта мета будет лежать. А где хранить эту викмапу? Она как раз должна быть глобальной и не повторяться. Только в синглтон модуле.

В комментариях напомнили, instanceof и, в этом смысле, классы тоже идут лесом.

Даже если мы уйдем от синглтонов и будем использовать строковые ключи содержащие текущую версию - дупликация зависимостей (и, соответственно, версий) все равно это поломает.

Можно еще в globalThis писать, но это и проблема с тестами, неймспейсы и т.п.

В целом, ничего плохого в релевантном использовании синглтонов не вижу. А дублировать один и тот же код - очень не надежная практика. Увеличивает бандлсайз и замедляет разогрев кода.

Так что нет, тут нет одного простого решения. А npm и другие пакетные менеджеры плохие тем что еще не придумали и не поддержали какое-то поле "singleton": true в package.json.

Я в следующей версии реатома буду переходить на жирный монопакет, но биндинги к фреймворкам все равно придется в отдельных пакетах держать. Поэтому проблемы дупликацией не уйдут, а просто станут реже. А еще появятся проблемы с тришейкингом...

Вот вы как думаете, если вам бандлер какой-то store.ts в вашем приложении задублирует в какой-то момент, у вас все нормально пойдет?

artalog

22 Jan, 11:30


@reatom/[email protected] - редизайн! Управление стало проще и симпатичнее.

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

Доки: https://www.reatom.dev/package/devtools/

artalog

21 Jan, 16:01


Оффтоп 🤫
t.me/photyom

Сообщаю, что бы больше об этом тут не говорить.

artalog

20 Jan, 11:21


Очень удивляюсь от спора web vs native в одном из чатов. Для некоторых людей фингерпринт на сайте - самая большая проблема в жизни. Ставишь нативное приложение на комп и оно сразу же получает доступ ко всем твоим файлам, может вечно работать в бекграунде, устанавливать другие приложения и сервисы, да вообще безвозвратно убить твою систему - это другое!

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

artalog

20 Jan, 09:53


В 456 выпуске Веб-стандартов обсуждали запрет браузеров на запрет пользовательского скела (https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag). Для меня эта тема больная как для пользователя (когда попадаю на сайты сверстанные на vh и vw), так и как для разработчика - сейчас расскажу.

Вот делаем мы приложение с канвасом (типа фигмы) и хотелось бы запрещать нативный скейл именно потому что он может конфликтовать с нашим кастомным. Потому что пользователь может оказаться in the middle of nowhere после очень простых действий: начинает скейлить статичный сайдбар настроек, но случайно уходит пальцами на канвас и там отпускает. Здесь же жесты уже перехватываются нашим обработчиком и все что пользователь теперь может - это скейлить сам канвас, но не "отзумить" приложение. Очень не удобно. И, что плохо, мы не можем добавить всегда видимую кнопку "отключить скейл" или "сбросить браузерный скейл", потому что не можем контролировать этот самый скейл и знать о нем хоть что-то. Причем, "умный" браузер иногда сохраняет состояние своего скейла даже после перезагрузки страницы, ну спасибо...

Но проблема в общем еще больше - разработчикам доступна слишком базовая апишка pointer events, но у нас нет более верхнеуровневой апишки gestures events для удобно хендлинга pinch to zoom и подобного. Из-за отсутствия такой апишки для разработчиков веб приложений мы имеем сразу две серьезных проблемы:

- кому надо - имплементирует все эти pinch to zoom заного или берут одну из N библиотек. Все это со своими багами и недоработками. Все это, конечно, удорожает продукты и ухудшает UX пользователя.
- все еще остаются баги совместимости с браузерным поведением, как описанное мной выше. Были бы жесты доступны программно - можно было бы нативнее и правильнее интегрировать и перехватывать нужные события в нужных местах.

Меня это очень удивляет, учитывая как давно эти механики уже есть в браузерах. Так много популярных продуктов в вебе от малых студий и монополистов рынка имеют свои механики жестов, но по какой-то причине в стандарт они еще не занесены.
Не знаю почему так происходит, хотя вспоминая историю touch и pointer events, может быть все это и объяснимо.

artalog

18 Jan, 12:33


Первый раз за день открыл бесплатный чатгпт, он 4 раза о чем-то подумал и закончился =D
(потом понял, что я ему svg сам и скинул, но потратить весь лимит за один запрос - все равно эпик)

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

Нас ожидает подъем цен? На неделе было много опросов, давайте еще один попробуем (см. ниже).

artalog

13 Jan, 09:07


Делать 1 пост с рефлексией 2024 не могу - слишком много всего, будет серия о том что было и о том что будет.

Прошлый год для реатома закончился перевалом за тысячу звезд на гитхабе и пробитием 3к скачиваний в неделю на NPM. Цель в этом году - реалистичные 15, мечтательные 50. Как?

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

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

Летом 2023 я вписался в стартап, который, очевидно, сильно подвинул все остальное. Хотя планы были грандиозные и для реатома - огромный интересный публичный продукт должен был сыграть и на маркетинге либы, и по дороге прокачать ее составляющие. С технической точки зрения я стараюсь вдохновляться появлением пакета reatom/npm-zod и, наверное, моего лучшего доклада Генерация реактивной модели из контрактов.

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

Еще, стоит упомянуть фотографию, хотя о ней я уже писал. Завел отдельный канал, в котором я не только делюсь результатом, но и рассказываю множество технических деталей и экспериментов - @photyom.

На последок, ставьте 🤩 под постом, если хотите видеть больше #good_first_issue по документации (переводам), инфраструктуре и рефакторингам из реатома.

artalog

12 Jan, 10:05


Хотел высказать отдельную благодарность за то что часть его работы - это сейчас, фактически, самый большой реалистичный пример приложения на реатоме:
https://github.com/debabin/no-holyjs-examples/tree/main/src/apps/reatom-variant

artalog

12 Jan, 10:05


Сегодня в 14:00 по мск, будет самый сложный для меня стрим 👍

Поговорим с вами не просто про state менеджмент, больше поговорим про философию и стереотипы во фронтенде.

Будем говорить про все, в конце доклада будет секция вопросов и ответов 😆

youtube — twitch — vk

artalog

02 Jan, 09:16


У кого есть опыт с https://tanstack.com/start/latest, что скажете?
Я помню осенью их роутер был очень бажный, а сейчас как?

artalog

30 Dec, 21:39


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

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

Хотел рассказать о конкретном интересном кейсе, соскучились по техническому контенту? 😅

В @reatom/utils (доки) есть пачка глобальных методов дополненных типами (assign, keys) - мелочь, но необходимая в любом проекте. Знаю многие берут лодаш только для этого (правильных типов). Вот у нас микролодаш :)

Еще, там есть такой код: export const setTimeout: typeof globalThis.setTimeout. Бред? Зачем? Все просто как всегда. Дело в том, что в Node.js возвращаемое значение setTimeout не число, а объект 😐 и если попытаться его сериализовать - оно упадет с рекурсией 🫤.
А в реатоме для SSR как раз нужно сериализовать кеш, который может иметь таймауты тоже. Так вот, пришлось добавить свой декоратор setTimeout (не заманкипатчить, а нормально собственный реекспорт сделать) с добавлением в возвращаемое значение волшебного toJSON() { return -1 }.
Да, если вы не знали, поведением JSON.stringify можно управлять из самого объекта.

Это не конец 🫠.

В скоре, ко мне приходят с ишаком о том что @reatom/utils ломают типы в приложении с "lib": "DOM" в тсконфиге.
Шта?
Оказывается, при использовании в типах globalThis ТС заботливо добавит в ваши d.ts тот самый /// <reference types="node" />.
Ооокей, как описать экспорт переменной модуля с типом глобальной переменной без globalThis? Йа не знаю. Поломав голову, к счастью, вариант нашелся - сделать объявление промежуточной переменной с другим именем в другом модуле что бы с ее помощью спокойно в оригинальном модуле затайпофить глобальный тип: export const setTimeout: typeof _setTimeout. Теперь лишние референсы в бандл не попадают. фикс.

artalog

29 Dec, 19:58


Пленка

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

TLDR: в треде будут мои фото.

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

А еще, пленка - это отличный способ зайти в прекрасный мир нормальных (не телефонных и компактных) объективов, которые дают по настоящему завораживающую картинку.

Раньше я снимал на Зенит 12сд с гелиосом и, в общем, был очень даже доволен.

В этом году начал со Смена-8. Но это было слииишком мееедленно для меня. Быстро понял что страсть к пленке не угасла и нужно брать аппарат посерьезнее.

Нашел новый Зенит КМ + Зенитар 50 mm F2 МС за 30$, но быстро разочаровался шумной автоматической промоткой и неприятным пластиковым корпуса.

Решив переключиться на что-то качественное и запарившись по весу нашел и взял Pentax ME + SMC Pentax-M 50mm F1.7 за 150$. Крайне приятный и функциональный вариант, всем рекомендую, откатал на нем пленок 10, не меньше.

Очень повезло познакомиться с частным проявщиком @shestnadcatlab, который делает все в 10 раз быстрее местной лаборатории (недели ожидания). И всегда помогал во всем разбираться.

Некоторое время спустя, поняв что таскать объемную бандуру в 2/3 килограмма в карманах не очень-то возможно, а держать ее на шее и ехать на велосипеде очень травмоопасно, я решил переключиться на компакты.

ЛОМО Компакт-Автомат - прям в сердечко, во многих приятных моментах он учавствовал или создавал их. Все еще пользуюсь версией на полукадр.

Опыт с Эликон-35СМ я бы описал как: "прикольный мастеркласс за 10$ по сборке-разборке фотоаппарата (для очистки от песка)".

Fujica GE (60$) - оказался с очень не резким объективом, к тому же недавно сломался от лежания на полке (пару месяцев!).

Но опыт от компактов я получил такой, "только зеркало"! Штош, продолжаем искать миниатюрные варианты.

Всего и не перечислишь, был даже на волоске от заказа Pentax 110, но, в итоге, нашел пентаксовские XS 40mm f/2.8 объективы и начал копать в эту сторону. Объектив, кстати, стоит 240$ на БУ рынке, но я взял за 90$ полурабочий и починил.

Поменяв ME на Super A (170$ без объектива), который еще пришлось в ремонт отправить, получил зеркалку с крошечным объективом, которая все еще много весит, но хотя бы по размеру влезает в карманы и бананки (поясные \ наплечные сумки). При этом, дает превосходный функционал и безумное качество фотографии. Вид этого комплекта на втором фото.

Ах, если бы это все...
По дороге я успел купить Pentax K10D со сломанным автофокусом за 30$ для скана пленки через макрокольца. Мне результат нравится.
Ах, да! Я же начал проявлять сам пленку! Сейчас сижу на Foma-стеке (лол), очень доволен.
Ну а еще, попробовав Pentax *ist у друга (@shestnadcatlab), решил взять себе Pentax MZ-7 (с "вечной шестерней" 70$ ) и Pentax SMC FA 28-105mm 3.2-4.5 IF AL (40$). Есть некоторые траблы в эргономике, но в целом очень круто (третье фото).

Еще, на почте ждет Зоркий 4к, а в холодильнике бобина Fomapan R 100 2х8, но об этом попозже...

В комментариях много моих фото :)

artalog

26 Dec, 11:34


Вера

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

Я Христианин и вера в Бога - фундамент моей жизни. Это то что помогает мне принимать решения во всем: от управления эмоциями, до долгосрочного планирования. Это не делает меня идеальным, совсем нет, лишь помогает двигаться в правильную сторону.

Для меня важно этим поделиться, потому что большинство контента для незнакомых с этим людей на просторах интернета, да и в реальной жизни, сводится к: "А че в Библии про большой взрыв написано? Всем известно, что мы от обезьян произошли. Докинз уже доказал, что никакого Бога нет. Религия - главная причина войн"

Все эти и многие другие "аргументы", помимо того что имеют очень шаткие основания, ложные формулировки и споры в самом научном сообществе, никакого отношения к сути веры не имеют.

Лично я поверил в существование Бога, когда у меня все в жизни было хорошо: 24 года, опыт успешной карьеры, отличное здоровье, невеста! Но внутри всегда сидел неудовлетворенный моральный компас, который не мог понять, что является настоящим фундаментом человечности. Не было ответов на вечные моральные дилемы, лишь теоретические догадки.

Матфея 22:(36-39): Учитель! какая наибольшая заповедь в законе? Иисус сказал ему: возлюби Господа Бога твоего всем сердцем твоим и всею душою твоею и всем разумением твоим: сия есть первая и наибольшая заповедь; вторая же подобная ей: возлюби ближнего твоего, как самого себя;

База. Будь благодарен за свою жизнь и относись к другим, как ты хочешь что бы относились к тебе. Просто, знакомо, логично, не так ли? Это самый простой и быстрый ответ на все вопросы, но вряд ли он удовлетворит изначально скептически настроенного человека. Я это понимаю. Мое знакомство с верующеми было с мыслью о том что это очень не далекие фанатики, которые не осилили школьную программу естественных наук.

Но меня поразило описание любви, которую в современном мире полностью извратили.
1-е Коринфянам 13:(4-7): Любовь долготерпит, милосердствует, любовь не завидует, любовь не превозносится, не гордится, не бесчинствует, не ищет своего, не раздражается, не мыслит зла, не радуется неправде, а сорадуется истине; все покрывает, всему верит, всего надеется, все переносит.

На иврите 4-7 разных слов, которые можно на русский язык перевести как "любовь". Это показывает нашу ограниченность. А еще это показывает глубину этой Книги, которая сделана таковой, я верю, что бы всю жизнь человеку было чем заняться, куда и как расти духовно (морально, если хотите).

Но это то, что меня больше всего беспокоит. Формат поста ограничен. Закончу тем, что если вы больше из светского общества и вас все еще беспокоит конфликт науки и веры - поищите на ютубе любые записи с Джон Леннокс.

UPD: тред закрыт

artalog

24 Dec, 09:03


В комментариях к https://t.me/msosnovfeed/1092 Андрей пишет что архитектура на фронте часто и не нужна, в плане что вся доменная логика должна никуда не протекать и управляться только беком. Я могу согласиться с причиной (SSoT должен быть на беке), но вовсе не согласен со следствием (на фронте не нужна архитектура).

1. Лично я отрицаю концепцию разделения кода на "доменную логику" и что-то еще. Пользователю нужен конечный продукт, каждая фича должна быть качественно реализована со всех сторон: дизайн, интерактив, бекенд, fail path, нативность (безшовная интеграция в приложение). И швы соединения всех этих системных доменов не должны быть видны пользователю.
Это должно быть первоочередным фокусом, и нормально это возможно сделать только не боясь смешивая разные системные домены.
Грубо говоря, хранить состояние модалки в БД или переносить логику на фронт убирая лаг - абсолютно нормально.

2. Даже если полностью отрицать п.1, все равно на самом тупом, с бизнесовой точки зрения, фронте все еще есть ТОННА системной логики, которой нужно управлять. И это не просто.
Ну знаете, headless ui (https://react-spectrum.adobe.com/react-stately/index.html, https://ariakit.org/) не просто так появились.

3. Я думаю, проблема не видна, если она уже решена. Для меня это так, я давно перестал париться за архитектуру фронта, потому что общий концепт уже известен давно:
- Иерархичные компоненты для описания фичи (https://t.me/artalog/1134).
- Отдельные пакеты (монорепа) для переиспользуемых фич.
В моей, кажется совсем не маленькой, практике, вынесение ключевых сущностей в UI-kit решало большинство проблем. И да, не стоит боятся выносить туда большие фичи с бизнес логикой, иногда это нормально, а иногда вам просто нужен еще одна прослойка в виде пакета widgets.
Конечно, есть еще множество не решенных мелочей, вроде того что я пытаюсь решить с computed factory. В целом, организация потока данных, ой ох все эти DI и т.п. - это сложные, но более прикладные и второстепенные вещи.

А FSD не нужен 🌚

artalog

21 Dec, 07:50


Спасибо @siberiacancode за колабу 🤝

Вы тоже можете поучавствовать! Если хотите подправить мой английский или какие-то визуальные составляющие - велком (открыто для всех).

Я бекап сделал, но вы там сильно, все равно, не шалите 😬

Контекст: https://www.youtube.com/watch?v=4tHe0P5AS-Q

artalog

20 Dec, 17:41


Это черновой план. Через 20 минут разберем все по деталям и сделаем его нагляднее.

Ключевые вещи, о которых нужно беспокоиться (справа). Детали на стриме: https://www.youtube.com/watch?v=4tHe0P5AS-Q

artalog

20 Dec, 08:09


🍿 АНОНС СТРИМА 20 декабря в 21:00 по мск

youtube — twitch — vk

artalog

19 Dec, 11:12


Практически регулярная рубрика #why_ff_is_bad (в канале много постов с этим тегом) - нет возможности подписаться на все изменения формы разом, только на отдельные филды.

(извините что спамлю сегодня вас так много, это сообщение отправлено без звука)

artalog

19 Dec, 10:09


А не должны ли мы по умолчанию для всех мутаций (post, put, delete) выставлять keepalive: true, что бы если пользователь закрыл случайно вкладку во время сабмита формы, его запрос и накопленные в форме изменения не потерялись?

https://t.me/kobezzza_channel/653

artalog

19 Dec, 07:10


Это (https://github.com/copilot) очень круто. Жаль, как обычно, галлюцинирует - ссылка невалидна. Из-за "sort=updated" меня вообще редиректит на главную (я бы ждал, как минимум остаться на /issues, а как максимум сохранить остальные рабочие фильтры).

Даже самые крупные продукты делают такие же, как мы с вами, люди :)

artalog

18 Dec, 06:51


🔥 Девтулы 🔥 обновлены для использования в любом приложении, с любым менеджером состояния \ фреймворком \ любыми библиотеками! Просто используйте его как логер!

Напомню, ключевая фича - невероятно мощная система фильтров. Которые сохраняются между перезагрузками страницы 😏

Доки: https://www.reatom.dev/package/devtools/

Более того, добавлен интерфейс синхронизации с любым состоянием в обе стороны!

Например (из реального прода):

import React from 'react';
import { getComponentDebugName } from '@reatom/npm-react';
import { useForm as useRHForm } from 'react-hook-form';

/** A normal `useForm` from react-hook-form with debug options */
export const useForm: typeof useRHForm = (...a) => {
const form = useRHForm(...a);
const name = React.useMemo(() => getComponentDebugName('form'), []);

React.useEffect(() => {
if (!DEVTOOLS) return;
const state = DEVTOOLS.state(name, form.getValues());
const { unsubscribe: unForm } = form.watch(state);
const unDevtools = state.subscribe(form.reset);
return () => {
unForm();
unDevtools();
};
}, [form, name]);

return form;
};

artalog

11 Dec, 22:02


#ночной_холивар

artalog

11 Dec, 07:03


Утечки памяти в рекурсии

А вот миниатюрный пример того с чем я столкнулся: https://stackblitz.com/edit/vitejs-vite-5r3slr4y?file=src%252FApp.tsx

Утечка через замыкание рекурсии. Очень прошу понять упрощенность и синтетичность примера :)
В реальном коде эта связь была реализована через десяток объектов, замыканий и промежуточных колбеков, поэтому я долго ее не мог понять.
Главная проблема, пожалуй, была в том что утечка проявлялась только в рекурсии. Т.е. со стороны ничто никуда не течет. Но со временем и ререндерами мусор накапливается и не очищается, хоть test никогда и не используется.

В реатоме это проявлялось в reatomComponent, который похожим образом ререндерив самого себя замыкал ctx. Фикс заключался в принудительной очистке всех внутренних промежуточных состояний, после их отработки.

artalog

10 Dec, 11:56


А у вас?)

artalog

10 Dec, 07:32


Пользуйтесь: https://github.com/artalar/eslint-plugin-react-component-name

И ставьте ⭐️

artalog

09 Dec, 07:34


Как получить стейт и замемоизировать колбек к его изменению одним хуком.

Живите теперь с этим

artalog

03 Dec, 09:12


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

Будете пользоваться, паблишить в нпм? 👍👎

artalog

30 Nov, 13:14


Почему бы не перегнать старый ишак в статью, подумал я: https://dev.to/artalar/rethinking-javascript-partial-application-referential-transparency-and-lazy-operations-43n9

artalog

29 Nov, 07:32


Сбор подписей за освобождение "JavaScript" ТМ от владения Oracle.
Можете оставить свою, авторизация через GitHub.

https://javascript.tm/

Петиция уже отправлена в соответствующие органы: https://deno.com/blog/deno-v-oracle, но я думаю для истории лишним не будет продолжать наполнять счетчик.

artalog

28 Nov, 08:56


Обожаю соединения инженерии и дизайна
https://meodai.github.io/poline/

artalog

26 Nov, 13:02


Композиция

Честно говоря, все очень плохо. У нас отсутствует возможность композиции фич над примитивом состояния практически во всех реактивных библиотеках.

Простой пример. Можно ли написать библиотеку, которая будет сохранять и восстанавливать данные localStorage для какого-то реакт хука? Да? Вы не поняли, я прошу не написать такой хук, у меня уже есть какой-то хук из UI-kit'а, как мне заперсистеть его данные? Внезапно, такая простая задача не решается вовсе, или решается через доп состояния и лишние реренды \ глитчи синхронизации между ними.

const [persistedState, setPersistedState] = useLocalStorage('KEY')
const [state, setState] = useMyComponentState({ initState: persistedState })

useEffect(() => { setPersistedState(state) }, [state])


(справедливости ради, вы можете вместо useEffect переназначить setState, но это в данном конкретном случае, иногда модель только отдает данные, но не принимает)

Первое срабатывание useEffect будет в никуда, но это не проблема. Проблема - то что не все такие хуки принимают initState.
Ну ладно, а как теперь валидацию сверху накрутить? Такой параметр библиотека уже не принимает. Привет третее состояние и еще эффекты! Уфф...

Что же делать? Нужны заранее подготовленные интерфейсы расширения, которые позволяют внедрять системную логику в состояние, которое уже потом используется логикой доменной. В каком-нибудь MobX при использовании классов вы можете применять декораторы, но они не стандартизированны...

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

Не всегда, конечно, получается сделать все абсолютно модульно. Но вот хороший пример, у нас есть withCache, который позволяет кешировать данные асинхронных запросов с большим набором опций и настроек. В какой-то момент потребовалась возможность персистеть этот кеш. А персистеть куда? У реатома уже есть адаптеры к: localStorage, indexedDB, BroadcastChannel (для воркеров или табов), а в будущем будет для AsyncLocalStorage (react-native) и другие. Все они сделаны с одним интерфейсом расширения и это позволило просто добавить в withCache опцию withPersist, которая принимает и передает нужно расширение нужному атому. В других библиотеках или собственных реализациях вам бы пришлось перепахивать огромную кучу кода, дублируя его или меняя его интерфейсы. У нас же все уже рассчитано :)

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

Кстати, эта модель, без какого-либо изменения кода, прекрасно работает как в React, так и во Vue, попробуйте 😏

artalog

22 Nov, 11:32


Ща за пол часа пересадил одно приложение с react-scripts на vite. Фактически, вся работа заключалась в движении index.html из /public в /, добавлении туда <script type="module" src="/src/index.tsx"></script> и добавление энвам приставки _VITE.

Если вы еще сидите на CRA и боитесь пересесть - дерзайте!

Ставьте 🌚, если у вас еще есть на поддержке проект на CRA.

artalog

20 Nov, 19:29


Как же я люблю инжинирить, не важно в чем!

Простая в изготовлении и обслуживании ветрозащита для спиртовки, повышающая ее эффективность и могущая, на крайний случай, работать как щепочница: https://vk.com/artalar?w=wall768599538_295%2Fall

artalog

20 Nov, 07:45


Дебажу утечки памяти первый раз в жизни с дебагером, а не просто пристальным взглядом 😬
Оказывается в снапшоте есть только поиск по имени класса, пришлось в протекающие данные засунуть созданный для теста пустой TestClass. Тупо, но работает.

Но что важнее - это "Distance". Возможность узнать количество скоупов или свойств объекта через которые до объекта можно дотянуться через глобальную область видимости. И в "Retainers", собственно, это можно сделать как будто инспектируя обычный json. Очень полезно! Хотя, опять же, не хватает блэк боксинга (скрытия) скриптов (скоупов) либ.

artalog

19 Nov, 07:45


Не функциональные требования

"Бизнес не готов платить за тесты"? Или, что действительно входит в самостоятельность сеньора? Помимо технических и социальных навыков, самостоятельность обязательно включает в себя аналитические способности соотносить желания бизнеса и долгосрочное качество их реализации. Качество обеспечивают следующие характеристики технического решения:

- производительность - загрузка и рантайм
- надежность - обработка ошибок
- безопасность - недопущение ошибок и их обработка
- удобство использования - UX
- масштабируемость - количество протекаемых данных
- поддерживаемость и расширяемость кода

Это еще не все!

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

Не соблюдение этих требований лично я считаю багом.

Хороший разработчик умеет вальсировать балансировать между функциональными требованиями бизнеса и не функциональными требованиями качества. Т.е. каждое что, разработчик сам решает как делать.

Эти решения - эта ответственность именно то, что позволяет расти профессионалу и качественно подниматься по карьерной лестнице ;)

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

artalog

17 Nov, 20:23


Чем больше реакт компайлер ускоряет приложение, тем больше это говорит о скиле разработчиков этого приложения 🤷‍♂

artalog

15 Nov, 19:19


Концовка наших стримов, всем огромное спасибо, кто был с нами эти два дня 🎤

artalog

15 Nov, 17:14


@holyjs_channel все ❤️

Программная сетка в этот раз особенно порадовала 👀

Очень ждал этой конфы, встреч! Были большие надежды на доклад. Оцениваю, что у меня все прошло плохо 😅 Будем объективны, хотя это не приятно... Я очень уставший / заболевший, не знаю.
Обидно.
Но хочется сделать какой-то позитивный вывод.
- успел получить несколько инсайдов с нетворкинга
- построил планы на будущее
- накоплено много материала, работаем с ним дальше
+ пол сотни подписчиков на канале 🤗
- не буду больше пропускать зал, всем здоровья!

artalog

15 Nov, 13:18


А вот и "слайды"

artalog

15 Nov, 10:20


Ох что сейчас будет

artalog

15 Nov, 07:43


🥳

artalog

14 Nov, 07:45


error TS2742: The inferred type of '...' cannot be named without a reference to...

Противная ошибка, возникающая при кривом описании зависимостей в импортируемых библиотеках. Например, в github.com/artalar/react-router-typed-object используется тип RouteObject, который react-router импортирует, но не экспортирует из @remix/router. Из-за этого в некоторых ситуациях (дупликация пакетов) на таком простом коде может возникать эта ошибка:

export const ROUTER = createRouter([
/* полторы тысячи строк кода */
])
// error TS2742: The inferred type of 'ROUTER' cannot be named without a reference to...


Интересно эту проблему предлагает решить клод:
- три разных варианта как написать ROUTER: Router (т.е. убить инферинги)
- обновить тайпскрипт
- ну и, конечно, ROUTER: any

АИ все еще туповат 🙃

Я же пытался пересобрать модули правильным образом, благо react-router-typed-object - мой пакет, чекал версии и дедупил их. Но по какой-то причине в IDE все нормально работало, а вот в CI базель собирал как-то все так, что ошибка снова проявлялась.

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

Повторюсь, она в том что какой-то тип используется не явно из зависимостей, к которым нет явного доступа. И предложение клода импортировать тип явно и указать его - логичное, но ломает инферинги, переписывать которые руками я, конечно, не буду. Так как же указать явно тип, но при этом оставить инферинги? В какой-то момент меня осенило:

export const ROUTER = createRouter([
/* полторы тысячи строк кода */
]) satisfies Router;


Все заработало! И ошибка ушла, и инферинги остались. Ооо как мне нравится satisfies, не первый раз меня спасает.

Сейчас еще подумал, возможно можно было написать так:

const CONFIG = [
/* полторы тысячи строк кода */
]) as const;
export const ROUTER = createRouter(CONFIG) as Router & InferRoute<typeof CONFIG>

artalog

14 Nov, 06:31


Привет всем кто на holyjs.ru 😉
Я приеду только завтра утром 🥲
Завтра будет очень много сообщений в канале 😅

artalog

12 Nov, 07:46


О рекламе в канале

На момент написания этого поста у канала уже 3 675 подписчиков, и для меня это большое достижение — спасибо вам! Примерно треть подписчиков с telegram premium, а посты читает больше половины. То есть, это действительно активная и живая аудитория — очень круто!

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

Хочу сейчас провести четкую границу: не пишите мне, пожалуйста, с предложениями о рекламе. Но вы всегда можете поделиться чем-то интересным в привязанном чате — @JentlemanS.

Я хочу сохранить аутентичность канала и то, с чего всё начиналось — регулярные технические заметки и мысли на моем пути программиста. Всем хардкора! <3

artalog

11 Nov, 07:45


В дискорде ollama говорят для локального автосаджеста сейчас топ - ollama run qwen2.5-coder:1.5b (https://qwenlm.github.io/blog/qwen2.5-coder/)

Но я не смог завести ее с https://docs.continue.dev/autocomplete/model-setup#local-offline--self-hosted-experience. То ли сам тупой, то ли wsl шалит (кажется, ollama зависает).

Мб кто-то попробует у себя? Очень интересно, на сколько быстрая и рабочая вещь вообще. Ну и 7b как для автокомплита, если у вас ОЗУ куча?

P.S. совсем скоро еще 3b модель появится!
UPD: подвезли

artalog

08 Nov, 11:09


Очень много всего происходит, много чего есть интересного рассказать, но нет времени на оформление этой информации в посты. Простите 🫢

Пока, предложу посмотреть интересное интервью с @opensource_findings: https://www.youtube.com/watch?v=097tW0c3Aec

artalog

05 Nov, 11:18


А есть еще какие-то роутеры с такой фичей?

artalog

05 Nov, 11:18


В @reatom/[email protected] появилась поддержка path параметра для searchParams.lens и withSearchParams
https://www.reatom.dev/package/url/#search-parameters

artalog

02 Nov, 08:13


Интересно, как с небольшой разницей выходят посты про:

- убийство аишкой программистов

- это не важно, будем в офисе планировать

artalog

01 Nov, 12:11


Бесплатный день конфы: https://t.me/holyjs_channel/1024 🔥🔥🔥


А я 14 и 15 буду в СПб, и так выглядит спойлер моего доклада в excalidraw: 😁

artalog

31 Oct, 18:01


Дейлинайтли ремайндер
link

artalog

30 Oct, 21:47


Какое же это удовольствие.

Я вот не понимаю, почему нет мини проекторов для пленки на светодиодах!? Что бы размером с кружку, не больше.

Штош.

- Смена 8м
- cob лента
- крона
- бустер
- коробка от пленки, фольга, черная изолента, паяльник, пару часов косяков...

Милый ночник готов ^_^

artalog

30 Oct, 07:46


Конкуренции в асинхронной рекурсии

Правду говорят, с великой силой приходит и великая ответственность. В реатоме реализовано множество современных фич, вроде кеширования с богатым набором настроек, undo redo, десятки асинхронных статусов. И все это (и многое другое), в отличии от других библиотек, живет в конкурентном контексте. Буквально, контекст реатома хранит весь стек вызова, каждый новый шаг которого подписывается на AbortController предыдущего, что бы мы могли производить каскадные прерывания каких-то операций, так же как это работает в генераторах, но без их дополнительного синтаксиса. Это сильно упрощает и обезопашивает работу с асинхронными цепочками операций, так как легко позволяет избежать их гонок и конкуренций. Но проблемы начинаются, когда нам эти конкуренции нужно оставить.

Ситуации эти достаточно редкие, но когда они происходят... Самый сложный кейс, с которым я пока что сталкивался, это асинхронная рекурсия. Все просто, у нас есть оператор ретрая (withRetry) который позволяет на асинхронную функцию навесить логику ретрая при ее ошибке сразу или через какое-то время. Что делает ретрай? Просто вызывает эту же функцию еще раз. И если функция сразу не восстанавливается, а продолжает падать, то рекурсивность проявляется в том что ретрай кетчит функцию, функция падает, ретрай вызывает опять эту функцию, опять кетчит, опять она падает... В общем, понятно. Не понятно что делать с абортом, который может прилететь из двух мест:
- Если изначально функция была вызвана из какого-то компонента, который в какой-то момент анмаунтиться - нам нужно отменить и функцию, и ее ретраи, конечно.
- Если сама функция описана как конкурентая (это делают withAbort или reatomResource), то ее вызов отменяет ее предыдущий вызов и эта отмена прилетает в новоиспеченный ретрай. Получается, ретрай отменяет сам себя своей же целевой работой, что не верно.
Конкурентная рекурсия, в которой конкуренции со своими же витками! Если вы все поняли - здорово, но мне это держать в голове и дебажить было очень сложно.

Эта фича существует уже давно, несколько раз по ней прилетали баги и я их фиксил. Фиксил какими-то условиями - смотрел когда прилетает аборт, пытался понять из-за чего и применял или нет его к текущей ветке ретрая. После очередных фиксов и новых тестов несколько месяцев назад показалось что все, наконец, прекрасно работает. Но вот подстава, неделю назад на проде опять обнаружился баг с ретраем. После долгого и мучительного дебага, в который даже пришлось сменить систему тестирования, я обнаружил что написанные ранее тесты были расчитаны на синхронный ретрай, и ломались если ретрай нужно было сделать через какой-то промежуток времени. Потратив еще несколько часов на кумекания как же зарефакторить пачку накопленных условий я, к счастью, сумел это зарефакторить достаточно элегантно (код стал очевиднее) и скоро выпущу патч.

Фикс заключался в том что вместо попыток сделать "вычислительную" логику, нужно ли применять прилетевший из подписки на предыдущий контроллер аборт к текущему контролеру, я перенес все подписки на предыдущий контроллер после вызова функции, но оставил перед вызовом функции ручную проверку состояния предыдущего контроллера (throwIfAborted).

А мораль такова - реатом прошел и продолжает проходить очень сложный путь автоматизируя, упрощая и делая более надежным пользовательский код. Такие баги - это хороший показатель того что мы решаем проблемы, которые, объективно, вам встретить, воспроизвести и исправить будет в одиночку сложнее. Поэтому берите reatom.dev ❤️

artalog

29 Oct, 13:18


Этот момент может сделать лучше только еще больше старов от вас ❤️

Меньше трети подписчиков сделали это! Вам не сложно, а мне приятно:
https://github.com/artalar/reatom

artalog

29 Oct, 09:13


https://blog.toit.io/why-doesnt-v8-fit-on-my-microcontroller-71dc6e2d8f5c

Пока Дарт переживает io.js moment порекомендую почитать другое, просто для интереса.

Если накидаете в тред еще ссылок касающихся истории современных ЯП, их форков, авторов и разработчиков - буду благодарен.

artalog

28 Oct, 12:04


Ребят, опубликовал статью на мою любимую тему :)

Если интересно про нативную валидацию форм, почитайте
https://expressionstatement.com/html-form-validation-is-heavily-underused

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

artalog

25 Oct, 08:42


Пару дней не понимал багу в собственном коде, пока не решил переписать тесты с uvu, на vitest.dev. Оказалось в каком-то случае (пока не понял в каком) уву вылетает ваще не с той ошибкой и не в том тесте, что на самом деле.

Очень жаль, мне нравилась простота и изоморфность uvu.

Завел ишак на миграцию реатом на витест, #help_wanted

artalog

21 Oct, 15:49


Напомню, там есть мой наикрутейший 😎 доклад, Генерация реактивной модели из контрактов 👍.

artalog

21 Oct, 15:49


#видеозаписи

Новая HolyJS уже на носу — пришло время полностью открыть доклады предыдущей.

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

YouTube | VK Видео

artalog

18 Oct, 07:40


Андрей выдаёт базу про опенсурс и недавние события: про WordPress, похожие истории.

Де-юре, wp engine все делали нормально. А ещё, де-юре, WordPress последующей своей реакцией по блокировке и отгораживанию wp engine тоже ничего плохого не сделали. Так в чем проблема? "Кодекс чести"!

Проблема морального характера. А такие проблемы решаются одним простым источником, "хозяин ищет работников, матфея 20, 1-16" прекрасно описывает эту ситуацию, на что договорился - то и получил, а остальное - зависть.

Страх упущенной выгоды - чувство, действительно, не приятное. Но можно очень просто провести мысленный эксперимент в котором wp engine не было, стало лучше? Нет, они же занимались, в том числе, популяризацией ворпресса. Нуу, можно пофантазировать что на их месте могла бы быть лучшая компания с большим гивбеком, но на основе таких фантазий строить свое мировоззрение очень токсично.

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

artalog

17 Oct, 08:38


Ставьте лайк кто покупал себе VPS и настраивал там все сам по SSH, без кнопочек в ui

artalog

15 Oct, 07:25


https://github.com/artalar/react-router-typed-object

Как и обещал (пол года назад 🫢), делюсь с вами типизированным конфигом роутера. Очень важно заметить, что либа лишь выводит пути и типы роутов и не требует никакого дополнительного синтаксиса (апи), а использует "нативный" RouteObject из react-router.

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

Накидайте звездочек! https://github.com/artalar/react-router-typed-object

artalog

14 Oct, 12:18


https://github.com/tc39/agendas/blob/main/2024/10.md

Extractors for Stage 2
https://github.com/tc39/proposal-extractors

Structs and shared structs for stage 2
https://github.com/tc39/proposal-structs

JSSugar/JS0 discussion https://docs.google.com/presentation/d/1ylROTu3N6MyHzNzWJXQAc7Bo1O0FHO3lNKfQMfPOA4o/edit?usp=sharing

Decimal updates in JSSugar/JS0 context
https://github.com/tc39/proposal-decimal/

Explicit compile hints discussion
https://docs.google.com/presentation/d/1X1k-rzMlqLS3MC-pgogVJZqPTIfUyLIo7H4TOFhCStg/edit?usp=sharing

Restricting subclassing support in built-in methods: Telemetry Results
https://github.com/tc39/proposal-rm-builtin-subclassing

Temporal
https://github.com/tc39/proposal-temporal
https://dev.to/artalar/is-temporal-still-temporal-19f0
https://ptomato.name/talks/tc39-2024-10/

artalog

14 Oct, 12:18


Таймкоды (кликабельно):
1. 4:39 - можо ли попасть на лайвстрим t39
2. 8:20 - JSSugar/JS0
3. 24:00 - шарбл структуры
4. 33:54 - stage 2.7
5. 37:10 - compile hints
6. 52:30 - Temporal
7. 57:40 - Build in subclassing

artalog

14 Oct, 12:16


Live stream finished (1 hour)

artalog

14 Oct, 11:00


Live stream scheduled for

artalog

14 Oct, 10:59


Live stream started

artalog

14 Oct, 10:49


Через 10 минут обсудим с @dmitrymakhnev прошедший митинг TC39 (запись будет).

https://github.com/tc39/agendas/blob/main/2024/10.md

artalog

11 Oct, 09:00


Девтулзы написаны на reatom/jsx, который помимо нереального перфа имеет встроенный очень простой, но при этом очень мощный АПИ для работы со стилями. У него практически отсутствует оверхед на перф - используются нативные нестинг и цсс переменные, и это очень удобно!

artalog

09 Oct, 08:14


Геймченджер входит в комнату...

Состоялся релиз @reatom/[email protected] в котором был добавлен режим графа \ логов операций. Он содержит огромное количество фич, сейчас кратко их перечислю (в ближайшие дни будет подробное видео).

Фильтры персистяться в локалсторадж, вы их можете создавать сколько угодно и включать или менять их тип когда вам угодно. Все они работают регекспом по имени экшена \ атома. На первом скрине создано три фильтра, базовый (не удаляемый) "private" и два кастомных "data" и "page". У каждого фильтра есть переключаемый тип применения:

1 - Показать логи соответствующие инпуту.

2 - Исключить логи соответствующие инпуту.

3 - Подсветить логи соответствующие инпуту.

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

5 - Выключение фильтра.

6 - Удаление фильтра.

7 - Поиск по значениям внутри отфильтрованных логов! Обратите внимание, тут перф может очень сильно скакать в зависимости от объема ваших данных.

8 - Включение отображения инспектора данных (третий скрин) для каждого лога.

9 - Включение открытия инспектора данных при ховере по "🗐"

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

11 - Фиксация инспектора данных для конкретного лога.

12 - Натравить parseAtoms на данные (удобно при атомизации).

13 - Залогировать данные в консоль.

14 - Перегнать данные в JSON и сохранить в буфер обмена.

15 - Закрыть инспектор.

Любой фидбек приветствуется 😀 Особенно ПРы по улучшению дизайна и доступности. Но и я не планирую останавливаться на достигнутом и буду дальше улучшать инструменты разработчика ❤️

artalog

08 Oct, 19:09


В чате активно обсуждают драму с веб компонентами. Соберу все в одном посте, го в тред.

(tldr: автор Солида на них набросил, ему начали кидать в ответ, тем тоже начали отвечать и тп)

Обзор в подкасте: https://t.me/webstandards_ru/7391

Текстом:

Web Components are not the future
Web Components are not the future — they’re the present
Web components are okay
Web Components are not framework components — and that’s okay

@dima_takoy говорит вся правда начинается тут: Why Web Components Failed.

@bano_dev говорит что мы ниче не поняли и WC - это адекватный стандарт, просто медленно развивающийся, в нормальном темпе неломающегося веба.

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

Я сам ими очень мало пользовался, но впечатление все равно сложиться успело и не самое радужное. Что меня очень беспокоит:

- declarative shadow dom появился лет через 10 (ну ладно меньше), а должен был быть сразу
- shadow dom чрезмерно топорно решает проблему, создавая другие, явно сделали неподумав, лееры намного лучше решают эту проблему
- нет attach (connect) евентов у всех элементов, жалко что ли? Да, это камень именно к WC, потому что удовлетворив свои нужны, не подумали об остальных
- глобальный нейспейс на строках удобно, но все же шатко и не скейлиться. Ну ты в любой момент имея легаси с каким-то <my-menu/> не сможешь подрубить новую либу, которую так же назвали. Это пример тупой, но всякое бывает. Решение принципиально не надежное и держит наготове очень большие палки в колеса.

Чета еще было + это я еще продакшен большой на них не писал. Мой главный поинт - они дизайнятся ваще не для веба и не для людей. Со стороны кажется что они дизайнятся под группку конкретных персон. Надеюсь я ошибаюсь.

artalog

07 Oct, 18:50


https://www.smashingmagazine.com/2022/09/inline-validation-web-forms-ux/

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

Как работает ленивая валидация?

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

Преимущества ленивой валидации

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

Примеры применения

- Поле электронной почты: Если пользователь вводит адрес без символа "@", система может мягко подсветить поле, намекая на возможную опечатку, но не блокировать ввод.
- Пароль: Отображение индикатора надежности пароля, который обновляется по мере ввода, но не требует обязательного соответствия определенным критериям.
- Номер телефона: Автоматическое форматирование введенного номера без требования строго соблюдать определенный формат ввода.

artalog

06 Oct, 07:44


o1-preview лучше половины джунов на рынке... И уж точно дешевле и быстрее. Скоро будет очень сильный гап в образовании, который не понятно как заполнять. Мидлы и помидоры будут управлять флотом аишек. А как стать этим самым мидлом - даже не представляю.

И это не эксклюзив OpenAI, bolt.new, который на "старой" Sonet, уже прекрасно работает (ну как джун). Что будет еще через пол года...

artalog

03 Oct, 13:27


Полторы сотни комментариев, и это только то что попало в тред (в чате вдвое больше).

Куча негативных реакций - понятно. Но в целом, вы считаете такие посты полезными (заставляет подумать, интересные комментарии)? 👍👎