воскресенье, 28 ноября 2010 г.

Книга: "Deadline Роман об управлении проектами"

Закончил читать очередную книгу Тома Демарко "Deadline Роман об управлении проектами".
Книжка мне очень понравилась, прежде всего нестандартным способом изложения материала. Это именно роман, с сюжетом, героями и даже небольшой любовной линией.
По сюжету герой, мистер Вебстер Томпкинс, управляет большим предприятием по выпуску софта и сталкивается с разными ситуациями. Выводы же сделанные в процессе работы он заносят в свою записную книжку.

Большинство изложенных ситуации я уже читал в "Человеческом факторе", но стиль подачи позволяет как бы со стороны понаблюдать за действиями героев в них.

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

Считаю что книга достойна занять место на моей полке с литературой.

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

How to install Etherpad on Windows

Послушав, как здорово рассказывают ребята из Yandex про командную работу, и использование, для совместного планирования, Etherpad'а я решил его поставить на одной из своих тестовых машин.
Linux систем у меня в хозяйстве нет, потому ставить решил на виртуальную машину с Windows 2008 R2 (x64), на которой крутится еще куча всего.

Для начала нашел вот эту инструкцию и попытался выполнить ее. Но cтолкнулся с рядом трудностей, посему попытаюсь ее перевести и немного дополнить.

Если кратко то надо сделать следующее:
Поставить:
  • MySQL
  • mysql-connector-java-5.1
  • CygWin т.к. все файлы сборки заточены под posix команды
  • Java JDK (я ставил jdk1.6.0_22)
  • Scala, причем ставить надо не последнюю (на момент написания 2.8.0), а предыдущую - 2.7.7. В противном случае на этапе компиляции получите ошибку "error not found type byte"
  • Сам Etherpad, причем редакцию предназначенную именно для windows, вот отсюда.

После чего надо создать фолдер, не содержащий пробелы, например "C:\Prog". И сделать в него символические линки используя либо вот эту програмку, либо иной способ например Alt+F6 в FAR Manager.

В результате должна получится следующая структура каталогов:

  • С:\Prog\Java\jdk1.6.0_22
  • С:\Prog\MySQL\MySQL Server 5.1
  • С:\Prog\Scala
  • С:\Prog\mysql-connector-java-5.1.13-bin.jar

После этого надо создать вот такие вот переменные среды:

  • JAVA_HOME = С:\Prog\Java\jdk1.6.0_22
  • SCALA_HOME = С:\Prog\Scala
  • JAVA = С:\Prog\Java\jdk1.6.0_22\bin\java
  • SCALA = С:\Prog\Scala\bin\scala
  • MYSQL_CONNECTOR_JAR = С:\Prog\mysql-connector-java-5.1.13-bin.jar

А так же добавить вот эти пути к переменной среды PATH:

  • C:\CygWin\bin
  • C:\Prog\MySQL\MySQL Server 5.1\bin
  • C:\Prog\Scala\bin
  • C:\Prog\Java\jdk1.6.0_22\bin

Причем, крайне важно добавить путь C:\CygWin\bin в начало PATH!. В противном случае на этапе компиляции получим ошибку связанную с find. Т.к. вместо find из CygWin будет использоваться системный find, а он использует совершенно иной синтаксис.

После всего этого создаем базу в mysql для EtherPad:
Запускаем интерпретатор команд:
mysql -u root -p

И выполняем вот такие команды :
create database etherpad;
grant all privileges on etherpad.* to 'etherpad'@'localhost' identified by 'password';
quit

Ну и теперь запускаем cmd.exe
Делаем cd C:\etherpad-win\trunk\etherpad
И запускаем компиляцию bash bin\rebuildjar.sh

Если все сделано верно то компиляция завершится без ошибок.

И можно будет запустить сервис командой run-local.bat

После чего зайдите на http://localhost:9000 и насладитесь работающим Etherpad'ом.

Но если попытаться зайти на него снаружи по адресу http://myserver:9000 то получите сообщение в браузере invalid superdomain.

Для того, чтобы работать удаленно надо открыть файл C:\etherpad-win\trunk\etherpad\src\etherpad\globals.js и добавить в список доменов наш, например вот так:
var SUPERDOMAINS = {
'localbox.info': true,
'localhost': true,
'etherpad.com': true,
'myserver': true
};

После чего снова все пересобрать и на этот раз все должно заработать.

Надеюсь установка и настройка этого тула сможет способствовать улучшению коммуникаций в вашей команде.

суббота, 6 ноября 2010 г.

Книга: "Человеческий фактор"

