Илья Лесик

Илья Лесик

Темы
Неделя
Nov 30, 2020 → Dec 6, 2020

Архив недели @ilialesik

Понедельник


Всем привет! На этой неделе с вами @ilialesik. Поговорим про опен-сорс, организацию ИТ-сообществ, как интегрировать дизайн и разработку и много чего еще.

Немного про меня:

Основатель и Software Engineer в компании @lessmessdev. Занимаемся IT-аутсорсингом и консалтингом.

Организатор эвентов сообщества @_tverio

Опен-сорс разработчик, мой основной проект: github.com/react-figma/re…

Квалифицированный преподаватель-исследователь. Изучал исследование операций и экономику общественного благосостояния в МГУ. Имею ряд публикаций по теме istina.msu.ru/profile/iliale…

Редко, но метко выступаю на конференциях holyjs-moscow.ru/2020/msk/talks…


Хочу постепенно трансформироваться из аутсорсера в продукт, поэтому пробую себя в стартапах:

Интенсивы по 3D печати + образовательная настольная игра additivka.ru

b2b маркетплейс для ИТ-консультантов brainhub.network @brainhubinc

Родился и живу в городе Тверь и являюсь его неформальным амбассадором.

🔥Тред (Илья Лесик)
Микробиблиотек тред

Микробиблиотека - это пакет, который Решает какую-то одну небольшую проблему Экстремально мало весит

Примеры моих собственных библиотек:

Реакт хук для того чтобы, фетчить данные: github.com/ilyalesik/reac…

Реакт хук для медиа-выражений: github.com/lessmess-dev/r…

Модуль для работы с localStorage для библиотеки @EffectorJS github.com/lessmess-dev/e…

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

Производительность - однозначно тренд это года.

А начиная с марта 2021-года Гугл будет использовать производительность на мобильных девайсах как основную метрику для ранжирования сайтов developers.google.com/search/blog/20…

Как же сделать свою микро-библиотеку?

Если есть возможность - лучше писать на es5 без транспилиции

Для того, чтобы случайно не написать что-то на современном ES, можно использовать ESLint

Мой конфиг для микробиблиотек: github.com/lessmess-dev/e…, использует плагины es5/no-es2015, es5/no-es2016 под капотом

И, конечно, нужно настроить size-limit @andrey_sitnik на CI/CD, чтобы контролировать размер бандла. Конфиг выглядит примерно так
notion image

Типы можно подкладывать отдельно, в виде .d.ts и .js.flow файлов.

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

Но, конечно, есть смысл написать тесты.

Еще примеры микро-библиотек:

Wouter - роутер для React и Preact, автор @mlfrg github.com/molefrog/wouter

eo-locale - интернационализация для приложений, автор @smartass3000 github.com/ibitcy/eo-loca…

react-colorful - колор-пикер, автор @Omgovich github.com/omgovich/react…

tinyhttp - веб-фреймоворк, автор @v1rtl github.com/talentlessguy/…

И множество библиотек @andrey_sitnik, который является основным популяризатором этого подхода:

Стейт-менеджер github.com/storeon/storeon

Генерация идентификаторов github.com/ai/nanoid

Есть еще хорошие примеры? Скидывайте в тред

🔥Тред (Илья Лесик)
@jsunderhood 3 неделю подряд (а может и не подряд) рассказывают про микробиблиотеки. Что так наболело?
Рассказывают много, но до сих пор для многих нужд нет хороших микро-библиотек! twitter.com/dmtrKovalenko/…

Множество библиотек для реакта берут начало в 2015 году и не соответствуют современным требованиям.

Что уж там говорить, я даже не видел нормального слайдера. До сих пор приходится тащить react-slick, кодовая база которого тянется из jquery

Мне кажется, это отличный способ вкатиться в опен-сорс - написать микро-версию с контролем размера с помощью size-limit

webpack-bundle-analyzer на проектах потом скажет вам "спасибо". 🙂

🔥Тред (Илья Лесик)

Мне вот кажется, что вместо библиотек для функций на 5 строчек (а-то и на одну), лучше бы в каждый проекте их самому писать или копировать, а-то получится как с is-promise или leftpad. twitter.com/jsunderhood/st…
Немного поясню. Для меня микробиблиотека это не про оборачивание однострочника в пакет, а про контроль размера бандла. Который иногда может достигаться за в том числе за счет отказа от лишних фич. twitter.com/shuvalov_js/st…

Возможно терминологически это не совсем корректно, но библиотеки вроде Wouter и eo-locale, которые, мягко говоря, не однострочники, я тоже отношу к микробиблиотекам.

@jsunderhood Сам Preact в некотором роде микробиблиотека :) Плюс у Джейсона много других хороших штук есть github.com/developit?tab=… (сам я использовал npm.im/unistore и, вероятно, сейчас уже менее актуальные npm.im/decko и npm.im/unfetch) pic.twitter.com/PyEn0nT7di
Да! Preact это тема twitter.com/git_huh/status…

