?

Log in

No account? Create an account
усы2

Стой под стрелой

Поступки и мысли, о которых могу вспомнить не краснея

Ворчание ягнят
усы2
tonsky

Завел блог на стороне, хе-хе http://grumpy.website. Там — про интерфейсы, тут  — про программирование (если полностью на английский http://tonsky.me не перейду, конечно).

Движок — кастомный на Clojure, написан в прямом эфире часов за 15.

Привет.


ЮАР туда и обратно
усы2
tonsky

Сб

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

Вс

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


Пн

Просыпаюсь от рева чаек. Водитель считает, что Никита — женское имя. Торопит заводить детей. Обнимаю в офисе пять человек. Девушка с работы узнала на улице, сияю несколько минут. Лунное затмение закрыло луну на четверть. Бегаю смотреть пять раз.

Вт

Самый теплый день. Переспрашиваю водителя. Четыре раза. Из шнура идет черный дым. Руководство дарит ежедневник на пять лет. Солнце полностью опускается в океан за 2,5 минуты. Бомжи представляются по имени, прежде чем просить денег. Дом стоит между двумя отелями, церковью и виллой, но возвращаться в темноте тревожно. Встречаются поровну крысы и люди.


Ср

Фен включается в розетку только под кроватью. Чайник со свистком не свистит, но течет. Туман крадет гору целиком. Погода закончилась. В городе засуха. Просят не принимать душ больше двух минут. Горячая вода идет только через минуту. Интернет невозможно рвется. Ставлю порно качаться на ночь. Засыпаю у обогревателя, как у костра.


Чт

Встаю в 6:30. Закипает чай, просыпаются чайки. Водитель спрашивает столицу России. Гарри Поттер стоит и в детских книгах, и во взрослых. В кино у Бессона волшебный пролог. Океан штормит. Ночь. Останавливаюсь смотреть на толщу воды, страшно до усрачки. Ветер теребит жалюзи изнутри.

Пт

Мне не срочно. Хожу смотреть на волны. Дождь падает обратно в океан. Работа заканчивается раньше пробок. Когда некуда спешить, начинаются самые интересные разговоры. Первый белый таксист-расист. Угадываю ему ответ в викторине. Все повторяется по второму разу. Туман уже был. Волны уже видел. Та же пицца с тем же авокадо. Объективы приходят смотреть на закат. Волны на фото получаются маленькие и глупые. Темнеет, нападают мухи. Во второй раз.


Сб

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

Вс

Обедаю с голубями и стариками. Утки останавливают день. Продукты хранятся без холодильника.


Пн

Ужинаю в порту. Порт светится и пищит.

Вт

Толстый хомяк лезет на дерево. Пингвины пахнут.


Ср

Киты приплывают, когда их уже не ждут. Дасси не получают никакой рекламы. Пингвины живут в норах. 


Чт

Рука замерзает за минуту вне одеяла. Окна выходят на океан, но вид преграждает отель.


Пт

Закат размазали пальцем. Альпака чешет себе пузо.

Сб

У овец стоит рекламный баннер. Овцам рекламируют телешоу. Ем бургер из страуса.


Вт

Возращаюсь в Москву. «Почему стоите, не проходите?» Начинается пост-путешественная депрессия.


В некоторые головы лучше не заглядывать
усы2
tonsky

Бурная история про Xored (it-компания из Академгородка, Платов — её президент):

Многие кинулись обсуждать конкретную ситуацию — был ли мальчик, где деньги, лебовски, можно ли всё исправить, етц. Мне кажется, это не самое тут удивительное (и поучительное).

Безотносительно того, что там произошло и кто с какой стороны сколько наплел, всё рухнуло, когда Платов добрался до микрофона. Даже если он на 100% прав и невинен в данной конкретной ситуации с Алексеем, никуда уже не деться от комментариев (ищите по нику platoff), из которых получается, что более-менее всех, кому с ним не по пути, он даже за людей не считает. Все программисты и комментаторы у него — долбоебы, лузеры, нищеброды, лохи, пидарасы (в терминологии автора — заднеприводные) по умолчанию. И остаются такими, пока не доказали обратное. Я не придумываю, так и написано. Судя по чуть более раннему твиту («Ксоред сбрасывает жыр. Жыр бежит в Yandex, JetBrains и Tinkoff Bank»), уход с должности это тоже предательство и потеря статуса «обычного» человека и «нормального» программиста.

Там еще феерический катарсис, из которого вообще получается, что человек у Платова остается человеком и имеет право на человеческое отношение только до того момента, пока он выгоден замыслу (компании, проекту, лично). Вне этого интервала о нем не думают, договоренностей не соблюдают, кидают («...за последние годы [через Xored] прошло человек 300, из которых кинули трёх-четырёх»), объяснений не объясняют, оскорбляют, высмеивают, травят и это типа нормально.

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


Панель Шрёдингера
усы2
tonsky

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

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

А как-же, как-же? Ведь мы хотим создать иллюзию легкого и воздушного интерфейса, в котором много места, в котором content first, зачем человеку пялиться на наши кнопки, пока он читает? Работает это так: мобильник — это уже маленькое окошко, вырезанное в нашей реальности. Ваш сайт/приложение — окошко, зона внутри мобильника. Контент — зона внутри сайта. И тем не менее человек может прекрасно сосредоточиться на любом куске реальности и смотреть только в него. Вокруг меня могут бегать кошки, я могу менять руку, которой держу телефон, и я всё равно буду видеть только то, на чем я сосредоточился: контент.

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

А как делать-то тогда?

Первое: не надо этих ваших анимаций. Хотите чё-то на экране показать — показывайте всегда, не надо случайно вызываемых жестов к нему приделывать. Чего нам точно всем не хватало [сарказм] — еще одного аспекта управления и так уже перегруженными многофасеточными контрольными центрами (мобильниками то есть). Если вы хотите чтобы гребаный хэдер с вашим гребаным лого мазолил мне глаза, ну будьте мужиками, примите решение, показывайте его всегда. Только не надо уменьшать его по скроллу, это их двух зол обе: вы и глаза мозолите, и анимациями заколебете.

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


Чем хуже, тем лучше
усы2
tonsky

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

Был когда-то такой медиаплеер Windows Media Player, шел в поставке с Виндой. Носил гордое звание единственного медиаплеера в мире, в котором пробел не останавливал воспроизведение. Натурально, надо было Ctrl+P жать (наверное, их ослепила красота шортката — P это и Play, и Pause).

Ну и вот. Тогда видео смотрели на компьютере, а сегодня — в интернете. И да, YouTube перехватил эстафету. В нем тоже пробел нихрена не делает. Точнее так — пробел в нем, та-дам, скроллит страницу!!!

Кем вообще надо быть, чтобы скроллить пробелом. Я знаю, что это стандартное поведение в вебе, но блин. Неужели ради вот того одного странно привыкшего к этому шорткату дяди должна страдать вся аудитория Ютуба?

Ладно. Допустим даже, вы тот самый дядя, который в детстве упал в колодец на стройке и с тех пор привык скроллить пробелом. Вопрос. Куда там скроллить-то?? Скроллить-то куда? Там? К комментам что ли? Комменты к видео это может не самая бесполезная в мире вещь, но в топ-5 наверное входит. Это просто добровольное окунание в помои. И это юз-кейс, на который они рассчитывают?

