subzey

18 мая 2015, Ротcов-на-Одну

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

-~/-~/-~/-~/-~/-~/

0:27

Доброй ночи, дамы и господа! На этой неделе этот аккаунт буду вести я, Антон @subzey Хлыновский. Я JS-кодер в одном финансовом стартапе

0:36

Моя излюбленная тема — «сырой» JS, т.е., всё что ниже уровнем, чем фреймворки и библиотеки, в том числе code golf и демосцена

0:43

Кстати, вот эта штука в начале twitter.com/jsunderhood/st… — это не просто сепаратор, а вполне валидный js-код, попробуйте в консоли :)

0:55

Никто не расскажет про code golf на js лучше, чем @aemkei m.ustream.tv/recorded/62250… (начало где-то на 1:00:00)

6:45

Когда я начнал ковырять ES6, Google Traceur эмулировал `let x` через try-throw-catch(x). После такого адового трэша я надолго на него забил

7:53

… в новых версиях try-throw нет, но и код генерится неправильный goo.gl/VyOVbL Вот то же самое на Babel: goo.gl/a3wrou

7:57

А вы уже пользуетесь транспилерами из ES6? В продакшне, или для развлечения?

8:00
@jsunderhood в проде во внутренних проектах вроде CMS пишу на ES6 (babel).
8:02
@jsunderhood Пока только на pet-side проектах, планируем переводить прод на babel в ближайшие полгода.
8:08
@jsunderhood На каком стэке работаете? Как в целом среда в компании (фин. темы обычно клонятся в сторону костенелого энтерпрайза)?
8:13

.@morhetz JS+Python (Django)+Erlang. Подробнее есть видео от моего коллеги youtu.be/l1lr2ckSrTo При разработке используем Канбан

8:17
@jsunderhood Какого работать в Ростове? Есть ли мотивация уезжать за более интересными проектами или удаленная разработка решает?
8:19

.@morhetz В Ростове норм :) Проект мне по душе, почти чистый JS, и географию менять смысла нет. Единственное — местных конф мало проводится

8:22
@jsunderhood я очень хочу Typescript + ES6 :-( Но Typescript мало кто желает использовать в продакшне. А траспилеры ES6 и подавно.
8:29
@Vitalliumm @jsunderhood юзаем TS во всю на продакшене, но и место это называется MS :)
9:16

.@greybax А в вижл-студии есть какие-то особые плюшки для TS? Ну там, рефакторинг в один клик или что-то подобное?

9:18
@jsunderhood в VS синтаксис подсвечивается, а по рефакторингу юзаю Resharper, а там есть довольно много blog.jetbrains.com/dotnet/2014/12…
9:31
@jsunderhood ни для прода, и ни для развлечения. Все свои новые npm-модули пишу в es6
9:50

Похоже, early adopter'ов ES6 довольно много. Больше, чем я ожидал. Или менее авантюрные люди просто стесняются ответить?

9:52
@jsunderhood “или” ;-)
9:55
@jsunderhood ну блочный скоуп убирается, если перед блоком действительно обьявить переменную x, тогда все работает правильно.
10:22

.@an4ger Но это же «затмит» глобальную переменную. Да даже и не глобальную, а просто из внешнего скопа goo.gl/W13kdd

10:24

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

10:26

А может быть среди читателей есть такие, кто фигачит на кофескрипте, и им всё равно, во какой там ES это всё скомпилится? :)

11:19
@jsunderhood У меня есть некоторые проекты на кофескрипт. Мне не нравится. Кажется, они что-то не то пытаются оптимизировать.
11:41
@jsunderhood фигачим на coffee, мне нормально. Если будет следующий проект, то скорее всего на ES6
11:59
@toivonens выгода в возрастании «читабельности» и сокращении объема кода @jsunderhood
11:59

Быть фронтендером — это не только писать чистенький код на языках будущего. Иногда приходится уныло подпиливать IE9+ код под IE8

13:28

Уважаемые js-кодеры, а как вы используете "use strict"? По одному на файл? В каждой функции? Вообще никак?

14:02

(Я уже спрашивал об этом на основном аккаунте, но астрологи объявили мне неделю jsunderhood и прирост аудитории, думаю, не грех повторить)

14:06

.@veged А как контролируете пропущенные var и протечки в глобал? /*jshint undef:true*/?

14:12
@jsunderhood по одному на модуль (он же файл, но внутри define)
14:24
@jsunderhood никак, потому что babel. До этого юзал strict-loader, чтобы вручную не писать github.com/mistadikay/str…
14:48
@jsunderhood Я обожаю CoffeeScript и пишу только на нем, несмотря на наличие Babel в пайплайне проекта. Могу обосновать, но не в одном твите
14:55
@jsunderhood да, линтеры всё равно нужны и спасают от большего
15:01

У Python и JS больше общего, чем может показаться. Например, не поверите, модель наследования repl.it/oZV repl.it/ozU

17:47

js13kGames.com — интересное ежегодное компо. Цель создать за месяц игру на js и уложиться в 13кб (в .zip) со всей графикой и звуками

19:35

В прошлом году в js13k на конкурс было отправлено 129 игр. Но все они в zip-архиве уместились на одну дискетку 1.44

19:38

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

Начнём утро, если не возражаете, с музыкальной паузы: js1k.com/2313 Как по мне, эта интра была самой крутой на js1k 2015

6:41

…хотя бы потому что в ней используется Web Audio API и WebGL, что, в общем-то, не характерно для килобайтных интро.

6:43

Ух! Впервые применил по назначению фронтальную камеру. Оказывается, превью на экране как ты видишь себя в зеркале, а фото — как видят другие

8:31

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

8:36
@jsunderhood не применяют
8:45

Почти все демки на js1k запакованы RegPack'ом (github.com/Siorki/RegPack/), он заменяет длинные повторяющиеся строки на один символ

9:32

RegPack не просто взялся с неба, он основан на iteral.com/jscrush/, если захотите разобраться в принципе работы, лучше начать с JsCrush

9:44

Код под RegPack пишется не так, как «обычный» гольферский код: цель не минимальный размер, а минимальная энтропия (goo.gl/RS3FNF)

10:49

…иными словами, как можно больше повторяющихся строк и как можно меньше набор символов. Вплоть по повторного использования переменных

10:52

Но задротские демосценерские подходы неожиданно близки к реальности. goo.gl/xY4Suu тут ryry.min.js явно больше, чем dry.min.js

11:11

Но после сжатия GZIP (все современные браузеры так делают) dry.min.js.gz 70 байт, а ryry.min.js.gz — 64. Тут всё дело в энтропии :)

11:13

UglifyJS может заменять имена переменных на однобуквенные. Он тоже не берёт их с потолка, а использует самые частые pic.twitter.com/xTMXN4Q5zl

11:49

Наконец, Closure Compiler может даже повторно использовать переменные: goo.gl/HG8vFn (Uglify, похоже, не умеет)

11:56

Яркий пример «переоптимизации»: github.com/cowboy/jquery-…. Если выкинуть трюк с Reused strings, вес js.min.gz уменьшится с 468 байт до 451

12:19

Не всегда стоит стараться перехитрить свой компилятор

12:22

Прошу прощения за битую ссылку, спасибо @ru_rodweb twitter.com/ru_rodweb/stat…

12:24

microjs.com — россыпь маленьких полезных билиотек. Пожалуй, то место, где мир гольфо-сценеров соприкасается с миром «продакшна»

12:36

