усы2

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

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

без темы
усы2
tonsky

А вот и инструкция, как замапить CapsLock+IJKL на стрелки и наслаждаться управлением курсором с home row в любом приложении http://tonsky.me/blog/cursor-keys/


Не Vim-ом единым
усы2
tonsky

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

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

Итак.

Для начала давайте оспорим тезис, что набор текста — редкая операция. По моим оценкам, набор и трансформации делятся скорее как 50%/50%, т.е. набор далеко не редкая операция. Грубо, каждому переносу соответствует редактирование (т.к. код редко когда переносим без изменений), а каждому удалению — вставка (статистически, по GitHub, обычно графики вставок/удалений очень симметричные). Т.е. бегать между режимами приходится достаточно часто, чтобы записать необходимость их переключения в некую дополнительную ненулевую «нагрузку».

Далее, главное продающее свойство Vim это его «язык» трансформаций и манипуляций, настолько развесистый, что ему отдана основная клавиатура, а вводу текста — дополнительная, включаемая по кнопке.

Так вот, не хочу никого расстраивать, но система команд получилась такой не из-за какого-то великого инсайта, а просто потому, что у автора был тормозной модем и он «хотел печатать быстрее, чем обновлялся экран». Ну, представили ситуацию, да? Набрал «выделить текст, от кавычки до кавычки, заменить, ввести „абырвалг“, выйти», послал голубиной почтой и пошел пить кофе. Более того, даже в момент создания подход Vim не имел смысла для локального редактирования, где задержки нет. 

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

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

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

It was really hard to do because you've got to remember that I was trying to make it usable over a 300 baud modem. That's also the reason you have all these funny commands. It just barely worked to use a screen editor over a modem. It was just barely fast enough. A 1200 baud modem was an upgrade. 1200 baud now is pretty slow.

9600 baud is faster than you can read. 1200 baud is way slower. So the editor was optimized so that you could edit and feel productive when it was painting slower than you could think. Now that computers are so much faster than you can think, nobody understands this anymore.

The people doing Emacs were sitting in labs at MIT with what were essentially fibre-channel links to the host, in contemporary terms. They were working on a PDP-10, which was a huge machine by comparison, with infinitely fast screens.

So they could have funny commands with the screen shimmering and all that, and meanwhile, I'm sitting at home in sort of World War II surplus housing at Berkeley with a modem and a terminal that can just barely get the cursor off the bottom line.

It was a world that is now extinct. People don't know that vi was written for a world that doesn't exist anymore.

Но зато в Vim удобные «шорткаты» (команды, окей) и их много! Да, но в современных редакторах их не то чтобы сильно меньше. Даже стандартные системные (!) справляются с перемещением текста весьма неплохо (Cmd+←→ == начало/конец строки, Alt+←→ == прыгать по слову, Cmd+↑↓ начало/конец документа, Alt+↑↓ вверх/вниз на страницу). Окей, на Винде чуть похуже.

Плюс команды в Vim всё-таки немного более избыточны, чем хотелось бы. Проще жить, когда один инструмент решает две-три задачи (даже так: работает в двух-трех разных ситуациях), чем когда у тебя на каждый специальный случай отдельная кнопка. Вот например специальная команда для вставки в конец строки («a»), это что вообще? В обычных редакторах туда можно просто поставить курсор, а тут отдельная «команда». Или «r» (заменить одну букву и выйти), тогда как в обычном мире просто Backspace (кнопка «забой» :), которая и удаляет, и заменяет, если на месте удаленного набрать новую букву.

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

Здесь еще я мог бы пожаловаться на архаичность и несовместимость Vim с современным миром. У него, например, два буфера обмена ¯\_(ツ)_/¯ и оба внутренние. Ни один из них не попадет в ваш системный, т.е. скопировать текст внутри Vim и вставить его еще куда-то не получится. Он не умеет различать вставку текста и набор, поэтому если вы скопировали какой-то кусок кода (скажем, со StackOverflow) и вставляете, он его будет набирать посимвольно, что медленно, смешно и хреначит все отступы к чертям. Да, только из-за этого есть специальный режим «paste mode» и да, его-то как раз легко забыть включить/выключить. Часть этих «особенностей» пофикшена в графических клонах, скорее всего, но все равно, знакомство с ними было забавным и это тот случай, когда «через свежую покраску все равно проглядывали признаки старого, очень старого материала».