Ладно еще раз. Можно зато навести фокус на видео и пробел начнет работать. А еще знаете что начнет работать? Запоминание фокуса. Т.е. зашел ты в настройки, потом сидишь смотришь видос, тут хоп, пельмени убежали, ты такой жмак по пробелу, а он. А он. А ОН. Настройки открывает, тварь такая. То есть они вот натурально подумали, что кому-то может в жизни понадобиться пробелом, самой большой кнопкой, очень быстро, мнгновенно практически, открывать настройки видео. Ну я хз.

Ладно. А вот если громкость менял, то фокус будет на громкости. Вверх-вниз меняет громкость, и вправо-влево тоже! Это уже не говоря о том, что сам ползунок спрятан за ховером — ужасный, ужасный паттерн (нужно навести — именно навести, нажимать нельзя, — прежде чем менять, два действия там, где хватило бы одного).

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



Boo King dot com
усы2
tonsky

В линче вышла рецензия на интерфейс букинга:

Сергей Кулинкович, арт-директор, пишет:

В таких случаях (большой трафик, неразрывная связь с бизнесом) дизайнерские решения часто продиктованы статистическими данными и результатами многочисленных тестов, призванных добиться максимальной конверсии, возврата, суммы покупки и прочего. Нельзя просто взять и сделать, скажем, форму более «удобной», поскольку за этим могут лежать миллионы долларов упущенной прибыли. Однако раз в несколько лет руководители произносят: «Что же с нами стало?», проводят глобальный редизайн, и все начинается сначала.

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

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

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


Принципиальный недостаток Git CLI
усы2
tonsky

Есть простой способ использовать Git: работаем только в ветке, мержим только в мастер. Если все идет хорошо, то выстраивается простой и понятный ритуал: branch, commit, checkout, merge, push, повторить. GitFlow называется, да?

Для такого сценария Git CLI достаточно. Для всего остального — недостаточно. Странно, что люди до GitFlow вообще пытались как-то по-другому с Git работать через CLI. Ну невозможно это.

Причина проста: как только запахло жареным, надо предпринять единственно правильные действия, а для этого нужно четко и однозначно понимать ситуацию. Запахнуть может даже в GitFlow: бывает, что и «мерж не мержится», и «кто там вперед меня запушил».

В таких случаях важно понимать, что происходит. Я, например, читаю историю ветки и пытаюсь воссоздать ход мыслей и направление изменений автора, с которым у меня возник конфликт. Чтобы решить конфликт правильно и осмысленно, мне надо пересмотреть всю историю ветки, прочитать диффы, посмотреть что вообще происходило и в какой последовательности. Просто смотреть на бесконтекстный 3-way diff — не вариант.

Простой и красивый вывод легкозапоминающейся команды git log --pretty=format:"%h - %an, %ar : %s" --graph:

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

К сожалению, CLI в этом никак не помогает. Ты находишься в полной темноте. Единственное, что понятно: что-то сломалось. Сообщение совсем неадекватное, или вообще нет сообщения, просто «конфликт» и предлагается выбрать между двумя непонятно откуда взявшимися альтернативами. Я много раз наблюдал, как люди просто впадали в панику и ступор и не понимали, что делать дальше. У таких случаев всегда есть объяснение, и оно обычно совсем несложное, объяснимое, логичное даже, но только если разобраться. Не ситуация сложная, сложно её понять, сидя в CLI. Черт, во всех компаниях, где я работал, я очень быстро становился негласным экспертом по таким вот нестандартным разбирательствам ¯\_(ツ)_/¯

Итак, Git CLI работает только когда четко понимаешь, что происходит. Отсюда нужда в GitFlow: он сильно ограничивает пространство возможных ситуаций, поэтому когда shit hits the fan, у тебя ограниченное количество гипотез о происходящем. Паники меньше, шансов угадать и принять правильное решение больше.

Типичный репозиторий, разрабатываемый по GitFlow

Вообще-то все git-овые best practices оттуда же: не юзать rebase, бояться force push, всегда создавать merge commit, не переписывать историю. Если их нарушать, мир не рухнет, ничего страшного не случится. Но — проблема — коллеги не поймут, что происходит. Если бы они в таких ситуациях видели, что происходит, то разобраться с ними — раз плюнуть. Проблема только в том, чтобы их идентифицировать.

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

Макклейн мёржит крупными мазками

Проблемы:

  1. Возможно излишнее количество мержей (по сравнению с четким пониманием ситуации и точным хирургическим вмешательством).

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

Поэтому я так скептически отношусь Git CLI: он устроен так, что пытается «уберечь» вас от сложных ситуаций прямо сейчас, но каждым своим действием усложняет ситуацию на потом. Скажем, git pull по-умолчанию будет мержить, если обнаружит, что ваша ветка разошлась с удаленной. Это «прячет» от вас сложный факт того, что ветки могут расходиться, но мир устроен именно так — они могут и будут расходиться, это нормально. Абстракция, которая пытается это скрыть — дырявая. Зато упрощает ваше существование, потому что у вас якобы всегда будет одна «главная» версия.

Платить за это придется не сразу, долг копится постепенно: лишний мёрж коммит, запутанная история, иногда мержить придется вручную при пулле, хотя «я просто хотел скачать последние изменения» и «я еще не готов ничего отсылать, а уже решаю конфликты». Звучит невинно, но позже, когда понадобится разобраться, чё это за код и откуда он тут взялся, в этих мержах черт ногу сломит.

Фрагмент истории LightTable. Это ещё по-божески

Как тогда жить?

  • Визуальное представление графа коммитов. Многие GUI клиенты неплохо справляются
  • Fetch вместо Pull
  • Не бояться amend, rebase и вообще двигать историю

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

Бывает, люди путают git log с личным дневником и записывают свои мысли, настроения, погоду на улице

История должна быть осмысленной, атомарной (по еденицам решаемых проблем), аккуратной. Это всё окупится сто раз, когда с репозиторием придется по-настоящему работать. Git, его история — это не просто safety net, это еще один инструмент, еще одна форма существования кода, часть продукта. Вы же следите за кодом? Вот и за историей надо следить.

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


Десктопные UI
усы2
tonsky

Очевидно, самый правильный способ делать десктопный UI — индивидуально под каждую платформу. Мечта о том, что мы выделим «компоненты», из которых соберем экран, а потом «заскиним» их под каждую платформу, — абсолютно оторвана от реальности. Слишком много нюансов (размеры, отступы, порядок и расположение элементов, уникальные для платформ идиомы) чтобы обойтись просто скином и при этом притворяться нативом.

Кажется, что идея провальна с самого начала. Но в мире есть успешный пример кросс-платформенных UI которые прилично выглядят на любой платформе. Это веб. Да, веб-сайты не собраны из системных компонентов, каждый вебмастер рисует свои кнопки и панели с нуля. Но все привыкли и не возражают. Браузер аккуратно доделывает системно-специфичные детали: нативный скролл (с инерцией или без), рендеринг и выделение текста, системные контекстные меню, системное поведение внутри даже полностью перерисованных инпутов. Системные нюансы, даже в комбинации с полностью уникальным скином и лайаутом, создают вполне приятный пользовательский опыт. Решение оказалось в том, чтобы не притворяться нативным системным приложением, иначе попадешь в uncanny valley, область фальшивых елочных игрушек.


