jsunderhood Profile picture
Немиро Илья (@inemiro1). Автор @huntITru, работаю в @toptal core.
teleprophet Profile picture Word-o'-the-wisp✨ Profile picture 2 added to My Authors
4 Jul
Давайте попробуем старую практику как мир: лайк этому посту от вас, факт про эффектор, его историю и концепции от меня. Посмотрим насколько меня хватит!
Изначально effector был миддлварой для ридакса и разрабатывался для высоконагруженного клиента реалтайм чата, вроде Телеграм.
Пока флоу не умер, имелась его первоклассная поддержка. Сейчас типы затачиваются под TypeScript.
Read 33 tweets
4 Jul
Каким боком @effectorjs помогает выстроить архитектуру приложений? Очень просто: он является языком описания бизнес-логики. А еще и помогает связать логику с представлением.
К чему мы привыкли? Встраиваем управление состоянием внутрь React. И после этого продолжаем называть REACT библиотекой, хотя он уже давно ФРЕЙМВОРК.
Мне не нравится такое положение. Из-за возраста React нам приходится очень долго ждать ConcurrentMode, терпеть издевательства StrictMode и наглости memo.
Read 18 tweets
29 Jun
Давайте начнем с вопроса. Что такое архитектура фронтенда? Это как директории называются? Правила взаимного импорта? Какой стек используется?
Почему меня вообще беспокоит архитектура и структура проекта? Начну с того, что "хорошая" структура вносит ясность. Где искать конкретный код. Куда положить новый. Как писать код командой не внося изменения одновременно в один файл.
С архитектурой сложнее, ведь она про отношение сущностей вашего проекта. Как выстроить зависимости между сущностями и модулями так, чтобы добавление нового кода не требовало внесения изменений в существующий код.
Read 6 tweets
15 Apr
Байка: когда-то я считал, что эти психологии - лишь выдумки соплежевателей, которые придумали себе что-то там. И проблемы бывают только объективные - ногу сломал, или отравился. Кстати, тогда я был бекендером, и считал фронтендеров соплежуями. Видимо это связано с типизацией 🤔
Это отлично укладывается в характеристику ригидной психики. Люди ригидного склада ума чётко знают, что и как происходит вокруг и с ними самими. Чаще всего это военные, немцы, бекендеры. И быть ригидным неплохо - меньше переживаешь, есть план и ты его придерживаешься
Но вот в случае непредвиденных обстоятельств, когда ваша картина мира рушится - трагедия, пандемия, или оказалось, что С++ не лучший в мире язык, а за JS платят больше - ригидным людям крайне тяжело подстроиться, они продолжают держаться за свои убеждения и планы. А мир в труху.
Read 21 tweets
14 Apr
Забыл вам ещё рассказать, почему работа - зло, не работайте
В основе большинства современных методологий разработки лежат две парадигмы:
а) постоянное совершенствование
б) обратная связь
Это хорошо для компаний, процессов, Тойоты с её Дао и прочего, но как это влияет на нас лично? Есть такая штука, как "выученная беспомощность" ru.wikipedia.org/wiki/%D0%92%D1…
Read 20 tweets
14 Apr
Когда-то мир был пуст и бесформен. Но богам это не понравилось. Во-первых скучно, а во-вторых не видно ни черта. И они сделали землю, населили её людьми, и всё было хорошо (кстати шах и мат шаролюбы, если бы земля была круглая - она бы скатилась со слонов)
Все люди были равны, а значит все были счастливы, это называлось "Бирюзовое человечество"
Но оказалось, что Хюстон, у нас две проблемы. Во-первых, люди то не равны! Вот, я проверил, между некоторыми целых 3 пикселя разницы!
Read 33 tweets
9 Apr
А на сегодняшний вечер я вам предлагаю увеселительный тред про всякие странные штуки в имплементации Cypress-а.

Я его конечно очень люблю, но откровенно странных вещей под капотом у него ой как много. А если вы его используете, возможно вам будет даже полезно :)
Итак, приступаем!
Для начала разберемся как Cypress работает. Очевидно что есть iframe, туда загружается ваше приложение и сайпресс лазит в этот iframe во время тестов.
Но! Попробуйте сделать iframe с урлой facebook.com и потом из javascript-a лазить туда и получать доступ к дому.

