Шустрее, плавнее

Недавно открыл сообщения в ВК, и вылезла такая маркетинговая шляпа.

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

А если там и раньше всё было шустро (так и было), то зачем они мне всякой чушью мешают пользоваться своим же сервисом?

Теперь без пагинации

Я что-то посмотрел, и понял, что пагинация тут совершенно не к месту. И выбросил её к чертям.

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

Люблю упрощать.

Тэговые шаблоны в JS

В JS есть литерал шаблонной строки: «`». Большинство знает и любит его за многострочность и простую интерполяцию (передаю привет %s).

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

function formatPrice(strings, ...prices) {
  /* Функция принимает:
  - 1 аргумент — массив строк, разбитый интерполируемыми значениями;
  - ∞ аргументов — сами значения. Я использовал деструкцию. */

  const formatter = new Intl.NumberFormat('ru-RU', {
    style: 'currency',
    currency: 'RUB',
    minimumFractionDigits: 0
  })

  let result = ""

  // Ключевой момент: итерируем по интерполируемым значениям
  for (const [i, price] of prices.entries()) {
    result += strings[i] + formatter.format(price)
  }
  // В конце нужно добавить последний кусочек строки — их всегда на 1 больше, чем значений.
  result += strings.at(-1)

  return result
}

formatPrice`Стоит ${5000}, но я по-братски отдам за ${3000}` 
// -> "Стоит 5 000 ₽, но я по-братски отдам за 3 000 ₽"

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

А вот и нет. Злодей всё это время прятался у нас под носом. Любой, кто работал с библиотеками для SQL, знает такую боль:

db.query(
  "INSERT INTO users (name, bio, age) VALUES (?, ?, ?)",
  [ name, bio, age ]
)

Даже с именновенными выражениями код будет выглядеть бесчеловечно (опять привет, %s).

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

Так вот, используя тэговые шаблоны, мы можем выиграть эту битву:

db.query`
  INSERT INTO users (name, avatar, bio)
  VALUES ${name}, ${bio}, ${age}
