11471

Мистика-нна!

Вдохновили суровые люди, ломающие кнопки и замыкающие провода, как угонщики «жигулей».

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

— У меня ничегонеработаетвсётормозит-нна!

И да, суффикс в каждой такой фразе — «-нна!», а точка — пинок ногой в бочину системника, вполне слышимый в телефоне. И соответствующая вмятина.

День админа, пиво, хорошее настроение… Звонок:

— А вот у меня, #$%&, вы там все @#$ &*%$@#-нна!

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

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

Все «потерпевшие-нна» пару дней забавлялись «отучением строптивого». В переговорке висел проектор с видеонаблюдением зоны. Собирались с чаем. Нет, это было как в ЦУПе при получении сигналов с лунохода!

Ноут, на нём юзерский десктоп. Прибиваю дистанционно любимую «косынку» или «контактик». «Нна-а-а!» — и пинок системника в бок на большом экране. Го-о-ол! Нет, ресет. Пять минут высококачественного смеха продлевают жизнь… не помню, на сколько. Внимание на малый экран. До следующего витка осталось… Логон, «косынка». 3… 2… 1… На большом: «Нна-а-а!»

Отучили. Долго АХОшник не мог понять, что это вдруг стало с беззащитными корзинами. Показали. Но это уже другая история.

11470

Кривые руки на высшем уровне

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

Начнём с простого. Главная страница правительства США. Не-ет, я не преувеличиваю — usa.gov на главной странице имеет глупый баг. Есть секция новостей. Там должно быть три новости. Есть стрелочки влево-вправо, переключатель новостей внизу на три позиции. А вот новости всего две. Если мы нажимаем на третью позицию переключателя, тот показывает нам пустоту и не позволяет вернуться каким-либо способом, кроме F5. О, а как замечательно отрисовывается этот переключатель в трёх браузерах! Один рисует сразу три состояния кнопки, другие два рисуют картиночку со смещением. Вот уж действительно — сократили бюджет страны, денег даже на хорошего веб-программиста или тестера не нашлось.

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

В связи с этим у меня возникает целый ворох вопросов. В чём причина такой жести? Кривое ТЗ? Узкие сроки? Или просто повсеместная скорость внедрения «принципиально новых технолагий» в продукт? Или просто концентрация криворуких?

11469

Бьёт — значит чинит

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

Бах!

Гулкий хлопок двери заставляет всех отвлечься от своих дел. В комнату врывается фурия — волосы дыбом, лицо перекошено, в руке старенький мобильник японо-шведского гения. Помещение моментально наполняется отборной бранью, из которой становится ясно, что у несчастного телефона «цифры, %$№*@, не нажимаются!» после того, как один из обитателей комнаты позвонил с него прошлым вечером. И, судя по активной жестикуляции, виновный будет покаран именно полурабочим аппаратом — уж больно похож он на оружие пролетариата, воинственно воздетое над головой, да и фанатичный блеск в глазах дамочки не оставляет надежды на спасение…

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

— Проверяй. Работает? — хрипло интересуется заспанный голос.

Клац. Клац. Клац-клац-клац.

— Да-а! А…

— Ещё раз так влетишь в дверь — вылетишь в окно. Всё, свободна!

Дверь закрывается с тихим щелчком. Идиллия постепенно восстанавливается.

— А что с телефоном её было?

— Шлейф клавиатуры отошёл. Ставится на место лёгким ударом. А теперь я хочу досмотреть сон.

Идиллическая атмосфера вновь окутывает комнату.

11468

Грустная вавилонская башня

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

Проджект-лиды озабочены выполнением процессов, скопированных у тех, кому методология помогла, зачастую без учёта собственной специфики и существующих процессов. Получасовые скрам-митинги из 15 человек, где каждый в красках описывает, как он ковырял в носу или выбирал себе цацки на Amazon. Проджект-лиды, заинтересованные только в том, чтобы таски в Jira были закрыты вовремя, без учёта качества работы. Что бы тест-кейсы были «зелёными» без учёта качества этих самых тестов. Юнит-тесты, состоящие из одной строчки «ОК».

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

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

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

Но ведь у всех таски закрыты, тесты пройдены и баг-трекер чист. Никто не виноват, наверное.

11467

Недержание тонера, или ПЕЧА-А-АТЬ!

В личный ящик на работе пришло письмо в обход системы заявок в IT-отдел:

На компьютере WS-0235 не выполняется команда «Печать», прошу устранить неполадку.

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

Сразу вспомнился один из выпусков «Ералаша», в котором мальчик с собакой приходит к ветеринару с жалобой, что питомец у него не реагирует на команды, а вместо этого «писается, а иногда даже какается…» Далее по сюжету доктор просит мальчика что-нибудь скомандовать собачке, и тот нечеловеческим голосом орёт: «ЛЕЖА-А-АТЬ!», после чего доктор вместе с собачкой делают под собой лужу.

Так вот, у принтера, подключённого к указанному в письме компьютеру, внезапно случилась ошибка переполнения бункера с отработанным тонером…

11466

