Telegram Web
Слушал космонавта Александра Хохлова на канале Основа про жизнь на МКС. Очень интересно, очень милый жаргон (например, он человека называет «организм». Надеть одежду на организм), но одна мысль взорвала мне мозг:

Говорит, космонавтам сильно управлять станцией не надо, это обычно делают с Земли. Но если понадобится/приспичит, то можно. Правда, рубки управления или капитанского мостика нет, и управлять можно с любого ноутбука в любом месте станции.

Столовых, значит, у них целых две, а кабины со штурвалом ни одной!

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

Но все равно как-то странно. Непривычно, что ли. Логично. Но странно.

Сразу представил, как в самолете тоже упразднят кабину, а пилот просто будет сидеть где-то в салоне с пассажирами и на планшете тыкать кнопки, переключаясь между центром управления и match 3. Почему нет? Или автомобиль, в котором нет руля, все пассажиры просто чиллят и выбирают на телефоне, куда поехать. Oh wait, это уже есть, Убер называется.

Дивный новый мир.
Волею судеб делаю тут веб-сайтик. Естественно, участвует CSS. И вот например сегодня мне надо было сделать, чтобы абсолютно позиционированный элемент растянулся на всю ширину страницы. По дефолту он растягивается только на ширину/высоту одного экрана. Как это решается? Добавлением position: relative к body.

Или вот вчера. Сделал grid, все классно. Слева обложка, справа какое-то количество рядов текста. Ставим обложке grid-row-end: span N, где N — количество рядов справа.

Если рядов больше, чем высота обложки, растягивается ячейка с обложкой. Прекрасно. Но если рядов _меньше_, то начинают растягиваться уже ряды, причем равномерно. А мне бы хотелось, чтобы они кучкой сверху собирались.

Говно вопрос! Нужно добавить еще один фиктивный ряд, который будет брать растягивание на себя. Правда он сожрет лишний gap, но gap я в итоге убрал по другим причинам.

Но как сделать растягивание именно одного ряда, но не больше высоты того, что слева? ХЗ! Кстати, если знаете, расскажите.

Я уже почти пошел просить помощи, как внезапно заметил, что если сделать grid-row-end: span N+1 у картинки, то добавится «несуществующий» еще один ряд и внезапно все остальные перестанут тянуться! Но только пока он не существует! Если добавить его по-настоящему, даже без контента, то тянуться опять начнут все равномерно.

Или прочитал такую штуку в твиттере: если обернуть один элемент в другой, например, плашку, то margin-ы не обернутся и плашка будет меньше нужного. Чтобы этого избежать, нужно сделать overflow: hidden. Казалось бы, ну где одно, а где другое, да? А вот так оно работает.

Но твит продолжается! Теперь, говорит, контент-то обрезается (вот это уже хотя бы логично). Че делать? А просто, говорит, добавь display: flow-root. И тут я окончательно сломался.

Представляешь, приходишь ты через месяц на этот CSS посмотреть, а там написано: overflow: hidden; display: flow-root; и думашь: а, ну логично! Первое это чтобы маргины включить, второе чтобы клиппинг убрать. Очевидно! Из названий следует!

Как вы все это терпите, я не понимаю.
Интересна природа комментариев в интернете, конечно. Вот я пишу: сделал табличку на гриде, есть проблема, помогите.

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

Что важно: эти люди не говорят «твоя проблема решается таблицей». Потому что она не решается. Но они и не говорят. Это по сути такое заявление «А я еще знаю, что бывают таблицы. А ты знаешь? Безотносительно твоей проблемы, знаешь?». То есть не буквально так, буквально-то они говорят «возьми таблицу», но поскольку они не смотрели на проблему даже, по факту получается просто желание пообщаться. Интернет очень одинокое место все-таки.

Вспоминается случай, где чел спросил на форуме: «ребята, как сделать вот такую-то хитрую штуку». Ему: «не еби мозга, возми либу Х». А он: «дражайший мой человечек, я и есть автор либы Х». Хорошая шутка. Все смеются. Барабанная дробь. Занавес.

