Внедрение Scrum с нуля

В нашем проекте внедрение Scrum было начато 8 месяцев назад. Как я уже рассказывал — катализатором этому послужил выпуск внутреннего продукта для гибкого управления практами и Scrum в частности.

На момент начала перехода на Scrum о этой методологии в команде знали в теории всего 3 человека — PM и 2 лида, но внедрение все-же началось тем-более что я с энтузиазмом согласился стать Scrum Masterом для этой команды.

Я хорошо помню фразу, прочитанную в одной из статей:

Scrum Master это человек который не говорит: “Смотри как круто я сделал”, а вместо этого говорит: “Смотрите что я помог сделать команде”

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

  • Отсутствие Product Ownerа
  • Сырости средства планирования
  • Распределенности команды
  • Отсутствием практического опыта в Agile

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

  • Сырость средства планирования — Для Scrum существует множество различных сервисов планирования, но мы изначально использовали разработку нашей компании. Начав с первой версии продукта мы активно участвовали в её совершенствовании. Наш тестировщик по праву считается неформальным членом сразу двух команд. Множетсво bug и feature репортов было сгенерировано с первые 4 месяца работы. Со своей стороны мне потребовалось приложить много усилий чтобы убедить сначала себя использовать это средство, а потом своим примером убеждать команду. На это потребовалось 4 месяца, за это время команда перешла от строгой неприязни глючной софтины к ежедневному использованию. И уже несколько месяце подряд мы видим как наши пожелания воплощаются в новых версиях тулза.

    • Распределенности команды — Распределенность команды сыграла и до сих пор играет отрицательную роль в нашм процессе. Первое чего мы лишились — это возможности использования доски для планирования. Я пробовал делать доску у себя на рабочем месте, использовали внешний сервис Scrumy, но удобного решения все еще не нашли. Моя доска была только у меня, а Scrumy приходилось синхронизировать руками. Поэтому пока мы попросили сделать аналог доски из Scrumy в нашей систему управления и с нетерпением ждем релиза этого функционала.
  • Распределенности команды — Мы находимся в 4х часовых поясах, поэотму при всем желании Daily Scrum у кого-то приходится на утро, а у кого-то на обед. И нет возможности видеть команду живьем. В качестве решения было выбрано нейтральное для всех время — утро самого позднего часового пояса. А вот сделать именно Stand Up Meeting все еще не получается, да и в переговорке у нас стоят просто шикарные кресла, в которых грех не посидеть.

  • Отсутствием практического опыта в Agile — Практического опыта внедрения у нас не было, знакомого гуру по соседству тоже, и тренер Agilа мимо не проезжал. Поэтому большинство практик у нас внедряется с подачи PM и меня (как Scrum Master). Каждый месяц мы добавляем что-то новое — 3 месяца назад ретроспектива, 2 месяца — самостоятельный выбор задач разработчиками, а сейчас — Product Value и оценка полезности той или иной User Story. Поэтому мы постепенно обрастаем практиками и процессами. И недавно я даже выступил консультантом в другом agile-начинающем проекте. Поэтому опыт мы приобретаем на практике.

При этом конечно остается еще очень много проблем, для решения которых нужна помощь из вне — от других практиков Scrum. Именно поэтому я запланировал поехать на AgileDays 2009 — чтобы познакомиться с другими Agile-powered людьми и попытаться наити ответы на свои вопросы.

Какие именно вопросы — это тема для моей следующей записи:)

Как я пришел к Scrum

В последнее время слова Agile и Scrum все чаще и чаще звучат в блогосфере, причем в последнее время не только западной. Меня тоже эти слова не обошли стороной, при этом все развивалось спонтанно и неожидано.

Все началось примерно 2 года назад в компании Magenta Technology. Это замечательное место где в свое время были собраны первоклассные специалисты города Самары. В компании царили настроения стартапов, интересных проектов и заоблачных перспектив.

Именно в этой компании я первый раз попробовал свои силы в роли Team Lead, на практике прошел Путь камикадзе и научился сохранять спокойствие даже в непредвиденных ситуациях.

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

В конце лета 2008 года я вынужден был покинуть компанию и проект, оставив его в состоянии PoC но с четко вырисовывающимися перспективами развития. Я перешел в компанию намного более крупную и процессо-ориентированную. Здесь я стал частью распределенной команды. И это тоже было для меня впервые. В декабре 2008 года я неожиданно для всех стал Team Leadом своего проекта.

А еще через пару месяцев компания выпустила для внутреннего использования Scrum Management Toolkit. В этот момент с подачи нашего PM у нас на проекте начали внедрять Scrum. Я стал Scrum Master’ом и вот уже 8ой месяц методом проб и ошибок стараюсь вести нашу команду к гармонии и гибкости…

Но об этом чуть дальше…