на фото: Transmission Remote GUI (Free Pascal) притворяется нативчиком

На основе браузера сделали Электрон — бандл из хрома, node.js и ваших html/css/js, упакованных в обертку как-бы-приложения. С точки зрения пользователя — всё классно. VS Code, Atom, LightTable, Figma, Zeplin, Slack, VK Messenger, Rocket.Chat, Github Desktop, GitKraken, Basecamp, Ghost, Brave browser, Hyper, SimpleNote — прекрасные, вылизанные приложения, очевидно, что как платформа Электрон уже состоялся.


на фото: системное контекстное меню в Visual Studio Code (Electron)

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

Претензия к Электрону, собственно, одна — это такой Докер для десктопа. То есть он пакует огромную тучу всякой фигни ради несоизмеримо маленького функционала. То, что нужно Хрому для веба, например совместимость с IE 5.5, всякие quirks mode, не знаю, видеокодеки, non-strict JS, устаревшие CSS свойства и режимы и совместимость их с новым и современным — это раз в 100 больше того, что вы когда-либо сможете и захотите использовать. И это никак не отковыряешь. Меня даже не размер бандла беспокоит, а то что весь этот легаси серьезно мешает приложению достичь своего потенциала скорости, простоты, надежности. Тот же JS — явно не лучший язык, с кучей совершенно левых/произвольных проблем-ограничений, медленный просто потому, что он настолько плох что уже не ускоряется, явно не готовый к тому, что под ним будет файловая система, что бывают потоки — да, мы не можем выкинуть его в вебе — но на десктопе-то ради чего страдать?

К сожалению, с браузером только всё-или-ничего. Как и докер, это явно неверный вектор развития — бандлить кучу говна просто потому, что так получилось и проще. И все равно web это лучшая на сегодня UI платформа, с лучшим integrated developer experience.

Вопрос, собственно, про альтернативы. На случай, если я проглядел что-то.

На QT бывают хорошие, красивые приложения. QT бывает кросс-платформенный, но это C++. Он, конечно, обходит JS по категории sanity, потому что он не сильно умный и в любой ситуации ты просто делаешь то что тебе нужно, а не пытаешься бороться с тормозами вмененного тебе динамизма. Figma, например, компиляют C++ в JS, чтобы работать в вебе, но лишь бы не писать на JS. Но все равно C++ ужасный язык, низкоуровневый, долгая компиляция, без REPL-а — а UI работу я себе не представляю без REPL-а.


на фото: Telegram Desktop (QT5) с кастомным контекстным меню. Не видно, но скролл тоже фальшивит

Java-решения (Swing/JavaFX) страшны как черт. Я тут скачал демку JavaFX, которая прям с дистрибутивом идет, так у них даже ховер на кнопках тормозит. Плюс естественно всё не нативное — ни скролл, ни выделения, ни контекстные меню, а нарисованное как будто программистами. Окей чтобы накидать что-то по-быстрому для нетребовательной аудитории клерков, но вылизать, кажется, невозможно.


на фото: Modena demo app (JavaFX). Пойдет, но тормозит и всё ненастоящее

Я не уверен, насколько хорош в этом плане SWT — смогу ли я выкинуть весь look-and-feel и нарисовать что-то стильно-современно-плоское, например? Не хотелось бы, чтобы получилось что-то уродливое вроде Eclipse. Он вообще живой еще?


на фото: страница проекта SWT

Что еще бывает? Или выхода нет?

Напомню, что мне важно не «быстро накидать из готовых компонентов», а «сделать и вылизать», причем без привлечения сверхусилий, одному (ха-ха), в разумное время, для всех платформ. Мобилки — что, наверное, сегодня удивительно, но — не интересуют.


Читабельная Кложа
усы2
tonsky
Обнаглел настолько, что код вставляю скриншотами

http://tonsky.me/blog/readable-clojure/

Совет про советы
усы2
tonsky

Съездил на Riga Dev Days, словил новых ощущений.

Во-первых, я оказывается давно не общался с бэкенд-разработчиками и подзабыл, чем они живут. По ощущениям у них все прекрасно, но хочется еще лучше. Ну, из серии, в этом году GC всего на 10% стал быстрее, хотелось бы хотя бы на 15%. Или там, есть две системы сборки, одна хорошо подходит для больших монолитных проектов, а другая — для маленьких стандартизированных. То есть это проблемы, которые они обсуждают: какое из двух прекрасных решений выбрать. Никакого визга, никаких ощущений что мир катится в ад, а ты сидишь на дне колодца и рвешь на себе волосы (это я так себя чувствую с тех пор, как перешел во фронтенд и стал ездить по JS-конференциям). Больше всего похоже на стабильное, каноническое «работаем дальше».

Второе наблюдение проходит по категории накрытий (см. тег) и стимулировано выступлением Егора Бугаенко, но относится не только и не столько к нему, сколько к идее пропаганды вообще. Кратко: со сцены можно говорить что угодно, и люди тебя слушают. Собственно, почему я пишу это именно сейчас, потому что я сидел в зале и видел, как это работает. Что бы ты ни говорил, у зала открыты уши и информация просто записывается на подкорку. Качество информации не имеет значения. Доводы не имеют значения. Логика, аргументы не играют роли. Важен сам факт говорения. Аргументы за, стройная цепочка рассуждений — может быть, может не быть — не играет роли, она все равно пройдет мимо. Что скажешь, в то и поверят. Скажешь умную мысль — отлично. Скажешь глупость — тоже хорошо, еще и вопрос зададут, как её лучше применять.

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

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

Это всё не только со сцены, конечно: и блогах, и в твиттере, и на курсах, и в книгах, где угодно. Из известных DHH ровно этим занимается (особенно смешно, когда он меняет курс на противоположный), и много персон поменьше. Да что далеко ходить — тот же Design Patterns, задуманный как справочник решения конкретных проблем, постепенно превратился во вполне себе библию. Причем из него выкинули всю контекстную часть (что происходит, где, почему и зачем) и оставили только «советы». Такое ощущение, что широкой аудитории (да, знаю, ужасный прием — обобщение, но речь действительно об общем тренде) нужны не вопросы, а ответы.

При этом я как раз не против открытости к новым идеям. Мне это даже на руку, и мне хочется, чтобы люди охотнее принимали новое. Но только не какое попало, и здесь, конечно, начинается заковыка. Потому что нет никакого внешнего судьи и никто не скажет, что вот этот товарищ несет ерунду, а к этому стоит прислушаться. Единственный способ — 90% всего полная ерунда, пусть цветет 100 цветов, и т.д. и т.п.

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


Раздача вещей
усы2
tonsky

UPD: ВСЁ РАЗДАЛ. Всем спасибо и удачи!

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