Звучит как-то не очень нормально, согласитесь? Звучит как дыра в безопасности и так должно быть невозможно...
Read 19 tweets
2 Mar
Кто-то мечтает уехать из России, устроится в крутой западный стартап, но думает что это очень сложно - это не совсем так.
На самом деле вас там только и ждут - разработчиков реально не хватает, тем более хороших, и если вы один, или одна из таких - оторвут с руками!
Возьмем меня:
- я старый, 82 года выпуска
- у меня нет высшего образования
- у меня трое детей
- еще и домашние животные связывают по рукам и ногам
- ипотека!

не программист, а недвижимость!
- в Финляндию? Так клево, но язык сложный
- в Германию? Я как-то не очень шпрехаю
- в Англию? Льет как в Питере!
- в США? Кому ты там без образования нужен!
- в Японию? Только через мое харакири!

- Привет, Австралия на проводе, что значит далековато?
Read 9 tweets
4 Feb
Сегодня будет тред про мою любимую тему — историю JS и JS-экосистемы. Один лайк — один факт.
Начну с наиболее известного факта. JavaScript был разработан Бренданом Айком в течение 10 дней.
2. JavaScript успел поменять два названия: сначала он назывался Mocha, потом LiveScript. Процесс смены имён происходил во время внедрения движка в браузер Netscape Communicator 2, который вышел в декабре 1995 года.
Read 160 tweets
10 Nov 19
-- тред о интервью --

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

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

Все интервью одинаковы в этом смысле.
Что порождает страх?

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

"Надо быть абсолютно готовым чтобы начать процесс" - байка, которую мозг нам заливает, чтобы избегать стресса отказа
Read 16 tweets
5 Nov 19
-- тред об общении и коллегах

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

Как говорил один Достоевский: "Все счастливые семьи одинаковы, все не счастливые семьи несчастны по-своему"
В далёком 200x году в Америке провели исследование, его цель - понять что делает компанию "счастливой".
Исследование показало что есть закономерности - превалирующие паттерны поведения людей, процессы, слова и т.д. и они очень коррелируют с еффективностью бизнеса
На базе этого исследования была создана концепция tribal leadership.
Концепт определяет пять стабильных "уровней", на которых оперировать группы людей (tribes).
Цель - осознать где ты есть и применяя рекомендации подниматься ступень за ступенью.
Read 33 tweets
30 Oct 19
В опросе про иконки с большим отрывом лидирует вариант использовать inline иконки (с use тегом или без).
Расскажу о наших метаниях в выборе подхода: >>>
Если сейчас попытаться оценить решение, то
по экономии размера, самыми эффективными будут решения через filter или mask
По вариативности расцветок — самый простой вариант — использование спрайтов.
Inline вариант с use — также хорошо экономит размер, но хуже, чем filter или mask
Правильный выбор между этими решениями сделать сложно. Субъективно меня очень тянет к решениям с inline + use, filter или mask. Последние два варианта отпадают потому что IE11 и Android 4.4.
Read 18 tweets
17 Oct 19
Пришло время обсудить обработку ошибок 🔥🧨🎆🌋☄️🌡️

Я еще в начале недели кидал ссылку в которой описаны некоторые идеи: github.com/artalar/state-…

Еще вы можете послушать об этом в сегодняшнем выпуске @5minreact: soundcloud.com/5minreact/062-…
Вернемся к нашей корзине с товарами и подумаем где могут возникнуть ошибки при работе стейт-менеджера (СТМ) и что с ними нужно в этом случае делать:
1, 2) при работе с данными
3) при вызове сайд-эффектов
Для каждого пункта, при ошибке, возникают вопросы:

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

Причем чем раньше возникла ошибка, тем больше вероятность того что может возникнуть еще одна ошибка, повышая вариативность...
Read 15 tweets
16 Oct 19
Ааа сегодня мы разберем зачем мемоизировать селекторы редакса и почему автору стейт-менеджера (СТМ) хорошо бы знать виды графов и алгоритмы на них.
Давайте представим следующую модель данных, в корзине товаров у нас отображаются:
- цена
- сумма налога (зависит от цены)
- общая стоимость (зависит от цены и налога)

(пример максимально простой намеренно, в реальном приложении описанные ниже проблемы будут серьёзнее)
Все это, конечно, должно быть связано реактивно, как показано на рисунке (push-подход) - update обновляет только price, дальше изменения "растекаются" автоматически. Иначе, обновляя каждое значение императивно внутри update (pull-подход) мы сильно повышаем зацепленность.
Read 13 tweets
8 Oct 19
Сегодня вечером обсудим: Почему я перестал доверять/верить микросервисам.

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



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

