Category Archives: Blog

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

Написал статью для 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 мне везёт (серьёзно).

В памятку об MS Office и ссылках на документы в WebDAV

Локальный WebDAV сервер переводим в стадию тестирования. Даже нашли в интернете способ, как заставить MS Office на Windows платформе документы по ссылке на WebDAV сервере в режиме редакции а не read-only.

Нужно в регистрах для ветки HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Common\Internet создать запись OpenDocumentsReadWriteWhileBrowsing типа DWORD со значением 1.

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

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

Итак, к примеру, на прошлой неделе, я переделывал 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 в офисе. Да и просто сделал много классной работы и выпил не один бокал хорошего пива.

Особенности Литовского Load Balancing

Так как тема Load Balancing мне сейчас очень актуальна, я иногда посматриваю на большие Литовские проекты со стороны пользователя и задумываюсь, что они делают. Хотя, может это и не особенности местного Load Balancing, но я уже второй раз встречаю такое решение на довольно популярном проекте. Если кто знает в других местах подобные модели, или причины – пишите в коммнетарии, мне очень интересно.

Сейчас в ЛитНете очень популярен один проект, клон YouTube.com – маленький Литовский videogaga.lt. О нём сейчас пишут в Литовский блогах, писают кипятком, так как он очень вовремя появился в Литве и позволил незнающим английского легко загружать своё видео в интернет и делиться с друзьями. Ах, как хорошо.

Я совсем не знаю что у них на “в заде”, но вот с переди кажется, что они пошли не тем путём. Придя на www.videogaga.lt вас перенаправят на www1.videogaga.lt, ещё есть www2.videogaga.lt, www3.videogaga.lt, www4.videogaga.lt (у всех разные внешние IP). Если я правильно понял, они при помощи 4 субдоменов и редиректов распределяют нагрузку.

Похожим путём пошли и всем в прибалтике известные one.lt, причём задолго до videogaga.lt. Куча серверов,внешние редиректы и всё зависит от удачи – повезёт, попадёш на незагруженный сервер, не повезёт – будешь ждать ответов (по крайней мере так говорят пользователи). Я не в курсе конечно отношений и производителей, но у меня есть ощущение, что всё делала одна и таже контора.

Хотя я могу быть и не прав в своих домыслах и все эти субдомены предназначены для других целей?

Вот такие особенности я заметил…
Я вот не понимаю, почему суб-домены, почему дублируется содержание? Почему в переди не поставлен распределящий нагрузку proxy, как это сделано у Google (хотя хер знает как там, но главное что все мы ходим через www.google.com а не через www1.google.com, www2.google.com, … www1024.google.com) или на том-же flickr.com или YouTube.com? Нет, я согласен – статическое содержание может отдавать ферма под другим субдоменом (как у flickr.com), но основное и динамическое содержимое всегда как-бы должно с одного домена идти. Но всё-же зачем субдомены и редиректы? Почему?

А вот и ссылочка, кстати. Оба проекта стоят на сервере Resin/2.1.6. В Google по запросу Resin на первом месте сайт caucho.com. Оказывается какой-то хитрый HTTP сервер, который high-performance с load balancing. Нужно будет расковырять его, посмотреть что он, как он и зачем он.

Исследования Load Balancing и Performance для сайтов

Если кого-то волнует, куда я пропал и почему так затих – всё очень просто – я ушёл в работу.

На этой и прошлой неделе моей любимой темой был Load Balancing.

За это время я успел познакомиться с возможностями Lighttpd и его mod_cache, mod_proxy, mod_proxy_core, поставить FreeBSD, на нём закрутить Lighttpd + PHP под FastCGI. Кроме того пересмотрел nginx и его ngx_http_upstream и взглянул на Apache 2.2 с его mod_proxy и mod_proxy_balancer.

Больше всего мне понравились Lighttpd и Apache 2.2. Жаль, вот только, что Apache – это жирноватая корова по сравнения с Lighttpd, а с Lighttpd пугает его свойство зависать на огромной загрузке, и не ясно, избавились ли от него; и очень огорчил mod_cache у Lighttpd – я думал это полноценный модуль, а это ужасных хак. Этот хак не входит ни в одну стандартную постановку моего любимого FreeBSD, а ведь та простота, с которой можно организовать кеширование манит. mod_proxy_balancer доступен только от версии 1.5, а она ещё не признана стабильной, а возможностей у него куда больше, чем у mod_proxy.

Вообще, чти я скажу – ситуация в выборе ПО для Load Balancing на уровне HTTP отличная – выбор есть, нет ничего сложного в реализации, главное выбрать определённую платформу. В ближайшие месяцы я уже наверное смогу сказать, что выбрано и как себя ведёт.