ПРАВИЛА: Самовывоз с метро Красный проспект (я прямо возле станции живу). СРОЧНО, т.к. я в городе только до обеда четверга :( Предварительно позвонить +7 983 135 0835. Знаю, да, неудобно, страшно, но нам нужно будет договориться о времени передачи, и это самый быстрый способ.

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

И не смотрите, пожалуйста, на то, какое всё пыльное. В квартире переезд. Перед передачей я всё аккуратненько вытру :)

Итак.

Лот 1. Клавиатура Microsoft Natural Ergonomic Keyboard 4000. Одна из самых доступных и популярных эргономичных клавиатур всех времен. Стимулирует правильную посадку и положение рук. Хорошее состояние, пыльная немного, лежала в шкафу. Вообще MS делает отличные клавы, сам я сейчас на Microsoft Sculpt. УШЛА

Лот 2. Видеокарта Zotac GeForce 8600 GT. Doom потянет, но не тот, что 2016 года :) Ничего выдающегося, но мало ли, вдруг у кого-то пылится системник и надо хоть что-то воткнуть. Выходы только VGA и DVI. УШЛА

Лот 3. Графический планшет Wacom Bamboo Pen CTL-470. Это начальный уровень, конечно, но мало ли, вдруг кто-то, как и я, мечтает научиться рисовать. Сам я сейчас переехал на iPad + Pencil. Размер 11×7 дюймов, диагональ рабочей зоны ~7 дюймов. УШЛА

Лот 4. Колонки SOLO1 MK3. Старые, хорошие колонки, в прекрасном состоянии (собака не грызла). Несмотря на название, стерео :) Сам я не меломан, поэтому качество звучания оценить не могу. Служили верой и правдой в составе домашнего кинотеатра. УШЛИ

Лот 5. Игра Космический манчкин. Объяснять, что такое манчкин, либо не надо, либо бессмысленно. Главная казуальная карточная игра вообще. Требует времени, чтобы въехать, но потом начинается кайф. На русском, с коробкой, правда без инструкции (она качается с сайта игры или гуглится). УШЕЛ

Лот 6. Игра Цитадели. Вроде полный комплект. Неплохая, быстро осваивается, но желательно компанию из 4-7 человек, меньше уже не то. Отдаю, потому что у меня нет столько друзей (заплакал). УШЛА

Лот 7. Игра Гномы-вредители. Полный комплект. УШЛА

Лот 8. Игра Каркассон. Очень известная. Почему-то без коробки (наверное, выкинули, потому что очень уж много лишнего места такие коробки занимают). УШЕЛ

Лот 9. Манчкин Апокалипсис. Ну вы поняли, да, по чему мы тут угорели. На русском. УЖЕ УШЕЛ.

Лот 10. «Ковбойский» манчкин. С дополнением. НА АНГЛИЙСКОМ. Берите только если у вас есть 3-4 друга, хорошо владеющих языком, в манчкине основное оружие это читать карты. Не волнуйтесь, для себя у меня останется «Пиратский» манчкин с двумя дополнениями :) УШЕЛ

Лот 11. Игра Шакал. Довольно известная в свое время штука. Русскоязычная, несмотря на надпись на коробке. УШЕЛ

Лот 12. Забыл как это штука называется. Powerball? Тренажер для кистей рук. У меня еще один такой есть, а зачем мне два? УШЕЛ

Лот 13. Fluxx. Довольно прикольная и простая игра. Фишка в том, что правила игры меняются прямо по ходу игры. НА АНГЛИЙСКОМ. УШЕЛ

Лот 14. Raspberry Pi. В корпусе. По-моему, первый. Отдаю, потому что так и не придумал что с ним делать. В комплекте карта на 16 Гб. УШЕЛ

Лот 15. Жемчужина коллекции. Набор для химических опытов Mel Science и 11 уроков к нему. Каждый урок — 2-3 разных эксперимента. 4 урока уже открыты и опробованы, но там всё равно положено с запасом, так что можно будет провести их все равно. Остальные даже не открывались. Сделано это всё настолько грамотно и классно, что даже не верится, что у нас в России. УШЕЛ

Вещь огненная (в прямом и переносном смыслах), но в идеале ее хорошо делать с детьми. Поэтому отдам я ее только тому, у кого они есть.

Что-то заинтересовало? Живете в Новосибирске? Звоните, не тяните. Звонить можно в любое время, ложусь поздно, встаю рано, на ночь отключаю звуки, если мне неудобно, я просто не возьму трубку.

P.S. Почему книжек нет? Да я всё хорошее при прошлом переезде раздал.


Крутое пике
усы2
tonsky

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

Главный ресурс фронтендера — MDN. Я туда хожу в основном за лулзами. Открываем, например, XMLHttpRequest и читаем:

Despite its name, XMLHttpRequest can be used to retrieve any type of data, not just XML, and it supports protocols other than HTTP.

Морская свинка, как известно, не морская и не свинка.

Насколько у ребят всё под контролем, можно понять по тому, как XMLHttpRequest назван. Поговаривают, что есть рабочая группа, готовящая переименование в XMLHttp_request.

Раньше нервный тик у меня был только на язык C. Теперь появился второй: на верстку. Не важно, насколько пуленепробиваемо ты сверстал и сколько тестировал, всегда найдется полудохлый, но актуальный браузер с тремястами пользователями (прости, Опера), в котором всё разъедется. А если нет, то нарисуется чел с телефоном ромбовидной формы и разрешением 200×1000, которому обязательно нужно чтобы всё влезало по диагонали (ромб же!) и было при этом большим и читаемым. А если не найдется и вы себе соломки везде подложили, то через полгода команда Хрома всё равно выпустит новую версию с новой точкой зрения на стандарты. Редкий сайт долетает до шестой мажорной версии Хрома.

Самый страшный браузер? Мобильный Сафари. Он просто ОЧЕНЬ старается показать сайт на мобильнике хорошо. ОЧЕНЬ. Никогда не думал, что про IE буду вспоминать с нежностью. IE хотя бы не притворялся, что пытается помочь. У нас тут своя атмосфера. Честно. Прямо. У 11 версии официальный слоган был «Deal with it».

Основной вопрос веб-разработки: почему не у всех стоит Хром? Если видите улыбающегося веб-девелопера, значит, он пишет под Электрон. С каждым приложением свой Хром. Фиксированной версии. И вперед. Тяжеловато по памяти, правда. Но ничего, скоро они научатся шарить общий рантайм, и получится... получится...

Веб в вебе это еще полбеды. Его же тащат везде. На сервер, в мобилки. У вас есть там классные языки? Java очень быстрая? Питон очень логичный? Хаскель очень безопасный? Да, отлично, ну вот вам JavaScript тогда еще. Ну и что что убогий, мы всё равно на нем будем писать.

Это вообще железная логика. Вот WebAssembly. Был у нас один убогий язык на фронте. Ужасно спроектированный, с никакущей инфраструктурой, без стандартной библиотеки, писать невозможно. Что еще подходит под это описание? О, C++ подходит. Давайте добавим его. Теперь у нас два языка!

Но самый огонь это конечно ES 6. Тут уже сами фронтендеры признали, что JavaScript как язык не очень. Что неплохо бы компилировать из чего-то поприличнее. И что они взяли? Тот же самый, блин, JS!