Вторник


Раз уж заговорили про микробиблиотеки, то давайте обсудим микрофронтенды. Сам не разу не пробовал. Кто что думает?

На эту тему на последнем @HolyJSconf был отличный доклад Павла @nodkz Черторогова. holyjs-moscow.ru/2020/msk/talks…

Попробую раскрыть тему, в которой довольно немало покопался, пока разрабатывал github.com/react-figma/re… - Реакт рендереры и реконсиляция. Тред.

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

Самый известный пример это React Native reactnative.dev - на котором можно разрабатывать приложения под iOS и Android, используя нативные виджеты операционных систем.

React Native это реакт-рендерер, который разрабатывается фейсбуком, но есть множество сторонних

Например, Ink github.com/vadimdemedes/i… - позволяет писать консольные утилиты на React

React Hardware github.com/iamdustan/reac… позволяет управлять железками (например, Arduino) с помощью React

github.com/pmndrs/react-t… - реакт рендерер для Three.js, позволяет крутить 3D-модельки

github.com/diegomura/reac… - рендерер реакта в PDF

Есть целое семейство рендереров в редакторы для дизайнеров, первым из которых был github.com/airbnb/react-s…

Более подробно о разных реакт-рендерарах можно почитать в моей статье dev.to/lessmess/react…

А наиболее полный их список есть тут github.com/chentsulin/awe…

Столь большую гибкость обеспечивает библиотека npmjs.com/package/react-…

Это пакет, который позволяет писать свои собственные рендереры. В нем хост средой называется среда, в которой должен работать этот реакт-рендерер

Для того, чтобы описать, как работать с конкретной хост средой, требуется описать хост-конфиг
notion image

Библиотека react-reconciler использует паттерн Visitor, то есть при обходе дерева реакт-элементов будут вызываться методы хост-кофига, на вход которым будем подаваться элементы по одному

По сути дела требуется, в нужных местах описать, как обрабатывать создание, вставку, удаление элементов

Например, createInstance будет вызван, когда требуется создать новый элемент. На вход придет тип элемента (например, div в вебе) и его пропсы
notion image

Можно ли написать реакт рендерер без библиотеки react-reconciler?

В теории да, в mvp библиотеки react-figma и в старых рендерарах вроде react-sketchapp (на момент ее создания еще даже не существовало react-reconciler), так и было сделано

Когда мы только, начинали разрабатывать свой рендерер, первая наивная реализация выглядела примерно так: gist.github.com/ilyalesik/0a58…
notion image

После того, как babel (или ts-компилятор) трансиплирует jsx, получится множество вложенных вызовов функций React.createElement

React.createElement будет возвращать разные вид данных в зависимости от ситуации, но в целом это уже самый обычный джаваскрипт

Это будет некое дерево, которое можно попытаться рекурсивно обойти. В поле type элементов этого дерева будет приходить тип реакт-элемента.

Это может быть строка для нативных элементов, или функция - для компонентов-оберток

Такую реализацию можно даже попытаться усложнить, но в целом нет смысла - react-reconciler сразу поддерживает множество вещей

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

Более подробно про то, как написать свой рендерер можно послушать в докладе Софи Альперт youtube.com/watch?v=CGpMlW…

В докладе Ярослава Лосева @losyear на Tver.io youtube.com/watch?v=E1G2rM…

И на последнем @HolyJSconf, есть слайды holyjs-moscow.ru/2020/msk/talks…

Одним из самых серьезных челенджей при написании рендерера была реализация HMR - для ее реализации пришлось менять архитектуру

После перехода на react-reconciler схема выглядела так:
notion image

Мы запускали рендерер в мейн треде и создавали в методах хост-конфига ноды сразу, с помощью плагинного API фигмы figma.com/developers

Это отлично работало, тем что методы хост-конфига не могут быть асинхнронными, а апи фигмы - более-менее синхронно

За исключением HMR. Дело в том, что main-тред в Фигме надежно изолирован в песочнице и не позволяет использовать привычные браузерные апи (например, зафетчить какие-то данные из сети).

В фигма main трейд запускается с помощью движка QuickJS, написанном на C. Что само по себе создавало немало проблем - он хоть и поддерживает сразу es6, но падал банально на комментариях, слово "import" bellard.org/quickjs/

Написан на C, но ведь Фигма web-based, скажете вы. Так вот, они ранят этот движок с помощью WASM. Более подробно подробно об их плагинной песочнице можно почитать в статье figma.com/blog/how-we-bu…

Так вот, для нормальной работы HMR нам нужен был WebSocket. WebSocket в фигме можно использовать только из UI-треда. Поэтому мы приняли волевое решение переписать рендерер, чтобы он ранился из UI-треда