Ещё, что касается Load Balancing – так пересмотрел в MySQL как работает Replication и даже дома собрал небольшую модель из одного мастера и 3 слейвов, посмотрел как всё запускается, как реплицируются данные, как ведёт себя сервер после падения на короткий срок и восстановления работоспособности.

Кстати, MySQL выпустил интересное начинание: MySQL Proxy. Если к версии 1.0.0 она была-бы стабильная, отлично поддерживала балансирование и кешинг, плюс возможность задать read-only и write-only сервера, да и документации сопровождающей много с примерами – получилась бы отличное решение для загруженных систем.

Ещё в исследование входило общее поднятие Performance у сайта.

За всё время ещё не мало перечитал дополнительной литературы (блоги, статьи, касты разные) по MySQL, оптимизации запросов, планировании индексов, их использовании, оптимизации запросов со стороны MySQL. В Google Reader было добавлено не мало ресурсов связанных как с оптимизацией MySQL, так и на темы Load Balancing. Так-же в этой теме очень сильно помогают разные тесты на средних и больших кол-вах данных. Не раз запускался ab – Apache HTTP server benchmarking tool, который позволял сравнить время работы разных запросов к тем-же данным с/без индексов и прочих мелких условиях.

Continue reading →

Первый более мение серьёзный WEB проект

Наверно сегодня именно тот день, когда стоит написать о том, какой был мой первый более мение серьёзный WEB проект, причём коммерческий и сделанный в команде. Вы не спрашивайте как и почему именно сегодня, мне просто хочется это сделать именно сейчас.

Тогда я только начинал свою карьеру WEB-программиста, работал в маленькой конторе с классным брендом "META Grupė". Бренд считался солидным, так как в нём было слово "Grupė" (в переводе с литовского: группа). У компании было 3 отдела – коммуникации (занимался продажами какой-то там телефонии), компьютерный (продажа, сервисное и послесервисное обслуживание компьютеров в офисах) и WEB (в котором собственно работал я). В команде нас тогда работала трое (говорят идеальное число) – Я, Vladimiras Lekečinskas (aka Xekc) и Rudolfas Cybulskas (aka Asperix). Xekc в этой шайке был главным (после руководства компании), Asperix был программистом, а я так, человек который делал всё остальное (тексты ввести, за блондинку по интерфейсам покликать, что-то где-то найти в интернете, прочая не квалифицированная работа). А ещё я был на третьем курсе программирования в VIKO (тогда правда он назывался VAEM).

Значит, все мои знания и желание творить подтолкнули меня к тому, что в начале я начал писать код. В начале HTML, простенький, не валидный но рабочий. Как сейчас помню – толстый талмуд с надписью HTML 4 который я листал по вечерам изучая этот язык разметки. Знакомился и с CSS, правда, всё знакомство было основано на копировании кусков чужих стилей для табличной вёрстки. За этим последовали первые куски кода на PHP 3 (да да, тогда в Литве было много серверов с поддержкой PHP 3). Первый "Hello World!", первое соединение с базой, потом первый снифер (вообще-то это был логер, записывавший IP, Бродилку, URL и время посещения), первая гостевая книга на My SQL (интересно, если бы сейчас её откопать, сколько XSS и SQL атак на ней можно было-бы провести?).

И меня заметили и первым моим заданием стал форум для сайта Lietuvos Sveikata. Это была уже полностью командная работа – ну как, 2 программиста. Никакого API, никакого опыта командной работы, никакого CVS/SVN. Знали только одно – общую структуру таблицы пользователей и несколько переменных в сессии, от которых зависело залоглен ли пользователь. Естественно, когда написали код, без API, пришлось ещё пару дней это всё соединять. И оно заработало. Ошибки потом ещё долго отлавливали.

Паралелно я где-то увидел (или мне показали) первые XSS атаки. Это был <script>alert(‘You a hacked!’);</script> – оно вроде тогда ещё то и названия XSS не имело. Тогда весь ввод мы позакрывали при помощи PHP функции strip_tags. Я не знаю, хорошо ли она работала на тот момент, но, нам казалось что всё в порядке.

На этом рассказ о моём первом серьёзном WEB проекте можно закончить. Проект проработал потом долго без моих каких-либо изменений в коде. Я даже (если не изменяет память) ушёл работать в другую компанию, а он работал.

Вот так, примерно, я стал WEB программистом. С тех пор я не сильно хотел менять что либо в своей профессиональной жизни. Я по прежнему пишу код на PHP, слежу за тем, что в нём нового и какие курьёзы бывают.