Знаете, как они вообще решают проблемы? Лет 15 назад была инициатива, семантический веб. Наведем порядок, всё разметим, метатеги, микроформаты, RDF. Чем закончилось? Недавно узнал, что 2GIS написал нейронку, которая ходит по сайтам организаций и пытается понять, что там написано. Оказалось, чем навести порядок, проще сделать искусственный интеллект.

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

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

Был такой сериал, «Крутое пике». В нем авиалайнер терпит крушение и стремительно падает на протяжении 327 серий. Конечно, всё летит в ад, но пока летит, они в принципе неплохо проводят время. Ну вот. Веб с нами надолго. Вчера, говорят, Курт Кобейн застрелился. Обнимемся.


Ненаучная логика
усы2
tonsky

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

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

Первый пример — обычная задачка. Задачу можно решить, не решить или решить с ошибкой. Ну вот например:

Решили? Уверены в решении? Смешно?

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

Так вот, первая задача — про способность найти трюк, а не про способность рассуждать логически. Проверить просто: достаточно объяснить решение тому, кто дал неправильный ответ. Когда объясняешь трюк, никто с ответом спорить не будет. Т.е. с логикой всё в порядке, ну а то что не все видят трюк — на то он и трюк.

Сам факт спешки с ответом тоже ни о чем специальном не говорит. Это устройство человека (любого!), экономить мозговую энергию. Похожий пример из книги «Thinking fast and slow»:

Бейсбольная бита и мяч вместе стоят $1.10. Известно, что бита ровно на 1 доллар дороже мяча. Сколько стоит мяч?

Первый пришедший на ум ответ — $0.10 — неверный — говорит только о том, что ум любит срезать углы и экономить на полноценных вычислениях там, где встречается знакомый паттерн. Еще раз: получить $0.10 в качестве самой первой гипотезы, интуитивно — нормально, естественно. Так устроен мозг. Любой мозг, не мозг каких-то специальных глупых людей. Это так же естественно, как иметь две ноги и два глаза. Ошибочность ответа говорит только о том, что интуицию можно обмануть, подложив ей специально сформированный паттерн, но не говорит ничего о том, что человек тупой или еще что-то. Мозг ошибается у всех примерно одинаково.

Насчет второй задачи есть несколько интересных моментов. Напоминаю:

Во-первых, обратите внимание, что скриншот в джипеге опрос специально сконструирован так, чтобы подтолкнуть вас к неправильному ответу. Он не про абстрактных мюмзиков и зелюк (что было бы честно), и даже не про равнозначные сущности из нашего мира. В первом варианте специально наукообразные и правдоподобные высказывания, во втором специально сомнительная посылка (Бог). Если вы выберете вариант 2, получится, что вы вроде как за то, что Бог создал Землю и считаете, что она не входит в Солнечную систему. То есть автор опроса по какой-то причине специально хотел, чтобы отвечали неправильно. Согласитесь, поведение, далекое от научной объективности.

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

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

Я не знаю, с чем связал высокомерный тон Ильи в постах про логику. Разница между ответившими неправильно и Ильей только в том, что ответившие просто ответили, а Илья попытался их оценить, при этом все приняли происходящее в тестах за чистую монету. Эти тесты показывают всё что угодно, но не уровень владения логикой.


Инопланетяне строят дома. Нет
усы2
tonsky

Возможно, вам уже попадалась в интернете эта картинка:

Чего только про нее не пишут:

Что за престарелый дядя Валера? Забегая вперед, скажу, что и 40% взято с потолка (точнее, не с потолка, а из неправильного места).

По английскому интернету тоже гуляют байки:

Тут уже Deep Learning им «предлагает варианты».

Я про всё это пишу только потому, что мне картинка на глаза попалась из таких же ненадежных источников, и я, естественно, поначалу тоже впечатлился. Типа, возможность заглянуть в чужой разум. Насекомые из фильмов Кроненберга уже вот-вот будут строить нам машины и дома. Жить будем в сотах, потому что ТАК ОПТИМАЛЬНЕЕ. ВСЁ ТАКОЕ НЕЧЕЛОВЕЧЕСКОЕ.

Оказалось городской легендой напополам с испорченным телефоном. Вот исходный пейпер и продолжение, в них «всё было не так»™. Основной фокус исследования не на найденной форме, а на возможностях 3Д-печати.

Амстердамская компания Arup взяла вот такой арт-проект:

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

Конечно, это всё считалось компьютером, но:

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

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

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

Более того, ребята даже не особо акцентируются на своих успехах в поисках формы. Они не разработали для этого какой-то специальный софт, скорее посчитали на том что было под рукой, как смогли. Даже впечатляюще маленький размер, получившийся во второй итерации (25% от исходного) вызван не успехами алгоритма, а тем, что они изменили крепление канатов и сделали их тоньше, что сделало всю конструкцию сильно легче. Т.е. вторая итерация — это далеко не «при прочих равных», если рассматривать оптимизацию конкретной детали.

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

Еще раз — впечатляюще, но не потому, почему пишут в интернетах. Это всё еще очень человеческий и очень практичный, функциональный дизайн.

Ну и про 40% и факт-чекинг. На картинке два «инопланетных» варианта. Ни один из виденных мной текстов, кстати, не объясняет почему. Крайний правый — это вторая итерация, в которой они взяли более тонкие кабеля и болты, что облегчило ВСЮ конструкцию на 40%. Имени «Валера» и возраста участников в пейпере тоже обнаружить не удалось.


Не про дебаты
усы2
tonsky

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

Во-первых, идея того, что в споре кто-то должен выиграть, она очень детская. Все эти «ты на чьей стороне», «это моя точка зрения», «ты мне не друг», «мы за наших горой», «а у вас негров вешают». Я тоже таким был, конечно, но это лет в двадцать с чем-то должно проходить. Сейчас спор для меня — способ разобраться, разложить по полочкам. Мир и так очень сложно устроен, и если уж есть возможность диалога с разумным существом, то какая разница, кто что сказал и кто как заблуждался. Ищите истину вместе. Вы начинаете в разных уголках темного леса (это предпосылка возникновения спора, вы должны изначально смотреть на вещи по-разному), и ваша задача разобраться, где тут что, и прийти к общему пониманию карты леса. У одного может быть холодно и мокро, у другого лужайка и бабочки танцуют. Глупо спорить о том, у кого место правильнее. Существования одного не опровергает существование всего остального. Надо разбираться в устройстве леса. Потому что устройство леса — объективно, а ваша точка зрения — это только ваш уголок. Место не выигрывает автоматом просто потому, что вы в нем начали. Другими словами, глупо лезть в спор в надежде выйти из него, ничего не узнав и не изменив своего взгляда на мир.

Если бы у тех спорщиков стояла задача разобраться, эфир бы закончился за 10 минут. На самом деле, в первые 10 минут все вещи которые по существу были сказаны. Как-то так:

— Есть вопрос по А. Как А работает?
— Так-то и так-то.
— А почему именно так?
— Потому что то-то и то-то.
— А могло бы быть по-другому?
— Могло, так и так.
— Плюсы, минусы?
— Я вижу X, Y.
— Нет, Y быть не может. Потому что A, B, C.
— Согласен. Мне кажется, может быть еще Z.
— Да, пожалуй.