`

Да, вот так просто. И инъекций нет.

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

И Я вложу слова Мои в уста твои

Как бесит, когда компании в своём говнософте делают такие маркетинговые кнопки:

Давайте начистоту: большинство ответит не «может, позже», а «идите в жопу и больше мне такое не предлагайте».

Типы — не документация

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

В этом примере и рассказывать-то даже особо нечего. Могу даже словами сказать: «метод принимает значение, функцию замены (которая знает ключ и значение каждого объекта) и ширину отступа». Всё. Получилось даже на 3 символа короче.

Но это ещё не так плохо. Клинический случай — библиотека Telegraf.js. Вот её подсказка к методу, отправляющему сообщение в Телеграме:

Спасибо, очень полезно. Сайт с документацией у них, кстати, такой же.

Ошибочка

Упс! Ну вы не расстраивайтесь, попробуйте ещё раз. Не работает? Что-ж, значит не судьба...

%D0%9D%D1%83%20%D0%B8%20%D0%BD%D1%83!

Оказывается, одна из принципиально нерешаемых задач computer science была решена ещё 7 лет назад. От нас гнусно скрывали сей желанный плод технического прогресса, но сегодня тайна будет раскрыта.

Рассказываю. Как выяснилось, в конфиге Фаерфокса ещё с 53 версии есть параметр browser.urlbar.decodeURLsOnCopy, который отвечает, как понятно, за раскодировку УРЛ-ов при копировании. По неизвестной (и наверняка идиотской) причине по умолчанию там стоит false. Поставьте true и радуйте всех знакомых приятными ссылками. Только трекинговые параметры убрать не забудьте :).

P.S. В андроидном Фаерфоксе этого параметра нет.

Машины, заткнитесь

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

Да, отключить уведомления.

Человеческий режим

Хотелось бы, чтобы в этих ваших линуксах был какой-то "человеческий режим". Где в шелле вместо passwd будет password, вместо cp — copy, вместо ls — list. И чтобы там вместо чудовищных lspci, lshw, lsns были list.pci, list.hardware, list.namespaces. И так далее. Автодополнение по табу, конечно, при этом обязательно.

Для полного кайфа ещё переименовать /usr в /user, /etc в /config, /dev в /devices, /lib в /libraries и дальше в таком же ключе.

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

Безопасность

«Камера не может использовать сеть» — всякий раз предупреждает меня служба безопасности. И предлагает разрешить камере доступ в интернет.

Бесполезная выдача

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

Как люди живут без блокировщиков рекламы?

Уведомления

Я ещё не залогинился, а у меня уже десять нотификаций?

Чрезмерная забота

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

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

Облачные модели приложений

Самая худшая черта редактора — облачная модель работы. Её используют, например, Figma и Tableau. По ней почему-то работают всякие сайты-редакторы блок-схем.

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

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

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

Трагедия в двух актах

ya.ru в 2022:

ya.ru в 2024:

Нажмите сюда

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

Ничего не происходит.

А как же — надо жать на саму надпись!

Боязнь apk

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

И сразу про аппсторы, не отходя от кассы.

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

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

Загадки

Плейсхолдер подсвечивается корректором. Как? Почему только первое слово?

За ответами я обратился в исходный код, но нашёл там ещё больше вопросов.

Сначала оказалось, что плейсхолдер это не плейсхолдер вовсе, а отдельный блок. Что мешало сделать стилизацию через ::placeholder и не городить такой костыль?

Потом оказалось, что такой костыль обусловлен тем, что нативный плейсхолдер и вставлять-то некуда: вместо ванильного инпута сообщение предлагается написать в диве с contenteditable="true". Что? Да. Зачем?...

А почему корректор подсвечивал слово, я так и не понял. Ладно если бы плейсхолдер был внутри "инпута", но нет, структура такая:

<!-- инпут -->
<div contenteditable="true" id="m_editable123" role="textbox">
    <br>
</div>

<!-- плейсхолдер -->
<div>
    <div>
        <label for="im_editable123">Напишите сообщение...</label>
    </div>
</div>

То есть они вообще не связаны кроме того, что label привязан по айди.

Сплошные загадки.

Дайте скопировать!

Если вы сделали кнопку "скопировать", не полагайтесь на неё. Люди всё ещё выделяют текст.

Слабое железо

Видимо, сегодня для записи экрана нужна как минимум RTX 4090 — это ведь очень тяжёлая задача.

Параграфы это сложно

Даже сложно представить, что там такого надо напрограммировать. Хотя скорее всего там просто в форме невнимательно поставили input вместо textarea, и бедные люди туда пишут как могут. А потом другие бедные люди эти читают.

[i][j]

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

function matrixElementsSum(matrix) {
  let x = 0;
  for (let i = 0; i < matrix.length; i++) {
    for (let j = 0; j < matrix[i].length; j++) {
      if (matrix[i][j] === 0 && i + 1 < matrix.length) {
        matrix[i + 1][j] = 0;
      }
      x += matrix[i][j];
    }
  }
  return x;
}

Это выглядит ужасно, но люди почему-то всё продолжают так писать. Зачем?...

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

Освобождение телефона

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

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

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

Гайд, естественно, рассчитан только на телефоны, работающие под Андроидом (пользователей айфонов прошу немедленно покинуть сайт). В конце получится полноценный телефон, из которого выпилен весь спонсорский софт, телеметрия и прочий шлак. Ускорение в несколько раз гарантировано.

Переустановка системы

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

После сброса к заводским вас встретит загрузочный экран, который может попросить вход в гугл/сяоми/самсунг аккаунт. Поскольку мы хотим чистый телефон, всё это нам ни к чему. К сожалению, единого способа обхода нет, так что придётся искать в сети. Пример запроса: "<модель телефона> обход блокировки" или "<модель телефона> bypass FRP".

Если сбрасывать не вариант

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

Ставим adb

Для следующих шагов понадобится скачать Android Debug Bridge на компьютер. Эта программка позволит управлять системой на телефоне более полноценно (через командный интерфейс), без заложенных разработчиками оболочки ограничений. Например, на всяких встроенных приложениях кнопка удаления обычно заблокирована, но с помощью adb мы сможем легко удалить любой пакет.

Когда архив скачается, распакуйте его где-нибудь. Запускать пока ничего не надо.

Включаем отладку по USB

Чтобы использовать adb, необходимо получить доступ к разделу настроек "Для разработчиков", но по умолчанию доступ туда закрыт. Открыть его легко, но способ зависит от оболочки. Например, в MIUI надо зайти в "О телефоне" и потыкать много раз на пункт "Версия MIUI". Способы для других телефонов можно поискать в сети по запросу "<модель телефона> настройки для разработчиков".

После получения доступа к настройкам для разработчиков перейдите туда. Обычно они находятся в расширенных настройках. Перейдя в раздел, найдите пункт "Отладка по USB". Включите её.

Подключаемся к телефону

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

Далее откройте терминал в той папке, куда вы распаковали архив с adb (где лежит файл adb.exe). Введите команду:

adb devices

Это выведет список подключённых к adb устройств. Вы должны увидеть такой вывод:

List of devices attached
d0b1e531        device

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

Если вывод был другой

Если вы видите это просто надпись List of devices attached без списка, это значит, что отладка по USB не включена.

Если вывод такой (вместо device написано unauthorized):

List of devices attached
d0b1e531        unauthorized

это значит, что устройство не авторизовано, то есть компьютеру не разрешена отладка по USB.

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

Первичная установка приложений

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

Скачайте Droidify — каталог свободных приложений с открытым исходным кодом. Если с Droidify есть какие-то проблемы, поставьте F-Droid. Это то же самое. Приложения в этих каталогах одни и те же, различие только во внешнем виде. Скажу так: Droidify это и есть F-Droid, только с другим интерфейсом.

Также вы удалите клавиатуру от гугла, поэтому скачайте в установленном только что магазине приложения "AnySoftKeyboard" (клавиатура) и "Russian for AnySoftKeyboard" (русский язык для неё).

Удаление пакетов

Подключившись к телефону, введите в терминале:

adb shell

Это запустит командную оболочку adb. Теперь вы можете приступать к удалению пакетов.

Предупреждение: сейчас будет опасно. Если вы не хотите сделать из телефона кирпич, не отступайте от инструкций.

С пакетом (пакет это приложение) можно обойтись по-разному. Можно полностью удалить его:

pm uninstall --user 0 имя.пакета

Или, если вы по какой-то причине боитесь удалять, можно отключить:

pm disable-user --user 0 имя.пакета

Отключённые приложения можно включить обратно прямо в настройках телефона на страницах этих приложений.

Имя пакета можно найти на странице приложения в настройках.

Описание наиболее распространённых пакетов

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

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

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

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

Пакеты Гугла

Эти пакеты оказывают на телефон самое губительное действие.

  • com.google.android.gms — главный засранец и злодей: Google Play Servives. В него ходят остальные приложения гугла, так что если его удалить/отключить, они могут не работать. Но мы их всё равно все удалим, так что без разницы :)
  • com.android.vending— сам магазин приложений.
  • com.google.android.gms.location.history — история местоположений.
  • com.google.android.apps.maps — карты.
  • com.google.android.feedback — бесполезная штука для каких-то отзывов.
  • com.google.android.ims — приложение для звонков. Лучше просто отключить, мало ли что на него завязано.
  • com.google.android.contacts — приложение для контактов. Тоже лучше просто отключить.
  • com.android.chrome — браузер.
  • com.google.android.googlequicksearchbox — панель поиска.
  • com.google.android.tts — речевой синтезатор (говорилка типа "окей гугл").
  • com.google.android.apps.wellbeing — я сам не очень понял что это, но оно точно не важное.
  • com.google.android.youtube — собственно, ютуб.
  • com.google.android.apps.youtube.music — ютуб-музыка.
  • com.google.ar.lens — камера с сервисами гугла.
  • com.google.android.apps.tachyon — видеочат.
  • com.android.hotwordenrollment.okgoogle — голосовой ассистент.
  • com.android.hotwordenrollment.xgoogle — тоже голосовой ассистент.
  • com.google.android.apps.safetyhub — "безопасность".
  • com.google.android.inputmethod.latin — клавиатура. Не удаляйте, если не ещё установили заменитель.

Были случаи, когда после удаления приложения для СМС от гугла сообщения переставали переходить, так что сначала отключите его и проверьте.

Пакеты от Сяоми

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

  • com.xiaomi.mipicks — магазин приложений.
  • com.miui.player — музыка.
  • com.miui.bugreport — бесполезная фича для репорта багов.
  • com.miui.miservice — то же самое: "обратная связь".
  • com.miui.weather2 — погода
  • com.xiaomi.scanner — сканер
  • com.miui.yellowpage — так и не понял что это, но оно вообще ни на что не влияет.
  • com.miui.calculator — калькулятор.
  • com.xiaomi.calendar — календарь
  • com.miui.analytics — сервис, собирающий данные о пользователе
  • com.miui.msa.global — засранец, который показывает рекламу прямо в системе
  • com.xiaomi.glgm — магазин игр.
  • com.xiaomi.payment — платежи.
  • com.mipay.wallet.in — кошелёк.
  • com.micredit.in — займы. Без шуток.
  • com.mi.global.shop — магазин продукции Сяоми.
  • com.xiaomi.midrop — делиться файлами.
  • com.miui.fm — радио
  • com.mi.global.bbs — что-то типа форума.
  • com.mi.globalbrowser — браузер.
  • com.miui.videoplayer — это не системный проигрыватель видео, а сервис типа ютуба.
  • com.mi.android.globalFileexplorer — проводник от Сяоми.
  • com.miui.gallery — галерея. Её лучше просто выключить, потому что, вроде, что-то на неё завязано.

Далее идут сервисы, относящиеся к аккаунту Сяоми. Если вы зачем-то таковой завели, то лучше их не трогать. Если вы никаких аккаунтов не создавали и не планируете, и облаком пользоваться не будете, то можете удалять. Пути назад не будет :).

com.miui.cloudservice
com.miui.cloudservice.sysbase
com.miui.cloudsync
com.miui.micloudsync
com.miui.cloudbackup
com.miui.newmidrive
com.xiaomi.mi_connect_service

Партнёрские пакеты

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

pm uninstall --user 0 com.facebook.system
pm uninstall --user 0 com.facebook.services
pm uninstall --user 0 com.facebook.katana
pm uninstall --user 0 com.facebook.appmanager
pm uninstall --user 0 com.opera.preinstall
pm uninstall --user 0 com.mediatek.ygps
pm uninstall --user 0 com.booking

# дополнить список...

Опасно!

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

  • Не удалять com.google.android.documentsui — он отвечает за права доступа, без него всё сломается.
  • Не удалять com.android.location.fused — без него система тупо не запустится.
  • Не удалять com.miui.global.packageinstaller — это не магазин приложений, как может показаться, а системный установщик пакетов. Без него вы ничего не поставите, если вообще запуститесь.
  • Не удалять com.xiaomi.finddevice — я не пробовал, но говорят, что удалять нельзя.
  • Не удалять com.miui.securitycenter — тоже не пробовал, и тоже говорят, что удалять нельзя.

Дополнительные сведения

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

Последние удаления

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

Установка ключевых приложений

Открытый софт

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

Базовые приложения Simple Mobile Tools (есть на F-Droid):

  • Simple Contacts — контакты
  • Simple Calendar — календарь
  • Simple Voice Recorder — диктофон
  • Simple Flashlight — фонарик
  • Simple SMS Messenger — СМС
  • Simple Draw — примитивная рисовалка
  • Simple Notes — записки
  • Simple Thank You — приложение для настройки внешнего вида для всех приложений выше разом.

Звонилка: Koler, есть на F-Droid. Выглядит стильно. Правда, на некоторых системах он почему-то может не работать. В таком случае можно поставить Simple Dialer.

Браузер: Fennec, есть на F-Droid. Это форк файрфокса, но как и сам файрфокс, полностью открытым он, к сожалению, не является. Лучше, однако, чем хром или — упаси боже — яндекс браузер.

Сканер: Binary Eye, есть на F-Droid. Шустрый, простой и фичастый сканер.

Погода: приложений, в принципе, куча на любой вкус. Я пользуюсь Geometric Weather, он есть на F-Droid.

Файловый менеджер: Material Files, есть на F-Droid. Красивый интерфейс, есть все обычные фичи файловых менеджеров и возможность поднять FTP-сервер.

Музыкальный плеер: AIMP. На F-Droid его нет, но исходный код открыт. Лучше плеера под андроид я пока что не видел. Там ещё и скины есть.

Остальные приложения можно легко найти в том же F-Droid. Например, альтернативный клиент Телеграма с вырезанными несвободными компонентами. Искать надо на английском.

Проприетарщина

К сожалению, не всему софту существует достойная свободная замена. И всякие банки-госуслуги ставить всё равно придётся. Поскольку гугл плей вы стёрли (надеюсь), а apk своих приложений никто никогда почему-то не выкладывает на свой сайт, встаёт вопрос: откуда их качать?

А вот есть такое приложение как Aurora Store. Оно подключается к гугл плею и качает оттуда, но при этом не посылает туда никаких ваших данных и не занимается шпионажем всё остальное время в фоне. В остальном функциональность такая же и даже лучше, потому что он, например, не вредничает из-за "нехватки" места.

Также бонус для параноиков: прекрасное приложение Tracker Control (есть на F-Droid). Реализует функционал файрволла, но индивидуально по приложениям. Можно открыть каждое и посмотреть куда идут запросы, заблочить определённые адреса или вообще доступ в сеть. Незначительные минусы в том, что при работе занимает слот ВПН и немного подъедает батарейку, хотя по сравнению с тем, что было до чистки, это ничто. Вот, например, трекеры, куда 2GIS отсылает информацию:

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

Заключение

В результате:

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

Теперь главное — не засрать телефон. Перед установкой приложения всегда старайтесь искать ему открытую альтернативу.

Послесловие

Если вы следовали инструкции, но что-то пошло не так, если описание какого-то пакета не соответствует действительности, если у вас есть вопросы или вы хотите что-то добавить, то пишите мне. Можно на почту: mail@dimius.ru.

Неоднородность надписей

Классический случай бесящего несоответствия надписей — меню чека в сбере.

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

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

Иконка ещё тоже к надписи "переслать" не подходит: это явно поделиться (share), а переслать (forward) это обычно .

Короче, правильно делать так:

А в этом конкретном случае, чтобы не мучать никого выпадашками, идеально было бы вообще так:

Простой файловый сервер

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

Всё, конечно же, self-hosted, загрузка защищена паролем, скачивать могут все.

Репа: github.com/intredford/simple-fileserver

Подстановка эмоджи

Самое глупое, что может делать поле ввода, это подставлять эмоджи вместо смайликов (":)" → "🙂"). Важное правило: если юзер что-то набрал, то это ни в коем случае нельзя менять. Оставьте как есть и не трогайте — если я напечатал что-то каким-то способом, значит мне именно так и нужно.

Ладно если ещё это выясняется при наборе. Кое-где (дискорд, например) смайлики заменяются уже при отправке, и единственный способ отправить "как есть" это оформить его в код: :). Спасибо, блин.

Чёрным по белому

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

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

А истина такова: текст надо херачить чёрным #000 по белому #fff. А font-weight, не стесняясь, поставить на 400.

Даю вам разрешение так делать, чтобы можно было сослаться на авторитет.

Проблемы перевода

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

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

Музыкальные плееры

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

Не виню, конечно. Я, однако, уже 11 лет имею привычку собирать себе понравившиеся треки, и их проигрыш становится всё сложнее. Особенно остро эта проблема стоит на телефоне (на ПК непоколебимо стоит божественный Winamp).

Кратко о моих требованиях к плееру:

  • Возможность открыть определённую папку с музыкой, а не сканировать всю память;
  • Сортировать по имени файла и уважать нумерацию в начале. Все мои треки пронумерованы в хронологическом порядке добавления, и имеют такой формат названия: 92. Author - Title.mp3;
  • Желательно иметь открытый исходный код. Не требовать подключения к интернету и прочей чуши;
  • Обладать человеческим дизайном.

Ну и всё. Не так уж и много прошу, в принципе :). Тем не менее, по какой-то неизвестной причине из 11 плееров, которые я попробовал, всего 1 соответствовал всем им. Представляю идеальный плеер: AIMP. Не ясно, что мешало остальным быть такими же, ведь AIMP ничего особенного не делает. Секрет как раз в этом: ничего особенного, всё просто. Открыл папку, проиграл. Всё.

Мораль: как я уже много раз писал, надо писать простые вещи. Большинство сложностей в айти — надуманные и возникшие, словно снежный ком, друг из-за друга.

Нельзя молчать

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

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

Я никогда не высказывал свои взгляды, но сейчас, видимо, пора.

Файловые беды в телефонах

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

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

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

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

Микроотвлечения

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

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

Тупняк обычно вызывают такие факторы:

  • Обыкновенная неоптимизированость;
  • Блокировка на время, пока не придёт ответ с сервера;
  • Долгие анимации.

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

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

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

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

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

Не такие как все

Смешат приложения, которые создают свою папку в Downloads, и сохраняют всё туда. Мол, все остальные плебейские файлы пусть лежат все вместе у себя в корне, а у наших байты особенные, достойные собственной папки!

Проблема с интерфейсами

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

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

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

Остальные способы либо невероятно запутанны и мало документированы (системные API, особенно проприетарные), либо требуют команды синьоров (свой рендеринг и UI-фреймворк).

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

Праздник

С сегодняшнего дня Unix Timestamp начинается с 17. Юху!

Мы вас не пустим

Ух как бесит, когда сайт после регистрации не залогинивает автоматически! Казалось бы, ну чего это стоит?

Редакторы кода: что работает, а что нет

За несколько лет работы с кодом у меня накопилось несколько обязательных модификаций для внешности редактора кода.

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

Потом случилось просветление:

Ну ведь правда: текст на светлом фоне выглядит гораздо естественнее, чем на тёмном, тут ничего не поделаешь. Да и когда пишешь код, обычно приходится переключаться между несколькими окнами, и если одно из них в тёмной теме, а другое в светлой, то глазам будет очень больно. Учитывая, что стандартом является всё-таки светлая, легче просто все программы настроить на неё и не париться. Да и какой вообще юзкейс у тёмной темы? Меньше в глаза бьёт? Так не надо сидеть в темноте.

Кстати, в этом примере как раз видна проблема с тусклыми комментариями, о которой я недавно писал.

А потом я увидел эту тему:

И подумал: а зачем вообще редакторы так много раскрашивают? Зачем там вообще целых 10 разных цветов, что большая часть вообще означает? Оказалось, что... примерно ничего?

Сначала казалось, что такая раскраска позволяет легче ориентироваться в коде. Но потом я понял, что на цвет, на самом деле, особенно не смотрю. И с тех пор пользуюсь этой минималистичной цветовой схемой. В отзывах к ней писали: "It's like I had this weight on my eyes, and now it's gone. Awesome!". И я на 100% согласен, именно так это и ощущается. "A little bit confusing at first if you're from The Dark Land. But then you just chill" — прямо в точку.

Ну и ещё несколько моментов:

  • Миникарта — нинужно. Выглядит прикольно, но смысла мало, да ещё и место занимает;
  • Номера строк — везде они есть, но на самом деле штука не такая уж и полезная. Единственный юзкейс: когда в ошибке написано error at example.js:28. Я лично пользуюсь плагином, где строки можно переключать, и большую часть времени они скрыты;
  • Разноцветные скобки, где цвета зависят от вложенности — полная туфта. Никогда не помогало, а шуму добавляет конкретно;
  • Плавный скролл как-то не прижился. Но, возможно, это потому что в VS Code он не такой уж и плавный, да и вообще какой-то странный.
  • Шрифт, конечно же, FiraCode. Сам по себе красивый, и лигатуры это однозначно круто: ===, !==, >=, =>, </>, && ~>, 2x2.

Двойная блокировка

Иногда в дополнение к обычной модалке сайт принимает ещё какие-то меры блокировки.

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

Это всё, конечно, смешно. Вот на что идёт расчёт? Что продвинутый пользователь, удалив модальное окно, махнёт рукой на ещё один оверлей? Не сможет прописать overflow: auto?

Вариативные концовки

Вчера пересмотрел «Эффект Бабочки» и увидел не ту концовку, которую несколько раз видел до этого. Офигел, особенно потому что это как раз фильм про то, как вещи изменяются.

Оказывается там сняли 4 разных концовки: хорошую, плохую, нейтральную и открытую. Прямо как в играх. Так-то это круто, хотелось бы побольше такого в кино.

// Комментарии

Вот не понимаю, почему большинство цветовых схем для кода делают комментарии /* полупрозрачными */? Там же часто важные вещи пишут, зачем их прятать? Очевидно, что пометки к коду не должны иметь меньшую ценность, чем сам код.

Это, конечно, если вы не пишете:

import axios from 'axios' // Импортируем axios

Мы используем куки

Вот в чём причина того, что все делают такие монструозные баннеры про куки?

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

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

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

Сайт использует куки для идентификации.

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

А, ну и самое смешное это когда баннер с куками делают там, где он не нужен, тупо копируя другие сайты.

Виноград

Почему вообще кто-то до сих пор выращивает на продажу виноград с косточками, если без них объективно лучше?

Нулевой

У меня есть одно твёрдое мнение, с которым никто не согласен: 18 веком должны обозначаться 1800–1899 года, "третий час" должны говорить про промежуток 15:00–15:59 (или 3:00–3:59), и так далее...

Сначала всё пошло наперекосяк, когда какой-то игумен назвал год рождения Христа первым. А по факту он должен быть нулевым, но ноль тогда вообще редко использовался. В итоге получился сплошной бред: во-первых, после минус первого года пошёл первый (-1 -> 1), и во-вторых века из-за этого начинаются не с 00, а с 01. Тут, я считаю, надо просто взять и сказать: "так, всё, века теперь с 00 по 99". Ну а в веке, когда жил Христос, пусть будет девяносто девять лет вместо ста, ничего страшного. Зато удобно.

А когда всё-таки счёт начинается с нуля, люди часто называют нулевой элемент (например, нулевой час) первым. Это, по-моему, лютейшая мозгоебля! Каждый раз, когда какой-то мудак говорит "восьмой час" и когда я вижу "8 век" (или "VIII век" – это полный пиздец), в голове происходит ступор, потому что сказали 8, а на самом деле тут везде 7: 7 часов X минут и 7XX годы.

Неужели у всех отвалится жопа, если сказать "нулевой час"? На часах же ноль. Что произойдёт, если сказать "нулевой век"? Прошло же ноль веков, и в сотне годов стоит ноль (032 год, условно). Почему большинство считает, что сдвигать нумерацию на 1 и потом получать из-за этого несостыковки – норма?

Самое смешное, что те же люди без проблем говорят – о боже! – "в нулевых".

Просто признайте: говоря "восьмой век", удобно в голове нарисовать 8XX год, и говоря «восьмой час», удобно представить в голове часы с временем 8:XX. Делать иначе – напрасная умственная работа и просто извращение.

Отсталый веб

Когда-то давно на сайтах был только текст, изредка небольшие формы. То есть много было не нужно:

, , , , , и всякие текстовые тэги.

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

Конечно, эти элементы можно наколхозить, используя CSS и JS. Однако сложный интерфейс это не просто куча разных элементов, а ещё и интерактивность с реактивностью. И вот тут-то начинается самое весёлое...

Дело в том, что в HTML+CSS интерактивность на уровне "при наведении на элемент покрась его в синий", а реактивность на JS даже сегодня не все осилили (привет, Вордпресс!). Из-за этого и случился взлёт Реакта и подобных ему библиотек, которые эту реактивность как-то причёсывают в удобный вид.

Можно сравнить, как выглядит код, реализующий пример ниже, на нативных HTML+JS и на Vue (библиотека для реактивности).

Измени меня
// Нативная реализация
<input id="input" value="Измени меня">
<code id="value">Измени меня</code>

<script>
    const input = document.getElementById('input')
    const value = document.getElementById('value')
    input.addEventListener('input', (event) => {
        value.innerText = event.target.value
    })
</script>
// Vue
<template>
    <input v-model = "value">
    {{ value }}
</template>

<script setup>
    import { ref } from 'vue'
    const value = ref("Измени меня")
</script>

Тут сразу понятно, на чём предпочтут писать разработчики.

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

Ещё второй код отличается от первого тем, что HTML и JS (то есть представление и логика) там гораздо лучше интегрированы друг с другом, чем в обычной среде браузера. Например, можно выводить переменные из JS прямо на страницу без всяких сложностей. Отсюда выносим третий пункт, по которому веб отстал: в разделении кода на HTML, CSS и JS больше нет смысла. Много ли мы видим сейчас сайтов без JS? А сайтов без CSS?

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

Доступ ограничен

Войдите в аккаунт, чтобы продолжить чтение.

Sign in with Google

Восстановить пароль

Нет аккаунта? Регистрация

Римские цифры

Нафига люди сегодня пользуются римскими цифрами? Любому современному человеку гораздо понятней, когда написано "18 век", а не "XVIII век".

Для подтверждения предлагаю прочитать "MCMLXXXVIII".

Страшная правда о gap в CSS

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

Один из самых базовых шаблонов: элементы все одинакового размера и стоят по строчкам.

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

Вот, казалось бы, логичный код:

.parent {
  display: flex; /* отображать по флексу */
  flex-wrap: wrap; /* переносить строки */
  gap: 0.5em; /* интервал между элементами */
}
.child {
  flex-basis: 25%; /* каждый элемент занимает 25% (¼) строки */
  height: 2em;
}

Однако он выдаст вот такой результат:

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

Оно всё работает так, что сначала элементу задаётся размер 25%, а потом к этому размеру прибавляется отступ. Соответственно, при отрисовке получается, что элемент занимает не 25%, а 25% + 0.5em * 0.75, где 0.75 это три отступа, которые должны быть между четырьмя элементами. Поскольку второе больше, чем первое, последний элемент переносится на следующую строку, так как в свою он не влезает.

Чтобы компенсировать эти 0.5em * 0.75, надо написать следующий довольно уродливый код:

.parent {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5em;
}
.child {
  flex-basis: calc(25% - 0.5em * 0.75); /* изменение тут */
  height: 2em;
}

Если есть задача сделать так, чтобы на разных размерах экрана было разное количество элементов в строке, нужно использовать такую формулу:

flex-basis = (100% / perRow) - gap * (1 - 1 / perRow)

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

Люди без компьютера

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

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

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

Яндекс капча

Продолжая тему капч: у яндекса сейчас есть две: прекрасная и ужасная.

Сначала представлю прекрасную:

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

А теперь уберите детей от экрана:

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

Получается так:

  • В первой капче нужно всего одно лёгкое умственное усилие: прочитать текст;
  • Во второй капче нужно как минимум 5 тяжёлых усилий, чтобы найти каждую иконку.

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

Опять гугл

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

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

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

Суровый дизайн Гугла

Веб-дизайн у Гугла и раньше был так себе, но в последнее время (особенно после выхода Material 3) они что-то совсем круто пошли вниз.

Вот рассмотрим их окошко аккаунта:

Тут такое ощущение, что его делали три разные команды, которые не знали о существовании друг-друга. Я посмотрел в инспекторе и ахнул: кажется, это действительно было так. Это окно состоит из трёх блоков, каждый из которых не зависим ни от чего (а ещё всё рендерится в iframe, гыгы). И вообще придраться тут можно много к чему:

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

Я быстренько прямо в инспекторе накидал свою версию:

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

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

Авгиевы конюшни

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

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

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

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

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

Поскольку рыночек порешал и большинству пользователей легче просто заплатить в три раза больше, чем разбираться, мы получаем такую ситуацию, что будильник требует принять политику конфиденциальности, а галерея хочет выйти в интернет. Должно ли так быть? Однозначно нет. Кому не пофиг? Меньше 1% юзеров. Будет ли изменение в лучшую сторону? Вряд ли.

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

Управление местом

Вот бы здесь было достаточно места, чтобы показать больше вкладок...

Непреодолимые сложности

Моя версия списка сложнейших задач Computer Science:

  • Сайт, который полностью работает без регистрации;
  • Вход только по логину и паролю;
  • Пути с пробелами и не на латинице;
  • Загрузить папку;
  • Правильная оценка оставшегося времени в прогресс-барах;
  • Подключение Bluetooth;
  • Видеоплеер в браузере;
  • Быстрые жесты в браузере;
  • Анимации короче 100 мс;
  • USB-C разъём;
  • Шрифты в презентациях;
  • Мобильное приложение приложение без анал-итики;
  • Запоминание «Запомнить меня»;
  • Открыть сайт без загрузочного экрана;
  • Залить своё приложение на свой сайт;
  • Отменить? отменить \ ок;
  • Жесты в браузере;
  • Сделать маленький и незаметный баннер про куки;
  • Правильно кодировать не-ASCII символы в URL ("%D1%85%D1%83%D0%B9");
  • Перекинуть файлы с одного компьютера на соседний без проводов, флешек и интернета.
  • Применение настроек без кнопки «применить»;
  • Пароли короче 8 символов, без цифры, заглавной буквы и специального символа;
  • Невидимая капча;
  • Вычисление размера папки;
  • Вечные сессии.

Блог? Ну и кринж...

Я создал блог. Не знаю зачем, но в том, что у меня теперь есть своя страница, и я не пишу в какой-нибудь соцсети, даёт некоторое ложное ощущение элитарности (зумерок обнаружен). Что я буду тут писать? Хз. Кто будет это читать? Как минимум я.

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

Короче, добро пожаловать!