nikitonsky_pub | Unsorted

Telegram-канал nikitonsky_pub - Стой под стрелой

10682

Ведет @nikitonsky. Рекламы нет

Subscribe to a channel

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

Читал тут Адама Виггинса, основателя Хероку, My Heroku Values, и он в числе прочего пишет:

> Put it in the cloud

> I don't want to run software, ever. Given a choice between a great app that runs locally and a mediocre app that runs in the cloud, i'll always take the latter. (e.g. excel vs google spreadsheet, 1password vs lastpass, Things vs a textfile todo list on Dropbox) Services, not software.

Что вроде бы логично для чувака, придумавшего и продающего облака, да?

Но ирония в том, что Хероку он с тех пор продал, основал Ink & Switch, который должен был стать исследовательской лабороторией по интерфейсам, а стал по CRDT и local-first software. То есть, прямая противоположность облаку, все свое ношу с собой и запускаю локально.

Потом включил подкаст localfirst.fm, а там Peter van Hardenberg, директор этого Ink & Switch, оказывается, тоже в Хероку начинал.

И вот его спрашивают: а как так получилось-то, разворот на 180 градусов? Что поменялось?

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

Ну хорошо, говорят, а программисты-то зачем в эти облака писали? У программистов-то был выбор, какой софт создавать?

А, говорит, ну они писали по нашему же совету, мы им говорили под облака писать, они и писали.

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

Такая история.

Читать полностью…

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

Там Вастрик опубликовал пост про корпоратов и инди, в котором, ожидаемо, больше про инди и очень хорошо, а вот про корпо несовсем точно.

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

Но! Очевидно это не так. Очевидно, что простой код понять проще, чем сложный. Условно, если я напишу кнопку лайка на vanilla js с fetch на 10 строчек, это будет проще и понятнее, чем притащить React, Webpack, CSS-in-JS и бог знает что там еще придумали. Ну просто потому что количество движущихся частей и абстракций сильно меньше, а это объективная характеристика.

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

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

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

Или потому что делать проще — это часто ощущается как «топтаться на месте», часто требует удалять код и пересматривать решения, а этого большие компании не умеют. Они умеют только добавлять.

В общем, причин много, но очевидно код на работе такой сложный вовсе не от того, что коллегам сложный код понятнее простого. Это был бы абсурд.

Ну а настоящий вопрос к статье конечно такой: если в инди надо говнякать и больше искать нишу, чем кодить, в корпо душат, то куда податься простому программисту, которому просто нравится, когда компьютер делает буп-буп?

Читать полностью…

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

В книжке про Шерлока Холмса есть такой прогон:

> Мой мозг [...] бунтует против безделья. Дайте мне дело! Дайте мне сложнейшую проблему, неразрешимую задачу, запутаннейший случай — и я забуду про искусственные стимуляторы. Я ненавижу унылое, однообразное течение жизни. Ум мой требует напряженной деятельности.

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

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

- Настольные игры с нетривиальными механиками или стратегиями,
- Логические пазлы, где не надо бегать и искать сами пазлы, а надо просто сидеть и решать. The Witness, The Talos Principle, Baba Is You.
- Roguelike/CCG типа Slay the Spire, Wildfrost, FTL, Into the Breach.
- На безрыбье даже гребаные судоку.

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

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

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

Читать полностью…

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

Вастрик (читается vas-3-k), исполнительный директор Вастрик-Клуба и HTMX (совсем не бережет себя человек), в подкасте «Тысяча фичей»:

> Я ненавижу SPA, я прям терпеть не могу, я не понимаю. Нет ни единого плюса у SPA, их просто не существует, вообще.

> Любую вещь, которую делают на SPA, обычный браузер делает лучше. Рендеринг HTML быстрее делает обычный браузер, чем блядь твои React-компоненты. History, оно уже встроено в браузер, зачем ты роутер, блядь, тащишь на фронтенд? Кэширование тоже, у тебя есть все эти флажочки, If-Modified-Since, HTTP-заголовки и все прочее.

> Засилие SPA и вот этих сайтов, которые spinner fest-ы, когда ты открываешь сайт, а там у тебя фестиваль спинеров, тыр-тыр-тыр. Все подгружается, каждый widget свой loader отображает, и вот spinner-fest блядь, как будто в цирк какой-то ебаный приехал, клоуны тебя тут вертят.

> И ты ждешь, как дебил сидишь, пока тебе реально твиты покажут. Зачем твиттеру SPA? Я ваще не понимаю.

Дискас. Коменты открыл.

Читать полностью…

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

Навального убили. Что очень печально, как бы вы к нему ни относились. Так что поста не будет. Пиздец

Читать полностью…

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

В Твиттере создатель Next.js хвалит схему, когда URL-ы содержат текстовую часть и id, типа .../new-js-framework-867489b1823e. Идея в том, что если ты статью переименуешь, то текстовая часть поменяется, а числовая сохранится, сервер будет смотреть только на айдишник, и старые, и новые ссылки продолжат работать.

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

