Wednesday, December 24, 2008

Потрясающий сервис для совместной работы над Open-source проектами и не только

Случайно натолкнулся на ОЛО - https://www.ohloh.net/. Отличный онлайн сервис для совместной работы и обмена сообщениями, микроблоггинга, ссылками, тэгами, над open-source и вообще над любыми проектами.

Там же есть видео с объяснениями что и как работает:


В общем, рекомендую попробовать. Гуглю - покупать :)

Saturday, December 13, 2008

Визит в Ижевск

Сегодня вернулся из Ижевска, где мы были с докладом на заседании клуба CIO Удмуртии.
Первый раз был в Ижевске, интересный город, интересные и весьма продвинутые люди.
Настроение у всех ИТ-шников, конечно, настороженное, но не без доли оптимизма. Как сказал кто-то в кулуарах, тратить на ИТ сейчас никто не будет, но присмотреться и запланировать - вполне.
Значительных проблем, напрямую связанных с кризисом, вроде банкротства и массовых увольнений, не замечено и явно не озвучено. Похоже, люди в целом по стране поджали затраты (на ИТ в первых рядах), приостановили ряд проектов, и с настроением "переживем и это" - переживают. Типа, деньги может и есть, но пока посидим.

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

В музее Калашникова посетили тир, где постреляли из боевого оружия. Винтовка Маузер - это что-то, скажу я вам. Отдача просто зверь. АКМ тоже ничего :)

Сам музей не показался особо интересным, в тире практически тот же ассортимент оружия, можно даже заняться сборкой-разборкой автомата (50 руб).

Да, жили в Парк Инне. Гостиница новая, чистая, хорошая, но - завтраки очень скромные, а баня, сауна фитнес и другие радости 4-х звездочек еще не введены в строй.

К сожалению, летает в Ижевск одна компания ИЖАВИА, у которой, похоже, один самолет Ту-134... живой кошмар командировочного ростом 190 см.
Когда наконец запретят это издевательство над личностью? Могу ли я подать в суд на кого нибудь за шишки, которые я набиваю в Ту-134?

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

Saturday, December 06, 2008

Avarda Forum 2008

Сегодня прошел слет пользователей и разработчиков системы Avarda (Ansoft)
http://www.ansoft.ru/avarda_forum2008.htm
Среди участников - Finn Flare, Baucenter и другие заметные представители бизнеса.
Сложилось положительное ощущение и от уровня участников, и от текущей оценки ситуации. Несмотря на кризис и некий негативный фон, никто руки не опускает, паники нет.
Да, сокращают бюджеты, да, режут расходы, но развитие не останавливается. Это внушает некоторый оптимизм... В конце концов, не нефтью единой...
Положительно оцениваю и тот факт, что не все крупные и средние бизнесы, как можно предположить из рекламы и массивного пиара, сидят на SAP, Dynamix и Oracle Applications, а есть реальные внедрения на базе open-source и оригинальных российских разработках.
Возможно, даже кое-кто в кризис пересмотрит иррациональную тягу к "самым-самым, самым дорогим" решениям от зарубежных вендоров и начент мыслить в более практическом плане. В конце концов, Бентли хоть и хорошая машина, но картошку возить на ней как-то... не очень.

Wednesday, December 03, 2008

Особенности безопасности в аэропорту Уфы

И вот еще вспомнил. Предъявляя паспорт и посадочный талон на спецконтроле (перед просвечиванием), получил от проверяльщицы (женщины в возрасте) вопрос:
- У вас билет электронный?
- Да
- давайте его сюда.

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

Далее заставили снять ремень (кстати, во многих аэропортах перестали заставлять снимать ботинки и ремни) и включить ноутбук.

Вести с полей: Новосибирск, Тюмень, Алмата, Уфа

Берег левый, берег правый...
В рамках уже традиционного (третьего) осеннего роад-шоу, теперь проходящего под знаменем Embarcadero Technologies, за последние 3 недели мы проехали по 3 городам с семинарами (чуть раньше были в Новосибирске), посвященными новым версиям Delphi и C++ Builder (2009).
Встретились довольно с большим количеством людей, говорили о том, о сем, ну и конечно, о кризисе :)
Разруха - в головах! (С)
Приметы кризиса есть везде - шепчутся о сокращениях, кое-где уже сокращают, практически везде срезали бонусы. Но в большинстве своём люди, похоже, надеются на быстрое исправление ситуации. Одежда, обувь, еда - все по прежнему в изобилии, на все вроде хватает. Машины в регионах никто каждые 3 года за обязанность обновлять не имеет, поэтому извиняющихся ноток в голосе человека, подвозящего вас на 7-летнем праворульном японце, не услышите (и слава богу). Купить квартиру по 40-60 тыс за метр и с ипотекой (к которой в регионах в основном хорошо относились) было трудно, а без нее по нынешним 35-40 невозможно, поэтому и беспокоиться нечего (а там, глядишь, метр еще подешевеет и ипотека опять появится). В Турцию в 2009 не поедем, оденем рюкзаки и пойдем в горы. Одним словом общий лозунг - "Пересидим!", с ожиданием разрешения проблем (которые в основном у банков и слишком хорошо питающихся москвичей) уже в начале следующего года.
Бакс
Доллар, как мне показалось, особо никого не беспокоит - курс в 23 воспринимался неким курьёзом, и теперь все становится на свои места, и за зеленого будут давать 30-32, как в 00-02. Кстати говоря, курс тенге удивил своей устойчивостью и очень низким зазором на покупку-продажу (120.2-120.6).
Алмата
Алмата, конечно, выбивается из общего ряда. В российской прессе употребляется расхожая фраза "В Казахстане кризис начался раньше, год-полтора назад." Начался он начался, но дай нам ВВП такого кризиса, как был у них. Да, цены на жилье снизились, сократили расходы, но в то время не было ни массовой истерии, ни таких огромных проблем с банками.
Сейчас в Казахстане осторожно присматриваются к суете северного соседа, мнения в основном сдержанные, оптимизм открыто не выражают, но и на жизнь не жалуются. Восток, конечно, дело тонкое, но мне показалось, что настрой в Казахстане более правильный - не только "Давно здесь сидим", но и "Зачем думать о кризисе, работать все равно надо".
PS Ну и пару слов о гостиницах.
Тюмень - не рекомендую гостиницу "Тура". Кошмар-с.
Алмата - не рекомендую Амбассадор. Какие там нафиг 4 звездочки, и 2-х нет. В прошлый раз были в Казжол, существенно лучше.
Уфа - рекомендую Иремель-Парк. Недорого (2 тыс) за чистый хороший номер. Интернета пока нет, при нас тянули кабель, но в Уфе с инетом совсем беда - примерно 1.5руб/Мб.
PSS Ну и 2 слова о самолетах. Ту134 - отстой. Заменять обещанный приличный самолет на неприличное корыто - издевательство.

Friday, October 31, 2008

Другой аккаунт

"Куда же подевался Мюллер?", - напряженно размышлял Штирлиц, по своему обыкновению раскладывая спички по столу, - "Так быстро и бесследно он не мог исчезнуть, все таки группенфюрер, фигура значимая... значит, ему кто-то помогает из союзников... Но кто? Вольф? Вряд ли...", - Штирлиц задумчиво уставился на додэкаэдр из спичек и вдруг его осенило: "Черт побери, это же другой аккаунт в ЛинкедИне!", и он тут же перелогинился как aisaev@gru.ru и тут же увидел Мюллера в списке контактов.

Friday, October 10, 2008

Вопрос: а что у нас с ИТ?

Читаю вот ИТ-блогс, и ни слова о развивающемся за стенами серверной кризисе. ИТ не затронуты? Все на своих местах? По прежнему на собеседованиях 10 недоучек на 1 более-менее приличного и все с немалыми требованиями ЗП?
А что с продажами - закупки, внедрения, ИТ-бюджеты - все на мази? не сократились?
В общем, хотелось бы услышать какие-нибудь мнения и оценки. Конечно, лучше - положительные :)

Sunday, September 28, 2008

Болевая стимуляция QA в Микрософт

Отличное шуточное видео: Micorsoft анонсирует новую систему Quality Assurance. Я так понимаю, "кресло программиста" создано на базе Aeron.

Friday, August 22, 2008

Из архивов: Слоеные пироги приложений

Вот, вроде бы и не считаешь себя таким уж старым пнем, а выясняется, что уже наплодил архивов, о которых успел позабыть. :)
Мой основной компьютер неожиданно дал дуба, похоже, в районе блока питания, и пришлось пересесть на запасной, то бишь мой же, но предыдущий компьютер, ныне используемый женой. И там обнаружилась собрание заготовок к книге по веб-разработке на Java, которую я собирался писать еще в 2003 или 2004 году. Впрочем, когда-то я делал перевод User Guide по Struts 1.0 и даже владел доменом и сайтом struts.ru :)
Но, почитав эти заготовки, я усомнился в том, писал ли это я сам или где-то взял, как-то не очень знакомо выглядит, кое с чем я не согласен :). Короче, поискав Яндексом, вроде бы плагиата не обнаружил, значит, писал сам ("...водки у нас много - значит, поехали на задание" (С)). Копи-паст - и представляю на суд общественности.

Слои в приложениях
О вреде классики
Очень часто приложения пишутся таким образом, что в едином модуле (здесь “модуль” понимается в смысле исходного кода) смешаны различные функции – содержится код SQL-запросов, элементы интерфейса пользователя, элементы бизнес-логики. Например, такой подход часто применяют программисты на Delphi, когда на одной форме находятся и компоненты, отвечающие за работу с базой данных, и визуальные компоненты, а бизнес-логика находится прямо в обработчиках событий кнопок. Некоторые очень метко, но достаточно зло называют такие приложения “винегретами”. На рисунке 1 изображена условная схема модуля подобного приложения.

Рисунок 1 Приложения, смешивающие в одном модуле различные функции

Такой подход удобен для разработки небольших приложений, написанных одномоментно, которые не предполагается развивать. Если необходимо решить простую задачу, чтобы быстро заткнуть “дыру”, то приложение создается именно так – смешением всех ингридиентов до получения приемлемого результата.
Несмотря на кажущуюся быстроту реализации простых задач, такой подход, который иногда не слишком уважительно называют “метанием компонентов”, не может являться надежной основой для разработки крупного и даже среднего проекта. То есть, невозможно представить сложную задачу в виде совокупности таких простых задач, которые можно было бы быстро решить.
Вообще говоря, разработать приложение, в котором будет, например, 200 или более подобных форм, содержащих смесь логики, SQL-запросов, обработки событий и визуальных интерфейсов, вполне реально. Но при этом такое приложение превратится в настоящий кошмар для программиста, в результате чего мы получим следующие проблемы:

– Нет расширяемости. Приложение станет очень трудно расширять. Чтобы встроить какую-то новую функциональность, которая хотя бы краешком затронет функции всех 200 форм, придется поправить все эти 200 форм.

– Много рутины. Расширение приложения будет на 80% состоять из рутинной работы. В “смешанном” приложении практически невозможно выделить какую-то часть, пригодную для повторного использования, поэтому каждый раз при создании нового типа документов, нового бизнес-процесса, придется в сотый раз реализовывать до боли знакомую задачу – и в сотый раз наступать на те же грабли, что и ранее – так как человек не в состоянии помнить все мелочи и детали, которые возникают при разработке. При этом разработчики будут неизбежно терять интерес к разработке новых функций и относится к ним как к неприятной обязанности, ведущей к неизбежному “удару граблями”.

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

– Выход из под контроля и “заплаточное” программирование. Если приложение живет достаточно давно и сменило несколько хозяев-программистов, которые постепенно доделывали его, то приложение может полностью выйти из-под контроля – то есть, ни сам программист, ни тем более пользователь не сможет внятно объяснить поведение программы или причину ошибки. Исправления ошибок и добавлении функциональности делаются путем наложения “заплаток” на расползающийся “тришкин кафтан” приложения, которые еще больше запутывают программу. Примерно так и рождаются легенды о искусственном разуме :).

– Непереносимость. Приложение почти невозможно перенести на другую СУБД, операционную систему или язык. Перенос будет означать полную переделку приложения, так как придётся поправить все взаимосвязанные куски кода – фактически, все приложения.

– Затруднённость командной разработки. Если над приложением работает команда, то она будет либо подчинена одному ведущему разработчику, который действительно разбирается в поведении приложения, а остальные при этом будут у него “на побегушках”, либо будет раздроблена на отдельные суверенные личности, которые ревниво охраняют свои куски кода и отказываются лезть в чужие. Ясно, что и то, и другое не прибавят команде разработчиков эффективности в работе и тем более не будут способствовать творчеству..

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

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


Рисунок 2 Общая схема шаблона Layers

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



Рисунок 3 Обобщенное представление приложения согласно паттерну Layers

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


Что такое “слой”?


Вопрос очень непростой, ответ на который зависит от того, какой методологии мы будем следовать при разработке приложения – будем ли использовать только объектно-ориентированный подход или, как это часто бывает, остановимся на компромиссе между ООП и процедурно-ориентированным подходом. Помимо этого, существуют также шаблоны для проектирования тех или иных слоев. Также понятие слоя может быть связано с применением пакетов Java или namespaces С++ и т.д.
Чтобы не вдаваться в ненужные в данный момент подробности, дадим такое определение:

Слой – часть приложения, предназначенная для выполнения группы связанных функций и изолированная от других частей приложения некоторым постоянным интерфейсом, который не меняется при изменении реализации.

Рассмотрим подробнее это понятие. Как следует из определения, по поводу структуры слоя – обычно он делится на 2 части: “интерфейс” (не в смысле пользовательского интерфейса) и “реализацию”. Интерфейс меняется лишь при изменении функций самого слоя и не меняется при изменении функций нижележащих слоев, а вот реализация меняется и при изменениях данного слоя, и при изменениях нижележащего слоя. Такая конструкция защищает верхние слои от каскадных изменений в реализации нижних слоев.
Теперь давайте более подробно рассмотрим каждый слой на нашей схеме и приведем примеры его использования, а также укажем, какую именно конкретную реализацию мы будем рассматривать в данной книге. Начнем с самого “нижнего” слоя, который, тем не менее, не является самым простым или менее всего важным.

Ресурсный слой

Под ресурсным слоем понимается то, что обеспечивает наше приложение данными. Это может быть СУБД, (LDAP) Lightweight Directory Access Protocol , внешний по отношению к данному приложению application-сервер, или просто обычные текстовые файлы или файлы XML. Именно поэтому мы использовали название “ресурсный слой”, а не “СУБД” или “хранилище данных”.
Конечно, большинство читателей будет применять именно ту или иную базу данных в качестве ресурсного слоя, однако с точки зрения остальных слоев не должно быть никакой разницы, с чем конкретно мы работаем.
Здесь большинство читателей может воскликнуть: “Это невозможно!”.
Итак, ресурсный слой представляет нам совершенно конкретный API (например, JDBC или ODBC), который будет использоваться для работы с данными. При изменении методики работы с данными нам придется (очевидно) изменять этот слой, а также его непосредственного “соседа сверху” - интегрирующий слой.
В качестве ресурсного слоя в большинстве случае используются реляционные СУБД.
Но мир хранения данных отнюдь не заканчивается на строго структурированных данных, которые обычно хранятся в реляционных базах данных. Те, кто знаком с разработкой web-сайтов, хорошо знают, что одной из самых распространенных задач “сайтостроения” является обеспечение полнотекстового поиска по материалам, хранящимся на сайте в самом разнообразном виде. Для решения этой задачи может использоваться внешняя система, вроде Lucene (это почти идеальное решение для кроссплатформенных приложений, которым необходим полнотекстовый поиск).
Совместное использование СУБД и полнотекстового механизма поиска, которое мы продемонстрируем, будет являться хорошим подтверждением тезиса о пользе разделения приложения на изолированные уровни.

Интегрирующий слой
Этот слой в случае с базами данных также называют persistent layer. Наиболее известное описание того, что такое persistent layer дано в работе S.Ambler [6], которая послужила основой для многих реализаций подобных слоев.
Основной задачей интегрирующего слоя в структуре приложений является то, что он должен полностью скрывать от слоя бизнес-логики реализацию ресурсного слоя. Он предоставляет некий API (application programming interface), который в идеале, постоянен для всех ресурсных слоев.
Фактически, этот API реализует функции сохранения тех объектов/документов, которые есть в слое бизнес-логики, функции извлечения одного или группы документов согласно условиям. Обычно этот API предоставляет собственный язык запросов, обертывающий, например, SQL.
В мире Java наиболее известной реализацией persistent layer является Hibernate.

Слой бизнес-логики
Под бизнес-логикой понимается масса различных вещей. Это понятие действительно охватывает очень широкий спектр понятий, и попытки дать ему точное определение приводят к появлению пары абзацев текста, содержащих массу весьма расплывчатых предложений. Чтобы не впадать в подобную ловушку, дадим максимально простое определение:
Бизнес-логика – это понятия, которыми мыслит пользователь нашей системы, плюс действия с этими понятиями.
Например, пользователь бухгалтерской системы мыслит проводками, счетами, накладными и т.д., а действия – провести, создать, списать и т.д. Пользователь складского приложения мыслит учетными карточками, остатками и так далее.
Вообще говоря, это сама по себе весьма непростая задача – выяснить, что на самом деле понимает пользователь и как он мыслит, когда выполняет то или иное действие. В идеале, этим должны заниматься аналитики, которые на основе интервьюирования пользователей должны формализовать изучаемую логику и представить ее в очевидном недвусмысленном виде – с помощью Use Cases в UML или диаграмм IDEF и так далее.
Однако часто аналитик в штате проекта отсутствует (или является некомпетентным, что еще хуже), и программист-разработчик, помимо кодирования, вынужден также заниматься и анализом предметной области.
Как бы то ни было, предметная область в конечном итоге отобразиться в конкретные программные структуры, которые мы и будем называть объектами бизнес-логики.
Слой бизнес-логики должен реализовывать в виде программных объектов понятия (сущности) бизнес-логики и действия между ними. Очевидно, что виды и способы представления бизнес-объектов могут быть самыми различными – некоторые разработчики высказывают подозрение, что их число может превысить число самих объектов предметной области.
В то же время, несмотря на огромное разнообразие предметных областей и объектов в них, есть инструмент, достаточно гибкий, чтобы выразить практически все понятия предметной области и действия между ними.

XML
“— О”, может воскликнуть читатель, “XML тут, XML там! И этот (автор) туда же!”.
Ну а что же остается делать, если XML позволяет гибко выразить понятия предметной области? Отказаться от его использования в знак протеста против рекламной шумихи вокруг XML? Вряд ли это будет мудрым решением.
А пока вернемся к слою бизнес-логики и завершим его краткое описание парой конкретных примеров.
Итак, если мы например, пишем складское приложение, то пользователь, несомненно, потребует возможности получать сведения об остатках товаров на складе.
Поэтому очевидно, что в слое бизнес-логики должен быть метод вида getRemainsByProduct(), возвращающий остатки товара на складе.
В данном случае это пример бизнес-метода, который неявно предполагает наличие бизнес-объектов Product (товар), Stock. (склад) и т.д.
Ну и пример бизнес-процесса – выписка приходной накладной. Если на склад пришел некий товар, то это необходимо учесть. Поэтому нам будет нужен бизнес-процесс “Выписка приходной накладной”, в котором будут вызваны соответствующие бизнес-методы по получению наименования товара, его количества, ввода поставщика и т.д.
Важное замечание: Употребление слов “бизнес-объект”, “бизнес-метод”, “бизнес-процесс” и т.д. никоим образом не указывает на то, что мы будем подразумеваем наличие в слое бизнес-логики классов (в смысле языка программирования) вида Product, у которого есть методы getRemainsByProduct(), и что вызов бизнес-метода/процесса будет выглядеть как myProduct.getRemainsByProduct(). Реализация слоя бизнес-логики далеко не сводится к прямому отображению понятий и сущностей предметной области на классы (иначе было бы достаточно только интегрирующего слоя).

Слой управления
Слой управления редко выделяется в классических монолитных приложениях, и обычно перемешан с пользовательским интерфейсом и бизнес-логикой. Примеры элемента управляющего слоя – это меню программы, выбор пользователем вида создаваемого объекта в процессе исполнения какого-либо мастера (wizard), перенаправление вывода на экран с ошибкой и т.д.
Обычно подобный управляющий код скрыт в массе операторов ветвления или погребен в каскадных вызовах обработчиков исключений, которые разбросаны по коду смежных слоев.
Почему необходимо выделять слой управления? По той же причине, что и надо отделять остальные слои друг от друга – для изоляции бизнес-логики от пользовательского интерфейса. Бизнес-метод выписки накладной должен работать без исправления в нем единой строчки кода как с использованием пользовательского интерфейса на базе JSP, так и с использованием Swing или даже без использования native Java – например, на Delphi.
Как же достичь такой гибкости? В данном случае следует полагаться на две мощные разработки, одна из которых обеспечит нам поддержку решения с web-интерфейсом, который будет основным вариантом пользовательского интерфейса; а вторая поможет нам расширить рамки нашего приложения с помощью протокола SOAP (Simple Object Access Protocol).

Наш выбор – Struts и Axis
Jakarta Struts – один из самых популярных проектов организации Apache Software Foundation (ASF). Цель этого проекта – разработка Open Source среды для разработки web-приложений с помощью технологий Java Servlet и Java Server Pages (JSP). Разработка приложений с использованием Struts основана на шаблоне проектирования Model-View-Controller, в ее модификации, известной как Model 2.
Axis также является проектом ASF, и представляет собой реализацию протокола SOAP. Использование Axis позволит нам воспользоваться возможностями WEB-служб для реализации частей пользовательского интерфейса или даже бизнес-логики не на Java, а на других языках программирования. .

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

При разработке слоя UI нам опять придет на помощь Struts – с его мощными библиотеками тэгов, возможностями автоматической проверки вводимых даных и обработки ошибок. А также мы будем использовать XSLT для получения повторно используемых модулей пользовательского интерфейса.

Monday, August 18, 2008

Мягкий кризис?

Все таки август не слишком удачный месяц. Всякие проблемы, несчастья и безобразия очень любят происходить именно в августе (даже не буду приводить примеры).
Вот и сейчас, вернувшись из отпуска, неким свежим взглядом посмотрел вокруг: а страна-то в кризис въехала. Не такой заметный, как 10 лет назад, а более цивилизованный, мягкий, но суть одна - людям придется затянуть пояса.
Смотрите, со всех сторон плавненько, планомерно поджали - инфляция во главе с бензином поджала потребление, налоги подымают (сейчас ратифицируют +3% на нужды пенсионеров, а обещают вообще 23% подоходный сделать), недвижимость и так выросла выше крыши, да еще ипотечные ставки растут (АИЖК для Москвы подняло на 2% базовую ставку, теперь по их линии ипотека 17% будет), зарплатам расти уже некуда, к Европам подбираемся, невыгодно тут бизнес делать (Люксофт вообще уходит, как я понял, остальные следом?).

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

И претензии правительству не предъявишь - все спишут на козни и издержки в построении империи, типа, не до жиру, цыц, верноподанные, за державу обидно должно быть, а не за кредиты! Впрочем, правительство на самом деле положительный момент найдет - ведь же при 40 рублей (раз вопрос инфляции стоять не будет как не соответствующих духу единения) экономика опять станет конкурентноспособной, а то что кредитных иномарок будут меньше брать, так то даже и лучше, Приоры пусть берут! До выборов-то далеко, можно и непопулярные меры поприменять.

И еще до того, как начнется вся эта пакость, начнутся страхи, экономия, свертывание инвестиций... и ИТ в первую очередь, так как без них (ну, точнее, а старых версиях, без новомодных аббревиатур) прожить можно.
Скажете, я паникер? Нет, просто я верю в Вернадского и солнечные 11 летние циклы... Сейчас как раз начинается новый: http://www.rian.ru/analytics/20080207/98661888.html
Неужели совпадение?

PS Нет никакой ложки. Т.е. Стабфонда.

Thursday, August 07, 2008

Турция: рыбалка+пикник (Черный олень)

Случайно нашел в номере разъем для интернета, который к тому же работает, отчего можно постить в блог без походов в лобби. Подцепил какой-то гнусный JavaScript-троян (в файле day.js) - антивирус и файервол его опознают, предлагают и типа лечат, но все равно он лезет откуда-то (разбираться лень, отдых все-таки) при загрузке страниц, и Avast его рубит.
Ну вот, собственно об отдыхе. Ездили сегодня на так называемую рыбалку+пикник на Черный олень (или Молодой олень). Если очень коротко, то "пьяные уроды испортят и не такую хреновую экскурсию". Если подробнее - читайте ниже.
Черный олень - озеро, образованное водохранилищем в горах, и похоже залившее какой-то карьер, так как вокруг живописыне выработки грунта и строительные материалы.
Озеро пресное, вода довольно мутная, но теплая. Купание, на которое выделили меньше всего времени, было самой приятной частью (все таки плавать в соленом море не очень, без маски разъедает глаза, да и в рот неприятно заливается). Славно поплавали, детям за 5 баксов выдали спас-жилеты (в карьере глубина метров 10). Но началось все с так называемой рыбалки - раздали удочки и 2 часа мучались. На 40 человек поймали 10-12 рыбок (мы с женой не поймали) весом грамм 300.
Пикник - кормежка жареной рыбой и салатами плюс "напитки". И тут начались неприятности. Хотя большинство было с детьми, бесплатная теплая турецкая водка (sic!) быстро "раскрепостила" "рыбаков" и началось русское свинство. В автобусе стоял сплошной мат, ругались и матерились, и выясняли отношения на уровне даже не ПТУ, а средних классов - вроде "ты че, чувак, оборзел".
Даже собственные жены не могли их урезонить. Было неприятно. Я так даже переоценил мнение о нашем "пятизвездочном" отеле (Asteria Bellis) в лучшую сторону - хоть они и не убираются практически и туалетную бумагу экономят :), но таких персонажей я не видел (экскурсия сборная из разных отелей).
Оценил пресное теплое озеро - если бы пологий песочный пляж был, для детей было бы идеально. Ну и еще раз подтвердил свой тезис - никаких групповых экскурсий. :)

Tuesday, August 05, 2008

В Турции

Нахожусь в Турции, в Белеке, в отпуске. Жара, пиво отстой, турки как обычно (они хотят в ЕС? хахаха...), ну и отрываюшиеся соотечественники.
Море 30 градусов, воздух имеет какую вообще запредельную температуру. Фактически, постоянная сауна.
Слава богу, в лобби есть интернет. Ну и осталось еще пол-срока :)

Sunday, July 06, 2008

В Лондон

Сегодня, 6 июля, отбываю в Лондон на производственное совещание. Надеюсь, удастся выбраться посмотреть Биг Бэн и послушать говор коренных англичан.
Особых иллюзий, правда, не питаю - необходимость платить за шаттл-бас четко характеризует граждан царицы морей.
А еще сегодня у меня день рождения. На поздравления не напрашиваюсь, о чем прямо и заявляю :)

Thursday, July 03, 2008

Трое в серверной, не считая админа. Глава 10. Ключ

Знакомство. Кресло. Фантастический футбол. Дергающийся глаз. Сон в летнюю ночь. Склад наждачной бумаги. Фингал. Вода! Истинный кайф от алкоголя. Колени. Не было мальчика. Мишино пиво. Серверная скульптура. Холодильник и архив. Ключ.

Предыдущие главы:
Глава 1. Серверная
Глава 2. Админ
Глава 3. Бег на месте
Глава 4. Порнонет
Глава 5. Голубая угроза
Глава 6. Заговор
Глава 7. Неожиданное предложение
Глава 8. Тестеры и аналитики
Глава 9. Побег


Из комнаты с гобеленами мы прошли в большую комнату, в центре которой был здоровенный плазменный телевизор, а перед ним, как в учебном классе, стояли большие кресла, обитые чем-то вроде плюша.
- Проходите, присаживайтесь, - пригласил нас хозяин и приветливо махнул моргентштерном, - Меня зовут Сергей, я наблюдатель, - и он протянул руку для рукопожатия.
- Кирилл, - представился Кирилл,
- Алексей, - представился я,
-Тезки!, - представился Сергей.
- Замечательно, - сказал Сергей с моргенштерном. – Сейчас будет футбол, вы уж извините, я его жуткий поклонник, поэтому все дела обсудим после, хорошо? Вы присаживайтесь, присаживайтесь, берите пиво, закусывайте.
Я уселся в кресло, которое оказалось неожиданно очень удобным, расслабился, и почувствовал жуткую усталость. Как все это надоело, какая-то круговерть вокруг. Неожиданно я ощутил что-то вроде испарины на лбу, как будто лицо стало мокрым. Пощупав лоб, я убедился что он сухой и утвердился в мысли, что очень сильно устал.
Взяв со столика банку пива, я отхлебнул, но вкуса почему-то не почувствовал.
Неожиданно в глазу что-то задергалось и изображение футболистов на экране перекосилось. Такое бывает, когда просидишь за компьютером всю неделю и потом в субботу, толком не отдохнув, зачем-то полезешь к ноутбуку – и организм начинает резко сопротивляться перегрузке.
Я прикрыл глаза, стараясь успокоить дергающийся глаз. На экране тем временем творилась какая-то фантастика – наша команда бегала и прыгала, как будто им вставили новые батарейки. Я вообще не большой поклонник футбола, и УЕФА от кубка чемпионов не отличаю, но понимал, что происходит что-то необычное.
Прикрыв глаза, я пытался не обращать внимание на футбольную трансляцию, пытаясь успокоить тик. «Это всего лишь сон, какой-то фантастический сон», - шептал я себе, постепенно проваливаясь в дремоту.
Но тут забили гол, все заорали, я приоткрыл другой (не дергающийся) глаз, пытаясь посмотреть, что же такое случилось, но вдруг получил мощную оплеуху по правой, а потом и по левой щеке.
От удара изображение совсем расфокусировалось, я помахал рукой, пытаясь понять кто же меня бьет, но никого не нащупал….Потом изображение стало собираться… собираться… и собралось в нечто, очень напоминающее Мишину физиономию.
- Очнись!, - как сквозь пелену орал Миша и тряс меня. Я хотел сказать, чтобы он перестал орать, но вместо этого только промычал и полностью отключился.
Очнулся я от ощущения жутчайшего сушняка и абсолютной заложенности в ушах. Было такое ощущение, что во рту у меня склад наждачной бумаги, а в ушах торчит по рулону ваты. Рубашка была влажной, как будто я сильно облился. С трудом открыв глаза и попытавшись пошевелиться, я понял, что переживаю, наверное, самое жуткое похмелье в своей жизни. Помнится, в студенческие годы ходила такая поговорка «блевал дальше, чем видел», но сейчас это было нечто особенное…
Тем обиднее был тот факт, что я не помнил, чтобы я так напивался в последние дни.
Повернув голову, я вдруг понял, что сижу не в кресле перед телевизиром, а лежу в на втором этаже нашей серверной на куче витой пары. Напротив меня на диване сидели Кирилл, Сергей и Миша. Миша сидел на краешке, далеко от них, и имел необычно расстроенный и даже обиженный вид. Особую грусть ему придавал здоровенный фингал в пол-лица. Кирилл и Сергей, судя по зеленовато-белому цвету лица, как и я, тоже переживали сильное похмелье – откинувшись на спинку кресла, они вяло шевелились, потихоньку отхлебывая воду из бутылок.
Вода! Я попытался сказать «дайте попить!», но только всхрипнул слегка. От попытки сглотнуть несуществующую слюну пересохший рот произвел жуткий скрип где-то в районе кадыка… К счастью, Миша сунул мне в руку 1.5 литровую бутылку с водой и я надолго присосался к ней. Вода была теплая, хлорированная, но всё же это была вода… какая всё-таки замечательная жидкость!
Выпив практически всю бутылку, я почувствовал себя лучше и попытался встать, чтобы пересесть с кучи проводов на диван, но это было большой ошибкой. Коленки не просто дрожали от слабости, они просто подогнулись! и отказались держать мои ноги в прямом положении. Я изрядно ударился об пол, и ползком на коленях добрался до дивана. В неподвижном состоянии, смотря вверх примерно под углом 45 градусов (иначе возникала жутчайшая качка), я расслабился и смог таки задать свой саамы любимый за последние 3 дня вопрос:
- Что случилось?
Ответом мне послужил тяжкий вздох Кирилла, затем Сергея. Миша помолчал и сказал:
- Ну, я уже рассказал всё.… Если вкратце, вы обдолбались и теперь вас колбасит.
Блаженное состояние нирваны, в которое я практически погрузился, обрадованный глубокой неподвижностью своего тела (интересно, может быть именно в этом побочном эффекте похмелья и есть истинный смысл употребления алкоголя?) было возмущено этим Мишиным утверждением:
- Где обдолбались? У твоего друга…у Сереги шо ли?
Я попытался напрячься совсем чуть-чуть, чтобы вспомнить, что было после того, как мы начали смотреть матч, и ничего не мог вспомнить, кроме того, что меня (вроде?) кто-то начал бить.
- Какого Сереги!, - всплеснул руками Миша. – Не было никакого Сереги.
- Как не было… тогда где? - я попытался мысленно откатиться еще дальше, - тогда у этого, Кеворкяна? В IBM?
-О, - вдруг вставил слово Кирилл, - Ты тоже помнишь про IBM.
Миша расстроился еще сильнее и сказал чуть не плача:
- Не было никакого IBM! Откуда вы его взяли то... Тут вы обдолбались, тут. Моим пивом.
- Пивом?! – я был слегка удивлен. Конечно, производители пива в последнее время добавляют в напиток жуткие примеси, отчего 2-3 бутылки пива приводят к неприятным последствиям с утра, но чтобы вот так вот…
- У него пиво было с коноплей, - сказал Сергей, прикладываясь к бутылке с водой.
- Как это? Что это за пиво такое? – я почувствовал легкое любопытство (удивительно, насколько похмелье примиряет с загадками природы и человеческого разума)
- Голландское, очень дорогое пиво, - сказал Миша. Он аж почернел, вспоминая:
- Сначала я вас пустил сюда… сдуру... лучше сидели бы внизу. Вы как приняли по бутылке, так меня начали мочить чем придётся, фингал вот поставили, потом придушили, еле вырвался. Аську мне всю перехреначили, всех там послали….
Догнали, связали, потом еще пива добавили. А его максимум одну бутылку на вечер, да и то иным много…
- Ууу…, - я попытался вспомнить… да, пиво пили… Какое-то иностранное пиво было.
Миша тем временем продолжал:
- Ну я разозлился на вас и ушел домой.
- Домой? – тут я тоже начал расстраиваться. – Как? А мы?
- Ну а куда вас то? Вы спали как… как обдолбанные и спали. Думал, приду с утра, вы проспитесь и по домам., - тут Миша вздохнул… - Если б я знал что вы сделаете, я бы вас связал и в туалете запер…
- Ну-ну, - хрипло сказал Сергей. – Ты того… не этого…
- Ага, - огрызнулся Миша. – Пришел с утра, а вы здесь чего устроили!
- Ну, скажем, не с утра ты пришел, если прикинуть, - возразил Кирилл, - а ближе к вечеру.
- У нас, у админов, утро такое, - сказал Миша. – Но, блин, как вы умудрились всю серверную разворотить за полдня, я не могу представить.
- Мы разворотили? Это же всё голубые там поломали, болгаркой там всё порезали, -заметив, что Миша недружелюбно смотрит на меня, я кротко переспросил: - Так что, и голубых не было?
Миша отвернулся и махнул рукой.
Я вопросительно поглядел на Кирилла и тот покачал головой:
– Похоже, мы сами тут наворотили….Вон, погляди вокруг… и внизу.
Я, можно сказать, впервые обвел взглядом верхнюю комнату, всё еще борясь с сильным ощущением, что я нахожусь на корабле в сильный шторм – голова сильно кружилась.
Комната носила следы явного разгрома – стол перевернут, кресло разодрано в клочья, а холодильник смят, разбит и покорежен, как будто его плющил бульдозер. Мишин ноутбук с вывалившимся ЖК-экраном валялся на полу.
Держась за диван, я добрался до открытого люка и заглянул вниз, в серверную. Да, такого я никогда не видел…
Решетки и стеллажи были разобраны, серверы из них вытащены и сложены в некое подобие винтовой лестницы, которая прямо вела к люку. По стенкам гроздились составленные домиками сервера, а в дальнем конце комнаты стояло вообще нечто: два 5-киловаттных УПСа служили опорами для стопки 4-х юнитовых серверов, по бокам торчали «руки» из лезвий, а сверху, в виде головы, был нахлобучен стример.
Но самое удивительное было то, что все эти скульптуры, лестницы и даже фигура серверо-монстра были запитаны и законекчены в сеть! Все коробки исправно мигали, гудели и, судя по всему, находились в рабочем состоянии.
Наш центральный маршрутизатор, 7200-ая циска, вместе с разветвителями представлял из себя нечто вроде многомерного ежа, подвешенного за каждую из своих иголок – витая пара тянулась просто по всем направлениям, пронизывая всю серверную.
Миша подошел и заглянул мне через плечо. Заметив, что я смотрю на шедевральную паутину из витой пары вокруг циски, он застонал и чуть не прослезился:
- Ироды, что ж с циской то моей сделали. Как теперь обратно всё делать? Я ее полгода настраивал…
- Ладно, ладно…,- я похлопал его по плечу, - а что дальше-то было.
- Ну, а что дальше, - пожал плечами Миша.- Когда я пришел, вы уже закончили с серверной, потом видать приняли ещё пива и тут крышу вообще снесло. Разгромили у меня тут всё и холодильником, как тараном, пробили дыру в соседнее помещение.
Я обернулся, и увидел, что в углу, за холодильником, действительно пробита дыра.
- И.. куда эта дыра ведет? - спросил я
- В архив, – покривился Миша. – Там Вы кучу каких-то документов переворошили, читали что-то, декламировали стихи, а потом просто орали и бегали.
Действительно, в нашем здании был архив… Большое такое пыльное помещение, куда свозили разное бумажное старье. Я подошел к дыре и посмотрел в нее. В большом тускло освещенном аварийными лампочками зале стояли стеллажи, между которыми валялись кучи каких-то бумаг. Кто-то здорово порезвился, похоже...
- Ну вот, продолжал Миша, - я было подумал вызвать дурку, чтобы вас успокоили и упрятали на пару дней, но подумал, что начнут спрашивать что да как и откуда, и меня тогда за пиво-то повяжут.… Поэтому я просто подождал, пока вы проспались. Ну, и с небольшой помощью – он показал на мою мокрую рубашку – я вас разбудил.

Я вернулся на диван, хлебнул еще воды и сказал:
- Ну, по-крайней мере, мы живы, и никакой IBM не существует, - улыбнулся я, глядя на нахмуренные лица своих коллег, - ну, в смысле существует, но не такой злой и вообще. Раз это всё того, типа бред, давайте домой, а? Отоспимся и потом всё починим.
- Ты думаешь, мы бы тут сидели бы хотя бы минуту, если можно было бы пойти домой? – язвительно спросил Сергей.
- Так, а почему нельзя? – спросил я. – У Миши есть ключ, откроем дверь и пойдем домой.
Кирилл вздохнул, покачал головой, вздохнул, и со второй попытки, с некоторым трудом произнёс:
- Он. Его. Потерял.

Конец 10-й главы

Продолжение здесь

Tuesday, June 24, 2008

Трое в серверной, не считая админа. Глава 9. Побег

Обед. Гамбургеры. Обед по сэйлзовому. Мусорный побег. Снова холодильник. Моргенштерн. Матч.


Предыдущие главы:
Глава 1. Серверная
Глава 2. Админ
Глава 3. Бег на месте
Глава 4. Порнонет
Глава 5. Голубая угроза
Глава 6. Заговор
Глава 7. Неожиданное предложение
Глава 8. Тестеры и аналитики

Выбравшись из цеха аналитиков, мы забрались в нашу тележку. Герберт раскрыл рот чтобы скомандовать, как вдруг коридоры заполнил протяжный печальный рёв. Начавшись относительно тихо, он за пару секунд достиг максимума и оборвался.
- Обед!, - обрадовался Герберт и бросил вожжи. Инвесторы бодро отцепили свои подтяжки от тележки и, построившись клином, быстро куда-то зашагали. Герберт выскочил и зашагал куда-то.
- Эй, - окликнул его Кирилл, - Ты куда? А как же мы?
- Извините, у меня обед, - широко улыбнулся наш провожатый, - Встретимся через час. Возьмите ланч у себя под сиденьем.
Я пошарил под сиденьем и нащупал что-то бумажное. Вытащив его на свет, я обнаружил коричневый пакет, в котором оказалась банка колы, гамбургер, картошка фри и еще что-то. Аналогичные пакеты оказались и у моих коллег. Признаться, прошло довольно много времени и мой рот наполнился слюной даже при мысли о холодном гамбургере и, главное, о кока-коле, которую я, в сущности, не очень-то и люблю, но сушняк, сами знаете, заставит полюбить и московскую водопроводную воду.
-Не пейте колу, - раздался шепот. Я повертел головой, и увидел что у Миши приоткрыт один глаз и он углом рта напряженно шепчет: - Не пейте колу.
Миша, похоже, притворялся, что он в отключке. Сергей попытался что-то спросить у него, но Миша только шикнул и закрыл глаза, усиленно показывая, что мы не должны его замечать.
Недоумевая, мы жевали гамбургеры, посматривая на Мишу. Вдруг в дальнем конце коридора раздался нарастающий шум, как будто приближалась большая толпа народа. Шум становился громче и мы тревожно переглянулись.
- Тише, - перекосив физиономию, шептал Миша, - Тихо! слушать меня!
Я отложил недоеденный гамбургер (все-таки это гадость, правда же?) и повернулся назад, как раз чтобы увидеть как из-за угла появилась толпа бегущих людей. Они быстро приближались. Толпа достигла нас и обогнула тележку, заставив ее раскачиваться. Запыхавшиеся люди в костюмах и сбитых галстуках со всех ног бежали куда-то.
Толпа заполнила все коридор. Вдруг Миша вскочил и закричал: -Руки, быстрее!
Непонятно откуда в его руках оказались щипцы для обжимки витой пары. Ловко подцепив ими проволоку, на которую были нацеплены наши наручники, он разрезал ее и мы оказались свободными от нашей тележки.
-Быстрее, прыгайте в толпу,- Миша буквально вытолкал нас с тележки и мы спрыгнули с тележки и, спотыкаясь, побежали в толпе. Люди в костюмах не обратили на нас никакого внимания, они были озабочены лишь тем, как пробраться вперед.
- Кто это такие? Куда бегут? - закричал Кирилл, пытаясь догнать и поравняться с Мишей
- Это сэйлзы, - прокричал Миша. - Они бегут на обед!
- А нахрена? - что и говорить, вопрос был вполне к месту.
- А это такой тренинг. Обед дают не на всех сэйлзов, и кто опоздал, тот не поест. - Миша прибавил ходу. Мы сбились в плотную группу и старались держать за Мишей, что было не так то просто, так как он ловко лавировал с толпе.
- А мы тоже на обед бежим? - спросил Кирилл
- Нет, мы сбегаем. Пока сэйлзы дерутся за еду, камеры наблюдения отключают: нет свидетельств, нет и проблемы.
Я изрядно запыхался, да и моим коллегам, похоже, было нелегко. Мысленно я пообещал себе все же начать ходить в фитнесс-центр, в который как-то сдуру купил годовой абонемент. Толпа сбавила ход, но стала гораздо плотнее.
- А что, каждый день за обедом надо бегать? - поинтересовался Сергей, который вообще любил поесть и часто повторял «Война войной, а обед по расписанию».
- Нет, каждый раз что-нибудь новое. - ответил Миша. - Например, как-то ограничили доступ в туалет, а в другой раз стульев дали только половину. Трениги-шменинги, выживает либо сильнейший, либо самый блатной. Ну, сами понимаете...
Наконец мы вместе с толпой свернули в боковой проход и оказались в толкучке перед дверьми с надписью «Столовая». Протолкавшись внутрь, Миша резко взял влево и преодолевая недовольные возгласы и толчки, прорвался к боковой стенке, и буквально за шкирку вытащил нас одного за другим из толпы.
- Держитесь за мной, - скомандовал он, и мы гуськом пошли за ним вдоль за стенки. Я осмотрелся: огромное помещение, метров 100 в длину, наверное, почти полностью заполняла толпа голодных сэйлз-менеджеров, стремившихся куда-то вперед. В качестве музыкального сопровождения где-то вверху разрывался The Offspring: «... You can do it... time, time».
Миша подвел нас к углу, где был люк мусорного контейнера, открыл его и скомандовал: - Залезайте.
Из люка попахивало чем-то противно мусорным, и я скривился от мысли, что придется туда лезть.
- Скорее, это единственный выход, - Миша нетерпеливо помахал рукой. Мы мялись, лезть куда-то в неизвестность не очень-то хотелось. Миша понял наши сомнения и сказал:
- Ладно, я вперед, вы за мной.
И он ловко скользнул в люк, и мы последовали за ним. Скатившись по мусоропроводной трубе (которой, к счастью, не часто пользовались, судя по запыленности) мы упали на кучу каких-то тряпок и полиэтиленовых упаковок, похоже где-то в подвале. Миша уже стоял на ногах и нетерпеливо подгонял нас.
Мы продолжать бежать за Мишей по полуосвещенным подвалам, постоянно приседая и уклоняясь от различных свисающих проводов и кусков изоляции. Похоже, Миша здесь часто бывал, так как ориентировался он моментально – куда свернуть, где пригнуться, а где перепрыгнуть. Я набил пару шишек пытаясь успеть за ним.
Наконец мы оказались в большой комнате, тускло освещенной тремя свисающими лампочками, и остановились. Мы тяжело дышали, опираясь на колени. Миша вернулся к входной двери и прислушался. Видимо, удовлетворенный услышанным (или отсутствием каких-либо звуков), он вернулся к нам и оттеснил нас с середины комнаты, встал на колени и стал руками смахивать пыль. Найдя что-то, он издал удовлетворенный возглас и что-то нажал. Наверху комнату что-то загудело и прямо на Мишу, который едва успел отскочить, опустился здоровенный двустворчатый черный холодильник Самсунг.
Холодильник был новенький и блестящий, непонятно, откуда он взялся в этом пыльном подвале. Миша распахнул дверцы и холодильник немедленно заиграл первые такты «Bad» Майкла Джексона. Внутри холодильника оказался уже знакомый лаз, только на этот раз он был пошире.
-Скорее, скорее, это временный хаб, - поторопил нас Миша. Мы забрались в лаз и через несколько метров оказались в весьма приятной на первый взгляд комнате, сплошь завешенной гобеленами и с красным ковром на полу.
Всё бы ничего, но прямо напротив нас стоял человек...ну, мужик как мужик, среднего роста, с усами. Его лицо можно было бы назвать дружелюбным, если бы в одной руке он не держал здоровенный моргентштерн совсем не бутафорского вида, а во второй фонарик, который он зачем-то направил на нас, хотя он был выключен, а в комнате было светло от многочисленных потолочных ламп.
- Э... добрый день, - Кирилл попытался поздороваться. Мужик нахмурился и тыкнул фонариком в нашу сторону, отчего мне сразу почему-то захотелось посторониться.
В этот момент из хаба (который с этой стороны выглядел как дверь встроенного шкафа) вылез Миша. Узнав Мишу, мужик расслабился и опустил фонарик. Они крепко обнялись.
- Здорово, Серега!, -сказал Миша
- Здорово, Миха!, - мужик похлопал Мишу по плечу. - Живой, чертяка! А я уж думал, тебя отладчики взяли.
- Почти взяли, - Миша показал на нас, - Это вот ребята засветили меня, пришлось уходить через запасной лаз.
- Рисковый ты пацан, Миха - нахмурился мужик, - Осторожнее надо. Ну ладно, проходите, а то скоро матч начнется.
Конец 9-й главы
Продолжение тут.