7084

25-й, но не кадр

Контора занимается аутсорсингом. Наблюдаю диалог ведущего программиста проекта с младшим коллегой:

— Саня, пропиши часы для логов.

— Какие часы?

— Ну, обычные человеческие суточные часы. От 0 часов до 24.

Проходит два дня, тестирую логи. 0:00, 1:00… 23:00, 24:00.

В качестве наказания Саня вторую неделю ходит с беджиком: «Привет, земляне!»

7080

Затычка по-Гоблински

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

7079

Секретарша Лентопротяжкина

— Зайди к нам, документы не печатаются.

По пути к рабочему месту сотрудника я прокручивал в голове возможные варианты: чернила кончились, бумага замялась, проблемы с дровами?

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

7078

Powered by magic

Пишу проект на Delphi. В работе использую нестандартные компоненты из набора AlphaControls. Есть там такой симпатичный TFramebar — панель со сворачивающимися вкладками, на которых размещаются фреймы. И удобно, и красиво.

И было бы всё тихо-мирно, не понадобись мне воплотить следующую идею. Есть два фрейма, реализующих пользовательские интерфейсы для поиска и сортировки в БД. Эти фреймы помещаются на вкладки упомянутого фреймбара. Получается очень кошерная менюшка для манипуляции данными. А в приложении несколько таблиц, и каждой такую менюшку нужно прикрутить. Как это сделать? Ну конечно — кинуть саму менюшку на новый фрейм и разместить его экземпляры везде, где понадобится. Получится фрейм, на котором находится контейнер фреймов, в котором лежит два других фрейма (фрейм на фрейме и фреймом погоняет), но выглядит идея здраво. Начинаю воплощать.

Оказалось, что фреймы на фреймбарe нельзя просто взять и разместить (как, например, на привычном TPageControl — накидал, и готово). Здесь у каждой панельки прописывается событие OnFrameCreate, в котором нужно указать тип создаваемого фрейма. Только в runtime экземпляр будет создан и размещён на вкладке.

И вот тут-то подкрался капец. Привычный механизм наследования, когда потомок имеет доступ к свойствам и методам предка, у этого компонента почему-то сбойнул. То есть экземпляры моего фреймоконтейнера понятия не имели, что где-то там, в родительском модуле, у TFramebar прописаны обработчики и типы для фреймов на вкладках. При запуске я лицезрел пустые панельки с надписью: «Frame creation event has not been defined».

Когда гугление, медитация и маты не помогли, в дело вступил метод научного тыка. Я попробовал создать обработчик уже для экземпляра фрейма-контейнера. Он создался, при этом обязательный в таких случаях вызов соответствующей процедуры из родительского класса в нём не прописался, что подтвердило предположение о том, что этот потомок своих предков не помнит. Попробовал прописать вызов вручную — куда там, не знает оно о его существовании. Ладно, тупо скопировал код из родительского обработчика — при запуске словил невнятный эксепшн. Убрал обработчик — снова «has not been defined». Плюнул, создал событие обратно, поставил внутри комментарий (чтобы Delphi не удаляла пустой обработчик) и запустил. Моё долгожданное меню сортировки смотрело на меня со вкладки контейнера.

Я не поверил. Повторил все пройденные пункты — та же фигня. Создал пустой обработчик с одним только комментарием внутри для второй вкладки — менюшка поиска встала в строй. Минут пять я медитировал на это дело. Потом вздохнул — и пошёл лепить эти костыли во всех экземплярах контейнера.

Теперь в нескольких модулях красуются потрясающие по глубине и содержанию фрагменты вида:

{ powered by magic }

procedure TfrQuoteView.sfrmbrDBmenuItems0CreateFrame(Sender: TObject; var Frame: TCustomFrame);

begin

//

end;

procedure TfrQuoteView.sfrmbrDBmenuItems0FrameDestroy(Sender: TObject; var Frame: TCustomFrame; var CanDestroy: Boolean);

begin

//

end;

И такая пара для каждой вкладки контейнера.

Не раз уже сталкивался, казалось бы, с мистическими глюками в работе, но причина всё же находилась. А здесь — увы… Powered by magic, в общем.

7077

Управление рисками, или Доля правды в шутке

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

Казалось бы, в невинных фантазиях больших детей ничего не может серьёзно задолбать. Ну, треплет кто-то языком о том, что его дядя лично принимал роды у лабрадора премьер-министра, пока тот утирал слёзы умиления, или о том, что лично наблюдал в телескоп НЛО на фоне Марса, — и пусть. Ан нет: иногда детские попытки привлечения внимания заставляют напрягаться множество людей.

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

Ай, молодец, деточка. Фильм он посмотрел, конечно же. В режиме слайд-шоу, наверное, смотрелось-то?

