Любопытные извращения из мира ИТ — 3

Автор оригинала: http://thedailywtf.com
  • Перевод
Сайт The Daily WTF уже 14 лет собирает курьёзные, дикие и/или печальные истории из мира ИТ. Я перевёл несколько рассказов, показавшихся мне интересными. Все имена и названия компаний изменены. Предыдущие выпуски можно найти по метке "любопытные извращения".

image

История первая: «Не просто блестящая»


[Оригинал]

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

Он работал в Initech в небольшой группе разработчиков, создававших Windows-клиент для заказчиков, которые использовали его для взаимодействия со своим сервером. Компания решила портировать приложение с .NET на Java. Самое важное руководство порекомендовало на роль руководителя проекта глубокоуважаемую ведущую Java-разработчицу Кишу из Intelligenuity. «Не беспокойтесь», — сказало руководство. «Intelligenuity нанимает только самых блестящих программистов».

На первом совещании по проекту менеджер объявил, что для Java-проекта они будут использовать Eclipse. Киша заявила: «У меня нет Eclipse. Может кто-нибудь прислать?» Джарад отправил ей ссылку. На следующем совещании он спросил её, установила ли она Eclipse. Она ответила, что не смогла скачать среду, поэтому дождалась следующего совещания, чтобы попросить о помощи. Менеджер подбежал к её машине и решил проблему, нажав на ссылку для скачивания.

Перенесёмся к следующему совещанию: Киша сообщила, что не может продолжать работу, потому что «у Eclipse какие-то проблемы с JDK, может кто-нибудь мне его прислать?» Джарад снова прислал ей ссылку. Несколько дней спустя на следующем совещании она сказала: «Eclipse не работает, потому что ей нужен jar-файл, может кто-нибудь его прислать?» А после этого «Может кто-нибудь мне прислать код примера создания классов, потому что Eclipse постоянно сообщает о NullPointerException

Наконец, менеджер изменил структуру совещаний. Они продолжили свои обычные совещания по Windows-клиенту, но добавили отдельное специальное совещание только для Киши. Со временем выяснилось, что она с её мужем были друзьями очень высокопоставленного руководителя и его жены. Отдельное совещание провели для «обеспечения её успешной работы»; это означало, что менеджер команды писал за неё код.

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

Менеджер организовал совещание с участием клиента, его самого, Киши, Джарада и проект-менеджера, чтобы решить проблему раз и навсегда. В день проведения встречи клиент был удивлён количеству сотрудников техподдержки и менеджеров. Он объяснил: «Эм… „проблема с порталом“ заключалась в том, что я попросил у Киши URL веб-портала. Достаточно было отправить его письмом».

Иногда в этом мире бывает справедливость, и Киша в результате потеряла свою работу.

История вторая: «Трёхмесячный зуд»


[Оригинал]


В марте 2016 года Иэну нужна была работа. Почти сразу после начала поисков ему повезло: он нашёл крошечный стартап, нуждавшийся в работнике со знанием архитектуры Python и навыками проектирования. «Крошечный», потому что кроме Иэна в компании было всего три разработчика под руководством её основателя Джека.

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

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

Прошло две недели. Одним ранним сонным утром понедельника Джек пригласил свою команду разработчиков в переговорную. Яркий свет, бивший с его Powerpoint-презентации, обжигал сетчатку.

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

Иэн инстинктивно едва не произнёс «Что?!» Им придётся выбросить результаты двух недель работы. К тому же раньше часть, отвечающая за сбор данных, была совершенно необязательной.

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

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

Капитал инвесторов был потрачен на роскошный офис в деловом центре города; разработчики бесплатного приложения достойны только лучшего. Джек нанял второго iOS-разработчика, специалиста по data science и интерна.

«Но не давайте интерну никакой важной работы», — сказал Джек сотрудникам на полной ставке.

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

Три месяца спустя Джек выбросил всё в мусорное ведро. «Никаких приложений! Нам нужно новое направление развития!»

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

«Людям нравится говорить о себе», — сказал Джек. «Мы не должны им платить за то, что они дают нам свои данные!»

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

Можно уже догадаться, что случилось ещё через три месяца. Джек отказался от медленно развивавшегося веб-сайта в пользу Slack-бота, который должен был отвечать на команду "Play ${song} by ${artist}", находя композицию в Spotify и давая на неё ссылку. Виджет Spotify проигрывал бы 30-секундное превью или, если у пользователя есть аккаунт Spotify Premium — всю песню.

«И это всё? Как мы будем зарабатывать деньги?», — к этому моменту разработчики уже не сдерживались в своих претензиях.

«Подписка будет платной», — смело ответил Джек.

