Впервые я попал в фирму далёкую от IT. Программистов нас было двое, мой “напарник” отвечал за сайт, а я сначала за клиентскую часть, а потом за весь технологический стек работы терминалов по продаже. Поскольку люди разрабатывающие до меня терминалы знали в основном PHP, то PHP был везде, и на клиентской и на серверной части и среди каких-либо скриптов выкладки. Если была вероятность решить задачу на PHP, она была решена на PHP.
***
Мне пришлось проектировать довольно интересный интерфейс. Дело в том что часть товаров лежала в одних магазинах, часть в других, часть в третьих. При этом каждый товар и магазин имели свои собственные ограничения на доставку (как сроки, так и вообще возможность доставки).
В итоге случаи могли быть например такие:
- пользователь может купить 10 пакетиков с детским питанием в магазине А
- пользователь может купить 11 пакетиков в магазине А, но только через 2 дня
- и в принципе не может купить 12 пакектиков в этом магазине.
но например в магазине Б он может купить 11 пакетиков сегодня и 12 пакетиков через 2 дня.
Конечно объяснять это всё пользователю было бы безумно сложно, поэтому для пользователя это выглядело как вдруг значения и сроки доставки скачут самым невероятным образом. Но главное было не показать неверный срок доставки.
Логика была сложной, и тут меня спасли тесты - было написано достаточно большое их количество на все возможные варианты товаров, магазинов и сроки доставки. Так что даже когда логисты хотели странного, и с первого взгляда нельзя было сказать, что требования противоречат друг другу или не полны - тесты сразу говорили своё резкое “НЕТ”, и разобравшись в причине падения можно было объяснять по каким причинам это сейчас сделать невозможно или спросить уточнения.
В итоге случаи могли быть например такие:
- пользователь может купить 10 пакетиков с детским питанием в магазине А
- пользователь может купить 11 пакетиков в магазине А, но только через 2 дня
- и в принципе не может купить 12 пакектиков в этом магазине.
но например в магазине Б он может купить 11 пакетиков сегодня и 12 пакетиков через 2 дня.
Конечно объяснять это всё пользователю было бы безумно сложно, поэтому для пользователя это выглядело как вдруг значения и сроки доставки скачут самым невероятным образом. Но главное было не показать неверный срок доставки.
Логика была сложной, и тут меня спасли тесты - было написано достаточно большое их количество на все возможные варианты товаров, магазинов и сроки доставки. Так что даже когда логисты хотели странного, и с первого взгляда нельзя было сказать, что требования противоречат друг другу или не полны - тесты сразу говорили своё резкое “НЕТ”, и разобравшись в причине падения можно было объяснять по каким причинам это сейчас сделать невозможно или спросить уточнения.
***
На момент моего прихода процесс паблишинга не был автоматизирован чуть больше чем полностью. И первое, что пришлось сделать это написать длиннющую инструкцию, чтобы не держать все шаги в голове.
Дальше мне удалось найти время и автоматизировать этот процесс (на тот момент питал любовь к ant - так что вся сборка и паблишинг были построены на нём). Получилось лучшечем обычно чем на картинке http://xkcd.ru/1319/. И все терминалы обновлялись по одному щелчку мыши.
Дальше мне удалось найти время и автоматизировать этот процесс (на тот момент питал любовь к ant - так что вся сборка и паблишинг были построены на нём). Получилось лучше
Когда обновляешь порядка 50 машин по всему городу одним действием, начинаешь чувствовать могущественную силу в своей руке.Так что я купил большую красную кнопку с подключением по usb и повесил на неё обновление терминалов.
Теперь выгрузка обновлений происходила с должной церемонией открытия защитной крышки и уверенным нажатием на кнопку.
Теперь выгрузка обновлений происходила с должной церемонией открытия защитной крышки и уверенным нажатием на кнопку.
***
Однажды к нам подошёл оператор колл центра и сказал, что пользователь жалуется на то что его имя само сменилось на Василий Иванович. Стали смотреть пользователя - и правда Василий Иванович, пол женский. При этом никаких записей о смене имени нет. Пока пытались разобраться в чём может быть дело пришла ещё одна такая заявка, потом ещё одна и ещё. Решив просто взглянуть на базу увидели, что все пользователи теперь Василии Ивановичи.
Нам сильно повезло, что тот кто стал виновником этого происшествия сделал это случайно(?) и ещё отзвонился нам об этом. Удалось быстро выяснить причину.
Нам сильно повезло, что тот кто стал виновником этого происшествия сделал это случайно(?) и ещё отзвонился нам об этом. Удалось быстро выяснить причину.
Дело в том, что пользователь с именем Василий Иванович решил сменить себе пароль на что-то вида “newpassword;”, сайт был написан на своих велосипедах и кто-то забыл экранирование поля пароля. Точка с запятой обрезала всю конструкцию WHERE в SQL запросе. В итоге часть полей в том числе имя и фамилия обновились у всех пользователей.
Вот они SQL инъекции в живую. Бэкап 6 часовой давности был в запасе. Так что отделались лёгким испугом.
Комментариев нет:
Отправить комментарий