Шах и мат, функциональщики! pic.twitter.com/Ej3X4teDKm

13:53

Кстати, часто ли вас на собеседованиях просили написать функцию для подсчёта чисел Фибонначи, факториалов или прочей математики?

14:00
@jsunderhood сам на собеседованиях спрашивал. Такое интересно? :)
14:21

.@dosyara Ещё бы! Интересно то, стоит ли вообще кандидата спрашивать какую-то математику из младших классов или FizzBuzz

14:22
@jsunderhood а что, в рнд на js-кодера могут задать такой вопрос?) а то у меня в тгн есть перспективный товарищ по js, я ему расскажу)
14:23

.@_sashashakun В нашей конторе он точно фибонначей на интервью не отделается :) Но где-нибудь в РнД наверняка спрашивают

14:24

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

14:25
@jsunderhood @_sashashakun А что еще интересного вы спрашиваете на интервью?
14:26

.@YevhenBoyarsky Фибы как раз не спрашиваем :) Интересуют тривиальные вещи — прототипы, замыкания и событийная петля. Про них и спрашиваем

14:28

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

14:31
@YevhenBoyarsky @jsunderhood а ещё не дорос до проведения интервью) но как отвечающему интересно когда дают кусок кода и просят что-то 1/2
14:32
@YevhenBoyarsky @jsunderhood 2/2 по не у рассказать. В мой небольшой практике были и достойные ответы и знатные фейлы)
14:32
@jsunderhood не всегда просто по таким задачам сделать вывод. Часто фронтендщики пугаются "математики".
14:34
@jsunderhood а потом двигаешь пиксели и центруешь по вертикали
14:39

Вот это интересный пойнт:
RT @SelenIT2: @jsunderhood отлавливают любителей неуместной рекурсии?

14:49
@jsunderhood А по событийной петле есть примеры вопросов? :)
14:52

.@YevhenBoyarsky Раскрою карты — вопрос на ивентлуп у нас один :) «gist.github.com/subzey/47d7720… — как будет работать этот код?»

14:55
@jsunderhood на собеседовании в яндекс.екатеринбург просили что-то с числами Фибонначи. Я провалился к счастью.
14:56

За статью о событийной петле, кстати, я получил (зачёркнуто: диплом) инвайт на Хабре. Вот она, если интересно: habrahabr.ru/company/tradin…

15:07

А диплом я так и не получил

15:09
@jsunderhood вот еще отличный доклад по этой теме youtube.com/watch?v=8aGhZQ…
15:22

Я же надеюсь, никого не отпугнёт то, что у меня из образования 4 курса «1205 00 3 Оборудование и технология сварочного производства»? :D

15:24

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

15:25
@jsunderhood Только если юридически нужен (такое бывает, если нанимать из за границы)
15:30
@jsunderhood несколько раз.
15:33
@jsunderhood Был за последние пару лет примерно на двадцати собеседованиях, про образование спросили дважды, и то исключительно формально.
15:46
@jsunderhood событийная петля? Event loop что-ли?
16:51

.@oelifantiev Да, прошу прощения, правильно-то «событийный цикл»

16:53
@jsunderhood у меня сразу ассоциации - черная дыра, теория относительности. А асинхронный вызов - горизонт событий :)
16:58

Хм, действительно, по запросу «событийная петля» гуглится какая-то атсральная ересь. Пора завязывать с жаргонизмами pic.twitter.com/xTJP2QfMJh

17:01
@jsunderhood спроси лучше, у многих ли тут есть образование :)
17:15

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

Предлагаю ещё одну музыкальную паузу: pouet.net/prod.php?which… (1 место на DemoJS'12 в категории 1K), в ней ещё нет ни Web Audio, ни WebGL

7:45

Зато есть ручное псевдо-3d, хитрая генерация звука (p01.org/releases/140by…) и ещё более хитрая упаковка JS в PNG (pouet.net/prod.php?which…)

7:51

Но лучше давайте послушаем автора этого интро, великого и ужасного @p01: 2014.jsconf.eu/speakers/mathi…

8:00

Если вы рисуете на канвасе, вот вам хинт: между определением кривой и её обводкой/заливкой можно менять трансформации jsfiddle.net/subzey/phb4976…

11:09

…в продакшне этот приём нужен нечасто, но вот в приглашении на js1k'15 (pouet.net/prod.php?which…) я его применял более чем активно

11:24

Получил массу приятных эмоций всего за полчаса: штраф за переход на красный, мудаки в РЖД и слоупочный общественный транспорт

12:02
@jsunderhood интересно кто в вебдеве с каким образованием работает. Я инженер электромеханник хим.производства.
12:39
@serebro @jsunderhood без образования :( 11 классов средней школы
12:42
@Vitalliumm @jsunderhood @serebro ушел из школы еще в 10м классе, но уже сам читал лекцию в универе!
12:45
@Vitalliumm @jsunderhood @serebro 9 классов, + 1,5 курса "программирования" местячкового техникума
12:45

Этот ответ я специально приберёг twitter.com/le0_nik/status…

14:02

Использутете ли вы модули? Много ли было проблем при переводе legacy-кода на модули?

14:03

С новыми проектами-то всё просто: берём и сразу пилим на модулях, как взрослые дяди и тёти. :)

14:05
@jsunderhood С legacy-кодом неплохо управляется browserify + browserify-shim. В пятницу упомяну это в докладе frontendconf.ru/2015/abstracts…
14:48
@jsunderhood есть некоторый монолит который как швейцарский нож. умеет все но не очень плохо. сущий легаси. сейчас делаю его масштабируемым
14:49
@serebro 4 курса «программирования в компьютерных системах» @jsunderhood
15:01

.@shuvalov_anton А потом чего? Ну, понятно, чего химики и связисты бросали, а «тыж-программист»?

15:03
@serebro @jsunderhood техник по телекоммуникациям) проще говоря, связист
15:03
@serebro @jsunderhood 4 курса «Комплексное обеспечение информационной безопасности автоматизированных систем»
15:08

.@lancedikson Хочу тебя тоже попросить рассказать, почему ты ушел с программерской специальности

15:09
@jsunderhood это заочка, и перспектива госов на паскале меня не радовала. Ворд, пеинт, диаграммы эйлера-вейна, VBA… А я ведущий уже разраб
15:09

.@lancedikson А, или имеется в виду, что остановится на бакалавре?

15:12
@jsunderhood 1. Уверенно осознал, чем хочу заниматься и от чего получаю удовольствие — веб. 2. Объёмы лишней и устаревшей информации в ВУЗе.
15:17
@serebro @jsunderhood 2 курса компьютерной безопасности и 1 курс прикладной математики, без диплома — забрал документы
15:22
@jsunderhood 3. Несмотря, что это IT-специальность, всё равно практического опыта, применимого в разработке очень мало.
15:25
@jsunderhood, поэтому я решил не тратить время и деньги в пустую, и заняться приятным мне делом.
15:25

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

15:28
@jsunderhood отучился 5 лет на математика-программиста. Математике научили, а программировать — нет :-(
15:29
@jsunderhood лично знаю ентерпрайз сеньёра который по образованию философ
16:50
@jsunderhood что можете сказать по поводу js фреймворка aurelia.io и на чем сейчас имеет смысл начинать большие проекты?
17:11

.@serebro Фреймворки и их особенности, увы, не моя сильная сторона, я сразу в этом и признался twitter.com/jsunderhood/st… Беру помощь зала :)

17:16

