The agile model of software development has taken the world by storm. Now, in Agile Software Development, Second Edition, one of agiles leading pioneers updates his Jolt Productivity award-winning book to reflect all that?s been learned about agile development since its original introduction.
Alistair Cockburn begins by updating his powerful model of software development as a ?cooperative game of invention and communication.? Among the new ideas he introduces: harnessing competition without damaging collaboration; learning lessons from lean manufacturing; and balancing strategies for communication. Cockburn also explains how the cooperative game is played in business and on engineering projects, not just software development
Next, he systematically illuminates the agile model, shows how it has evolved, and answers the questions developers and project managers ask most often, including
· Where does agile development fit in our organization?
· How do we blend agile ideas with other ideas?
· How do we extend agile ideas more broadly?
Cockburn takes on crucial misconceptions that cause agile projects to fail. For example, you?ll learn why encoding project management strategies into fixed processes can lead to ineffective strategy decisions and costly mistakes. You?ll also find a thoughtful discussion of the controversial relationship between agile methods and user experience design.
Cockburn turns to the practical challenges of constructing agile methodologies for your own teams. You?ll learn how to tune and continuously reinvent your methodologies, and how to manage incomplete communication. This edition contains important new contributions on these and other topics:
· Agile and CMMI
· Introducing agile from the top down
· Revisiting ?custom contracts?
· Creating change with ?stickers?
In addition, Cockburn updates his discussion of the Crystal methodologies, which utilize his ?cooperative game? as their central metaphor.
If you?re new to agile development, this book will help you succeed the first time out. If you?ve used agile methods before, Cockburn?s techniques will make you even more effective.
Наше знание о медиа пиратстве обычно начинается и часто заканчивается исследованием, финансируемым отраслью. Для этого есть весомые основания.
Американские ассоциации отраслей программного обеспечения, фильмов и музыки финансировали обширные усилия по глобальному исследованию пиратства за прошлые два десятилетия, по большей части, для себя. Пиратство, несмотря на его вездесущность, было непаханым полем для независимого исследования. Эмпирические работы за прошлые десять лет, исключая отчасти исследования совместного использования файлов (файлшеринга), были редки и сосредоточены в узких областях. Сообщество интересов было столь мало, что, когда мы начали планировать этот проект в 2006, значительная его часть была включена в нашу работу. Это сообщество росло, но все еще остается ничем по масштабу сопоставлений относительно глобального, сравнительного, постоянного внимания отраслевых групп. И возможно, что еще более важно, нет ничего сопоставимого жесткой интеграции отраслевых исследований с лоббированием и кампаниями в СМИ, которые усиливают его присутствие в публичных и политических дискуссиях.
Драйвер Informix для Informix (IDS) 7.x, SE 7.x, Universal
Server (IUS) 9.x и IDS 2000 реализован в "ifx.ec" и
"php3_ifx.h" в директории расширения informix. Поддержка IDS 7.x весьма
основательна, с полной поддержкой столбцов BYTE и TEXT. Поддержка IUS 9.x
частично завершена: введены новые типы данных, но поддержка SLOB и CLOB всё ещё в стадии разработки.
Замечания по конфигурации:
вам необходима версия ESQL/C для компиляции драйвера Informix для РНР.
ESQL/C версии с 7.2x должны работать нормально. ESQL/C является теперь частью Informix Client SDK.
Убедитесь, что переменная "INFORMIXDIR" установлена и что
$INFORMIXDIR/bin имеется в вашей переменной окружения PATH, прежде чем запускать скрипт "configure".
Примечание:
скрипт configure будет автоматически определять директории библиотек и include, если вы запустите configure
--with_informix=yes. Вы можете переопределить это автоопределение, специфицировав "IFX_LIBDIR", "IFX_LIBS"
и "IFX_INCDIR" в окружении. Скрипт configure также попытается определить
версию вашего сервера Informix. Он установит переменную условной компиляции
"HAVE_IFX_IUS", если ваша версия Informix >= 9.00.
Примечание:
убедитесь, что переменные окружения Informix INFORMIXDIR и INFORMIXSERVER доступны для PHP ifx-драйвера и что директория
INFORMIX bin находится в PATH. Проверьте это, запустив скрипт, содержащий
вызов phpinfo(), прежде чем начать тестирование. На выводе
phpinfo() эти переменные должны быть перечислены. Это TRUE как для CGI php, так и для Apache mod_php. Вам может понадобиться установить
эти переменные окружения в стартовом скрипте вашего Apache.
Совместно используемые библиотеки Informix также должны быть доступны
загрузчику (проверьте LD_LINBRARY_PATH или ld.so.conf/ldconfig).
Некоторые замечания об использовании BLOB'ов (столбцы TEXT и BYTE):
BLOB'ы нормально адресуются BLOB-идентификаторами.
Запросы выборки возвращают "blob id" для каждого столбца BYTE и TEXT. Вы
можете получить содержимое с помощью "string_var = ifx_get_blob($blob_id);",
если вы выбрали получение BLOB'ов в памяти (с
помощью: "ifx_blobinfile(0);"). Если вы предпочитаете получать содержимое
BLOB-столбцов в файле, используйте "ifx_blobinfile(1);", а
"ifx_get_blob($blob_id);" даст вам filename. Используйте нормальный I/O файлов для получения содержимого blob.
Для запросов insert/update вы обязаны создать эти "blob id'ы" самостоятельно с помощью "
ifx_create_blob();". Затем подключите blob id'ы в массив и заместите blob-столбцы знаком вопроса (?)
в строке запроса. Для update/insert вы ответственны за установку blob-содержимого
с помощью ifx_update_blob().
Поведение BLOB-столбцов может быть изменено переменными конфигурации, что
также можно сделать на этапе прогона программы:
переменная конфигурации : ifx.textasvarchar
переменная конфигурации : ifx.byteasvarchar
runtime-функции :
ifx_textasvarchar(0) : использовать blob id'ы для select-запросов со
столбцами TEXT
ifx_byteasvarchar(0) : использовать blob id'ы для select-запросов со столбцами BYTE
ifx_textasvarchar(1) : возвращать столбцы TEXT, как если бы они были столбцами
VARCHAR, чтобы вам не нужно было использовать blob id'ы дляselect-запросов
ifx_byteasvarchar(1) : возвращать столбцы BYTE, как если бы они были столбцами
VARCHAR, чтобы вам не нужно было использовать blob id'ы для select-запросов
переменная конфигурации : ifx.blobinfile
runtime-функция :
ifx_blobinfile_mode(0) : возвращать столбцы BYTE в памяти, blob id позволяет получать содержимое
ifx_blobinfile_mode(1) : возвращать столбцы BYTE в файле, blob id позволяет получать имя файла
Если вы устанавливаете для ifx_text/byteasvarchar значение 1, вы можете использовать столбцы TEXT и BYTE
в select-запросах, как нормальные (но всё же long)
поля VARCHAR. Поскольку все строки "подсчитаны" в PHP, он остаётся "binary safe".
Вы обязаны обработать это корректно. Возвращаемые данные могут содержать всё
что угодно, вы отвечаете за содержимое.
Если вы устанавливаете для ifx_blobinfile значение 1, используйте имя файла, возвращаемое
ifx_get_blob(..), для получения blob-содержимого. Заметьте, что в этом
случае ВЫ ОТВЕЧАЕТЕ ЗА УДАЛЕНИЕ ВРЕМЕННЫХ ФАЙЛОВ, СОЗДАННЫХ INFORMIX, когда
извлекаете ряды. Каждый новый извлечённый ряд создаст новый временный файл для каждого столбца BYTE.
Размещение временных файлов может быть настроено переменной окружения "blobdir",
по умолчанию "." (текущая директория). Что-то вроде putenv(blobdir=tmpblob");
облегчит зачистку временных файлов, случайно пропущенных (имена их всех начинаются с "blb").
Автоматическая доводка "char"-данных (SQLCHAR и SQLNCHAR): это можно
установить переменной окружения
ifx.charasvarchar : если установлено 1, ведомые пробелы автоматически
удаляются, давая вам некоторое подобие "отсечения/chopping".
NULL-значения:
переменная конфигурации ifx.nullformat (и функция времени выполнения ifx_nullformat()), если установлена в TRUE, возвратит NULL
-столбцы как строку "NULL", если установлена FALSE, они возвратят пустую строку. Это позволяет вам выбирать между
NULL -столбцами и пустыми столбцами.