Айтишные байки. Программируем сегодняшним днём.

Год, эдак, 16-ый. Проэкт всё тот же – SSO. И вот начинают жаловаться клиенты, что не работает. Если кому-то стало непонятно что именно не работает, то всё правильно. Именно в таком виде к нам приходили жалобы оень часто. Не работает, и всё. Методом тыка во все, что только можно и не можно, применяя грубые исключения и предположения. А также благодаря наводящим вопросам к клиенту удалось сузить проблему до Java8 + наш агент. Ибо только Java8 было новым фактором в конфигурации клиета. С архитектурной стороны здесь всё просто. SSO решение состоит из самого сервера и встраивоемого нашего агента в виде фильтра в клиентское приложение. И вот этот самый агент работал под Java8 (мы его тестировали под Java7). В данном случае агент коннектится к SSO серверу для аутентификации.

Начинаю тестировать. Строю тестовую среду в нашем окружении и с нашими приложениями. Пробую. И что? РАБОТАЕТ! Сука! Всё работает. С Java7 – работает, с Java8 – работает. Какой вывод самый простой? Спихнуть всё на окружение клиента. Но в таком случае нужно будет идти в его окружение и копаться там. А этого делать естессно не очень хочется. К тому же клиент жалуется, что оно то работает, то нет.

Далее я грубо изолирую части нашего кода, чтобы обеспечить исключительно коммуникацию с агентом и нашим тестовым сервером. Циклю всё и начинаю гонять. 15 итераций – всё ок, 30 – тоже, 50 – полёт нормальный. Причём эти все итерации нужно прогнать и на 7-ой и на 8-ой Java. Ожидаю каких либо проблем на 8-рке. Ничего. То есть или проблемы на стороне клиента или мой тест – гавно.

Менеджеру говорю – идей нет, у меня всё работает (с). Менеджер, не долго думая, подключает своего менеджера – типа отдувайся перед ним сам. А мне то что, бодро рапортую, что проблему отловить не можем – предлагаю воду сливать. В это время я запустил очередную итерацию под восьмёркой на 150 итераций. И вот после того как я сказал, что ничерта мы найти не можем у меня сыпятся коннекшены где-то после 100-ой итерации. Всех обрадовал и пошёл выкапывать багу.

Проблема оказалась в части кода вида:

Код писался несколько лет назад, когда о 8-ой джаве даже не догадывались. Как следсвие условие неоднозначное. FailState не определён. И как результат процессились куки из пятой Java для восьмой.

Вот как-то так.

Айтишные байки. АрХЕРтекторы.

Архитектрута в айтишном проэкте – это особая тема. Как правило порождается нуждами бизнеса и желанием специально выделенного человека “отжаться” в новом фрейворке или технологии, чтобы тиснуть себе новый скил в CV. Со вторым фактром вроде как понятно, а вот первый, как правило, сводится к тому, чтобы получить рабочий продукт быстро и желательно дёшево. В результате бизнес получает гемморойный проэкт (хорошо если в срок), а тысячи других (или тех же) программистов пытаются это всё потом стабилизировать и улучшать. Второй фактор, кстати, не может не радовать. Так что польза от сего подхода вроде как и присутствует.

Был у меня проэкт. Его суть заключалась в том, чтобы конвертировать xml-ки с одной телефонной системы в xml-ки другой телефонной системы. Основная сложность (без архитектора) заключалась в том, чтобы выяснять как xml-ка выглядит на входе и какой должна быть на выходе. Всё. Но это всё без архитектора. В нашем случае, этот, так называемый архитектор, засунул палец себе в жопу и решил, что писать будем по TDD на Groovy. Ну а чтоб не расслаблялись ещё прикрутим XSLT. Для бизнеса проэкт закнчился факапом. Вроде всё сделали, но с опозданием на год и нежеланием с нашей стороны исправлять дефекты бесплатно. Ну а программисты очень лихо оттачивали своё ЧСВ друг перед другом. На TDD естессно никто не писал – там бы выяснить, что писать нужно – уже радость. Архитектор, кстати, через пол-года сделал лыжи гоняться за новыми оппортьюнитами. Но кризис-менеджер, правда, радовался. Такое.