С удовольствием прочел книгу Тома Демарко и Тимоти Листера "Человеческий фактор". Написано весело и легко. В ненавязчивой манере позволяет улучшить понимание того как формируются команды и как этим командам помочь достичь успеха. Вот несколько тезисов которые мне особо понравились в этой книги:
  • Серьезные проблемы имеют не сколько технологическую, сколько социологическую природу.
  • Многие руководители слишком много времени уделяют технологиям, забывая что человеческий фактор
  • Команды это наши рабочие единицы, а потому наша область деятельности - преимущественно человеческое взаимодействие.
  • Поощрение атмосферы, не позволяющей допускать ошибки, заставляет людей занимать оборонительные позиции.
  • Именно уникальность участников команды является залогом активности и эффективности.
  • Единственное стабильное состояние в жизни проекта - трупное окоченение
  • Каждый час сверхурочных компенсируется часом недоработки
  • Трудоголизм - это заболевание
  • Команда имеет право вето на сдачу продукта если по ее мнению он не готов,и не имеет значение готов ли клиент принять такой продукт
  • Даже в тех редких случаях, когда давление на человека остается единственным вариантом, руководитель должен оказывать это давление последним
  • Проекты, в которых шеф не оказывал давления, характеризовались самой высокой производительностью
  • Единственным доказательством того, что открытая планировка улучшает производительность, всегда служит упорное повторение этого утверждения
  • Поток - это состояние глубокого, почти медитативного погружения в работу
  • Сотрудник, который постоянно пытается войти в поток и постоянно вынужден отвлекаться, - человек недовольный
  • В большинстве офисов, шума и помех достаточно, чтобы затруднить серьезные мыслительные процессы до невозможности
  • Работников не очень заботит вид офиса, но их заботит шум, уединенность и площадь стола
  • Большая часть ошибок при найме вызвана излишним вниманием к внешности кандидата и недостаточным к их способностям
  • Нанимая человека попросите его подготовить краткую презентацию по известной ему теме для всей команды, а потом обсудите его со всей командой
  • Вы причините меньший ущерб организации, если выстроите сотрудников перед дулом пулемета, чем если организуете переезд
  • Ничто не может лишить сотрудников мотивации настолько эффективно, насколько это сделает осознание ими того факта, что руководство считает их некомпетентными
  • Вера в то, что сотрудники автоматически принимают цели организации, признак наивного оптимизма руководства.
  • Лучший успех - тот, в котором нет очевидного участия руководства, а команда работает как содружество равных.
  • Человек которому нельзя доверить автономную работу, бесполезен
  • Руководитель находится за пределами команды и время от времени подчеркивает направление развития и убирает административные препятствия
  • Команда - это сеть, а не иерархия. Лидерству здесь нет места.
  • Женщины работают не чуть не хуже мужчин, и в команде они должны быть непременно.
  • В работе должна быть возможность для беспорядка ,это могут быть пилотные проекты, игры, мозговые штурмы, путешествия, конференции etc. Это объединяет команды и способствует их кристаллизации
  • Лучшие руководители способны выделять тех кто сочетает перспективу и зрелость и позволить им работать самим. Так они принесут больше пользы компании
  • Взаимное обучение сотрудников возможно лишь при отсутствии внутренней конкуренции
  • Люди не любят перемен т.к. не уверены что у них все получится. Для успешных изменении люди должны быть уверены что при любых результатах их не накажут.
  • Переменам способны помочь лишь те кто в них верит, но способен оспорить. Те кто слепо верит и те кто активно противодействуют - враги перемен.
  • Любые регулярные собрания это скорее ритуалы и они не несут пользы
Рекомендую прочесть целиком.

понедельник, 1 ноября 2010 г.

Log4net: Issue with RollingFileAppender

Достаточно давно работаю с Log4Net и в принципе нахожу его весьма неплохим и простым в использовании инструментом.
Причем пользуюсь я им именно в режиме ротации логов (RollingFileAppender)

Настраиваю его как то вот так:
    <appender name="all" type="log4net.Appender.RollingFileAppender">
      <file value=".\All.log" />
      <appendToFile value="true" />
      <maxSizeRollBackups value="1000" />
      <maximumFileSize value="10000" />
      <rollingStyle value="Size" />
      <staticLogFileName value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{version}] - %message%newline" />
      </layout>
    </appender>
 

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

После некоторого исследования оказалось, что происходит это, если основной файл лога (в нашем случае All.log) был залочен (например открыт в редакторе), после этого механизм ротации логов перестает работать человеческим образом и начинает генерировать файлы вида All.log.123 при каждом создании логера этого типа.
Причем если убрать +MinimalLock то картина становится еще хуже т.к. новые файлы просто не создаются, а переименовывается один и тот же.

Без выключения staticLogFileName мне это победить не удалось, а с staticLogFileName мне не подходит.