«За чат-бота?», — возразил Иэн. «Чтобы он работал полностью, пользователю и так нужен Spotify Premium. Если мы хотим, чтобы люди платили сверх этого, нужно дать им больше возможностей!»

«Мы разберёмся с этим позже», — ответил Джек.

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

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

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

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

История третья: «Конвейер бэкапов»


[Оригинал]

«Э-м-м… можешь взглянуть для меня на кое-что?»

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

«Думаю, у меня проблемы», — добавил Милтон.

Одной из основных внутренних систем компании был конвейер обработки данных. Возможно, слово «конвейер» можно считать преувеличением, потому что на практике это просто несколько shell-скриптов и программ Python, которые достают данные из файлов, выполняют операции с этими данными и сбрасывают результаты в другие файлы, считываемые затем другими скриптами. В процессе работы люди обычно брали последнюю версию скриптов из системы контроля версий, модифицировали и настраивали их таким образом, чтобы те давали ответ на конкретный вопрос, связанный с данными. Если казалось, что этот конкретный процесс мог обладать ценностью, то они подчищали код и снова добавляли его в систему контроля версий. Если же они считали, что код им больше не понадобится, то просто выполняли reset на HEAD.

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

«Я подумал, что стоит внести мои изменения в систему контроля версий», — сказал Милтон. «У меня был скрипт, вызываемый скриптом, который вызывался скриптом, и всё это зависело от кучи созданных shell-переменных, например $SETUP_DIR».

Пэт кивнула.

«Поэтому я захотел реорганизовать всё это в аргумент, чтобы кодом могли пользоваться другие люди. Я так и сделал… но перед тестированием забыл изменить вызывающие скрипты, чтобы они передавали аргумент».

В частности, скрипт Милтона содержал такую строку:

#!/bin/sh

rm -rf $SETUP_DIR/*/


Он выполнил её рефакторинг вот в такую строку:

#!/bin/sh

rm -rf $1/*/


