Стой под стрелой
11.5K subscribers
1 photo
17 links
Ведет @nikitonsky. Рекламы нет
Download Telegram
Когда-то я работал в Instant DB, это такая база данных aaS (as a service), доступная напрямую из JS. Как Firebase. Прям из веб-странички создаешь таблички, пишешь транзакции, запросы, а она гоняет по вебсокету к нам и все отдает. Ничего хостить не нужно, можно целые продукты поднимать без сервера (ну, разве что свой js-файл).

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


"projects.view": "auth.id in data.members.id"


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

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

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

В общем, меня эта сложность очень заинтересовала. Значит, что-то не на своем месте. Но что?

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

Прикол — я всю дорогу был за то, чтобы устранить сервер совсем, и оставить только JS и базу (потому что нафига сервер, в чем символический смысл перевода джейсона в эскюэль, у тебя и так на обоих концах компьютеры, что они, сами не договорятся что ли?) — как выяснилось, что сервер нужен, чтобы сложные пермишны не надо было писать. Сюрприз, откуда не ждали. (Я все еще верю, что это может делать база — нужен не сервер, а truster environment для юзер кода).

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

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

Короче, вот. База как сервис идея отличная, но над правами надо чутка подумать.
76🤔42👍28🤡6🎅4🔥2😁2👨‍💻2👎1🍾1🎄1
Узнал вчера, что на Линуксе, если поставить программу из Flatpak (the future of application distribution, между прочим!), у нее не будет доступа к видеокарте. Скачал игру — она или не запустится, или будет в 5 fps идти.

И правильно, я считаю! Не для ваших вшивых игр пользователь себе компьютер такой красивый собирал. Не для программ такую видеокарту красивую ставил. Вот еще — железом пользоваться! Давайте его в целлофановый пакетик завернем, и пусть не трогают, для гостей целее будет. На новый год, может, елку тридешную нарисуем, и только. Программ много, а видеокарта одна. Если каждая программа будет графику крутить, надолго ли ее хватит? И вообще не надо программы из интернета качать, вы Линукс зачем ставили? Код ядра вам зачем открывали? Свои программы напишите. Целее будете.
😁177👍84🤡28💯19🎄8🤓6👎4🎅3🌚21🤯1
Обновляю графический драйвер Нвидии. Уже минут пять окошко в состоянии Preparing for install и с неопределенным прогресс баром. Такой, который крутится по кругу и никуда не идет.

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

Ошибка установки — 0xc1900223
😁314🤣86❤‍🔥31👍109😭9🥰4💯3🤡1🐳1🎅1
Давайте расставим уже точки над ё. Беззнаковые числа это псайоп и ни для чего не нужны. Замените все беззнаковые на знаковые и ваша программа станет лучше, проще, надежнее.

Рассмотрим классический случай — индекс в массиве. for i = 0; i < array.length; ++i. Ну очевидно что i здесь принимает только неотрицательные значения, а значит должна быть типа unsigned int. Это быстрое, поверхностное суждение. Неприятный факт, на который сагрятся сторонники unsigned типов, состоит в том, что signed int здесь сработал бы так же хорошо.

В чем вообще идея? Типа, если мы пометим часть чисел unsigned, мы типа дадим системе типов чуть больше информации, и она потенциально поймает нам чуть больше багов. Но давайте подумаем, каких багов? Скажем, допустим, в ходе каких-то вычислений у нас получится отрицательный индекс для доступа к массиву. Во-первых, поймать его легче в момент доступа (arr[-1] это явно ошибка, arr[4294967295] может и нет). Во-вторых, _если_ у вас ошибка в вычислении индекса, то скажем получить 7 вместо 5 или _так же опасно_, как и получить отрицательный индекс. Типа, алло, это катастрофа, что-то уже кардинально пошло не так, но вы хотите ловить только те случаи, когда случайно это «не так» вышло за границы нуля? Почему? В чем идея? Это как искать ключи под фонарем, потому что там светлее.

А downside беззнаковых чисел в том, что у вас появляется целый другой тип, и надо в него-из него конвертировать постоянно. Я как-то писал программу на Расте, и половину программы гонял i32 в u32 и обратно. Это глупо, это бессмысленно, это рассадник багов — любая конверсия это потенциально место, где что-то может пойти не так. Таких мест надо делать как можно меньше, а не как можно больше.