Архитектура стала выглядеть примерно так, вместо того, чтобы создавать объекты непосредственно в методах хост конфига, мы стали посылать в сообщения в main-тред фигмы:
notion image

К счастью, есть реализация rpc для фигмы, которая частично облегчила эту задачу: github.com/Lona/figma-jso…

Но все равно, реакт реконсилер с промизами не работает, поэтому пришлось генерить айдишники, чтобы связывать ноды
notion image

Потому что реакт-реконсилер аппендидит за один проход, для этого по сгененрированным id находим ноды и соединяем их
notion image

Итоговый реквест выглядел примерно так github.com/react-figma/re…

Это же позволило достаточно легко реализовать поддержку React DevTools чуть позже github.com/react-figma/re…

На всякий слуйчай еще приведу такую картинку, main тред предназначен для работы с документом, UI - для того чтобы реализовать интерфейс плагина
notion image

Не мало хлопот также доставила поддержка стилизации с помощью Yoga Layout. Эта библиотека обеспечаивает поддержку лейаут-свойств - маржины, паддинги, флексбоксы yogalayout.com и используется, например в React Native

Поскольку нам было важно обеспечить совместимость по API с реакт нейтив, мы взяли именно ее react-figma.dev/docs/styling

Проблема была с тем, что Yoga не хотела запускаться внутри main-треда, пришлось ее загонять в UI-тред.

На вход - JSON-дерево c элементами и их стилями, на выходе абсолютные координаты, которые применяются к фигма-нодам

В Фигма постепенно развивается Auto-layout, все больше новых фич. Я думаю, постепенно мы сможем выпилить Yoga Layout, но пока еще не все свойства можно реализовать на авто-лейауте

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

🔥Тред (Илья Лесик)
@iGontarev @jsunderhood @lukeed05 Ну даже 10 строк не всегда желательно копипастить. А библиотека - это не просто код, это: персистентность (==предсказуемость) кода за счет версионирования при паблише, тесты(!), продуманное апи и документация, типы, место репорта багов (обычно код на GH).

Кто как относится к react-native? Мне самому кажется не самым плохим выбором для кроссплатформенной разработки по нескольким причинам:

Достаточно много специалистов и низкий порог вхождения для React разработчиков под веб

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

Поддержка крупного вендора - React Native разрабатывается фейсбук

Это JS и можно использовать привычные библиотеки и подходы.

🔥Тред (Илья Лесик)

Среда


Поговорим за стейт-менеджмент? Кто что использовал для управления стейтом?

Помимо понятного всем Redux, который до сих преследует в кошмарах и легаси-коде я использовал:

Apollo Client - пожалуй самый энтерпрайзный вариант из не-redux. Энтерпрайзный за счет того, что код на нем получается более менее одинаковый у всех. Легко подключать еще разработчиков на проект apollographql.com/docs/react/

Я состовлял awesome-list по Эффектору github.com/effector/aweso…

И писал статью: dev.to/lessmess/react…

Использовал также Стореон github.com/storeon/storeon - офигенно для маленьких проектов

Тысячу лет назад использовал MobX - но не зашло, магия + декораторы (фу-фу-фу) + слишком здоровый бандл

Писал и просто на Реакт хуках/стейте - но не рекомендую, код быстро становится неподдерживаемым.

Что еще интересно?

github.com/artalar/reatom - выглядит очень круто, но я сам, к сожалению, не пробовал. Автор - Артем @artalar_dev

У Артема также есть список с разными стейт-менеджерами gist.github.com/artalar/e5e8a7…

github.com/pmndrs/zustand - мне просто нравится иллюстрация, не пробовал

Интересная встреча по стейт-менеджерам была на @_tverio youtube.com/watch?v=cUSyJk…

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

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

Например, Firebase, в котором можно подписываться на изменения firebase.google.com/docs/database

Можно написать врапер над RxJS rxjs-dev.firebaseapp.com/guide/overview. Уже есть реактивность, надо просто где-то накапливать стейт. Так, например, делает undux.org

Логакс, вдохновленный CRDT logux.io


Одно точно могу сказать: стоит выйти из зоны комфорта в виде Redux и попробовать какой-то альтернативный стейт-менеджер. Если не на реальном проекте, то хотя бы на пет. Возможно ваша жизнь никогда не будет прежней, как моя после Эффектора dev.to/lessmess/why-i…

🔥Тред (Илья Лесик)
У нас эффектор в продакшене, например. twitter.com/jsunderhood/st…
Так-то у нас тоже. Но мало, из-за того что куча легаси. twitter.com/vkozulya/statu…

Мне всегда хотелось соединить дизайн и разработку, поэтому стартую тред по дизайн-системам, по мотивам моего доклада на @HolyJSconf holyjs-moscow.ru/2020/msk/talks…

Основополагающей книгой по дизайну для меня является Атомик Дизайн Брэда Фроста bradfrost.com/blog/post/atom…