.@serebro Но с виду ничего так. Хотя и ничего революционно нового. А про то, какой ф/в выбрать — it depends, серебряной пули не существует

17:20
@serebro @jsunderhood если речь идет о фронтенде, то я бы предложил ember.js
17:21

Признаться, для меня фреймворки — скорее «необходимое зло»

17:49
@jsunderhood фреймворк это просто инструмент, как молоток или отвертка. Отвертка для тебя тоже необходимое зло?
18:18

.@instanceofpro Если проводить аналогии, отвёртка, как по-моему, — это либа. Ей можно закручивать и саморезы в стену и винты обшивки ракеты

18:26

.@instanceofpro а фреймворк — это самолёт. Всё включено, заранее продумано и отлично летает, но на работу по городу на нём не поездишь

18:28

.@instanceofpro На эту тему есть хорошая статья, frontender.info/zero_framework… Автор несколько экстремален, но кое в чём я с ним согласен

18:33
@jsunderhood если бы единственная доступная отвертка была с анально-педальным приводом, то я бы определнно считал её «необходимое злом»
18:33
@jsunderhood @instanceofpro сейчас все без разбора называют и либами и фреймворками. А разница лишь в размере отвертки и кол-ве насадок
18:40

.@_elergy_ Как говорилось в «Осторожно, Модерн!», разница — коrенная! pbs.twimg.com/media/Bt8NEveI…

18:41
@jsunderhood @instanceofpro отверткой можно чай размешивать
18:44
@rastopyr_ua @jsunderhood @instanceofpro если либа зависит от других либ и диктует,как тебе структурировать код-стоит ли называть это любой?
18:54

.@_elergy_ Зависимости — это просто замечательно. Но то, что заставляет определённым образом писать код — фреймворк

18:59

Например, e.stopImmediatePropagation() в jquery — фреймворковая замашка. Он не будет работать с хэндлерами, установленными не через jquery

19:02
@jsunderhood По-моему, разница между библиотекой и фреймворком - в том, что ты вызываешь функции библиотеки, а фреймворк вызывает твой код
19:06
@_elergy_ а вы тут о Фреймворки vs Либы или что обсуждается? @rastopyr_ua @jsunderhood @instanceofpro
19:06

.@ALF_er похоже, уже да

19:06
@_elergy_ @jsunderhood @rastopyr_ua @instanceofpro ох не люба мне либа, люб – фреймворк)
19:22

.@oelifantiev Спасибо! Вот это очень важная поправка, не знал, прошу прощения

19:29
После реплая @jsunderhood вся лента засрана холиварами, а я совсем не о том писал.
19:31

Раз уж зашёл разговор. А не кажется ли вам, что e.stopPropagation() слишком авторитарен? Не лучше ли, если бы каждый хэндлер решал за себя…

19:53

…исполняться ему или нет на основе e.defaultPrevented? (Поддержку этого свойства оставим за скобками)

19:54
@jsunderhood для себя по опыту пришел к тому, что он нужен в каких-то очень особых случаях. Приводит к неожиданным неудобствам потом
19:57
@jsunderhood у нас разрешается использовать stopPropagation, только если докажешь, что по-другому нельзя. Не помню, чтобы кому-то удавалось.
20:15

.@ap_savin А можно мне ознакомиться с вашим стайлгайдом? Кажется, он мне уже нравится

20:23
@ap_savin останавливать баблинг свайпа на элементах с горизонтальным скролом на мобильных, если по свайпу открывается меню? @jsunderhood
21:23

.@SilentImp В обработчике жеста для меню проверять scrollWidth и scrollLeft у e.target? Не знаю. Не уверен, что правильно понял

21:25

Вот юзкейс. Есть открытое меню и какой-то блок с кнопкой внутри. При клике куда-нибудь вовне выпадалка скрывается pic.twitter.com/rkC0lOJzin

22:03

…кликаем на кнопку внутри. Обработчик на самом блоке нам вызывать нельзя, мы глушим событие через stopPropagation()…

22:05

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

22:06
@jsunderhood странное условие не вызывать обработчик на блоке. Тогда блок должен смотреть, что клик не в кнопку. Тогда не будет stopP.
22:20

.@likhter к примеру, кнопка удаления пункта ToDo-листа. А ещё внутри могут быть и другие кнопки, на все мыслимые случаи `if` не поставишь

22:23
@jsunderhood Кейс имеет право на жизнь :) В моем понимании контейнер должен заботиться о том, что происходит у него внутри, а не наоборот.
22:27

.@likhter трудно не согласиться) Я лишь о том, что блок не должен делать stopP, а то в этом случае он решает вообще за всю страницу

22:29

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

Когда я в конторе служил версталём,
Ко мне постучался сеньор девелопер.
И глядя на код мой в открытом окне,
Он усмехнулся мне.

6:24

…это вам сегодня вместо музыкальной паузы :) Всем доброго утра!

6:25
@likhter @jsunderhood вот пример проблемы: jsfiddle.net/wbvyz17h/ Решение: capture phase или stopPropagation.
8:42

Сейчас проходит крупный ивент #FrontConfMsk, на @webstandards_up вы можете почитать текстовую трансляцию pic.twitter.com/cuPPylhCiQ

10:10
@jsunderhood @huigovnomuravei он рассказал, как плачет QA
11:02

Писать сейчас про фронтенд, пока идёт масштабная конфа, это как транслировать местный матч во время финала кубка чемпионов. Или нет? :)

13:35

habrahabr.ru/post/258449/ — весьма интересная статья. И показательная. А сообщали ли вы когда-нибудь об уязвимостях, и что вам за это было?

14:42

Свою первую «нормальную» уязвимость я нашёл 9 лет назад в одной браузерной игрушке. Отрепортил. Получил бан на четыре года.

15:25

С другой стороны, недавно в наш стартапчик обратился белый хакер и рассказал об XSS. Поблагодарили и ещё $100 ему дали

15:27
@jsunderhood так и становятся блэкхэтами
15:27

А, может, у вас есть private bugs? Не обязательно говорить, где и каких масштабов, достаточно намекнуть ;)

15:29
@jsunderhood private bugs? Это мандавошки, что ли?
15:31

.@aod_toxic :D Упс! Я имел в виду нераскрытые уязвимости для личного пользования

15:32
@jsunderhood а как вы это представляете? можно пример?
15:33

.@SilentImp Да хоть бы и как в статье после хитрых манипуляций из ниоткуда берутся деньги. Можно сообщить, а можно сохранить в тайне и юзать

15:36
@jsunderhood и сесть за мошенничество? Как бы коммиты в репозиторий именные, верно? Или предполагается, что клиент идиот?
15:39

.@SilentImp Не на своём проекте, разумеется, закладки делать. Это как минимум саботаж. Я про найденные уязвимости на чужих проектах

15:41

Прямым текстом, чтобы не было кривотолков. Я НЕ призываю делать закладки в коде. Обманывать работодателя — плохо и за это положен 9 круг ада

15:45

Но если вы обнаружили, что кофейный автомат (который кодили не вы!) выдаёт латте по цене чая — вы будете этим пользоваться, или сообщите?

15:46
@jsunderhood А статья не положена?
15:48

.@chemikadze И статья, наверняка

15:48
@jsunderhood Думаю качественный код дает больше профита (как минимум денег), чем экономия на латте.
15:49

.@aod_toxic Хм… а зачем заботиться о качестве кода чужого, никак не связанного с тобой кофейного аппарата?

15:51
@jsunderhood добавляешь в резюме - пофиксил кофеварку =)
15:52