Второй проэкт. Тут уж больше бизнес нидс. Решил бизнес быстро запилить для множества своих продуктов SSO решение. Подобрали падающий OpenAM и начали франкенштейнить. Почему франкенштейнить? А потому как нихрена оно не работало толком. Может быть для готового окружения его настроить и можно, но вот для множества продуктов, которые используют множество пользователей настройка OpenAM фактически требовала тюнинга на месте с последующим сопровождением. Ярким примером являлось периодическое падение сего творения с OutOfMem. Попытки воспроизвести локально заканчивались ничем. А падало оно потому как был туда грубо запихан ActiveMQ для горизонтальной синхронизации токенов, которая работала как у телеги пятое квадратное колесо. Криво, туго и, что самое главное, непонятно зачем, потому как пользователь стикался на ноду в мандатным требованием в настройках продукта.

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

Айтишные байки. Реверсим чужой код.

Год 2009. Проэкт самописная CMS-ка на ASP.NET. Решили мы прикрутить TinyHTML. Это был простенький редактор для текста на странице. Он был бесплатный, но за управление картинками (загрузка, хранение, вставка) нужно было заплатить. В то время в сети удалось нарыть весьма годный плагин для управления картинками. Ребята где-то тиснули. Проблема заключалась в том, что бекенд для того плагина был написан на PHP, которого я не знал и побаивался. К этому можно добавить, что за последние пол года я усилено пытался усвоить Java со всякоразными ейными фрейворками, затем переключился на .NET, ну и CSS, HTML вместе с JavaScript. Не нужно забывать также T-SQL. Одним словом каша в голове полнейшая. Посим копаться в чужом для меня на тот момент PHP ни желания ни ресурсов мозга не было совсем. То бишь для меня это вообще были египеткие иероглифы. Но как опыт потом показал очень часто в практике будут вот такие вот ситуации, когда что бы ты не выучил, как классно ни подготовился. Вылезет где-то вот такой вот “PHP” с которым ты будешь вынужден возиться.

Но как бы проэкту нужен плагин на .NET.  Что-то нужно думать. Помню в тумане решил я завести этот плагин. Нужно ведь что-то делать? Вот и решил убедиться что плагин работает. Гугл сказал что нужно установить апачи и простенький веб проэкт. Всё это  было для меня в новинку – день потратил. Плагин работает.

А дальше решил импровизировать. Ведь все, что мне нужно было это ответ сервера и PHP код здесь уже не важен. alert() как всегда в помощь. В результате я смог получать куски HTML-я для кода этого плагина на клиенте. Ну а что делает сервер – то уже под мою отвественность. Начал с простых операций, а потом закрыл весь функционал. На это ушло две недели и пришло чувство удовлетворённости.

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

Айтишные байки. Программирование в институте.

В институте всё изучение (по крайней маре первая половина) программирования у нас сводилось к созданию околоматематических программок. На паскале. Примитивные реализации всякоразных математических алгоритмов.

Помню очень мне не давалась задачка по обнаружению всех простых чисел в диапазоне. В результате я её сделал, но посидеть пришлось дня два. Сейчас даже не понимаю почему. Возможно были особые условия реализации. На третьем курсе у меня появился PC и примерно в то же время мне друг подкинул задачку о возведении 2 в степень 2000. Решал я её два года. Ну прям таки не решал, а помнил. И вот где-то курсе на 5-ом меня осенило как её можно решить. Осенило меня после того, как я пришёл к тому пониманию, что алгоритм можно писать не только в лоб. Что элементарную операцию можно осуществить “не элементарно”. Задача решилась мгоновенно заменой возведения в степень умножением на 2.