Его основной концепт - что дизайн должен идти от простого к сложному
notion image

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

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

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

UI-кит пользуется значениями из дизайн-системы, например вот тут для компонента кнопки используется цвет:
notion image

Как правило, UI-кит содержит множество разных состояний компонентов
notion image

Поверх UI-кита и стайл-гайда также можем строить что-то еще, например сделать каталог компонентов в Storybook и набор ассетов для дизайнеров. Архитектура выглядит примерно так:
notion image

По аналогии с подходом Infrastructure as Code можно использовать подход, который я бы назвал Design System as Code.

В принципе, все описанное выше можно положить в код.

Стайл-гайд - укладывается в обычный JS-конфиг, поскольку это в принципе просто значения

Визуальные элементы можно реализовать в виде компонентов на React. Для кроссплатформенности этот код лучше описывать сразу на react-native.

Такую дизайн-систему можно также будет отобразить в виде каталога компонентов, например, с помощью Storybook.

И отобразить в Figma, для того, чтобы продуктовые дизайнеры могли собирать из нее экраны. Для этого подойдет github.com/react-figma/re…

Как это выглядит и работает, можно посмотреть в примере github.com/react-figma/Pr…

В примере реализован кусочек дизайн-системы ГитХаба Primer styleguide.github.com/primer/

У меня не было задачи перенести задачи полностью, но зато продемонстрировано, как сделать так, чтобы код был single source of truth для дизайн системы.

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

Это конечно несколько контр-интуитивно, что мы из кода помещаем что-то в Figma. Нам даже пришлось добавить строчку в ридми
notion image

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

Есть множество неплохих плагинов, например github.com/bernaferrari/F…

Была демка даже у нас github.com/react-figma/co… - использует Babel для формирования AST дерева

Но большинство решений умеют генерить только под какой-то ограниченный стек, который не факт что вам подойдет

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

А потом все это мержить, если после этого на дизайне что-нибудь поменяется

По сути дела, нужно развитие искусственного интеллекта, развитие алгоритмов вроде GPT-3

Так что пока я вижу себе процесс следующим образом: дизайн-систему отрисовывает дизайнер -> переносится в код -> используется продуктовыми командами
notion image

В случае необходимости внесения изменений цикл повторяется.

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

Код там не такой сложный - конфиг стайл-гайда + "тупые" компоненты. А разработчики могут ревьюить то что получается - это же код!

Слайды из доклада также можно полистать на Спикердеск speakerdeck.com/ilyalesik/kak-…

Using react-native syntax to make Figma components - I'm very impressed. twitter.com/jsunderhood/st…
Yep, react-figma made it possible. 😎 twitter.com/Moxorama/statu…

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

Для описания стайл-гайда я рекомендую использовать System UI Theme Specification github.com/system-ui/them…

С ним легко реализовывать темизацию, и он совместим со множеством уже существующих решений, например его используют Chakra UI и rebass для кастомизации chakra-ui.com

Он без проблем интегрируется с react-figma и другими примитивами с помощью пакета github.com/react-figma/re…

Для описания дизайн-системы можно использовать MDX, вот пример: github.com/react-figma/re…

Я за то, чтобы была гибкость в выборе инструментов и возможность их комбинировать.

🔥Тред (Илья Лесик)
Где вы пишите статьи? Я вот предпочитаю dev.to, потому что он совместим с маркдауном и опен-сорсный

Пробовал медиум, но на нем бесконечные пре-роллы

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

Впрочем платформа может и не дать ничего

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

Частично помогает Grammarly и app.gramara.com, но много недочетов все равно остается

Мой английский далек от идеала, но написание статей помогает его учить

Обычно начинаю что-то писать на dev.to, потом выгружаю это в Notion (мардаун), даю кому-нибудь почитать, вношу правки, экспортирую в маркдаун, подменяю в dev.to

Мне помогает академический опыт, хоть и технологически там все совсем по-другому

Пишешь на LaTeX, потом передаешь это в журнал

Это если, конечно, сильно упрощать. Так-то между этим может быть миллион итераций и работы с научным руководителем.

И конечно же, рецензирование.

Вообще, IT - это в какой-то степени калька с научного мира. Статьи, конференции, доклады - все это уже там было и есть.

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

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

Не может не радовать, что появляются продукты на стыке - например, deepnote.com - переработанный ноутбук для вычислений

@jsunderhood А ещё лучше показать статистку где 4 последних поста имеют <25 views twitter.com/theKashey/stat…
Все как всегда - мало написать, надо еще и продвинуть. twitter.com/theKashey/stat…

@jsunderhood После истории с деградацией Medium — только свои блоги
Путь настоящего самурая! twitter.com/andrey_sitnik/…

У меня еще конечно, всегда очень зависит то, как я пишу, от того, в чем я пишу. Это касается и статей и презентаций