Sams на IBM Developer Works

Вчера на сайте IBM Developer Works вышла первая статья из цикла Системы учета интернет-трафика. Установка, настройка, использование. Первая часть посвязена нашему проекту Sams.

Текст самой статьи почти полностью взят с нашей wiki, что еще раз говорит о высоком качестве наших руководств по установке

Ну и вообще — приятно что наш проект попал на страницы этого ресурса.

ps: А мы тем временем работаем над Sams 2.0

JDK 7: Возможность отказа от Quicksort для сортировки массивов

По наводке от shodan: dual-pivot quicksort обратил внимание на очень интересное обсуждение Replacement of Quicksort in java.util.Arrays with new Dual-Pivot Quicksort в списке рассылки JDK.

Кратко суть происходящего можно описать следующим образом: Vladimir Yaroslavskiy, сотрудник SUN, предложил заменить алгоритм сортировки Quicksort на Dual-Pivot Quicksort для массивов.

Для меня вся соль момента заключается в публичном обсуждении изменения кода в самом сердце языка Java.
В качестве ревьюверов кода выступали Joshua Bloch и Jon Bentley.
Также очень интересно было читать само письмо Владимира. Очень подробно описаны причины почему он предлагает заменить Quicksort, дана оценка производительности, описан процесс оптимизации алгоритма с точки зрения внутренностей Java. При этом обсуждение продолжается и похоже что помешать принятию этого патча могут только политические моменты.

GSoC 2009 — Мы ищем таланты

Меньше недели осталось студентам, желающим принять участие в GSoC 2009, чтобы оформить и подать свой proposal в один или несколько проектов. И студенты активно используют это время. Но несмотря на это — от администраторов проектов-участников слышно что активность студентов в этом году феноменально низкая.

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

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

Что-же мы видим в этой ситуации глазами студента:

  • За все годы программы сумма вознаграждения так и не менялась. Деньги тут конечно не главное, но я уже 2 года подряд слышал мнения некоторых студентов — что за 5000$ они не могут позволить себе потратить лето на GSoC. Конечно это касается только студентов из Европы.

  • С повышением качества организации GSoC — растут и требования к студентам. Многие организации в качестве условия положительного рассмотрения предложения ставят требования работать над проектом 40 часов в неделю или активно участвовать в жизни проекта.

  • Студенты предыдущих поколений заканчивают учебу или уже нашли себе постоянную работу и не могут совмешать это с GSoC (в том числе и я).

Google Summer of Code 2009

Google Summer of Code 2009 уже в разгаре. В этом году несмотря на кризис и отмену GHOP — Google продолжает свою программу по вовлечению студентов в разработку свободного ПО и запускает уже 5ый сезон.

С 23 марта по 3 апреля открыт период приема заявок от студентов на участие в GSOC. Поэтому если вы хотите принать участие в этом мероприятии и получить свою долю денег и конечно опыта — не медлите и быстрее включайтесь в борьбу за грант.

По сравнению с прошлым годом можно отметить следующие изменения:

  • новый сайт для организации самой программы на базе Melange
  • значительная активность в официальном блоге программы

    В остальном хочется отметить тенденции:

  • студенты все чаще становятся mentor’ами

  • активность в проектах начинается ранее и становится более направленой
  • качество идей повышается, количество reviewer’ов растет
  • активная подготовка к GSOC начинается с самого нового года и еще до официального оглашения списка организаций некоторые студенты включаются в жизнь интересующих их проектов

Если вы заинтересовались и у вас есть желание участвовать в этой программе — рекомендую в первую очередь ознакомиться со списком одобренных орагнизаций и выбирать себе поле для деятельности.

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

Upd: Debian обзавелся Twitter аккаунтом, где транслируются последние обновления о ходе GSoC в Debian.

Как запустить Byteflow на Jython

В последнее время очень активно ведется работа над созданием новых языков и портированием существующих на платформу Java. Многие аналитики утверждают что за этими языками будуйщее. Одним из таких языков стал Python. Его порт, работающий на JVM, называется Jython.

Я уже писал о портировании различных web-фреймворков на Jython, описывал проблемы запуска Trac на Jython, а сегодня я расскажу о успешном опыте запуска популярного blog-engine Byteflow на Jython.

Byteflow использует для своей работы Django, согласно многим источникам в интернет этот популярный web-framework успешно портирован на Jython этим летом.

Этап первый, подготовительный (установка Java, Jython, Django):

Я надеюсь у вас уже установлена Java (рекомендую использовать 6ую версию от SUN, т.к. я не пробовал еще запускать Jython на OpenJDK).

Ставим Jython (в данный момент последней версией является 2.5b0), рекомендую использовать последнюю “стабильную”: $wget http://kent.dl.sourceforge.net/sourceforge/jython/jython_installer-2.5b0.jar $java -jar jython_installer-2.5b0.jar