Не верите мне? В Джаве уже 30 лет назад сообразили, что беззнаковые числа не нужны. В Гугловом style guide призывают их избегать. Страуструп считал их ошибкой. Делить числа на знаковые и беззнаковые — как принимать арбидол при простуде. Кажется, что что-то сделал, а на деле и так выздоровел бы с той же скоростью.
👍128🤡4620💯14👎9🦄7💊5😁3🖕3👀2🎅2
В английском языке есть термин “needy person”, что примерно переводится как несамостоятельный плюс навязчивый. Типа, человек, который постоянно пристает с какими-то вопросами и просьбами, которые вполне мог бы порешать сам, полностью перекладывает все решения на другого человека и не видит личных границ.

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

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

(Понятно, что если ты уступишь и создашь аккаунт, то до тебя все равно доебутся — или 2FA включи, или пароль поменяй, или почту проверь, или разлогинят тебя просто чтобы не расслаблялся)

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

Заметьте, что обновиться — не мое желание, не моя потребность. Если бы мне было нужно — баг там какой критический, нехватка функций — я бы пошел и сам нашел все нужные патчи и апдейты. Но мне НЕ НУЖНО. Если бы я не знал про новую версию, если бы меня не заебывали этими попапами, я бы сидел на старой и горя бы не знал. От того, что я обновлюсь, в моей жизни не изменится НИ. ЧЕ. ГО. Так и кому это нужно? Мне? Или программе?

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

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

Ведь нотификация это что такое? Это что-то, что я не просил, но с чем мне нужно разобраться. Это буквально проблема программы, с которой она пришла ко мне. У меня есть скриншот свежеустановленной какой-то Джетбрейновской ИДЕ. Я запускаю ее в первый и раз и тут же получаю в рожу ТРИ нотификации. Я еще ничего не сделал. Мне от тебя еще ничего не нужно. Но я уже тебе что-то должен. Как минимум, закрыть нотификации. Are you охуели там, как говорится? VS Code не лучше, кстати, и нотификации одна из основных причин, почему я сбежал.

На одном конце спектра условный ls: тоже программа, но никогда не попросит тебя создать аккаунт или обновиться. Это спокойный, уверенный в себе инструмент. Или, если нужен пример посложнее, Syncthing: программа для синка файлов между машинами, в которой нет аккаунтов, нотификаций, которой можно сразу начинать пользоваться, а про апдейт которой я недавно случайно узнал от друга. И не стал обновляться! (потому что зачем)

На другом — Гугл Хром. Опять же, заглядываю как-то в ноут жены, она там какую-то страничку открывает, а хром ей: проверь аккаунт! что-то не так (что, блядь, может быть не так, всю жизнь было так, с чего бы вдруг сейчас что-то пошло не так?), а еще обновись! И нотификацию в рожу. Жену я бесконечно уважаю, потому что она четко видит, где ее проблемы (нужно что-то посмотреть на сайте), а где проблемы программы (обновления, аккаунт). И абсолютно хладнокровно игнорирует вторые.

Ощущение от needy программ — я решаю не свои проблемы, а проблемы программы. Обнови ее, залогинь, нотификации закрой. Ну и нафига мне такой тамагочи?

Будь как ls. Не будь как Хром. Проблем у нас всех своих хватает.
328💯193👍57🔥14🏆5🎅4👏3🐳3🫡3😭1🤝1
А это какой-то новый тренд, говорить «говорит о том, что»? Типа, не «он сказал, что из компании уволили 100 человек» и не «он говорит об увольнениях», а именно «он сказал о том, что из компании уволили 100 человек».

Мне не нравится.
🥱116🤡32👍2813💊12💯11😁7😴7💩2👌1🎅1
Этим томным морозным утром передаю привет всем любителям языка Раст, из-за любви которых к unwrap вчера полдня лежал CloudFlare.

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

Не надо думать, что если вам программировать тяжелее (а на Расте очень тяжело программировать), то программы у вас будут получаться лучше. Это просто упражнение на самоистязание. Не больше.
😁306🤡84👍58💯41👎1311🔥11👏3🥱3🎅3👌1
Послушал Джонатана Блоу в Software Unscripted. Интересный пример человека, который не ушел из Твиттера: все еще очень умного, очень много делающего, но постоянно в голове борющегося с тупыми тейками. «Многие могли бы подумать, что <тупая фигня>», «Кто-нибудь бы сказал (о том), что <абсолютная дичь>».

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