Чем-то похоже на теорию о том, что язык может влиять на экономику - люди по разному думают на разных языках econs.online/articles/ekono…

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

Для презентаций я в основном использую либо shower Вадима Макеева @pepelsbey

Либо Keynote - в нем проще накидывать, но в Шовер - это код, со всеми преимуществами, можно сделать любой эмбед

🔥Тред (Илья Лесик)

Четверг


@jsunderhood @HolyJSconf . @ilialesik спасибо за рекомендацию! Не у всех пока есть доступ к видео. Поэтому давайте я прям тут расскажу про новый способ построения микрофронтендов, который появился в Webpack 5 – а именно, про Module Federation. Слайды: bit.ly/module-federat… Ну что погнали!

@jsunderhood @HolyJSconf . @ilialesik спасибо за рекомендацию! Не у всех пока есть доступ к видео. Поэтому давайте я прям тут расскажу про новый способ построения микрофронтендов, который появился в Webpack 5 – а именно, про Module Federation. Слайды: bit.ly/module-federat… Ну что погнали!
Я попросил Пашу подробнее рассказать про #ModuleFederation, встречайте “гостевой” тред twitter.com/nodkz/status/1…

Стартую тред про опен-сорс разработку и ее проблемы, в продолжение последнего эвента на Tver.io. youtube.com/watch?v=ZnsRH9…

Как это часто бывает - мало что-то закодить, на это еще это как-то продвинуть.

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

На эту тему есть уже ставший классическим доклад Андрея @ai Ситника youtube.com/watch?v=DU0LiH…, что-то новое сказать сложно

Разумеется, нужно грамотно оформить ридми - люди оценивают прежде всего глазами, да и поисковую индексацию никто не отменял

Разумеется, если вы сделали какой-то опен-сорс проект - его надо донести до той аудитории, для которой он предназначен

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

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

Прежде всего - непонятно, что с финансированием, "кто платит за банкет". На Tver.io мы ломали копья на эту тему, но кажется, так окончательно ни к чему не пришли.

Вариантов вообщем-то несколько:

Разработчик пилит опен-сорс в свободное от работы время. Это обычная история на начальном этапе, но чревата тем, что может возникать систематическая нехватка времени на развитие и поддержку + bus-фактор

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

Из минусов - сообщество в этом случае не влияет на развитие библиотеки, поскольку требования формируются из компании, которая является его оунером и у нее нет стимулов прислушиваться.

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

Также, если библиотека станет не нужна компании - она вероятнее всего умрет.

Опен-сорс, который нашел способ как монетизироваться. Иногда очень даже неплохо монетизироваться - как в случае с Vercel (разработчики Next.js), которые получили $21m инвестиций finsmes.com/2020/04/vercel…

Как правило, речь о неких платных облаках. Так делает очень много кто. Например, ghost.org, strapi.io, gatsbyjs.com/cloud/

К сожалению, возможно скатывание во вариант 2

Частные донаты - например, Open Collective + Pateron

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

А тот же Патреон еще и требует дополнительных усилий на генерацию контента

Инвестиции компаний-пользователей данного опен-сорса + платные поддержка и консультирование

Это выглядит более интересно, но, конечно трудно осуществимо на ранних этапах. И точно также требует усилий - например, внедрение опен-сорса в режиме пилота в компании

И отчасти похоже на вариант 3

Фонды и грантовая поддержка. Примеры - Apache и Linux

Этот вариант мне кажется наиболее перспективным в будущем, поскольку давно зарекомендовал себя в других сферах (наука, например) как способ аккумулировать и вкладывать значительные средства в развитие

Он похож на вариант 5, с той разницей, что появляется третья сторона, которая решает как должны распределяться средства

У этого есть как плюсы так и минусы.

Из минусов - могут возникать вопросы к тому, как именно распределяется финансирование - точно ли это справедливо

Из плюсов - компании спонсоры имеют меньше влияния на распределение средств, меньше соблазна погнаться за сиюминутной пользой в ущерб общим интересам

Государство. ИТ-сфера склонна не любить государство (и на то есть основание), но в конечном итоге именно оно печатает деньги и может наполнять ими фонды.

Опен-сорс - это понятное общественное благо и довольно давно известно, что вложения в общественное благо идут на пользу экономике, даже если не видна непосредственная польза этому самому государству

Поскольку опен-сорс - это инфраструктура, на которой сейчас держиться пол-интернета, его развитие косвенно помогает развитию все остального

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

🔥Тред (Илья Лесик)

Пятница


Тред про локальные ИТ-сообщества, через призму моего опыта организации эвентов в Tver.io.

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

Tver.io появилось почти 10 лет назад. Спойлер - в декабре планируем отмечать юбилей:
notion image

При этом активно участвовать в организации сообщества я начал примерно 2.5 года назад

