пятница
Как экспортировать данные в формате ZIP из php-скрипта
Выглядит это примерно так:
<?php
require_once("zip.lib.php");
$zip = new zipfile();
$zip->addFile($some_text, 'file.txt');
$handle = fopen("file.zip","w");
fwrite($handle,$zip->file());
fclose($handle);
?>
Все, в текущей директории файл file.txt будет упакован в file.zip. Код будет работать и в php4, и в php5. В php должна быть включена поддержка zlib.
Ярлыки: Программирование
воскресенье
Прикручиваем Paypal для оплаты
Одной из самых популярных платежных систем в буржунете является Paypal. Поэтому желающие прикрутить ее к своему сайту для оплаты товаров и услуг встречается очень часто на любом фрилансерском сайте, например, на RentACoder. Но так, как россиянам Paypal разрешает иметь только send only аккаунты, у нас эта платежная система не прижилась.
Сделать кнопку «Buy now» совсем не сложно, это простейшая форма вот такого вида:<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="paypal@site.com">
<input type="hidden" name="item_name" value="Buy Online Access to BlahBlahBlah.com">
<input type="hidden" name="amount" value="10.00">
<input type="hidden" name="no_note" value="1">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-BuyNowBF">
<input type="hidden" name="custom" value="Some Value">
<input type="hidden" name="return" value="http://www.site.com/payments/pp_success.php">
<input type="hidden" name="notify_url" value="http://www.site.com/payments/pp_notify.php">
<input type="hidden" name="rm" value="POST">
<input type="submit" name="submit" value="Buy Now">
</form>
Когда пользователь произведет оплату, он будет перенаправлен на URL, указанный в параметре return. После этого Пейпал сам отправит уведомление о поступившем платеже на notify_url, только эти данные подлежат тщательной проверке, поскольку любому злоумышленнику не составит особого труда сформировать POST-запрос на notify_url. Поэтому полученные данные надо перезапросить у paypal еще раз, добавив к запросу параметр cmd со значением _notify-validate. И если paypal подтвердит совершенный платеж, транзакцию можно считать завершенной.
Для сторонних разработчиков Paypal предусмотрел специальный сервис Paypal Sandbox, который позволяет тестировать весь процесс приема платежей, с одним небольшим ограничением. В paypal sandbox не работает IPN (Instant Payment Notification), когда уведомление о платеже отправляется на notify_url. Для отладки скриптов по обработке IPN в песочнице сделали отдельный инструмент Instant Payment Notification (IPN) simulator.
Ярлыки: Полезное, Программирование
понедельник
Парсинг поисковых систем

Обычно поисковые системы не позволяют себя парсить простым смертным. Например, великий и ужасный Google банит айпишник на несколько часов, если делать запросы слишком часто. А еще гугл иногда выдает свою аццкую капчу, и иногда меняет форматирование своей выдачи, что осложняет жизнь нашим коллегам.
Однако, есть и дружелюбные поисковики, которые вполне официально разрешают себя парсить. Всего лишь надо зарегистрировать аккаунт на Yahoo, получить app id key и настроить свой парсер, благо API под него доступно там же на самых популярных языках программирования.
Никаких пауз между запросами, никакой подделки юзерагента или сбрасывания cookie делать не надо, все работает быстро и надежно. Выдачу можно забирать в XML, что значительно упрощает парсинг. Однако не стоит забывать, что в термсах Yahoo прописаны ограничения: не более 5000 запросов с одного IP. Как видите, ничто не запрещает использовать все доступные IP адреса для получения желаемого результата.
Ярлыки: SEO, Полезное, Программирование
четверг
Особенности работы с RentACoder