Но к счастью есть и другие, которые реально вникают в проблему и предлагают решения. Им спасибо! В итоге я все сделал на subgrid, и оно даже прилично работает. А где бы я был с таблицей? Где, а?
Прочитал тейк в Твиттере (каюсь, заглядываю иногда в алгоритмическую ленту, когда хочется отключить мозг, это прям стабильно доза праведного гнева напрямую в вену), в общем, тейк такой: инстаграм написали 10 лет назад командой из 13 инженеров. Сейчас и технологии получше, и языки, и выбор есть, а вот написать инстаграм мало кто может.

Это интересно, потому что на собеседовании в ФБ на systems design просят спроектировать как раз инстаграм, и, очевидно, если не можешь, ты не пройдешь. Также очевидно, что многие проходят, потому что количество инженеров в ФБ растет. И, наконец, очевидно, что они не запускают новый Инстаграм каждый год.

А теперь давайте расчехлим комбинаторику и нарисуем табличку возможных исходов.

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

Вариант второй: каждый прошедший systems design может написать инстаграм, но им просто не дают. Вместо этого их садят пилить формочки для бэкофиса facebook ads какого-нибудь. Это самый грустный вариант. Но тогда они бы знакомились, увольнялись и пилили инстаграмы снаружи, чего как будто не происходит?

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

Ну и все, других вариантов как будто нет?
Некий Nate Berkopec пишет в твиттере, что для типичного Rails-приложения, чтобы выдать 80 запросов в секунду, нужна примерно такая машинка: 48 vCPU/192 GB/350euro/month.

Это наверное самая безумная концентрация копинга, которую я видел за последнее время. Если коротко, то аргумент в том, что вот вы мол обмажетесь синтетическими тестами на локалхосте, а в жизни все гораздо сложнее. И он разбирает, как локальный сервер, выдающий 27k req/sec на одном ядре ноутбука (!), превращается в 1,5 req/seq (не 1,5К, а просто 1,5!) на проде:

Первое, говорит, Rails медленнее голого веб-сервера (Puma + Rack) примерно в 20 раз. Rails _без любого кода вообще_, просто чистый оверхед. Может быть конечно и правда, но ребят, ВЫ ТАМ СЕРЬЕЗНО??? Он там что, буквы к строке по одной прибавляет и аллокейтит каждый раз? Что там происходит вообще?

Второе, говорит, когда приложение превращается из Hello World в настоящее, мы получаем 1000 req/sec → 10 req/sec. Тут удивились конечно все, особенно разработчики кешей, баз, очередей, инфраструктур, у которых счет идет на микросекунды. Они там сто раз в базу без кеша ходят что ли? HTTPS соединения устанавливают каждый раз до внутренних сервисов? Что происходит?

Он еще говорит такую фразу: When you're Github or Shopify and you have 1000+ people writing Ruby code, you want to run a lot of code on every request! Но это максимально бредовое утверждение. Если ты Гитхаб или Шопифай, ты хочешь запускать _как можно меньше_ кода на каждый запрос, а не как можно больше. Ну камон. Ну только если у тебя не стоит задачи продать им как можно больше серверного времени, конечно.

И третье: We lose the final order of magnitude as we go from benchmark traffic to real world traffic. Запросы, говорит, прибывают в разное время, иногда густо, а иногда пусто. Это «complicated queuing theory», но сорян, я этого тоже не понимаю. Ну пришли запросы кучкой, 100 за одну секунду. Ну это то же самое что 100 rps в бенчмарке. С точки зрения rps, конечно (а он на другие метрики и не смотрит). Или в чем подвох? Если я мог 100 запросов в бенчмарке сделать, я и 100 запросов, пришедших в одну секунду, обработаю, нет? В этом же идея?

Есть еще такая фраза: there is no such thing as queueing for an empty/free server, when in the real world this happens all the time. Это я не понимаю совсем. Что такое “queueing for an empty server”. Типа, сервер ничего не делает, а запросы выстраиваются в очередь? Почему? Что имеется в виду?

Как он переходит от 1-2 req/sec к 150ms per request мне до сих пор не понятно, но как-то переходит.

Заканчивает «аналитику» такая фраза:

If you think its crazy to do 150ms of work for a web request, consider that I live in the biggest city in the world and have a 10gigabit wired ethernet connection and a 4000 dollar laptop and it still takes almost 2.5 seconds for me to cold-boot Twitter despite receiving the first byte of HTML 160ms after my request.

Это уже прокомментировали смешно, я смешнее не придумаю: I have considered that and it is insane.

Ну и вишенка на торте: автор исходного твита, Nate, пишет книги и продает консалтинг по оптимизации rails-приложений. Что он там продает с такими заявлениями (1 req/seq/core) я если честно не могу представить. Но считать удобно, конечно, 80 ядер == 80 пользователей, rule of thumb, так сказать.

Интереса ради запустил свой блог на кложе (не статический, с веб-сервером, все честно, real-world application). Скачал какую-то тулзу на node.js, она захлебнулась, чтож. Скачал locust на Питоне, он загружает сам себя быстрее, чем может загрузить джаву, но в принципе 4000 запросов на ядро выдает, на чем я и успокоился.

Пойти что ли тоже в консультанты по производительности? Приходишь, говоришь: ребята, меняйте Rails на Кложу, забираешь свой чек, уходишь.

Если я регулярно переживаю HackerNews-эффект на сервере за 20 евро в месяц, есть ли вообще смысл стараться дальше? Компьютеры все-таки очень быстрые.
Подержал тут в руках Андроид с Гугл Плеем, это конечно как газета с рекламой. Помните, были такие? Раскладывали в ящики бесплатно, контента нет вообще, одни объявления. Все кричит, все по-разному, криво, косо, перебивает друг друга, никакой структуры, уух, ужас прям.

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

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

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

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

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

ПОЧЕМУ БЫ ПРОСТО НЕ ПОЧИНИТЬ ТО ЧТО УЖЕ ЕСТЬ?

Это какая-то радикальная мысль или что? Я бунтарь, потому что этого хочу?

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

Я понимаю, что это видимо та самая эншиттификация, про которую все говорят. Но мне непонятно, из кого тут деньги выжимают, учитывая что все и так бесплатное. Тут ощущение, что цель — свести пользователей с ума херовым сервисом, который незаметно с каждым годом становится все хуже. Но зачем? Какая конечная цель? Как это конвертируется в прибыль? Зачем условному Гуглу армия сумасшедших с условными Андроидами?

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

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

Например, когда я пишу тексты, я не думаю, что пишу их в Саблайме (хотя я пишу). Саблайм это и есть текст, это его самое естественное и натуральное состояние. Программа растворилась, остался только материал, с которым я работаю.

Каждый раз, когда я почему-то набираю немного текста где-то еще, я начинаю удивляться: о, а почему мультикурсоры/cmd+d/cmd+k+u/еще что-нибудь максимально естественное не работает? Это же тоже текст!

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

Для кода это Кложа. Я уже настолько хорошо ее знаю, что никакого сопротивления не чувствую и могу накидать что угодно за пять минут. Распарсить и проанализировать CSV мне быстрее в Кложе, чем в условном Экселе. Часто, когда мне нужно что-то быстренько посчитать-проверить, я просто открываю любой из своих проектов, стартую там REPL, открываю пустой буфер и делаю что мне надо.

Могу представить, что для кого-то такой «средой по-умолчанию» становится Блендер. Люди самые безумные вещи там делают, такие, про которые я бы никогда не подумал «сделаю-ка я это в 3Д редакторе». У моей жены это ProCreate на Айпаде — она туда тащит все, включая тексты.

По этому поводу интересно, конечно, как такие продукты создавать.

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

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

- Opinion-ы, понятно, тоже надо засунуть себе в жопу. Представляете, если бы Фигма такая: «Мы считаем, что все канвасы должны быть или 16:9, или 4:3. Потому что красиво». Смешно же.

- Скорость, понятно. Никто не будет открывать файлик типа xml или json «быстро посмотреть» в условном Xcode или Idea (хотя они любят себя ставить как редакторы по-умолчанию все равно).

