• Две проблемы

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

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

    Истинные две проблемы программирования другие.

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

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

    Как только первое и второе правила согласуются с реальностью, жить и работать становится проще.

  • Вещи, которые должны были сделать жизнь лучше (1)

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

    Уведомления

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

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

    Обновления

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

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

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

    Голосовые меню

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

    Например, десять вечера, ребенок заболел. Я звоню в аптеку, чтобы узнать, есть ли то, что нужно. А там номер 8-800: сначала здравствуйте, потом свежие предложения, перечисление пунктов меню. Оператор поддержки сидит в Туле за тысячу километров. Какая от него может быть помощь? Поэтому я звоню только в аптеки с городским номером.

    Забавно, что лет двенадцать назад я делал голосовое меню для Энергосбыта в Чите. Находил это очень важным и полезным для абонентов.

    Синтез речи

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

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

    (продолжение следует)

  • Картинки в Телеграме

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

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

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

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

    Все это очень странно.

  • Your Steam Year In Review

    Проблемы с письмами бывают не только у Госуслуг или Почты России. Стим тоже грешит. Прислал письмо с темой “Your Steam Year In Review 2023 is Here!”. Там все такое красивое, и жирная кнопка “See your review”:

    Жму, а там:

    Что хотел сказать автор? Ваше ревью не пошарено. Что делать дальше? Надо его пошарить? Как? Залогиниться? Зайти по ВПН? Хрен тебя разберет.

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

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

    Знатно налажали они с письмом в этот раз.

  • Роботы + AI

    Почему каждый раз, когда речь идет об искусственном интеллекте, рисуют робота с человеческим лицом? Того самого из “Я, робот” 2004 года в разных вариациях. Глупо и бессмысленно.

    В интернете миллион этих картинок. Вот что открывается по словам “artificial intelligence”:

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

    Гугл выкатил свой AI, и что показывают на презентации? Правильно, женщину- робота:

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

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

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

    Там у Gemini на щеке что-то отвалилось, вы поправьте, что ли.

    Нормальных роботов-андроидов я видел только в “Чужих”. Там они мягкие и жидкие, как люди. Вот оно — андроиды должны быть не железными, а жидкими! Только так они могут хоть как-то походить на людей. Фильм “Чужой. Завет” начинается со сцены рождения робота, и там его отливают на стенде. Буквально льют на гибкий каркас. Но и робота в итоге не отличить от человека. Это нормальный робот, а не железный болванчик.

    Наконец, всем, кто мечтает о подобных роботах, рекомендую посмотреть на Дуняшу. Это прекрасно:

  • Проблема и решение

    Работая над задачей, важно спрашивать себя о двух вещах.

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

    Из первого вопроса следует второй — как мое решение влияет на проблему? Оно вообще ее решает? Или можно было проще? Или можно было поправить конфиг?

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

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

  • Паузы в играх

    Я играю только в старые игры: те, которые были популярны, когда мне было 13-17 лет. В основном это эмулятор PlayStation и ранний PC. Играя сегодня, наблюдаю забавные вещи, на которые не обращал внимания раньше. Например, паузы или перезарядка оружия.

    Далеко не везде пауза останавливает мир полностью. Например, в старой сеговской игрушке General Chaos есть прикол: если бросить гранату и нажать паузу, она спокойно долетает и наносит урон. При этом работает анимация урона и смерти врага. За счет этого можно пройти игру одним бойцом.

    В игре Parasite Eve 2 на PlayStation был мощный лазер (насадка на карабин “Javelin”). Лазер хорош, но с большим интервалом между выстрелами. Однако если выстрелить и нажать паузу, то за это время его отпустит, и после паузы можно стрелять снова. С точки зрения игры лазер спамит непрерывно.

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

    В Quake 2 на PlayStation был прикол с путаницей патронов от одного оружия к другому. Если во время стрельбы переключиться с шоги на рейл и обратно, то рейл тратил дробь, а шога — обедненный уран.

    Почему так происходит? Хоть я ничего не понимаю в играх, но хотя бы предположу. Пауза ставит логический флаг, при котором игровой цикл не обновляет объекты. А перезарядка оружия и некоторые другие вещи работают от прерывания процессора. Другими словами, процессору говорят: через две секунды выполни код, который находится по этому адресу. Таймер можно только отменить, но не продлить. Поэтому даже если мир заморожен, через две секунды сработает код, который снимет с оружия статус “перезадяка” и выставит ему нужное число патронов. Отсюда такие приколы.

    Морали нет, просто вспомнилось.

  • Бесчеловечность Java

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

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

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

    Я рожал его почти два часа. Понимаете ли, инициировать BasicAWSCredentials недостаточно. Нужно обернуть его в AWSStaticCredentialsProvider и передать в AmazonS3ClientBuilder. Так очевидно и просто!

    Ясное дело, в джавадоке об этом ни слова. Каждый класс подробно знает о своих геттерах и сеттарах, но не то, как их скомпоновать. Гугление выдает ссылки на StackOverflow и Baeldung. Все спонтанно, что-то уже deprecated, разброд и шатание. В официальных доках только те примеры, что считаются правильными со стороны AWS.

    Все это топорно и бездушно. А некоторым с этим жить.

  • Пустая консоль

    Как приятно осознавать, что есть сайты, где в Developer Console ничего нет. То есть буквально ничего: ни логов Javascript, ни красных сообщений блокировщика, ни Google Static Content и прочего барахла. Пустой экран.

    Я об этом (популярный новостной сайт):

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

  • Темные темы

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

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

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

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

    Поэтому и отношение к темным темам такое: есть что-то да и ладно. Лучше, чем ничего.

Страница 8 из 76