Решение, конечно, на поверхности. Можно организовать редирект. Запомнить и старый адрес, и новый, и редиректить старый на новый, если по нему пришли. Легко? Легко. Просто? Тривиально.

Так в чем же дело? Нафига к красивому урлу дописывать шестнадцетиричное число?

Причина, видимо, в том, что неохота хранить таблицу соответствий. Потому что ее надо же хранить вечно. Но если подумать, компьютеры достаточно мощные, чтобы рядом с постом на 50 килобайт сохранить хэшмап байт на 100. Пост же все равно будет храниться вечно? Ну вот и мапу урлов положи рядом, не убудет.

Гильермо (так зовут создателя Next.js) пишет, что так уже работают Медиум и Ноушн. Ну оно и показательно. Ребята специалисты по плохим решениям и выдумыванию проблем.

Что, кстати, как мы видим, совсем не мешает успеху. Зависть.

Читать полностью…

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

Все знают, что программировать лучше всего в моноширинном шрифте. Хотя с типографской точки зрения это полная бессмыслица: ну кому удобно от этих узких m и w и широченных i и l? Никому. Технических ограничений тоже уже давно не осталось: нарисовать пропорциональные буквы, спасибо Джобсу, сегодня так же легко, как и моноширинные (гусары-терминальщики, молчать!)

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

Я когда лет 10 назад попробовал текстовый редактор iA Writer, так в нем и сижу (ну, сейчас в Саблайме, стилизованном под него, но смысл тот же). Одна из основных фич — это набор текстов моноширинным шрифтом. Да, обычных, простых человеческих текстов. Вот прям сейчас этот набираю.

Когда они переезжали с Nitti на IBM Plex, они сделали прикольные Duo и Quattro версии: они почти целиком моноширинные, кроме некоторых букв. В Duo есть полуторные (w и m, собственно), в Quattro — 0.5, 0.75 и 1.5. И что? Duo работает, Quattro совсем нет. Он просто выглядит как пропорциональный шрифт и убивает всю магию.

По какой-то не до конца понятной мне причине набирать текст поста/заметки/сообщения кайфовее именно моноширинным шрифтом. Не могу объяснить. Не понимаю. Читать неудобно, а набирать и редактировать — гораздо, гораздо кайфовее.

Подозреваю, и с кодом так же. Чисто стилистический выбор.

Читать полностью…

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

В русском языке 33 буквы. Ъ и Ë выкидываем как ненужные, остается 31. 31 некруглое число, надо 30. Какую еще выкинем?

Читать полностью…

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

Удивительно, что мы, как человечество, так и не решили проблему центирования объектов на компьютере.

«Это какая-то старая шутка со времен, когда Прометей еще не принес нам флексбокс», — скажете вы! «Давно уже все центрируется вот этими простыми шестью аттрибутами». И это правда.

Но! Если бы это решение работало, я бы не видел на каждом углу плохо отцентрированное все: кнопки, текстбоксы, надписи, иконки. Причем не только в вебе, но и в нативе. Как это объяснить?

Я думал сделать пост про это с картинками, и собрал 42 примера за полчаса. То есть я даже не искал! Да что далеко ходить: в Telegram for macOS, в котором я это сейчас пишу, надпись Write a Message стоит на пару пикселей выше, чем нужно, а текст в больших синих кнопках на пару пикселей ниже, чем нужно.

Так что, ребят. Решение, может, и есть, а вот проблема все еще не решена.

Самая сложная проблема в компьютер сайнс.

Читать полностью…

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

Как сейчас помню, в 2007-м сидел я в своем занюханом НИИ, писал сервлеты на Java Struts, пока в Америке Стив Джобс презентовал айфоны. Мы-то, конечно, ничего такого не знали, у нас даже мобильники не у всех были, а айпод так вообще один наверное на весь Академгородок.

И вот прибегает коллега, который эту презентацию посмотрел, и с восторгом рассказывает: представляешь, телефон, огромный экран, но главное, знаешь, сколько у него кнопок? Знаешь? ОДНА!

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

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

Но пост не об этом. Когда показали первый айфон, одна кнопка была одной кнопкой. Все честно.

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

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

Но еще больше досталось скроллу. Вот к чему надо бы отнестись более нежно. Надо бы! Но feature creep не отступал, постепенно появились скролл снизу (control center), скролл сверху (нотификации) и с середины экрана (самая жесть, с середины (!) экрана — поиск).

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

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

Ну и до кучи большинство приложений еще перегружают скролл сбоку (или назад, или панель слева).

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

Представьте, что на ПК ваша мышь касалась бы одной из сторон экрана и немедленно вылазила бы какая-нибудь системная хрень. Бред? Бред.

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

