Обложка: Самые интересные, странные и глупые фичи, которые делали наши читатели

Самые интересные, странные и глупые фичи, которые делали наши читатели

Закончился #фичавгуст — так в нашем календаре называется последний месяц лета. Чтобы отметить его, мы вместе с образовательной платформой OTUS придумали конкурс и собрали истории пользователей про самую интересную/смешную/странную/тупую фичу, которую им доводилось реализовывать.

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

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

***

История 1: рандомное появление ошибки со страшными текстами и кодами

В небольшой системе учёта, написанной буквально на коленке, у пользователя раз в месяц в случайный момент времени появлялась ошибка (точнее, messageBox со страшными для пользователя текстами и кодами). Через 10-15 минут ошибка переставала появляться. За эти 10-15 минут как раз приходил админ, а «ошибки» уже нет. Лицо пользователя в этот момент — «Это! Просто! Нечто!»

P.S. Система некритична и на работоспособность подразделения особо не влияет:)

***

История 2: кастомный шрифт под единственный символ

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

Подробности этой истории:

***

История 3: «Волосы Трампа»

«Волосы Трампа» — признак для линейной регрессии с задачей оценить уровень юмора газетного заголовка. При добавлений признака «trump» и «hair» как признака уровня юмора точность модели возросла. Это была имплементация в рамках соревнования Sem-Eval 2020 Task 7: Assessing Humor in Edited News Headlines.

***

История 4: прозрачный фон на сайте

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

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

***

История 5: школьный проект с сообщением, которое никто не должен был видеть

Делал школьный мини-проект на Flask и HTML+CSS, домашнее задание. В вёрстке сделал кнопку, которая показывала сообщение «С днём геев!». Это была то ли шутка, то ли часть для тестирования, но я её оставил. Во время проверки учитель нажал на эту кнопку и увидел сообщение.

***

История 6: команда для просмотра текущего времени в чат-боте

Реализовал команду «!время» для чат-бота, которая возвращает текущее время. Юмор в том, что на сообщениях в чате и так видно время отправки.

***

История 7: Discord-бот для отслеживания тредов на 2ch

Discord-бот, который уведомляет о наличии фап-тредов на 2ch. Далее был добавлен фильтр для webm-тредов.

***

История 8: обязательное указание компании для пользователей

Сделали поле «Название компании» обязательным для пользователей, которые выбирают персональный план. Тут же получили отзыв от разъярённого пользователя: «Hey idiots! I don’t have a company! That is why I am signing up for the Single user only plan! Dipshits!» ¯ \ _ (ツ) _ / ¯

***

История 9: самодельная настольная игра

Как-то в детстве, в далеком 1999 году, когда не было настольных игр (у нас), мы с другом сделали настолку сами. Я был ИИ, а он игроком. Все фичи, которые я вставлял, попадали под категории: интересная, смешная, странная, тупая. Но помню я единственную: мэр города подавился хлебом и умер.

***

История 10: генератор стендапов для Slack из Notion

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

Пример доски для планирования задач в Notion

Доска с задачами в Notion

Несколько условий, чтобы магия работала:

  • Свойство задачи со статусом должно называться Status.
  • Колонки с планами должны называться For today, In progress, «Сегодня» или «В работе».
  • Колонка с тем, что сделано, должна называться Completed или «Готово».
  • Доску нужно расшарить на бота.
Пример стендапа

Так выглядит стендап в Slack. Сначала завершенные дела, затем планы на день

***

История 11: баг-фича с заказом пиццы

Когда я только сел за код, писал программу для заказа пиццы в консоли. Я ошибся с if-ами и зачем-то написал цикл. Таким образом, пользователь мог заказывать много пицц разом. Мне понравилась эта идея и я доработал её. Это мой единственный случай с багом-фичей.

***

История 12: преподаватель, который не проверяет возможности сервисов

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

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

***

История 13: функция для удаления дублей стран

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

***

История 14: сквозная LDAP аутентификация, которая не получилась

Задачей была реализация сквозной аутентификации LDAP с сервером Active Directory, чтобы пользователи не вводили пароль при входе в приложение, единожды привязав свою учётку Windows.