Когда говорят про микросервисы подразумевают:

- Независимую разработку / легкость масштабирования команд
- Технологическую гетерогенность (технологии под сервис)
- Независимый деплой (выпустил patch релиз, шли его отдельно в прод)
- Переиспользуемость (написав один раз сервис нотификаций, используй в каждом проекте его)
- Продуктовая составляющая (можно продать клиентам микросервисы как разные части проекта)
- Изолированность (может быть решающим звеном для прохождения различных регуляторных compliance-ов)
Read 20 tweets
2 Oct 19
🐞Debugging🐞

Начну с консоли:

Есть мнение, дебажить с помощью консоли/console.log - "не круто", т.к. есть дебаггер.
На самом деле, это очень полезный инструмент, решающий многие задачи не хуже дебаггера.

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

Про Console.log много писать не буду

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

console.log({a});
Read 10 tweets
18 Sep 19
Ладно, вернемся к е2е тестам. И немного о том, чем собственно занимаюсь я.

@CodeceptJS начался в 2015 году с 3х идей:

💡 чтоб тесты писались одинаково для Protractor & WebDriver

💡 чтоб не делать цепочки промисов

💡 чтоб тесты было легко читать.

Примерно так:
@CodeceptJS Если убрать ручной контроль браузера, а сфокусироваться на тестовом сценарии мы:

👍 получаем более читабельный код,
👍 можем легко переключаться между движками
👍 ставим защиту от дурака и говнокода (да, она работает!)
Сейчас философия проекта следующая: мы делаем всё что нужно для е2е тестов, а управление браузером делегируем другим библиотекам: puppeteer, webdriverio, etc.

Не переизобретая браузер, мы фокусируемся на проблемах, которые возникают в тестах. И решаем их. Многие уже решили.
Read 11 tweets
27 Aug 19
Как и обещала, о документации. Основные две вещи, которые вам нужно знать, если вы решили писать хорошую документацию для разработчиков:

1) это занятие сложное
2) это занятие неблагодарное

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

На самом деле это далеко не так.
Для написания хорошей документации автор должен

- понимать исходник на достаточном уровне;
- уметь объяснять (нет, умеют не все)
- в случае с документацией для разработчиков нужно уметь не сваливаться в крайности "и так все ясно" и "объясняем все-все мелочи"
Read 14 tweets
16 Aug 19
Я в пятницу обещал особую тему. Многие думали, что знают что эта будет за тема — давайте проверим, смогли ли вы её предсказать.

Тема дня — борьба против дикпиков. Сегодня мы будем говорить, как вместо неприятного дикпика сделать хорошее мужское ню.
Девушки, какое ваше мнение про дикпики и мужское ню? Если парень нравится, то как ему правильно прислать своё ню? Может есть любимые фотографы или примеры мужского ню?
Многие девушки с популярными соцсетями (особенно пишущие про секс-позитив) жалуются, что им присылают много дикпиков. И тут проблема не в секс. открытости, а в:
1. Низком качестве снимков
2. Секс-позитив про разговор и согласие.
Read 19 tweets
14 Aug 19
Предыдущих шагов хватит для небольшой библиотеки или синтаксического сахара.

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

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

Универсальных решений нет. Небольшие проекты чаще поддерживаются лучше больших. Но об этом мы поговорим завтра. Что делать сейчас?
Знаете почему я всех моих крупных проектов есть логотип? (Спасибо за них очень крутому @antiflasher)

Логотипы, как дорогие часы, внушают уверенность. Если у них было лишнее время искать логотип, то они и мою багу исправят.
Read 8 tweets
14 Aug 19
Вторая самая популярная ошибка опенсорса после непонятного описания — думать, что ваши пользователи сами вас найдут.

Очень смешно для мира, где людям не хватает просто времени изучать ченжлог их базового фреймворка.
Как люди найдут ваш новый проект, если они не могут найти Preact, когда надо делать критическое по производительности приложение (и делают его на медленном и большом Реакте)?
Не бойтесь рассказывать о проекте.
1. Сделал проект — напиши об этом в Твиттер. Это как раз интересный полезный контент, который люди ждут (а не пьянные твиты).
2. Сделал мажорную/минорную версию — напиши твит об этом.
Так хотя бы твои друзья и коллеги узнают о проекте.
Read 11 tweets