.@aod_toxic Ну, фиксить-то другие будут. А вот на вакансию QA «нашел багу в кофейном автомате» весьма достойно.

15:53

Once again. Давайте говорить о багах, которые вы сами честно нашли (НЕ имея доступа к исходникам даже на чтение).

15:55
@jsunderhood мне кажется, или ты пытаешься вычленить "хакеров" среди программистов?
15:56

.@aod_toxic гхм… не хакеров, а добровольных аудиторов безопасности

15:58

.@aod_toxic …чтобы найти SQL-инъекцию в поиске на Джумле, не нужно иметь особых хакерских талантов

15:59

Окей, видимо, никто не хочет рассказывать, это нормально. Тогда расскажу о своих курьёзах. Один раз я нашёл SQL-инъекцию на сайте РГУ…

16:05

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

16:07

…говорю им, чуваки, у вас SQL-inj. Они: нее, не может быть, потому что не может быть. Поверили только когда скинул им логин подключения к БД

16:08

Люди отрицали очевидное. Зачем — мне непонятно.

16:10

Для меня сообщить об уязвимости — это как сказать «а у вас ширинка расстёгнута». Кто-то скажет спасибо. Кто-то расценит как домогательство

16:13

Ошибки бывают у всех. По невнимательности или по незнанию. Но если не знать, как искать уязвимости, то как научиться их не делать?

16:21
@jsunderhood @valerypopoff в Вышке два месяца стоял автомат, который готовил капучино за 20 копеек, а ещё давал три рубля сдачи
16:23

Меня обвинили в аморальности и саботаже, потом в хвастовстве. Или я поднял не ту тему, или не умею изъясняться. В любом случае — извините.

16:28
@jsunderhood а еще у тебя фотка страшная. ты там как будто с адского похмела. я же видела тебя в жизни - ты не такой!
16:58

.@teardrop_lisa Ты же меня видела после полудня, да?

16:59
@jsunderhood вот и фотографируйся после полудня!
17:04
@teardrop_lisa @jsunderhood да, фотография эпически прекрасна. Под капотом AlcoScript от Кошерного Клошара.
17:22
@teardrop_lisa @jsunderhood Я любя. Просто воздаю фото должное.
17:22

.@SilentImp @teardrop_lisa У меня вообще морда нефотогигиеничная. Но что поделать, Кодекс Ведущего Подкапотного требует фото на аватарке.

17:24

Прямо какой-то месяц мержев github.com/jashkenas/unde…

19:21

Интересно, что дальше? Grulp? Emberbone? Npmower?

19:29
@jsunderhood Embularactymerbone
19:52
@jsunderhood bower был не нужен с самого начала. npm вполне мог работать с css/html и тд, Grulp был планом Gulpовцев на момент релиза.
19:58

.@listochkin про bower — в самую точку! Мне кажется, fat написал его не потому что он нужен, а потому что хипстер

20:01
@jsunderhood @listochkin мне безумно нравится управлять пакетами при помощи nuget, когда "прилетает" только то, что нужно
20:10

.@Vitalliumm Но никто же не мешает подключать только то, что нужно, а остальное — нехай лежит, много места не займёт @listochkin

20:12
@jsunderhood @listochkin да, но бывает так, что автор меняет директорию/название/etc., приходится подстраиваться.
20:17
@jsunderhood @listochkin или вспомните истории, когда автор внезапно удаляет свою библиотеку с гитхаба, с корнями.
20:17

.@Vitalliumm Если одолевают сомнения, можно же всегда форкнуть репу и выставить путь к ней в депсах package.json

20:23
@jsunderhood нам в универе начальник СБ с гордость рассказывал, как завели дело на нашедшего уязвимость на их сайте, а на дыру забили.
20:24

Вообще, интересно, зачем удалять свой код если им пользуются? У меня есть проект, страшный как смерть, но я его храню, ради трёх калек

20:33
@jsunderhood когда мне грустно и плохо я чищу жесткий диск и репозитории. И репозиториев все меньше.
20:36

.@SilentImp Ну что же так, сплеча? Можно сначала добавить опечаток, чтобы не запускалось. А если за месяц ни одного ишью или форка — удалять

20:42
@Vitalliumm @jsunderhood @listochkin можно открепить форк в свой самостоятельный проект, написав в поддержку и обосновав зачем. Я так делал.
20:56
@jsunderhood ну как мне кажется, это большое дело. Мердж давно напрашивался. Это всегда интересно,когда форк становится популярнее оригинала
21:47
@Vitalliumm @jsunderhood У bower есть одно преимущество ему не важно наличие meta.jsonЧто полезно при проверке библиотек. Не все есть в npm.
22:03

# Пятница 89 твитов

Bret Victor круто рассказывает о «so meta». Особенно хорош его доклад Inventing on a Principle youtu.be/a-OyoVcbwWE Всем доброго утра!

6:46

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

8:53

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

8:54

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

8:56
@jsunderhood Можно ещё почему программисты
8:57

.@toivonens Ну, я имею в виду и версталей и даже немного «фронтовых» админов. Да и «нативщики» вряд ли будут читать jsUnderHood

8:58

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

8:59
@jsunderhood Мне нравится разработка и круг общения, который она предполагает. С людьми всегда можно договориться, и они поступают логично.
9:06
@jsunderhood Но в другой стороны сложно пользоваться сервисами людей других профессий, тк везде видишь косяки и плохую организацию.
9:07

Если какая-то тема уже раньше поднималась другими сессионными ведущими этого аккаунта, вы же говорите, ок? Чего одно и то же мусолить?

9:08
@jsunderhood потому что в 11 лет я увидел на полке книжного книгу по HTML. После этого я пробовал себя в разном программинге, но выбрал веб.
9:14

Странно. Точно помню, что на работе лежала книжка по HTML где-то 2000 года. Наверное, её всё-таки сожгли, чтобы не дай бог никто не прочитал

9:20
Мой друг хотел срубить бабла по легкому в интернете, всё началось с порносайта :D
так вот я попал в веб )) twitter.com/jsunderhood/st…
9:21
@jsunderhood в айти приходится "переучиваться" каждые 3 года; странно слышать "не умею"; программист может освоить много профессий
9:27

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

9:30

Вам же приходилось слышать вопросы «как получить в php результат из функции js на странице», да? Такие люди не понимают, что происходит

9:32

Чтобы уверенно работать с клиентским js, нужно хотя бы иметь представление о http и, желательно, о tcp/ip

9:36
@jsunderhood В библиотеке нашел книгу "Сам себе WEB программист". Пожалуй, последняя книга, с которой надо было начинать знакомство с веб.
9:41
@jsunderhood всё банально. В детстве я нажал не тот пункт в меню на сайте и открылся исходный код :) меня это поразило до глубины души :)
9:41

.@kuzvac У меня примерно так же. Ради любопытства посмотрел в сгенерированный HTML, и — ба! — да там же просто текст. И пошло-поехало

9:42
@jsunderhood к сожалению, в реальности все иначе. Очень часто человек использует нечто, не понимая или не зная как оно работает внутри.
9:44
@jsunderhood имхо, хороший программист должен понимать КАКИМ ОБРАЗОМ это работет в первую очередь
9:44
@jsunderhood А я в 11 начал с советских калькуляторов, потом C++ писал 4 года, а потом понял, что он никому не нужен, и свалил во фронт.
9:52
@jsunderhood страш.бро писал на джаве. я хотел писать лучше него.начал с HTML :). сейчас брат преподает математику, а я пилю битуби-битуси
9:52
@jsunderhood рисовал говнодизайны, позже стал брать еще за верстку. Потом верстал чужие говнодизайны. Далее стал прогать интерфейсы на JS =)
9:52