Большинство дорогостоящих и интересных проектов забирают себе топовые кодеры. Новичкам серьезный проект мало кто доверит, поэтому начать придется со всякой мелочи, чтобы в конце концов выйти на серьезные проекты с хорошей стоимостью.
Чтобы рядом с вашими бидами в системе засиял заветный значок Top Coder, надо выполнить следующие условия:
После выполнения каждой работы заказчик и кодер имеют возможность оценить друг друга по десятибальной шкале, и этот рейтинг очень важен. Он влияет на расчет количества очков в общем зачете кодеров.
Количество набранных очков рассчитывается по следующей схеме. Берется сумма законченного проекта и умножается на рейтинг. Т.е. 5000 очков можно получить выполнив проекты на сумму $500 с рейтингом 10, или выполнив проекты на сумму $1000 с рейтингом 5.
Заказчики так же получают свою оценку. Если кодеру не понравилось поведение заказчика, постановка задачи или еще что-то, то у заказчика средний рейтинг понизится. Но это не единственный показатель, на который смотрит кодер при оценке своего заказчика.
Например, если заказчик выставил Bid Request и не выбрал ни одного кодера для его выполнения, то карма у заказчика портится. В общем, понятно почему, он же отнял драгоценное время многих кодеров на то, чтобы прочитать его запрос, и дать свой бид. Этот показатель называется Non-action Ratio, на него тоже стоит обращать внимание прежде, чем браться за bid request.
Еще одна важная деталь. Очень часто заказчик сомневается в квалификации кодера, если он с ним ни разу не работал. Поэтому зачастую он просит демо-версию программы/скрипта/сервиса. Чтобы наглядно показать заказчику, что может ваш скрипт, вам понадобится свой хостинг. Shared хостинг сразу отпадает, поскольку хостер вас может вежливо попросить съехать, если ваш скрипт будет мешать другим клиентам. Dedicated server для демо целей слишком дорог, его лучше использовать под готовые серьезные проекты. Вам будет достаточно VDS от FirstVDS.ru, поскольку ничего другого сопостовимого по соотношению цена/качество вы не найдете.
См. также по теме: RentACoder: удаленная работа для программиста
Ярлыки: RentACoder, Программирование
среда
RentACoder: удаленная работа для программиста

Сейчас многие программисты попадают под сокращение в связи с наступлением глобального экономического кризиса. Но если вам так и не удалось найти нормальную работу, то стоит попробовать поработать на самого себя.
Обязательное условие — приличное владение английским языком, поскольку большинство заказчиков англоязычные. Регистрируемся здесь как кодер, настраиваем свое резюме, предпочтения, опыт работы и обязательно подписываемся на RSS сообщения с новыми бидами.
Система работает так. Заказчик выставляет свою задачу, и описывает ее например так:
Hello,
We currently have a functioning school management website. We need a coder who will take all static text on the website and make it to be loaded from the database. We have a page in admin where we have 'pages', we need this to be extended to include all text on the entire website. Additionally, it should be possible to add new pages and they appear in a top menu.
Further, there are two tiny changes we also need:
1. We have a comment text field. It should be made bigger using CSS
2. The list of 'events' displays on the frontpage. Currently about 10 are displayed. We need this list expanded to show 40
Заказчик выбирает ценовую категорию для проекта (например, Project Type: Very Small Business Project: under $100(USD)) и может выставить максимальный приемлемый для себя бид (в данном случае Max Accepted Bid: $60.00 (USD)).
Кодеры читают задачу, и если их она устраивает, отвечают на нее своим бидом. Заказчик смотрит на биды кодеров, историю их работы, рейтинги и прочие факторы, и решает, а работать ли дальше. Он может отказаться от своего предложения (cancel), либо выбрать чей-то бид.
Как правило, другие подробности работы заказчик описывает кодеру после того, как кодер принял бид. Заказчик переводит деньги в пользу RentACoder (escrow), и они после выполнения работы и принятия ее заказчиком, переходят в пользу кодера (за вычетом комиссии системы).
Есть несколько тонкостей в работе. Если кодер в течение 24 часов после принятия бида заказчиком понимает, что по какой-то причине не сможет справиться с задачей, он обязан уведомить заказчика об этом и подать заявку на отказ от задачи. Это так называемый grace period, в течение которого кодер может безболезненно для себя и для заказчика отказаться от работы, не получив негативного рейтинга. Заказчику при этом возвращаются все переведенные в пользу RentACoder деньги.
Если кодер все сделал вовремя, результат работы (без исключений) должен быть прикреплен к задаче для проверки и принятия ее закачиком. После успешного принятия работы кодер получает свои деньги, работа добавляется в портфолио и кодер получает рейтинг. Заказчик также получает рейтинг.
Если же закачик или кодер чем-то недовольны, все споры решаются независимым арбитражом.
Комиссия системы составляет 15%, но не менее 3 USD. Выплаты производятся по тому графику, который выбирает кодер (устанавливается минимальная сумма для выплаты (например, $100), и выбирается график выплат — в начале следующего месяца либо по окончании двухнедельного срока).
Выплаты производятся 4-мя способами:
Система очень удобная, довольно много соотечественников уже работает с ней. Категории задач встречаются самые разные, от настройки серверов до разработки крупных порталов, от перевода статей на другие языки до SEO-задач.
Система удобна не только для кодеров, но и для заказчиков; поэтому этот сервис и стал таким популярным. Конкуренция там весьма высокая, поскольку среди кодеров встречаются и индусы, и китайцы, готовые работать за гроши. Они сильно демпингуют, но для кодеров с хорошим портфолио они серьезной конкуренции не представляют.
В общем, регистрируйтесь и пробуйте, наверняка сервис понравится и вам.
Ярлыки: RentACoder, Полезное, Программирование
суббота
Про Goolge AJAX API

