myshov

3 февраля 2020, Earth Planet

# Понедельник 26 твитов

Всем привет! На этой неделе с вами будет Мышов Саша. Большинству я знаком как ведущий телеграм-канала Defront. Ещё… twitter.com/i/web/status/1…

9:51

Темы этой недели:

9:53

Сегодня хочу рассказать про Defront (t.me/defront). Это телеграм-канал про web и фронтенд-разработку.

10:51

Концепция канала — небольшие саммари и мысли по поводу прочитанных статей, просмотренных докладов, новости из мира… twitter.com/i/web/status/1…

10:52
Сегодня день рождения у Defront! Первый год прошёл очень круто — каждый день выходил минимум один пост (не пропусти… twitter.com/i/web/status/1…

Недавно у канала был первый день рождения (twitter.com/myshov/status/…). Прошедший год был очень крутым. Благодаря кана… twitter.com/i/web/status/1…

Сегодня день рождения у Defront! Первый год прошёл очень круто — каждый день выходил минимум один пост (не пропусти… twitter.com/i/web/status/1…

10:52

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

10:53

Как создаётся типичный пост. Ищу интересные ссылки в твиттере или телеграм-каналах. Собираю заинтересовавшие ссылки… twitter.com/i/web/status/1…

10:53

Затем выбираю из вороха ссылок одну статью и начинаю читать. Если что-то непонятно, дополнительно ресёрчу. Рекорд н… twitter.com/i/web/status/1…

10:54

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

10:54

Кто-то сказал такую фразу (это не точная цитата, пишу как помню): "Для подготовки часового выступления мне достаточ… twitter.com/i/web/status/1…

10:55

Эта фраза очень хорошо отражает мой творческий процесс. Пытаюсь оптимизировать весь процесс до часа — полчаса читаю… twitter.com/i/web/status/1…

10:55

Пишу посты так, чтобы даже в этом одном-двух абзацах была какая-то ценная мысль или информация, которая останется с… twitter.com/i/web/status/1…

10:56

Пару раз получалось забавно, когда всю статью умещал в два абзаца. И тут какое-то двоякое ощущение, так как в посте… twitter.com/i/web/status/1…

10:57

В итоге решил, что честнее всего оставить суждение по этому поводу читателям канала. Всё равно в каждом посте есть… twitter.com/i/web/status/1…

10:58

Главное, что в выигрыше остаются все: про статью оригинального автора узнают несколько тысяч человек, а читатели по… twitter.com/i/web/status/1…

10:58

И тут я подхожу к самому интересному моменту. Что считать самым важным контентом в статье? Я до сих пор не знаю. Об… twitter.com/i/web/status/1…

10:59

Ещё одна очень важная категория постов — новинки в браузерах, node.js и т.п. Тут иногда приходится зарываться с гол… twitter.com/i/web/status/1…

10:59

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

11:04

Иногда какая-то тема требует более глубокого копания (например, не работал ранее с какой-то технологией), чтобы пол… twitter.com/i/web/status/1…

11:10

Бывает так, что думаю: "Вот завтра напишу пост по этой статье". Завтра наступает. Читаю. Понимаю, что статья не ого… twitter.com/i/web/status/1…

11:13

Давайте перейдём к теме популяризации канала. Каких-то огромных сил и денег в продвижение я не вкладывал, считаю, ч… twitter.com/i/web/status/1…

11:38

Был забавный случай, когда я рассказывал про канал новому знакомому. А он, не думая, выпалил: "Да у тебя там одни б… twitter.com/i/web/status/1…

11:38

Очень много людей пришло в канал, когда про него рассказывали @Chaptykov, @stevep307, @chicoxyzzy, @xufocoder, мног… twitter.com/i/web/status/1…

11:39

"Passionate Programmer" переведён на русский язык piter.com/collection/all…

5:28

Не всё всегда получается так как мы планируем...
На этой неделе ожидался ломовейший спец гость, но с ней не получил… twitter.com/i/web/status/1…

10:05

# Вторник 83 твита

Сегодня будет тред про мою любимую тему — историю JS и JS-экосистемы. Один лайк — один факт.

7:27

Начну с наиболее известного факта. JavaScript был разработан Бренданом Айком в течение 10 дней.

13:04

  • JavaScript успел поменять два названия: сначала он назывался Mocha, потом LiveScript. Процесс смены имён происхо… twitter.com/i/web/status/1…
  • 13:04

    3. Брендан Айк изначально разрабатывал Scheme-like язык, но из-за маркетинговых соображений новый язык стал напоминать Java.

    13:05

  • На тот момент Java была очень горячей технологией. И Netscape боролся за то, чтобы Sun (владелец Java) выпустила… twitter.com/i/web/status/1…
  • 13:05

  • Netscape заполучила Java, а JavaScript начал потихоньку набирать популярность и уже год спустя Netscape выпустил… twitter.com/i/web/status/1…
  • 13:05

  • Microsoft не хотела оставаться в стороне и не хотела терять долю web'а из-за того, что страницы с JavaScript в I… twitter.com/i/web/status/1…
  • 13:06

    7. Было выбрано такое название, потому что торговая марка "JavaScript" принадлежала Sun.

    13:06

    8. Чтобы не допустить фрагментацию web'а, был сформирован комитет TC-39, который начал работать над спецификацией JavaScript.

    13:06

    9. Из-за проблем с торговой маркой для спецификации был выбрано новое название — ECMAScript.

    13:07

  • В 1997 году была выпущена первая версия стандарта ECMAScript, который курируется ECMA — ассоциацией по стандарт… twitter.com/i/web/status/1…
  • 13:07

  • В 1998 году вышла вторая версия стандарта, которая практически не отличалась от первой. Все изменения состояли… twitter.com/i/web/status/1…
  • 13:07

  • У JavaScript в то время не было многих фич: регулярные выражения, try/catch, in, instanceof, do/while и т.п. В… twitter.com/i/web/status/1…
  • 13:07

    13. Все эти фичи были стандартизированы в третьей версии ECMAScript в декабре 1999 года.

    13:08

    14. В 2000 году вышел первый браузер Netscape Communicator 6 с поддержкой третьей версии стандарта.

    13:08

  • Но до этого в марте 1998 Netscape сделала анонс, что новый браузер будет бесплатным (да, тогда браузер надо был… twitter.com/i/web/status/1…
  • 13:08

    16. Для воплощения этих планов была учреждена организация Mozilla, в которой по факту работали инженеры компании Netscape.

    13:08

  • Тем самым Mozilla унаследовала код html-движка Gecko и js-движка SpiderMonkey, которые стали использоваться в н… twitter.com/i/web/status/1…
  • 13:08

  • SpiderMonkey — это второе название движка. Самое первое название, вернее его кодовое имя, было Mocha. Да, именн… twitter.com/i/web/status/1…
  • 13:09

  • Из-за переписывания кодовой базы Netscape потерял основную долю рынка. И когда в 2000 году вышел релиз 6-ой вер… twitter.com/i/web/status/1…
  • 13:09

  • В начале 2000-ых, когда Internet Explorer задавал тренды в web'е, началась работа над ECMAScript 4. Над стандар… twitter.com/i/web/status/1…
  • 13:09

  • Объём работ был огромный. В стандарт хотели добавить неймспейсы, интерфейсы, классы, опцианальную статическую т… twitter.com/i/web/status/1…
  • 13:09

    22. На тот момент комитет поделился на две части. Одни хотели революционного развития JS, другие эволюционного.

    13:09

  • Дуглас Крокфорд, который выступал от Yahoo, убедил участника из Microsoft в том, что огромное количество новых… twitter.com/i/web/status/1…
  • 13:10

    24. Тем самым доминирующий на рынке браузер (Internet Explorer) отказывался поддерживать фичи из нового стандарта.

    13:10

  • Adobe, наоборот, выступала за новый стандарт. ActionScript, который разрабатывался сначала в недрах Macromedia,… twitter.com/i/web/status/1…
  • 13:10

  • То есть если вы посмотрите на код ActionScript, то примерно так же бы выглядел и ECMAScript 4, если бы он был у… twitter.com/i/web/status/1…
  • 13:10

    27. Прошло 8 лет, в комитете до сих пор не было консенсуса. Было решено, что так продолжаться не может.

    13:10

    28. Дуглас Крокфорд призвал остановить споры и исправить проблемы в существующей версии стандарта.

    13:11

  • Исправления были запланированы как часть спецификации ECMAScript 3.1, в которую должны были попасть части из че… twitter.com/i/web/status/1…
  • 13:11

  • В новый стандарт был добавлен строгий режим, новые нужные методы для упрощения наследования и работы с массивам… twitter.com/i/web/status/1…
  • 13:12

  • В 2009 году работа над 3.1 была закончена. Но стандарт решили переименовать в пятую версию, чтобы избежать пута… twitter.com/i/web/status/1…
  • 13:12

  • Параллельно с четвёртым стандартом языка разрабатывалось новое расширение ECMAScript - E4X, которое позволило б… twitter.com/i/web/status/1…
  • 13:13

  • Поддержка E4X появилась в SpiderMonkey, но потом была удалена. На mdn до сих пор можно найти этот артефакт — developer.mozilla.org/en-US/docs/Arc….
  • 13:14

  • После выпуска пятой версии комитет решил продолжить над эволюционным развитием языка — проект новой спецификаци… twitter.com/i/web/status/1…
  • 13:15

    35. Harmony стал идейным продолжением изменений, которые должны были появиться в четвёртой версии.

    13:15

  • От многих идей отказались, например, от статической типизации, другие идеи были переосмыслены, например, классы… twitter.com/i/web/status/1…
  • 13:16

    37. Работа над ECMAScript 6 продолжалась 6 лет.

    13:16

    38. К моменту, когда стандарт был закончен, браузеры уже начинали реализовывать новые фичи.

    13:16

    39. ECMAScript 6 в итоге был переименован в ECMAScript 2015. Использование года ознамевало переход к новому процессу стандартизации фич.

    13:16

  • В новом процессе фичи разрабатываются друг от друга независимо (но с учётом друг друга). Теперь они должны прох… twitter.com/i/web/status/1…
  • 13:16

    41. После того как набирается достаточный набор фич в stage 4, формируется новый стандарт, который обозначается текущим годом.

    13:17

    42. На данный момент вышли версии 2016, 2017, 2018 и 2019.

    13:17

  • В 1999 году разработчики из команды Outlook добавили новую фичу в IE5, с помощью которой страница могла получат… twitter.com/i/web/status/1…
  • 17:23

    44. Фича смогла попасть в браузер только благодаря тому, что в её названии была горячая на тот момент технология — XML.

    17:23

  • > Which is the real explanation of where the name XMLHTTP comes from- the thing is mostly about HTTP and doesn'… twitter.com/i/web/status/1…
  • 17:24

  • Эта фича оставалась вне видимости разработчиков, пока Google не выпустил новые сервисы Gmail и Google Maps, кот… twitter.com/i/web/status/1…
  • 17:24

  • У такого подхода создания приложений не было названия, пока Джесси Джеймса Гарретта не придумал термин AJAX. Вп… twitter.com/i/web/status/1…
  • 17:24

  • Распространение информации о новом подходе к разработке web-приложений очень сильно повлияло на то, как разрабо… twitter.com/i/web/status/1…
  • 17:24

  • Раньше JS был просто неизбежным злом, который пытались подменить с помощью Flash, Java, Silverlight. После появ… twitter.com/i/web/status/1…
  • 17:24

  • Примерно в это время (2004-2006) стали появляться js-библиотеки, которые сглаживали различия между браузерами и… twitter.com/i/web/status/1…
  • 17:25

  • В это время же время стали появляться большие монолитные фреймворки, с помощью которых можно было писать GUI-пр… twitter.com/i/web/status/1…
  • 17:25

    52. В конце 2004 года Тим О'Рейли популяризирует термин "Web 2.0", которыми стали называть современные web-приложения.

    17:25

  • В 2005 году появился яркий представитель Web 2.0 — первая операционная системаx, полностью работающая в браузер… twitter.com/i/web/status/1…
  • 17:25

  • В 2008 году выходит знаменитая книга Дугласа Крокфорда "JavaScript: The Good Parts", которая стала важной вехой… twitter.com/i/web/status/1…
  • 17:25

    55. Как говорил Дуглас: "JavaScript — это наиболее неправильно понимаемый язык".

    17:26

  • Работа Дугласа, появление хороших js-библиотек и фреймворков, может считаться первой волной, привлёкших большое… twitter.com/i/web/status/1…
  • 17:26

  • В 2008 году балом правил Internet Explorer c ECMAScript 3. Но на это время у Firefox уже была солидная пользова… twitter.com/i/web/status/1…
  • 17:26

  • В то время как для отладки кода в IE программисты использовали alert'ы, а особенно продвинутые скачивали специа… twitter.com/i/web/status/1…
  • 17:27

  • Из-за того что IE был очень сильно интегрирован в операционную систему, Microsoft не могла оперативно делать об… twitter.com/i/web/status/1…
  • 17:27

  • IE стал превращаться в аутсайдера. Дошло до того, что разработчики огромных проектов настолько устали от IE6, ч… twitter.com/i/web/status/1…
  • 17:27

  • Internet Explorer начал терять рынок. Ситуация для IE стала ещё неблагоприятнее, после того как в 2008 году Goo… twitter.com/i/web/status/1…
  • 17:27

  • В это время была выпущена пятая версия спецификации ECMAScript, которая была реализована во всех браузерах к 20… twitter.com/i/web/status/1…
  • 17:29

  • Приложения, написанные на JavaScript становились всё больше и больше, что привело к появлению целого вороха MVC… twitter.com/i/web/status/1…
  • 17:29
    @jsunderhood Как же сендбокс табов? Это позволило не убивать весь браузер, но года одна из вкладок повисла. Это был… twitter.com/i/web/status/1…
    18:48

  • Основным фактором, который привёл к бурному развитию новых инструментов, можно считать появление Node.js, котор… twitter.com/i/web/status/1…
  • 19:35

  • Node.js был построен на базе JavaScript-движка v8, который был позаимствовал у Chrome, и библиотеки libuv, созд… twitter.com/i/web/status/1…
  • 19:36

  • Node.js изначально разрабатывался под эгидой CommonJS, — инициативой, цель которой заключалась в создании набор… twitter.com/i/web/status/1…
  • 19:36

  • Создание CommonJS было вдохновлено Кевином Дангуром, который описал текущие проблемы в статье "What Server Side… twitter.com/i/web/status/1…
  • 19:37

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

    19:37

  • После публикации статьи Кевина и призыва подключиться к работе над CommonJS, появился стандарт, описывающий мод… twitter.com/i/web/status/1…
  • 19:38

  • Node.js набирал обороты, работа, которая шла в рамках CommonJS, не удовлетворяла разработчиков Node.js и в итог… twitter.com/i/web/status/1…
  • 19:39

  • Айзек Шлютер (автор npm) в 2013 написал: "One evening at Joyent, when I mentioned being a bit frustrated [...]… twitter.com/i/web/status/1…
  • 19:39

  • В 2019 году команда Node.js анонсировала поддержку официального стандарта ECMAScript Modules, что фактически оз… twitter.com/i/web/status/1…
  • 19:39

  • Самым важным результатом работы CommonJS помимо модулей можно считать разработку стандарта промисов Promises/A,… twitter.com/i/web/status/1…
  • 19:39

  • Поддержка промисов в качестве работы с асинхронщиной была добавлена в одну из ранних версий Node.js, но была уд… twitter.com/i/web/status/1…
  • 19:40

    75. В 2012 году Райан оставляет разработку Node.js и передаёт все права компании работодателю Joyent и Айзеку Шлютеру в частности.

    19:40

  • Разработка Node.js начала стагнировать, Joyent не торопилась обновлять проект на новую версию v8, тем самым наб… twitter.com/i/web/status/1…
  • 19:41

  • Сообщество пошло на радикальный шаг и в декабре 2014 года 5 из 7 ключевых разработчиков создали независимый фор… twitter.com/i/web/status/1…
  • 19:41

    78. Спустя всего полгода стало очевидно, что у Node.js проблемы — фокус коммьюнити переключился на io.js.

    19:41

  • Компания Joyent выразила свою готовность перенести разработку Node.js на независимую площадку и передать права… twitter.com/i/web/status/1…
  • 19:42

  • 12 марта 2019 года Node.js Foundation и JS Foundation объявили о слиянии с образованием новой некоммерческой ор… twitter.com/i/web/status/1…
  • 19:42

    Остановитесь! 😅 pic.twitter.com/FWpOyYFVeK

    19:52

    # Среда 16 твитов

  • Благодаря работе Microsoft в Node.js появился уровень абстракции, который сделал возможным использование альтер… twitter.com/i/web/status/1…
  • 10:47

  • Microsoft адаптировала свой js-движок Chakra для Node.js в 2016 году github.com/nodejs/node-ch…
  • 10:48

  • Самая интересная фича node-chakracore — time travel debugging, который поддерживается в VSCode github.com/nodejs/node-ch…
  • 10:49

  • Mozilla тоже работала над внедрением SpiderMonkey в Node.js, но проект был заморожен github.com/mozilla/spider…
  • 10:49

  • Благодаря Node.js стало возможным использовать один и тот же код и на сервере, и на клиенте. Такие приложения с… twitter.com/i/web/status/1…
  • 10:50

  • Изоморфные приложения позволили создавать полноценные Single Page Application (SPA) приложения, которые могли б… twitter.com/i/web/status/1…
  • 10:50

  • Термин "изоморфное приложение" ввёл в обиход Чарли Роббинс в 2011 году в статье "Scaling Isomorphic Javascript… twitter.com/i/web/status/1…
  • 10:50

  • В 2015 году Майкл Джексон (другой Майкл Джексон) поделился своим мнением, почему "изоморфное приложение" неподх… twitter.com/i/web/status/1…
  • 10:50

  • Поэтому если вы читаете статьи и видите как в одном месте пишут про "изоморфные", а в другом "универсальные" пр… twitter.com/i/web/status/1…
  • 10:51

    90. С 2012 года начали появляться изоморфные фреймворки. Первопроходцем стал Meteor, который был выпущен в январе 2012 года.

    10:51

  • Затем Yahoo в апреле 2012 года открыла код своего фреймворка Mojito, но из-за сильной привязки к YUI не получил… twitter.com/i/web/status/1…
  • 10:51

  • В середине 2012 года 2GIS начал работу над своим изоморфным фреймворком — Slot — который лёг в основу обновлённ… twitter.com/i/web/status/1…
  • 10:51
    @jsunderhood @Semenov @anrublev А что изоморфного в nest? Для изоморфного рендера к нему нужно прикручивать изоморф… twitter.com/i/web/status/1…
    11:50

    усталь

    12:07
    @jsunderhood Nest.js не на базе Angular, просто идейно вдохновлён им (есть TS декораторы, CLI для генерации кода из… twitter.com/i/web/status/1…

    Вот отличное исправление по поводу Nest.js. Посыпаю голову пеплом twitter.com/siberex/status…

    @jsunderhood Nest.js не на базе Angular, просто идейно вдохновлён им (есть TS декораторы, CLI для генерации кода из… twitter.com/i/web/status/1…

    17:00
    @jsunderhood Затем его сменил Nashhorn, разработанный уже Ораклом.
    А сейчас им на смену пришёл БОМБИЧЕСКИЙ GraalVM… twitter.com/i/web/status/1…

    Дополнение про Rhino twitter.com/siberex/status…

    @jsunderhood Затем его сменил Nashhorn, разработанный уже Ораклом.
    А сейчас им на смену пришёл БОМБИЧЕСКИЙ GraalVM… twitter.com/i/web/status/1…

    17:24

    # Четверг 36 твитов

    Сегодняшний тред будет про инструменты работы с AST. AST (abstract syntax tree) — это представление исходного текст… twitter.com/i/web/status/1…

    13:43

    Чем AST может помочь в повседневной работе? Например, для сбора статистики о кодовой базе: какое количество раз и г… twitter.com/i/web/status/1…

    13:49

    Причём можно правильно обработать нетривиальные случаи, например, когда библиотека импортируется под неканоничным н… twitter.com/i/web/status/1…

    13:49

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

    13:57

    Есть инструменты, которые анализируют граф зависимостей. С их помощью можно находить модули, которые не используютс… twitter.com/i/web/status/1…

    14:26

    Dependency Cruiser поддерживает JavaScript (ESM), TypeScript, CoffeeScript, CommonJS, AMD. Для визуализации исполь… twitter.com/i/web/status/1…

    14:29

    Madge поддерживает только JavaScript (AMD, CommonJS, and ES6 modules), помоимо GraphViz может визуализировать граф… twitter.com/i/web/status/1…

    14:50

    Вот так выглядит часть графа зависимостей Rollup: pic.twitter.com/5HDLml403b

    14:51

    У себя под капотом AST используют линтеры. В eslint есть возможность создавать новые правила с помощью специальных… twitter.com/i/web/status/1…

    14:52

    Тут немного неправильно. Поддерживает D3 другой Dependo, но он уже не поддерживается 2 года npmjs.com/package/dependo

    14:55

    На базе Babel можно создавать собственные инструменты. Например, в Яндекс Маркете при написании e2e-тестов для поис… twitter.com/i/web/status/1…

    15:13

    Reselector позволяет использовать компоненты в css-селекторах без добавления служебных классов, всё благодаря парси… twitter.com/i/web/status/1…

    15:14

    Парсер Babel используется в очень многих проектах. Все их можно посмотреть на вкладке "Dependents" на npm npmjs.com/package/@babel…

    15:21

    До монорепизации парсер Babel жил как отдельный проект — "Babylon" npmjs.com/package/babylon

    15:22

    Помимо @babel/parser есть и другие. Один из самых популярных — acorn.js, который тоже используется как основа многи… twitter.com/i/web/status/1…

    15:34

    У него интересная история появления. Его разработал Marijn Haverbeke, как часть проекта по созданию инструмента для… twitter.com/i/web/status/1…

    15:35

    Tern.js был зарелижен, но не выдержал конкуренцию с TypeScript и Flow. Кроме статической типизации они предоставляю… twitter.com/i/web/status/1…

    15:41

    Ещё один популярный парсер — Esprima, разработанный Ariya Hidayat. Он лежал в основе первых версий eslint npmjs.com/package/esprima

    15:57

    С появлением разных парсеров встал вопрос того, чтобы проекты имели возможность без проблем менять парсер, работающ… twitter.com/i/web/status/1…

    16:03

    Ещё одна категория инструментов — инструменты для написания кодмодов (codemodes). Кодмод — это скрипт, в котором оп… twitter.com/i/web/status/1…

    16:12

    Наиболее популярный кейс использования кодмодов — перевод проекта на новую версию библиотеки, которая обновила свой интерфейс.

    16:12

    Написать кодмод можно, используя любой парсер, например, @babel/parser sitepen.com/blog/codemods-…

    16:14

    Но в Babel есть поддержка для написания кодомодов с помощью специального API. Вот пример такого кодмода, который сд… twitter.com/i/web/status/1…

    16:20

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

    16:47

    Schematics — это инструмент экосистемы Angular. Помогает при изменении структуры проекта в том числе на уровне тран… twitter.com/i/web/status/1…

    16:47

    Но наиболее популярен инструмент от Facebook — jscodeshift. Он поддерживает flow, typescript, jsx. github.com/facebook/jscod…

    16:48

    Вот моя подборка кодмодов для jscodeshift. Заглядывайте, если будете писать свой кодмод, чтобы посмотреть на примеры github.com/myshov/codemod…

    16:51

    Самый интересный кодмод — экспериментальный конвертор функциональных React-компонентов в функциональные Vue-компоне… twitter.com/i/web/status/1…

    16:53

    При написании кодмодов очень помогает astexplorer — веб-приложение, с помощью которого можно проинспектировать AST-… twitter.com/i/web/status/1…

    16:55

    Ещё парсеры используются инструментами для анализа кода. Например, для "разминификации" кода github.com/shapesecurity/…

    17:01

    Ещё стоит упомянуть recast — библиотека для недеструктивного изменения исходного кода и генерации сорс мапов. Испол… twitter.com/i/web/status/1…

    17:06

    Если хотите поподробнее узнать про AST, рекомендую интересный доклад Кирилла Черкашина из Google "Working with Java… twitter.com/i/web/status/1…

    17:12

    Если вас заинтересовала тема кодмодов, рекомендую посмотреть мой доклад, где я в подробностях рассказываю, что это… twitter.com/i/web/status/1…

    17:13

    На этом тред хочу закончить. Надеюсь, что этот тред вам был полезен и интересен. Спасибо за внимание :)

    17:14
    @jsunderhood Есть ещё вариации, когда AST используется не для кодогенерации, а как промежуточное представление, из… twitter.com/i/web/status/1…

    В реплаях есть хороший мини-тред про AST twitter.com/ghaiklor/statu…

    @jsunderhood Есть ещё вариации, когда AST используется не для кодогенерации, а как промежуточное представление, из… twitter.com/i/web/status/1…

    17:19
    game developer: rendering grass took an entire frame
    me: rendering this React component killed the browser
    21:01

    # Пятница 23 твита

    Давайте поговорим про разработку без бандлеров.

    15:31

    Было время, когда можно было начать разработку без настройки бандлеров, транспиляторов и т.п. Просто подключаешь ск… twitter.com/i/web/status/1…

    15:33

    В этом была какая-то магия, которую современная web-разработка потеряла. Хотя и были проблемы с тем, что ручное упр… twitter.com/i/web/status/1…

    15:35

    Какие рекомендации даёт сейчас, например, современный фреймворк: React, Angular, Vue и т.п. Скачайте cli-инструмент… twitter.com/i/web/status/1…

    15:37

    И это понятно — TypeScript без транспиляции не заработает в браузере, надо сконвертировать JSX в нативный JS, собра… twitter.com/i/web/status/1…

    15:40

    То что было раньше, и то что есть сейчас — небо и земля.

    15:41

    Но если не требуется делать большое приложение и просто иногда хочется поэксперементировать. Это всё начинает встав… twitter.com/i/web/status/1…

    15:45

    Вы можете сказать про codesandbox.io (очень клёвая штука), но именно в моём случае он не подходил из-за то… twitter.com/i/web/status/1…

    15:46

    Итого иногда хочется использовать старые добрые подходы при работе с современными фреймворками. Поэтому хочу подели… twitter.com/i/web/status/1…

    15:50

    Конечно, разработчики давно об этом задумывались. При разработке и популяризации формата AMD возможность разработки… twitter.com/i/web/status/1…

    15:53

    Сейчас, когда все современные браузеры поддерживают нативную модульную систему и фичи ES2015 у нас так-то нет очень… twitter.com/i/web/status/1…

    15:57

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

    16:01

    Если у вас не бизнес-критичные задачи, то тогда вполне можно жить без бандлера с приложением, состоящим из 100 моду… twitter.com/i/web/status/1…

    16:04

    Окей. Загружать можем. Но куча библиотек написана с использованием CommonJS. Вот тут на подмогу приходит snowpack.dev

    16:14

    Snowpack преобразовывает зависимости из node_modules в esm-совместимые ресурсы и кладёт их в web_modules, вот их мо… twitter.com/i/web/status/1…

    16:17

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

    16:19
    @jsunderhood и импорты поддерживают http ссылки, например:

    import { h, render } from '//unpkg.com/preact?module'… twitter.com/i/web/status/1…

    Snowpack не нужен, если библиотека предоставляет esm-совместимый билд twitter.com/v1rtl/status/1…

    @jsunderhood и импорты поддерживают http ссылки, например:

    import { h, render } from '//unpkg.com/preact?module'… twitter.com/i/web/status/1…

    16:21

    Окей, а что делать c jsx? Этому посвящена статья в доках реакта reactjs.org/docs/react-wit…

    16:24

    Как альтернативу прямого использования React.createElement можно использовать специальные библиотеки, облегчающие о… twitter.com/i/web/status/1…

    16:28

    Ещё есть другой интересный проект — htm. Он использует template strings github.com/developit/htm

    16:30

    Как эксперимент полтора года назад пробовал сконвертировать TODO-приложение Redux в bundler-free приложение. С проб… twitter.com/i/web/status/1…

    16:42
    @jsunderhood Мне кажется кейс паралельной загрузки не покрывает реальные примеры работы без сборщика.

    В теории мож… twitter.com/i/web/status/1…

    В реплаях @andrey_sitnik пишет, что мой бенчмарк синтетический и может не отражать реальное приложение. Это, действ… twitter.com/i/web/status/1…

    @jsunderhood Мне кажется кейс паралельной загрузки не покрывает реальные примеры работы без сборщика.

    В теории мож… twitter.com/i/web/status/1…

    16:48
    Do you use @typescript on a project and its composite projects? Please DM me - I just want to test one little thing… twitter.com/i/web/status/1…
    17:20

    # Суббота 47 твитов

    Сегодня будет тред про vim и консоль. Сразу хочу сказать, что у меня нет цели похоливорить и vim — это не идеальный… twitter.com/i/web/status/1…

    12:33

    Очень интересно узнать предпочтения сообщества по поводу редакторов/IDE, но твиттер не позволяет делать голосование… twitter.com/i/web/status/1…

    12:35

    У каждого своя история того, как он перешёл на Vim. Моё первое знакомство с ним было в 2005 году, когда установил A… twitter.com/i/web/status/1…

    12:39

    Я его открыл, не читая манов, ничего не понял, не понял даже как выйти. Прибил его с помощью команды kill. Потом не… twitter.com/i/web/status/1…

    12:42

    Потом наткнулся на статью на хабре, где автор писал про то, как он настроил среду для разработки под ассемблер для… twitter.com/i/web/status/1…

    12:49

    Он рассказал как сделал удобные хоткеи, кастомную подсветку синтаксиса, поддержку компиляции с переходами к ошибкам… twitter.com/i/web/status/1…

    12:56

    У меня на работе в то время, намечалась задача по доработке большой кодовой базы на PL/SQL (это язык похожий на Pas… twitter.com/i/web/status/1…

    13:02

    Поэтому вдохновился статьёй и решил изучить vim. Нашёл очень клёвую книгу "Practical Vim Edit Text at the Speed of… twitter.com/i/web/status/1…

    13:06

    Нашёл очень мощный плагин для Oracle-разработки vorax. В нём было сделано очень много специфических вещей вплоть до… twitter.com/i/web/status/1…

    13:11

    Вот так выглядела моя среда разработки pic.twitter.com/q51w5ozlQD

    13:12

    Кроме разработки под Oracle я ещё занимался фронтендом — делал интерфейсы на ExtJS. И вот так решил юзать vim и для js.

    13:14

    Потом делал маленькие проекты на C, Haskell, ReasonML и тоже использовал для написания кода vim, так как я его уже… twitter.com/i/web/status/1…

    13:17

    Потом в 2ГИСе юзал vim для разработки e2e-тестов на python. На тот момент работать с python было удобно, поддержива… twitter.com/i/web/status/1…

    13:20

    Потом вышел многопточный NeoVim, вскоре после этого вышел многопоточный Vim 8 и один из самых недостатков редактора исчез.

    13:23

    Сейчас Vim поддерживает Language Server Protocol, поэтому можно без плясок с бубном, настроить фичи традиционных ID… twitter.com/i/web/status/1…

    13:25

    Но остался ещё один недостаток, про который стоит сказать. Подсветка синтаксиса в Vim'е сделана на базе регулярных… twitter.com/i/web/status/1…

    13:28

    Но надеюсь и он скоро исчезнет — разработчики NeoVim работают над тем, чтобы добавить подсветку синтаксиса на базе… twitter.com/i/web/status/1…

    13:31

    Для парсинга исходного кода они используют систему инкрементального парсинга tree-sitter, которая используется Gith… twitter.com/i/web/status/1…

    13:34

    В общем, не смотря на то что Vim'у уже очень много лет, идёт постоянная активная разработка. В первую очередь благо… twitter.com/i/web/status/1…

    13:38
    @jsunderhood Как раз на больших файлах (нео)вим сияют по сравнению с вскод/вебшторм/атом/юнеймит. В своё время пере… twitter.com/i/web/status/1…

    Дополнение от пользователя NeoVim twitter.com/AntonK52/statu…

    @jsunderhood Как раз на больших файлах (нео)вим сияют по сравнению с вскод/вебшторм/атом/юнеймит. В своё время пере… twitter.com/i/web/status/1…

    13:39

    Вот известные программисты, которые используют Vim как основной инструмент для кодинга:
    Linus Torwalds (создатель L… twitter.com/i/web/status/1…

    13:43

    После того, как перешёл на Mac OS X, для постоянной работы стал использовать консольную версию vim, потому что он о… twitter.com/i/web/status/1…

    13:48

    Благодаря vim'у стал больше времени проводить в консоли и для меня сейчас самая удобная комбинация: vim + bash.

    13:49

    Для удобной работы с большим количеством shell'ов стал использовать терминальный мультиплексор tmux. С его помощью… twitter.com/i/web/status/1…

    13:54

    Обычно моя рабочая среда выглядит примерно так pic.twitter.com/lkoX1GceeE

    13:58

    На скриншоте слева находится Vim с плагином NERDTree (для навигации по файловой системе). Справа находится обычная… twitter.com/i/web/status/1…

    14:03

    Для бесшовного перехода между панелями tmux и панелями vim настроил горячие клавиши: Ctrl+H, Ctrl+J, Ctrl+K, Ctrl+L… twitter.com/i/web/status/1…

    14:07

    Вся работа вокруг редактора строится вокруг эргономики работы с клавиатуры, поэтому от него можно получить максимум… twitter.com/i/web/status/1…

    14:09

    Начинаешь ловить фан от редактирования кода. Мне нравится вот это высказывание со Stack Overflow: "Editing text is… twitter.com/i/web/status/1…

    14:13

    Для быстрого поиска по файлам использую silversearcher (github.com/ggreer/the_sil…), ещё слышал очень хорошие отзывы п… twitter.com/i/web/status/1…

    14:45

    Если работаю на сервере, то для поиска по содержимому файлов использую обычный grep (grep "something" -ri .), для п… twitter.com/i/web/status/1…

    14:50

    Я не считаю себя спецом по консоли, но мне удобнее с ней работать по сравнению с GUI. Мой топ самых полезных команд… twitter.com/i/web/status/1…

    15:04

    Если открываю новую сессию, то для старта tmux'а с настроенными окнами и панелями использую специальный скрипт gist.github.com/myshov/1564474…

    15:08

    Можно организовать среду с быстрым фидбеком (playground). В левой панели tmux открыть vim somefile.js, в правой nod… twitter.com/i/web/status/1…

    15:18

    На небольшом экране ноута удобно использовать возможности macOS для разбиения экрана на панели. На скриншоте слева… twitter.com/i/web/status/1…

    15:25

    Эта фича в macOS называется "Split View" (support.apple.com/en-us/HT204948). Скорее всего что-то подобное есть в Windows и оконных менеджерах Linux.

    15:28
    @jsunderhood NeoVim в связке со SpaceVim очень хорошо себя показал - spacevim.org

    Vi mode по прежнему р… twitter.com/i/web/status/1…

    У vim огромное количество плагинов, которые позволяют настроить редактор под свой вкус. Например, в реплаях рекомен… twitter.com/i/web/status/1…

    @jsunderhood NeoVim в связке со SpaceVim очень хорошо себя показал - spacevim.org

    Vi mode по прежнему р… twitter.com/i/web/status/1…

    15:33

    Для vim есть много плагинов, но я предпочитаю изучать нативные возможности редактора, они могут покрыть многие плаг… twitter.com/i/web/status/1…

    15:37

    Тем не менее совсем без плагинов пока не могу обойтись. Вот мой текущий список github.com/myshov/dotfile…

    15:40

    Кстати ссылка из предыдущего твита, это кусок моих dotfiles — скриптов для быстрого разворачивания окружения. Вот т… twitter.com/i/web/status/1…

    15:43

    У вим богатая история. Про него я как-то готовил доклад для внутреннего митапа 2GIS myshov.github.io/story_of_vim/

    15:45

    Vim'у и его экосистеме посвящена международная конференция vimconf.org. Проводятся митапы в разных уголках мира.

    15:49

    Если хотите использовать один мощный редактор на сервере и при локальной разработке на разных языках программирован… twitter.com/i/web/status/1…

    15:53

    Для изучения Vim'а могу порекомендовать начать с команды редактора :vimtutor (встроен в vim), книгу "Edit Text at t… twitter.com/i/web/status/1…

    16:03

    И очень рекомендую посмотреть серию скринкастов Дерека Уайата (derekwyatt.org/vim/tutorials/). Особенно самое первое виде… twitter.com/i/web/status/1…

    16:04

    На этом хочу тред закончить. Happy Vimming!

    16:07
    @jsunderhood Для тех, кто не хочет особо глубоко погружаться в заточку vim под себя - есть плагин для vscode, эмули… twitter.com/i/web/status/1…
    17:28

    # Воскресенье 19 твитов

    Давайте поговорим про мотивацию. Имхо, это очень важная тема.

    15:26

    Так получилось, что решил публиковать посты в Defront каждый день. И вот на протяжении года делаю это без пропусков… twitter.com/i/web/status/1…

    15:29

    На самой первой работе я спросил своего коллегу, в чём его мотивация, он ответил: "Саша, представь, что тебе жрать нечего".

    15:30

    "Норм", — подумал я, и больше не стал его донимать его вопросами. Но в голове иногда мелькала мысль, что я занимаюс… twitter.com/i/web/status/1…

    15:33

    Потом пару лет спустя, другой мой руководитель порекомендовал книгу "7 навыков высокоэффективных людей" С.Кови.

    15:37

    Сначала я скептически отнёсся к этой книге, так как там было написано что это какой-то бестселлер по менеджменту, к… twitter.com/i/web/status/1…

    15:39

    Но мне книга очень понравилась с первой главы — автор там делился своими личными историями, которые очень вдохнови… twitter.com/i/web/status/1…

    15:43

    В ней затрагиваются многие темы: отношения с другими людьми, тайм-менеджмент, цели. В ней ещё была незнакомая для м… twitter.com/i/web/status/1…

    15:50

    Личная цель — это некая абстрактная цель, которая по сути формирует все будущие ваши цели. Как пример у Стива Джобс… twitter.com/i/web/status/1…

    15:52

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

    15:56

    Ещё одной вехой могу назвать "Совершенный код" Макконелла. В одной из глав было написано: "Во что бы то ни стало пр… twitter.com/i/web/status/1…

    16:01

    Это заставило сильно задуматься, а реально ли программирование для меня.

    16:04

    После этого попалась в руки книга Чада Фаулера "Passionate Programmer" (pragprog.com/book/cfcar2/th…). Там чувак бывший… twitter.com/i/web/status/1…

    16:06

    Эта книга очень сильно замотивировала заниматься своими проектами, самообразованием и т.п.

    16:11

    Наверное, благодаря этому импульсу я могу читать много статей и писать посты в канал. Мне это просто очень интересн… twitter.com/i/web/status/1…

    16:15

    Какие тут можно сделать выводы? Ищите свою личную цель, ищите то, что вас может вдохновить на новые свершения. Врод… twitter.com/i/web/status/1…

    16:21

    Не могу утверждать, что эти советы будут работать для всех, всё-таки все мы разные. Но главное не останавливаться и… twitter.com/i/web/status/1…

    16:36

    Всем спасибо за внимание :) Очень интересно почитать ваши истории

    16:40

    На этой неделе с вами был Мышов Саша @myshov. Если у вас возникли какие-то вопросы по темам недели, пишите в твитте… twitter.com/i/web/status/1…

    16:48

    github.com

    other