.@VovanR Хм, мой коллега ушёл из труъ-вебдизайна в хардкорный JS. А вот случаев перехода из кодеров в дизайнеры я не знаю

9:54

Отлично! Это же чертовски простой план, как привлекать в нашу отрасль новые кадры :) twitter.com/safrankov/stat…

9:56
@jsunderhood @VovanR знаю одного дизайнера бывшего админа. Не эникейщика, а вполне нормального сетевика в провайдере.
10:00
@green343 @jsunderhood освоил какие нибудь профессии еще?
10:15

.@i_told_ya Что до меня, я верстаю для полиграфии, в меру фотошоплю, сисадминю, знаю основы UI/UX и перевожу для frontender.info :)

10:18

.@i_told_ya …это, конечно, скорее, навыки, а не профессии. Но когда диз забухал, а надо оконтурить иконки в svg, и Jack of all trades сойдёт

10:25
@jsunderhood всю жизнь был уверен, что айти не мое, хоть и учился в этой сфере. Потом нашел работу разрабом и не представляю себя иначе
10:25
@jsunderhood а есть желание попробовать новые профессии? Какие?
10:34
@jsunderhood я подумываю о психологии, урбанистике, градостроительстве
10:34

.@i_told_ya моё откровенно слабое место — коммуникации с людьми. Думаю, это надо подтянуть. Но все книжки, что я видел — какая-то хрень

10:37

.@i_told_ya психология — дело хорошее. В UX и производственных процессах точно пригодится. Но, опять же, трудно найти адекватную литературу

10:39

.@i_told_ya Кстати, «Thinking Fast and Slow» Даниеля Канеман — просто великолепная книга и очень легко читается

10:42
@i_told_ya @jsunderhood плитку умею, электрику(3 года назад научился); после ряда внедрений могу работать менеджером в некоторых темах
10:43

Ещё из книг очень хвалили amazon.ca/Field-Guide-Un…

10:46

Иногда, когда мне очень грустно, я хочу бросить вебдев и стать водителем маршрутки

10:47
@jsunderhood меня тоже к машинам тянет, хочу их чинить
10:54

Ну давате ещё по книгам. «Вы, наверное, шутите, мистер Фейнман» — это маст-рид для каждого человека с техническим складом ума

10:57
@jsunderhood а я почему-то таксистом.
10:57
@jsunderhood книга очень средняя на троечку
11:13

На twitter.com/jsunderhood/st… много интересных ответов

11:17
@jsunderhood У этого вопроса есть ответ, отличный от «никак»
12:48
@jsunderhood Когда мне стало грустно продвать краску, я пошел в вебдев. Теперь когда мне грустно, я думаю о краске и становится легче.
13:37

Продолжая мета-тему: Занимаетесь ли вы фротендом после работы, как хобби, и как ваши вторые половинки относятся к этому?

14:16

Моя, например, не всегда понимает, почему я до трёх ночи пытаюсь уменшить код на один байт при том, что не получу с этого никакой выгоды :)

14:18
@jsunderhood просто программирую в свободное время, когда оно есть. но приоритет идет на половинок. времени хватает на все :)
14:18
@jsunderhood это уже зависимость 😂
14:20
@jsunderhood кстати о мета-темах. я знаю что @veged такое любит обсуждать. и давайте еще про парное программирование потом поговорим?)
14:21

.@rastopyr_ua Давайте! Как по мне, парное программирование — утопия. Лучше хорошее, но краткое, ревью и включённые линтеры

14:23
@jsunderhood после работы - только бэкендом
14:24
@jsunderhood у меня это хобби, поэтому занимаюсь после работы. А как к этому должны относиться половинки? у каждого есть хобби
14:25

Вообще, самая лучшая работа — это хобби, за которое почему-то платят деньги

14:26
@jsunderhood не согласен, вдвоем некоторые проблемы решаются гораздо быстрей. Просто оно должно быть таргетированным на конкретную задачу
14:27
@jsunderhood там, где проседает один программист, подхватывает другой и наоборот — получается довольно эффективно
14:27
@jsunderhood youtube.com/watch?v=F_cD6X… вот кстати достаточно подробная лекция на тему
14:32
@jsunderhood а есть такие? (из дева) :)
14:33

.@Vitalliumm тут жеж как. Если чувствуешь, что дев не приносит тебе удовольствия, значит твоя настоящая привязанность какая-то другая

14:34

.@Vitalliumm Само собой, не может быть так, чтобы вообще всегда всё офигенно. Я имею в виду некое усреднённое значение «довольности»

14:35
@jsunderhood В России занималась, сейчас нет. На работе хватает времени на все что меня интересует.
14:39
@sc0rp1d @jsunderhood Привет, меня зовут Александр и я программирую дома уже 12 лет…*всхлипывает*
15:02
Только вряд ли у кого-то есть хобби "фиксить баги" или "разбирать чужой говнокод". А это приходится тоже делать twitter.com/jsunderhood/st…
15:03

.@rusgautama С адским говнокодом я — тьфу-тьфу — уже сталкиваюсь нечасто. А правка багов — это медитативный процесс, улучшение Вселенной

15:05

.@rusgautama …правка багов — это как уход за садом. Там смотришь, листочек неправильно — чик! Там заборчик покосился — шлеп! Красота!

15:07
@jsunderhood представь что ты оказался на огромной куче радиоактивных отходов и говна с задачей привести сад в порядок. @rusgautama
15:11
@jsunderhood берешь лопату и начинаешь искать сад. А за спиной стоит черный властелин с секундомером и страпоном. @rusgautama
15:11
@jsunderhood Это больше напоминает реальный багфиксинг. И процесс не медитативен. Совсем. @rusgautama
15:11

.@SilentImp Надо думать, по условиям задачи я сам же разложил эту атомную диарею? Если да, то так мне и надо. @rusgautama

15:15
@SilentImp @jsunderhood @rusgautama есть вещи хуже багфиксинга. Писать документацию к чужому коду, например:)
15:15
@jsunderhood нет, в одиночку такое не осилить. Всегда есть легаси код и тот, другой, чувак. @rusgautama
15:23

.@SilentImp Я каждый день работаю с легаси, 7Мб JS, начнали писать в 2011 C++ники, но у меня нет анального таймера, и это сильно меняет дело

15:24

.@SilentImp Если манагер не вынимает душу, то есть вера в светлое будущее и то, что будут на Марсе яблони цвести

15:25
@jsunderhood идиотизм
16:59
@jsunderhood @rastopyr_ua тогда я с коллегами работаю в утопии ;-) у нас уже триплпрограммирование работает, пробуем квадропрограммирование!
17:31
@jsunderhood В Финляндии любят тоже вдвоём засесть, или коллективные технические брейнштормы @rastopyr_ua
17:32
@jsunderhood занимаюсь бэкендом. Какие вторые половинки? :)
17:39
@jsunderhood да, но вторая половинка и отпочковавшиеся четвертинки не очень готовы мириться с этим фактом))
18:02
@jsunderhood @rastopyr_ua парное программирование позволяет пресекать ересь, которая может пройти, если задача срочносрочная
18:02

.@unel86 если задача юберсрочная, то, конечно, можно хоть всем отделом её пилить. Но это же не постоянно

