Category Archives: Blog

Blog-часть сайта

PHP Conf 2009 Kaunas

Да, да я пишу о PHP Conf 2009 Kaunas, который произошёл 2 месяца назад, ещё 21 апреля 2009 года. Как-то туго у меня со свободным временем и всё что осталось свободным от работы ты тратишь на семью и отдых.

О том, что организуется PHP конференция я узнал один из первых, так как меня пригласили туда организаторы и не пассивным слушателем. К сожаления конференция проходила в рабочий день, что было немного не удобно с моим напряжённым графиком. Но свободный день на работе мне дали очень легко — поэтому я согласился в ней участвовать.

Организаторы были в этом году теже, что и в прошлом: InfoShow и «Net Frequency». Всё происходило в центре дистанционного обучения Каунасского технологического университета.

Тема у меня благодатная: «PHP+MySQL проекты с огромной посещаемостью», информация по ней много в сети, и я сделал просто выборку по теме и подкрепил её своими жизненными примерами. Презентацию я сделал на ура за несколько часов в одно из воскресений после прогулок по магазинам с супругой. Потом потратил пару часов на доработку.

Поездка в Каунас прошла очень гладко — 100 км на автобусе проехать очень просто и не долго по автостраде. Музыка в плеере, 3G интернет в мобильном, пара звонков, включая организаторов: попросили выслать им презентацию заранее, что-бы перенесли её в нужный компьютер — переслал её прямо в пути через Gmail клиент в Nokia. Тут всё прошло без проблем.

Сама конференция в этом году прошла очень и очень интересно и я бы сказал на довольно высоком уровне.

Во первых, все докладчики подобрали очень интересные темы:
Rytis Lukoševičius — «Как стать лучшим программистом»
Очень понравилась идея «имени-бренда», очень правильные идеи относительно того что работа должна нравиться. Это не новость, но тема в наши дни я думаю очень актуальная для многих, особенно начинающих PHP программистов.

Rimantas Liubertas — «Дистрибутивные системы контроля версий: git, mercurial, bazaar»
Актуальная тема для многих — такие системы как git или bazaar становятся всё популярней и востребованней среди разработчиков. Беглое ознакомление с ними многим может помочь в дальнейшем при их изучении, да и за всеми новостями не всегда успееш.