Читать полностью…

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

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

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

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

Четвертый и пятый уровни это что-то типа Principal engineer и гений. Люди, которые существенно изменили статус кво. Обычно они известны и так или иначе повлияли на индустрию, хотя (хотя!) речь в модели чисто об устройстве их личного мозга. Просто на практике так получается, что не бывает, чтобы ты был таким умным, но никто об этом не знает и ты ничего с этим не делаешь.

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

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

Вот в этом смысле используется слово эксперт в предыдущем посте. Замените на «гений», если так понятнее, или гроссмейстер, или Principal Engineer.

А про невозможность объяснить — ну вспомните, как коммуницирует Линус. Все понимает, сказать не может. То есть сказать, конечно, может, а вот знание при этом передать — нет.

Читать полностью…

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

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

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

Потому

Читать полностью…

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

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

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

Нет? Ну и не надо тут.

Читать полностью…

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

Попробовал вторую Зельду, и ух. Ох. Как же меня бесит их... интерфейс! Когда этим занимаешься 15 лет, трудно не замечать совершенно детских косяков.

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

Частный случай это появление текста. Мало того, что большая часть диалогов и NPC выполняют чисто декоративную роль, так еще и текст появляется медленнее, чем я читаю, а пропустить реплику можно только тогда, когда она полностью анимируется. Поубивав бы.

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

Но не все так плохо! В Нинтенде тоже заметили, что одна и та же анимация, проигранная в 100500 раз, бесит даже выросших на JRGP японцев, и выборочно добавили Press X to skip.

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

Или когда заходишь в храм. Ты подошел, нажал «войти», врубилась длинная анимация. Нажал Skip. Вроде хорошо? Но нет, после анимации ты все еще снаружи, и тебе нужно одтельно «войти» (полсекундое чисто механическое действие), после чего последует еще одна анимация, загрузки. Бред? Бред.

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

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

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

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

Но это нормальный! В Зельде же, когда подходишь к котелку, появляется интерфейс «сколько хотите поспать». Что? Да.

Пришлось гуглить. Что нужно сделать: зайти в инвентарь. Найти продукт. Нажать «Hold». Но это еще не все. Если нажать _на предмете_ Hold, он не попадет в руки. Вместо этого интерфейс переключится в «режим держания». Нужно нажать Hold еще раз, и тогда ты начнешь держать предмет.

После этого инвентарь надо закрыть кнопкой отмены. Эта кнопка не отменит «держание», что тоже, такое. Ну и вот уже тогда у котелка появится функция Cook. И анимация...

Лошадь. В большинстве игр лошадь вводится, чтобы помогать пересекать большие пространства. Для удобства, то есть.

Но не в Зельде. Тут, во-первых, лошади специальные и не едут куда скажешь. То есть в среднем едут, конечно, но с вариациями — может сама решить, что хочет забрать влево, и начать поворачивать. Короче, лошадей здесь надо уговаривать. В итоге если это и напоминает вождение, то пьяное. Зато аТмОсФеРа.

Во-вторых, лошадь тут постоянно проебывается. Уехал куда-то? Слез и пошел что-то там проходить? Потом пердоль назад за лошадью пешком. Хочешь использовать fast travel? А лошадь не хочет.

Нет, свисток, конечно, не работает. Он должен подзыват лошадь, но это было бы слишком просто. Вместо этого она или не слышит, или далеко, или не может, блин, пройти.

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

Ну и бег. Любая игра, в которой бег ограничен каким-то ресурсом без всякой на то причины, просто ебет вам мозги. Без исключений.

Зельда ебет. И не в хорошем смысле.

Читать полностью…

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

Как вы знаете (или не знаете), я потихоньку пилю свой UI-framework для десктопов. Ну а поскольку он ни в каком месте не нативный, меня остро волнует тема хуевости не-нативных приложний.

Возьмем, например, Телеграм. Так получилось, что под маком у него есть два разных клиента: кросс-платформенный QT-шный (здесь и далее Telegram Desktop) и mac-only «нативный» на Swift и AppKit (здесь и далее Telegram Swift). Консенсус более-менее такой, что нативный по-приятнее, а qt-шный какой-то кондовый.

Натив победил? Но за счет чего? Это мне очень хотелось понять.

Начнем с того, что откроем Telegram Swift. Сколько нативных компонентов мы видим? А нисколько! Даже если порыться в настройках, в лучшем случае мы обнаружим, что:

- Тогглы и слайдеры выглядят похоже, но взаимодействия попроще нативных
- Кнопки, таббар и drill-down навигация прямиком из iOS (на маке!)
- Табы вообще ни на что не похожи
- Выпадающее меню полностью кастомное

То есть это маковское приложение, которое пытается прикидываться телефонным, но реализует компоненты все равно само.

Получается, что нативный лук-энд-фил тут ни при чем? И оно могло бы быть написано на любом, в общем-то, фреймворке?

