Новое значение фразы «сделано на коленке» преподнесла мне новая мышка для ноутбука. Зараза оказалась очень привередлива к поверхности, но неплохо работает на тёмной ткани. То есть на штанах. Теперь у меня есть несколько презентаций, свёрстанных буквально на коленке.
Чаще всего среди пользователей встречается подвид «не знаю, чего хочу на самом деле». Такой пользователь составляет техническое задание или полностью соглашается на подготовленное IT-отделом без нареканий; когда же приходит долгожданный момент тестирования написанной для него программы, его осеняет, что это не то, чего он хотел на самом деле! Вот эта формула должна быть не такой, расчёты должны проходить в другом порядке, итоговая информация с точки зрения его специальности не имеет смысла, а итоговая таблица должна выглядеть в его представлении совсем не так. Напомню, что этот чудак ранее подписал техзадание, в котором все эти моменты были подробно описаны.
Приведу пару аналогий.
Инженер разработал проект здания, утвердил его, отдал строителям на реализацию. Строители посмотрели на чертежи, прикинули, как это сделать, уточнили некоторые нюансы с инженером и ушли строить. Несколько раз во время постройки, в какие-то ключевые моменты, приглашали инженера посмотреть, как проходят работы и устраивает ли его. Инженер молча кивал. Момент истины: здание готово! И тут вдруг инженер начинает негодовать и доказывать, что такого у него в чертежах не было, он изначально не мог не возмущаться на этот фундамент, и вообще, нужно сносить и строить заново по другим чертежам. На его же подписи в изначальных чертежах и документах реагировать каким-либо образом отказывается.
Вызывается такси. Человек разговаривает с оператором и запрашивает маршрут из центра в северную часть города. Приезжает автомобиль. Персонаж садится, водитель уточняет маршрут, персонаж молча кивает, водитель трогается. По приезде в контрольную точку пассажир возмущается, что его привезли не туда, что он заказывал автомобиль из центра на юг, а его тут пытаются жестоко обмануть. Услышав аудиозапись своего заказа, грозит подать в суд за клевету и подделку аудиозаписи с его голосом.
Следующий подвид — «хочу, чтобы оно само и без моего участия». Это те, кто хочет, чтобы написанная программа полностью выполняла за этого человека работу, а он сам в это время будет чатиться и смотреть видеоролики на Тытрубе. Для меня не составит большого труда написать такую программу. Даже более того: для меня не составит труда разобраться в специфике работы такого человека. Пусть это будет долго и пусть мне этого не хочется, но это моя работа. Но потом не удивляйтесь, что вас поставят в список на увольнение. Я не буду скрывать от вашего начальства, что с помощью этой программы вместо трёх человек ту же работу сможет выполнять один. Это из раздела: «Бойтесь своих желаний, а то они могут исполниться». И пусть я останусь для вас моральным уродом, но я сделаю свою работу, и предприятие повысит мне гонорар за сокращение расходов.
И, наконец, самый великолепный и очаровательный подвид (и сюда относятся не только девушки): «не знаю как, но пусть работает». Сюда отнесу тех, кто хочет, чтобы программа в формуле расчётов имела дополнительно ещё пару динамических чисел, которые хранятся у пользователя если не на бумажке, то в голове, и чтобы программа эти числа предугадывала; предложение о всплывающем окне ввода чисел с клавиатуры воспринимается как богомерзкая ересь. Когда я отшутился такому пользователю, что регламент его предприятия не позволяет закупать нейроинтерфейсы для работы с компьютером, он на полном серьёзе написал прошение о закупке оных и разрешении лично ему с ними работать. Почти все сотрудники были в истерике от комичности ситуации, кроме него и тех, кто не понял, в чём юмор. Ещё один такой в другой конторе заявил: «Хочу, чтобы вы написали программу, которая будет предсказывать момент обрыва интернета», — видите ли, чтобы он мог предупредить собеседника в соцсети, что ответить какое-то время не сможет. Для тех, кто не осознал, что он имел в виду: он хотел программу, которая будет выглядеть как таймер, отсчитывающий секунды/минуты/часы/дни до следующего разрыва связи с интернетом.
Я тот самый админ, который надувается и сидит в углу. А всё потому, что если представить моему начальнику варианты А и Б, где Б хоть немного дешевле — у него включается стоп-сигнал, и дальнейшие аргументы встречает файрвол, непробиваемый и беспощадный.
— Чтобы заставить вариант Б работать, уйдёт 100500 часов времени. На внедрение будет потрачено в двадцать раз больше нефти, чем мы сэкономим!
— Да ладно тебе! Не может быть такого. Народ же юзает как-то.
— Вариант Б будет падать при каждом чихе!
— Да ладно тебе! Не будет у нас никто чихать. Зачем переплачивать?
— У меня уже есть опыт внедрения А, это делается за пять минут и работает вообще без сбоев.
— У нас нет бюджета на это!
Итог: для весьма специфичной задачи притаскиваются откуда-то два поюзанных роутера, тратится несколько дней на танцы с альтернативными прошивками. В итоге заказывается ********, который я и предлагал изначально. Втыкаем, настраиваем — работает.
Нет уж, лучше я скажу, что есть только вариант А, надуюсь и буду молиться, чтобы начальству не пришло в голову использовать домашний роутер в продакшне в качестве сервера. А что, народ юзает же как-то.
На днях затронули тему: мол, в ремонтных мастерских ценники накручивают в десятки раз. Пардон, а вы вообще представляете, что это наш хлеб насущный? Или вы думаете, что цена складывается только из комплектующих?
Стоимость разъёма Micro-USB — 15 рублей. Сколько, по-вашему, нужно брать за перепайку этого самого разъёма? 30 рублей? За разборку, выпаивание, восстановление контактных пятаков, пайку самого гнезда, сборку, проверку? 100 рублей? Но ведь это почти на порядок дороже комплектухи! Ой, мы негодяи! А я за эти сто рублей, зайдя в магазин, куплю буханку хлеба и литр молока — и не факт, что мне ещё не придётся доплачивать. А вообще, у меня дома семья кушать хочет. И я по двенадцать часов на работе не для развлекаловки сижу.
Да, иногда стоимость самой работы в сто раз выше себестоимости деталей. Вы не поверите, но иногда вообще без них обходимся и, по сути, продаём только услугу. Но мы живём не в Союзе. Детей в Сочи бесплатно я уже не отправлю. Ценники стараемся держать умеренные, если человеку проще купить новый девайс — честно об это предупреждаем. Но и будьте готовы, что шлейф на кнопку включения айфона стоит 60 рублей, а с заменой — 1200. А если слишком умные — покупаете и крутите сами, там ничего сложного нет, честно-честно.
Я, кажется, понял, откуда берутся коммерсанты, которые через два месяца тонут вместе со своим детищем. Не стоит забывать про аренду, рекламу, расходники, оборудование, налоги, зарплату вспомогательных работников, коммунальные услуги и т. д. Чем крупнее фирма, тем больше у неё расходов и тем выше конечная стоимость работ. Но взамен вы получите качественно выполненный ремонт, гарантию и хорошее отношение к себе. Если вам этого не надо — добро пожаловать в переход метро. Там вам на коленке сделают быстро и дёшево. А дальше — уже как повезёт.
Вот приходишь на смену, а дорогие коллеги, большие профессионалы, сломали IP-KVM. Ну то есть совсем сломали, выдернут из текстолита VGA-разъем видеовхода, уронили наверное. KVMпоследний и единственный, остальные уехали в другой ДЦ на международный проект, а это значит, что при любом заказе на трешовый дедик уровня core2duo придется переть из теплого офиса по улице 500 метров в модуль и сидеть там от 15 минут до часу времени, накатывая ручками всю хурму на серваки локально. В модуле холодно и шумно, и вайфай медленный, что же делать?
Надо применить инженерный подход. VGA не пашет, но команды клавиатуры с KVM на сервак передаются ок. В зипе находится длинный-предлинный vga-кабель, метров тридцать в бухте. Вешаем KVM на сервак, подключаем к серваку по VGA монитор, монитор ставим на коробку, коробку на стул, стул на стол, усиливаем все скотчем подкатываем получившуюся башенку к cctv-камере в углу комнаты, ориентируя монитором прямо в объектив. Вуаля — картинка с монитора доступна по сети, команды с клавиатуры передаются по сети тоже, пусть и по другому каналу.
Довольный собой, запускаю с pxe раскатываться на серваке образ и топаю в теплый офис, чтобы по возвращению заглянуть в cctv-монитор, а там сервер в процессе сетапа свалился в kernel panic и не отвечает на клавиатуру, окей.
В условиях кризиса, когда финансирования на it-проекты можно ждать от руководства очень долго и не дождаться вовсе, приходится довольствоваться тем, что есть. Поэтому когда возникла необходимость расширения парка серверов под виртуализацию, решили взять весьма древний, но относительно мощный сервер, который с недавних пор простаивал без дела.
И вот, гипервизор установлен, развернуты несколько виртуалок, пока в тестовом режиме, полёт нормальный… Но вдруг сервер неожиданно падает.
Я отправился в дата-центр, благо до него 15 минут пешком, включил сервер, по логам увидел, что произошло непредвиденное завершение работы, как бывает при обесточивании. Обесточивания в дата-центре, естественно, не было. Я решил не делать поспешных выводов и понаблюдать за развитием событий.
Часа через 3 сервер выключился вновь. Поскольку время было позднее, я решил отложить дальнейшее разбирательство до завтра, благо платформа была на стадии внедрения, и никаких критичных сервисов на ней пока не было. Я грешил на перегрев процессоров, а также на память FB-DIMM, о капризах и перегревах которой был наслышан.
На следующий день я опять отправился в дата-центр, прихватив с собой термопасту и намереваясь почистить сервер от пыли, продиагностировать память и, возможно, вытащить пару планок, если придется.
Каково же было мое удивление, когда я, подойдя к нужной стойке, не обнаружил сервер на привычном месте! К такому повороту событий я так сразу не был готов.
Тут стоит сделать уточнение. Я работаю в достаточно большой компании, в которой есть много it-отделов, занимающихся не пересекающимися направлениями. А тот небольшой дата-центр, о котором идет речь, компания арендует практически полностью. И доступ сотрудников на его территорию контролируется крайне слабо.
После тщательного дедуктивного анализа выяснилось, что сервер забрал один из сотрудников смежного отдела, которому по ошибке сообщили, что тот не используется. Сотрудник намеревался отправить его в филиал в Питере взамен сгоревшему. Также выяснилось, что именно он накануне выключал сервер оба раза, весьма удивившись тому, что после первого раза тот включился вновь.
Из бонусов всей этой ситуации для меня – то, что сервер был тщательно вычищен от пыли перед предполагаемой отправкой в филиал.
Пару лет назад принесли ноутбук на ремонт и сами признались, сходу, что залит. Вроде дело обычное, но каким образом это произошло — рассказали сами хозяева.
Отец семейства купил себе ноутбук и тем же вечером на общесемейном собрании продемонстрировал его. После того как села батарея, поставили на зарядку и легли спать. Дедушка вышел ночью попить воды и, увидев красную индикацию заряда возле штекера, решил — горим! Дабы не создавать панику, потянул его в ванну и опустил в тазик с водой. С чистой совестью пошёл спать. Что было утром вместо медали — остаётся только догадываться…
Год где-то 2005, в районных электросетях (РЭС) работает биллинговая программа. Ну, работает более-менее, вроде всё настроено. Мануалов, как водится, нет, приходится всё делать методом не всегда научного тыка.
Ставится новый компьютер, на него заливается клиентская часть программы. Всё работает, но при попытке сохранить информацию в базу система невнятно ругается на ошибку и ничего не сохраняет. Проверяем клиента — всё чисто. Проверяем сервер — всё чисто. С других машин сохраняется, с этой — нет. Проверяем антивирус-запреты-порты-чёрта лысого. Ноль.
Вы таки будете сильно смеяться, но причина оказалась донельзя тупой и банальной — в региональных настройках стояла точка в качестве разделителя. А в базу принималась только запятая.
Сижу на работе, скучаю, гоняю игрушки, никого не трогаю.
Звонок. Соседка по квартире.
— Привет, тут у тебя компьютер сам работает! Там на нём какая-то игра идёт, он сам в неё играет и шумит на всю квартиру! Что делать?!
А я ведь как игрушки гоняю? На рабочем компе по понятным причинам ставить ничего нельзя, поэтому я предварительно оставил домашний комп включённым и подключился к нему удалённо. Сижу, играю во второй фоллаут и даже не подозреваю, что колонки включены и в три часа ночи не дают людям спать.
Она прекрасно знала, что у меня ночная смена, я уходя попрощался. Она стучала в дверь, звала того, кто там играет, потом не выдержала и зашла в комнату.
Сижу теперь, думаю, хорошо хоть она не взяла инициативу в свои руки и не стала святой водой его окроплять.
Знакомая работает в медицинском учреждении. Получили новый аппарат для экспресс-анализа на наркотики. Сам аппарат — коробочка 5×7 см, по usb подключается к ноутбуку. В коробочку вставляется картридж с анализом, она его сканирует. На ноутбуке программа, сравнивающая цвета полосок на скане с эталоном и считающая концентрации.
Все нормально, но при попытке записи результата выдаётся ошибка: «7:» is not valid integer data.
Пляски с бубном дали результат парадоксальный — все заработало при установке в системе формата времени HH: MM: SS.
Теперь я не могу понять, откуда растут руки у разработчиков? Взять системное время в текстовом виде, порезать по два символа в три целочисленных поля и даже не сделать проверки на корректность значения…