Paulius Jačionis — «Как справиться с огромными потоками пользователей»
Человек представил именно свою визию (точнее команды, которая работает над проектом http://www.uzdarbis.lt/), как бороться с нагрузкой, которая образуется при больших потоках пользователей имея маленький парк машин. Очень рад, что я не один здесь и решения которые принимаю я совпадают с теми, что принимают они.

Edvinas Tamošiūnas — «Как новичку влиться в команду, быстро и эффективно»
Это была довольная весёлая презентация с серьёзными и не очень советами. Кто первый раз попадал в такую ситуацию — то они полезны, кто не раз менял работу — то наверняка уже имеет свою тактику.

Giedrius Kriščiukaitis — «За качество и эффективность»
Не ожидал такой открытой презентации о том, что происходит внутри отдельно взятой компании, методах и технологиях. Местами казалось, что работать в «Net Frequency» для меня было-бы вызовом.

Во вторых аудитория в зале задавала очень правильные и конкретные вопросы, а также делилась своим опытом, советами и замечаниями.

Понравилось замечания в адрес моей презентации от Giedrius Kriščiukaitis, что в ней не упомянуто ни одного способа как проверить максимальную нагрузку на разрабатываемом проекте, ни показаны числа. К сожаления у меня нет этих чисел и способов проверить — я работаю с проектом, который уже до меня разместили на нескольких серверах с распределением нагрузки и провести тесты на живом проекте не представляется возможным — ни сайт есть желание положить, ни канал с такой пропускной мощностью, так что многое делается «по приборам» и внутреннему чутью команды. Я покупать копию по «желеу» для этих нужд никто не будет.

Что не понравилось, так то, что Tomas Liubinas и Vladas Diržys не представили свои темы: «OXID eShop Community Edition» и «Не изобретай велосипед, используй framework. Плюсы Zend Framework». Я очень ждал этих презентаций.

На after-party я не пошёл, так как предстояла дорога домой, дома ждала любящая супруга и вкусный ужин. Да и не любитель я пить пиво вечером в другом городе, если потом ехать куда-то надо.

Темп жизни и работы

Жизнь приняла какой-то дикий темп. Вроде все говорят кризис, работы нет… а у меня её меньше не стало. Стало больше бессоных ночей, поездок, встреч, звонков, задач, обсиждений. Голова пухнет.

Из знаменательных событий за последние пару месяцев:

  • в апреле слетал с коллегами на Ad:Tech в Париж – очень понравилось
  • принял участие в PHP::Conf 2009 в Литве, которая проходила в Каунасе – в этом году была очень сильная конференция
  • если верить паспорту, то отпраздновал 28 лет – особо рад небыл, если только подаркам
  • oсвоил Facebook
  • Обзавёлся Twitter’ом @zaza_lt
  • Отказался от участия в конференции блогеров Литвы Login 2009 – очень уж скучно всё начиналось в их описании
  • С третьей попытки осисли GIT для личных целей
  • Совсем не могу жить без Ubuntu – забыл все проблемы, которые мучали на других OS

А так – рутина и работа…

А иногда задумываютсь:

  • о смене дизайна блога
  • об обновлении движка блога и удалении каких-то старых страниц
  • о том, что не плохо было-бы перейти на английский язык
  • о завершении подотовки к ZSE и получении сертификата
  • найти время и пересмотреть Zend Framework 1.8.x да и некоторую информацию обновить

MySQL + PHP: charset и collation

Работаю я над одним проектом, где в день проноситься до миллиона уникальных посетителей в день. Для этого проекта я с командой работаю над маленьким сателлитом, назначения которого не имеет столь весомого значения, сколько имеет значение проблема, с которой я сегодня столкнулся. И нам крупно повезло, что кол-во данных сейчас на сателлите мизерное и он пока находиться в стадии тестирования и нагрузка на нём растёт постепенно.

Проект пишется на PHP 5.2.x + MySQL 5.0 Так как проект международный, база сателлита находиться в collation utf8_unicode_ci.

У сателлита есть 2 части: так называемая клиентская и административная. Клиентская доступна всем и дёргается постоянно, административная только администраторам, ею пользуются раз в неделю примерно пока.

Клиентская часть, из-за ожидаемой нагрузки, писалась полностью мною, без использования каких-либо фреймворков, каркасов и прочего. Благо её простейшие функции позволяли это сделать быстро. Естественно, в качестве MySQL клиента был выбран mysqli, всё как надо, сразу после соединения был выставлен нужный charset, строго как в мануале:

$conn->set_charset("utf8")

Сам mysqli был выбран потому-что проект новый и у него вроде-как получше с поддержкой UTF-8 всё устроено.

Административная часть писалась коллегой, на пару со мной, причём ответственность за качество кода лежит на мне. Для большей скорости написания мы использовали Zend Framework, который мы оба довольно не плохо освоили к этому моменту. К тому-же, административная часть имела куда больше функций и меньше нагрузки, нежели клиентская. Единственное разногласие, которое у нас было с коллегой, это использовать или нет Zend_Form или нет из-за очень сложной кастомизации самих форм и их декораторов, неразумного использования комбинации <dd> и &ltdt> вокруг скрытых полей и прочих мелких религиозных и языковых разногласий. Ни одному из нас не возник простейший вопрос, как устроен другой компонент — Zend_Db. Определит ли он сам charset и collation, который мы используем и нам нужен или будет использовать тот, что установлен по умолчанию. И вот, сегодня мы поняли что мы выстрелили себе в ногу примерно две недели назад — не то пуля летело медленно и наконец долетела, не то порох сырой ныл и сработал только сейчас.

Я всегда думал, что умный Zend_Db как-то сам узнает какой нужно charset и collation использовать, раз он сам узнаёт какие поля у таблицы и какие значения туда можно писать, а какие нет. Оказалось что нет… Я был не прав и ему об этом нужно грубо говорить (ну или клиенту вдолбить в настройки по умолчанию).

Поэтому в самом начале ему пришлось прописать следующие строку сразу после инициализации:

$db->query('SET CHARACTER SET utf8');

Теоретически, если следовать документации Configuring the Character Set and Collation for Applications, хватило-бы только SET NAMES ‘utf8’, но в таком случае collation остался бы utf8_general_ci — а нам этого не хочется. Поэтому, копнув немного глубже, в Connection Character Sets and Collations, было найдено SET CHARACTER SET utf8.

После данных изменений со стороны административной части на Zend Framework, замены $conn->set_charset(“utf8”); тоже на $conn->query(‘SET CHARACTER SET utf8’); и правок в базе данных всё заработало прекраснейшим образом.

Я вот понять не могу, почему у Zend Framework нигде об этой проблеме не написано? Зачем у mysqli есть метод mysqli::set_charset, если он меняет collation на верный? Почему в PHP мануале написано не использовать «старый дедовский способ с SET NAMES»?

Вообще, если посмотреть на то, что я встречаю в других проектах, которые попадают к нам на поддержку или консультации, много кто зарывается на этих charset и collation к сожалению, особенно на мультиязычных проектах.

Куда я пропал осенью

А, как я на долго пропал, на целых три месяца. Нет, я ещё жив, просто очень много работы и мало свободного времени, даже написать блогпост не хватает.

В сентябре установленный Ubuntu Desktop 8.04 до сих пор работает без сбоев. За 3 месяца я так привык к Gnome и командной строке, что теперь мне сложно работать на Microsoft Windows системах. Единственное, чего не хватает пока, или я не нашёл (да я пока и не искал особо), так это визуальный diff, как у TortoiseSVN.

Кстати, он почти без проблем обновился до версии Ubuntu Desktop 8.10. Одна проблема только с видео-драйверами — заголовок окон не всегда прорисовывается верно. Работать не мешает, но иногда раздражает. Где-то в сети есть решение через установку бета-версии видео-драйверов от NVIDIA, но бета-версию ставить пока не хочется.

Большим подспорьем в работе является то, что многие вещи работает out-of-the-box и даже в Ubuntu Server 8.10. В офисе устанавливал 2 машинки для кой-каких параллельных вычислений на его основе, без кластеризации. Всё что нужно было — встало без проблем. Доступ по SSH настроился без проблем (включая ключи для подключения), PHP свеженький, MySQL, Apache2, Python с поддержкой MySQL. SFTP пашет, графики мониторинга нагрузки тоже есть, VPN поднимается на ура. Subversion, GIT, Bazaar — всё под рукой и всё работает без проблем. Всё обновляется — что ещё нужно для полного счастья?

А командная строка — она просто опьяняет своими возможностями. Через месяц уже никакой разницы где ты редактируются код или настраиваешь систему – локально или удалённо. Привыкаешь запускать PHP и Python в интерактивном режиме и быстро проверять возникшие проблемы.

И чем дальше, тем большие объёмы данных приходиться обрабатывать. Последний раз обе машинки генерировали информацию для сайтмапа сайта 6 дней — 70 000 000 адресов. Потом его индексировали, фильтровали на лишние ссылки день и теперь уже 6 часов генерируют XML файлы из данных в MySQL. Кроме полезной работы для клиента и его сайта, весь этот эксперимент дал кучу информации и занятий по практической оптимизации как запросов и структуры, так и настроек MySQL сервера. Приятно, что работа не только приносит доход но и развивает запас знаний.

И на последок хочется заметить, что очень эффективно удалось использовать Python для многих фоновых задач в одном из проектов. Все они создавались с нуля и бизнес-логику пришлось портировать с PHP, но скорость написания это окупила. Так как с Python написанный код был сразу модульным — при значительных изменениях финальной цели — менялась только минимальная часть Python скриптов.

Ещё успел написать одну статью для Pixel.lt о Zend Framework: Работаем с Zend_DB, правда она на литовском языке. Ещё одна статья на литовком о Zend_Form лежит на диске и ждёт своей очереди, готовая на 60%, может быть я закончу её в следующем месяце.

Короче говоря, жизнь продолжается не смотря на все кризисы и трудности — главное не сдаваться и дальше делать на отлично то, что ты должен делать.

Конференция Red Hat Enterprise Linux

Сегодня, 9 сентября, в Reval Hotel Lietuva (там-же, где проходил EuroPython 2008) прошла конференция, посвещённая Red Hat Enterprise Linux. Конференцию организовала TVG, а в конференции приняли участие: Greg Bogochwalski (Sales Director VDEL GmbH), Andrey Meganov (RHCA, RHCX, Head of Presales & Consulting VDEL GmbH), Laimonas Pronskus (TVG) и Wiesław Pilarczyk.

Greg Bogochwalski раскрыл две темы: Вводная часть о Red Hat и Система обучения и сертифицирования Red Hat. Материал, сразу видно, подготовлен хорошо и человек знаток своего дела.Четко было показано, где граница между Fedora и Red Hat, почему Red Hat платный, за что и как платят и почему для Enterprise желательно выбирать Red Hat Enterprise Linux. Так-же представили короткий список курсов, который можно прослушать в соседних странах, где есть сертифицированные учебные центры. Рассказал про то, какие сертификаты можно получить. Сказал, что возможно будет создаваться база и в Литве, и что возможно, участники конференции будут первые, кто смогут воспользоваться услугами центра по обучению и сертификации, причём со скидкой. Что-же, ждём, что будет дальше (но в любом случае есть желание снести Ubuntu и установить Fedora).

Andrey Meganov раскрыл тему продуктов, входящих в Red Hat и как себя позиционирует Red Hat на рынке. Что-то повторилось из презентации Greg’а, но в целом, тема была очень интересной, так как были представлены более подробно такие продукты как: виртуализация, GFS, Red Hat Cluster Suite, Red Hat Enterprise IPA, Red Hat Enterprise MRG. Лично с Andrey мне удалось очень интересно побеседовать во время обеденного перерыва на тему GFS и Red Hat Cluster Suite. Побольше бы таких разговоров и таких замечательных людей как Andrey Meganov рядом, готовых показать и указать, в которую сторону шаманить.

Laimonas Pronskus коротко представил свою компанию TVG, рассказал о позиции Red Hat Enterprise Linux в Литве и уделил большое внимание системе лицензирования Red Hat Enterprise Linux.

Wiesław Pilarczyk представил всем JBoss Platform, но, к сожалению, оценить JBoss и его презентацию я не могу – я совсем не в курсе, что такое JBoss и с чем и как его едят. Так что без комментариев.

В общем и целом конференцию я лично считаю удавшейся и для себя полезной. Завязаны некоторые интересные контакты, раскрыты некоторые темы, выпит бокал пива с RHCA (а людей с таким статусом не так и много). В подарок, на память о конференции, участники получили по маленькой мыши с логотипом Red Hat и коробочку для визиток. Спасибо организаторам и участникам за это мероприятие.

Linux и мечты

Давно давно мечтал, года два наверное, заполучить в руки свободную машину (PC), желательно laptop (а в народе просто “лапоть”) и водрузить туда какую-либо дистрибуцию Linux или Unix. Так, что-бы не очень старую, но чтоб свободно можно было перегружать, сносить, переустанавливать.

Наконец моя мечта, моё желание исполнилось. В руки мне попал Dell Latitude D620. Попал он ко мне не совсем “здоровым”: проблемы с памятью и охлаждением. Память ему меняли 3 раза и не помогало ему, поэтому всё валили на охлаждение.

Да, он действительно грелся. Согревался за минут 5, а то и быстрее (зависело от температуры окружающей среды) и зависал, либо падал.

Вскрыл я его, сняв клавиатуру и убедился, что coоler у него работает. Удалил 1 блок памяти, что находился под клавиатурой, запустил его и он продержался достаточно долго, что-бы я установил на него CentOS 5.1 с DVD. Правда, потом, при попытки собрать ffmpeg (ради эксперимента) как он вновь завис. Так как клавиатура была всё ещё снята, я осмотрел все детали охлаждения ещё раз – показалось чисто. Тогда, я на собственный страх и риск, я решил пропихнуть скрепку через его радиатор, чтоб проверить, не забит ли он мелкой пылью. Оказалось забит. Вычистил. Вставил 2 модуля памяти из разных коробок (по шине они совдали, один модуль был родным 512 МБ, второй 1024 МБ из тех что покупали). Работает, т.е. биос проходит до момента загрузки.

Родной Microsoft Windows XP Home на него не встал – при проверке системного обеспечения он падал. Поэтому туда я водрузил CentOS 5.1 с заранее скаченого DVD ещё разок, настроил Wi-Fi сеть, обновил до CentOS 5.2. Но танцы с бубном вокруг драйверов Wi-Fi карты и драйверов видео карты меня не обрадовали, поэтому на следующий день я туда засунул Ubuntu 8.04 LTS.

Оно уже отработало около 2 недель, на нём уже установлен Wine, разное программное обеспечение для редакции видео, некоторые редакторы и прочие программы с которыми я хотел поэксперементировать.

EuroPython 2008 день три

Michael Meinel: FlowSimulator – к сожалению я опоздал на эту презентацию и за последние 15 минут уже ничего не понял.

Jussi Rasinmäki: Small Team, Big Demands? – Use the Batteries Included – Что стало очень ясно, так что что Финские лесничие вполне овладели Python, XML и даже немного SQL и очень чуть чуть C. Так они создали симулятор предназначенный для менеджмента и планирования вырубки леса. Очень интересная история создания программы, эволюция от C + libxml2 до Python. С какими проблемами столкнулись, какая скорость написания кода, какя скорость написанного кода по отношению к коду на C. Довольно серьёзно всё. Очень жаль что Jussi Rasinmäki не представил интерфейсов системы о только один пример отчёта, очень слабо понятный среднему питонисту.

Raymond D. Hettinger: Core Python Containers – Under the Hood – Ну что хотеть, когда к вам приезжает кто-то из core developer for the Python language. Только чуда. И оно было. Замечательная презентация, отлично изложен материал, примеры и пояснения тоже на высоте, понятный английский язык. Сразу видно, что человек знает своё дело, понимает что к чему и ни капли не сомневается в своей правоте, даже при вопросах, которые могут потребовать более глубокого анализа ситуации. Вообще, после такой презентации, как устроены некоторые компоненты Python, как устроен менеджмент памяти, почему именно такие решения начинаешь очень сильно уважать этот язык. 10 балов!

Nicolas Chauvat: LAX – Logilab AppEngine eXtension – Можеть быть это расширение было-бы куда более понятным, если бы его хорошо представили и подготовили примеры. К сожалению все примеры увенчались почти неудачами. Конечно, готовая административная часть для Google AppEngine, очень схожая с Django тоже не плохо, но готовиться нужно лучше.

Adam Byrtek: Why It’s Good To Be Lazy: Functional Programming with Python – паренёк конечно маньяк, но ещё сам Guido van Rossum в понедельник сказал, что Python нифига не функциональный язык и не надо этим на нём этим заниматься. Но за старания и раскрытие темы я ему благодарен.

Gašper Žejn: Managing Computing Clouds on Unreliable Nodes with Python – А здесь я ожидал большего. Я ожидал опять-таки примеров и рекомендаций как это сделать. Да, они были, но их было маловато, хотелось немного больше.

Хотелось бы заметить что народ поделился ещё кой-какой информацией как используют Python: кто-то пишет дистрибутивную файловую систему под кодовым названием Byron, кто-то на нём программирует Hardware (Telic.pl) тем самым избегая дорогостоящих программистов на C.

Вобщем, потраченные 100 Euro на конференцию (кстати, оплатила всё Dip Studija) очень даже окупились. Погружение в мир Python на 3 дня дал очень много материала для размышлений. Я бы сказал мышление немного меняется после таких встреч.

EuroPython 2008 день два

Marc-André Lemburg: Designing Large-Scale Applications in Python – а знаете, ничего нового. Фундаментально он ничего совсем не сказал нового. Я думал будут менее абстрактные советы и примеры. Причём говорил тихо, с утра чуть не уснул.

Steve Alexander: Developing a Very Large Python Web Application LEAN style – тут я ожидал явных примеров из жизни, каких-то конфигураций, советов. А узнал, что нужно эксплуатировать Open Source и прочее yada-yada.

Jonathan Fine: Math on Web Pages and Mixed Language Programming – Вот посмотрите на название: Mixed Language Programming. я ожидал чего-то космического, можно сказать rocket science. Получил же пример (абстрактный) что некий университет разработал MathTran на основе TeX, где Python находиться как “смазка” между протоколом HTTP и демоном TeX. Бегло рассказали про решение (никаких особенностей и трудностей исполнения не представили), показали новый (ими разработанный) стандарт xson и немного показали как JavaScript может работать с Python (будто в этом есть сложность).

Raymond D. Hettinger: Descriptor Tutorial – Молодец! Тему раскрыли с третьего слайда, а оставшимися её очень и очень закрепили. Очень понятный английский язык, очень правильные слайды, очень хорошие примеры кода. Правильный темп, хорошая тема, полный зал слушателей. Всем очень понравилось. И темя, я думаю, очень актуальная. И не смотря на то, что она помечена как “Advanced”, она должна быть обязательной для начинающих.

Fabio Pliger: Freezing the Python – отдельное спасибо организаторам и докладчику. Очень актуальная тема. Как-бы не старались товарищи *nix’систы, а MS Windows не сильно сдаёт позиции. Писать инструкции: скачай то, запусти, нажми, установи, скачай, установи, скачай, установи очень и очень не интересно. Жаль правда, что решения пока не совсем стабильные и 200 MB egg файлов скомпилировать в .exe нам не удалось. Надо обязательно рассмотреть все 3 библиотеки: Py2exe, PuInstaller, BBFreeze. Но возможность собрать почти всё что угодно, написанное на Python в .exe меня очень и очень привлекает.

Stefan Behnel: The Cython Compiler for C-extensions in Python – Не знаю на сколько он реально работает и стабилен, но идея очень и очень хорошая. Тоже очень очень хочется попробывать как оно может работать. Как можно из Python библиотеки сдлеать C код и превратить его в Python extensions с на порядок большей скоростью исполнения.

А на закуску к нам приехал сам Hans Rosling. Представил нам тему: Code that makes sense of the world. Все слушали тихо, впитывая каждое слово этого Человека. Тема, слайды, темп – всё отлично. Один Gapminder что заслуживает. Когда он рассказал о том, с какими проблемами они сталкиваются при разработке, мне становиться их жалко. Flash, как оказалось, не поддерживал то количество кода, которое они написали для создания Gapminder. Собирать статистическую информацию о разных регионах/странах/районах очень сложно и дорого. Google им много помогает. Но мне нравиться цель, которую перед собой поставил Hans Rosling: дать доступ к глобальной статистической информации всем, кто имеет доступ к интернет сети и как можно более полной статистической информации. Очень правильная и благородная цель. Разработанные интерфейсы и возможности, представленные на конференции очень сильно расширяют взгляд на то что происходит и может изменить даже взгляд на жизнь. Вобщем, опять хочется поставить 10.

Из “халявы”: майка Bazaar и Google. Если Google я буду носить с удовольствием (особенно радует надпись на спине: I’m feeling lucky), то Bazaar изза странного отростка вниз носить как-то стрёмно.