Но на самом деле все было даже проще, как мне кажется. Обе стороны понимали положение вещей в полном объеме — и на своей стороне, и на стороне оппонента.

Теперь задача: как в таких условиях выглядеть лучше оппонента? Акцент на выглядеть. И тут меня совершенно вынесло от методов:

  • Например, Навальный много раз повторял «вы не хотите открывать контракт». Ок, первый раз это вопрос. На него ответили. Дальше это же утверждение повторяется много раз после того, как на него ответили и с ним разобрались. Наверное, это из психологии. Что больше звучит, то и запоминается. Если я сделаю вид, что не получил ответа, может, и у слушателей возникнет ощущение, что они его не получили.

  • Кидаться цифрами (буквально кидаться, мне кажется, он в какой-то момент просто в воздух кричал «117 миллионов», просто, без предложения и без контекста). Да, это создает ощущение, что 117 миллионов куда-то запропастились. Даже я его ощущал, заглядывал под диван, но ничего там не обнаружил. Приходилось делать сознательное усилие, чтобы это ощущение развеять.

  • Ставить человеку в вину его цитаты. Это прием по форме, а не по сути. Мало ли кто что когда сказал. Взгляды меняются. Люди владеют языком не в совершенстве. Люди любят производить эффект. То, что человек говорит, и то, что он имеет в виду — как правило, очень разные вещи. С цитаты можно начать, но разбираться надо, что человек имел в виду. «Было бы великой ошибкой думать» — В. И. Ленин (цитата приведена не полностью).

  • Давление на авторитет. «Я в этом разбираюсь» — и дальше идет любая чушь, например. Уловка. Опять же, очень удобный прием.

  • Артемий Лебедев тоже, конечно, не идеал. То есть он не так подло пускал пыль в глаза и вообще не играл в эту игру, но и разобраться и прояснить ситуацию тоже не спешил. Коммерческие фирмы не раскрывают суммы контрактов, потому что это не выгодно. Если сделать метро навигацию за 100 миллионов и об этом будет широко известно, будет труднее продать аналогичный проект, не знаю, Газпрому за миллиард. Это не красиво, но это причина, почему так происходит. Естественно, эту причину Тема не хотел озвучивать, и в том числе поэтому звучал неубедительно. Сказал правду = возразить нечего = все разошлись очень быстро.

  • Запутывание. Когда теряешь нить рассуждений (а её специально оба оппонента постоянно обрывают, путают, плутают), инстинктивно хочется оставаться в контексте, и возникает соблазн просто довериться кому-то, встать на чью-то сторону, решить, что «я пропустил, но он-то наверняка все понимает и концы у него в голове с концами сходятся, поэтому я потом разберусь, а пока буду просто верить». Тут важно помнить, что сторон нет. Миру пофиг, что по его поводу думают два конкретных человека. Он работает, как работает. Есть факты, есть логические заключения, есть в конце концов точки зрения, но даже те не привязаны к человеку. Мнение X существует независимо от того, кто в данный момент в него верит.

Итого: полтора часа спорили, а ощущение, что разошлись ни с чем. Никто не стал умнее, зритель еще больше запутался. Голосование на Дожде вообще было сформулировано так: «Кто убедительней?» Да какая разница, кто убедительнее? Давайте лучше разберемся, как все устроено, а не у кого глаза красивее.

А теперь внимание: мы посмотрели, каким образом из высосанного из пальца повода (вы не публикуете данные по контрактам, которые по закону не нужно и даже нельзя публиковать, следовательно вы злодей) Навальный создает на ровном месте драму и забирает 70% телезрителей. Очень прозрачный пример, проблему видно, приёмы видно.

Внимание: это он только на данных конкретных дебатах так поступает или вообще везде? Вот вам цитата из Майкла Крайтона на подумать:

Briefly stated, the Gell-Mann Amnesia effect is as follows. You open the newspaper to an article on some subject you know well. In Murray's case, physics. In mine, show business. You read the article and see the journalist has absolutely no understanding of either the facts or the issues. Often, the article is so wrong it actually presents the story backward—reversing cause and effect. I call these the "wet streets cause rain" stories. Paper's full of them.

In any case, you read with exasperation or amusement the multiple errors in a story, and then turn the page to national or international affairs, and read as if the rest of the newspaper was somehow more accurate about Palestine than the baloney you just read. You turn the page, and forget what you know.


Зуб за зуб
усы2
tonsky

Надо было это написать к анонсу iPhone 7, конечно. Это тот, где убрали гнездо для наушников.

Я всеми руками за беспроводное будущее. Я уже частично там: у меня куча всего беспроводного дома. Только работает оно не очень. В машине мы с женой периодически меняем телефоны — то она хочет музыку послушать, то я один еду — и это всегда небольшая пляска, чтобы телефон соединить, и отдельная — чтобы понять, что он соединился. Предыдущий мой телефон вообще перезагружался, если во время подкаста принять звонок в машине.

Дома у нас беспроводная колонка, которая умеет два одновременных устройства, и это вообще песня: «устройств» как минимум 4, поэтому чтобы послушать музыку откуда ты хочешь, надо как-то их спаривать, а на колонке, разумеется, «одна кнопка™» (с логотипом bluetooth, ни больше ни меньше) и что происходит вообще не очевидно.

Ну и эти веселые ситуации, когда проигрывание музыки/фильма прерывается секунд на 5, чтобы второе подключенное устройство (не специально, конечно, просто отспарить их еще сложнее, чем спарить) произвело какой-нибудь «пук» на нотификацию и отключилось обратно. Короче, колонка эта у нас проходит по категории «самый ненавистный предмет» и сейчас подключена проводом к стационарному компу. Двумя проводами даже: аудио и зарядкой.

Эппл-трекпад радует меня тем, что на каком-то расстоянии (ноут взял в соседнюю комнату) или по таймауту неактивности намертво отконнекчивается от макбука. Намертво — это не значит, что устройство пропадает, нет, устройства как раз друг друга видят, но разговаривать категорически отказываются. И никакое количество включений/выключений/сбросов/передобавлений это не лечит. Только перезагрузка ноута. Что характерно, после перезагрузки коннектится он легко и непринужденно. То есть всё в целом было в порядке, просто не хотели разговаривать. (видимо, какой-то драйвер в компе дохнет и не рестартует)

Или как я ночью перед конференцией пытался минут 20 заставить айпад и макбук увидеть друг друга по AirDrop, чтобы перекинуть слайды (макбук видел айпад, а мне надо было в обратном направлении гг). В итоге сделал через шнур и iTunes. И это всё эппловское, а не разных китайских производителей! Экосистема проявляется, разве что, в том, что Nexus 5X с макбуком соединить по bluetooth я в принципе не смог. Нерешаемая задача. Не хотят, и всё тут.

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

Я не знаю, но наверняка есть какая-то техническая причина, почему нельзя сделать нормально? Почему этот вот discovery такой ад? Почему устройства не хотят говорить? Из всего bluetooth-зоопарка у меня не было ни одного беспроблемного устройства. Ни одного! Единственно 100% надежно работающее беспроводное у меня дома — это микрософтовская клавиатура с USB-ресивером. Втыкаю/перетыкаю его по десять раз на дню, и всегда всё подхватывается мгновенно. Вот они как-то добиваются беспроблемной работы?