- Шоркаты или хорошая модель управления. Всякие частотные операции типа «взять цвет объекта» или повернуть-выровнять должны быть на кончиках пальцев. Помню, как распробовал Блендер как раз после скольких-то лет в 3d studio max, небо и земля. Там такое управление, что к нему можно привыкнуть и стать эффективным, то есть есть потенциал для роста и привычки.

- В идеале ничего не должно бесить. Этот пост, например, я пишу не в Телеге, потому что там нажмешь cmd+вверх/вниз или наберешь двоеточие случайно и все, ты застрял где-то. Раз-два потерпеть можно, но жить так нельзя.

Многое из этого это просто принципы хорошего софта, конечно. Но во-первых не всем удается, во-вторых наверное это необходимые условия, но не достаточные.

Но когда удается — программа прописывается на компьютере всерьез и надолго, и с пользователя можно драть любые деньги. Вот бы так научиться тоже.
В Твиттере опять затронули тему геттеров. Я опять высказался, что мол, не понимаю. Зачем городить целый метод, который возвращает поле, и еще прятать поле, если можно напрямую прочитать поле? Кто умрет?

Объяснений обычно дают несколько.

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

(правда, они частично бизнес построили и на том, чтобы геттеры можно было сгенерировать одной кнопкой. На оба фронта играют, молодцы)

Второе — это же публичное АПИ поменяет, а у нас библиотека! Не, ну если у вас и правда библиотека, то ладно. Но много вы видели компаний, которые прям библиотеки пишут? Так-то я видел геттеры и просто в локальной кодбазе, причем тупые.

Третье — ну если правда логика какая-то нужна. Ленивое там поле, или кешируемое, или проверка какая. Тут я на вас очень обижусь, потому что если я вижу .getAge() я ожидаю что оно просто вернет age, а не начнет число Пи вычислять до сотого знака. Конвенции-с. Если нужен метод, который что-то действительно делает — ну так пусть он и выглядит как метод, который что-то делает. .calculateAge(), я не знаю.

Хуже всех тут выступают языки, которые умеют притворяться, что геттера нет, когда он есть. Типа, пишешь var y = obj.y, а на самом деле вызовется var y = obj.getY(). Нафига так делать? Какая цель преследуется? Чтобы выглядело симпатичнее, но читать-понимать было сложнее? Нет, спасибо. Вы думаете, почему на языках с большим количеством сахара так сложно программировать? Потому что вещи не то, чем кажутся.

Четвертое – иногда еще приводят аргумент, что мол геттеры мокаются/проксируются, а поля нет. Если честно, мне сложно представить что это такое и зачем это нужно. Зачем делать другой объект, который притворяется оригинальным объектом, и читать его поля. А если нужно читать поля, то зачем для этого другой объект.

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

И наконец пятое — что геттер/сеттер это единственный способ сделать разную видимость у чтения/записи. Тут мы упираемся в проблему, а нафига вообще ограничивать видимость/доступность операций, почему все не может быть public по умолчанию? Мое глубокое убеждение, что может.

Обычно приватную видимость защищают аргументами вроде: если программист увидит, что у массива есть поле size, открытое для записи, он сразу туда что-нибудь запишет и все сломает. То есть они как дети — видят розетку и сразу туда суют две спицы.

В такой логике (я пишу код для людей с интеллектуальным развитием 4-6 летнего ребенка, активно пытающегося самому себе навредить) жить, наверное, тяжеловато. Но тут есть такое соображение — в любой программе программист всегда может поделить на ноль и все сломать. Никто его не остановит и не помешает.

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

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

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

Потом еще Напоминания появились, которое частично Календарь, частично Заметки, частично Будильник. И теперь когда тебе нужно что-то записать, ты такой: а куда? В Заметки? В Напоминания? В Календарь? Зачем мне этот выбор? Должен быть один способ делать это.

Про Журнал вообще молчу, это буквально Заметки with extra steps. Как будто на приложения начали разделять по вайбам, а не по функциям. «Ну как же я буду писать о том, как прошел мой день, в общие заметки? Рядом со списком покупок? Ужас какой».

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

