ltwood: (Default)
[personal profile] ltwood
или "Как у нас гибнут малобюджетные проекты"
или "Психология исполнителей при задержках оплаты"

Давно уже хотел написать этот текстик, но не знал куда его положить, поскольку на homepage подходящего раздела вроде и нет...

Итак. Стартует маленький такой проектик со вполне таким смешным годовым бюджетом. Заказчик -- вполне устойчивая фирма, имеющая задачи, которые с некоторой натяжкой отнести к науке и которые у них делать некому. Исполнитель -- небольшая (3 чел) группа сотрудников университета и Ваш покорный слуга в их числе в роли рядового сотрудника. Предполагается, что сотрудники конторы формулируют задачи и участвуют в их обсуждении, мы эти задачи решаем и реализуем решения в виде небольших демонстрационных/тестовых программ, после чего те же сотрудники конторы эти решения встраивают в свои "большие и сложные" программы. Это -- преамбула.

Первую задачу мы делаем быстро (2 месяца) и хорошо, но сотрудники конторы постоянно заняты текущими делами -- багфиксы, семинары для пользователей, какие-то бумажки... В результате через 6 месяцев решение еще не было встроено в их программу, но это я забегаю вперед. Где-то на 5-м месяце финансирование начинают задерживать, поскольку начальство не видит ожидаемых результатов. Это -- первый акт комедии.

Оплата за 4-й месяц задерживается на месяц и весь этот месяц никто ничего не делает, поскольку наш начальник говорит: "Получим деньги -- будем работать". Весь этот месяц (пятый) все возмущаются тем, какие плохие наши заказчики, а через месяц приходят задержанные деньги, но все уже устали заключать пари "заплатят/не заплатят" и продолжают с чувством собственной правоты ничего не делать, поскольку получили оплату за честно отработанный месяц. Это -- второй акт комедии.

Теперь начинается самое интересное. Проходит еще месяц (шестой), в который никто точно не знает, будут ли платить деньги дальше и, соответственно, ничего (или почти ничего) не делают просто из-за ощущения нестабильности. Когда приходит время оплаты все ожидают денег, но заказчик все еще не видит результатов и тянет время, что только усиливает чувство нестабильности и собственной правоты у исполнителей.

Дальше все развивается без изменений. Заказчик платит через пень-колоду просто чтобы не потерять лицо, а исполнители вообще ничего не делают, поскольку каждую оплату воспринимают просто как компенсацию за свои мучительные раздумья "дадут/не дадут". Так проходит год! К этому времени сотрудники конторы уже встроили наше первое решение в свою программу, но их начальник успел устать от такой работы и платить дальше отказывается. Занавес.

Такая вот интересная психология ;) Вопросы обычные: кто виноват? и что делать?

Date: 2003-12-13 09:56 (UTC)
From: [identity profile] yoshke.livejournal.com
Таки начальник виноват, IMHO...

Date: 2003-12-13 10:50 (UTC)
From: [identity profile] ltwood.livejournal.com
Интересно, который из начальников? ;)) Наш или конторский?
По-моему там у них сама собой получилась полная взаимность ;))

Date: 2003-12-13 15:09 (UTC)
From: [identity profile] yoshke.livejournal.com
ну, с контроского что взять? задержал платеж - так это должно быть предусмотрено договором - начисляется пеня. А вот ваш начальник должен был сделать все таким образом, что бы результат засчитвылся сразу после тестирования и передачи софта заказчику. После этого можно было бы сразу приступать к работе над следующим этапом и т.д.

Если появляются недочеты, дефекты и т.п. то они устраняются для клиента бесплатно, если он хочет внести функциональность, непредусмотренную вначале, то за features он платит отдельно.
Такая система заставила бы и клиента более серьезно отнестись к постановке задачи. Если у клиента не хватает ресурсов для внедрения софта, то можно было бы прямо на месте сориентироваться и подсунуть ему еще пару консультантов. Короче говоря, ваш начальник много чего проморгал...

Date: 2003-12-13 15:12 (UTC)
From: [identity profile] yoshke.livejournal.com
С другой стороны, я понимаю, что действительность не так идеальна. Вполне может быть, что клиент просто потерял интерес, а на деньги просто плюнул. Тогда, конечно, другое дело...

Date: 2003-12-14 10:22 (UTC)
From: [identity profile] ltwood.livejournal.com
Более чем неидеальна...

Йошка, Вы, вероятно, не очень хорошо знакомы с нашей местной спецификой -- "откатом", размещением тендеров по не относящимся к делу признакам и т.п. До последнего времени я был в основном субподрядчиком в больших проектах с федеральным финансированием, где все это процветает. В данном конкретном случае поводом была политическая конъюнктура -- начальнику нужно было поиметь возможность хвастаться тем, что у него работает "группа математиков из университета".

Кстати, конторский начальник тоже не прав -- он не обеспечил выполнение обязательств со стороны своих сотрудников. Хотя все эти обязательства были неформальными, а формального договора вообще не было. Так что всего этого "тестирования", "этапов", "приемки/сдачи" -- тоже не было. Соответственно и ответственности никакой с обеих сторон...