Передайте, чтобы берег себя.
60🎅36👍19😁9🤔8🤡7🥰3🙏3💯2👎1
К сожалению, с повсеместным распространением ИИ, задача отбора кандидатов сильно усложнилась. Многие кандидаты используют ИИ, чтобы выполнить тестовое задание, поэтому задача нанимающего менеджера — обнаружить его использование и отсеять таких кандидатов.

Вашему вниманию предлагаются красные флаги в тестовом задании:

- Задача выполнена полностью и даже немного экстра
- Используются стандартные инструменты и шаблоны
- Код разбит на небольшие понятные функции
- Переменные названы понятно
- Сложные места прокомментированы
- Ошибочные ситуации обрабатываются и выводятся понятные сообщения
- Файловая структура организована логично
- Веб-интерфейс выглядит симпатично
- Есть тесты

Избегайте этих ошибок сами и распространите дальше!
😁651💯78❤‍🔥59🤡30👍14🔥108🤔4🫡4🎅3👾2
«Не нужно больше все время торчать на кухне! Вам поможет простой советский Убик. Это удобная в обращении, неприлипающая, идеально чистящая паста. Абсолютно безопасна, если пользоваться в соответствии с инструкцией».

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

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

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

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

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

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

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

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

Ну круто же? По-моему круто.

«У вас сухие, непокорные волосы? Вы не знаете, что делать? Поможет простой советский Убик! Уже через пять дней волосы окрепнут и залоснятся. Помните: если пользоваться аэрозолем Убик по инструкции, он совершенно безопасен».
68👍40🎅7👎4🤔4🎉3🤡2🔥1🙏1😐1
Мне тут напомнили про Свифт Юай и как в нем ничего нельзя сделать точно: например, он сам добавляет паддинги, сам решает какого они будут размера, и даже если указать паддинг именно 12, он все равно может сделать другие. А может и не сделать. Как так люди живут — не представляю.

Ну вот, а я подумал, что это симптоматично и началось, кажется, с веба.

Раньше пиксели были большие и за каждый с тебя могли спросить. В Windows 95 кнопки и текстовые поля всегда были высотой в 22 пикселя, заголовок окна 18, большие буквы 9, маленькие 6, рамка у окна 2. Короче, у всего был размер, все нормально складывалось и вычиталось, если ты поставил три текстовых поля по 22 с отступами 4, у тебя получалось 22 * 3 + 4 * 2 = 74 пикселя точно. Точно, понимаете? Не примерно, не плюс-минус, а точно. Как в аптеке.

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

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

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

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

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

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

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

А потом произошло самое страшное — такие интерфейсы стали нормой. Люди стали думать, что это не случайность и не недостаток веба, а что так и надо. И стали делать так же. Свифт Юай — один из примеров, где общую примитивность и хуевость веб-интерфейсов решили с большими усилиями зачем-то повторить. Зачем? Я не знаю.

Но самое печальное — люди, кажется, совсем поставили крест на идее, что у элементов есть размеры и что с ними можно работать. То же помешательство на иконочных шрифтах — мы больше не верим, что иконкам важен размер и что их можно рисовать под пиксельную сетку. Мы даже не верим больше, что их можно аккуратно поставить рядом с надписью (см. Hardest Problem in Computer Science: Centering Things). Просто кидаешь их куда-то и они встают как-то. Это смешно: простейшую задачу центрирования двух прямоугольников сначала сделали какой-то невозможно сложной, а потом просрали.

И нам с тобой, дорогой друг, в этом жить.
💯132😁68👍47😢3523❤‍🔥18🤡16🙈2😭1🎅1
Ребят, а кто знает, нафига в счетчиках электричества, которые ставят в квартиры, делают на одну цифру больше, а потом везде пишут, чтобы последнюю цифру не вводили? Чтобы что?
😁131🤔31🤡129👍7🐳5💯2🎅2
Мне давно не дает покоя вопрос: почему мы набираем код моноширинным шрифтом? Почему не пропорциональыми? Есть ли какая-то фундаментальная причина?

На этот вопрос есть два простых ответа, но оба меня не устраивают.

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

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


let foo = ( 1, -1);
let foobar = (-1, 1);


и тут моноширинность как нельзя кстати.

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

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

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

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

