Один очень крупный банк сейчас вовсю внедряет прием оплаты бесконтактными картами Виза и Мастеркард. Учитесь у крупнейших игроков, как это делать «правильно».
Во-первых, терминал для работы с картами выглядит точно так же как и пять лет назад. Мясистый такой калькулятор с термопринтером для печати чека, щелью для чиповых карт и прорезью для карт с магнитной полосой. Бесконтактные карты нужно прикладывать к экрану. Как об этом узнать? А никак — никаких обозначений, хотя бы намекающих на поддержку работы с бесконтактными картами, на терминале нет. У банка в арсенале две модели терминалов, и обе не имеют никаких видимых намеков на бесконтактную оплату.
Во-вторых, в банке вообще не очень подумали о том, чтобы продвигать бесконтактную оплату. Поэтому на кассе, где собственно происходит оплата, по-прежнему размещают только наклейки «Виза», «Мастеркард», «ОченьКрупныйБанк», и снова никаких намеков на бесконтактную оплату. Наклейку на терминал а-ля «вайфай» тоже никто не придумал.
В третьих, кто-то все же немного подумал и наделал наклеек о беспроводной оплате для двери у входа в торговый зал. Правда, он не учел, что покупатель оплачивает товар не снаружи входной двери, а на кассе, а там о беспроводной оплате ни слова.
Результат — покупатели о беспроводной оплате просто не знают и сначала с третьей попытки вставляют карту в щель терминала, а потом несколько секунд набирают код вместо того, чтобы на секунду приложить карту к терминалу.
Хотите блестящих результатов — учитесь у крупнейших игроков рынка.
Вот приходишь на смену, а дорогие коллеги, большие профессионалы, сломали 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.
Теперь я не могу понять, откуда растут руки у разработчиков? Взять системное время в текстовом виде, порезать по два символа в три целочисленных поля и даже не сделать проверки на корректность значения…
А у меня сразу возник вопрос. Если обработка XML требовала затянуть в память все, и там разбирать («проблема была в сильной связанности») — то почему загрузка в CSV этого же не требовала?
Видимо, связность была не такая уж сильная. А для парсинга использовался не потоковый парсер, а пример с третьей страницы учебника.
Я вот совсем недавно исправлял проблему — нельзя было загружать XML'и больше определенного размера. Памяти не хватало. Оказалось, там парсер грузит всю структуру в память целиком и только потом обрабатывает. Заменил на потоковый. Потребление памяти константное, скорость работы возросла.
А обмен через файлы — это большая коллекция граблей с автоподзаводом. Возможно, уже пришла пора открыть для себя что-нибудь более новое?