Получается.

Но тогда в чем же дело?

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

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

Дело в том, что QT-ный клиент просто некрасивый.

Ну да. Все просто. Фреймворк ни при чем. И нативность ни при чем (в конце концов, в маковском хоть один нативный компонент надо еще поискать).

Просто команда Telegram Desktop выбрала неправильный ориентир. Они смотрели на Андроид, а Андроид это такой себе ориентир. У материальных дизайнеров вкус слабоват. Например:

- баблы более уродливые (в Telegram Swift они спижжены из iMessage, а там их рисовали дизайнеры Эпла),
- типографика часто мимо (например, время сообщения крупнее самого текста сообщения),
- фон нельзя белый поставить,
- менюшки и иконки в эстетике Андроида,
- скругления маловаты,
- иконки жирнее чем надо,
- очень страшные тогглы,
- текст жирным КАПСЛОКОМ,
- ховеры и смена курсора на кнопках.

То есть Telegram Swift ощущается приятнее не потому что он нативный, а потому что он просто графически лучше нарисован. Вот и вся магия. А реализован он мог быть на чем угодно, хоть на Tcl/Tk.

Посмотрел я на это все и успокоился. Кастомные UI-фреймворки в порядке. Сделать хорошо можно.

Нужно только выбирать правильные ориентиры.

Читать полностью…

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

Играли мы как-то в ICFPC. Я тогда еще в Джетбрейнсе работал. В команде у нас был Дима Жемеров (ну вы знаете Диму).

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

Мне потом еще столько же времени понадобилось, чтобы на Кложе догнать (Дима не стал дальше играть, пришлось пивотиться, но мы были готовы).

Это я все к чему? Если вам нужен кумир, идеал, ориентир, к которому нужно стремиться — вот он. Простая линейная скорость хуярения кода. Если ты можешь писать код в два раза быстрее, то ты напишешь в два раза больше кода. Я вечером уйду домой с половиной прототипа, а Дима — с целым. Simple as that.

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

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

Так-то я бы тоже хотел очень быстро писать, но получается, как видите, средне. Потренироваться как-то может быть? Что можно придумать?

В общем, зависть.

Читать полностью…

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

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

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

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

Есть люди, которые программирование не любят. Ну, знаете, по ошибке сюда попали, или из-за денег. Они считают, что развиваться не нужно, разбираться не нужно, а уметь кодить — стыдно. И знаете что? Это тоже нормально. Но лично я — люблю, обожаю, болею.

Вот я ругал раздутость джаваскрипта. Все скажут — хейтер. А я ругаю, потому что люблю. И потому что для меня это задача, которая по-настоящему занимает мозг, которая захватила внимание и не отпускает: а можно ли лучше? Можно ли Слак уместить в 1 Мб Джаваскрипта вместо 50? Можно ли сделать лендинг Next.js не в 200 тыщ строк кода, а в 200?

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

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

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

Ладно, пойду попрогаю.

Читать полностью…

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

Тут гуляла недавно статья «So You Want to Ship a Command-Line Tool for macOS», смешная.

Чел там удивлялся, насколько плохо у Эпла сдеалана нотаризация (восемь (!) видов сертификатов, несколько разных тулз, дебильные флаги (`codesign -d -vvv --entitlements :- mytool.app` — как вам смайлик?), нет репортинга ошибок, нет баг-трекера) и что единственный лучик света в этом всем — опен-сорсная тулза rcodesign, которая хороша только потому, что ее писали не в Эпл.

Вывод в статье такой:

> Do not attempt to “create software” for macOS. They don’t want you to.

Коллега и соучастник по Грампи сайту Dmitrii Dimandt недавно бугуртил в твиттере, что Гугловая тулза для анализа производительности сайтов Lighthouse репортит гугловые же ембеды Ютуба (жалуется сама на себя, получается) и в качестве решениея предлагает опен-сорсные альтернативы. Потому что Гугл уже не может ни одной проблемы сам решить.

Ну и как бы да. И это даже не новость. В 1981-м году директор Диснея (да, того самого, с Микки Маусом) Майкл Айзнер разослал памятку сотрудникам, в которой говорилось:

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

И как бы это печально ни было, это, конечно, правда. Эпл не ставит себе задачей сделать удобное устройство. Или качественное. Они просто хотят забрать у вас деньги, в идеале ничего тебе не отдав взамен. И Гугл. И Амазон. И Мета.

Вот и получается такая позиционная война. Как долго можно мучать и доить пользователей, делая как можно меньше, прежде чем они начнут уходить.

Корпорации — не твой бро.

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

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

Читать полностью…

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

Пока тут ничего не выходит, сходите почитайте канал «Local-first и децентрализация». Он интересный

> Требую искоренения коррупции или моего участия в ней!

И смешной

Читать полностью…

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

