2008-06-25

Я и Python, или…

Наверно никому не секрет, что я интересуюсь Python, этим прекрасным, динамическим объектно-ориентированным языком программирования.

Первый раз я его попробовал довольно давно. И меня до сих пор “колбасит” от правил табуляции кода. Тогда мне показалось это ужасным, а теперь уже привык.

Несколько недель назад я собрал интерфейс на TkInter, использующий threading для закачивания файла при помощи XML-RPC на один сервер. Уникальность работы была в том, что файл перед загрузкой бился на часто по 1,5 Мб, что-бы не изменять настройки сервера (максимальный размер операции POST на сервере ограничен). На сервере, по мере поступления частей, файл собирался. Во время испытаний всё работало отлично даже через reverse-proxy на Apache 2.2.

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

Python Imaging Library (PIL) приятно удивил. Это был запасной план. Значит задача была: согласно определённым правилам, забирать данные о товарах с картинками с определённого сайта, картинкам изменять размер и ложить это всё в базу (данные и связь с картинкой) и на диск (саму картинку, в базе ей делать нечего), причём всё это было написано на Zend Framewrok и должно было работать “демоном” на CentOS 5.1, но переставало после часа работы, скушав всю оперативную память. Не то tidy порол, не то SimpleXML, а может всё вместе: там было PHP 5.1.6. За пару выходных в спокойном режиме, дома, я собрал на Python модель, выполняющую всё тоже, что и выше описанный скрипт на PHP (зацепил меня Python). Но, потом, с утра, на работе, я сам, из исходников собрал PHP 5.2.6 и утечка памяти испарилась.

А вот MySQLdb у Python меня не радует. Нет, я ничего не имею против написания запросов руками. Но вот передавать параметры через %s или %d, при этом динамически формируя запрос, не очень как-то получается.