В моем идеальном Эпл-мире были бы отдельные приложения «Часы», «Будильник» и «Таймер» (прям отдельные, разные иконки), отдельные «Фоталка» и «Видеокамера», была бы только одна «Рисовалка» (для ввода карандашом), только одна «Писалка» (для текста), самостоятельный «Сканер», зато Тудушки и Календарь были бы вместе, например.

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

UPD: посмотрел еще, похоже что Control Center это теперь еще один «параллельный мир», где есть приложения, виджеты, страницы. Что мешало это все иметь на главном экране? Нет ответа
Понял, что я видел американцев всего два раза. То есть как, просто людей-американцев я знаю миллион, они все милейшие люди. Я бы даже не сказал что они чем-то отличаются.

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

А второй раз случился вчера на конференции Merge. Вышел создатель Гитхаба и первым же делом разыграл среди посетителей Apple Vision Pro. Говорит, вы тут в Берлине такого и не видели поди.

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

Другое дело, что хотелось бы оказаться на его месте. Я вроде тоже айтишник, возраст примерно тот же, но у него есть (был) Гитхаб, а у меня только опенсорс. Почему?

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

А я думаю: нет, надо все правильно, аккуратно делать, а потом бесплатно всем раздать. То есть меня интересует, как это все рабоатет, и как сделать хорошо, но брать деньги за это как будто стыдно. Или не стыдно, но это явно не первая и не вторая мысль, которая приходит в голову.

Еще я думал, что надо сначала стать популярным, а потом это сконвертируется в деньги. Оказалось — нифига, эти две вещи вообще не связаны, а иногда даже идут в обратном порядке.

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

Вот я пожаловался на что-то в айфоне. И некоторые (не будем показывать пальцем) сразу радуются и бегут писать «возьми андроид!» (они не так на самом деле пишут, а гораздо грубее, типа я тупой, потому что у меня айфон, но опять же, не будем показывать пальцем).

Или я пожаловался на что-то в маке. И тут же прибегают комментаторы (я знаю, у них оповещение на слово macos в моем канале) и такие: «Возьми Линукс. Не, ну возьми Линукс. Ну возьми. Ну че ты. Ну возьми. Ну не. Возьми. Че ты не берешь? Возьми. Не, ну правда. Возьми уже. Линукс-то. Возьми. Э.»

Есть еще интересные персонажи, которые думают, что если я жалуюсь, то я страдаю. И меня надо спасать. Не знаю, что они там думают и как мою жизнь представляют, но пишут именно так: «Страдаешь ты, брат. Возьми Линукс»

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

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

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

Как правильно, понимаете? Допустим, математик читает книгу по математике. И на сотой странице обнаруживает ошибку. Что делает математик? Выбрасывает книгу в окно и идет искать другую? «Страдает?» Нет, он просто подмечает ошибку и идет дальше. Потом, если ошибка частая, может, пост напишет.

Так и я. Я могу назвать миллион косяков в айфоне, но могу назвать миллион и в андроиде. Могу назвать миллион в маке, полтора в винде и два в линуксе. И что теперь? Страдаю ли я? Нет, я просто иду и делаю охуенно сам. И вам рассказываю, чтобы вы тоже знали.

В этой модели выбирать ничего не нужно. Более того, правильного варианта может не существовать ни на одной платформе. Важно просто знать, как сделать хорошо. Созидание, а не потребление.

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


0:00 — Кнопки «Полезно» и «Непонятно»
5:56 — Гениальность реакций в Телеграме
9:07 — Подсветка ссылок при наведении и постоянная Арутюнова
...


сделать


|0:00 |Кнопки «Полезно» и «Непонятно» |
|5:56 |Гениальность реакций в Телеграме |
|9:07 |Подсветка ссылок при наведении и постоянная Арутюнова |
...


(странные пробелы Бирмановские, у него спросите, почему так некрасиво)

У него пост про то, как он пытался ЧатГПТ заставить, а я задумался — а как бы выглядело идеальное решение?

Допустим, конкретно в этом случае все делается в Sublime Text за условные 20 секунд с мультикурсорами и поиском по регэкспу (кто говорил, что регэкспы не нужны? а? а? там в комментах кто-то переживал, что может тоже бы так делал, если бы регэкспы знал. То-то).

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

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