В пользу этой теории говорит вот какой анекдот. В редакторе iA Writer есть три шрифта — строго моноширинный, моноширинный с полуторными m/w, и моноширинный с полуторными m/w и 0.75 узкими i/j/l/1. Так вот, я заметил, что первыми двумя могу писать, а последним — не могу. Он уже слишком близко подобрался к пропорциональному шрифту, слишком аккуратно выглядит, что не хочется в наборе ковыряться.

Та же история с печатными машинками. Начинались как техническое ограничение, а потом оказалось, что поверх такого просторно набранного текста без украшательств и чиркать не жалко. Красоту надо в самом конце наводить, а пока работаешь, нельзя бояться руки испачкать.
💊195👍48🤡3829🤔18🤪13🥱8😁4🤨4❤‍🔥3🙈2
У меня в папке Downloads осталась последняя картинка до инбокса зеро, поэтому пора писать про нее пост.

Картинка такая: качан капусты в задумчивой позе и сообщение:

---

ВНЕШНЯЯ ССЫЛКА! ВНИМАНИЕ!! ВНИМАНИЕ!!!1111одинодинодин

Вы покидаете ЖЖ и следуете по ссылке (далее адрес ссылки)

Мы ни за что не отвечаем. Скорее всего, вас обманут, обворуют, изнасилуют, убьют, подпишут на новостную рассылку, снова изнасилуют и снова обманут. Или хуже.

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

Or else.

---

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

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

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

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

Кстати, интересно, если я переключаюсь на другую вкладку, я покидаю сайт? А если на другое приложение? А если выключаю телефон, не закрывая сайт? А если две вкладки открою? Где тогда я нахожуся?
😁129👍29💯22🤷‍♂1612🤡7🤔5🎃5👻3🤮1🎅1
Про дизайн хочу рассказать вот какую историю. Был у меня когда-то давно Lumia 1520 на Windows 8 Mobile. Вы, наверное, видели скриншоты — плитка, один акцентный цвет, по-настоящему плоский дизайн, крупная типографика, черный фон под олед экраны.

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

А потом он обновился то ли до 8.1, то ли до 10 Mobile, не помню точно. И произошло странное: формально все осталось как было: та же концепция, те же эффекты, но тут и там стало заметно, что он стал обычнее. Условно: раньше, когда нажимал на три точки, вываливалось попап-меню (черный прямоугольник с белыми буквами), и оно было безупречно: отступы, пропорции, положение текста, все было осмысленно и гармонично поставлено. А после обновления стало более случайно: это мог быть просто прямоугольник, с условно равными отступами со всех сторон, и он уже не производил такого эффекта. Формально то же самое, но по-проще, по-колхознее. Спокойнее, наверное, но уже не так впечатляло и не так intentional выглядело.

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

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

Вы скажете, что у айфона была такая же история с iOS 7, но не совсем: iOS 7 никогда особо органично или цельно не выглядел.
💯91👌4023👍15💩7🗿4🤷2🥰1🤔1🤝1🎅1
Прочитал отчет The Performance Inequality Gap. Пишут, что медианная мобильная (!) веб-страничка (2.6 MiB) теперь весит больше оригинального Doom (2.48 MiB). Прикинь, твой телефон парсит несколько мегабайт кода, чтобы ты смог посмотреть на три строчки текста и картинку. О — оптимизация.

Также пишут, что пользователи SPA в среднем совершают около 1 навигации. То есть все эти мегабайты джаваскрипта, которые ты качаешь заранее, потому что «лучше день потерять, потом за пять минут долететь», в итоге выливаются в один-два клика И ВСЕ.

Фронтендерам доброе утро: плохо работаете, ребят. Все еще недостаточно медленно, старайтесь, пожалуйста, получше.
😁237💯8729😭18🐳10🖕6👏2🤔2🤯1🤝1🎅1
Сходил на фотовыставку, и там одна серия, женщина ездила по Египту, напрашивалась к местным семьям в гости и фотографировала их очень бедные дома и быт. Потом напечатала из фотографий книгу, отвезла ее и попросила писать участников и сочувствующих, что они об этих фотографиях думают, прямо поверх фотографий. Комментарии тоже выставлены.

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

Ощущения, как в Твиттер вернулся.
😁95🔥8719🎅6🤩3
Почему-то считается, что дизайнеру или программисту круто бы думать об интересах бизнеса, что инженер, который о них думает, ценнее, чем тот, который не думает.

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

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