Начал я с того, что просто пришел и попросил дать возможность повести инстаграм сообщества. В то время я как раз активно пользовался инстаграмом. instagram.com/tver.io/

Поскольку я визуал и эстетика для меня очень важна, через какое-то время я запустил редизайн сообщества. Первое, что мы начали менять - это обложки событий на meetup.com.

Дизайн обложек до:
notion image

Первая обложка в редизайне, которую сделала дизайнер и (по совместительству моя жена) @Lera_Lesik, выглядел так:
notion image

В то время мы называли события по названиям событий или по праздникам, которые были в этот день. 18 октября - Советский космический аппарат «Венера-4» успешно вошёл в атмосферу Венеры и начал её изучение. Поэтому Rocket.

В марте 2021 года @Lera_Lesik сделала редизайн логотипа, он стал таким:
notion image

И например, во варианте для стикеров:
notion image

Постепенно события стали становится более специализированными, под конкретную тему, например Tver.io Pure Meetup - про функциональное программирование meetup.com/tverio/events/…

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

Начали делать разные эксперименты, например, на Tver.io Makers Meetup люди рассказывали исключительно про свои разработки meetup.com/tverio/events/…

Короновирус, который пришел в РФ в начале 2020-года, конечно, сильно вмешался в работу сообщества.

Первым пострадал Tver.io JavaScript Meetup meetup.com/tverio/events/… - он планировался как офлайн мероприятие сильно задолго до наступления изоляции

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

Стало понятно, что классический формат митапов - 2-3 доклада + вопросы, не совсем хорош для онлайна.

Начали делать дискуссионные клубы по темам, первым из них стал No Code Talks meetup.com/tverio/events/…

Особое место у нас всегда занимала фронтенд разработка и JS. Такие события всегда набирали самое большое число зрителей. Например, State Management Talks в пике в эфире смотрело 150 человек из 26 городов одновременно.


Кажется, что делать события просто, но на самом деле это работа, которая делится на множество направлений.

Если совсем упрощать - делится на операционные вещи и на содержательную часть.

Операционная часть: - Организация анонсов и SMM - Поддержка сайта - Граф дизайн - Коммуникация с партнерами

В доковидное время к этому еще добавлялись: - Организация фото/видео съемки - Логистика спикеров - Кейтеринг - Коммуникация с площадками - Печать стикеров и бейджей

Содержательная часть: - Выбор тем и спикеров - Ведение эвента

Я много занимался выбором тем и приглашением и приглашением спикеров.

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

Старался немного "заглянуть в будущее" и понять, что будет важно через год или два

Часто мне мог просто нравится какой-то спикер, а все остальное мероприятие проектировалось из "основного" доклада

Важная вещь, которую мы лишились из-за короновируса - это, конечно, afterparty.

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

🔥Тред (Илья Лесик)
Мой топ видео tver.io - на случай если будете искать, что посмотреть в выходные. 😀

Если наконец хотите узнать, что такое монады - доклад @_bravit youtube.com/watch?v=IkXg_m…

Про производительность Postrges, это скорее воршоп. На английском языке youtube.com/watch?v=xqTNce…

Продвижение опен-сорс проектов @ai youtube.com/watch?v=DU0LiH…

Доклад @_tikhon про типографику youtube.com/watch?v=_2VxlB…

Толком-то фронтенда нет, но ничего, сейчас наверстаем.

Доклад @ovrweb про асинхнронность youtube.com/watch?v=PZiEFH… - по длине и хардкорности скорее ближе к HolyJS.

Про Вебпак и линзы от @AntonK52 youtube.com/watch?v=qcj2bX…


Про стилизацию от @_lttb youtube.com/watch?v=b7vBKp…

Не совсем доклад, но все равно много полезного - в дискуссии про стейт-менеджемент: youtube.com/watch?v=cUSyJk…

Доклад "Семантика для циников" Вадима Макеева youtube.com/watch?v=z91F33…

Если что-то не попало в список, не значит, что оно было хуже. Всех спикеров кто у нас выступал, мы ценим.☝️

🔥Тред (Илья Лесик)

Суббота


Помимо дизайн-систем, у github.com/react-figma/re… есть еще интересные интерсные применения, о чем расскажу в треде ->

Библиотеку можно использовать для автоматизации рутинных дизайнерских операций, можно легко строить интеграции различных API с фигмой. Есть пример с фетчингом данных в репозитории: github.com/react-figma/re…

В addtivika.ru мы разрабатываем настольную игру для обучения 3D-печати, в которой есть множество карточке - с принтерами, лабораториями и тому подобным.

Карточек довольно много - 100 штук, но все они укладываются в 4 вида шаблонов.
notion image

Дизайн делается в Фигма и по сути дела он двойного назначения:

Выгрузка карточек на печать в PDF

Возможность поиграть в игру прямо в Figma, перетаскивая карточки как компоненты из панели ассетов. Это стало очень востребовано, когда пошел ковид.
notion image

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