Но мне кажется это очень показательно, именно простота задачи, которая требует простоты решения. Потому что супер-сложные задачи — ну скачать программу. Сложные — напиши скрипт. Тривиальные или неповторяющиеся — делаешь вручную за 5 секунд и не паришься. А что-то посередине — как?

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

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


function formatTimestamps(s: string): string {
...
}


и у тебя сразу у выделенного текста в контекстном меню появился пункт Automation -> Format Timestamps.

Если я правильно понимаю, Емакс так работает (да, мы опять изобрели Емакс). Только это, ну, Емакс.

Еще что-то похожее есть в Roam Research. Там есть страницы твоих заметок, но если создать специальную страницу roam/js, то на ней можно писать код и он будет исполняться. Правда, в контекстное меню эти команды не попадут вроде бы, так что непонятно, как ими потом пользоваться. Но писать можно :)

У VS Codе был шанс сделать нормальный современный Емакс, но они чет не пошли в ту сторону — нужно миллион шагов предпринять, что бы оформить свою функцию из трех строчек в «плагин». Для чего-то большого оно может и стоит того, но для микрофунции типа formatTimestamps — явно нет.

В общем, буду делать свой редактор слэш тул фо тотс обязательно запилю максимально беспрепятственную автоматизацию. Чтоб на кончиках пальцев.
Короче вы меня опять не поняли. Я думал о том, как это организовать, чтобы было удобно, а вы пишете, что «формально функция есть — какие проблемы?». Ну че вы как программисты, ей богу.

Отдельный респект пацанам, которые советовали скрипты в Гугл Доке. Я даже смеха ради сходил посмотреть. И вы сходите.
Поскольку мой опыт показывает, что мне хорошо удается донести тонкие материи, давайте попробуем еще раз.

В Мак добавляют систему «примагничивания» окон к углам — хочешь, на правую половину, хочешь — на левую, хочешь — на весь экран. Типа как Rectangle/Divvy/что там еще, только встроенное. Еще не тайловый менеджер, но типа супер-мейнстримная базовая версия. Радость, по идее, должна быть что раз оно системное, то будет работать лучше, но вы же знаете современный Эпл — совсем не факт.

Ну и вот. Обсуждали мы это, и я говорю: кстати, в Винде такое давно есть (говорю же, мейнстрим). Только там сделано по-дебильному: если ты ставишь окно налево, система доебется до тебя модальным окном, чтобы ты выбрал окно справа. Как, говорю, можно было так обосраться на ровном месте.

Приходит чел и говорит: ты дурак, это удобно, просто нажми Эскейп и ничего не надо будет выбирать, право не выбирать окно надо заработать (что? да), и вообще плох тот интерфейс, где все работает само и не надо думать.

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

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

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

Важный, как мне кажется, прием.

Но вы давайте, пишите, как в Линуксе все давно и лучше сделано и вообще окнами управлять не нужно. Как еще жить, если привязал свою личность к операционной системе.
Вчерашний пост вызвал некоторое возмущение. Типа, как можно топить за одно решение вместо другого, надо дать выбор!

Denis:

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

D H:

> "по метрикам" лишнее
> Все юзкейсы/личные предпочтения не покроешь

Andrei D:

> ну да, ну да
> а правильно — это как Созидатель благоволил снизойти

На что у меня есть сказать две вещи. Первая — релятивизм заебал. Нет, не всегда «одно лучше в одной ситуации, другое в другой, поэтому мы не знаем что лучше». Иногда одно решение реально лучше другого. Реально. Объективно. Всегда. Для всех. Независимо от предпочтений.

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

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

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

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

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

Короче, между корпоративным говном, работающим не в моих интересах, и настройками я конечно выберу настройки, но между настройками и «сделано нормально» я все-таки выберу «сделано нормально». Если нормально сделано, то и настраивать ничего особо не хочется.

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

Обожаю эту особенность соотечественников, начинать разговор с претензии.

«Привет, че не пишешь, пошли бухать». К привет-пошли вопросов нет, но вот эта претензия в середине, она зачем?