Вообще институтская жизнь программиста была не слишком продуктивной. Проэктов было множество, но многие так и остались незавершённими. Студенты не поощрялись, площадки не предоставлялись. Хочешь программируй, хочешь нет. Всем посрать. Помню 5-ый курс. Мы там суммировали матрицы на паскальной программке используя цифровое меню. Один раз ошибся – всё, сначала начинай. Я плюнул на это. Написал на MFC тулзу, которая суммирует те же матрицы перетягиванием матрицы мышкой. Препод посмотрел, скривился. Но вроде зачёт поставил. Ещё один. Написал башни Ханоя. Мнимая 3d-шность, управление курсором. Самому играться было интересно. Причём презентация естественно не предусматривала такое. Ну презентацию приняли. Всё. Интересно, что для башен Ханоя придумал я защиту. Сейчас подробно не вспомю детали, но что-то типа файлика на дискетке, который содержал 1. При запуске на машине создавался скрытый файлик с 1 на диске С:\\, а на дискетке гасился 0. И больше с этой дискетки нигде не запускался. Топорно, но работало. Помню гембеля и возни с этой защитой было больше чем реальной защиты. Пришлось делать специальный релиз без этого всего.

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

Короче вот так.

Айтишные байки

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

На заре

С компьютерами я познакомился году эдак в 90-ом. Обычная советская школа в обласном центре. Был специально отведённый зал с ЭВМ-ами “Агат“, чуть позже подвезли спетрумы, а в 91-ом вторые поиски. И вот, иногда, тех кто был в продлёнке, пускали поиграть. Помню наличие белого халата было обязательным условием для посещения компьютерного зала. Смешно сейчас. Играли в основном в танчики, там где задаёшь угол и скорость выстрела и наблюдаешь за пиксельной параболой. Нам было весело.

Где-то в середине 90-х у друга появилась четверка, которая создавала неописуемую и вряд ли повторимую атмосферу благодаря DOS-у, Win3.1 и всякоразным там игрушкам типа RETAL, woolf3d и др. (лень вспоминать сейчас)

Первый пошел

Стыдно признаться, но к программированию в то время я относился с пренебрежением. Ещё кенгурёнка было по приколу гонять по экрану, а вот кубейсить математические задачки было скучно. Помню, первая идея реализовать что-то на кубейсике пришла из истории. У друга появилась забавная интерпретация некоего исторического события и мы решили историю одной страны написать в том же духе. Причем положить это все в компьютер в виде программы. Типа листать странички туда сюда, ну и картинки пририсовать. Естественно больше одной-двух страничек мы не осилили, но как для первого раза, я считаю – пойдёт. Второй “проэкт” это уже была моя оригинальная идея. Вот здесь мне стыдно признаться. Очень. Это была анимация. В замысле был контурно изображён половой член с тестикулами и пальцы его держащие. Суть анимации заключалась в том что пальцы совершали конечное число фрикционных движений в результате чего на экране появлялся эякулянт. Как и бывает в айти с такими проектами – он был полностью завершён, но по причине пошлости содержимого, продемострирован исключительно в узком кругу. К его особенностям можно отнести простоту, продуманность и четкую уверенность, что его можно осуществить (немало, конечно же, базируюущуся на простоте). Помню он был реализован без циклов от слова совсем. Я их тогда не знал и все итерации описывал последовательно. Вообщем хорошо я подошёл к пониманию циклов. Статус этих проектов мне неизвестен на сей день. Кода нет, бинарников тоже. Думаю утеряны навсегда. Но не утерян тот заряд искры программирования, который появился. Вот чего-то мне кажется, что скучный математический кубейсик так бы не прошиб. Не скажу, что и описанный опыт разжёг во мне “неудержимое” желание программировать, но, по крайней мере, вселил уверенность во что-то.

Программирование в институте

Реверсим чужой код

АрХЕРтекторы

Программируем сегодняшним днём