Мы пришли к решению этой проблемы:

Сложили все карточки в виде строк в Airtable, каждый признак - это колонка.
notion image

Airtable удобен своим API, и большим числом типов данных для ячеек. Например, там есть файл-аплоад. airtable.com/developers

Для того, чтобы выгрузить данные в фигму, подняли проект из бойлерплейта github.com/react-figma/re…

Определили компоненты для карточек и их стили. Проект не в опен-сорсе, но могу показать, например, компонент для карточки принтера: gist.github.com/ilyalesik/ca34…

Визуально он выглядит вот так:
notion image

Выгрузить карточки из Аиртейбл достаточно просто, надо описать метод, который будет ходить в таблицу с принтерами:
notion image

А потом просто пробросить данные в компонент: gist.github.com/ilyalesik/ca34…

Для чего я использовал свою же библиотечку github.com/ilyalesik/reac…

После запуска плагина в фигме, будут все принтеры:
notion image

После переноса всех карточек картина выглядела так, больше всего карточек малых заказов:
notion image

Мне всегда хотелось соединить дизайн и разработку, поэтому стартую тред по дизайн-системам, по мотивам моего доклада на @HolyJSconf holyjs-moscow.ru/2020/msk/talks…
Помимо автоматизации мы получили еще возможность портирования игру на другие платформы, например в веб, поскольку были использованы компоненты типа View, Text и StyleSheet совместимые с react-native, react-native-web. Более подробно про это было в треде twitter.com/jsunderhood/st…

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

Но реальное применение способствовало и развитию самой библиотеки, поскольку в процессе я находил баги react-figma и сразу их правил.

Это потянуло за собой и улучшение DX, например фича с HMR (hot module replacement) была инспирирована именно опытом с Additivka.

Могут быть более простые применения у этого подхода - например, можно фетчить актуальный курс валюты и отображать его

Или более сложные, например, когда при разработке новых экранов приложения используются реальные данные из АПИ

🔥Тред (Илья Лесик)
Решил дополнить отличный тред @sashasushko, инициированный @andrey_sitnik, и тоже рассказать о процессах и принципах удаленной работы у нас в CSSSR. Получилось очень много всего, так что не пугайтесь несвойственному мне вол-ву твитов в единицу времени. Поехали! twitter.com/andrey_sitnik/…
Интересный тред про процессы на удаленке. twitter.com/_sgolovin/stat…

Воскресенье


В воскресенье хочется чего-то лайтового, поэтому встречайте пленочной фотографии тред ->

Сразу скажу, что на мои снимки можно посмотреть у меня в инстаграме - instagram.com/ilialesik/

Мое увлечения пленкой началось в 2014 году, когда мне «по наследству» достался Зенит ЕТ с объективом Гелиос 44М.
notion image

К нему также шел комплектный чехол и вспышка Электроника ФЭ-27
notion image

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

Немного снимков того периода, ламповость и фирменное "закручивание" Гелиоса на месте:

notion image

notion image

notion image

Тогда я использовал не дорогие позиции пленок - Kodak Color 200 и Fujicolor C200 и проявлял/сканировал их в местной фотолаборатории.

Снимал я довольно мало - примерно по одной пленке за полгода.

Но все поменялось в 2015-м - я купил камеру, на которую снимаю до сих пор:

Это Nikon F100 с автофокусным объективом 50mm 1:1.8D:
notion image

Это автофокусная автоматическая модель 1999-года, которая позиционировалась как полупрофессиональная.

После механического Зенита эта камера с серийной съемкой 4.5 кадра в секунду выглядела как автомат. По эргономике она ближе к цифровым зеркалкам - именно на базе подобных камер Nikon и Canon сделали свои первые цифровые камеры для профессиональных фотографов

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

Вот фотографии, которые я делал на него тогда:

notion image

notion image

notion image

notion image

notion image

notion image

Снимал я тогда уже на более дорогие пленки, например, Kodak Ektar, CineStill 800T.

Постепенно мне захотелось экспериментов и я начал пробовать снимать на черно-белую пленку. Первой, которую я взял - была ilford pan 100 ->

notion image
notion image
notion image

С ч/б пленкой было сложнее работать, поскольку фотолаборатория у нас в городе умела проявлять только цвет. Да и сканировали они такие пленки хуже. Приходилось искать "умельцев", которые могли бы проявить такую пленку.

Даже интересные изначально снимки выглядели каким-то блеклыми, что-ли. Выправить сканы из лаборатории не получалось - это были пожатые bmp-файлы.
notion image

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

Самое основное - бачок для проявки
notion image

Набор склянок для растворов и термометр из местного магазина мед техники
notion image

Некоторые специализированные приспособления, рукав для зарядки пленки в бачок + экстрактор пленки из катушки
notion image

химия - проявитель (я предпочитаю концентрат), фиксаж, стоп-ванна
notion image