Вот тут, если у вас на машине не стоит X-сервер, могут возникнуть первые проблемы: java.awt.HeadlessException: No X11 DISPLAY variable was set, but this program performed an operation which requires it.

С помощью гугля и здравого смысла находим способ запустить консольную версию инсталятора: $java -jar jython_installer-2.5b0.jar --console

Сразу после установки нам нужно дать права на исполнение интерпритатору Jython: $chmod +x /mnt/data/java/jython2.5b0/bin/jython
Проверяем работоспособность Jython: $ /mnt/data/java/jython2.5b0/bin/jython
Jython 2.5b0 (trunk:5540, Oct 31 2008, 13:55:41) [Java HotSpot(TM) Client VM (Sun Microsystems Inc.)] on java1.6.0_04

Установка Django:

Django с версии 1.0 официально работает на Jython, поэтому скачиваем последнюю стабильную версию (в данный момент ею является 1.0.2) и устанавливаем её с помощью Jython: $wget http://www.djangoproject.com/download/1.0.2/tarball/ $tar xjvf Django-1.0.2-final.tar.gz $cd Django-1.0.2-final $jython setup.py install
Процесс сборки Django может затянуться на несколько минут, но в результате все должно собраться без каких-либо ошибок и проблем.

Этап второй, запуск Byteflow:

Byteflow активно развивается, поэтому лучше всего брать текущую версию из репозитария:

$hg clone http://hg.piranha.org.ua/byteflow/ $cd byteflow

Согласно инструкции по установке вносим необходимые изменения в settings_local.py и пытаемся инициализировать БД:

jython manage.py syncdb Traceback (most recent call last): File "manage.py", line 11, in <module> execute_manager(settings) .... File "/mnt/data/java/jython2.5b0/Lib/site-packages/django/db/backends/mysql/base.py", line 13, in <module> raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e) django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

Проблема заключается в том что для Jython необходимо использовать специальные class-wrapper для работы с БД, т.к. низкоуровневой работы с БД используется JDBC драйверы для Java. Поэтому мы не можем использовать стандартные python реализации DBAPI.

Для решения проблем с database backend мы воспользуемся проектом django-jython, в рамках которого были разработканы Jython DB2 API wrapper для PostgreSQL и SqLite3. Устанавливаем последнюю версию из svn: $svn co http://django-jython.googlecode.com/svn/trunk/ django-jython $cd django-jython $jython setup.py install

В данный момент MySQL не поддерживается, но работа ведется и возможно скоро уже будет реализован wrapper и для MySQL.

Для использования нашего backend’а в byteflow надо изменить переменную DATABASE_ENGINE: DATABASE_ENGINE = 'doj.backends.zxjdbc.postgresql' # variants: mysql, sqlite3 Вновь пробуем инициализировать БД, и вновь получаем ошибку: `