Есть особо любимый мной вид багов. Рецепт такой: берешь очень простой экран, например логин. Два поля и кнопка, да? Не таков наш UX-дизайнер.

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

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

Собстрвенно баг. Одно-единственное поле ввода (ну, еще кнопка). Абсолютно пустой экран. И где фокус? Правильно, в ... (гусары, молчать!) Не в поле ввода, в общем.

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

Казалось бы — ну одно поле — один экран — ну поставь фокус. Ну очевидно же. Не надо быть экспертом в UI. Не надо принимать сложных решений. Не надо знать (или не знать) о каких-то трендах.

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

Только что видел и обратный пример. Ресетнул айпад, запустился мастер первой настройки. Он говорит: введи пин-код. И показывает клавиатуру. Ура! Ура? Нет, потому что клавиатура, как водится, заняла пол-экрана, и ты даже не видишь, что у тебя просят и что ты вводишь (и куда).

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

Вот так и имеем то, что имеем.

Читать полностью…

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

Поговорим о важном. Как правильно ембеддить код в ваш сайт/приложение/налоговую декларацию.

Код это что такое? Это просто кусочек текста. Поставил ему моноширинный шрифт и норм, уже код. Ну, можете подложку серенькую сделать, если очень хочется. Но это максимум. Уже понятно, что это код, все, достаточно, остановитесь.

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

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

А еще сверху плашка «copy» маленькими буквами и иконка копирования в противоположном углу почему-то. Как будто копирование кода это самая супер-важная операция, и все как увидят пост с кодом сразу побегут именно код копировать и пересылать друг другу. Или в проекты свои вставлять. Текст почему-то не помогают скопировать, а вот для кода целых две кнопки выделили. Ребята, если код для программистов, у них Ctrl+C в подкорке, не нужно им помогать. Да и вообще помогать с копированием не нужно, ну что за детский сад.

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

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

Долгое время на Медиуме не было способа вставить код (платформа для паблишинга, прости господи, сколько понтов было и как некрасиво они скурвились). Потом они почесали репу, посмотрели на весь этот код картинками, и добавили ембед через гитхаб. То есть натурально, чтобы вставить три долбаных строчки, они тащат целый блин сторонний сайт! Ну и естественно, каждый микроскопический function puk() { srenk(); } обложена со всех сторон брендингом Гихаба: «это мы вставили, мы, алло, как слышно, Гитхаб, код — это Гитхаб, даже не думайте без нас кодить начинать». Мы и не думаем, Гитхабчик, мы и не думаем.

В общем, код в статье — это просто параграф, набранный моноширинным шрифтом. Не надо его никак больше оформлять.

Спасибо.

Читать полностью…

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

Ох как меня бесят люди, использующие слово «крайний» вместо «последний». Типа, если сказать «последний», то завтра умрешь, не меньше.

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

Ну и слово само неприятное.

(да, теперь это лингвистический канал)

Читать полностью…

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

В 2007-м Imran Ghory написал статью, как он просил кандидатов на должность программиста запрограммировать следующее:


Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.


И к своему удивлению обнаружил, что большинство (!) CS-студентов не могут ее решить. Он также обнаружил, что некоторым «так называемым синьорам» требуется больше 10-15 минут.

Статью популяризовал Jeff Atwood, тоже в 2007-м, когда написал, что, к его собственному удивлению, этот тест действительно кого-то отсеивает.

Что изменилось? На дворе 2024-й. Влад Козуля выкладывает собственную задачу для собеседований:


Написать метод, который принимает список транзакций и баланс пользователя