18:03
@okertanov ну, вы не правы, время от времени стоит переключится. Но @jsunderhood почему именно водителем?
18:08
@jsunderhood меня вот всегда больше тянуло попробовать себя в качестве маленькой лошадки, баристы или стриптизера в гей-клубе. @okertanov
18:10
@jsunderhood Так как свою работу стоит любить, то это для меня вполне логичный выбор.
18:16
@jsunderhood я пилю фронтент потому что ненавижу людей, а стать врачом помешала гемофобия.
18:34
@jsunderhood к чёрту фронтенд. Кому он нужен)
18:34

.@tommy_diaver Пральна! Только telnet, только хардкор

18:36

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

Одна из моих излюбленных «дисциплин» js-гольфа — злоупотребление DOM и BOM. Например,
var escapedHTML = new Option(”<").innerHTML; // "&lt;"

8:07

В том же jsfuck.com символ "<" добывается весьма изощрённым способом: ““.italics()[0]

8:13

Что интересно, код выше будет работать даже в nodejs, в нём тоже есть нестандартные String.prototype.italics, .link, .anchor, .big и другие

8:17
@jsunderhood да, жена только рада, что я развиваюсь профессионально) но до трёх не сидел, максимум пару часов после работы
8:18
@jsunderhood Мне кажется что настоящие айтишники — они до мозга костей. И, конечно, же прогят/админят/изучают/читают во вне работы →
8:18
@jsunderhood → но жены/подруги, если они не айтишницы, обычно смотрят на это не очень воодушевленно. У меня так.
8:18

Вопрос читателям:
Есть строка с таким содержимым: текст в UTF-8, закодированный в base64. Как его оттуда вытащить на клиенте?

8:24
@jsunderhood почему нестандартные-то? Annex B: people.mozilla.org/~jorendorff/es…
8:36

.@vkurchatkin Забавно, похоже их уже «легализовали». В es5 их не было

8:37
@jsunderhood функции btoa или atob
8:38

.@roman01la Близко. Но atob вернёт не utf-8, а строку псевдо-8bit-ascii (символы с charCodeAt от 0 до 255)

8:42
@jsunderhood такой еще есть стандарт: javascript.spec.whatwg.org
8:50
@jsunderhood developer.mozilla.org/en-US/docs/Web… Solution 1, функция b64_to_utf8. Работает в IE10+ и остальных браузерах.
10:03

.@le0_nik Йеп! Это как раз тот случай, когда два метода со странным поведением дают ровно то, что нужно

10:04
@jsunderhood sublime или atom?
10:05

.@DimkaSerov Пока что саблайм 3. Атом хорош, но остаётся смутное чувство недопиленности

10:06

.@DimkaSerov Хайповый Slack тоже на атом-шелле (его ещё вроде в electron переименовали?), и тоже вызывает чувство недопиленности

10:08
@jsunderhood пользуешься easymotion под саблайм? Или как то по другому перебегаешь по коду?
10:09

.@DimkaSerov неа, я не большой любитель вима (хотя и говорят, что это удобно). Ctrl-G, Ctrl-F, Ctrl-D и Ctrl-F мне достаточно

10:11

.@DimkaSerov *поправочка, вместо одного из Ctrl-F я имел в виду Ctrl-R

10:12
@jsunderhood @DimkaSerov атом имеет склонность к зависанию :(
10:19

@jsunderhood напоминает: Don't code and drive! ;)

10:27

Непонятно, зачем надо было форкать не-очень-стабильный nwjs в не-очень-стабильный electron

10:54
@KSDaemon @jsunderhood голове отдыхать тоже нужно давать :)
10:55
@jsunderhood расскажешь про свой топ плагинов для саблайма?)
10:56

.@DimkaSerov Всё достаточно ванильно: hayaku, jshint, trailing spaces и схемы для подсветки less и шаблонизатора django.

10:58

.@DimkaSerov с hayaku гораздо проще писать css, но его киллер-фича для меня — Ctrl-Alt-⇅

11:04
@jsunderhood @DimkaSerov в emmet есть тоже самое
11:07

.@iamstarkov Наверняка ещё и больше. Но мне все равно, какой именно плагин обеспечивает мне эту функциональность

11:09

.@iamstarkov @DimkaSerov Раньше я мог потратить три дня, чтобы отконфигать и вылизать Миранду или Тотал с нуля. Но уже как-то надоело

11:12

Вот ещё загадка на смекалку: как проще всего в браузере редиректнуть на другой домен, то тот же uri? Скажем с foo.сom/bar/ на baz.сom/bar/

11:17

.@mostolovista В точку!

11:37

Ещё задачка для скучающих джаваскриптстеров (если ещё не надоело), какая строка будет соостветствовать регулярке: /(\cb)\1\2/

11:41

Самый «завальный» вопрос, который можно задать на собеседовании, это не про равно-равно и сложение строк с числами…

11:45

…вот кто уверен, что знает, что вернёт такая функция?
function foo(){
try { return 1}
finally { return 2}
}

11:47
@jsunderhood 2 она всегда вернет. Инфа 100%
13:00

Уважаемые Знатоки, внимание, ответ: "\x02\x02\x02"

13:08

… \cb — это Ctrl-b, т.е, \x02. \1 — ссылка на первую скобку, которая явно равна \x02. А второй скобки нет, поэтому \2 парсистся как \002

13:10

Вот ещё кусочек «адокода»:
with({foo: 42}){
var foo = 33;
}
Как оно отработает?

13:23
@jsunderhood правильный ответ - кинет ошибку, т.к. должен быть 'use strict', блеат. А вообще в объекте foo станет равным 33.
13:56

.@le0_nik тут можно ещё дополнить, что переменная foo всё же объявится (= undefined)

14:10
@jsunderhood верно, во внешнем скоупе объявится, но без значения.
14:24

Приходилось ли вам работать с кодом с js как с AST?

15:41
@jsunderhood было дело - для автоматизации перехода на другую систему интернационализации (она же i18n)
15:45

Вдогонку: что больше понравилось, Esprima или ast uglify (или что-то другое)?