«О, ты там-то был, а че не сказал?» Ну блин, потому что не подумал/не захотел/обстоятельства не позволили. Как на это отвечать вообще?

И, главное, зачем?
Про дурацкий миф «у маковского монитора обязательно должно быть 220 точек на дюйм» я уже писал, но в твиттере опять кто-то на него повелся.

Ловушка Джокера тут вот в чем. Человек сидит на условном 1080p или даже, если по-богаче, на 1440p. И тут ему предлагают купить 4K монитор. Он покупает, ставит, а там места ровно столько же, сколько и на 1080p. Не, картинка лучше в четыре раза, но места-то столько же. А если с 1440p переходить, то и вовсе меньше.

И человек недоволен. Он негодует. В его понимании он потратился на «премиум» (хотя в чем тут премиум, мне не очень понятно, они буквально меньше 200 баксов бывают), а его как бы обманули. Хотя обманул он себя сам.

Тут начинаются два стула. Можно терпеть и жаловаться на отсутствие места (сам нафантазировал себе ожидания, сам в них не попал, сам расстроился — все сам!), а можно поставить дробное масштабирование и ныть уже на него. Купил монитор с огромным разрешением, а на нем шрифты мыльные — нормально? 200 долларов отвалил, между прочим.

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

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

Дорогие мои! Хорошие! Ну вот есть у вас 20 физических пикселей на иконку. И дизайнер нарисовал на ней три горизонтальные линии (гамбургер): на 0, 9 и 18 пиксельных строчках. А теперь смасштабируйте мне эту иконку на 125%. Чет не получается, да? 19 пикселей высоты внезапно превращаются в 23.75 пикселя, линия в 1.25, если округлить до 24, то посередине линию фиг проведешь, бла-бла-бла. Ну это физика. Ну невозможно впихнуть аккуратно то, что стояло ровно, но ты распидорасил на дробное число. Ну нет таких способов. А пиксели, к сожалению, все еще квадратные и очень хорошо заметны. Даже моему дедовскому зрению. Это тоже физика.

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

На самом деле, эта проблема решится когда-нибудь с ростом плотности пикселей. На айфонах вон сколько уже, за 450 перевалило? Уверен андроид даже больше умеет. Ну и вот, там уже можно в пиксельную сетку не попадать. Там ее и нет на самом деле, там решетка светодиодов не квадратная даже.

Но пока мы живем в мире 220-250 dpi, попадание в сетку все еще важно и заметно.

Ну а про то что 5К лучше 4К мне кажется спорить даже странно. Но я с этим и не спорил. Если бы дискуссии именно так были структурированы — я бы и слова не вставил. Конечно лучше, епт, если деньги есть. Знаете, кстати, что еще лучше чем 5К? 6К! А там и 8К не за горами.

UPD: А, миф про векторые иконки забыл. Да хоть хуекторные — как будто векторные линии как-то магически попадут в пиксели, если число пикселей не кратно числу линий. Как будто в этом проблема вообще
Каждый раз, когда мой сайт попадает на Hacker News, все начинают обсуждать форму. Сначала был желтый цвет и всех бесил. Сейчас, кажется, привыкли, но теперь бесят курсоры. Об этом половина комментариев, люди находят и специально пингуют меня в соцсетях, чтобы об этом сказать.

Хотя казалось бы. Ну не нравится тебе. Отвлекает. Ну так для этого бог дал тебе Reader Mode. Нажми одну кнопочку — буквально — одну — и сделай себе хорошо. Не нужно никуда ходить. Не нужно никому ничего писать. Не нужно баталии никакие вступать, переубеждать никого не нужно. Ультиматумов ставить и ставить всех остальных в известность. Ничего этого не нужно.

Достаточно — всего лишь — нажать одну кнопку и сделать себе хорошо. Самому себе. Прямо сейчас. Тривиально.

Но люди, конечно, не делают.
Фигма показала редизайн своего UI, называется UI3.

Когда-то Фигма очаровала меня элегантной простотой своего первого интерфейса, UI1. Все на месте, все под рукой, ничего не шумит, разложено аккуратненько. Очень свежо смотрелось на фоне Адобе, где просто каша из наросшего за десятилетия говна, которую никто никогда не чистил. Оказывается, дизайн-тул может выглядеть прилично!

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

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

