The Daily WTF на русском Заметка

The Daily WTF на русском

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

Трэд заметок

Автор получил несколько "ошибок", связанных с некорректным вводом и расчетом дат. Тим Р. указал на веб-сайт, предназначенный для конвертации часовых поясов, но он ошибся на час. Анонимный читатель поделился скриншотом, демонстрирующим аномалию с датой, что укрепило его недоверие к крупным технологическим компаниям и их практике ручной очистки данных Microsoft. Дэниел Д. столкнулся с калькулятором дат, который отклонил "31 июня", несмотря на то, что в июне всего 30 дней, и поставил под сомнение его надежность для расчета разницы дат. Дэниел Д. также отметил веб-сайт электронной коммерции в Центральной Европе, который причудливо случайным образом переключал фильтры срока службы батареи между "часами" и "секундами". Эти случаи в совокупности демонстрируют различные комичные, но разочаровывающие программные сбои, связанные с обработкой дат и времени. Ошибки варьировались от простых ошибок на единицу до совершенно нелогичных отказов в датах. Такие несоответствия приводят к недоверию пользователей и препятствуют эффективной обработке данных. Статья служит напоминанием о постоянных проблемах в разработке программного обеспечения, особенно с, казалось бы, простыми типами данных.
CdXz5zHNQW_vNtMRaVOyt.png
Форматные строки предпочтительнее конкатенации для генерации удобочитаемого текста. Однако некоторые разработчики по-прежнему смешивают конкатенацию строк с форматными строками. Это может привести к сложному и менее читаемому коду, что иллюстрируется примером, включающим динамическое форматирование десятичных знаков. Автор утверждает, что простая переменная для форматирования была бы более понятной. В тексте также обсуждается спецификатор формата "на тысячу" (per-mille) в .NET. Автор считает особенно запутанным использование Unicode-символов напрямую в коде для таких спецификаторов, как '\u2030'. Такой метод встраивания логики форматирования в конкатенацию строк считается проблематичным. В конечном итоге, эти практики ставят под угрозу цель читаемого кода. Автор предлагает более простые подходы для достижения динамического форматирования.
Комбинезоны, инструмент отчетности о покрытии кода, интегрированный с конвейерами CI, испытали крупный сбой, начавшийся 24 февраля, что привело к сбою многочисленных заданий CI. Компания предоставляла частые и все более отчаянные обновления на протяжении всего инцидента. Их постмортем показал, что Amazon Web Services (AWS) по ошибке отключила свои услуги из-за ошибочного спора о выставлении счетов, проблему, которую Coveralls диагностировала примерно за 68 часов. Автор нашел заметки о сбое, особенно быстрые, похожие обновления и мольбу к пользователям помочь с миграцией AWS, непреднамеренно юмористическими. Несмотря на юмор, автор признает, что Coveralls делал все возможное в сложных обстоятельствах, поскольку немногие компании могли поддерживать операции, когда их облачный провайдер блокировал учетные записи. Инцидент подчеркивает потенциальные уязвимости при сильной зависимости от одного облачного провайдера. Статья завершается рекламой BuildMaster.
Крис В. столкнулся с неожиданной налоговой проблемой, когда Amazon Испания взимал с него более низкую цену без НДС за кухонный нож, классифицировав это как внутриевропейскую деловую транзакцию из-за старого номера НДС в его личном аккаунте. Этот номер НДС больше не отображался в настройках его аккаунта, что делало невозможным его управление. Чат-бот службы поддержки Amazon и живые агенты предоставляли противоречивые и бесполезные советы, включая требование обширной документации, обычно предназначенной для международных путешественников или военнослужащих.Следуя официальной странице помощи Amazon, Крис попытался удалить номер НДС, создав аккаунт Amazon Business, несмотря на то, что ему уже сообщили, что служба поддержки не может его удалить. Во время регистрации аккаунта Business Amazon необъяснимым образом потребовал от него повторно ввести тот самый номер НДС, который он пытался удалить. После предоставления официальных сертификатов испанского правительства для подтверждения его бизнеса, его аккаунт Business был наконец одобрен.Однако выделенная страница управления НДС в его новом аккаунте Business не предлагала никаких опций для редактирования или удаления существующего номера НДС. Вместо этого она просто предоставляла ссылку на "Связаться со службой поддержки для изменения вашего налогового идентификатора". Это вернуло Криса к началу, поскольку служба поддержки уже заявила, что не может удалять номера НДС.Опыт Криса подчеркивает запутанный и циклический процесс, созданный Amazon для управления налоговой информацией, вынуждая клиентов проходить через разочаровывающий цикл бесполезной поддержки и нефункциональных опций самообслуживания.
CdXz5zHNQW_Cw9oRz8am2.png
Доктор Дум в шутку озаглавил скриншот "Скроллбар-цепция", комментируя так называемые "дум-скроллбары" на веб-странице TikTok. Изначально он представил это как пример дум-скроллинга в социальных сетях, но само изображение не было предосудительным. Анонимный читатель объяснил сообщение об ошибке в Microsoft Word, возникшее при реорганизации таблиц методом перетаскивания. Б. Дж. Х. поделился разочаровывающим опытом с системой отслеживания багажа Southwest Airlines, которая изначально не показывала никаких сканирований, несмотря на то, что багаж отслеживался. Ситуация усугубилась другой страницей, которая заставила Б. Дж. усомниться в собственном существовании. Адам Р. сообщил о необычном форматировании чисел от Stripe, где знак для сумм транзакций появлялся на отдельной строке. Он предположил, что это связано с проблемами алгоритма переноса строк, отсутствием неразрывного пробела. Питер С. обнаружил запутанный набор кнопок "да/нет" на сайте Peloton "Repowered" для продажи оборудования. Он посчитал, что интерфейс больше напоминал азартную игру, чем четкий выбор. Автор задался вопросом о мотивах Питера продавать свое оборудование Peloton. Предоставленный текст также включает рекламу BuildMaster. Общая тема — сообщения и юмористические комментарии о странностях пользовательского интерфейса и пользовательского опыта.
CdXz5zHNQW_G5UYqFYRut.png
Датская система социального обеспечения, CPR, пережила крупную утечку данных, в результате которой были раскрыты личные данные 8,8 миллиона человек. Это произошло потому, что сторонний подрядчик обеспечил свой доступ к базе данных CPR чрезвычайно слабым паролем "123456". Хакер воспользовался этой уязвимостью, получил доступ и просматривал систему в течение десяти дней до обнаружения. Утечка выявила системные проблемы с безопасностью паролей и зависимость от легко компрометируемых идентификационных номеров.Отдельно автор выражает скептицизм по поводу технологии блокчейн, рассматривая ее как решение без четкой проблемы, причем основной сферой применения является торговля токенами. Несмотря на то, что компании, использующие блокчейн, часто подвергаются взломам, недавняя атака на цепочку поставок производителя аппаратных кошельков Ledger заслуживает внимания. Злоумышленники скомпрометировали устройства во время цепочки поставок, внедрив оборудование, которое могло красть коды восстановления, отображаемые на экране устройства. Это позволило им украсть криптовалюту на сумму около 100 миллионов долларов. Атака ставит под сомнение безопасность цепочки поставок и тщательность проверок. В конечном итоге, текст подчеркивает присущую сложности безопасности, особенно когда речь идет о конечных пользователях или слабых паролях.
Виртуальное наследование — это техника C++, используемая для решения "проблемы ромба" в сценариях множественного наследования. Эта проблема возникает, когда класс наследует от двух классов, оба из которых имеют общий базовый класс. Без виртуального наследования производный класс будет содержать две отдельные копии членов базового класса, что приведет к неоднозначности. Используя виртуальное наследование, например class B : public virtual A, производный класс D, наследующий от B и C, будет иметь только один экземпляр базового класса A. Это гарантирует доступ к единой копии членов A. Однако виртуальное наследование имеет эффект только тогда, когда существуют дальнейшие производные классы, которые столкнутся с неоднозначностью. Коллега Мэнди злоупотребляет виртуальным наследованием, применяя его даже тогда, когда это не требуется. Например, маркировка final класса SomeSpecificDerivedClass с public virtual SomeBaseClass не имеет практической пользы. От final класса нельзя наследовать, что делает объявление виртуального наследования избыточным. Следовательно, использование виртуального наследования по умолчанию во всех ситуациях, как это делает коллега Мэнди, часто является неэффективной и ненужной практикой.
Автор выражает огорчение по поводу оцифровки почты и отмены личных свиданий в тюрьмах США. Многие штаты теперь сканируют всю входящую и исходящую корреспонденцию, уничтожая оригиналы и делая их доступными только через платные планшеты. Этот процесс медленный, включает цензуру, часто выполняемую искусственным интеллектом, и лишает общение личных штрихов. Автор сравнивает это с прошлым опытом цензуры и конфискации. Хотя власти утверждают, что эти меры направлены на пресечение наркотрафика, доказательств их эффективности нет. В статье утверждается, что эти практики наносят огромный вред, разрывая жизненно важные связи для заключенных и их семей. Физическая почта и свидания представлены как жизненно важные для психологического благополучия заключенных. Автор призывает читателей к действию, поддерживая отмену тюрем, избегая соучастия с компаниями-посредниками, распространяя информацию и пиша заключенным. Они подчеркивают, что коллективные действия, особенно со стороны специалистов в области технологий, могут противостоять этим жестоким практикам. Автор задается вопросом, должны ли такие инвазивные цифровые практики выходить за пределы тюрем.
CdXz5zHNQW_W0bWKSOezh.jpeg
Автор критикует распространенную практику объяснения объектно-ориентированных концепций с использованием биологических таксономий из-за ее ограничений, особенно чрезмерного акцента на наследовании. Затем он обсуждает кодовую базу на C++, где разработчики неправильно понимают ключевые объектно-ориентированные принципы, что приводит к проблемному коду. Примером является функция StealTentacle, которая использует проверки типов во время выполнения (IS_INSTANCE_OF) вместо полиморфизма для определения, есть ли у животного щупальца.Макрос IS_INSTANCE_OF некорректно использует dynamic_cast с приведением типа в стиле C, что может привести к непреднамеренному поведению. Макрос пытается привести указатель на объект к базовому типу перед проверкой его фактического типа, демонстрируя непонимание правил приведения типов в C++. Комментарии разработчиков раскрывают их путаницу относительно dynamic_cast, поскольку он может выполнять кросс-кастинг между связанными производными типами, а не только проверять прямое наследование.Автор утверждает, что такие проверки типов во время выполнения являются антипаттерном и что решаемая проблема может быть решена более элегантно с использованием самой системы типов. Код далее иллюстрирует это, используя больше приведений типов в стиле C для попытки понижающего приведения после проверки макросом. В конечном итоге автор разделяет мнение о том, что, хотя объектно-ориентированные возможности могут быть мощными, их неправильное использование, особенно с информацией о типах во время выполнения, может привести к сложному и неэффективному коду, подрывающему элегантность языка.
Роберт Дж. столкнулся с транспортным сбоем, когда его вагон поезда неожиданно отцепился. Ему пришлось перебронировать поездку, что привело к тридцатиминутной задержке. Чтобы избежать дальнейших неудобств, Роберт воспользовался приложением железнодорожной компании, чтобы забронировать место в следующем поезде, получив подтверждение. В ожидании он выпил кофе, рассчитывая на плавный переход. При посадке в следующий поезд он столкнулся с другим пассажиром, который претендовал на то же забронированное место. Оба пассажира предъявили подтверждения из своих мобильных приложений, показывающие идентичное бронирование места с одинаковым временным штампом. Они также проверили подтверждения по электронной почте, которые еще больше подтвердили их противоречивые бронирования. К счастью, поезд не был полон, поэтому все без проблем нашли себе место. Этот инцидент выявил критическую проблему одновременного доступа в системе бронирования железнодорожной компании, где процесс проверки и бронирования не был атомарным. Автор предполагает, что ошибка сохраняется из-за отсутствия приоритета, либо из-за безразличия, либо из-за огромного количества других программных проблем. Система, вероятно, позволяет двум пользователям одновременно бронировать одно и то же место, потому что действия проверки и бронирования не выполняются как единая, неделимая операция.
Младший разработчик хотел научиться считывать ввод пользователя из командной строки Java и обрабатывать его. В команде Роберта есть старший разработчик, известный своими твердыми убеждениями и наставническим подходом. Этот старший разработчик предоставил пример приложения для иллюстрации концепции. Код определяет класс ScannerTool с методом main и вспомогательной функцией. Метод main инициализирует сложную структуру карты для обработки ввода пользователя. Он использует цикл do-while для многократного запроса ввода у пользователя. Условие цикла зависит от сложного поиска в инициализированной карте. Функция nextCharacter считывает строку ввода и возвращает Optional, содержащий первый символ, или пустой Optional, если ввод пуст. Предоставленное решение широко использует Scanner, что считается избыточным для простого считывания символа. Суть избыточного проектирования заключается в Map объектов Map.Entry, которая пытается создать кортежи для управления сообщениями и логикой управления циклом. Эта запутанная структура была представлена как пример наставничества, хотя она значительно усложнила базовую задачу. Автор выражает недоумение по поводу сложности решения старшего разработчика.
DJ, молодой и недорогой веб-разработчик, создал функцию для выбора случайного контента из базы данных. Изначально он составил массив использованных идентификаторов и отслеживал максимальное значение идентификатора. Затем он реализовал цикл для поиска случайного идентификатора, который существовал в базе данных. Этот цикл многократно генерировал случайные числа до тех пор, пока одно из них не совпадало с идентификатором в массиве. Как только допустимый случайный идентификатор был найден, он использовался для запроса к базе данных для получения конкретного контента. Автор признает, что этот код плох даже по ранним стандартам PHP. Однако они утверждают, что это понятно, учитывая возраст и неопытность DJ в то время. Автор считает, что оглядываться на старый код и находить его неловким означает рост и обучение. Поэтому они предлагают DJ не "искупать" эту прошлую работу. Урок также направлен на компании, которые нанимают неопытных разработчиков за очень низкую плату.
На этой неделе «Error'd» сосредоточен на раздражающих политиках паролей. Один из читателей поделился опытом, когда пароль соответствовал всем отображённым критериям, но всё равно был отклонён. Майкл Р. уточнил, что «Handy» — немецкое слово для мобильного телефона. Саша Р. отметил, что приложения Oracle Fusion отображают неправильные требования к политике паролей при ручном сбросе. Мэттью С. с юмором указал на табличку с просьбой выбрать между «Выберите один, Staples!», что указывает на потенциальную проблему с амперсандом. Другой анонимный пользователь обнаружил, что для регистрации необходимо удалить специальные символы, что указывает на возможный недостаток перевода или проектирования программного обеспечения. Эти случаи подчёркивают распространённое раздражение пользователей из-за чрезмерно сложных или вводящих в заблуждение требований к паролям. Основная проблема, по-видимому, заключается в разрыве между отображаемыми политиками и реальными системными правилами. Это часто приводит к путанице и неспособности пользователей создавать удовлетворительные пароли. Такие политики могут стать серьёзным препятствием для вовлечённости и удовлетворения пользователей.
CdXz5zHNQW_e6ta0t9cAy.png
Команда Николая столкнулась с периодическими сбоями сборки в своем конвейере CI/CD, при этом тесты падали примерно в 0,5% случаев. Это раздражение побудило Николая самостоятельно разобраться в проблеме. Неудачный тест был связан с реализацией GUID от Microsoft, которая является оберткой для алгоритмов UUID. Конкретное утверждение было Assert.DoesNotContain("000", transactionId.ToString());, которое проверяло, содержит ли строка GUID "000". Это было сделано для обнаружения пустого UUID, но предположение, что "000" никогда не появится в строке допустимого GUID, оказалось неверным. Николай обнаружил, что такое строковое представление встречалось в 0,5527% случаев, примерно один раз из каждых 181 экземпляра. Тест был плохо спроектирован и мог быть улучшен более надежной проверкой. Лучшим подходом было бы использование встроенной константы GUID.Empty, которая представляет собой UUID со всеми битами, установленными в ноль. Автор выражает разочарование тем, что разработчики могут не использовать такие очевидные константы, предполагая, что обращение к документации, вероятно, выявит их существование. Статья содержит рекламу руководства по NuGet.
Тим Си. столкнулся с очередной бюрократической проблемой на WTF Exchange (WTFX), когда ему потребовалось больше дискового пространства для разработки программного обеспечения. Маргритт, контактное лицо, настаивала на формальном планировании и совещаниях даже для такого небольшого запроса в 40 ГБ, несмотря на срочность Тима. Она поинтересовалась, почему Тим не спрогнозировал свои потребности в дисковом пространстве за несколько месяцев, хотя он объяснил, что никто никогда не просил его дать оценку. Расстроенный, Тим купил внешний жесткий диск, надеясь обойти процесс. Однако WTFX отказался принять диск, ссылаясь на политику закупок, стандарты поставщиков и проблемы управления активами, несмотря на то, что он был новым и предоставлен Тимом. Маргритт с отвращением отвергла внешний диск, вновь подчеркнув необходимость официальных совещаний и предпочтительного оборудования. После задержки в несколько дней Тим наконец получил необходимое дисковое пространство через официальные каналы. Позже он обнаружил, что значительный контракт компании на программное обеспечение составлял лишь небольшую часть общего бюджета проекта WTFX, который был в значительной степени выделен на бездействующих экспатриантов-консультантов. Эти консультанты, которых называли "Андерсон Андроидами", ждали, пока команда Тима завершит разработку программного обеспечения в соответствии со строгими графиками диаграмм Ганта.
CdXz5zHNQW_3avBLnYrMA.jpeg
Этот текст с юмором подчёркивает ошибки переводов, с которыми сталкиваются читатели. Майк В. указывает на запутанный перевод с помощью кнопок на голландском сайте Dell, отмечая расхождения между текстом кнопок и сопутствующими описаниями. Маттиас Дж. разделяет проблему с немецкой сеттингом на сайте бронирования Euro-Tunnel, который, по-видимому, больше не поддерживает старый немецкий. Тем временем sztmbr сомневается в ясности польского сообщения в приложении Glovo, не уверенный, означает ли нажатие «Понять» признание лжи. «Зверь в чёрном» рассказывает о странном неверном переводе рекламы робота-пылесосы Roborock, который удивительно предлагает улучшить пол для лучшей уборки. TheRealSteveJudge обнаружил особенно странный неправильный перевод на немецком eBay, где китайский продавец попросил «экстрасенсорный адрес». Автор ценит эти материалы, рассматривая их скорее как источник забавы, чем критики. В заключение текст отмечается, что эти примеры демонстрируют то, как юмор может возникать из-за лингвистических ошибок. Также кратко упоминается реклама BuildMaster.
CdXz5zHNQW_Wc1Xmd2JMk.png
Тим унаследовал старое приложение на Visual Basic, датируемое до 2000 года. Это приложение использует собственную логику для форматирования годов, добавляя ведущий ноль к однозначным годам. Код преобразует год в целое число, а затем в строку для отображения. Если год меньше 1000, он предваряется нулем "0". В противном случае целое число года напрямую преобразуется в строку. Это форматирование было реализовано для обеспечения отображения годов всегда в четырехзначном формате. Однако приложению на самом деле не требовалось обрабатывать даты до 1000 года нашей эры. Логика добавления нуля для годов меньше 1000 приводила к формату "014" для 14 года нашей эры. Это добавление нуля в конечном итоге было избыточным, поскольку более поздние части программы переформатировали даты, используя встроенные типы. Следовательно, добавление нуля не имело практического значения для существующей функциональности.
Программный стартап Тима был поставщиком для WTF Exchange, крупной фондовой биржи. Культура биржи была крайне бюрократической, с упором на процесс, а не на результат. Они прямо заявили своей команде гибкой разработки, что "процесс — это результат". Предсказуемость была первостепенной, и отклонения от жесткого плана водопадного проекта не поощрялись. Конечные пользователи подчеркнули критическую необходимость в специальном отчете о наблюдении с обновлениями в реальном времени и подробным форматированием. Чтобы удовлетворить эту потребность, Тим разработал пользовательский программный модуль за выходные. Представив свою работу, он столкнулся с недоумением, а не с похвалой. Его новый модуль нарушил тщательное планирование проекта. Он не был указан на диаграмме Ганта и не включен ни в одну спецификацию. Тим потерпел неудачу, поставив под угрозу предсказуемость и вызвав огромные сбои. Этот опыт подчеркивает значительное столкновение культур между гибкой разработкой и строгой бюрократией.
CdXz5zHNQW_bs8BMlDbla.png
Дэвид Си, который пишет код на C++ для программной анимации, признался, что писал код, не уделяя первостепенного внимания качеству, из-за его одноразового характера. Однако одна конкретная строка кода заставила его пересмотреть свой подход. В этой строке использовалась передача параметров, в значительной степени основанная на массивах, что привело к неразборчивым именам переменных. Например, length4_3_3, по-видимому, попытка создать переменную, описывается как выражение диапазона размером в единицу. Такая конвенция именования не передает смысл данных, которые она содержит. Хотя код предназначался для временного использования, Дэвид признает, что код редко бывает по-настоящему одноразовым. Он размышляет о тенденции повторного использования кода в разных проектах. Автор предполагает, что даже одноразовый код может иметь долгосрочные последствия. В конечном итоге он советует читателям стремиться к лучшему качеству кода.
TruStage, компания по страхованию жизни, столкнулась со значительным инцидентом в области кибербезопасности 10 июля 2026 года, при этом основные бизнес-функции оставались частично доступными спустя месяцы. Компания все еще работает над выяснением масштабов взлома и не определила, какие данные были скомпрометированы или когда услуги будут полностью восстановлены. Были затронуты ее страховые операции, в то время как системы, поддерживающие кредитные союзы для банковских операций, остались работоспособными. Этот инцидент привел к многочисленным судебным искам и подчеркивает сложную посредническую роль в страховой отрасли.Страховой процесс часто включает в себя множество партнеров, таких как Ethos, которая использует ИИ для подбора клиентов и полисов, и Family First Life (FFL), которая сотрудничает с такими компаниями, как TruStage. Неспособность TruStage обрабатывать платежи из-за инцидента с кибербезопасностью приводит к аннулированию полисов. Это аннулирование приводит к потере комиссионных для агентов и обратным платежам для партнерских компаний, таких как Ethos и FFL.Президент FFL Шон Мейк публично раскритиковал Ethos на отраслевой конференции, назвав их "самым слабым звеном" в их партнерских отношениях и потребовав извинений. Публичное унижение Мейком сотрудника Ethos Дилана Каммингса рассматривается как особенно неловкий момент. Вся эта ситуация демонстрирует серьезный сбой в области кибербезопасности и аварийного восстановления со стороны TruStage, негативно влияющий на клиентов и создающий хаос в отрасли. В конечном итоге, инцидент выявляет институциональную некомпетентность TruStage и проблематичную бизнес-модель для стартапов в сфере страхования на базе ИИ, которые в значительной степени полагаются на одного эмитента.
Автор размышляет о стремительном развитии ИИ, отмечая переход от человеческих насмешек над ограничениями ИИ к будущему, где ИИ может высмеивать человеческие. Подборка юмористических наблюдений за прошедший год выделяет различные особенности и разочарования, связанные с ИИ. Тимоти У. кратко заявил: «Всё сложно», саркастически приветствуя владыки ИИ. Айнонимус сожалел о нежелательном распространении функций ИИ на их телефоне. Зверь в чёрном раскритиковал инструмент классификации изображений ИИ, утверждая, что ему не хватает интеллекта. Мариус Б. поделился забавным старым скриншотом странных предложений Бинга для «владельцев медведей». Оливье указал на забавную ошибку перевода ИИ, где ИИ предложил помощь, но затем запросил базовую информацию. Общее настроение — это забавное и лёгкое недоумение по поводу нынешнего состояния ИИ и его быстрой эволюции. Эти анекдоты запечатлевают момент времени, когда ИИ одновременно впечатляет и комично несовершенен. Юмор возникает из неожиданного поведения ИИ и развивающегося взаимодействия человека и ИИ.
CdXz5zHNQW_E0zl3oCQqd.png
Автоформатирование кода является стандартной и необходимой практикой для поддержания читаемости. Нет никаких веских причин не использовать какую-либо форму автоформатирования, будь то встроенная в редактор или запускаемая как шаг сборки. Даже многие IDE, такие как Visual Studio, весьма активно автоматизируют этот процесс. Это делает пример кода из старого приложения ASP.Net особенно озадачивающим. Функция Page_PreInit полностью содержится в одной строке, сразу за ней следует объявление Page_Load. Такое форматирование вызывает значительную путаницу относительно того, где вызывается функция Logic(). Исходный разработчик также реализовал проверку пользовательского агента на наличие "Safari" в строке браузера. Если "Safari" обнаружен, Page.ClientTarget устанавливается в загадочное значение "uplevel". Это демонстрирует сочетание плохих соглашений об именовании, проверки пользовательского агента и использования строк там, где могли бы быть более уместны перечисления. Наиболее тревожным аспектом является то, что этот проблемный шаблон повторяется на нескольких страницах приложения. Это говорит о том, что разработчик намеренно выбрал этот запутанный и нечитаемый стиль и считал его жизнеспособным решением для повторного использования.
Скрипт предназначен для вывода всех активных пользователей Active Directory и времени их последнего входа, но использует неэффективный и запутанный подход. Он перебирает каждую букву алфавита для фильтрации учетных записей пользователей, что не гарантирует полной алфавитной сортировки. Для каждой буквы создается новый объект DirectorySearcher, явно запрашивается только свойство 'name', а затем находятся все соответствующие учетные записи.Впоследствии, для каждого полученного имени скрипт создает еще один DirectorySearcher. Этот новый поисковик используется для запроса конкретной учетной записи пользователя с целью получения всех ее свойств. Хотя для поиска по имени пользователя ожидается только один результат, используется метод FindAll(), возвращающий массив.Это требует ненужного цикла для перебора массива из одного элемента. Наконец, выводится имя пользователя и время последнего входа, объединенные запятой. Дизайн скрипта крайне неэффективен из-за повторного создания поисковиков, избыточных запросов и нелогичного метода фильтрации. Несмотря на недостатки, его способность генерировать CSV для менеджеров делает его "критически важным" в организации.
Грета, работая в старой среде разработки на Pascal, столкнулась с ошибкой, из-за которой ее программа сообщала о несуществовании файлов, несмотря на их наличие. Она отследила проблему до функции FileExists из системной библиотеки. Эта функция полагается на FileAge, которая извлекает временную метку последней модификации файла. FileAge, в свою очередь, использует FileTimeToDosDateTime для преобразования форматов времени. Критическая ошибка заключается в том, как FileAge обрабатывает возвращаемое значение FileTimeToDosDateTime. FileTimeToDosDateTime возвращает булево значение для индикации успеха или неудачи и устанавливает код ошибки при неудаче. Однако FileAge не проверяет это булево возвращаемое значение. Если FileTimeToDosDateTime терпит неудачу, FileAge продолжает возвращать -1. Следовательно, FileExists интерпретирует это -1 как отсутствие файла. Первопричиной конкретной ошибки Греты было то, что процесс, записывающий файлы, не устанавливал "время последней записи". Без действительного времени последней записи FileTimeToDosDateTime терпит неудачу, заставляя FileAge возвращать -1, и таким образом FileExists ошибочно сообщает об отсутствии файла. Это подчеркивает распространенную проблему в системных библиотеках, где незначительные ошибки в обработке ошибок приводят к значительным функциональным сбоям.
Текст освещает несколько случаев, когда "ноль" представлен в негативном или невыгодном контексте. Дмитрий К. получил от The North Face "страшную синюю кнопку", что подразумевает вознаграждение в виде ничего. Ренан выражает разочарование 0% скидкой на Final Fantasy от Steam. Рейнир Б. жалуется, что нидерландские железные дороги должны ему 2,25, но заявляют, что возврат произойдет "около 0", что вызывает путаницу. Филип считает свои отношения с Office Depot невыгодными, так как на его счету 0 долларов после закрытия местного филиала компании. Баллы вознаграждения в приложении для поездок анонимного пользователя истекут в эпоху Unix, фактически став бесполезными. Эмили, столкнувшись со сложным преобразованием баллов вознаграждения, задается вопросом, не останется ли у нее -0,01 балла, подчеркивая разочаровывающий характер этих расчетов. Общая тема заключается в том, что ноль часто означает отсутствие, истечение срока действия или запутанные финансовые сценарии. Эти примеры иллюстрируют, как нулевое значение может восприниматься как недостаток, а не как нейтральный или положительный результат. Разнообразие ситуаций подчеркивает общую неудовлетворенность невыгодными вознаграждениями.
CdXz5zHNQW_L7qyl0OcGp.jpeg
Тип записи CAA в DNS позволяет владельцам доменов указывать, какие эмитенты сертификатов уполномочены выдавать сертификаты для их домена. Изначально определенный в RFC6844 и позже обновленный в RFC8659, основная концепция остается прежней. Ключевой особенностью записей CAA является флаг "Issuer Critical", предназначенный для того, чтобы эмитенты проверяли запись перед выдачей сертификата.Этот критический флаг был разработан как бит 0 маски битов флагов, что означает, что для его включения следует использовать значение 128. Однако распространенное недопонимание привело к тому, что многие использовали значение 1, интерпретируя бит 7 как критический флаг. Это неверное толкование широко распространено среди пользователей, которые не читали RFC внимательно.Эмитенты сертификатов, такие как Let's Encrypt, столкнулись с дилеммой: строго придерживаться спецификации и отклонять некорректно настроенные записи, или учитывать распространенную ошибку, чтобы сохранить функциональность. Они выбрали последнее, фактически приняв значение 1 как псевдоним для критического флага. Это решение признает практическую реальность пользовательских ошибок в ущерб строгому соблюдению первоначальной спецификации.Представленный фрагмент кода на Go для filterCAA демонстрирует, как это обрабатывается на практике. Он фильтрует по тегам "issue" и "issuewild", а также проверяет наличие неузнанных критических тегов. Примечательно, что код проверяет, установлен ли флаг в 128 (правильное значение) или 1 (часто используемое, неправильное значение), чтобы определить, присутствует ли неузнанный критический тег. Эта инклюзивность обоих значений отражает учет распространенной пользовательской ошибки в отношении критического флага.Автор ставит под сомнение целесообразность использования масок битов для таких флагов, когда это приводит к путанице и ошибкам, предполагая, что более простые механизмы флагов могли бы быть более читаемыми и менее подверженными ошибкам. Признавая полезность масок битов, этот анекдот подчеркивает, как их сложность может привести к значительным операционным проблемам в реальных реализациях. Взаимодействие между техническими спецификациями, пониманием пользователей и практической реализацией является повторяющейся темой.
Вала — это язык программирования, разработанный для Gnome, с функциями, похожими на C#, и производительностью, близкой к C. Он поддерживает асинхронное программирование с семантикой async/await, позволяя функциям передавать управление. Многие функции библиотеки ввода-вывода в Вала являются асинхронными, например, make_directory_async. Однако в основной библиотеке отсутствует асинхронная версия create_directory_with_parents, которая синхронно создает цепочки каталогов. Это упущение, вероятно, связано со сложностью обработки асинхронных состояний гонки. Автор, Эри, столкнулся с этой проблемой и реализовал собственное асинхронное решение. Первоначальный подход Эри заключается в попытке создания каталогов от конечного узла вверх, собирая недостающие родительские каталоги в массив. Затем он проходит по этому массиву в обратном порядке для создания каталогов. Этот метод считается неэлегантным, поскольку использует обработку исключений для управления потоком. Эри признает сложность проблемы, особенно управление асинхронными состояниями гонки. Представлена немного улучшенная версия основного цикла, но подход остается сложным. Несмотря на свою неуклюжесть, решение Эри эффективно устраняет недостающую функциональность библиотеки. Автор предполагает, что реализованная функция должна быть скрыта после того, как она будет работать правильно.
Автор, приближаясь к пенсии, получил предложение о работе в области специализированного программного обеспечения с отличной зарплатой. Процесс адаптации сначала был медленным, первые шесть месяцев ушли на ожидание доступа. Интервьюер, Фред, был высококвалифицированным специалистом и нашел общий язык с автором. Фред поручил автору проанализировать основное программное обеспечение компании, чтобы понять его и, возможно, модернизировать.Не успел автор представить свои выводы, как Фред неожиданно скончался. Это событие вызвало хаос в компании, и подрядчики, такие как автор, были в значительной степени забыты. В течение следующих восемнадцати месяцев автора в основном игнорировали, а время он использовал для создания среды разработки. В этот период он работал вместе с коллегой, который постоянно критиковал руководство.Новый менеджер автора был враждебен и пренебрежителен, неохотно давая задания. Казалось, компания состояла из пожилых сотрудников, защищающих свою систему, и новичков, пытающихся внедрить автоматизацию, что было нежелательно. В этот застойный период автор вносил свой вклад на сайт TDWTF. В итоге автора уволили, без обид с его стороны. Теперь он работает почтальоном последние несколько лет перед выходом на пенсию. Автор подчеркивает, что риск умереть от стресса, связанного с работой, является реальной опасностью.
CdXz5zHNQW_tmcjJ0Qed6.jpeg
В этом тексте обсуждается создание предметно-ориентированного языка (DSL) для определения спецификаций "источника". Эти спецификации включают в себя функции и иерархические шаги, подобно сложной грамматике. Вместо использования XML со схемами для лучшей структуры и ясности, предыдущая реализация выбрала менее надежное решение. Было создано правило XML-схемы, которое полагалось на обширное регулярное выражение для проверки данных. Это длинное регулярное выражение, состоящее из 1310 символов, предназначалось для обеспечения соблюдения грамматических правил. Автор подчеркивает, что такой подход оказался проблематичным и привел к ошибкам. Одна конкретная ошибка потребовала исправления, и автор с юмором ссылается на негативные последствия таких сложных регулярных выражений. Оригинальная грамматика вместе с правилами ее проверки представлена на английском и немецком языках. В тексте предполагается, что более структурированное представление XML с надлежащими схемами было бы лучшим, более поддерживаемым подходом. В конечном итоге попытка "сэкономить труд" с помощью сложного регулярного выражения оказалась неэффективной и подверженной ошибкам.
Редактор признает личную ошибку в запоминании дат, побуждая читателей поделиться похожими "календарными сбоями" с различных веб-сайтов. C_Chell столкнулся с проблемой ввода даты на IHG.com, что помешало завершить форму для дат прибытия в отель. Dragoncoder047 сообщил об ошибке "У вас осталось -1 месяц(ев) для заказа!" от GradImages, компании, уже известной плохим обслуживанием и навязчивыми письмами. Майкл Р. обнаружил проблему "дизайна пользовательского интерфейса времени Стэнстеда", показывающую время "00:06 завтра" для прибытия, что подразумевает временной парадокс. Кроме того, Майкл Р. отметил "Навигационную путаницу" на веб-сайте аэропорта Стэнстед. Наконец, Slaoput выделил форму, в которой было заявлено "Дата рождения не обязательна", но затем она стала обязательным полем при отправке. Эти анекдоты иллюстрируют общую тенденцию проблем с дизайном и функциональностью веб-сайтов, особенно в отношении обработки дат и времени.
CdXz5zHNQW_wgjGOXc7mY.png
Системы «мини-сплит» пользуются популярностью при модернизации старых домов благодаря своей экономичности и энергоэффективности, однако их зависимость от ИК-пультов дистанционного управления затрудняет интеграцию с системами домашней автоматизации. Частая проблема возникает из-за логики преобразования температуры в этих системах, особенно при пересчете между градусами Цельсия и Фаренгейта. Проект с открытым исходным кодом, направленный на интеграцию мини-сплит-систем в системы домашней автоматизации, выявил несовершенство метода преобразования температуры.В коде проекта используются таблицы перевода для преобразования из градусов Цельсия в градусы Фаренгейта и наоборот. Эти таблицы содержат конкретные, зачастую неточные сопоставления, что приводит к расхождениям по сравнению со стандартными формулами преобразования. Например, 18 °C неверно сопоставляется с 65 °F вместо более точного значения 64 °F (при округлении). Структура этих таблиц поиска свидетельствует о попытке приблизительного преобразования, а не о точных математических вычислениях.Изначально автор полагал, что это была наивная оптимизация, характерная для любительского проекта, но комментарий в коде поясняет, что речь идет о «прямых сопоставлениях, основанных на данных пульта». Это указывает на то, что неточности происходят из самого пульта дистанционного управления. Вероятно, пульт использует таблицы пересчёта из-за ограничений встроенного микроконтроллера, который, возможно, не способен эффективно обрабатывать вычисления с плавающей запятой.Следовательно, когда пользователь устанавливает на пульте температуру, например, 72F, пульт внутренне преобразует её в приблизительное значение в градусах Цельсия (например, 22,5C) перед отправкой команды на устройство. Это приближение, хотя и «достаточно хорошее» в большинстве случаев, создаёт несоответствия при точной автоматизации. По мнению автора, основная проблема заключается не в коде этого любительского проекта или в самом пульте, а в том, что во всем мире по-прежнему используются нестандартные единицы измерения (Фаренгейт), что вынуждает прибегать к таким неточным преобразованиям.
Рэйчел присоединилась к новой команде, где ее начальник, Зейн, настаивал на подходе, основанном на метриках, сфокусированном на максимизации производства виджетов при минимальных затратах. Автоматизированная производственная линия включала сложное программное обеспечение, изменения в котором проверялись только в реальном производстве из-за ограничений тестирования. Первоначальной задачей Рэйчел было обновление дашборда метрик в Google Sheets, который извлекал данные из шести баз данных, несмотря на то, что пользователи всегда предпочитали Excel. Команда отслеживала только выходные метрики, такие как "количество произведенных виджетов за единицу времени", без подробных данных для объяснения поведения системы или узких мест. Например, автоматический сканер контроля качества не записывал причины отклонения виджетов и даже количество отклоненных изделий напрямую.Изменения в программном обеспечении оценивались по общим выходным метрикам, что затрудняло проверку, поскольку эти метрики были "шумными" и подвержены внешним факторам, не связанным с самим программным обеспечением. Попытки Рэйчел внедрить изменение для записи отклоненных виджетов изначально были затруднены регрессиями метрик, вызванными экологическими проблемами, а не ее кодом. Простые изменения могли занимать недели для проверки из-за ограниченного количества тестовых запусков и необходимости учитывать регрессии метрик. Рэйчел начала добавлять инструментарий в код для сбора более подробных данных, надеясь построить полезную модель системы.Однако Зейн оставался одержим немедленными улучшениями ключевых выходных метрик. Он отвергал ценность сбора данных для понимания того, почему эти метрики вели себя так, как они вели, заявляя, что такие диагностические данные не являются "ключевыми метриками". Это создало фундаментальный конфликт между желанием Рэйчел понять систему и сосредоточенностью Зейна на основных показателях эффективности. Рэйчел нашла компромисс, гарантируя, что любые изменения, которые она вносила для улучшения основных метрик, также включали инструментарий для объяснения поведения изменения. Эта стратегия позволила ей как удовлетворить требования Зейна по улучшению метрик, так и постепенно повысить наблюдаемость системы. В конечном итоге, понимание сложной системы оставалось низким приоритетом по сравнению с продвижением основных метрик без всестороннего понимания их движущих сил.
Бразильской компании-разработчику программного обеспечения было поручено создать цифровую систему для полиции до Чемпионата мира по футболу 2014 года. Проект был значительно недооценен для имеющейся инженерной команды, требуя нереалистичных сроков. Руководство наняло множество неквалифицированных сотрудников, создав "проблему человеко-месяцев". Чтобы компенсировать это, инженеров заставили работать в режиме интенсивного аврала, проводя чрезмерно долгие часы, чтобы уложиться в срок. Предложенная функция для граждан по отправке фотографий происшествий получила прозвище "энциклопедия пик-пик" и была сочтена слишком рискованной. Критическая система отслеживания полицейских автомобилей страдала от ошибки, связанной с ненадежными сотовыми соединениями в фавелах. Отладка этой проблемы включала в себя рискованную поездку в опасном районе. В конечном итоге, поставленная система оказалась ниже стандартов и превысила бюджет. Компания столкнулась с судебными исками по этому и другим подобным проектам, едва не обанкротившись. Рассказчик покинул компанию из-за неоплаченных сверхурочных и проблемной реализации проекта.
CdXz5zHNQW_Y9omGHV0Uz.jpeg
В этом посте блога описывается проблемный PHP-код. Автор, работая в одиночку, делится им для катарсиса и черного юмора. Для обеспечения конфиденциальности код обобщен, что может привести к несоответствиям. Код извлекает данные, перебирает их и получает детали, используя динамический доступ к свойствам для локализации. Затем он форматирует затраты на основе переменной категории, обращаясь к массиву $mot с произвольными индексами. Присутствует обширная манипуляция строками HTML, включая генерацию блоков выбора количества. Код декодирует JSON для данных времени, указывая, что даты хранятся в виде строк. Списки раскрывающиеся создаются с использованием значений массива $mot. В конечном итоге обработанные данные вставляются в шаблон. Процесс повторяется для дочерних элементов, что приводит к почти дублирующемуся коду. Кроме того, дочерние элементы также могут иметь братьев и сестер, что требует еще одной итерации с аналогичной логикой кода. Автор выражает надежду, что первоначальный программист в конечном итоге научится использовать методы и функции. Предоставленный фрагмент кода демонстрирует начальный цикл извлечения и обработки данных для основных и дочерних элементов. Он включает сложную условную логику для расчета и форматирования затрат. Подчеркивается динамический доступ к свойствам для локализации и валюты. Также отмечается введение фрагментов HTML для выбора количества и времени. Повторяющийся характер кода для основных элементов, дочерних элементов и братьев и сестер делает кодовую базу неэффективной.
Предоставленный фрагмент кода на C++ демонстрирует обработчик исключений для исключения Deadlock. При перехвате этого исключения код пытается выполнить retry. Однако retry не является стандартным ключевым словом C++ и, скорее всего, является макросом. Автор предполагает, что этот макрос реализован с использованием оператора goto.Основная проблема заключается в предположении, что retry разрешит взаимоблокировку. Взаимоблокировка возникает, когда два или более потока бесконечно заблокированы, каждый из которых ожидает ресурс, удерживаемый другим. Чтобы retry был эффективным, он должен был бы освободить ресурс, удерживаемый в данный момент заблокированным потоком.По словам Кевина, автора кода, макрос retry не освобождает никаких ресурсов. Вместо этого он просто переходит обратно к началу блока catch. Это означает, что поток остается в состоянии взаимоблокировки.Кевин отмечает, что система уже страдала от многочисленных взаимоблокировок. Был нанят консультант для решения этих проблем путем изменения порядка доступа к ресурсам и выявления проблем, связанных с мьютексами. Реализация retry консультантом, по-видимому, непреднамеренно привела к большему количеству взаимоблокировок. Кевин в шутку предполагает, что консультант мог намереваться добавить свои собственные взаимоблокировки.
Отладка кода часто приводит к появлению в производственной среде странных и иногда бессмысленных выражений. Один из таких случаев связан с SQL-запросом, содержащим необычное условное предложение. Проблемная часть запроса выглядит так: WHERE (некоторые условия) AND (1 = 0 OR (1 = 1 AND (другие условия))). Такая структура позволяет переключаться между всегда возвращаемыми строками или возвращаемыми строками на основе основных условий, манипулируя частью "1 = 0". Также возможно настроить его так, чтобы он никогда не возвращал строки, хотя его полезность сомнительна. Автор предполагает, что это, вероятно, остатки отладочных флагов, которые так и не были удалены. Такие оставшиеся флаги указывают на недостаток наблюдаемости кода. Как и многие подобные флаги, они не документированы и, похоже, присутствуют с момента выпуска кода. Запрос, вероятно, возник как временный инструмент для аналитика, прежде чем стать постоянной хранимой процедурой. Наличие этих "мертвых" флагов указывает на более широкую проблему в практике разработки и развертывания.
Какистократия, правление худших и наименее квалифицированных, представлена как актуальная концепция. Учитель по имени Джаред Б. делится своим опытом работы в ed-tech компании, основанной профессором машиностроения по имени Гарри. Гарри разработал интерпретатор C и построил вокруг него компанию, предлагая учебные программы для K-12 на основе программирования на C. Его программное обеспечение включало веб-IDE и локальную версию для Windows с демоном для удаленного выполнения кода C.Однако этот демон не имел аутентификации и был привязан к 0.0.0.0, что позволяло любому домену или компьютеру в той же сети выполнять произвольный код C. Эти критические уязвимости безопасности существовали годами, незамеченные исключительно нанятыми Гарри разработчиками из числа аспирантов. Программное обеспечение было установлено на тысячах школьных компьютеров.Джаред сообщил об этих проблемах Гарри, который выпустил обновление, сославшись на "улучшения безопасности", но не проинформировал IT-руководителей о важности обновления. Джаред также обнаружил эксплойт для кражи файлов cookie и уязвимость внедрения кода на другом сайте Гарри. Последняя уязвимость раскрыла тысячи незашифрованных записей о транзакциях по кредитным картам. Несмотря на эти значительные недостатки безопасности и утечки данных, компания Гарри продолжает работать и получила признание. Комментатор противопоставляет эту ситуацию человеку, которого он знал, который застрял на устаревших технологиях, но не подвергал опасности образовательную систему.
CdXz5zHNQW_B1k6IsjyP4.png
Автор противопоставляет разочарования от плохой документации к программному обеспечению еще большим трудностям, связанным с плохо написанными техническими описаниями аппаратного обеспечения. Нахождение точной и полной документации для интегральных схем имеет решающее значение для разработчиков. Технические описания часто бывают неполными, неточными или даже на разных языках. Сложность современных чипов требует подробных технических описаний, но некоторые поставщики предоставляют недостаточную информацию, вынуждая пользователей проводить обратное проектирование функциональности. Расхождения между техническими описаниями и фактическим поведением чипа могут привести к критическим ошибкам, таким как неправильное определение выводов питания и повреждение компонентов. Хотя некоторые поставщики производят превосходные технические описания, соображения стоимости в области встраиваемых систем часто приводят к плохо документированному аппаратному обеспечению. Автор рассказывает о конкретном случае, когда в техническом описании чипа был описан "Регистр включения суперпользовательской фантастической функции". Этот регистр был с юмором сокращен до "SUFFER" (страдать), отражая опыт разработчика с трудными встраиваемыми проектами. Включение этой функции предназначалось для опытных пользователей, чтобы изменять поведение отладки. Значение сброса для этого регистра было всеми единицами, что указывало на то, что он был включен по умолчанию. Название регистра "SUFFER" точно отражает ощущение от работы с такой сложной документацией.
Matlab предпочитают ученые и исследователи, но многие программисты его не любят. Команда, использующая Matlab, столкнулась с проблемой генерации изображений, специфичных для участников, для хранения и последующего использования. Существующие ограничения затрудняли выполнение этой задачи в их текущей конфигурации. Программист по имени Джуд предложил обходной путь для решения этой проблемы. Предоставленный код Matlab предназначен для обработки данных экспериментальных триггеров. Он использует оператор switch внутри цикла for для перебора различных типов триггеров. Код пытается реконструировать предполагаемый шаблон, подсчитывая стимулы и обрабатывая различные сценарии ответов и отсутствия ответов. Комментарии в коде подчеркивают сложную логику и потенциальные проблемы с повреждением данных. Один комментарий явно упоминает пометку целых испытаний для удаления из-за неопределенности в отношении правильности данных. Было обнаружено, что значительная часть предоставленных журналов представляла собой различные, неизвестные эксперименты.
Автор описывает миграцию данных с одной платформы Microsoft на другую, которая столкнулась с неожиданной проблемой. Изначально извлечение и загрузка данных выполнялись с помощью SSIS, но автор переключился на PowerShell для большего контроля. Целью была миграция документов клиентов и метаданных из SharePoint on-premises в базу данных SQL Server. Ключевое поле, номер клиента, хранилось в SharePoint как тип Number. В SharePoint поля типа Number представлены как Double, что достаточно для точного хранения десятизначных чисел. Однако, сгенерированная SSIS схема SQL Server использовала тип данных 'float' для этого поля. Автор ошибочно предположил, что тип '.Net' 'float' в их скрипте PowerShell идеально совпадет с типом 'float' SQL Server. Это несоответствие произошло потому, что 'float' в SQL Server по умолчанию имеет двойную точность, но автор не осознал эту разницу в представлении. В результате, при передаче и преобразовании чисел, большие номера клиентов теряли последние несколько цифр из-за потери точности. Хотя тестировщики сначала не заметили ошибку, она была обнаружена во время полной загрузки данных. Команде пришлось идентифицировать поврежденные номера и вручную исправлять их после миграции.
CdXz5zHNQW_ElgNsoYbYY.jpeg
Разработка программного обеспечения требует различных вспомогательных инструментов, помимо редакторов и компиляторов. Система контроля версий является ярким примером такого необходимого инструмента. Однако многие важные инструменты разработки, возможно, не являются "хорошими", а лишь "достаточно хорошими". Системы сборки — одна из таких категорий, в которой отсутствуют по-настоящему превосходные варианты. Инструменты управления задачами и тикетами также попадают в эту проблемную категорию, причем Jira является особенно критикуемым примером. Привлекательность Jira для компаний заключается в ее обширных функциях, которые, к сожалению, приводят к сложности и требуют от пользователей программирования пользовательских рабочих процессов. Это может привести к бесконечной настройке со стороны менеджеров проектов вместо фактического прогресса по проекту. Jira позволяет определять рабочие процессы тикетов как конечные автоматы, включая автоматическую маршрутизацию между членами команды. Далее текст знакомит с Клинстеном, который столкнулся со сложным рабочим процессом Jira. Отображаемый пример рабочего процесса является двуязычным (голландский и английский) и чрезмерно сложным. Такое избыточное количество состояний и переходов подрывает его цель по упорядочиванию работы для команды. Автор выражает разочарование, сравнивая этот опыт с желанием закрыть вкладку браузера. Сложность рабочего процесса Клинстена затрудняет его понимание и эффективное использование.
CdXz5zHNQW_LSUkNG7WkF.png
CdXz5zHNQW_uBCiJ4y90s.jpeg