Недолгий полёт терабайтов

Сегодня был побит рекорд скорости передачи данных и ширины канала.

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

Многоуважаемые коллеги! Прошу вас: коли вы берётесь устанавливать серверные шкафы, хотя бы не смещайте центр тяжести на самый перед. Хотя бы из уважения к данным!

11465

Здесь так заведено

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

Когда-то давно руководство заказывает разработку:

— Нам нужна программа, как в Экселе, только не в Экселе, а с кнопочкой «Сделать хорошо».

Разработчики делают, люди пользуются, но тут возникает новая задача:

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

Разработчики делают, люди пользуются, но тут новая доработка:

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

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

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

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

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

11464

Не волшебник, но спасибо

Пишу из далёкой и уже не такой прекрасной Швейцарии.

— Добрый день, компания %myCompanyName%, слушаю вас!

— Здравствуйте, %fullName% из %companyName%.

— Да, слушаю вас.

— У меня не работает сканер!

Стараюсь поднапрячься и использовать свой максимальный телепатический потенциал.

— Что именно у вас не работает?

— Я не знаю, он раньше сканировал, а теперь не сканирует…

Глаза уже вываливаются из орбит от напряжения, но мозг не пингуется.

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

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

— Вы его подключили?

— Ой… Я забыл…

Решаю не комментировать: похоже, что клиент и сам застыдился. Спрашиваю:

— У вас есть ещё какие-нибудь вопросы или проблемы в моей сфере деятельности?

— Да, я хотел бы изменить папку, куда сохраняются сканы.

Захожу в опции на этот раз удачно установленного сканера. Открываю папку, где хранились сканы, чтобы их потом перекинуть в новую, а то не сообразит ведь…

— Ой, не смотрите, я неправильно их отсканировал, мне они не нужны!

— Почему? — искренне удивляюсь, смотря на сканы по 2,5 МБ.

— Ну видите, они вверх ногами! — клиент намекает на мою тупость и неосведомлённость.

Молча открываю сканы в Виндоус-фото и жму на кнопку «перевернуть на 90°» дважды.

— Как вы это сделали?!

— Просто нажмите на… — объясняю.

— Да вы волшебник, спасибо вам большое!

— Не за что, удачного дня.

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

11463

Облачно, возможны взрывы

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

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

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

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

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

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

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

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

11462

Как русская «с»

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

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

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

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