Так вот, о чем это я... Я ведь не поплакаться хотел, когда этот текст писал и проект тот был для меня так, побочный... Основная идея была такая -- есть у нас тут некая особенность психологии, позволяющая легко и просто оправдать свое ничего_не_делание и именно эта особенность губит многие неплохие дела. Ведь если бы ту же работу делала некая идеальная группа, то постепенно все бы выровнялось и стало выгодным и полезным для обеих сторон...

И еще. Участниками таких проектов часто высказывается вот какой тезис: "хорошо, что платят немного -- если будут платить много, то придется работать". Кстати, это тоже неправда. Зачастую увеличение зарплаты ухудшает результат. Сам встречался... Вот такой у нас нелинейный край ;))

Date: 2003-12-15 19:14 (UTC)
From: [identity profile] yoshke.livejournal.com
Да, забылоась местная специфика :(( Но у нас тоже маразма хватает, только он в несколько другой плоскости лежит. Раздутый штат менеджмента, некачественный софт, который исправляется больше, чем разрабатывается, внутреннее планирование "от балды" и т.д. Понятие отката здесь тоже существует, только в более завуалированной форме. Ну и естественно, как только рынок стал падать, куча предприятий оказалось банкротами. Наше в том числе :((
Так что и я не совсем тот человек, который может описать "правильный" опыт...

Date: 2003-12-14 13:22 (UTC)
From: [identity profile] ltwood.livejournal.com
Вот, кстати, еще про договоры, пени, передачу софта и т.п... Фактически у нас только большие конторы, имеющие свободу для маневрирования, могут ставить такие условия заказчику. Моя работа с американцами показывает, что обычно даже формулировка ТЗ идет в процессе работы :(( Например начинаем с того, что "обрабатываем изображение в градациях серого", потом оказывается, что оно зачем-то пишется в JPEG, хотя он дает существенные для задачи (оптика) искажения, а потом вообще выясняется, что это изображение еще и изначально существенно искажено... И никого не волнует, что для меня это означает существенные изменения, поскольку для заказчика задача (конечный результат) от этого не меняется. А бюджет (в отличие от ТЗ) уже жестко зафиксирован...

Date: 2003-12-15 19:21 (UTC)
From: [identity profile] yoshke.livejournal.com
Да, ситуация с тех.заданиями мне знакома еще по моей работе в ИЦ при Мосстрое. Тут, как Вы верно написали, главная проблема в том, что заказчик часто сам не знает, чего он хочет :0))

Михаил, а Вы обработкой изображия заняты? У нас тут рядом (в соседнем городе) Ваши коллеги - в Дармштадте есть отделение такого Fraunhover Institut. В основном они заняты обработкой изображения для медицины, но у них есть еще такой интересный проект - автопилот для автомобиля. Даже передача по всегерманскому ТВ была около года назад.

Date: 2003-12-15 22:52 (UTC)
From: [identity profile] ltwood.livejournal.com
Да не то чтобы именно изображений, скорее просто обработкой данных, когда требуются продвинутые методы. Занимался, например, обработкой геофизических данных, так там были просто одномерные сигналы (об этом есть немного в конце следующей записи в моем ЖЖ). Но сейчас задачи все больше связаны именно с изображениями... Тот проект, о котором я написал здесь, был связан с аэрофотоснимками и космоснимками.

Да, про FI я немного слышал... И обработка изображений шире всего (по суммарной стоимости проектов) применяется именно в медицине и картографии, плюс военные задачи.

Date: 2003-12-16 00:17 (UTC)
From: [identity profile] ltwood.livejournal.com
Исправление:

об этом есть немного в конце следующей записи в моем ЖЖ

надо читать как

об этом есть немного в конце записи про Шноля

Офф топик

Date: 2003-12-17 08:14 (UTC)
From: [identity profile] yoshke.livejournal.com
Офф топик такой... У меня в теме на курятнике появился "спаммер" - я его сообщение удаляю, а он его восстанавливает. В результате сегодня целый день бился над автоматизацией этой задачи.

Решение видится таким: пишем скрипт, который включает в себя граббер, который записывает последние постинги конкретного юзера, грепим результат и отсекаем все, что не нужно, номер нужного сообщения передаем в другой скрипт, который отсылает хедеры HTML формы для кураевского скрипта /forum/delete.php

Для меня основной загвоздкой остается последняя часть. В принципе решение существует:

Программа занимает несколько строк:

#!/usr/bin/perl -w
%form = ( search => 'www', errors => 0 );
use URI::URL;
use LWP::UserAgent;
$ua = new LWP::UserAgent;

my $req = new HTTP::Request 'POST', 'http://www.perl.com/cgi-bin/BugGlimpse';
$req->content_type('application/x-www-form-urlencoded');

my $curl = url("http:"); # create an empty HTTP URL object
$curl->query_form(%form);
$req->content($curl->equery); # %form content as escaped query string

print $ua->request($req)->as_string;

(я ее взял отсюда: http://search.cpan.org/~gaas/libwww-perl-5.10/lwpcook.pod#POST)

Но есть проблема: для выполнения скрипта delete.php требуется авторизация.

Не мудровствуя, я просто взял программу lwp_request - она есть во всех дистрибутивах линукса под алиасами /usr/bin/POST или /usr/bin/GET - написанную автором модуля LWP. Как видно из названия, программа имитирует интернет броузер и отсылает headers HTML-формы CGI-скрипту на сервер. Почему взял именно готовую программу - там есть функция авторизации. И хотя я не понял как работает сама функция, но авторизация рабоатет прекрасно! Но беда в том, что почему-то не передаются хедеры :( Причем, если я использую простой скрипт (то, что здесь привел), то хедеры передаются.

К слову, я пробовал использовать и метод GET, что бы передавать эти параметры в ссылке, но в этом случае скрипт delete.php открывает HTML-форму, которую требуется отправить еще раз.

Что делать - не заню. И так и эдак пытался.
Михаил, у Вас там не с кем проконсультироватья? Только если это не напрягает, конечно.

Re: Офф топик

Date: 2003-12-17 10:49 (UTC)
From: [identity profile] ltwood.livejournal.com
Сам я в этой области совершенно не компетентен :( Все собираюсь ликвидировать этот пробел и все никак не соберусь... Но один из тех моих знакомых, кто может ответить ([livejournal.com profile] gdy) уже прочитал Ваше сообщение, так что некоторая надежда есть...

Date: 2003-12-17 13:16 (UTC)
From: [identity profile] yoshke.livejournal.com
Списибо. Там где-нибудь наверняка где-нибудь маленькая несостыковка, вроде апострофов.

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

Date: 2003-12-19 07:39 (UTC)
From: [identity profile] ltwood.livejournal.com
Блин, никто из тех, кого подозревал в знании Perl-а, не сознался. У одного PHP, другой вообще от Ruby тащится...

Date: 2003-12-19 14:37 (UTC)
From: [identity profile] yoshke.livejournal.com
Так всегда :)) Я попробую в usenet этот же вопрос задать - результаты расскажу.

P.S. Если что, то прошу подозревать меня только в знании Oracle, да и то ... :))

Date: 2003-12-19 14:42 (UTC)
From: [identity profile] yoshke.livejournal.com
В общем я пока обхожусь "полумеханизированным" решением :))
Получаю значение номера последнего сообщения, перезаписываю cat'ом html файл с формой и напускаю на этот html файл w3m. Можно выполнения этого скрипта вписать в crontab, но сейчас это лишено смысла, т.к. при каждом новом запуске требуется авторизация :((
Главное, что эта библиотека LWP прямо предназначена для таких задач, но документация у нее очень бедная...

Date: 2004-02-08 21:07 (UTC)
From: [identity profile] gdy.livejournal.com
Вадим Хомоха: LWP - библиотека для доступа к WWW из Perl
Сам не качал и не смотрел, вообще, случайно увидел

Re: Офф топик

Date: 2003-12-29 08:12 (UTC)
From: [identity profile] nefedor.livejournal.com
Немного про достаточно низкий уровень - про протоколы...
Вообще-то прочитать все про http можно вот тут:
http://www.w3.org/Protocols/rfc2616/rfc2616.html
а про авторизацию - вот тут:
http://www.ietf.org/rfc/rfc2617.txt

Лично мне как-то была нужна авторизация, но только в GET. Я тогда успешно использовал следующий код на бейсикообразном язычке моей БД:

print "GET ",rawURL," HTTP/1.0",CRLF;
print "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-comet, */*",CRLF;
print "Accept-Language: en-us,ru;q=0.5",CRLF;
print "Accept-Encoding: gzip, deflate",CRLF;
print "User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)",CRLF;
print "Host: ",httpdomain,CRLF;
if Auth!="" print "Authorization: Basic ",EncodeBase64(Auth),CRLF;
print CRLF;

В переменной Auth сидела строка в формате "логин:пароль" (двоеточие посередине). Соответственно, ее нужно кодировать Base64 и вставлять как показано сверху при каждом обращении.

Что изменилось?

Date: 2008-06-25 09:03 (UTC)
From: [identity profile] dimiii.livejournal.com
Михаил, Вы по прежнему занимаетесь чем - то похожим? Изменилось ли что - нибудь с тех пор?

Re: Что изменилось?

Date: 2008-06-25 10:08 (UTC)
From: [identity profile] ltwood.livejournal.com
Нет, это был последний проект, в котором я работал вместе с сотрудниками университета. Сейчас у меня своя команда, мы работаем на американского заказчика (электронная оптика), иногда делаем заказы и для наших фирм (http://ltwood.wikidot.com/prof).
Page generated 2025-07-21 02:47
Powered by Dreamwidth Studios