День седьмой. Детектив
Вчера поиском проектов на www.getafreelancer.com не занимался, так как делал уже упоминавшийся проект: http://www.getafreelancer.com/projects/kit1980_192707.html. А SEO-проект за $20 заказчик отменил; ну и ладно, к работе я не приступал.
Так вот, по проекту http://www.getafreelancer.com/projects/kit1980_192707.html. Вчера на работу потратил 3 часа 15 минут, уже большую часть проекта выполнил. Осталось решить одну проблему, наверное, самую сложную, я еще не знаю, как. Там на сайте пользователь загружает видео, которое конвертируется на сервере в .flv формат. Сейчас пользователь должен дожидаться окончания процесса конвертации, а нужно сделать так, чтобы конвертация осуществлялась как бы в фоне, а пользователю после окончания процесса высылался e-mail. Не знаю, в каком файле нужно вызывать функцию конвертации, чтобы пользователь не ждал. Может по cron? Если кто понял и может помочь, подскажите, пожалуйста.
Ну а теперь самое интересное. Оказывается, заказчик, для которого я выполняю этот проект, сам является фрилансером и выиграл этот проект (за $160) на другом сайте, а потом как бы перепоручил мне (за $90 + обещает премию $25). Настоящий заказчик увидел этот проект на www.getafreelancer.com и связался со мной. Предоставил доказательства, что он оригинальный заказчик (поменял пароль на доступ к серверу + дал ссылку на оригинальный проект) и предлагает работать с ним напрямую, за $150.
Я хочу быть уверенным, что получу деньги за этот проект. Поэтому не спешу отменять проект за $90. Если новый заказчик создаст проект, выберет меня победителем и переведет escrow, тогда проект на $90 я отменю. Если нет - буду делать проект за $90 (плюс обещанная премия). Особо чего-то нечестного со стороны промежуточного заказчика я не вижу, он просто выступает как бы посредником, и, в принципе, не обязан мне говорить, что проект не для него лично.
На сегодня все. Буду держать вас в курсе.
8 ноября 2007 в 15:57
Хм, занятно весьма, с этим посредничеством. А насколько частая эта практика? Ведь всегда к общей выгоде сотрудничать без посредников напрямую - заказчик платит меньше, чем посредникам, вы получаете больше от заказчика. Такая себе “золотая середина”. В таком случае при получение любого заказа нет ли смысла поискать, а не даст ли кто-нибудь за тот же проект больше денег?
8 ноября 2007 в 16:00
aodfess, думаю, нечастая, так как все на виду, хотя точно не знаю.
В данном случае настоящий заказчик вообще считает посредника практически мошенником.
8 ноября 2007 в 16:23
Может вам получится с обоих срубить
8 ноября 2007 в 16:27
eyeweb, в принципе, могло бы и получиться. Но не буду, некрасиво.
8 ноября 2007 в 16:30
По поводу фоновой конвертации — есть опыт реализации, именно конвертации и именно медиафайлов; могу поделиться.
8 ноября 2007 в 16:39
Andy, был бы очень рад, хотя бы в общих чертах.
Я просто не знаю, как заставить выполняться функцию в php, чтобы для продолжения не требовалось дожидаться окончания работы функции.
А сегодня желательно сдать проект
Может там просто все, а я опять туплю?
8 ноября 2007 в 16:50
С сайта http://otvety.google.ru/otvety/thread?tid=672889f85f9af61d
Можно просто запустить отдельный интерпретатор PHP, который и будет отправлять письмо(а) в то время как основной интерпретатор PHP продолжит работу. Делается это очень просто:
array(”pipe”, “r”),
1 => array(”pipe”, “w”),
2 => array(”file”, “scripterrors.log”, “a”) // В качестве потока ошибок выбираем файл
);
// Массив с переменными, которые будут переданы скрипту
$env = array(”mail” => “some@email.ru”,
“title” => “someTitle”,
“data” => “anyData”);
// Запускаем скрипт в фоновом режиме
$p = proc_open(’C:/PHP/php.exe sendmail.php’, $desc, $pipes, dirname(__FILE__), $env);
// Работаем дальше не ожидая окончания работы запущенного процесса
?>
Соответственно в sendmail.php пишем скрипт отправки почты, а переданные переменные будут доступны в супер глобальном массиве $_ENV
Только надо иметь ввиду, что каждый новый интерпретатор “съедает” примерно 8 мб памяти пока запущен. Точное количество памяти зависит от версии PHP и загруженных расширений.
Но если на хостинге отключен вызов функции proc_open то нужно думать что-нибудь еще.
8 ноября 2007 в 16:51
>>Andy, был бы очень рад, хотя бы в общих чертах.
>>Я просто не знаю, как заставить выполняться функцию в php, >>чтобы для продолжения не требовалось дожидаться окончания >>работы функции.
Вариант решения прост - со стороны клента запустить скрипт. Я бы аяксом сделал. Коннектиш jquery.js и делаеш чот в стиле $.get(’http://yoursite.com/fuckingscript.php’,{video:lol.flv});
Как результат - скрипт отработает асинхронно, ноу проблемс
8 ноября 2007 в 16:52
Как вариант можно новый процесс запустит во фрейме и отключить user_break .. т.е. чтоб клиент не мог прервать процесс даже после закрытия браузера
8 ноября 2007 в 16:57
Alex, scriptslab, спасибо огромное. Попробую и так, и так.
8 ноября 2007 в 17:00
http://kr2.php.net/manual/en/function.ignore-user-abort.php
8 ноября 2007 в 17:35
Alex, точно. навскидку вспомнил просто =) название переврал функции.
Аджакс это хорошо, но если JavaScript будет отключена но неотработает ^_^
8 ноября 2007 в 17:38
хм а в пхп вообще чтоли нету делегатов? и асинхронных вызовов функции?
8 ноября 2007 в 17:38
Я по крону раз в 15 минут запускаю perl’овый скрипт, который смотрит в директорию на предмет наличия файлов к конвертации. Конвертирует их по очереди, перекладывает в другую директорию.
8 ноября 2007 в 17:41
scriptslab, там с отключенным JavaScript сайт вообще нефункционален будет. Типа Web2.0
Так что решение с ajax подходит.
8 ноября 2007 в 17:54
2uzver: http://kr2.php.net/manual/en/function.pcntl-fork.php возможно это
8 ноября 2007 в 17:56
В российском фрилансе практика посредничества скорее правило чем исключение.
8 ноября 2007 в 17:58
ну так написать функцию конверта и отслыки мейла, и вызывать ее асинхронно
8 ноября 2007 в 18:35
Можно вызывать PHP из командной строки асинхронно как здесь: http://robert.accettura.com/archives/2006/09/14/asynchronous-processing-with-php/
Но аяксом конечно правильнее будет.
8 ноября 2007 в 20:16
ichik, я бы сделал уточнение:
Практика грязного посредничества - очень распространена в российском фрилансе.
Защита от таких посредников - предоплата или работа через аналогичные escrow сервисы.
8 ноября 2007 в 20:49
Интересно наблюдать за дискуссиями прогеров :Ы
А если по теме - по-моему, выгоднее занимаца посреднечеством.. ыы тоже сделать блог и публиковать результаты… небыло мыслей?
8 ноября 2007 в 20:57
anycolor это защита от абсолютного кидалова, а чтобы защитится от подобного посредничества, надо пользотся поиском и просматривать много фрилансовских сайтов
9 ноября 2007 в 01:07
boom, об этом я тоже писал уже в своем блоге, как один из пунктов проверки заказчика на “вшивость” - www.malkin.com.ua/2007/11/01/freelance-kak-proverit-zakazchika-na-vshivost/ - в пункте н.5
9 ноября 2007 в 03:33
Я могу сказать, что в 80% случаев работа на ГАФе идет с посредниками, а порой через несколько рук. Заказы обычно набирают через сайты посильнее(например еланс.ком) или через виртуальные студии дизайна. В лучшем случае идет перепродажа части проекта, например если программер взял проект целиком, а отдает работу по дизайну дизайнерам.
9 ноября 2007 в 04:18
Оху уж эти перекупы-барыги)))
9 ноября 2007 в 04:40
Jay, на самом деле в этом нет ничего плохого (в работе с посредниками) - кроме того, что работу нельзя положить в портфолио (обычная практика посредников - выдавать работы, отданные в субподряд - за свои). Однако этот вопрос решается просто - наценкой стоимости работы на 20-30% (я обычно даю наценку 20%). Если посредник чист - он доплатит, если нет - просто уйдет.
9 ноября 2007 в 07:04
а я вот все думаю о выводе денег. почитал давеча о том, что можно заказать кредитку на ГАФе. вроде как красивая фича, но терзают смутные сомнения… ведь оформлением этих карт занимаются посторонние люди за океаном. как вы думаете, достаточно ли гарантий от того, что потом кто-то располагающий информацией не будет мутить деньги с них в более или менее наглом темпе? я, честно говоря не имею опыта обращения с кредитками, поэтому извините если вопрос глупый )
9 ноября 2007 в 10:53
Всеже мне кажется что через крон это было бы более граматно, хотябы потому что интерплетатору cli можно отдельно настроить лимиты памяти и времени исполнения. Если скрипт который конвертирует на php. И не занималь процессы которые будут использоватся для посещения самого сайта.
9 ноября 2007 в 10:53
Я бы в пользовательском скрипте добалял задания в какую-нибудь очередь (таблицу в бд), а отдельный фоновый процесс читал бы эту очередь каждые N секунд, конвертировал файлы (если есть в очереди) и отсылал письма.
9 ноября 2007 в 13:20
Ну, откровенно говоря… маловато за неделю работы. Если бы эта работа была основная - прожить было бы нереально.
9 ноября 2007 в 13:33
Vladimir Rusinov, отличная одея.
Только N секунд получится только на выделенном сервере.
На обычном хостинге чаще раза в минуту не получится.
А так отличная идея. Вести в базе очередь. Там же и контактные данные о оповещении клиента.
А крон и в той же сипанели настроить можно.
/usr/bin/php путь_к_скрипту_для_конвертации.php
9 ноября 2007 в 13:46
Димка, у меня на escrow еще $140, просто я их еще не счет получил, поэтому не написал в таблицу. Сегодня скорее всего эти деньги будут у меня нас счету.
9 ноября 2007 в 16:40
ignore_user_abort(TRUE); // не прекращать процесс, даже если юзер закрыл браузер
9 ноября 2007 в 17:28
Загружаемый файл сохраняется. Задачи по конвертации помещаются в базу или файл. По крону запускается скрипт конвертации, берет одну задачу, выполняет, удаляет задачу из базы, отправляем письмо пользователю.
9 ноября 2007 в 17:29
А… прочитал комменты, не я один это советую
9 ноября 2007 в 18:26
Поддерживаю вариант с cron’ом, послушайте nullwaver и dev! Почаще заданее поставте, в худшем случае будет холостая проверка наличия файлов раз в 1-2 минуты, никакой нагрузки на сервер, и скрипт написать легче, для вас самое то!
9 ноября 2007 в 18:29
Спасибо всем комментаторам за советы!
Но оказалось, что конвертация происходит очень быстро, а основное время занимает закачка файла, просто был неправильно построен процесс взаимодействия с пользователем.
Я изменил процесс закачки, и описанная мною задача просто отпала
10 ноября 2007 в 01:36
cyberloh, не мучайся в сомнениях, занимается этими картами солидная компания пейонер. Карты, говорят, у них отличные.
anycolor, смотря с какой стороны поглядеть. для изначальных заказчиков очень решает качество, а для перекупщиков, цена.
Димка, я могу тебе сказать, что работая на гафе по 6 — 10 часов, можно зарабатывать около 1.5 к в месяц, секрет очень прост, нужно быть вежливым и не борзеть с ценой, ну и уровень ваш решает. После этого появляются постоянные заказчики, которые готовы платить от 8 до 15 баксов за час твоей работы. Правда это очень утомляет это минус, но есть возможность поднять денег, это плюс
10 ноября 2007 в 09:27
Jay, в сутки или в месяц? )
11 ноября 2007 в 11:59
не понял вопроса )
12 ноября 2007 в 04:45
10 часов работы в сутки? это много.
12 ноября 2007 в 12:33
А на каком сайте заказчик создавал тендер в первый раз?
По поводу задачки - с кроном, наверное, сделать лучше всего. Это надежно и есть возможность по почте получать уведомления об ошибках.
12 ноября 2007 в 12:35
alexey, на elance.