µTidylib - TidyLib Python wrapper, ведёт себя абсолютно как оригинальный HTML Tidy, что на этих выходных меня озадачило. Он нагло отказался превратить в валидный xHTML одину страницу сайтов (это было http://www.delfi.lt/, содержащее 706 ошибок в данный момент времени), причём tidy, входящий в PHP 5.2.6 это делает. Вобщем, плохо думать о вещах со стороны PHP.

Опробовал я и Django 0.96. Правда я пока сомневаюсь, что он for perfectionists with deadlines. Как-то пока тяжело мне понять его логику. На платформе одной известной компании он устанавливается только после бубна, на нормальных платформах намного быстрее. Автоматический генерируемый админ не сильно удобный, особенно если у вас в базе скажем 5000 записей и они соединены с другим объектом в режиме ManyToMany. Пока мне остро не хватает документации и, конечно, опыта использования. И язык шаблонов, хочется большего. Конечно, местами присутствующая простота очень радует.

Ах, да, камень надо бросить в огород создателей Python за httplib — HTTP protocol client. Он не способен нормально передать при помощи POST или PUT большой файл на сервер, не загружая его целиком в память и загонять в переменную. Пришлось самому писать “костыль”, способный параметры принимать как dictionary и проверять, строка это или объект типа file, и, если это file, посылать его прямо в stream. Надо будет его как следует оттестировать и выложить в публичный доступ.

Ну и о предстоящем EuroPython 2008, который пройдёт с 7 по 9 июля в Вильнюсе. Организаторы подтвердили моё участие в конференции, так что я буду среди слушателей. Теперь осталось выбрать, куда я пойду, так как программа очень насыщенная.

Python, Web — Сергей Куракин @ 09:25
Таги: , , , , , ,
2008-03-01

XML-RPC в Zend Framework 1.5 RC1

На днях разрабатывал для одного проекта тестовое API на основе XML-RPC. Конечно-же нужно было создать тестовую модель. Так как под рукой всегда есть PHP, я естественно взял Zend Framework 1.5 RC1 и посмотрел, что в нём есть по плану XML-RPC. Оказалось есть - Zend_XmlRpc, как клиент, так и сервер. Если посмотреть на примеры в документации - всё легко, просто и прозрачно. При первых попытках всё прошло очень и очень успешно. Как в написании клиента, так и в написании сервера. Что меня очень обрадовало и уже в ближайшие часы я сделал всю основную работу, всё работало идеально, пока я не захотел передать немного данных, закодированных по стандарту base64 (XML-RPC имеет специальный тип для этого).

(далее…)

PHP, Web, Zend Framework — Сергей Куракин @ 17:10
Таги: , , , , ,
2008-02-17

Gaumina работает и в выходные?

Интересно, наш интернет-гигант в плане штамовки и производства искуственных интеллектов Gaumina уже работает по выходным и мне повезло попасть на сайт в момент обновления одного сайта (сегодня воскресенье, 2008 год, 17 февраля, 14:54 GMT +02:00) или мне не повезло и я обнаружил очередной их прокол после запуска/обновления?

(далее…)

Blog, Web — Сергей Куракин @ 16:08
Таги:
2008-02-12

Live Search Webmaster Center

Ага! Наконец, у них оно тоже есть. И даже публично доступно. Live Search Webmaster Center. Согласно Live Search Webmaster Center Blog оно доступно с 15 ноября 2007 года. Но, его запуск прошёл уж как-то очень тихо.

Нашёл я его ещё вчера, и совсем почти нечаянно. В очередной раз пересматривал помощь на live.com и решил переключиться с литовского на американский английский - и опа, сслылочка на Live Search Webmaster Center появилась вместо помощи. Я тут-же побежал регистрироваться.

По сравнению с Google Webmaster Tools и даже с Yahoo! Site Explorer выглядит убого.

(далее…)

Google, Microsoft, Sitemaps, Standards, Web, Yahoo — Сергей Куракин @ 15:49
Таги: , , , , , ,
2008-01-03

Когда новости сами приходят

Сегодня получил письмо с приглашением присоединиться к сообществу Zend Framework, в котором общаются на моём родном русском языке. Отличная новость - русскоязычное сообщество, форум, раздел статей (правда на данный момент пустовато, но, как я понимаю, всё только начинается), полезные ссылки.

Очень приятно, что мой любимый Zend Framework начинает набирать обороты и становиться популярнее, следовательно, появятся примеры, статьи, уроки и жизнь разработчиков станет более лёгкой.

Ещё в сети можно найту Google Group: ru-zend-framework и конечно родной сайт Zend Framework.

PHP, Web, Zend Framework — Сергей Куракин @ 18:33
Таги: ,
2007-10-24

Mobile test

Will this post be posted succesfuly from my mobile?

In standard WP admin area works even javascript in post’s sidebar!

Blog, Web — Сергей Куракин @ 22:02
2007-09-14

Написал статью для pixel.lt

После долгих лет молчания я вновь вернулся на публичную сцену Литвы.

Первый (и последний на тот момент) раз, на публику я свою статью выложил в августе 2002 года, на литовский сайт посвещённый PHP. Это было короткое писание класса SDF - Serialized Data File. Он до сих пор болтается на phpClasses. Тогда, в 2002, это было небольшой сенсацией для Литвы - MySQL был тогда достаточно дорог, его нужно было заказывать отдельно, бывали проблемы со стабильностью - а этот класс для маленьких проектов решал многое и был удобен при переносе сайта.

После чего были долгие годы молчания. Небыло ни интересных тем, ни времени, ни особого желания. Тем более есть 2 блога.

Что меня толкнуло в сентябре 2007 написать поверхностную статью о росте сайтов и том, как добавляются серверные ресурсы для pixel.lt на литовском - Tinklalapių augimas - ką daryti, jei jiems pasidaro ankštoka? - я до сих пор не знаю. Особых надежд победить в конкурсе у меня нет, XBOX 360 мне без нужды (но если выиграю делиться или отказываться не буду), „Microsoft“ Bluetooth клавиатуру или „Microsoft“ Wireless Optical мышь я бы хотел конечно. Если мою статью опубликуют в журнале “NK” - будет очень даже круто.

Вот такие новости у меня на сегодняшний день. Вчера был день программиста, 256 день в году, а я его так и не отметил…

Кстати, мою статью опубликовали 13 числа… Символично. Как-то по жизни с числом 13 мне везёт (серьёзно).

Blog, Web — Сергей Куракин @ 10:19
Таги: , ,
2007-09-10

Месяц тишины и воз интересной работы

Месяц тишины. Её причина - воз интересной работы (которая была как вызов - а смогу ли я).

Итак, к примеру, на прошлой неделе, я переделывал CMS для поддержки MSDE 2000 и ставил WebDAV на Apache 2.2.

Ну чтож, можно сказать что я точно овладел основами MSDE 2000. Поставил с поддержкой нужной аутентификации со второй попытки, без проблем переписал структуру таблиц с MySQL на MSSQL, определил тип полей, вобщем тут всё прошло относительно складно. Если кому придётся ставить MSDE 2000, то у инсталлера есть несколько занимательных параметров, которые вам помогут и запускать его лучше из коммандной строки.

Перепись самодельной абстракции для работы с базой данных и нескольких кастомных запросов заняла около 6 часов (при создании этой системы никто никогда не думал о других платформах), плюс время на тестирование каждой функции и отлов мелких глюков. Самое не приятное было то что в MySQL прекрасно хавает запросы типа INSERT INTO `table` SELECT * FROM `other_table` при одинаковой структуре таблиц, а MSSQL нужно указать конкретные поля и для INSERT и для SELECT частей.

Потом у меня было 2 загвоздки: не латинские символы и кол-во символов в полях text и ntext. При работе с PHP mssql_* функциями примеров в мануале почти минимум. Никаких Warning и Notice нету. Сидишь и как слепой котёнок дёргаешься туда-сюда.

Первый косяк был - не латинские символы, а точнее UTF-8. Так как в начале я использовал поля ntext, вся INSERT прошли нормально, а читать он от туда не смог. Всё время кидало сообщение “Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library”. Так не весело знаете… Структуру базы ис MYSQL перенёс, данные перенеслись, и если смотреть через менеджеры - удачно, а читать не могу. Правда потом нашёл решение в сети - рекомендовали использовать поля типа text. Поменял, заново импортировал данные - всё заработало.Да, была попытка использовать ODBC, но тоже ничем хорошим не увенчалась.

Вылез второй косяк - некоторые очень длинные тексты были обрезаны. Оказалось у PHP mssql_* есть 2 параметра в php.ini, которые ограничивают длину полей ntext и text. это параметры mssql.textsize и mssql.textlimit (кстати нихера не документированные и нигде не упомянаются в мануале), значение в PHP4 которых равно 4096 (чего-то там). Если им вписать -1, то это ничего не меняет, а если вписать магическое число 2147483647 - всё встаёт на свои места.

Итак, всё работает. После MySQL впечатления о MSSQL никакие. Я бы не хотел ещё раз возвращаться к таким проектам, где нужно использовать MSSQL.

С WebDAV у меня всё пошло куда на много быстрее. Apache я знаю достаточно хорошо, чтобы за полтора-два часа на нём всё запустить да так, что-бы всё работало. Особых косяков небыло, за исключением аутентификации. Какой-то чёрт меня дёрнул использовать AuthType Digest, но от него позже я отказался и перешёл на AuthType Basic. Так-же не давал покоя error.log, в котором постоянно была строчка configuration error: couldn’t check access. No groups file?. Создание group файла ему не помогло, тогда чисто методом научного тыка я включил все модули аутентификации, которые идут с Apache 2.2 - помогло, ошибки нет, всё работает. Сейчас это тестируется, и пока с Windows и MAC OS X платформы работает нормально.

Теперь я подумываю о создании WebDAV шаринга с использованием Subversion для автоматического отслеживания версионности файлов.

А ещё я: получил на работе новую машинку - Intel Core 2 Duo 2.33 GHz и 2 GB RAM, и 300 GB SATA2 диском, удачно на неё перенёс все проекты над которыми работаем и приготовился к резервному копированию (старый но нужных файлов). Таки нашёл способ работать над одним сложным и большим проектом в команде из людей, находящихся в разных концах офиса и планеты. Наконец добрались руки поставить реверс-прокси на Apache 2.2 и решить проблему 80 порта и одного IP в офисе. Да и просто сделал много классной работы и выпил не один бокал хорошего пива.

Blog, Web — Сергей Куракин @ 10:15