Раньше таких проблем не было. В шоке перерыли всё, но ничего не отыскали. Я написал скриптик для проверки страницы, метатегов и контента, который искал ключевые слова и выдавал процент соответствия. Скрипт сообщил, что ключевое слово не совпадает с названием страницы и названием товара. Зашёл вручную, проверил — всё окей…</p><p>Через неделю оказалось, что менеджер клиента умеет добавлять товары, категории, информационные страницы, но вот изменить порядок сортировки не способна. В движке категории и товары по умолчанию сортируются по алфавиту. Чтобы нужный ей товар (или категория) находился выше всех, она меняла кириллические символы на латинские.</p><p>Мы были в шоке. Теперь в софте появилась новая проверка.</p> </div> <div class='actions'> <div class='button-group like'> <button class='button vote-btn' data-story-id="11462" onclick="vote(this)"> <i class='fas fa-thumbs-up'></i> <div class='rating'>1042</div> </button> </div> </div> </div> <div class='nav nav-bottom'> <div class="nav-common"> <ul> <li class="prev"><a href="/page/193.html">Назад</a></li> <li class="current">194</li> <li class="next"><a href="/page/195.html">195</a></li> <li class="secondary"><a href="/page/196.html">196</a></li> <li class="secondary"><a href="/page/197.html">197</a></li> <li class="last"><a href="/page/1220.html"><span>В конец</span></a></li> </ul> </div> </div> </div> <div class='sidebar'> <div class='section'> <h3><a href="/tags">Темы историй</a></h3> <ul class='cloud' id='cloud'> <li class="tag7" data-count="1216"><a href="/tag/hardware.html">железо</a></li> <li class="tag7" data-count="1116"><a href="/tag/sysadminish.html">сисадминское</a></li> <li class="tag7" data-count="1102"><a href="/tag/lulsers.html">юзвери</a></li> <li class="tag7" data-count="970"><a href="/tag/women.html">прекрасный пол</a></li> <li class="tag7" data-count="900"><a href="/tag/programmism.html">программизмы</a></li> <li class="tag7" data-count="862"><a href="/tag/nonenlightened.html">неспециалисты</a></li> <li class="tag7" data-count="856"><a href="/tag/windows.html">windows</a></li> <li class="tag7" data-count="832"><a href="/tag/thoughts.html">мысли о вечном</a></li> <li class="tag7" data-count="808"><a href="/tag/fuckups.html">факапы</a></li> <li class="tag7" data-count="796"><a href="/tag/software.html">программы</a></li> <li class="tag7" data-count="725"><a href="/tag/education.html">образование</a></li> <li class="tag7" data-count="704"><a href="/tag/support.html">саппорт</a></li> <li class="tag7" data-count="634"><a href="/tag/misunderstanding.html">взаимонепонимание</a></li> <li class="tag7" data-count="615"><a href="/tag/internet.html">интернет</a></li> <li class="tag7" data-count="612"><a href="/tag/strangetech.html">чудеса техники</a></li> <li class="tag7" data-count="607"><a href="/tag/linux.html">linux</a></li> <li class="tag7" data-count="587"><a href="/tag/pranks.html">розыгрыши</a></li> <li class="tag7" data-count="557"><a href="/tag/longago.html">давным-давно</a></li> <li class="tag7" data-count="555"><a href="/tag/providers.html">провайдеры</a></li> <li class="tag7" data-count="520"><a href="/tag/games.html">игры</a></li> <li class="tag7" data-count="508"><a href="/tag/network.html">сеть</a></li> <li class="tag7" data-count="483"><a href="/tag/service.html">техсервис</a></li> <li class="tag7" data-count="478"><a href="/tag/boss.html">начальство</a></li> <li class="tag7" data-count="454"><a href="/tag/datastorage.html">носители данных</a></li> <li class="tag7" data-count="406"><a href="/tag/idiots.html">идиоты</a></li> <li class="tag7" data-count="393"><a href="/tag/cables.html">кабели</a></li> <li class="tag7" data-count="377"><a href="/tag/officetech.html">оргтехника</a></li> <li class="tag7" data-count="342"><a href="/tag/security.html">безопасность</a></li> <li class="tag7" data-count="342"><a href="/tag/webdev.html">веб-разработка</a></li> <li class="tag7" data-count="339"><a href="/tag/only-in-russia.html">только в России</a></li> <li class="tag7" data-count="310"><a href="/tag/servers.html">серверы</a></li> <li class="tag7" data-count="297"><a href="/tag/buh.html">бухгалтерия</a></li> <li class="tag7" data-count="267"><a href="/tag/kids.html">дети</a></li> <li class="tag7" data-count="264"><a href="/tag/riggers.html">монтажники</a></li> <li class="tag7" data-count="259"><a href="/tag/virii.html">вирусы</a></li> <li class="tag7" data-count="246"><a href="/tag/retail.html">розница</a></li> <li class="tag7" data-count="243"><a href="/tag/greatpeople.html">великие люди</a></li> <li class="tag7" data-count="240"><a href="/tag/email.html">почта</a></li> <li class="tag7" data-count="235"><a href="/tag/keyboard.html">клавиатуры</a></li> <li class="tag7" data-count="219"><a href="/tag/displays.html">мониторы</a></li> <li class="tag7" data-count="219"><a href="/tag/telecom.html">связь</a></li> <li class="tag7" data-count="209"><a href="/tag/government.html">госконторы</a></li> <li class="tag7" data-count="192"><a href="/tag/indiancode.html">индийский код</a></li> <li class="tag7" data-count="187"><a href="/tag/compmice.html">мышки компьютерные</a></li> <li class="tag7" data-count="185"><a href="/tag/animals.html">животные</a></li> <li class="tag7" data-count="184"><a href="/tag/antivirus.html">антивирус</a></li> <li class="tag7" data-count="171"><a href="/tag/1c.html">1с</a></li> <li class="tag7" data-count="163"><a href="/tag/remoteadmin.html">удаленное администрирование</a></li> <li class="tag7" data-count="159"><a href="/tag/foreigners.html">иностранцы</a></li> <li class="tag7" data-count="154"><a href="/tag/db.html">базы данных</a></li> <li class="tag7" data-count="129"><a href="/tag/mac.html">mac</a></li> <li class="tag7" data-count="90"><a href="/tag/ups.html">ИБП</a></li> <li class="tag7" data-count="89"><a href="/tag/electricians.html">электрики</a></li> <li class="tag7" data-count="87"><a href="/tag/smarttech.html">умная техника</a></li> <li class="tag7" data-count="81"><a href="/tag/jamshooting.html">джамшутинг</a></li> <li class="tag7" data-count="75"><a href="/tag/banks.html">банки</a></li> <li class="tag6" data-count="33"><a href="/tag/unix.html">unix</a></li> <li class="tag5" data-count="25"><a href="/tag/freebsd.html">freebsd</a></li> <li class="tag5" data-count="22"><a href="/tag/immortal.html">классика</a></li> <li class="tag5" data-count="16"><a href="/tag/manuals.html">документация</a></li> </ul> </div> </div> </div> </div> <div class='footer'> <div class='wrapper'> <p> <span class='rated-18'>18+</span> </p> <p> <span><a href="/rss"><i class="fas fa-rss"></i> RSS</a></span> <span><a href="/about.html">О проекте</a></span> </p> </div> </div> <script src="/static/js/theme.js"></script> <script src="/static/js/like.js"></script> <script src="/static/js/nav.js"></script> <script> document.getElementById('submit-story-btn')?.addEventListener('click', function(){ var w = window.open('/submit', 'submit', 'width=600,height=700,scrollbars=yes'); if (!w) { location.href = '/submit'; } }); </script> </body> </html>