15:46
@jsunderhood с ним только так и надо работать!… жаль нет нормальных редакторов :-(
15:48

Желание поработать с AST появилось после ужасного хака, где код парсился регуляркой. И вылилось в npmjs.com/package/rhubarb

15:54

На всякий случай: никогда, слышите, никогда! не парсите js регулярками!

15:56

Главная проблема в парсе js регулярками — это… регулярки. Точнее RegexpLiteral, начало которого трудно отличить от деления и начала коммента

15:58
@jsunderhood ничего кроме Esprima не использовал, но впечатления положительные
15:58

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

16:04

В Эсприме больше всего не понравилось, что Identifier может быть как varname, так и propertyname, отличить можно только по родительской ноде

16:20
@jsunderhood вопрос возникает когда js надо не только распарсить, но и изменить и, желательно, еще и сохранить.
16:22
@jsunderhood вот тогда уже ast выглядит менее предпочтительным вариантом
16:22

.@mkazantsev да, есть такое дело. Распарсить — но проблемо, собрать обратно целый гемор. Да ещё ж и с сорцмэпами надо (иначе уже не принято)

16:24

.@mkazantsev Говорят, в jscs именно это долгое время мешало не просто выдавать ошибки, но и править их автоматически

16:28
@mkazantsev @jsunderhood так а вроде есть estraverse и еще какая-то либа, которая ast "сериализует" обратно.
17:55
@jsunderhood я в итоге в другую сторону пересобирал регэкспами - повезло, что довольно простые паттерны были
18:46

.@mkazantsev Я полагался на индекс вхождения и длину токена. И замены в обратном порядке: с конца в начало. Зато это сохраняет ориг. отступы

18:49

.@iamstarkov Из имеющегося Эсприма чертовски хороша @mkazantsev

18:54

Кто-нибудь может посоветовать REPL джаваскрипта под андроид? Для проверки чего-нибудь в полевых условиях пользуюсь repl.it, не очень удобно

19:08

.@sudodoki Выглядит очень многообещающе, особенно после полуживого anode (github.com/paddybyers/ano…)

20:38

Джаваскипт со скрипом, медленно, но верно расползается по платформам и скоро будет в вашем холодильнике. Если его ещё там нет, конечно

20:56
@mkazantsev @jsunderhood вот этот доклад гляньте, там пример реальный. abstract.properties/jsconfbp-2015/
20:58

Тащемта, даже Рендалл Манро не обошёл это явление стороной xkcd.com/1508/

21:05
@jsunderhood конкуренты: Python или Go, близки или далеки от js в этом деле ?
21:08

.@Moroz_v Python и так уже на всех платформах, даже на Symbian. Но вокруг него уже нет хайпа, и на микроволновки его портировать не станут

21:15

.@Moroz_v Как обстоят дела с Go увы, не знаю. О Go или Dart я слышу только когда собирается очередной митап по Go или Dart

21:17

.@Moroz_v Весьма вероятно, JS как таковой ни при чём, и любой браузерный язык был бы так же популярен. Снова Ренделл xkcd.com/1367/

21:22
@jsunderhood меня вот ещё один вопрос интересует у Python или Go есть такое же сообщество и пакетный менеджер, как у JS?
21:36

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

Вопрос @iamstarkov превратился в интересное обсуждение пакетных менеджеров twitter.com/iamstarkov/sta…

8:30

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

8:43
@jsunderhood например, в каких?)
8:45

.@sagrenite в дискассе (ссылка чуть выше) шле речь про Python, да и про php я что-то такое слышал

8:46
@jsunderhood даже у PHP уже давно есть Composer.
9:09
@jsunderhood почитал дискасс, интересно) когда я учил питон - сразу рекомендовали юзать virtualenv. В особенности для Django
9:09

.@sagrenite А когда ты учил питон? Ну хотя бы примерно, мне для общей картины

9:12
@rusgautama @jsunderhood composer в PHP по-моему не умеет то что озвучено. Там одна свалка зависимостей, как в bower
9:22
@jsunderhood учил его в 2011, но virtualenv появился ещё в 2008
9:22

.@sagrenite Примерно в одно время со мной. Жаль, мне тогда никто не сказал For great justice использовать virtualenv

9:24

float: left;
display: inline;
Кто-нибудь ещё помнит, зачем эти два CSS-свойства применяются вместе? :)

9:32
@jsunderhood что за дичь?)
9:55
@jsunderhood фикс для дабл маржинлв в ие6?
9:55
@jsunderhood забудешь эти двойные маргины в IE, как же.
9:55
@gxoptg_ @denisov @jsunderhood это не нужно читать, у нас уже есть флексбоксы, и уже слава богу нет IE6
10:37
@jsunderhood @sagrenite в разных других языках есть инструменты для проектного управления завмсимостями 100 лет как;)
10:57

Последний раз я верстал шаблон email года четыре назад. В то время приходилось использовать чуть ли махровый html 3.0. Как там дела сейчас?

11:01
@jsunderhood tables, inline-css :(
11:29
@jsunderhood Вот таблица, полная боли: templates.mailchimp.com/resources/emai…
11:29
Специально для подписчиков @jsunderhood, которые просили больше ада и шуток - твиттер @horse_js!
11:34

.@bashmish Я оттуда новости узнаю. :) Если КоньJS пишет «underDash», то как бы понятно, что-то происходит

11:36

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

11:46

Что не рассказал, можете почитать тут gist.github.com/subzey или тут habrahabr.ru/users/subzey/t…

11:48

В оставшееся время я поотвечаю на ваши вопросы. Задавайте любые, даже не связанные с вебдевом

11:51
@jsunderhood Может, спрашивали, но я не видел. Какой у тебя опыт разработки?
11:55

.@gxoptg_ В свою первую контору я пошёл работать около 9 лет назад

11:56
@jsunderhood на каких ещё языках ты программируешь? Какой опыт на них?
11:56

.@Kern_0 Раньше хорошо умел php (ок. 5 лет стажа). Питон около 3-4 лет. Знаю, с какой стороны держать C и Asm

12:01

.@Kern_0 Но js — моя первая любовь (после бейсиков). Подкупило тогда то, что ничего не надо ни ставить, ни компилировать :)

12:03
@jsunderhood что насчет 420?
12:07

.@i_told_ya Не, 420 не прёт, чувствую себя тупым и вялым. Старый-добрый алкоголь лучше

12:09
@jsunderhood какие у тебя музыкальные пристрастия?
12:11

.@i_told_ya По большей части Industrial rock/metal, IDM, ambient и chiptune

12:12
@jsunderhood Я — джуниор, читавший Code Complete и учивший JS по MDN. Что мне стоит почитать?
12:15

.@gxoptg_ Почитай «The Good Parts», и айда фигачить код! Только практика, только хардкор, а там по ходу и сам поймёшь, что ещё почитать

12:17
@jsunderhood Ну и вдогонку: какие книги/ресурсы/навыки/etc тебе больше всего помогли в карьере и развитии?
12:18

.@gxoptg_ javascript.ru и как ни странно, стандарт ES5 в переводе Д. Сошникова. Ну и остальное по мелочи, уже не помню

12:25

.@gxoptg_ Ах, да, код сам по себе хорошая книга. Можно открыть сорц какого-нибудь jquery или underscore и изучать, как пишут маститые кодеры

12:28
@gxoptg_ @jsunderhood Пробовал на досуге как-то пособирать gist получился небольшой gist.github.com/ufocoder/13eb3…
12:29
@jsunderhood jQuery скорее учебник того, как не надо писать. По крайней мере в 2015 году.
12:36

.@mkazantsev если ты про API, согласен, апи jquery — то ещё нагромождение легаси

12:38
@gxoptg_ @jsunderhood Professional JavaScript for Web Developers by Nicholas C. Zakas, чувак дотошнейший и практичнейший.
12:42

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

12:45

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

12:48

…в каком-то из плагинов было что-то вроде setInterval(fn(){
$a = $a.closest(".foo");
}
Ух, как оно текло!

12:51

Или вот: в ноде .emit() возвращает то, было ли обработано событие. В DOM dispatchEvent — то, был ли он defaultPrevented…

12:55

В jquery $(…).trigger() возвращает this. А зачем нам знать, было обработано событие или нет? Чейнинг-то важнее

12:56
@jsunderhood помимо JS, на чем разрабатываешь/что изучаешь и почему? Нравится ли?
12:57

.@le0_nik ответил чуть выше, twitter.com/jsunderhood/st… Сейчас изучаю Open/WebGL, без фреймворков WebGL — злая вещь, но пока не унываю)

13:01
@jsunderhood что ты думаешь на счёт раскладок ? Дворака и тд?
13:01

.@DimkaSerov кому как удобнее. Если у тебя один ноут, с которым ты везде, то вообще нет препятствий. Сам пользую Бирмановскую Qwerty