Недавно открыл для себя Goolge AJAX API. Оказалось очень полезной штукой; например, можно легко и красиво построить список последних записей блога (смотрим в левый верхний угол), или встроить в страничку переводчик с поддержкой кучи языков. Еще большие чудеса можно вытворять с поиском в Google, в том числе и с поиском по картинкам. Но самое главное, что использование этого API практически не нагружает сервер, поскольку оно все построено на Javascript, выполняется на стороне клиента, а серверная часть скрипта выполняется где-то в Google. Это идеальное средство для украшательства страниц на не очень мощных и недорогих VDS.
Термсы Google не всегда позволяют использовать API так, как нам хочется. Но ничто не запрещает сделать для себя нечто аналогичное и заточить под свои нужды, большую часть кода видно невооруженным глазом.
Ярлыки: Интересное, Программирование, Юзабилити
четверг
Золотое правило админа

Если кто-то еще не знает, это правило звучит так:
Работает - не трожь!
Теперь собственно сама история. Когда-то у меня стояла OpenSUSE 10.3, в которой был Perl 5.8.8. С выходом OpenSUSE 11 я решил сделать апгрейд, который на первый взгляд прошел удачно. Все было хорошо, пока я не попробовал запустить несколько своих ботов.
Выяснилось, что в 11-й версии Perl проапгрейдился до версии 5.8.10, и основные модули по работе тоже подвергались апгрейду. Все товарищи, кто прямо или косвенно пользовался модулем HTTP::Message скорее всего в логах увидили нечто подобное:
HTTP::Message content not bytes
и после этого долго ломали голову над своим кодом. А на самом деле бага в коде была на стороне мантайнера HTTP::Message, версия libwww-perl-5.810 оказалась глючной до безобразия. И самое интересное, эта версия оказалась в дистрибутиве OpenSUSE 11, поэтому совсем безболезненно апгрейд не прошел.
Да, эта проблема решается апгрейдом libwww-perl до более свежей версии, что собственно я и сделал. Сейчас это libwww-perl-5.814, и пока багов в ней не заметил.
Вот и думай после этого, а нужен ли был апгрейд, если он принес столько геморроя?
Ярлыки: Linux, Программирование
среда
PHP или Perl?
PHP более легкий, и изначально он заточен для того, чтобы отрисовывать динамически создаваемые веб-странички. Все остальное, что написано на php и запускается из командной строки или по крону, зачастую сделано нерационально.
Perl же изначально задуман для обработки текстовой информации. Сейчас это очень мощный язык программирования, с нормально реализованной многопоточностью. На нем тоже можно писать веб-приложения (и весьма успешно), но при прочих равных условиях на php это сделать проще.
Подход к программированию на этих языках отличается. Если проводить аналогии со строительством, то написание программ на Perl это в основном сборка уже готовых блоков (модулей) с последующей небольшой доработкой; разработка же на PHP - это как правило, разработка с нуля.
Благодаря Comprehensive Perl Archive Network (CPAN) каждый разработчик может пользоваться уже готовыми решениями для многих случаев жизни.
Например, я уже забыл, когда извлекал линки из HTML-страниц с помощью регулярных выражений; для этих целей есть модуль HTML::LinkExtor. Понадобилось вытащить настройки из конфигурационного файла в XML? Раз плюнуть, пользуйтесь XML::Simple. Надо написать поискового бота? Тоже несложно, LWP::RobotUA в помощь.
Зачастую задача программиста на Perl в сводится к тому, чтобы собрать в кучу все необходимые уже готовые модули и подружить их со своим кодом; он экономит кучу времени, пользуясь результатами труда других разработчиков.
Но надо отдать должное php, синтаксис там интуитивно понятный в основной своей массе. Одни только специальные переменные Perl могут вызвать отвращение с первого взгляда на них. Ну разве можно новичку самому догадаться о том, что хранится в переменных $`, $&, $_ или $/ ? Без стакана и чтения документации разобраться сложно. А вот с документацией у Perl все в порядке, команда perldoc позволит быстро найти все, что надо.
Ярлыки: Программирование