Можно долго рассуждать о системах безопасности процессинговых систем. Есть на российском рынке и отвратительно реализованные, и вполне безопасные. Но даже если и допустить, что наш фантазёр за минуту получил администраторский доступ, что не было на терминале ни «белого списка» программ, ни ограничения доступа к ресурсам, одного фактора наш чудо-хакер не смог бы избежать никак: никто и никогда не тянет выделенную высокоскоростную линию к терминалам оплаты. В них стоит до обидного банальный GPRS-модем, и часто наблюдаемая снаружи терминала антеннка принадлежит ему, а вовсе не вайфай-адаптеру. Высокая скорость терминалу не нужна, а GPRS позволяет ставить терминал где угодно, не оглядываясь на возможность протягивания Ethernet, пары для ADSL или на наличие неподалёку вайфай-хотспота. Ну, а уместить смотрибельный видеопоток в GPRS-канал вряд ли удалось бы и самому Нео, не только его подражателю-врунишке.

Возможно, вам интересно, почему же я так раздражён великовозрастным дитятком, решившим самоутвердиться в интернете?

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

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

7076

Не спасёт ни чёрт, ни пингвин

Когда-то я работал в крупной компании, в которой были на редкость тупые админы. Абсолютно классические бараны: уделяли массу времени издевательству над сотрудниками, предпочитавшими в Проводнике видеть файлы иконками, а не списком, объясняли, что списком удобнее, и, не спрашивая, переключали настройки. Докапывались с этой фигнёй и ко мне. Были посланы и начали меленько гадить.

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

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

Через час возвращается и достаёт из беленького конвертика диск, поперёк которого маркером написано: «Линекс».

7075

Кулер, развевающий прах

Звонок в техподдержку:

— У нас компьютер сгорел!

— А почему вы решили, что он сгорел? Он дымился?

— Нет.

— Он искрился?

— Нет.

— А тогда почему?

— Он тёплый…

7074

Небоскрёб на ровном месте

Господа, вам нечем заняться? Учитесь у котов или у собак. Вы хотите почувствовать себя круче, чем вы есть на самом деле? Сделайте себе операцию — говорят, сейчас его можно удлинить на пару сантиметров. Может, это избавит вас от комплексов? Это уже не мода — это массовая шизофрения, одержимость небоскрёбными городушками на пустом месте. Я понимаю быдлокодеров, которые должны доказать свою нужность и стараются навалить кучу побольше. Я понимаю не разбирающихся в предмете гламурных менеджеров, которые занимаются имитацией бурной деятельности: чем сложнее и черезжопнее решение, тем дороже продашь, ибо клиент — идиот. Вы крысы и кровососы, подрывающие отрасль, но у вас хотя бы есть мотив, который я отлично понимаю. Но опенсорс! Писать драйвер клавиатуры на XML и переключение раскладок делать через восемь уровней модификаторов — вам руки есть не мешают, в задницу ложку не тычут?

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

Возьмите бумагу. Накидайте на ней, что вы, собственно, собрались писать. Напишите несколько слов, обведите их облачками, соедините стрелочками. Смотрите на это и думайте, что же вы, разрази гром ваши индусские клешни, пытаетесь изобразить.

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

Вы не просто задолбали — вы практически уничтожили отрасль. Райзера с топором на вас нет.

7073

Баранкин, будь человеком!

Лет десять назад работал я в одном киевском учреждении. Был у нас Админ — среднего пошиба, самоучка, но с настоящим админским характером. Парень в свитере и с бородой во время танцев с бубном молился Зевсу (причём результативно), имел мозги не хуже военкома, шёл помогать разобраться с глючившим Вордом только после пендаля начальства. Персонал слегка ненавидел Админа за подобные прелести.

И была у нас Бухгалтерша — премилое уютное интеллигентное создание, в свои 31 выглядевшее лет на 20, не больше. Был у Бухгалтерши любимый фильм — «Игры разума». Кто не помнит — там сумасшедшего математика самоотверженная жена превратила в человека. В общем, решила Бухгалтерша опробовать себя в роли героини этого фильма, и когда Админ решил приударить за ней, ответила взаимностью.

И у неё получилось! Админ преображался на глазах: с каждым днем становился добрее, вежливее, помогать юзверям стал добровольно… Короче, через полгода мы его узнавали не с первого раза.

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

7072

3stroiteley2512

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

Зашёл на виртуалку. В рут. К пользователям. Добавил юзера — оказалось, мой однофамилец. Поставил стандартный пароль — сегодняшнюю дату. Закрыл виртуалку, пошёл пить кофе.

Подходит какой-то мужик:

— Чего не при деле?

— Так это, работы ж нет.

— А, тебе сисадмин учётку ещё не сделал.

И тут до меня доходит: сегодня мой первый день на новом рабочем месте, в новой компании, на новой должности.

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