13:03
@jsunderhood @le0_nik Кстати в этом году вышла первая книжка по WebGL на русском
13:04
@jsunderhood а что на WebGL разрабатываешь?
13:05

.@le0_nik Пока ничего. Изучать начал потому что заметил в демосценерской теме заметный дрейф в его сторону

13:06
@jsunderhood сколько символов набираешь в минуту на англ раскладке?)
13:07

.@DimkaSerov Не знаю. Когда кодю, я думаю с «меньшим рейтом», чем печатаю. А в скайпе сильно не разгонишься

13:11
@jsunderhood я сейчас верстаю письмо. Это как и прежде ужас: таблицы, inline CSS. Только Premailer немного упрощает жизнь.
13:12

Кстати, разработчики, как у вас с английским языком? Общаетесь ли вы с иностранными коллегами в скайпе/слэке/чем-нибудь ещё?

13:14

Я частенько переписываюсь с французами, они говорят, что у них английский знают практически все

13:17
@jsunderhood для реддита хватает)
13:17
.@jsunderhood ладно. Самый технический вопрос этой недели : как думаешь, если сразится акула и медведь, кто победит?
13:18

.@DimkaSerov Ха! Конечно же медведь! Этж машина для убийства, когти — во!, зубы — во! А черно-белая раскраска и тёмная шерсть под глазами…

13:21
@jsunderhood на работе все общение на английском языке, 95% всей информации из англоязычных источников, ну и общение с коммьюнити конечно же
13:21
@jsunderhood Общаюсь только на англ, но с сообществом из России/Украины/Беларуси - по русски
13:21
@oelifantiev есть такой how-to по верстке писем habrahabr.ru/company/pechki… @jsunderhood
13:28
@jsunderhood @gxoptg_ можно было сразу ссылку дать на профиль @DmitrySoshnikov :)
13:31
@jsunderhood Если в целом говорить в рамках event drivent development, то нам действительно не нужно знать обработалось ли событие.
14:00

Вы наверняка видели выступление Вадима Макишвили «36» youtu.be/xPPCzryZK44. Делюсь ссылкой на его новое выступление youtu.be/iBHr8gKc5L8

14:38
@jsunderhood отличная идея про this gist.github.com/subzey/8115612 Еще нигде не встречал до этого
15:40

.@VovanR Рад, что понравилось!

15:41
@jsunderhood хватает только на чтение и написание комментариев к коду. Разговаривать не с кем, так как никто не знает английский =)
15:41

Я всё думаю, в coffescript же нельзя принудительно объявить переменную как локальную (coffeescript.org/#try:%23%20%D1…) и нет неймспейсов…

18:07

…товарищи кофескриптеры, вы что, все имена глобальных (или в общем случае из внешних скопов) переменных запоминаете?

18:08
@jsunderhood в частности поэтому и забил на coffeescript. Да сейчас он уже и не актуален. ES6 + Babel FTW.
18:14

.@le0_nik просто именно «вывернутые наизнанку» объявления переменных меня в своё время и оттолкнули от кофе. Но вдруг я чего-то не понял

18:17

Вдогонку признаюсь, у нас на проекте в .jshintrc выставлен "-W004": true, разрешающий несколько объявлений одной переменной (пока пилим es5)

18:31

…не очень красиво, но зато легко добавлять-удалять циклы, при условии, что var используется де-факто как «типа-let» с блочным скопом

18:34

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

18:38
@jsunderhood иногда, зависит от обстоятельств. Точно нет если я - один разработчик на проекте :) И да, стараюсь не делать вайтспейс диффы.
18:40

Я считаю, singlevar — плохая практика. После мержа может остаться
var a=1,
b=2;
c=3;
«Одна переменная — один var» в этом железобетонно.

18:45

…да и замена ; на , меняет строку и делает тебя последним в блейме :)

18:47
@jsunderhood Всегда делаю git add -p и иногда редактирую в нем чанки. Стараюсь раскидывать функциональные правки по разным коммитам.
18:48
@jsunderhood гит вообще меняет мышление о процессе разработки, приходится разбивать правки на разные коммиты в зависимости от их назначения.
18:48

.@lancedikson @ixth А-аналогично. Атомарные правки проще отследить и при необходимости откатить. git-revert-driven development, хехе.

18:51
@jsunderhood поэтому, отвечая на твой вопрос: да, стараюсь задумываться обо всём, что делаю
18:52
@jsunderhood а что есть из годных программ периодические перерывы/нотификейшены делать под мак?
18:52

.@sudodoki Я на работе под виндами. Подсказка зала?

18:53

Эксперимента ради использовал в одной строчке let, стрелочную функцию, дестр. присваивание и аргументы по умолчанию: babeljs.io/repl/#?experim…

19:07

…Тото, мне кажется, мы больше не в Канзасе.

19:08
@jsunderhood из-за несовершенства контроля версий? Пфф
19:14
@jsunderhood @toivonens первая же проверка отвалиться, что ж такого. Хотя я - за
19:19

.@denisx Хорошо, если есть линтер на он-коммит хуке. А то «чего там проверять, одну очевидную строчку?»

19:20
@jsunderhood Если весь новый код вливать через PR с continuous integration, этой проблемы не существует.
19:21

.@toivonens Для проектов размером с баржу — безусловно! А кто будет каждый раз делать CI для библиотечки npm в 50 строк?

19:23
@jsunderhood @denisx препуш-хуки лучше, меньше отвлекают
19:23
@iamstarkov @ixth @jsunderhood вы задроты просто, я бы вам не доверил организовать пьянку, например. ;)
19:28
@jsunderhood @toivonens я для своих однострочников тренис поднимаю и норм
19:30
@jsunderhood думаю об этом перед коммитом. Но обычно не парюсь и в один коммит может попасть несколько тикетов. Или попутно исправленный баг
19:58
@jsunderhood атомарные коммиты стараюсь делать. Если много форматирования и прочих стайл-фиксов -> отдельная ветка и прошу всех помержиться
19:58
@listochkin @VovanR @jsunderhood аналогично считаю идею плохой. Давно юзаю bind и других заставляю:)
20:20

Что ж, моё время подходит к концу. Спасибо вам, коллеги, я узнал много новых вещей и услышал много самых разных мнений

20:45

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

20:47

Вот вам на прощание микроскопическая демка:

20:47

eval(unescape(escape('𬱥𭁉𫡴𩑲𭡡𫀨𡡵𫡣𭁩𫱮𚀧𚁥👣𫱮𬱯𫁥𚐮𨱬𩑡𬠦𙡥𛡣𫁥𨑲𚀩𛁥𛡬𫱧𚀧𚰨𨰽𙰢𧁜𫠢𚰧𚐫𚁡🐧𠑲𬡡𮐨𜐶𚐮𪡯𪑮𚁩🰢𘂷𘠺𘢷𘀢𚐫𙰩𚱣𚰨𨠽𙰢𛡜𙰢𦱩𙠱𧐫𙰩𚰧𚁩🐡𪐬𘠠𥁨𨑮𪰠𮑯𭐡𘀭𛐠𠁪𬱕𫡤𩑲𢁯𫱤𘀢𚐫𙰫𨠫𨰫𨐫𙰢𘠩𙰩𛁩🐱𩐳𚐠').replace(/uD./g,'')))

20:48

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

20:49

На этой неделе с вами был Антон @subzey Хлыновский.
Для меня это было очень новым, необычайно интересным впечатлением. Вы офигенные!

20:51

goo.gl

youtu.be

github.com

gist.github.com

other