Вишенка на торте: сканер для пленок. У меня недорогая модель, plustek opticscan 8100
notion image

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

К нему идет программа SilverFast, которая хоть и довольно архаична, но вполне себе работает на последней мак-оси:
notion image

Немного снимков после перехода на новый процесс
notion image
notion image
notion image

notion image
notion image
notion image

Основная пленка, которую я начал применять - ilford hp5+. Оно отлично работает с пуш-процессом - это когда, пленка экспонируется выше номинала, например, вместо ISO 400 ведется съемка на ISO 800 и удлиняется время проявки

Экспериментировал я и с пленками большой чувствительности, например, ilford delta 3200. На них как правило очень много зерна. Но результат иногда получался интересным:
notion image
notion image
notion image

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

В дополнительной обработке я не вижу ничего плохого, поскольку исторически снимки могли довольно сильно ретушироваться на этапе оптической печати: pavel-kosenko.livejournal.com/572760.html
notion image

Это часть творческого процесса. Немного жалею, что не попробовал оптическую печать, мой аналогово-цифровой процесс - конечно не совсем "тру"

Еще из интересного - на пленку можно делать мультиэкспозицию, это когда один кадр экспонируется несколько раз. Экспериментировал с этим я немного, вот один из таких кадров:
notion image

Последние годы люблю снимать вертикально, вот кадры с последней пленки:
notion image
notion image
notion image

Фотографии я раньше выкладывал еще и вк, там также есть множество специализированных групп по пленки, в которые было "почетно" попасть, например: vk.com/trita.plenka

Все хочу сделать сайт с фотографиями, но руки как всегда не доходят.

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

Например, лаборатория Среда sreda.photo/lab/develop_sc…

При этом сами камеры и пленки стали заметно дороже. Когда я покупал свой Никон в 2015 году, он стоил 6500. Сейчас такие камеры продают за 18-20к.

Еще из экспериментов, мне бы конечно, хотелось попробовать поснимать на средний формат. Например, на Mamiya c330
notion image

Почему же я не перешел на цифру?

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

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

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

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

У меня айфон 11 и он снимает как говно (простите)

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

Кроме того, пленка не накапливает шум на длинных выдержках, поэтому ее до сих пор активно применяют в астрофотографии.

Интересный факт - многие пленочные камеры могут стоит сотни тысяч рублей и сегодня. Небольшая подборка интересных камер:

Hasselblad XPan - позволяет фигачить вот такие широкие кадры. Стоимость - ~200к рублей. photosale.ru/sale/fotoappar…
notion image
notion image

Contax T2 - компактная камера из титана с объективом Carl Zeiss 38/2.8. ~70к рублей на ибей
notion image

Rollei 35 - одна из самых маленьких 35мм камер.
notion image

Японская камера-пулемет времен второй мировой войны. Использовалась как симулятор для экипажей самолетов - по снимкам оценивали точность. petapixel.com/2018/01/25/jap…
notion image

<--- $5000 на ибей

Pentax 6x7, он же 67 - здоровенная и очень красивая среднеформатная камера (за счет деревянной ручки). Поговаривают, что звук затвора настолько громкий, что соседи могут вызвать полицию. casualphotophile.com/2020/10/05/pen…
notion image

Nikon F3 - оч красивая камера, дизайн разработан легендарным Джорджетто Джуджаро. Имеет съемную призму и кучу модификаций
notion image
notion image

Одна из модификаций, F3 NASA, с магазином на 250 кадров - летала в космос.
notion image

Hasselblad 500 C/M и похожие - еще одна легендарная камера, модификации которой летали в космос
notion image
notion image

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

Одна из моих "аватарок" была снята на эту камеру:
notion image

Это средний, 120-й формат пленки, размер кадра 6x6см. Большинство сталкивалось с форматом 35mm, для сравнения, размер кадра там 3.6×2.4см.
notion image

Еще одна красивая камера - Rolleiflex 2.8f. Это среднеформатная зеркальная камера с двумя объективами - верхний для видоискателя, нижний - для пленки. Производится с 50-х годов, стоит ~120к на ибей
notion image
notion image

Этот список я подытожу камерой Leica M3 - легендарная дальномерная камера, заточенная под уличную фотографию
notion image

🔥Тред (Илья Лесик)
Всем спасибо за внимание, это была отличная неделя! С вами был @ilialesik, подпишитесь на меня в твиттере и во всем остальном --->


На ютуб канал Tver.io youtube.com/c/TverIO?sub_c…

В твиттере @_tverio

Поставьте звездочку github.com/react-figma/re… - до 1к осталось совсем чуть-чуть

По любому вопросу можно также постучаться в телеграм - t.me/ilialesik

Остальные явки/пароли на lesik.dev

Happy coding! 🙌

🔥Тред (Илья Лесик)

Ссылки