воскресенье, 31 марта 2013 г.

TFS 2012. Как добавить отображение багов на доске

Добавление отображения багов на доску в Team Foundation Server 2012

Как вы знаете, в TFS 2012 появилась очень удобная вкладка "Доска".
Виталий Лещенко в своей статье описал один из способов настройки отображения багов на ней:
В его случае баги отображаются квадратиками вместе с задачами.

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

1. Выгружаем метаданные категорий из TFS командой:
witadmin exportcategories /f:"D:\Category.xml" /collection:http://tfssrv:8080/tfs/MYCollection /p:"My Project"
2.  Добавляем баги в категорию требований Microsoft.RequirementCategory:
  <CATEGORY refname="Microsoft.RequirementCategory" name="Requirement Category">
    <DEFAULTWORKITEMTYPE name="User Story" />
<WORKITEMTYPE name="Bug" />
  </CATEGORY>
 3. Загружаем метаданные категорий обратно в TFS:
witadmin importcategories /f:"D:\Category.xml" /collection:http://tfssrv:8080/tfs/MYCollection /p:"My Project"
После этого доска, скорей всего, перестанет работать. Причиной тому является, что в метаданных бага нет всех атрибутов User Story.

1. Откройте какой-нибудь из своих багов и User Story
2. Посмотрите, какие из атрибутов User Story отсутствуют в баге
3. Выгрузите из TFS метаданные User Story и Bug:

User Story
WitAdmin ExportWitd /collection:http://tfssrv:8080/tfs/MYCollection /p:"My Project" /n:"User Story" /f:"D:\UserStory.xml"
Bug
WitAdmin ExportWitd /collection:http://tfssrv:8080/tfs/MYCollection /p:"My Project" /n:"Bug" /f:"D:\Bug.xml"
4. В моем случае отсутствовал атрибут Story Points.

Добавляем его описание в тег <FIELDS>:
<FIELD name="Story Points" refname="Microsoft.VSTS.Scheduling.StoryPoints" type="Double" reportable="measure" formula="sum">
  <HELPTEXT>The size of work estimated for implementing this user story</HELPTEXT>
</FIELD>
Добавляем его расположение в тег <FORM>:
<Column PercentWidth="20">
  <Control FieldName="Microsoft.VSTS.Scheduling.StoryPoints" Type="FieldControl" Label="Story Points:" LabelPosition="Left" />
</Column>
5. Импортируем обратно в TFS метаданные бага:
WitAdmin ImportWITD /collection:http://tfssrv:8080/tfs/MYCollection /p:"My Project" /f:"D:\Bug.xml" 
6. Теперь баги отображаются на доске на одном уровне с User Story.
На примере сверху User Story, а снизу Bug:

четверг, 28 марта 2013 г.

OID 11g. Особенности настройки SSL в OID 11g на порту не по умолчанию

Oracle Internet Directory 11g. Как в нем настроить SSL на порту 636

Обычно, когда Oracle Internet Directory 11g разворачивается на стандартных портах, проблем с SSL нет.

Когда хочешь, чтобы SSL работал по порту 636, то необходимо сконфигурировать SSL в соответствии со статьей в Oracle® Fusion Middleware Administrator's Guide for Oracle Internet Directory 11g Release 1 (11.1.1) Part Number E10029-02


Я настраивал через wlst, и как оказалось, в статье есть ошибки.

Функция addSelfSignedCertificate принимает вход не 8 параметров, как указано в статье, а 7.

У меня она корректно выполнилась с такими параметрами addSelfSignedCertificate('asinst_1','oid2','oid','oid','Zzzzzzzz','cn=oid','512').

При конфигурировании в файле "myfile.prop" нужно выбрать алгоритм шифрования. 

Выбрал первый из перечисленных "SSL_RSA_WITH_RC4_128_MD5". 

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

1. Запуск wlst

2. connect('weblogic', 'Zzzzzzzz', '192.168.1.1:7001')

3. listWallets('asinst_1', 'oid2', 'oid')

4. custom()

5. ls()

6. cd('oracle.as.oid')

7. ls()

8. listWallets('asinst_1', 'oid2', 'oid')

9. createWallet('asinst_1','oid2','oid','oid','Zzzzzzzz')

10. addSelfSignedCertificate('asinst_1','oid2','oid','oid','Zzzzzzzz','cn=oid','512')

11. configureSSL('asinst_1','oid2','oid','sslport1','myfile.prop')

Файл myfile.prop положил в директорию /oracle/Oracle_IDM1/common/bin, откуда запускал ./wlst.sh

Содержимое файла:

KeyStore=oid
AuthenticationType=Server
SSLVersions=nzos_Version_1_0
Ciphers=SSL_RSA_WITH_RC4_128_MD5
SSLEnabled=true

12. Перезапуск OID

13. ./opmnctl updatecomponentregistration -adminHost 192.168.1.1 -adminPort 7001 -adminUsername weblogic -componentType OID -componentName oid2 -Port 389 -Sport 636

Готово.

Team Foundation Server 2012 ExportWitd/ImportWITD Utility