$jython manage.py syncdb Error: No module named BeautifulSoup `

Скачиваем и устанавливаем BeautifulSoup для Jython: $wget http://www.crummy.com/software/BeautifulSoup/download/BeautifulSoup.tar.gz $tar xzvf BeautifulSoup.tar.gz $cd BeautifulSoup-3.0.7a $jython setup.py install

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

Теперь вновь запускаем инициализацию БД: $jython manage.py syncdb zxJDBC.DatabaseError: driver [org.postgresql.Driver] not found

Данная ошибка говорит нам о том что нужно установить jdbc драйвер для PostgreSQL. Опять идем на сайт разработчиков и выбираем подходящий драйвер, я рекомендую взять стабильный 8.3 JDBC 3: $wget http://jdbc.postgresql.org/download/postgresql-8.3-604.jdbc3.jar

Теперь можно вновь запустить инициализацию БД (но теперь мы это делаем некоторым изощренным способом): $/usr/bin/java -classpath /opt/java/jython2.5b0/jython-complete.jar:/home/blaze/Desktop/postgresql-8.3-604.jdbc3.jar -Dpython.home="$JYTHON_HOME" org.python.util.jython manage.py syncdb

Перед выполнением следующего этапа нам необходимо создать пользователя и БД для byteflow. О создании пользователя лучше читать в руководстве PostgreSQL, я создал пользователя следующими командами(необходимо выполнять из-под пользователя postgres):

$createuser byteflow -P -S -D -R $createdb byteflow -O byteflow

После этого БД должна инициализировать успешно, и мы можем переходить к запуска тестового сервера:

$/usr/bin/java -classpath /opt/java/jython2.5b0/jython-complete.jar:/home/blaze/Desktop/postgresql-8.3-604.jdbc3.jar -Dpython.home="$JYTHON_HOME" org.python.util.jython manage.py runserver

В качестве дополнения хочу отметить что для корректной работы Byteflow необходимо еще установить модуль ElementTree, у которого уже есть порт на Jython : $svn checkout http://jython-elementtree.googlecode.com/svn/trunk elementtree $cd elementtree $jython setup.py install --stdlib

модуль openid: $wget "http://openidenabled.com/files/python-openid/packages/python-openid-2.2.1.tar.bz2" $jar xzvf python-openid-2.2.1.tar.bz2 $cd python-openid-2.2.1 $jython setup.py install

А также необходимо отключить catpcha в настройках Byteflow, либо использовать recaptcha, т.к. для работы она требует PIL, которая не портирована на Jython. Возможно будет работать вариант с recatpha, но это надо проверить.

Ссылки по теме:
 Distribs:

Modules:

Articles:

Tomcat 7 уже в разработке

Сегодня обнаружил что ASF обновила свои планы относительно разработки следующей вресии Apcahe Tomcat. Все известно что текущей рекомендованной для использования веткой является 5.x, в разработке и уже объявлена стабильной ветка 6.0.x. Данная ветка предоставит разработчикам поддержку спецификаций Servlet 2.5 and JSP 2.1. При этом после 6.0.x разработка будет вестись сразу в 2х ветках 6.2.x и 7.0. При этом все новшества 6.2 будут переноситься в 7.0.

К сожалению разработчики не делятся подробными планами нововведений в новых версиях, но известно что 6.2 будет направлена на устранение ошибок, улучшение производительности и стабильности, а также совместимсоти с другими серверами, а вот в 7.0 нас скорее всего будет ожидать поддержка Servlet 2.6, JSP 2.2.

Как ни странно — разговора о реализации Servlet 3.0 пока не ведется, хотя возможно в Tomcat 7.0 будет реализована именно Servlet 3.0, а не 2.6.

Первые впечатления от Open Solaris

Сегодня состоялось мое первое знакомство с таким чудным зверем как Open Solaris. Я всегда относился к нему скептически, но жизнь заставила стать пользователем этой операционной системы. Радует что это хоть отчасти Linux, а не чужеродная и враждебная среда. Хотя степень недружелюбности значительно больше чем у FreeBSD.

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

  1. Захожу в систему и пытаюсь сменить пароль стандартным способом: [pvinogradov@106642 ~]# passwd
    passwd: Changing password for pvinogra passwd: User unknown: pvinogra Permission denied [pvinogradov@106642 ~]#

Сложно поверить что у них в таком очевидном месте баг, но все походит именно на это. Исходники Open Solaris я качаться поставил, гляну при случае.

  1. Вторым и последним моим экспериментом была система пакетов. Зачем к названию всех пакетов добавили префикс SUNW для меня осталось загадкой, но я долго искал знакомые мне vsftpd, cacti и некоторые другие пакеты. В результате моих экспериментов я смог установить zsh из репозитария, и этот zsh принес с собой новую libC, которая и поломала половину системы. Гуглю моя проблема оказалась известна, но решение в виде перестановки системы меня не устраивает.

    Вот теперь сижу без сервера и жду реакции техподдержки на мою просьбу переустановить мой сервер и дать мне возможность делать самому из web-интерфейса.

ps: Мораль сей басни такова — контроль зависимостей сложная и очень важная фича для дистрибутива и не даром Debian хвалят именно за систему пакетов. Дай бог и Open Solaris такую.

Software Freedom Day 2008, Izhevsk

24 сентября в Ижевске в полуофициальной обстановке аудитории УдГУ при поддержке Sun Campus Ambassador’а УдГУ собралась группа людей чтобы отметить День Свободного ПО.
Докладчиками были Андрей Гребнев(Sun Campus Ambassador в УдГУ) и Павел Виноградов (лидер команды NixDev). Андрей представил доклад о академических инициативах Sun, а я впервые представлял доклад Sams Project — Путь от “открытого” до открытого проекта о истории развития нашего проекта SAMS.
Среди слушателей были замечены студенты ИжГТУ и УдГУ, преподаватели УдГУ и сотрудники IT фирм Ижевска. Мне было особо приятно видеть несколько студентов с которыми я вел совместные проекты в прошлом. После докладов была небольшая дискуссия по результатам которой я познакомился с проектом jLibrary, а у проекта SAMS появилися потенциальный новый пользователь.

Отдельно хочется отметить косвенные результаты этой встречи:

  • Начато составление списка активных и заброшенных Open Source проектов, в развитии которых принимали участие программисты из Ижевска и Удмуртии.
  • Проект SAMS запускает программу How To Contribute. Основной целью является привлечение новых разработчиков в сообщество Open Source. Желающим мы предоставляем конкретную задачу по развитию проекта и всесторонюю помощь (это именно то чего так нехватает новичкам, желающим принять участие в Open Source проектах)