Я много раз разговаривал с инженерами, которые жаловались, что бизнес не дает им времени на рефакторинг или сделать нормально. Ну так он и не должен давать! Бизнес интересует бизнес, а вас, как инженера, должно интересовать, как сделать качественно, устойчиво, эффективно. К вам никто никогда снаружи с этим запросом не придет, это должна быть ваша собственная мотивация, ваши собственные ценности, ваши собственные стандарты, понимаете?

И к вам приходят, чтобы вы их продавливали. А бизнес бизнес и без вас сделает.
💯24249👍35🤡30🎅15👎13🔥11💊7😁2
Читаю Human Interface Guidlines из 1992-го, а там:

> If you include a More Choices button in a dialog box, it’s best to extend the bottom of the window to accommodate the additional information. You could move a side of the window without causing too much change in the perceived stability of the window. However, avoid expanding the window symmetrically in all directions, because this behavior destroys the user’s initial sense of the window being one object with some of it not visible.

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

Почему? Стабильность. Это важный принцип, который современные интерфейсы полностью проебали.

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

(Кстати, курсор и текст едут к левому краю с разной скоростью, что только дополнительно добавляет к ощущению расхлебанности интерфейса.)

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

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

Цвет: [Синий ▼]

И вот когда вы нажимаете на нее, вылазит окошко с вариантами, допустим

Красный
>> Синий <<
Зеленый

И слово >> Синий << в попапе должно полностью совпасть по координатам с тем, где оно стоит в интерфейсе под попапом. Чтобы был эффект, что оно не двигается.

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

Вот еще:

> To give users a conceptual sense of stability, the interface provides a clear, finite set of objects and a clear, finite set of actions to perform on those objects. Even when particular actions are unavailable, they are not eliminated from a display but are merely dimmed.

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

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

Я уж не говорю про условный iOS, там дрыгание туда-сюда, подпружинивание, скукоживание-раскукоживание и трансформации одного в другое вообще возведены, кажется, в принцип. Вроде бы на последнем айпаде даже светофор зумится туда-сюда при ховере. Хотя казалось бы!

Короче. Стабильность — твой бро. А ховер и анимации — не твой бро. Не шевелите, пожалуйста, интерфейс.

И верните мне мой 1992-й.
222👍72💯27🥱10🎅7❤‍🔥52🥰2👌2🤔1💔1
Решил повспоминать, что было лучше при переходе с Винды на Мак, а что хуже. По совокупности я все-таки выбираю Мак, но, как видите, не все шоколадно, есть как плюсы, так и минусы.

Плюсы макОС:
- Драг энд дроп настолько хороший, что превращается в основной инструмент
- Меню сверху: не захламляет окно, легче целиться
- Комманд удобнее нажимать чем контрол
- Квик лук (быстро глянуть любой файл, не открывая программу)
- Установка приложений копированием
- Черный курсор лучше видно, чем белый
- Светло-голубое выделение лучше инвертированного
- Cmd+Left/Right удобнее чем Home/End
- Отмена в полях ввода
- Светофор слева удобнее чем кнопки справа
- Эстетика (иконки, цвета, шрифты)
- Встроенная программа просмотра ПДФ
- Можно переносить открытый файл и программы его не потеряют

UPD:
- F-кнопки нигде не используются

Минусы:
- Энтер в Файндере переименовывает, а не открывает файл
- Delete не удаляет файл
- Посмотреть все фотки в папке сложно
- Ускорение мыши (Бирман говорит, стало лучше)
- Переключение окон: отдельно между приложениями, отдельно внутри приложения
- Приложение может быть открыто и не иметь окон
- Два способа свернуть окно
- В окне открытия/сохранения правая кнопка и перетаскивание работают по-другому
- Не работает ⌘X ⌘V на файлах
- fn up/down проматывают страницу, но не перемещают курсор

UPD:
- Развернуть окно проблематично
- Нет календарика по клику на часы
- .DS_Store
👍93🥴42🤡32💯2010🎅3😱2🦄2
Метафоры в компьютере би лайк:

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

Можно открыть окно. Да, на столе. Только через него ничего не будет видно.

По правой кнопке МЫШИ можно вызвать меню, из воздуха, как в ресторане.

Еще на столе стоит мусорная корзина и он обклеен обоями.

Что непонятно?
😁245🔥56👍14💯7🥱64🎅3🤡1🎄1