Shell-скрипты не волнует существование этих переменных. У Милтона была среда, обеспечивающая постоянное существование $SETUP_DIR. Но $1 — это первый аргумент, и если не передать аргумент, то он будет пуст. Поэтому новый скрипт Милтона при запуске без аргументов разворачивался в rm -rf /*/, удаляя всё, к чему имела доступ его учётная запись.

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

«Это ведь можно как-то исправить?», — спросил Милтон.

«Ну да, конечно. Всё можно восстановить из твоего последнего бэкапа», — ответила Пэт.

Хотя на всех системах Windows был запущен автоматизированный инструмент для бэкапов, ни на одной системе Linux он настроен не был. Отдел поддержки посчитал, что если ты достаточно технически грамотен, чтобы работать с Linux и писать shell-скрипты, то тебе хватит знаний настроить собственную систему бэкапов. Специально для этой цели существовала доступная всем SAN.

«О, а я… так и не настроил бэкап», — прошептал Милтон. «Ну… по крайней мере, я ведь не выполнил push?»

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

История четвёртая: «Что такое плавающая точка?»


[Оригинал]

image

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

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

Олаф приступил к делу, намереваясь применить свои знания шаблонов проектирования. PHP легко изучить, но в нём трудно добиться мастерства; во многих примерах написанного на PHP ПО используются всемогущие объекты (god objects), а код перемешан с представлением — две серьёзнейшие ошибки, о которых, тем не менее, не говорится в большинстве онлайн-туториалов. Олаф начал отделять функцию от формы, создавать объекты, которые можно использовать многократно для минимизации копипастинга, и занимался другими подобными задачами, с радостью превращая хаос переданного ему кода в порядок.

И поэтому он очутился в офисе начальника, устроившего ему головомойку.

«Другие программисты этого не поймут!», — кричал босс. «Код слишком сложный. Зачем ты его меняешь? Он работает, нужно было оставить его!»

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

Олаф учился больше, чем его коллеги, но ни одно обучение не является всеобъемлющим. Ему быстро удалось определить, что это была математическая ошибка с плавающей точкой. Так как десятичные числа нельзя представить в двоичном виде с полной точностью, в граничных случаях возникали ошибки вычислений. Он начал искать правильные способы обработки десятичных значений в PHP. В отличие от Node или C#, внешние библиотеки в PHP подключать довольно сложно, потому что в этом языке нет встроенной поддержки управления пакетами. Он не мог разобраться, как добавить библиотеку, способную правильно выполнять математические действия. Так как ПО вычисляло только суммы, Олаф решил использовать целочисленную математику: считать значение, избавиться от десятичной точки (чтобы значение 10.50 $ представлялось в виде 1050), выполнить вычисления, а при отображении снова добавить десятичную точку.

Ещё одному из джуниоров понравилась эта идея. Сениор-разработчик одобрил её, но начальник наотрез отказался от предложения. Как же он это аргументировал? «Это не ошибка вычислений с плавающей точкой. Она возникает из-за слабой типизации PHP, программа пытается суммировать значения как строки, а не как числа».

(Для тех, кому любопытно: для конкатенации строк PHP не использует оператор "+". Вместо него используется ".". Результатом "hello " . "world" станет "hello world".)

В результате сениор-разработчик реализовал такое решение: отделить целую часть от дробной, чтобы 10.50$ превратились в 10.00$ и 0.50$, а затем суммировать каждую часть по отдельности.

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

image

История пятая: «Калькулируемая безопасность»


[Оригинал]

В конце 80-х Карл какое-то время работал в фирме по разработке ПО, которая занималась системами авионики и глобального позиционирования для военных и гражданских заказчиков. По рабочим делам он часто посещал Schlockdeed Corp — заказчика с контрактом на разработку нового поколения реактивных истребителей для американской армии. Из-за строгой секретности их работы очень важно было обеспечивать безопасность.

Каждый раз, когда Карл входил или выходил с предприятия, ему приходилось проходить через отдел службы безопасности. Там тщательно проверяли его портфель, куртку, коробку для ланча и почти всё, кроме полного исследования полостей тела. Несмотря на педантичность ежедневных проверок в Schlockdeed, некоторые их «меры безопасности» граничили с абсурдом.

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

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

Билл потянулся за рацией на плече: «Поли, ты нам нужен. У нас тут сложная ситуация». Карл очень растерялся. Неужели 41CX когда-нибудь использовали в бомбах? А может, это розыгрыш на первое апреля? «Сэр, нам нужно отправить вас к нашему CIO. Пройдёмте сюда», — сказал Билл.

Лицо Карла вспыхнуло, он пытался понять, какие проблемы у него возникли, ведь эти «проблемы» легко могут вылиться в наручники и тюремное заключение. Ещё он не понимал, зачем руководителю информационной службы (Chief Information Officer) проводить дополнительный осмотр. Билл привёл его в офис Поли, в котором находился дородный человек с усами в стиле 80-х. Табличка на его столе гласила, что это Calculator Inspection Officer.

«Приятель, мне нужно будет посмотреть на твою машинку для сложения», — сказал Поли, протянув руку. Билл передал ему HP-41CX. Поли внимательно осмотрел его и заявил: «Мне придётся его конфисковать. Видишь ли, в нём есть внутренняя память, поэтому его потенциально можно использовать для кражи секретов. В конце дня я его тебе верну, но даже не думай снова попадаться мне с этим!» Билл отвёл Карла обратно в главный отдел безопасности, уже без калькулятора.

По пути Билл объяснил, что программируемые калькуляторы строго запрещены в здании. Поли должен был следить за исполнением этой политики и относился к своей работе очень серьёзно. Если Карлу нужно было принести калькулятор, то допускались самые простые модели. После одобрения Поли на него наклеивался ярлычок AC (Approved Calculator), позволявший заносить калькулятор. Обескураженный потерей своего HP-41CX, он смирился с тем, что весь срок работы с Schlockdeed ему придётся дышать меловой пылью. Но, по крайней мере, у него есть «пропуск на носители» для свободного вноса и выноса флоппи-дисков.
Поддержать автора
Поделиться публикацией

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

    +8

    Lockheed, стало быть? Дешмоклёп, занятно.

      0
      Lockheed, стало быть? Дешмоклёп, занятно.

      Не обязательно, что отсылка на известную фирму означает, что история именно об этой фирме.
      На сферу деятельности отсылка — да.

      0
      Дешмоклёп
      Простите, это на каковском?
      upd: пардон, промахнулся мимо здесь.
        +1
        Schlock
        schlock сущ. | Вебстер | фразы
        общ. халтура
        амер., сл. дрянь; барахло
        сл. отстой (vogeler)

          0
          Вы уверены, что приведённое вами слово имеет хоть какую-то этимологическую связь с тем, которому дивился я? У меня в этом есть некоторое сомнения, хотя я и благодарен за ваш просветительский порыв.
            +12
            В статье есть аллюзия на название фирмы Lockheed — Schlockdeed. Это, в принципе, «халтуроляпство». Дешмоклёп (дешман + клепать) то же +-. Ну, или я неверно понял первого комментатора.
              +4

              Спасибо за разъяснения. По моему, оказалось слишком глубокой шуткой для шутки.

        0
        В последнем случае он мог подарить им другой программируемый калькулятор. И использовать его на работе. После завершения проекта калькулятор остался на работе.
          0
          Как будто стеганографию вчера изобрели. Всегда есть способы унести немного информации. Хотя бы в голове (применив удачную и ёмкую систему кодирования)
            0
            Как будто стеганографию вчера изобрели. Всегда есть способы унести немного информации. Хотя бы в голове (применив удачную и ёмкую систему кодирования)

            Объемы самолетных дел великоваты для того, чтобы на раз-два это сделать.
            Не забывайте, что рассказ об эпохе дискет.
            +3
            Эта модель в те времена стоила 300 долларов. Дороговато для «подарка».
            +4
            Лично попадал в ситуацию как с калькулятором в году так 2005-2006.
            Режимный обьект, контроль на входе, на выходе — особо тщательный контроль.
            Инструменты ввезли и вывезли сотрудники предприятия, дабы не заниматься описью, сам вошел с полупустым чемоданом.
            На выходе, Доблестные Милиционеры, нашли при «более тщательном» досмотре в сумке дискету (которую при входе не заметили), в глазах заблистали ордена, "-Преступник задержан, Сэр, Служу Отечеству", почти начали вязать. После вмешательства одного из руководителей отдела — выпустили.
            Телефон с картой памяти и IRDA их не зинтерисовал. Совсем.
              +3
              Немного оффтоп, но история имеет отношение к охране и досмотру. Мы с приятелями, когда еще учились, поспорили. Суть спора была в том, можно ли вынести с режимного, по сути, объекта ценный измерительный прибор. Оказалось, что можно. Схема была такова: получаешь разрешение на его использование. Выходишь во двор и начинаешь «измерения». Главное — больше споров, бумажек, ноутбуков и проводов. Плавно двигаешься к ближайшему выходу с территории. Не прекращая балаган, разумеется. Для охраны у нас была заготовлена целая история и, собственно, бумажка с разрешением на использование прибора. Но… никто нас ничего не спросил. Мы провели ряд «измерений» прямо на КПП, а затем — на улице. Потом вернулись назад. С прибором, разумеется. Понятно, что практической пользы для незаконного «выноса» в этом способе нет, но он вполне сработал. А больше нам и не нужно было.
                +1
                Был у меня один «веселый во всех смыслах» объект, куда по служебке ноутбук занести-вынести можно и без проблем, но телефон с камерой категорически запрещен, хоть она и есть в ноутбуке… Самое интересное, что телефон с камерой, в случае служебной необходимости, носить можно, но разрешение на него выбивается сложнее и дольше чем на ноутбук. PS пронос флешек, карт памяти и даже зарядок с наушниками там строго запрещен… Зато ноутбук оформляют за пару минут…
                  0
                  Знаю один не менее «весёлый» объект, где нельзя проносит ноутбуки ни под каким предлогом. Но при этом спокойно можно вносить и выносить смартфоны. Л-логика.
                    0
                    Вспоминаю опыт с подчиненной, которая никак не хотела блокировать свой комп при уходе с работы, а там закрытая информация. Штрафов в компании не было, увольнять за такое — как-то мелко, в остальном нормально работала. Нотации не помогали — вроде как извиняется каждый раз, но все остается по-прежнему. Какие-то внутренние тараканы.
                    Проблему решил так: после ее ухода вечером, в папку Startup (тогда еще winXP были) закинул файл с порнухой, включил звук погромче и вырубил комп.
                    Народ на следующий день пришел к 10 утра весь, для многих это был подвиг, но зрелище того однозначно стоило. Зато блокировать комп девушка стала, даже отходя в туалет.
                      +1
                      М-да, «решение» «проблемы» на том-же уровне, что и возникновение. А чем штатный способ не устроил (logoff по отсутствию активности пользователя)?
                        0
                        Наоборот.
                        Разбираться с проблемой на уровне возникновения, не пытаясь поправить истоки — это и есть поставить logoff по неактивности. Сменится работа/комп — все вернется на круги своя, ведя девушку к действительно крупным неприятностям.
                        В данном же случае она будет паролить комп всю оставшуюся жизнь и в конце концов настроит этот auto-logoff сама. Т.е. сам корень проблемы устранен, а не найден временный фикс.
                        Сейчас, спустя 10 лет, я бы вкатил официальный выговорешник и отправил на какой-нибудь однодневный курс по сетевой безопасности для чайников. Но тогда я любил нестандартные решения.
                          0
                          Не соглашусь, подобное «решение» говорит лишь о Вашей вопиющей некомпетентности, как руководителя, полном отсутствии знаний, как именно должна работать корпоративная security (в данном случае вопрос решается раз и навсегда на уровне policies домена), плюс личной нечистоплотности (несанкционированный доступ к чужому PC — «закинул порнуху»). В нормальной компании это был бы Ваш предпоследний рабочий день (если бы удалось доказать, что именно Вы проделали ту мерзкую штуку, которой Вы тут «хвастаетесь»).

                          Девушку же Вы научили лишь тому, что нужно бояться окружающих ее вероятных хамов, и не доверять никогда никому из сотрудников…
                            +1

                            Когда меня будет интересовать Ваше мнение обо мне как о руководителе, я непременно у Вас его спрошу. Это во-первых.
                            Во-вторых, по прописанным полиси девушку следовало уволить после третьего раза. Совершенно не думаю, что так было лучше и для нее, и для остальных. Поэтому поступил как поступил.
                            В третьих… Вы далеко не полностью в контексте ситуации, а делаете глобальные выводы. Не надо так.

                              0
                              Гмм, мой диагноз оказался верным. Ну да Бог вам судья: если вы не видите ничего неэтичного и некрасивого в своем поступке, то вас вряд ли можно исправить.

                              P.S. А под «полиси» имелись ввиду компьютерные полиси, устанавливаемые и настраеваемые один раз администратором компании, а вовсе не бумажные! :) Впрочем, это в очередной раз подтверждает мой «диагноз».
                                +1

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

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

                                  Это (и еще множество вещей) настраиваются групповыми политиками домена; когда пользователь логинится в домен, то эти политики автоматически применяются к клиентскому PC, в том числе, и политика logout by inactivity. Если требуется повышенная безопасность, то существуют RFID, smart card (поддерживаются чуть-ли не со времен Windows NT) — вариантов множество!

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

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

                                  Касательно того, что я «не знаю ньюансов» — ну, так Вы, наверное, тоже не телепат, и вряд-ли узнали настоящие мысли и эмоции той сотрудницы?

                                  P.S. Кстати, «выговоры» (в американских компаниях такого не существует абсолютно!) тоже не решение: ведь вы имеете дело со взрослыми людьми, а не с детьми, и вы не воспитатель в детском саде или учитель в школе! В простейших ситуациях решение чисто техническое; в намного более сложных случаях — например, сотрудник систематически опаздывает на работу — и решение будет чуть более сложное (например, team/scrum meeting переносится на более ранее время; сотрудник, пропустивший несколько митингов, начнет чувствовать себя неуютно). Если же сотрудник «невменяем», то принимается чисто административное решение. «Выговор» же — это куча негативных эмоций, как для сотрудника, так и для вас (если, конечно, вы не садист, и не испытываете от «комплекса вахтера» удовольствие).
                                    0

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

                                    0
                                    «Выговор» же — это куча негативных эмоций, как для сотрудника, так и для вас (если, конечно, вы не садист, и не испытываете от «комплекса вахтера» удовольствие).

                                    вы вообще в курсе, что такое «выговор» в контексте взаимоотношений «сотрудник-работодатель»? это вовсе не значит, что сотруднику перед строем говорят, какой он негодный сотрудник и как ему должно быть стыдно
                                    ну и про америку — в армии вполне себе присутствуют выговоры, всегда с занесением
                  +1
                  Напоминает байку несунской классику советских времён:
                  через проходную идёт работяга, разматывая бухту кабеля, так что кабель тянется по полу откуда-то из цеха. Через некоторое время пинания этого кабеля кто-то заметил, что сразу за проходной кабель обрывается.
                  (в другом варианте этой байки в конце дня кабель таки смотали обратно в бухту — разумеется, опять же изнутри наружу).
                    0
                    Сам-то прибор, конечно, может уже уехать к потенциальному противнику.
                    Схема была такова: получаешь разрешение на его использование

                    Но ты сам оставляешь след, ведущий к тебе.
                    Исходя из того, что на режимных объектах проверяется вся родословная, то в конечном итоге тебя найдут.
                      0
                      Я в начале 2000х работал в фирме, делающей Веб-сайты. Через пятые руки контора получила заказ на сайт для одного из министерств. Еду на встречу к коллегам из организации, хостящей все правительственные сайты и расположенной в здании Минфина. Охранник на входе забирает мой ноутбук, а на мышку и PCMCIA-сетевуху выписывает стандартное «разрешение на внос-вынос оборудования, 2 единицы». А я потом в течение всей встречи борюсь с желанием закинуть мышь подальше и прихватить у них какой-нибудь небольшой серверок…
                        0
                        А я потом в течение всей встречи борюсь с желанием закинуть мышь подальше и прихватить у них какой-нибудь небольшой серверок…
                        «Слон — плохой! Справка — хароши-ий!» (из фильма про колобков)
                        +1
                        Напомнило историю про трактор
                        .«Мои собутыльники дружески беседовали. Зэк объяснял:
                        — Голова у меня не в порядке. Опять-таки, газы… Ежели по совести,
                        таких бы надо всех освободить. Списать вчистую по болезни. Списывают же
                        устаревшую технику.
                        Чурилин перебивал его:
                        — Голова не в порядке?! А красть ума хватало? У тебя по документам
                        групповое хищение. Что же ты, интересно, похитил?
                        Зэк смущенно отмахивался:
                        — Да ничего особенного… Трактор…
                        — Цельный трактор?!
                        — Ну.
                        — И как же ты его похитил?
                        — Очень просто. С комбината железобетонных изделий. Я действовал на
                        психологию.
                        — Как это?
                        — Зашел на комбинат. Сел в трактор. Сзади привязал железную бочку из-под
                        тавота. Еду на вахту. Бочка грохочет. Появляется охранник: „Куда везешь
                        бочку?“. Отвечаю: „По личной надобности“. — »Документы есть?" — «Нет». — «Отвязывай к едрене фене»… Я бочку отвязал и дальше поехал. В общем,
                        психология сработала… А потом мы этот трактор на запчасти
                        разобрали..."

                        Сергей Довлатов. «Чемодан».
                          0
                          В более простом варианте — старый анекдот про прапорщика с тачкой. По ФИДО еще ходил. Впрочем, Довлатов свой роман еще раньше написал.

                      0
                      Кстати, если разбить число на целую и дробную часть, то теряется порядок дробной части, т.е. кол-во нулей перед ней. Это решаемо, но существенно растет сложность и вероятность проблем тоже.
                        0
                        Как это? Вот например разбиваю 50.050 на 50.0 и 0.050 — порядок вроде на месте.
                          +1
                          Речь о разбиении на два целых числа, иначе погрешность никуда не уйдет и нельзя будет использовать целочисленную арифметику.
                            0
                            Бред! Фиксированная запятая на то и фиксированная — вы ВСЕГДА умножаете на ОДНО и тоже число (например 1000, если вам надо 3 знака). Тогда 0.5 == 500 0.05 == 50 0.005 == 5. RTFM батенька…
                              0
                              Ваше число 1000 это третья переменная (или константа) разрядности, которая и вызывает сложность.

                              Т.е. нельзя просто сказать, что
                              float value = 50.005
                              превращается в
                              int intValue = 5
                              int fracValue = 5

                              надо где-то держать число 1000:
                              int divider = 1000

                              Затем при арифметике таких двух чисел надо проверять дробную часть на переполнение, сравнивая с делителем.

                              Другой вариант использования чисел с фиксированной запятой, это хранение всего числа в виде integer и отдельно разрядности, т.е. храним 50005 и 1000. В таком случае умножение двух чисел 50005 и 50005 даст 2,500,500,025, что выходит за пределы знакового 32-битного инта, поэтому такой вариант обоснован только с 64 и 128-битными целыми или для небольших чисел.
                                0
                                в деньгах всегда 100.
                                или же храним 3 поле.
                                +1
                                Бред! Фиксированная запятая на то и фиксированная — вы ВСЕГДА умножаете на ОДНО и тоже число (например 1000, если вам надо 3 знака). Тогда 0.5 == 500 0.05 == 50 0.005 == 5. RTFM батенька…

                                Фиксированная запятая проблему не решает.
                                Проблема — в бинарном представлении. Из-за вычисления могут дать неожиданные для человека результаты.
                                habr.com/ru/post/338108
                                599.99
                                float f = 599.99f;
                                float fi = (long) f;
                                float fp = f - fi;
                                long fil = (long) fi;
                                long fpl = (long) (fp * 1000000);
                                Console.WriteLine("float {0}.{1}", fil, fpl);
                                double d = 599.99d;
                                double di = Math.Truncate(d);
                                double dp = d - di;
                                long dil = (long) di;
                                long dpl = (long) (dp * 1000000000000000);
                                Console.WriteLine("double {0}.{1}", dil, dpl);

                                float 599.989990
                                double 599.990000000000009

                                Для финансовых данных есть специальный тип данных (на многих языках реализованный, или в виде библиотек), основанный на десятичном представлении. Например, decimal в .NET

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

                                Прежде чем спорить — ознакомились бы.
                                «Все придумано до нас»

                                  –3
                                  Нда… Теперь я понимаю, почему у меня нет проблем с работой…
                                  Вопрос «на пятерочку»: чем фиксированная запятая отличается от десятичного представления? С примерами пожалуйста :)
                                  З.Ы. В каждом посте, кто-то приводит пример, который наголову разбивает мой пример. Но при этом не приводит пример, когда свое решение тоже не работает. А это не избежно, т.к. 9% от 25.01 (оба число ТОЧНО представимы с фиксированнои или десятичном виде (что суть одно и тоже)) НИКАК не влезает в десятичное представление. Округление неизбежно (и ошибки округления). ВСЕГДА есть примеры которые дают ошибку.
                                    +1
                                    я понимаю, почему у меня нет проблем с работой…

                                    Зато у вас явные проблемы с общением :)
                                      0

                                      Есть такое. :)

                                +1
                                Зачем разбивать на два целых? Вы используете нотацию $10.50 = 1050¢ и всегда считаете два последних знакоместа дробной частью. Просто по сути учитываете не доллары, имеющие дробную часть, а сразу центы.
                                  –1
                                  В такой нотации умножение и деление приводят к изменению порядка (экспоненты) и затем к потерям. Например, 11% от $10.51 превращаются в 1051 * 11 = 11561.
                                  Чтобы все прошло правильно, каждая операция должна раздельно проводиться с мантиссой и экспонентой (еще и с учетом переполнения). В примере выше первые два числа имеют экспоненту E-2, а результат уже E-4 и если мы приводим его к E-2, то теряем 1 в конце.
                                    –2
                                    1) Чуму равно 700000000000000000 + 0.00000000000000001 (оба числа double)?
                                    2) 1 в конце это 3-й знак после зяпятой, а у вы по условию указали только 2. Есть-но что «лишнее» округляется.
                                    RTFM…
                                      +1
                                      Например, 11% от $10.51 превращаются в 1051 * 11 = 11561

                                      Нет, конечно. 11% хоть от $10.51, хоть от 1051 цента — одно и то же. Просто считайте центы, а не доллары. Вы перешли от 11% к 11, это некорректно — никакой нужды переводить представление второго множителя в этом случае нет. Мне кажется, вы не совсем корректно представляете, в чем именно проблема работы с денежными суммами при вычислениях.
                                        +1
                                        Ага, теперь я понял, мы просто говорим на разных языках. )

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

                                        Я же, косноязычно и борясь со склерозом, пытаюсь натянуть сову на глобус поведать как когда-то давно решал такую же проблему — потеря точности при фин. расчетах — и какие грабли встречал по пути:
                                        1. Вначале я решил работать только с интами и с фиксированной запятой, 10.05 превратилось в {10, 5}, сложение таких чисел было простым, но сразу же вылезла проблема, что 10.5 и 10.005 тоже разбивались на {10, 5}.
                                        2. Я добавил третью переменную и хранил порядок дробной части, в итоге каждая операция требовала немало колдовства и внимания, а умножение и деления были совсем сложными. Например, попробуйте {10, 5, 10} разделить на {78, 12, 100}.
                                        3. Отказался от раздельного хранения целой/дробной части и стал писать свой класс для fixed-point вычислений с порядком в виде константы 100, т.е. 10.5 стало 1050, 10.05 стало 1005 и т.д. Быстро вылезла проблема с отбрасыванием последних разрядов при умножении, а заодно и переполнение (10500*10500 выходит за пределы 32-битного знакового инта).
                                        4. Перешел на 64-битные инты и стал хранить порядок числа в отдельной переменной в виде 10000. Затем при решении задачи деления (а оно иногда дает порядок меньше 10) стало очевидным хранить не единицу с нулями, а степень 10 и ее знак. На этом круг замкнулся, я просто реализовал полный аналог IEEE float, только с 64-битной мантиссой и 16-битной экспонентой (float это 24+8, double это 53+11). Оказалось, что для моих задач этого достаточно, поэтому я успокоился и прекратил борьбу с ветряными мельницами. Решение из пункта 3 еще несколько лет использовалось на девайсе Hiebook, где не было сопроцессора и float был непростительно медленным.
                                          0
                                          А вариант использовать рациональные числа не подходит?
                                          10.05 превращается в 201/20
                                          10.005 превращается в 2001/200
                                          (201/20) / (2001/200) = 670/667
                                            0
                                            Я не пробовал, могу только потеоретизировать, что нахождение делителя станет дополнительной сложностью, а количество целочисленных делений приведет еще к потерям. Но надо пробовать, конечно же.
                                              0
                                              нахождение делителя станет дополнительной сложностью
                                              Всё давно придумано и сделано до нас — вот или вот, например.

                                              количество целочисленных делений приведет еще к потерям
                                              При манипуляции с рациональными числами деление не используется — только умножение (и сложение/вычитание).
                                                0
                                                Так для преобразования в «обычные» числа ведь все-равно нужно будет деление, от него не избавиться никак, только если вдруг знаменатель выродится до степени 10. :) С другой стороны, если правильно все сделать, то это может быть одно-единственное деление во всей программе. Условно, как бы если в большой формуле сохранять не промежуточные результаты, а всю цепочку действий и подсчет делать уже в самом конце. Это может быть весьма красивым решением для бухгалтерии и фин. задач, если заранее держать в уме такой подход.

                                                P.S. Спасибо за наводку на Rational в Boost и .Net, может пригодится для каких-то задач!
                                              0
                                              При операциях над неудачными числами числитель и знаменатель могут расти экспоненциально быстро, даже если абсолютная величина чисел особо не меняется. Попробуйте, допустим, просуммировать первые 100 членов гармонического ряда.
                                                +1
                                                Попробовал, получилось
                                                14466636279520351160221518043104131447711 /
                                                2788815009188499086581352357412492142272.
                                                Современным компьютерам вполне под силу работать с такими гигантскими объёмами данных. Ну и округление никто же не мешает делать — только тогда, когда это можно или нужно, а не в виде побочного эффекта в случайные моменты времени (вычислений).
                                                  0
                                                  Округление не бесплатное. Да и просто сокращение одинаковых множителей в числителе и знаменателе тоже не бесплатное. Конечно, если нам очень важна точность и не очень важна скорость, то вай нот. Но обычно точность не настолько важна, а скорость не настолько не важна.
                                                    0
                                                    Когда точность не особо важна, о ней и не задумываются). А для скорости можно технику double-double-… использовать, о которой я ниже уже написал — и появилась она тоже не умозрительно, а (в частности) в решении задач вычислительной геометрии (pdf).
                                              0
                                              Для полноты картины можно ещё вспомнить о double-double arithmetic, когда число представляется в виде невычисленной суммы двух других, a=ahi+alo, когда в alo записывается погрешность после вычислений (что является развитием алгоритма Кэхэна). Это даёт суммарную точность примерно 32 знака и очень быструю скорость вычислений.

                                              Реализация для c++ тут, для c# есть частичная поддержка в Meta.Numerics (там реализованы только базовые арифметические операции, экспонента/логарифм и функция ошибок).
                                  +5
                                  Работал как-то в команде такого Джека. «На чем мы будем зарабатывать?» — спрашивали у Джека. Наивные, Джек уже зарабатывает, это и есть его стартап, часть денег инвесторов он беспалевно выводит налево и так и живет, от инвестора к инвестору.
                                    +1
                                    Мультики какие-то.
                                      0
                                      Он начал искать правильные способы обработки десятичных значений в PHP… не мог разобраться, как добавить библиотеку, способную правильно выполнять математические действия.
                                      А я тупо через тип decimal в MySQL все математические операции вычислял, благо, все данные, на основании которых нужно было считать деньги, уже хранились в БД… Считать нужно было торговый сетевой маркетинг через рекурсию))
                                      Самое сложное в той «работе» было — это спорить с менеджером, который всё пересчитывал на бумажке, проверяя мои алгоритмы, и находить его ошибки. В итоге, в моей софтине появилась функция «оплата частями» за товары, которые региональные сетевые торгаши брали на главном складе, потому что «бонусы» им не начислялись пока они не вносили всю сумму, а вносить они её не могли, потому что товаров набирали с трёхмесячным запасом.
                                        +12
                                        Дааа. Помнится, когда я в институте учился, на экзаменах по физхимии тоже с пеной у рта орали, что запрещено пользоваться программируемыми калькуляторами. Туда же можно какую-нибудь формулу забить, которую ты должен помнить наизусть!

                                        А я никогда не понимал этого бреда. Мало того, что в жизни, в отличие от экзамена, я никогда не буду вспоминать что-то за час по памяти, а буду пользоваться специальной литературой, так еще и взять калькулятор и запрограммировать его — это своего рода полезный дополнительный навык оптимизации, показывающий алгоритмическое мышление, умение формулировать задачу математически. За такое надо поощрять, а давали по шапке.
                                          0
                                          Вот-вот. Самый уважаемый мною преподаватель в универе позволял на экзамене пользоваться вообще всем, чем угодно: шпорами, конспектами, книгами. Но ты должен был решить все задачи и после подготовки устно ответить на все вопросы билета и связанные темы. С первого раза всё-равно сдавали единицы, поскольку либо ты понимаешь ВЕСЬ материал курса, либо нет. А помнишь ли ты конкретную формулу — дело десятое.
                                            +1
                                            Помню, как в школе на экзамене по физике у меня потребовали сдать калькулятор, мол, положено вычислять вручную (другая страна, был не в курсе правил; дома наоборот, поощряли калькуляторы на физике — мол, нечего время на механические вычисления тратить, решайте задачи по существу).
                                            Ну, я пожал плечами и достал из портфеля логарифмическую линейку… для 2005 этого было что-то.
                                              0
                                              Аналогично, но только в 81-м… когда линейки еще были меньшей экзотикой, чем калькуляторы, и тоже не разрешались… но я протащил на экзамен КРУГЛУЮ линейку! Она на секундомер похожа, не распознали.
                                            +2
                                            таких кишей в любой конторе вагон, не нужно думать, будто это что-то уникальное…

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

                                            Самое читаемое