И в целом я был только рад, когда эппл выкинул CD-ROM — интернет и флешки тогда уже работали. Когда убрали Ethernet порт, уже был WiFi и он работал. А вот с блутусом как-то до сих пор не полетело.

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


Дикий, дикий запад
усы2
tonsky

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

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

А дальше вот что. У оригинального фильма была, простите, проблематика. Вся развлекательная история намазана на ядро, которое взято из реального мира, которое есть здесь, по эту сторону экрана. Через конкретную, частную историю мы видим обобщение страхов, настроений, проблем. Это не саспенс, эффект на пять минут, про который помнишь, в лучшем случае, пока сидишь в зале. Тот фильм было тревожно смотреть. Он запоминался.

И он умудрялся, при всей простоте интриги, выглядеть сложнее даже «Парка», тоже не самого пустого фильма. В «Парке» были технологии на службе развлечения, неизбежный развал сложных систем, ответственность за эксперименты, в Westworld-е (Крайтноновском) добавились возникновение разума и моральное отношение к роботам (к динозаврам таких вопросов как-то не возникает). Ну и роботы тупо, кажется, ближе, сейчас по крайней мере.

Что из этого перекочевало в сериал? Удивительным образом ничего. Они удачно обошли более-менее все вопросы из оригинала. Это запутанная, приключенческо-детективная история, которая использует сеттинг примерно никак. Точнее, она использует его, чтобы провернуть со зрителем трюк (судя по доминируещей фанатской теории, последняя серия еще не вышла), просто используя тот факт, что роботы не стареют. Ну, и еще поиграть в викторину «угадай, кто из героев робот».

С трюками вот что. Они впечатляют, но это впечатление разовое. В моменте. Оно и забывается быстро, и эмоционально годится разве что гыгыкнуть с друзьями. Но самое противное, что оно создает ощущение обмана. Я девять недель сопереживал героям, а на десятой выясняется что на самом деле все было не так и я переживал зря. Что я должен почувствовать? Что, Бернард? [1]

Сравните: вопрос, этично ли убивать робота, если в нем проснулся разум (или как вообще понять, проснулся или нет), не испаряется от того, что мы узнали в начале, середине или конце фильма. Никакое количество твистов не заставит его исчезнуть. Как говорил Воннегут, если у вас есть что сказать, не тяните, выкладывайте это сразу, на случай, если тараканы съедят последние страницы. Ну а вопрос «кто из героев робот» испарится сразу после конца серии.

Еще одна проблема с трюками в том, что их мало кто умеет проворачивать хорошо. Если твист слишком хорошо прятать, надо его делать максимально нелогичными, иначе догадаются раньше (вот этот вот смешной растяпа оказывается всё это время был секретным супер агентом — с чего бы?). То есть, либо логика, либо неожиданность.

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

Ну а что с роботами? Очень трудно снять кино про такой парк и обойти стороной все «традиционные» вопросы робототехники. Удивительным образом сериалу это удается. Самая лучшая — первая — серия подавала надежду, но похоже, это только за счет того, что она обыгрывала фабулу фильма, ну и, зацепило, что ли, по неосторожности. Всё последующее удивительно лавирует между проблемами, раз за разом уворачиваясь от серьезного разговора либо в сторону загадочности, либо клиффхэнгера, либо эффектной перестрелки (резни, засады). Переживать роботам совершенно не получается, в основном потому, что нам не показывают толком, что и в какой последовательности с ними происходит, специально путают ради сюжета. Восстания, кажется, вообще не будет, его заменили глубокой тайной. Чувствуете, да? И то, и другое, вроде бы, сюжетный ход, но восстание отыгрывало человеческую самонадеянность, безответственность в играх в бога, красивая такая мифогеничная история, а тайна это просто то, что нам пока не сказали. Самосознание роботы, кажется, обрели, но они им как будто не нужно. Что с самосознанием, что без, ничего особо с ними не происходит. Игры в бога формально есть, фактически, опять же, очень много тумана, и кто в кого поиграл и зачем не очень понятно. Важно ведь (опять банальщина) не только, что Форд бог, но и что именно он делает, и почему, и как он им стал, и как это его меняет. Но это не показывают, потому что тайна.

И еще одна раздражающая черта — это фасеточная структура. Есть много сюжетных линий (5-7?), и каждую неделю показывают по маленькому кусочку из каждой. Если сложить вместе историю одного персонажа, получится, что она не такая уж и длинная. В ней не так много событий. А так как она растянута на 10 серий, часто бывают провисания, типа, вот, давно что-то не показывали Долорес, давайте покажем, что с ней всё в порядке, ну и показывают, как она переходит поле. Всё. Такая структура, по задумке, должна наводить глубину и масштаб (смотрите, сколько фигур, со скольких сторон мы рассматриваем проблему), но на деле скорее мешает всё это проживать. Вот мы видим Мейв, которая в очередной раз очнулась в борделе. Мы уже и забыли, что там с ней было в прошлой-позапрошлой серии, не так легко сделать усилие и сложить это в одну арку, чтобы пережить, почувствовать, как она меняется, что с ней происходит. Она вот сейчас ведет себя так, потому что она только что... Что? А хз, две недели назад было, не помню чем там дело кончилось.

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

Я не могу перестать представлять, насколько круче это всё бы получилось, если бы каждая серия была историей одного персонажа, от начала до конца. Они и так не пересекаются в фильме. Примерно как почему «Я, робот» это сборник рассказов, а не роман? Потому что очень много топиков, и связать их все в один сюжет нереально. Можно было бы каждую серию посвятить чему-то одному. И день сурка бы ушел, а случайные столкновения в коридоре создали бы нужный калейдоскопический эффект и всё это связали, как в «Шапито шоу». И вообще, мне противно убеждение, что зритель не станет ничего досматривать, если будут разные герои, а в конце серии не будет клиффхэнгера. Мне кажется, так даже интереснее.

Нет, я понимаю, что я сейчас предъявляю создателям претензию, что они сняли не такой сериал, как я хотел, а такой, как сняли. Что это нечестно. Разумеется, это не претензия. Они сняли, как умели. Но это не отменяет также, что я хочу того, чего хочу. И что потенциал безбожно просрали. Вместо серьезного разговора — путанное Lost-стайл приключение с картонными загадками и ну совсем уж бульварной интригой.


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

[1] Шучу, конечно. Там вообще некому сопереживать. Ни людям, ни машинам


Летающий асфальтоукладчик
усы2
tonsky

Вот тут рассуждения про прокрутку и листалки

Вся книга — одна длинная прокручиваемой страница, но в ней всё в порядке и с дискретностью, и со стабильностью:

Книга разделена на смысловые развороты. Это помогает читать самодостаточными порциями. Нужный разворот легко узнать по внешнему виду в оглавлении. Листать развороты можно стрелками на клавиатуре. Иногда развороты содержат несколько сменяемых элементов — в этом случае при листании постепенно покажутся они все.