Работа с утилитой ExportWitd/ImportWITD в Team Foundation Server 2012

При работе в Team Foundation Server у меня часто возникала необходимость подредактировать существующие рабочие элементы Work Items:
1. Добавить новые причины закрытия задач, багов, требований
2. Добавить новые атрибуты, например, приоритет
3. Скорректировать переходы элементов из одного состояния в другое

Все эти элементы представляют из себя XML.
Для его выгрузки/загрузки необходимо использовать следующие команды.

Export

Task
WitAdmin ExportWitd /collection:http://tfssrv:8080/tfs/MYCollection /p:"OnStore Project" /n:Task /f:"D:\task.xml"

User Story
​WitAdmin ExportWitd /collection:http://tfssrv:8080/tfs/MYCollection /p:"OnStore Project" /n:"User Story" /f:"D:\UserStory.xml"

Import

Task
WitAdmin ImportWITD /collection:http://tfssrv:8080/tfs/MYCollection /p:"OnStore Project" /f:"D:\task.xml" 

User Story
WitAdmin ImportWITD /collection:http://tfssrv:8080/tfs/MYCollection /p:"OnStore Project" /f:"D:\UserStory.xml"

Для работы утилиты необходимо установить Microsoft Visual Studio Team Foundation Server 2012  Power Tools. 

среда, 27 марта 2013 г.

PHP: LDAP. Получение дополнительного описания ошибки LDAP в PHP

Как получить дополнительное описание ошибки LDAP в PHP на примере работы с Oracle Internet Directory 11g

Как-то в своей работе пришлось столкнуться с проблемой, что пользователи при аутентификации на php-страничке получали сообщение о неверном пароле при его верном вводе.
Как выяснилось, OID 11g возвращает одинаковый код ошибки при неверном и при устаревшем пароле.
Проблему решил с помощью анализа дополнительного описания ошибки LDAP.
Для этого в начале php-скрипта необходимо поместить строку:

define(LDAP_OPT_DIAGNOSTIC_MESSAGE, 0x0032);
А получить само выражение в переменную $extended_error с помощью функции ldap_get_option:

ldap_get_option($ds, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extended_error) 
В моем случае еще надо было распарсить это дополнительное описание и вытащить из него код ошибки уже самого OID.
Мне нужны были вот такие дополнительные описания ошибок:

Password Policy Error :9000: GSL_PWDEXPIRED_EXCP :Your Password has expired. Please contact the Administrator to change your password.

В Oracle® Fusion Middleware Administrator's Guide for Oracle Internet Directory 11g Release 1 (11.1.1) приведены все коды ошибок OID:
http://docs.oracle.com/cd/E14571_01/oid.1111/e10029/trblsht.htm#CHDJHCHC

В итоге получается такой пример:

<?php
    define(LDAP_OPT_DIAGNOSTIC_MESSAGE, 0x0032);
    # соединение с ldap-сервером
    $ds=ldap_connect('192.168.1.1');
    if ($ds)
    {
        ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
        # выполняем bind из под пользователя
        $res=ldap_bind($ds,'cn=petrov','zzzzz');
        # проверяем успешность выполнения bind
        if (!$res)
        {
            $extended_error="";
            # получаем более подробное описание ошибки LDAP
            if (ldap_get_option($ds, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extended_error))
            {
                # через регулярное выражение вытаскиваем номер ошибки OID
                preg_match_all("/Password Policy Error :(\d+).*/", $extended_error, $out, PREG_PATTERN_ORDER);
                switch($out[1][0])
                {
                    # GSL_PWDEXPIRED_EXCP - устаревший пароль
                    case 9000:
                        echo "9000";
                    break;
                    # GSL_PWDMUSTCHANGE_EXCP - смена пароля при первом входе
                    case 9009:
                        echo "9009";
                    break;
                    # GSL_ACCOUNTLOCKED_EXCP - блокировка из-за неудачного ввода пароля
                    case 9001:
                        echo "9001";
                    break;
                    default:
                        echo "default";
                    break;
                }
            }
        }
    }
    else
    {
echo "ldap_connect::ERROR";
    }
    ldap_close($ds);
?>

вторник, 26 марта 2013 г.

ORA-12560: TNS:protocol adapter error в Windows

Как победить ошибку ORA-12560: TNS:protocol adapter error в Windows

При подключении через sqlplus командой "sqlplus / as sysdba" появляется сообщение об ошибке:

ORA-12560: TNS:protocol adapter error

В моем случае проблема решалась отключением UAC в Windows.

Для отключения UAC в Windows необходимо выполнить следующие действия:
1. Перейти в "Пуск"-"Панель управления"-"Учетные записи пользователей"-"Изменение параметров контроля учетных записей"
2. Ползунок опустить до самого нижнего уровня.
3. Перезагрузить машину.
После этих действий у меня все заработало.

Если же это не помогло, то попробуйте:
1. Прописать "SQLNET.AUTHENTICATION_SERVICES = (NTS)" в файле sqlnet.ora на сервере БД Oracle
2. Проверить, присутствует ли запись о Вашей БД в файле listener.ora