type Transaction = {
id: number;
orderId: number;
amount: number;
txType: 'Bet' | 'Win';


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

Транзакции обрабатываются от меньшего id к большему.

Bet уменьшает баланс на сумму в amount, Win увеличивает.

Если баланс ушел в минус, транзакция считается невалидной.

Если транзакция не валидна, последующие транзакции с тем же orderId тоже считаются невалидными.

Если id транзакции повторяется, такая транзакция тоже не валидна, но остальные с тем же orderId должны быть обработаны.


Если хотите попробовать решить сами — не читайте дальше, я подожду. Скидывайте решение и время, будет интересно померяться.

Задача не сильно сложнее ФиззБазза. Это задача на лайвкодинг, но даже не на алгоритм. Все, что требуется — написать цикл. Я написал решение за 6 минут, пока переписывался с другом. И то, главный ограничивающий фактор, я бы сказал — скорость набора текста, особенно на ноуте с унитаза (я знаю, вы за этими подробностями ведь пришли).

Что же произошло? Зачем я вам все это рассказываю?

А произошло следующее: Фил Ранжин (ну вы знаете Фила) вдруг ни с того ни с сего взорвался. Цитирую:

> Честно я ни за что не стал бы решать такую на собесе

> Я однозначно достаточно квалифицирован для таких задач

> Что мне предлагается? [...] "помогающие" вопросы с той стороны? Для тривиальной задачи, которую в общем даже джуну не решить унизительно?

> лайвкодинг зло, алгосы зло, "рабочие" задачи тоже зло, эта конкретная тоже зло

И вот что мне не нравится. К квалификации Фила никаких вопросов: все мы разные, скиллы у нас разные, каждый что-то умеет и что-то не умеет, и наверняка есть миллион профессий, в которых то, что умеет Фил, придется кстати.

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

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

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

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

Это.

Ебаный.

ФиззБазз.

Один цикл. Три-четыре ифа. Я даже не знаю, куда проще.

Мне кажется, идея, что если тебя берут на работу, то у тебя должна быть квалификация для нее — ну, здоровой, хорошей идеей, и ничуть не стыдной.

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

Хотите к нам в программирование? Входной порог небольшой, но он есть. Приложите чутка усилий — и мы вам рады!

Читать полностью…

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

У Эпла вышел шлем (ну как шлем? Очки, скорее) виртуально-дополненной реальности «Яблоко Зрение Профессионал», а у Никитонского пост об нем. Пост:

В целом все получилось ровно так, как я и ожидал. Всю современную культуру Эпла засунули в новое окружение. То есть: максимальная анальная огороженность, отсуствие игр, попапы «что нового» и «как хотите смотреть на рекламу», DRM-ы во все дыры, в общем, не продохнуть. Ничто не греет мое сердце так же сильно, как очередная картинка идиотского куки-попапа или модального диалога новомодной виртуальной реальности. Да, компьютеры все еще говно, и никто менять это не собирается.

Все это громко называется «пространственные вычисления», противный маркетингово-приторный термин, на деле означающий, что те же самые двумерные окна теперь висят в 3Д-пространстве. В чем здесь «пространственность» непонятно.

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

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

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

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

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

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

Ну и сорян, я никогда не поверю, что мыльная, фильтрованная 3D-текстура рабочего стола может хотя бы теоретически сравняться с настоящим 4K экраном. Вот не верю и все. Не может быть. Тут на маке-то включаешь дробное масштабирование и сразу тошнить начинает, а там оно еще хуже в пиксели попадает.

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

Таймеры на кухне это какой-то coping. Решение в поисках проблемы. Хотелось бы чтобы айти-гиганты уже перестали помогать улучшать нам процесс приготовления еды, в ним все в порядке уже много веков, если не тысячелетий.

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

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

Читать полностью…

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

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

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

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

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

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

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

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

И не надо писать, что мне никто не мешает. Я знаю. Перфекционизм мешает. И корпорации, которые очень не любят делиться АПИ. Так что дайте порефлексировать. И помечтать.

Читать полностью…

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

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

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

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

Советы для новичков часто пугают опытных, но это не значит, что они плохие. Они ровно такие, какие и нужны на данном этапе. Покрой код 100% тестами. Что? Бред! — Скажет опытный программист. А новичок скажет: понял, сейчас попробую. Он видит цифру, видит цель, и понимает как может двигаться дальше. Скорее всего он никуда не придет, но это и не нужно. Важно набраться опыта, любого, и чем быстрее, тем лучше.

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

Опытный скажет: одного правильного ответа нет. Вы наверное видели мем, где сеньора-программиста спрашивают «скажи фразу», он вздыхает и выдает: «it depends». Вот это оно. И оно так и есть. Но это не помогает начать.

Кстати, по стримам Дяди Боба видно, что если следовать только его советам, то код или хоть что-то работающее получаться в итоге не будет. Это тоже нормально. Главное этот этап проскочить и сделать правильный вывод. «Постарайся проиграть свои первые 50 игр в Го как можно быстрее» (это не про язык Го, а про игру Го). А не «играй как новичок до седых волос».

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

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

Сравните с условной Джавой (Котлином, Растом, С++), где все за тебя придумано, упаковано, подписано, миллион правил, везде держат за ручку, помогают, синтаксис есть. Гораздо легче начать, потому что гораздо меньше свободы. Эти языки учать тебя думать на себе.

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

Еще одно интересное следствие. Эксперты не умеют коммуницировать. У них все ситуации и весь опыт сливается в подкорке в одну большую шаль (паутину, если угодно), и они все делают правильно и получается у них хорошо, но когда их спрашивают: а почему? Почему вот тут так сделал, почему вот тут так нарисовал, почему так назвал, и т.д., они просто разводят руками. Потому что так показалось правильно.

Еще раз: они не «не хотят» объяснять, они именно что не могут. Даже если бы и хотели. Так что менторы из них так себе. Опыт для обучения нужен, главное чтобы его было не слишком много.

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

Главное, что это временно.

Читать полностью…

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

Компьютеры такие непредсказуемые.

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

Например, Share menu в iOS показывает сколько-то «быстрых» контактов. Как они туда попадают? Да хрен его знает. Часто свою жену я найти вообще не могу, зато есть какие-то люди, с которыми я может перебросился парой слов десять лет назад.

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

Или сейчас внешняя клавиатура, иногда она работает после сна, и иногда нет! Почему? Потому.

Ну про блютус, я думаю, не надо? Устройства то работают-работают, то перестают, или забываются. А ты ничего не менял! Буквально на днях блютус-клава к писюку, которая обычно работает, решила один раз из ста для разнообразия не включиться.

Про куки и разлогины на сайтах, я думаю, уже давно никому не смешно?

Или кнопка назад в условном Твиттере. Иногда, действительно, возвращает на то же место в ленте. А иногда нет, и листай снова.

1Password на Айфоне иногда разрешает войти по Face ID, а иногда нет. И это явно не с таймаутом связано, потому что бывает введешь пароль, зайдешь, попробуешь один, не подошел, заходишь сразу за вторым, а там опять пароль вводи!

Или Amazon Alexa, была у меня когда-то, когда я еще умным домом баловался. Говоришь ей: включи Радиохед. А она включает что угодно, но не Радиохед! Хотя не, это другое, эта хуйня не работала стабильно как раз.

А, во, на Ютуб заходишь, и там в углу попапчик такой, продолжи смотреть видео, типа. Он вообще меня бесит неимоверно (когда ты суешь свой контент поверх своего же контента, ты явно где-то по жизни проебался), но иногда я действительно захожу что-то досмотреть. И что вы думаете? Когда он нужен, его нет. Зато когда ненужен, то есть.

Еще как-то фотки из iPhotos скидывал, все в один день одним телефоном сняты. Часть экспортнулась как HEIC, а часть как JPEG. Ну вот как можно было так напрограммировать?

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

Это говно даже в язык прокралось. Знаете эти «Возможно, произошла ошибка». Что значит возможно? Ты компьютер или кто? Соберись, сопли вытри, посмотри там у себя и скажи: произошла или не произошла. «Возможно, понадобится залогиниться». Так понадобится или нет? Это ты же и просишь. КАК ТЫ МОЖЕШЬ ЭТОГО НЕ ЗНАТЬ??? «Some results may not be displayed». Ага, если бы был какой-то способ это узнать, да?

(UPD: The disk wasn't ejected because one or more programs may be using it.)

В общем, удивительно, как можно начать с «абсолютно предсказуемая машина со строгой логикой, педантично следующая указаниям» и закончить на «some results may have been filtered» и наушниках, которые работают через раз.

Хорошо что скоро AI.

Читать полностью…

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

А ну вот кстати, про Enshittification. Вот допустим условный Evernote или там Dropbox скурвился на инвесторских деньгах и перешел от фазы «нам надо впарить это юзерам, поэтому делаем хорошо» к фазе «пора стричь юзеров и выводить бабки».

Понятно, что нормальные люди с этого слезут. А на что? Почему бы не нарисоваться стартапу «Дропбокс как вначале» или «Евернот как вначале». Схема проверенная, люди должны пойти, конкурентов по удобству нет.

Почему так не делают? Или делают?

Читать полностью…

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

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

The Fall – Скалли ловит маньяка. В каждой серии пара сцен, от которых кровь стынет в жилах. Условно, какая-нибудь сцена, где чувака принимают в больничку, понапряженнее многих триллеров.

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

Bored to Death — пара распиздяев занимается непоянтно чем и еще слегка пытается какие-то дела распутывать. Просто очень смешно.

Patriot — красиво-смешно про грустненького шпиона, но очень много находок.

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

Get Shorty — мелкие лос-анжелеские бандиты решают пойти в кинобизнес, мило, карикатурно, но при этом офигенно снято! Уровнем условно как Barry, только тема может чуть менее мейнстримная, ну или может повезло меньше.

Mr Inbetween — добрый сериал про австралийского киллера/отца, сердце в правильном месте, шикарнейшая фактура, находки, обаяние ГГ.

The Thick of It — старый-добрый (почти) документальный сериал про британскую политику, в котором хуесосят со скоростью 140 слов в минуту.

Veep — то же самое, но про Америку и без Малькольма. Что теперь, отказываться что ли?

Colin from Accounts — хороший романтический сериал, такое бывает вообще?

How To with John Wilson — смешные зарисовки о жизни американцев, обезоруживают своей фактурой.

Mrs Davis — довольно безумный абсурд с великой Бетти Гилпин и очень кайфовым моментом, когда все загадки таки довольно интересно складываются.

Studio 60 on the Sunset Strip — У Соркина можно в принципе все смотреть, ну вот этот тоже. Про задворки условного «Saturday Night Live», шуток особо нет, драма есть, диалоги бомбические.

Poker Face — небольшая детективная анталогия с парой смешных райан-джонсовских твистов в каждой серии, три серии он даже поставил.

The Trip — два актера играют самих себя, едут в тур по мишленовским ресторанам Англии (потом Италии, Испании, Греции), жрут и кривляются. Довольно сложно объяснить, но выглядит очень обаятельно.

Primal — что случается, когда создатель мультика _действительно_ умеет рисовать.

Из короткого (мини-сериалы):

Midnight Mass — по мне так самый лучший Фланаган, потому что разрешил себе быть немножечко смешным (но в целом ужастик, крепкая интрига, все как обычно).

The Take — молодой Том Харди играет британского гопника и объясняет, за что его очень скоро полюбит весь мир.

Horace and Pete's — Луи Си Кей упражняется в минимализме и нон-конформизме, но он хороший драматург, так что.

The Staircase — взрослый сериал про убийство/разлады в большой семье средне-верхнего класса, каких в принципе много, но этот сделан прям глубоко и серьезно, по-большому.

Giri / Haji — детектив из Японии приезжает в Лондон искать брата-якудзу. Тут сложно объяснить в чем кайф: много находок, необычно снято, и серьезно, и смешно, и в ноты попадает легко.

The Little Drummer Girl — Парк Чак-вук снял сериал! По роману Ле Карре! Я даже не представляю, какие тут еще могут быть варианты, кроме как смотреть. Ну и ждем The Sympathiser в этом году.

Irma Vep – Оливье Ассаяс снял сериал! Какие тут еще могут быть варианты, кроме как смотреть?

Unbelievable — вы не поверите :) Две детектившы расследуют изнасилование девочки, у всех великие актерские работы.

The Romanoffs — мини-сериал от создателя Mad Men с очень странной идеей (8 разных историй о якобы потомках царской семьи) и смешными твистами в каждой серии.

Wolf Hall — Марк Райланс, Клэр Фой, ну и рыжий из Homeland-а.

Generation Kill — Дэвид Саймон сделал сериал! (Хотя ладно, он только сериалы и делает) Но в целом кайфец, Прослушка только про войну в Ираке.

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

Читать полностью…

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

Вчера открыли исходники редакторая Zed, а я даже не знал, что мы его ждем. Приятно видеть, что люди устали от VSCode, но ребят, Sublime Text всегда тут был, вы чего?

Одновременно с анонсом они опубликовали пост, как переписывали свой GUI-фреймворк с модели а-ля Flutter на модель Flexbox. Я, понятно, тоже вдохновлялся Флаттером, у меня похожая модель и меня все устраивает.

(здесь и далее «Флаттером» мы называем модель, когда сверху спускают «констрейнты», или сколько есть места, а снизу вверх ты отдаешь размер, сколько по факту займешь. НЕ буквально Флаттер. Вроде в Swift UI такая же как минимум)

С моей точки зрения, переход от Флаттер-модели к Флексбоксу это регресс.

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

Знаете в винде во многих диалогах внизу было три кнопки: «Ок», «Отмена», «Применить». Вот как сделать, чтобы они были одинаковой ширины по ширине самой широкой? На Флексбоксе? А на Флаттере тривиально.

Во-вторых, у меня есть проблема с уровнем абстрактности Флексбокса. Когда я верстаю страницу, я не думаю в терминах «начало контейнера по основной оси», «конец контейнера по перпендикулярной оси», ну просто чтооООО... Понятно, что это сделано, чтобы при переходе от десктопа к мобилке твои горизонтальные блоки переставились вертикально и тебе надо было для этого всего одно свойство поменять, но блин, ребят, вы не там оптимизируете.

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

(тут мне сейчас напишут что это на самом деле для Bidi, чтобы кнопки шли справа налево в арабских странах, но опять же, мыслить в терминах «слева-справа» проще и нам и арабам, потому что это термины, ну, абсолютные, культурно-независимые, а точить интерфейс под RTL все равно придется отдельно, это в любом случае не одно свойство поменять)

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

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

В-четвертых, имена. Align/justify, items/content — камон, это полные синонимы, почему они делают разное и, главное, как мне это запомнить?

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

Кстати, интересно, сохранили ли они фишечку, что если вертикальные паддинги/маржины считаются в процентах от ширины, а не от высоты?

В-шестых, неортогональность. Понятно что им надо было строить на всем, что уже накопилось в CSS к тому моменту, но если делаешь новый фреймворк, наверное, этого можно избежать? Например, размер элемента может указываться через flex-basis, а может через width. Зачем? А уж когда min/max-width вступают в игру...

В-седьмых, flex-grow и flex-shrink вообще кто-то осмысленно использует? Я что-то придумать не могу, зачем они нужны.

В общем, конечно я инвестирован в успех кастомных фреймворков. Но я уходил из веба не для того, чтобы вы в мои кастомные фреймворки тащили веб обратно!

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

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

И чего?

Читать полностью…
Subscribe to a channel