Первый прототип получился за 1-2 недели. Он состоял из небольшого количества JS-кода и двух простейших AJAX-запросов на фронте, а также одного простенького servlet’a на бэке. Использовал я SPNEGO/Kerberos, найдя какую-то захудалую JAR’ку в интернете. При входе пользователя в систему его перекидывало на login-форму, там то фоном и шёл один из AJAX-запросов, который проверял, кто пришёл и привязана ли его учётка Active Directory к учётной записи в приложении.

У большинства пользователей фича не просто не работала, но и крашила все приложения. В основном это было связано с очень старыми версиями IE и Windows на компьютерах сотрудников. Ведь тестировал-то всё это дело ИТ-отдел, а у нас у всех свежая винда, обновления, браузеры.

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

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

Подробности этой истории:

***

История 15: изобретение регулярных выражений

Я бэкенд-веб-разработчик. Как-то раз в форме поиска объектов заказчик захотел поддержку символов. (Любой символ) и * (любые символы). Вроде обычная просьба, но это усыпило мою бдительность, потому что дальше заказчик захотел добавить новые спецсимволы, типа [1,2] (либо 1, либо 2) с поддержкой старых. В этот момент я уже начал чуять неладное. Но было уже поздно.

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

***

История 16: подстава от ФНС

Работая над одним приложением, я решил внедрить возможность сканировать кассовые чеки. К счастью, на тот момент у ФНС России была такая возможность через GET запросы. Поковырявшись в одной статье, которая описывала работу API от ФНС, я смог реализовать сканирование чеков на Kotlin. Собственно, всё было готово, оставалось только сделать обработку полученного JSON, и я отложил это дело, занявшись другими задачами.

Но когда через две недели я вернулся к этому API, обнаружил, что оно больше не работает. ФНС без объявления войны поменяли не только ссылку для запроса, но и всю работу API. Проблема в том, что и для первой версии документации нет, а для второй тем более. Как сказал один человек на 4PDA: «Ну вот, опять придётся декомпилировать приложение ФНС, чтобы разобраться в API».

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

***

История 17: «бан» за спам

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

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

***

История 18: 2 дня на оптимизацию скорости печати этикеток

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

***

История 19: неуловимые тени на карточках

Как-то дали таску сделать в одном Android-приложении тени на карточках. Неделю колупали код и стили, всё должно было работать, но теней нет, либо есть, но уродские. Спустя неделю замечаем, что в манифесте проекта указано: аппаратное ускорение = false. По гиту эту строчку я поставил 2 года назад, непонятно зачем. Меняем на true и всё работает 🤦‍♂️

***

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

​Напомним про призы:

  • Первое место — любой видеокурс из этого списка в подарок + скидка 50 % на любой курс OTUS, а также мерч Tproger: футболка, наклейки.
  • Второе и третье места — любой видеокурс из этого списка в подарок и мерч Tproger: футболка, наклейки.

Кроме того, все участники конкурса получат от OTUS промокод на скидку 10%. Он будет действовать до конца 2021 года.

Выбирайте все понравившиеся истории:

Какие истории вам понравились? Можно отметить несколько вариантов

  • 8%
    История 1: рандомное появление ошибки со страшными текстами и кодами
    38
  • 10%
    История 2: кастомный шрифт под единственный символ
    48
  • 3%
    История 3: «Волосы Трампа»
    17
  • 11%
    История 4: прозрачный фон на сайте
    53
  • 5%
    История 5: школьный проект с сообщением, которое никто не должен был видеть
    27
  • 5%
    История 6: команда для просмотра текущего времени в чат-боте
    25
  • 2%
    История 7: Discord-бот для отслеживания тредов на 2ch
    9
  • 4%
    История 8: обязательное указание компании для пользователей
    22
  • 2%
    История 9: самодельные настольные игры
    12
  • 1%
    История 10: генератор стендапов для Slack из Notion
    7
  • 3%
    История 11: баг-фича с заказом пиццы
    16
  • 3%
    История 12: преподаватель, который не проверяет возможности сервисов
    14
  • 6%
    История 13: функция для удаления дублей стран
    30
  • 4%
    История 14: сквозная LDAP аутентификация, которая не получилась
    18
  • 9%
    История 15: изобретение регулярных выражений
    43
  • 7%
    История 16: подстава от ФНС
    32
  • 5%
    История 17: «бан» за спам
    24
  • 4%
    История 18: 2 дня на оптимизацию скорости печати этикеток
    21
  • 7%
    История 19: неуловимые тени на карточках
    35

Всего голосов: 130

Написать свой вариант