Ну и немного про достижения Vim. Хочу еще раз заметить, что Vim такой, какой есть, потому что так получилось. За ним не стояло какого-то гранд дизайна или проверенных научных моделей, система команд не то чтобы какая-то особенно логичная или удобная. Он ни подо что не оптимизировался, кроме модема и клавиатуры автора, у которой Esc был на месте Tab, а физических стрелок не было, зато уже были картинки стрелок на «hjkl»). Да-да, именно поэтому всем поголовно вимерам приходится маппить Esc на Caps Lock.

Зацените кнопку «рубля», кстати

Так вот. Первое великое (и случайное) достижение: стрелки на home row. Действительно, тянуть руку в правый нижний угол очень далеко, а перемещение по тексту очень частая операция. Процентов 50% успеха Vim я отдаю тому, что люди просто осознают всю идиотскость расположения стрелок в правом нижнем углу на клавиатурах, а Vim — наиболее доступный способ эту проблему хотя бы частично решить.

Но это откровение никак особо Vim не принадлежит и в идеале неплохо бы сделать его отчуждаемым. Стрелки не становятся вдруг удобнее, когда ты выходишь из Vim и переходишь, скажем, в браузер. Я решаю это маппингом Caps Lock + IJKL (да, не HJKL) на стрелки. Очень удобно и главное: работает везде.

Вторые 50% успеха я отдаю высокому порогу входа. Тут надо объяснить. В устройстве человека есть такой баг (ну или фича): люди не начинают лучше владеть инструментами/навыками/привычками со временем просто так, сами по себе. После того, как они научились делать задачу как-то (неважно, как, лишь бы получался результат), они будут продолжать делать её именно так. Если не прикладывать осознанных усилий, через год пользования Idea, например, ты будешь пользоваться ей так же, как через первую неделю. Горячие кнопки сами себя не разучат, удобные фичи не найдутся. Нужно тренировать себя, читать обучающие материалы, смотреть, как пользуются другие.

В примере с Idea ты вроде как более-менее понимаешь, как редактировать текст (так же, как и везде), поэтому естественного толчка к самосовершенствованию не происходит. Ты продолжаешь редактировать, как умел.

С Vim же ты вообще не понимаешь, что происходит. НИ ОДИН твой навык не работает. Тебе приходится разбираться. Ну и пока ты разбираешься, читаешь, ты успеваешь захватить значительно больший кусок области «редактирование текста», просто потому что никогда до этого специально её не изучал. Плюс постоянный цикл «блин, новая ситуация, в которой ни один разученный мной навык пока не работает» заставляет какое-то время гуглить, читать и смотреть, как другие люди просто редактируют текст

Спорим, для условного «Ворда» вы никогда бы даже не подумали гуглить такую табличку?

Опять же, это совершенно случайный фактор (высокий порог входа) и даже почти что контринтуитивный, но я считаю, что он как раз и сыграл значительную роль в успехе Vim. Ну а дальше, когда все частые ситуации разучены, начинается такое же плато, плюс включается Стокгольмский синдром :)

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


Хром против веба
усы2
tonsky

Новый пост: http://tonsky.me/blog/chrome-intervention/


Сколько пользы от программиста?
усы2
tonsky

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

Меня такой взгляд на вещи всегда шокировал своей недальновидностью. Ну то есть есть миллион вещей, которые:

  1. нужно просто сделать, без них проект можно помножить на 0 (особенно это заметно на старте проекта),
  2. которые не приносят прибыль прямо сейчас, но если их не делать, угробят её когда-нибудь позже (ну тесты там, автоматизация, контроль качества),
  3. всякие репутационные штуки, которые копятся медленно и не трансформируются в конверсию прямо щас (пресловутое качество, надежность, эмоции, поддержка),
  4. синергия, когда суммарно N фич больше чем каждая по-отдельности,
  5. эксперименты, которые вообще говоря в среднем скорее ухудшают прибыль и отнимают ресурсы.

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

Сколько денег принес компании Google сотрудник, реализовавший функцию Crop в приложении Photos? Или вот у Apple вышел iPhone X. Сколько денег принес программист, запрогавший свойство safe-area-inset-top? Давайте предположим, что у вас есть на руках все данные, к которым есть доступ у самой верхушки Apple. Как бы вы это посчитали? То-то и оно.

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

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


Ворчание ягнят
усы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-карт, мониторов, зубочисток, пальцев. Как бы ни было соблазнительно отказаться от проводов, рукам потеребить что-нибудь всё равно хочется.


?

Log in

No account? Create an account