Ну и вот теперь UI3. Респект за то, что не боятся все встряхнуть и переосмыслить — без этого рано или поздно получился бы новый Adobe.

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

Что ни говори, а у панелей, плавающих поверх контента, есть некий appeal, привлекательность. Бестолково, но ощущается прикольно. Ощущается, что места больше стало. То есть если твоя цель набрать классов — решение самое верное. Ну и эффект новизны, то-се. Это вторая мысль.

Третья — про саморефлексию. Непонятно, что мне мешает любить эти новые ходы. Там еще менюшки теперь как в макосе, когда выделение текущего пункта внутри не от края до края, а как бы вложенным прямоугольником. Опять же — понятно — модно. Но хорошо ли? Красиво? Мне не нравится, но это потому что я старый? Или правда некрасиво? Есть ли у меня какой-то вкус, или я просто упертый дед, для которого со времен Windows 95 ничего не улучшилось? Мне кажется, что улучшилось, потому что есть вещи, которые мне нравятся, но эта вот нет. Короче хз.

Ну и четвертая — про то, что в общем-то печально, что Фигма пошла на поводу у трендов. Раньше она их задавала, а теперь просто «все делают скругления и мы сделаем скругления как у всех». Я, когда на них смотрю, ничего не чувствую (ну, разве что «чет шумит больше обычного»). А потом представляю митинг, где десять дизайнеров выводят этот макет на проектор и у каждого под столом эрекция сразу: ууу скругления!!!

Кстати, весь остальной брендинг так и остался угловатым. Надо бы обновить!

Последня часть про эксперименты. У ребят есть процесс — если есть идея, они ее тестируют. Классная штука, но вещи, которые у них провалились, немного эээ очевидные? Типа, если убрать подписи к полям, пользователи теряются. Если спрятать контролы за Show more, пользователям не нравится. Контролы в попапе не нравятся. Когда контролы прыгают, тоже не очень.

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

Но вроде по итогам они что-то там перегруппировали более логично, так что респект.

Кстати, никого не бесит, что Align left/center/right находятся в свойствах объекта, хотя по сути это инструмент? Теперь еще и Create component & Co уехали в свойства, хотя тоже вроде бы действия. Не вижу, почему бы все не свалить в панель инструментов?

Еще интересно, с плавающими панелями, куда уедут Ruler-ы? Под панели?

Кстати, панели же теперь можно ресайзить! Еще чуть-чуть и до перетаскивания додумаются. Мне всегда было жалко, что слои занимают целую колонку.

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

Отвечу: тем что он бессмысленный. Он чисто логически невыполним. Хуже чем кто? Чем те же дизайнеры. То есть есть дизайнеры, которые делают получше, и есть те, которые похуже. Ну так и что, так везде, это банальное утверждение.

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

Ладно, давайте попробуем проинтерпретитовать вопрос. Может быть, имелось в виду, что дизайнеры что-то меняют, а человеку не нравятся изменения? Типа, я привык, а вы меняете.

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

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

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

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

Есть штука, которая не вызывает проблемы у вас, но вызывает проблемы у кого-то еще. Вас это может взбесить, но камон, ребят. Эмпатия! Поставьте себя на место другого человека. Плюс, объективно, вам либо все равно, либо стало лучше, вам просто не нравится что что-то меняют.

Наконец, дизайнер может прийти и реально, объективно сделать хуже. Никто не застрахован, все мы люди. Штука тут в том, что чтобы были возможны предыдущие пункты, должен быть возможен и этот. Или все, или ничего. У вас на работе есть правило «коммитить только код без багов, код с багами не коммитить?» Нет? А почему?

Поэтому позиция «просто сделайте и больше никогда ничего не трогайте» мне не нравится, я хочу отличать хорошие изменения от плохих, не хочу грести все под одну гребенку. И я хочу, чтобы хорошие изменения случались! Но для этого, к сожалению, нужно разрешить все менять.
2024/07/07 08:16:55
Back to Top
HTML Embed Code: