пятница, 12 ноября 2010 г.

Полнотекстовый поиск и mongodb.

Не буду вдаваться в подробности каким образом я дошел до использования не-sql базы данных, скажу лишь, что в определенный момент мой мозг отказался вталкивать предметную область  одного из проектов в чужеродную ей реляционную модель. Данные не были формализованы, формат представления грозился сильно меняться со временем, а отдельные объекты угрожали обрасти атрибутами, о которых на момент проектирования я мог и не подозревать. Атакованный со всех сторон заманчивыми лозунгами nosql, я пустился во все тяжкие и, махнув рукой на неизведанность, принялся выбирать nosql решение. Среди многообразия предлагаемых систем моим разумом удалось завладеть только MongoDB. MongoDB - документоориентированная база данных, хранящая объекты в JSON формате, предоставляющая интерфейс запросов, mapReduce, автоматические репликации, шардинг и много чего другого вкусного, от чего очень сложно устоять. Более подробно и детально о всех преимуществах и недостатках можно легко узнать из  раздела документации проекта.
За время работы над информационными системами у меня сложилось стойкое представление о том, что эффективность информационной системы в большей степени формируется качеством и скоростью работы поискового механизма. А так как все более и более превалируют объемы неструктурированной информации на первый план выходит возможность полнотектового поиска.
Являясь поклонником postgresql, с удовольствием использовал предоставляемый этой СУБД механизм создания индексов для полнотекстового поиска. PostgreSQL позволяет получить качественный полнотекстовый поиск "из коробки" сведя к минимуму необходимые затраты на модификацию приложения.
Сложно, привыкнув к теплу и комфорту, сталкиваться с проблемой отсутствия аналогичного встроенного решения в MongoDB. Очень хотелось обойтись малой кровью и не влезать в долгосрочное изучение таких монстров как Lucene и Sphinx. Возможно решение на основе данных вариантов было бы гораздо лучше, но дефицит времени не оставлял выбора.
Стоит признать, что разработчики знают о данной проблеме и в списках рассылки поднималась тема внедрения механизма полнотекстового поиска, на трекере проекта создан тикет с точкой фиксации на версии 1.7.x. Так, что вполне возможно, что через год данная статья потеряет свою актуальность.
Благодаря возможности создавать индексы для вложенных в документ массивов, в качестве частичного решения можно рассмотреть следующий вариант. Разработчику предлагается выделить в рамках документа специальный атрибут, хранящий массив слов для поиска. Этот массив индексируется средствами mongodb и используется для поиска. Формирование данного массива полностью ложится на плечи разработчика. Создание индекса на данный массив позволит получить адекватную скорость выборки. Сразу можно отметить недостатки, а именно: необходимость дополнительной разработки функционала уровня DAO, а также разнообразие словоформ и малозначащие слова, которые существенно влияют на качество поиска. Относительно первого пункта не остается ничего кроме как мириться, ибо лезть внутрь сервера mongod и прикручивать полнотекстовый поиск - явно не та задача над которой хотелось тратить свое время. Со вторым пунктом можно справиться при помощи стемминга и фильтрации стоп-слов. Инструмент для реализации задуманного долго искать не пришлось, - все необходимое оказалось в Lucene.
Рассмотрим ситуацию, когда у документа есть текстовое поле, по которому необходимо будет проводить поиск. Назовем его text:
{
    _id: "id",
    text: "content of War and Peace of Leo Tolsoy here"
}
Можно предложить разделить простое содержимое на два поля: text.content и text.tsearch, где в content непосредственно будет располагаться оригинал текста, а tsearch будет содержать массив нормализованных слов для поиска. В результате документ примет вид:
{
    _id: "id",
    text: {
        content: "content of War and Peace of Leo Tolsoy here",
        tsearch: ["content", "war", "peac", "leo", "tolstoy", "here"]
    }
}

Важно не забыть создать индекс на tsearch: db.mydocs.ensureIndex({"text.tsearch": 1}).
Остальная работа сводится к написанию вспомогательной функции, которая на вход получает строку а на выходе выдает список слов, прошедших стемминг и фильтрацию на стоп-слова. Используем классы, предоставляемые библиотекой lucene-core:

private List<String> getTSearchList(String text) {
    List<String> searchTerms = new ArrayList<String>();
    Analyzer analyzer = new SnowballAnalyzer(LUCENE_30, "English", StandardAnalyzer.STOP_WORDS_SET);
    TokenStream tokenStream = analyzer.tokenStream("contents", new StringReader(text));
    TermAttribute termAttribute = tokenStream.getAttribute(TermAttribute.class);
    try {
        while( tokenStream.incrementToken() ) {
            searchTerms.add(termAttribute.term());
        } 
    } catch (IOException ignore) {}
    return searchTerms;
}

Существует несколько алгоритмов анализа входного потока. Наиболее приемлемые результаты дает SnowballAnalyzer. В случае использования текстовых данных специфичной области можно переопределить список слов для фильтрации.
Теперь осталось строку запроса аналогичным образом перевести в массив слов, над которым проведен стемминг и фильтрация, и сформировать BSON-объект запроса к базе. Используем элементы запроса $elemMatch и $all. В общем виде запрос "War and Peace" будет выглядеть следующим образом:

{text: {$elemMatch: {tsearch: {$all: ["war", "peac"]}}}

Стоит учитывать, что данное решение не может предоставить того богатства функций, реализованных в полноценных поисковых движках. Речь идет о ранжировании результатов поиска, подсветки поисковых термов, поиск по атрибутам и прочих. Так что, если вам требуется что-то из перечисленного, думаю придется вникать во все прелести Lucene или Sphinx.

P.S. Из данного поста можно сделать дополнительный вывод, что полностью избавиться от костылей не получится. Решив хронические проблемы реляционных СУБД, вы неминуемо столкнетесь с проблемами nosql.

P.P.S. Если при разработке вы пользуетесь maven2, то все необходимые зависимости Lucene подключаются следующими блоками:
<dependency>
    <groupId>org.apache.lucene</groupId>
    <artifactId>lucene-core</artifactId>
    <version>3.0.2</version>
</dependency>

<dependency>
    <groupId>org.apache.lucene</groupId>
    <artifactId>lucene-snowball</artifactId>
    <version>3.0.2</version>
</dependency>

вторник, 2 ноября 2010 г.

Безопасность Oracle глазами аудитора: нападение и защита.

В связи с отпуском и вливанием в рабочий процесс не мог уделить внимание блогу в должной степени. Исправиться хотел бы обратив ваше внимание на книгу "Безопасность Oracle глазами аудитора: нападение и защита". Я уже говорил, что отечественный книжный рынок не балует любителей информационной безопасности большим разнообразием содержательных, а главное актуальных книг в данной области. В данном случае, данная книга является достойным представителем печатных изданий посвященных вопросам ИБ. Дополнительным стимулом к чтению данной книги является то, что ее автором является достаточно известный специалист в области защиты информации, один из основателей исследовательской лаборатории Digital Security Research Group - Александр Поляков, так же известный как @sh2kerr. Поляков - один из немногих в России, кто проводит сертификацию компаний по стандарту PCI DSS.
Книга позиционируется как продолжатель традиций "Атака на интернет". Именно с этой книги началось мое знакомство с миром компьютерной безопасности, так что не смог себе отказать в удовольствии ознакомиться с данным произведением.
Содержание книги посвящено такому важному вопросу как безопасность СУБД Oracle. Такая огромная и комплексная система как СУБД Oracle просто не может не содержать целую кладезь различного рода уязвимостей и слабостей, подвергающих угрозам не только хранимые данные, но и саму операционную систему, на которой Oracle функционирует.
Основной принцип построения книги - чтобы что-то хорошо защищать надо знать от чего защищать, а главное от кого, и как этот кто-то думает. Таким образом книга на 90% состоит из детального анализа сценариев и методов проникновения в Oracle, повышения привилегий, закрепления в системе и сокрытия признаков вторжения. Лишь 40-50 страниц посвящены вопросам аудита и корректной конфигурации сервера Oracle. Так что можно сказать, что книга больше подходит для интернет-злодеев, чем для администраторов.
В книге рассматривается комплексный последовательный подход к тестированию сервера Oracle на проникновение. Прочитав данную книгу можно получить представление о проблемах безопасности Oracle TNS Listener, раскрытия вспомогательной информации о базе, преодоление парольной защиты, PL/SQL инъекции, атаки на переполнение буфера, получения доступа к ОС через СУБД и другие атаки. В отдельную главу вынесена тема руткитов для Oracle.
Таким образом, данная книга может рассматриваться как начальное руководство для получения общего представления о вопросах безопасности Oracle. Ее можно рассматривать как отличную альтернативу The Oracle Hacker's Handbook, к тому же имеется однозначное преимущество в виде языка на котором она написана.

P.S. Пытался расшифровать QR-код на обложке книги - так ничего и не получилось. Интересно, содержит ли он какую либо реальную информацию.

четверг, 12 августа 2010 г.

Сквозная аутенфикация при помощи JA-SIG CAS. Часть четвертая - реализация клиента для Spring Framework.

Продолжим цикл статей, посвященных настройке аутенфикации веб-приложений с использованием SSO JA-SIG CAS. В этой статье предлагается рассмотреть, каким образом настроить веб-приложение, в основе которого лежит Spring Framework 3-й версии.

пятница, 30 июля 2010 г.

Google Analytics. Профессиональный анализ посещаемости веб-сайтов

Брайан Клифтон - глава отдела веб-аналитики Google по Европе, Ближнему Востоку и Африке, делится в своей книге секретами оценки успешности вашего веб-сайта посредством наиболее популярного инструмента - Google Analytics. Новый пользователь сталкивается с большим количеством диаграм, цифр, настроек, терминов. Разобраться в большинстве аспектов использования Google Analytics поможет данная книга. 380 страниц покрывают широчайший спектр вопросов начиная от механизма сбора статистики до принципов оптимизации страниц.
Читатель знакомится с понятиями конверсии, отказов, целей, профилей, компаний. Прочтение данной книги может помочь в определении тех типов отчетов, которые наиболее интересны будут вам, как владельцу сайта. Отдельное внимание уделяется вопросам интерпретации поведения пользователей в денежном эквиваленте, в том числе и для некоммерческих сайтов. Рассмотрена интеграция Google Analytics с такими продуктами как Google AdWords и WebSite Optimizer. Каждая глава посвящена решению какой либо конкретной проблемы - описанию того или иного отчета, настройке определенного фильтра, определению цели. Конкретика каждой главы подкреплена примерами кода на javascript, снимками страниц Google Analytics, ситуациями из жизни реальных компаний.
Мне встречались мнения, что данная книга не содержит ничего такого, что не содержалось бы в официальной справке по Google Analytics. Наверно, можно было бы согласиться с данным утверждением, но лишь отчасти.  Действительно, технически-подкованный человек без труда найдет решения своих проблем, ознакомившись с терминологией и типами отчетов в официальной справке. Но вот чего он не сможет найти, так это рекомендации и указания, какие типы отчетов наиболее были бы полезны в том или ином случае, или вызвали бы интерес у тех или иных людей, советы по настройке фильтров и профилей сайта, подходы к интерпретации полученных данных и их анализа. Полагаю, данную информацию также можно найти в открытых источниках, но книга позволит вам сэкономить ваше время. Так что, если на работе вам внезапно свалился бонус в виде подготовки отчетов об эффективности веб-ресурса компании, то данная книга придется вам как никогда кстати.
Книгу можно было бы рекомендовать всем,  кого интересуют вопросы эффективности его сайта, неважно блог это или промо-сайт. Особенно посоветовал бы данную книгу тем, кто задумывается над открытием собственного бизнеса в интернете. Получить понимание об объеме работы, которую необходимо будет провести в области регулярной аналитики, никогда не бывает лишним. Это поможет рассчитать собственные силы или навести на мысль о целесообразности привлечения стороннего специалиста.
P.S.  С книгой идет подарочный сертификат от Google AdWords. К сожалению срок годности его закончился в 2009 году.

четверг, 22 июля 2010 г.

Сквозная аутенфикация при помощи JA-SIG CAS. Часть третья - настройка SSL в Tomcat 6.

В предыдущих частях (1, 2), посвященных системе сквозной аутенфикации, описывались начальные шаги по развертыванию системы сборки CAS-сервера и реализации обработчика аутенфикации. На данном этапе у нас должна быть сборка CAS-сервера, готовая к развертыванию на рабочем сервере. Это не представляет труда за одним небольшим нюансом. Протокол CAS требует работы через SSL. Таким образом, появляется необходимость настройки SSL для веб-контейнера. Наиболее популярным веб-контейнером является Apache Tomcat. На момент написания данной статьи, актуальной являлась версия 6.0.28. Данная статья покажет один из способов настройки поддержки SSL для Tomcat.

пятница, 9 июля 2010 г.

Сквозная аутенфикация при помощи JA-SIG CAS. Часть вторая - реализуем обработчик аутенфикации.

В первой части статьи было описано, каким образом развернуть и настроить систему для сборки CAS-сервера. В реализации по-умолчанию, CAS сервер допускает только тех пользователей, чьи логин и пароль совпадают. Во второй статье хотелось бы остановиться на  вопросе создания собственного обработчика аутенфикации. В качестве примера показана привязка аутенфикационных данных учетной записи пользователя к записи в базе данных почтового сервера postfix.

пятница, 2 июля 2010 г.

Договориться можно обо всем! Как добиваться максимума в любых переговорах

Данная книга никакого отношения к IT-тематике не имеет. В ней раскрываются принципы переговорного процесса. Но тем не менее хотелось бы на ней остановиться по двум причинам. Во-первых, умение вести переговоры еще никому не мешало. Как говорится, сегодня вы обычный программист, пишите код для дяди, а завтра вам возможно уже придется вести разговоры о продаже вашего стартапа. Во-вторых, я особенно трепетно отношусь к книгам, которые разрушают стандартное и сложившееся восприятие окружающего мира. А данная книга, в моем случае, его разрушила. Эта книга убедила меня, что все мои наивные представления о формах и способах ведения переговоров настолько несостоятельны, что можно только удивляться как крепко в нас врастают ошибочные стереотипы.
И да, там есть модель. А мы, люди технического ума, любим модели. Пускай даже и простые. Гевин Кеннеди разделяет всех переговорщиков по манере ведения переговоров на 4 категории: робких овец, упертых ослов, хитрых лисов, мудрых сов. И уже с первых строк читателю предоставляется возможность при помощи тестов определить, в какую категорию он попадает. Думаю новички переговорного дела, к коим я отношусь,  попадут в касту малопривлекательных травоядных животных. И вот тут начинает свою роль играть чувство обиды за себя любимого. И это заставляет вгрызаться в остальные главы книги, все дальше и дальше. 26 глав, из которых состоит книга, построены по простому принципу - сначала тест из 3-4 вопросов, само содержание главы, раскрывающего стратегические подходы, тактические приемы и различного рода психологические ловушки, и в конце главы ответы на вопросы, с комментариями. И с каждой главой читателю дают возможность работать над собой, меняться.
Книга преисполнена азартом. Вот вы уже на 15% лис, через пару глав в вас наконец-то появляется немного совы, к концу книги вы начинаете чувствовать себя не так ущербно как в начале.  Вы начинаете понимать основные принципы переговорного процесса и стараетесь не вспоминать те стереотипы, которыми руководствовались ранее.
Полезность книги оценить достаточно просто. Я думаю она сполна окупится сэкономленными на переговорах средствами, независимо от того, кто будет ваши оппонентом: жена, гаишник или же крупный клиент вашей компании.
P.S. Есть аудио-вариант данной книги, так что, если вы заядлый автолюбитель, то данное произведение поможет с пользой скоротать время в бесконечных пробках.

воскресенье, 27 июня 2010 г.

Интерфейс. Новые направления в проектировании компьютерных систем

Для профессии программиста можно придумать достаточно много ассоциаций. Одной из популярных является отождествление программиста с переводчиком. По сути дела задача программиста заключается в переводе какой-то жизненной проблемы или процесса на магический язык, понятный всем этим железкам, несущих гордое название вычислительная техника. Результаты программ так же требуется донести до конечного пользователя, причем в приемлемом и понятном для него виде (ну только, если вы не пишете программу для другого программиста). Ни для кого не секрет, что точка соприкосновения пользователя с программой называется интерфейсом. Если программу сравнивать с айсбергом, то интерфейс - это его верхушка. Именно этой верхушке посвящена книга Джефа Раскина, всемирно признанного специалиста по компьютерным интерфейсам.
Интерфейс, как одежка программы, по которой встречают, является одной из наиболее значимой части программы. И вот тут, возникают проблемы. Причина как мне кажется, заключается в сложной формализации такого понимания как интерфейс. Программисты с их любовью к формальным подходам, качественным и количественным оценкам, не находят привычных метрик в задачах создания интерфейсов. Типичным в данной ситуации является копирование существующих шаблонов, что не всегда приводит к положительным результатам. Мне кажется, книга Джефа Раскина "Интерфейс", достаточно удачный способ внести в данную область долю формализма. Ценность данной книги заключается в том, что она не является набором удачных шаблонов в области дизайна интерфейсов, а раскрывает основополагающие принципы построения интерфейсов. Читателя знакомят с такими понятиями как режим и квазирежим, локус внимания, монотонность, видимость. Любителям формальных метрик предложат модель скорости печати GOMS, законы Фитса и Хика. Дабы теория не выглядела голословной, книга содержит простую задачку, имеющую различные реализации интерфейсов. Каждый интерфейс оценивается согласно представленным методам, читателю предлагается на их основе улучшить интерфейс задачи.
Стоит отметить, что автор книги также является создателем знаменитого Apple Macintosh. Если вами овладеет желание познать в рамках какой религии создавался интерфейс Mac Os, почему в данной ОС меню приложений находится у верхней границы экрана, почему iphone не нужны файловые менеджеры, а мышка от Apple имеет только одну кнопку, то вам достаточно будет прочитать данную книгу.
Также данная книга сможет быть вам интересна в случаях, если вы:
  • не можете без эмоций с около-научной точки зрения объяснить почему CapsLock - зло;
  • не понимаете причину, по которой пользователям приходится раз за разом искать кнопку вызова функции в вашей программе;
  • неудовлетворенны интерфейсами программ, которые вы создаете;
  • хотите хоть одним глазком заглянуть в возможное будущее интерфейсов и подчерпнуть оттуда новых идей ;
  • освободиться от навязанных шаблонов и вникнуть в суть формальных способов построения интерфейсов.

    четверг, 3 июня 2010 г.

    Сквозная аутенфикация при помощи JA-SIG CAS. Часть первая - сборка

    Небольшое руководство по внедрению в инфраструктуру информационной среды предприятия сервера кроссдоменной сквозной аутенфикации на базе JA-SIG CAS.
    В моем конкретном случае, решение данной задачи заняло несколько больше времени, чем я расчитывал. Буду рад, если данная статья поможет более четко представить объем необходимых работ, а возможно сэкономит несколько часов поиска в интернет разрозненной информации по этапам настройки CAS сервера.

    Для простоты, я бы выделил следующие основные подзадачи:
    1. Сборка сервиса JA-SIG CAS и тестирование на работоспособность;
    2. Реализация требуемого обработчика аутенфикации JA-SIG CAS;
    3. Настройка Tomcat 6 и развертывание CAS web-приложения;
    4. Реализация клиента для конечного сервиса;
    5. Добавление плюшек и бантиков.
    Каждый пункт думаю раскрыть в отдельной статье. Данная статья, в частности, посвящена первому этапу, а именно - подготовке среды для создания собственного сервера CAS.

    JA-SIG CAS Server реализован на языке java и в качестве инфраструктуры сборки использует Maven2. Так что, знания данных инструментов вам будет необходимо в ходе работы.

    Прежде всего необходимо скачать дистрибуцию самого cas севрера. Сделать это можно с официального сайта. На момент написания статьи на странице скачивания последняя доступная версия CAS сервера имела номер 3.4.2. Распространяется как обычный zip или tar.gz архив.
    После распаковки архива, вы должны получить директорию cas-server-3.4.2, которая является корнем maven2 проекта. Данный проект состоит из нескольких модулей. Наше внимание в основном будет сосредоточено на модуле cas-server-webapp.

    Я бы настоятельно рекомендовал импортировать корневую директорию в качестве проекта вашей любимой IDE. Насколько мне известно, все они успешно работают с проектами maven2. Так же не лишним будет натянуть страховочную сеть в виде системы контроля версий, особенно если вы любите экспериментировать.
    В зависимостях проекта прописаны 2 дополнительных maven репозитория, а именно JA-SIG Maven Repository(http://developer.ja-sig.org/maven2) и JBoss Repository(http://repository.jboss.com/maven2). Так что, если вы используете внутренний кэширующий maven репозиторий, не забудьте добавить данные репозитории в списки индексируемых. Мой выбор в данном плане sonatype nexus. Именно на этом шаге меня подвела моя забывчивость - в случае с nexus недостаточно просто добавить репозитории, их надо прописать как публично доступные. На выяснение причин, по которым сборка не может выгрузить зависимости я потратил около часа. Так что, будьте осторожны.

    Архив дистрибуции уже идет с собранными модулями, поэтому не вижу особой необходимости делать пересборку проекта с корня. Предлагаю обратить внимание непосредственно на cas-server-webapp. Для того, чтобы убедиться что проект может быть собран, необходимо перейти в директорию cas-server-3.4.2/cas-server-webapp и набрать в консоли mvn package. Еще лучше провести данную операцию из любимой IDE. Если сборка прошла успешно, значит проблемы с видимостью maven репозиториев и наличия зависимостей на них нас миновали.

    Следующим шагом является непосредственное тестирование веб-приложения cas. Для простоты тестирования веб-приложений могу рекомендовать использовать maven-jetty-plugin. Легковесный web-контейнер разворачивается в считанные секунды и идеально подходит для вопросов тестирования. Для подключения плагина необходимо отредактировать cas-server-3.4.2/cas-server-webapp/pom.xml в секции build. В моем случае секция biuld выглядела следующим образом:





    org.mortbay.jetty
    maven-jetty-plugin
    6.1.24

    10



    org.apache.maven.plugins
    maven-war-plugin

    cas







    При подключении данного плагина появляются цели jetty:run и jetty:stop. Соответсвенно первая запускает легковесный контейнер jetty на локальной машине на порту 8080. Для тестового запуска достаточно выполнить цель jetty:run. После старта сервера можно открыть в браузере http://localhost:8080/cas/. Вы должны увидеть форму аутенфикации. Для демонстрационных целей в поставке реализован простой обработчик аутенфикации, допускающий пользователей, у которых login совпадает с password. Введя в форму аутенфикации, например, test/test вы должны увидеть сообщение об успешной аутенфикации. На ввод test/123456 система должна ответить об ошибочной попытке аутенфикации.
    Формально, если вы добрались до данного момента и у вас все работает, то вы можете вызвать цель package модуля cas-server-webapp и в директории cas-server-3.4.2/cas-server-webapp/target получить файл cas.war, который и будет нашим экземпляром cas-server-а.
    В следующей статье собираюсь остановиться на вопросе реализации обработчика аутенфикации.

    вторник, 1 июня 2010 г.

    Хакинг. Искусство эксплойта

    На полках книжных магазинов не часто можно наблюдать новинки, посвященные вопросам компьютерной безопасности. Видимо так сложилось, что данная тематика не находит стабильного спроса среди российских читателей. За практически полным отсутствием оригинальных изданий, приходится довольствоваться редкими переводами зарубежных книг. В данных условиях просто не мог отказать себе в удовольствии приобрести перевод второго издания Hacking. The Art of Exploitation от no starch press. По сравнению с первым изданием, книга серьезно набрала в весе. По субъективным ощущениям стала толще раза в 2.
    В книге покрывается достаточно широкий спектр вопросов компьютерной безопасности, начиная от неформального введения в программирование, что, на мой взгляд, в данной книге лишнее, продолжая вопросами низкоуровневых уязвимостей системных приложений, безопасности в сетях TCP/IP, криптографии и безопасностью wifi-сетей. В книге описываются наиболее популярные инструменты и библиотеки, используемыми хакерами, приводится достаточно большое количество простых и понятных примеров эксплоитов и сетевых утилит.
    В 500 страниц сложно было бы уложить все нюансы и аспекты каждой темы, поэтому книгу стоит рассматривать как отправную точку на пути получения знаний в области компьютерной безопасности.
    На мой взгляд, книга очень хорошо подойдет студентам, специальность которых тем или иным образом связанна с компьютерной безопасностью. Будет не лишним ознакомится с данной книгой C/C++ разработчикам, дабы посмотреть на ситуацию с другой стороны баррикад и, возможно, открыть для себя целый ряд, невидимых до этого проблем. Тестировщикам программного обеспечения (преимущественно разработанного на C) данная книга может дать представление о методах тестирования, направленного на проверку соответствия продукта требованиям безопасности.
    Если же вы знакомы с gdb, знаете что такое format string vulnerability, имеете представление о libpcap, libnet, nmap видели не только в "Матрице", в курсе чем симметричное шифрование отличается от асимметричного, int $0x80, 0x90, 0xdeadbeaf - для вас не просто набор символов, то найти что-то новое в данной книге будет сложно. Лучше в данном случае, мне кажется, обратить свое внимание на The shellcoder's handbook. Жаль только эта книга, видимо на русский язык, если и будет переведена, то очень не скоро.
    Не могу не упомянуть об еще одном переводе от издательства Символ, посвященному вопросам безопасности программного обеспечения. Fuzzing. Исследование уязвимостей методом грубой силы, несмотря на характерное для переводных IT-книжек отставание в 3 года от зарубежного издания, содержит достаточно интересные идеи поиска уязвимостей в программном обеспечении, не получившие широкого освещения в российской компьютерной литературе. По крайней мере мне среди русско-язычных изданий и статей упоминание о fuzzing-е, как технике тестирования ПО на безопасность не встречалось. Обе книги, на мой взгляд, являются удачным дополнением друг друга - первая описывает основные классы уязвимостей системного ПО, вторая - раскрывает одну из методик поиска данных уязвимостей.

    вторник, 25 мая 2010 г.

    Deadline. Роман об управлении проектами.

    Изредка вношу изменения в список книг для прочтения. Обычно это происходит по чьему-то совету. На этот раз, мое внимание на Dedline Тома Демарко обратил Максим Юдин. С творчеством Тома Демарко был знаком по книге Человеческий фактор. Успешные проекты и команды, которую отношу к классике. Впечатления получились не такие яркие, как от "Цели" Голдрата, но книга однозначно интересная и стоит того, чтобы уделить ей внимание.
    В Deadline используется прием выделения основных мыслей, в качестве дневника главного героя. Так что, любителям концентрата мысли достаточно будет прочитать записи мистера Томпкинса. По сути цель остальной части книги, донести контекст формирования данных идей. Идеи же по сути являются паттернами и анти-паттернами процесса управления проектами. Отдельно хотелось бы отметить социологическую составляющую правил. Короче, если в вашей методологии управления человеку выделена роль безликого инструмента - то вашу методологию необходимо спустить в унитаз.
    Книгу можно рекомендовать абсолютно всем людям, участвующим в процессе разработки. Время на ее прочтение требуется немного (можно прочитать за выходные на даче). Также можно потратить пару часов и выписать себе дневник мистера Томпкинса в отдельный список. Я потратил. Буду иногда перечитывать. Люблю концентраты.
    Издательство "Символ-Плюс" буквально разродилось недавно целым набором книг, среди которых и Балдеющие от адреналина, зомбированные шаблонами Тома Демарко в соавторстве с Тимоти Листером. Лично я уже забронировал для нее место в своем списке must-read книг.
    Да, чуть не забыл. Deadline я готов любить только за то, что в этой книге содержится фраза:
    "Есть тысяча и один способ потратить день зря и ни одного, чтобы вернуть этот день обратно".

    четверг, 20 мая 2010 г.

    Бережливое производство программного обеспечения. От идеи до прибыли.

    Удивительным образом иногда получается так, что книги которые идут в каком-то случайном порядке, складываются в единый звучный аккорд. Так "бережливое производство" попало в тон предыдущих двух книг. Прежде всего хотелось бы отметить название книги. В оригинале книга называется "Implementing Lean Software Development: From Concept to Cash". Переводчик не поддался стереотипам и в результате development звучит как производство, а не как более привычное всем разработка. Именно отождествление разработки ПО с процессом производства, а точнее с наиболее успешными его практиками, является основным мотивом всей книги. Практически в каждой главе используется один и тот же прием - success story из мира промышленного производства, выделение успешных практик, лежащих в основе успеха данного случая, и проецирование данных практик в область разработки ПО. Наибольший интерес, лично для меня, представляли методы борьбы с потерями. Выделенные непроизводительные расходы в разработке ПО, сопровождаются наглядными примерами. В конце каждой главы предлагается набор предложений, ведущих к улучшению процесса. Затрагиваются вопросы отношения к персоналу, организации знания, обеспечения качества, взаимодействия. Приводится понятие квадрантов тестирования, уже знакомое по книге Гибкое тестирование, теории очередей, 14 заповедей Деминга, инициативы Шесть сигм и теории ограничений. В финале предоставляется руководство к действию в виде дорожной карты, как выжимка основных идей книги.
    Таким образом мог бы посоветовать в качестве горячего прочитать Цель, на второе употребить данную книгу, и в качестве сытного десерта прочитать про гибкое тестирование.

    среда, 12 мая 2010 г.

    Цель. Процесс непрерывного совершенствования.

    По совету уважаемого жж-пользователя cartmendum решил выделить время на прочтение данной книги. Отзыв самого картмендума можно прочитать непосредственно здесь. Могу лишь добавить, что испытал аналогичные эмоции. Книга читается просто запоем. Настолько легко и непринужденно доносятся до читателя основные идеи. Казалось бы, ну как можно донести методологии организации производственного процесса - взять побольше формул, определений, разложить предметную область в понятийном базисе. Но нет - вот вам роман со всеми атрибутами: с первых страниц завязка, развитие сюжета, своего рода кульминация. Любовный треугольник: директор завода - завод - жена, непонимание, эмоции, переживания. Только вот концовка немного смазана, на мой взгляд. И это все про теорию ограничений. Про техническую область. Просто шикарно.
    Однозначно не стоит рассматривать идеи сосредоточенные в книге прямолинейно, с позиции применимости только к промышленному производству. Разработка программного обеспечения тоже своего рода производство, и многие идеи теории ограничений находят отклики и в современных гибких методиках разработки ПО. Более того, можно провести прямые аналогии. Чтобы недалеко ходить, в "Цели" описывается момент переноса этапа проверки качества продукта в конце сборочного конвейера в точку перед станком обработки наиболее критичных деталей этого продукта. Это точ-в-точ подход к организации гибкого тестирования описанный в книге "Гибкое тестирование. Практическое руководство для тестировщиков ПО и гибких команд". Тестировщик подключается к разработке на самых начальных этапах, даже раньше чем разработчик начнет написание кода. Задача тестировщика след-в-след сопровождать разработчика, не допуская компромиссов по качеству и выявляя на ранних этапах возникающий брак.
    Книга оказалась особенно актуальной в рамках моего знакомства с методологией разработки ПО Lean. Так что, если вы активный борец с потерями, то вот вам идеальный success-story.
    Книгу можно прочитать уже только за то, что она дает яркий пример зависимости мышления человека от привычек и стереотипов, и что иногда полезно окунуться в холодный чан новых знаний и увидеть, что "король то голый".

    вторник, 11 мая 2010 г.

    Гибкое тестирование. Практическое руководство для тестировщиков ПО и гибких комманд.

    Редко когда приходится заставлять себя дочитывать ту или иную книгу. С данной книгой пришлось побороться. Причину сложно найти - книга составлена грамотно, впрочем как и вся серия addison-wesley. Но скучно. Просто скучно. По крайней мере для меня, как человеку бесконечно далекого до области quality assurance и тестирования ПО. Мои отношения с тестированием заканчиваются ровно на модульных тестах и причин развивать эти отношения в ближайшем будущем не предвидется. Что-то нового для себя как для разработчика подчерпнуть я не сумел, хотя общие взгляды на взаимоотношения тройки заказчик-тестировщик-разработчик поменял.
    Книга систематизирует понятие тестирования ПО (при помощи квадрантов тестирования), демонстрирует в определенной степени новую роль тестировщика ПО и его позицию в команде, указывает набор полезных практик в области тестирования, изобилует историями из жизни.
    Однозначно советовал бы данную книгу людям, занятым в области высокоуровнего тестирования ПО (на уровне приемочных тестов), особенно тем, кто погряз в рутине ручного тестирования. Книга может придать решимости амбициозным тестировщикам, которых не устраивает надменное отношение со стороны разработчиков, занять новую уникальную роль в команде. Можно советовать данную книгу менеджерам проектов, как источник здравых идей для экспериментов. Ну и наконец людям, которые не пропускают ни одной книги из серии "подписанных", таким как я, например.