Меня во всей этой истории беспокоит вот что. Рассуждения все правильные, логичные. Ум с ними согласен. Но на уровне ощущений еще ни один сайт с хуком на onscroll мне удовольствия не приносил. Ни разу. Ни один.

Прокрутка содержимого внутри окна, вообще-то, не самая натуральная метафора. Точнее так: для нас важно, что у прокрутки есть ментальная модель. Человек представляет, что «имеется в виду», когда он крутит колесо и перед глазами проносятся цветные пиксели.

Вот это представление, что «что-то имеется в виду», очень важно. Нарисовать на экране можно что угодно. Но человеку проще, когда есть какие-то правила игры. Правила можно запомнить, привыкнуть к ним, предсказывать поведение. Если правила напоминают объекты реального мира, то интерфейс воспринимается легче — часть правил известны из повседневной жизни. Гугл на этом целую философию построил (см. Material design).

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

А теперь представьте, что приходит дизайнер, и вешает на скролл СПЕЦЭФФЕКТ. Друзья дизайнера, ну, наверное, скажут ВАУ. Обычные люди, наверное, смирятся: вот такой у нас теперь веб, что ж, надо терпеть.

↑ спецэффект на рэдимаге. Трудно объяснить, но, в общем, когда долистываешь до конца, под первым листом как бы оказывается второй

Меня же одолевают следующие эмоции:

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

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

  3. Неуверенность. Я всегда пытаюсь понять, чего хотел дизайнер, и правильно ли я смотрю на его задумку? Листаю ли с нужной скоростью, не проскакиваю ли, можно ли крутить назад?

  4. Раздражение. Это всё еще и тормозит. Да, даже на моем macbook pro с дискретной видеокартой это почти никогда не 60fps. То есть чувствуется, как страница напрягается и выдает с заметным лагом что-то тормозное, о чем ты не просил. Ну какое тут удовольствие? Еще интересно, дизайнеры, которые это рисуют, они просто игнорируют этот факт или как? То есть предполагается, что тормоза надо терпеть? Что когда-нибудь компьютеры станут мощнее? Дизайн с прицелом на будущее, так сказать?

  5. Расстройство от непродуманности. Модель с прокруткой хорошо понятна и изучена. Когда прокрутку перехватывают и показывают какие-то сценки, анимации, эффекты, это всё не рассчитано на нелинейное потребление. Нельзя попрыгать по странице, вернуться в какой-то кусок вверх, листать назад. Лучше бы вставили видеоролик, там тоже анимашки, но хотя бы все эти вопросы продуманы.

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

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

Короче. Прокрутка это свобода. Я уже писал, как важно, чтобы хоть что-то в компьютере работало надежно и предсказуемо. Это совсем другое качество взаимодействия. Да, компьютеры делают люди, люди ошибаются. Но если хоть что-то можно сделать надежно — прокрутку, или там, чтобы ссылки цвет меняли при наведении, или чтобы табы быстро открывались — мы начинаем этому верить. Не отбирайте это у нас! Алло, дизайнеры


Граф Кю-эль
усы2
tonsky

Интересная штука. В Фейсбуке придумали Virtual DOM. Идея оказалась такой хорошей, что им выдали кредит доверия на его реализацию (React), и там ещё осталось. И теперь, что бы не сказал Фейсбук, все слушают, раскрыв рот. Так Фейсбук закрепился законодателем мод по фронтенд-фреймворкам.

А у Фейсбука идет обычный рабочий процесс. Идеи рождаются, о них рассказывают на конференциях, они умирают. Естественный отбор, как везде. Скажем, было несколько подходов к Flux, все загнулись, но выстрелил Elm, и тогда Фейсбук просто нанял автора порта Elm архитектуры на JavaScript.

И вот они додумались до GraphQL. На всякий случай повторю: успех GraphQL не связан с качеством самой идеи GraphQL. Его успех — следствие кредита доверия, завоеванного еще статьей про Virtual DOM. GraphQL — плохая спецификация. Но люди слушают, потому что считается, что в Фейсбуке понимают про фронтенд. Они не понимают. Они перебирают варианты. GraphQL — просто еще одна флуктуация.

То есть, проблема, которую предполагает решать GraphQL, она правильная и актуальная. REST — штука идиотская, если делать приложения, а не один раз дернуть (вот я, например, еще в 2014-м на него катил бочку). Проблема в том, как GraphQL к ней подошел.

Смотрите. Задача — запросить данные с сервера. Т.е. нужен язык запросов. Что сделали в Фейсбуке? Они посмотрели на самый простой случай. Типа, запросить одну entity. И придумали самый идиотский, непонятно как сериализуемый, птичий язык. Да, это не JSON. Да, основной мотивацией при изобретении формата запроса было, чтобы запрос выглядел похоже на ответ. Не знакомость, не компактность, не простота генерации/парсинга, не простота реализации, не компонуемость (она будет нужна), не теоретическая база какая-нибудь вроде реляционной алгебры. Короче, придумали. А потом посмотрели, какие случаи такой формат не покрывает. Случаи взяли из своей практики. Какие запросы Фейсбук делает, такие случаи и залатали. Как залатали: налепили хаков поверх того, что придумали выше. Ну, типа, давайте мутации описывать тем же языком, что и запросы. Для пагинации давайте придумаем специальный синтаксис. И т.д.

Ладно. Получилось как получилось. Глобальных претензий две.

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

И вторая проблема. Ладно бы, если бы этот слой как-то магически решал проблемы за вас. Так нет, писать GraphQL сервер придется вам самим. Причем, сама спека очень нетривиальная, там всякие интерфейсы, инклюды, кондишны прям в самом языке запросов, серьезно. То есть люди сели, решили: а давайте сделаем вот чтобы реально была simplest possible thing. Ну и наворотили. Возможно, думали слишком много про удобства, а вышло в целом неудобно, потому что слишком много удобств.

Ну ладно язык, тут расчет, что язык за вас распарсит библиотека, если она есть под что вы там пишите. Эликсир? Джава? Ну, молитесь, чтобы работало. Надеюсь, не выйдет как с HTTP, в котором столько разных возможностей, что добрую половину из них веб-серверы in the wild просто не реализуют. Главное, что всё равно потом вам нужно писать эту логику, которая мапит схему вашей БД на иерархический JSON. И она не получается красивая, она получается рекурсивная. Т.е. это всё та же проблема N+1 запросов, только между сервером и БД. А если сам запрос рекурсивный (можно же рекурсивный запрос на GraphQL написать?), можно и N² сделать.

И всем этим люди занимаются только потому, что Фейсбук так сказал. ¯\_(ツ)_/¯

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


ООП-декомпозиция
усы2
tonsky
Типичная иерархия классов из каждого первого ООП-проекта. Животные:

  1. принадлежащие Императору,
  2. набальзамированные,
  3. прирученные,
  4. молочные поросята,
  5. сирены,
  6. сказочные,
  7. бродячие собаки,
  8. включённые в эту классификацию,
  9. бегающие как сумасшедшие,
  10. бесчисленные,
  11. нарисованные тончайшей кистью из верблюжьей шерсти,
  12. прочие,
  13. разбившие цветочную вазу,
  14. похожие издали на мух.


Удивидельно, что в GoF не вошла. [1]