Джино: хостинг и веб-сервисы

Система Orphus
Russian version
Добавить на Del.icio.us
English version
Добавить на Digg.com

 dkLab | Новости | Архив 

Карта сайта :: Форум «Лаборатории» :: Проект «Денвер»
Проект «Orphus» :: Куроводство: наблы :: Конструктор


Вы можете также подписаться на RSS этих новостей.

17.04.2014. PHP-расширение dom_varimport: преобразования вложенных массивов в DOMDocument.

Представьте, что у нас есть контроллер, генерирующий некоторый вложенный PHP-список объектов для отображения на странице. Он должен этот массив преобразовать в XML, который потом пойдет на вход XSLT-шаблону. Хорошо бы, чтобы данное преобразование из структур PHP в XML выполнялось не вручную в каждом контроллере, а был некоторый промежуточный слой абстракции, который умеет применять XSLT-шаблон прямо к PHP-данным, минуя текстовое XML-представление. Так мы уменьшим вероятность ошибок, да и письмо сократится. Мы сможем работать с XSLT-шаблонами напрямую, минуя XML-представление данных.

Некоторое время назад я написал на Си PHP-расширение dom_varimport. Оно содержит одноименную функцию, на вход которой подается объект DOMDocument и PHP-массив любой вложенности. Функция заполняет переданный ей DOMDocument XML-представлением входного массива, и делает она это очень быстро — примерно в 20 раз быстрее, чем делал бы код, написанный на чистом PHP. Большой документ размером около 1 МБ с тысячами вложенных свойств и объектов формируется примерно за 1-2 миллисекунды.

Читать дальше...



10.04.2014. Утилита CacheLRUd: добавляет функцию LRU-очистки данных (как в memcached) в MongoDB.

Иногда (не всегда, но достаточно часто) бывает довольно удобно использовать какую-то базу данных (например, MongoDB) место старого-доброго memcached. Возможно, это ваш случай, если ваш кэш:

  • имеет не очень большой объем (не более нескольких сотен гигабайт в каждом кластере репликации);
  • содержит очень много "долгоживущих" ключей (время жизни измеряется днями);
  • вы существенно используете тэгирование ключей, и надежность процесса централизованной очистки тэгов для вас очень важна;
  • кэш должен реплицироваться на несколько машин, в том числе в разных датацентрах;
  • кэш, возможно, использует sharding (как раз с sharding у MongoDB все просто великолепно).

Если часть из этих пунктов находит отклик в вашей душе, то имеет рассмотреть MongoDB (или другую NoSQL-СУБД) в качестве системы хранения кэша. Однако, например, MongoDB не умеет сама сортировать ключи по редкости использования и удалять те их них, которые читаются реже всего (так называемый алгоритм LRU, Least Recently Used). Так что размер БД будет расти и расти.

Демон CacheLRUd как раз и решает эту проблему: он следит за размером БД, удаляя из нее только наиболее редко читаемые ключи и не трогая "популярные", и при этом не имеет единой точки отказа, как и весь кластер MongoDB. Для сбора информации об использовании ключей используется асинхронный протокол, основанный на UDP.

Читать дальше и скачать утилиту.



15.01.2014. Библиотека DB_Micro: работа с РСУБД (PostgreSQL) с автоматическим отслеживанием запаздывания репликации.

DB_Micro

-- это слой абстракции для работы с реляционными СУБД (в настоящий момент в комплект входит драйвер для PostgreSQL, но могут быть добавлены и другие). Главные отличительные черты библиотеки -- прозрачная поддержка асинхронной master-slave репликации (статус запаздывания реплики привязывается к сессии пользователя), поддержка реконнектов и отслеживание "живучести" реплик, а также поддержка детальных логов запросов.

Why yet another library for that? Because there are no good DB libraries which could seamlessly work with master-slave replication. Even stand-alone solutions (like pgpool-II for PostgreSQL) have insufficient slave lag detection mechanisms. Can you believe that? I couldn't too, but after hours of searching I've found nothing good enough for working in asynchronous replication environment transparently.

Читать дальше и скачать библиотеку...



Завалялась у меня тут инструкция, как включить LVM для корневой файловой системы на двух популярных dedicated-хостингах: Hetzner и ServerLoft. Публикую ее здесь.

Ни Hetzner, ни ServerLoft не позволяют включить LVM при первичном создании машины "при помощи одной лишь мышки". Вместо этого они дают возможность установить один из фиксированных образов ОС, максимум что - с включенным RAID-1. Ниже - две инструкции, как переключить такую "налитую" машину на использование LVM для корневой файловой системы, а потом - короткий пример того, как работать со снапшотами. Работать будем с Ubuntu Server 12.04 minimal (для других ОС конфигурация может отличаться).

Читать дальше...



29.03.2013. Утилита GoogleHangoutRenice: уменьшение "тормозов" при работе Google Hangout.

Если при запуске Google Hangout ваш компьютер начинает безбожно тормозить, попробуйте запустить эту утилиту. Она остается работать в фоновом режиме и, как только запускаются процессы Google Hangout, устанавливает им низкий приоритет выполнения и привязывает только к первому процессору, запрещая выполняться на остальных.

Самое интересное, что самому Google Hangout-у это никак не вредит, а вот общая "отзывчивость" системы возрастает многократно. Зачем разработчики Google Hangout устанавливают его процессу повышенный приоритет по умолчанию?.. Это остается загадкой.

Скачать GoogleHangoutRenice.



Я долго ждал, когда же наконец появится какой-нибудь более-менее сносный скрипт для мониторинга /proc/user_beancounters и отправки на почту изменений в failcnt. Не дождался. Почему-то все, что есть за последние 2 года, - это либо скрипты на Ruby (типа Yabeda; ну скажите мне на милость, откуда на хост-машине с OpenVZ взяться интерпретатору ruby, да еще последней версии?), либо же perl-скрипты с кучей совершенно ненужных зависимостей от модулей.

В общем, я написал такую утилиту сам и выложил. Она простая, удобная, шлет красиво оформленные письма и не имеет зависимостей.

Подробнее...



Речь пойдет о бесплатном микросервисе "Notifus", который я вначале делал для собственного пользования, а затем выложил наружу. Notifus — это браузерное расширение, добавляющее новый функционал к GMail. Его главная цель — освободить нашу голову от беспокойства: ответят на письмо или нет? Расширение помогает вам "вспоминать" о письмах, на которые вы так и не получили ответа, перенося их обратно во Входящие и помечая непрочитанными.



Сегодня произошел один случай, с которым лично мне раньше не приходилось сталкиваться. Возможно, данная выжимка команд сэкономит кому-то время на поиски информации в интернете и последующее объединение советов из разных источников в набор команд.

Читать статью.


Начал спонтанно перезагружаться роутер. Причем если выключить винчестер или вначале остудить пациента, то симптомы прекращались (но без винчестера он и не работает у меня). Я начал подыскивать в интернете другой роутер, но понял, что а) обязательно нужен роутер с винчестером, чтобы делать на него автоматические ежедневные бэкапы, и б) по сути с 2006 года ничего лучше, чем WL-700GE, так и не придумали.

Поэтому я вооружился паяльником и... читать дальше.



22.10.2011. Утилита dkLab RealSync: realtime-синхронизатор исходников с локальной машины на разработческий web-сервер.

RealSync allows you to establish one-way directory synchronization from your folder at the local machine (typically with site's source code) to remote directory at a server (typically - development web-server).

When you create, change or delete any file at your local folder, it will automatically be created, modified or deleted at the remote side, in realtime.

Why use RealSync?

Today there are no network filesystems exist which perform good caching on a slow or unstable internet connection. If you mount a remote directory from a development web server into yor local machine using Samba, NFS, sshfs etc., it becomes extremely slow when you perform e.g. a full project searching or update files using SVN or GIT directly at your local machine.

RealSync allows you do use other method. You create a folder at your local machine and then say RealSync to replicate all changes in this folder to a remote web server. So you work at your local machine, you modify files as you like (using multiple text editors if you want to), perform deep searhes through all the files etc. And you sure that the latest version of the directory is always at the remote side.

So you edit your site locally, but view changes at the remote web server.

Читать документацию, инструкцию по установке и т.д.



07.08.2011. Библиотека DB_Type 2.0: преобразование сложных типов PostgreSQL (ARRAY, ROW, HSTORE) в PHP и обратно.

Вышла новая версия библиотеки (2.0), несовместимая со старой версией DB_Pgsql_Type. Главным образом, переименовались классы (было - DB_Pgsql_Type_*, стало - DB_Type_* и DB_Type_Pgsql_*), добавились юнит-тесты, а также были исправлены незначительные баги.

Рекомендуем всем, кто пользуется, обновиться. В папке utils лежит скрипт MIGRATE_100_TO_200.pl, который переименует старые классы в новые, если запустить его для вашего проекта.

Читать описание и скачать библиотеку.



29.06.2011. Утилита dklab_logreplica: сбор логов со всего кластера в единую точку в реальном времени.

Этот простой, но очень удобный и мощный инструмент позволяет "вытягивать" (реплицировать) логи со всего кластера на централизованный сервер логов, причем в реальном времени. В дальнейшем логи могут быть использованы для просмотра, аггрегации или анализа.

Читать подробности и скачать утилиту.



11.04.2011. Утилита dklab_pgmigrator: миграции схемы PostgreSQL с сервера разработки в продакшен.

This tool allows you to keep in sync a production database scheme with a develpoment database scheme. Any changes you made in development database may be deployed to production database in almost automatical way, and you take control over the whole process.

Нужно еще заметить, что ничего подобного не только для PostgreSQL, но и для других СУБД, я не видел. Правда, конфигурировать может быть сложновато (есть еще моменты, которые можно упростить в этой утилите), но все равно, проблему миграции схемы в сложных базах данных эта штука снимает полностью.

Читать дальше...



13.11.2010. Библиотека dklab_vzset: интерактивное увеличение UBC-лимита для OpenVZ.

Vzset is a very tiny utility which allows you to view current UBC option value of OpenVZ container and type+apply a new value to this option. This is useful when you receive a "limit exceeded" notification by mail (e.g. over Yabeda or vzwatchd) and want to increase an option fast.

Читать дальше...



05.11.2010. Библиотека dklab_vzmem: визуальное непротиворечивое распределение памяти для OpenVZ.

Vzmem is a pseudo-graphical tool which allows you to distribute physical memory among all VEs consistently. It shows all physical memory blocks graphically in /etc/vz/conf/MEM-MAP text file and lets you to move these blocks from one VE to another to redistribute the memory. Also you may specify "additional" memory personally for each VE: such memory will be obtained from system's free memory or swap (it is reflected as modifying of privvmpages parameter).

Читать дальше...



01.11.2010. Библиотека dklab_rowlog: row-level логирование изменений в таблицах PostgreSQL.

This library allows you to add a row logging capability to any table in PostgreSQL database. You may:

  • Add row-log capability to any table in 1 minute, with 1 DDL statement.
  • Specify which columns to log and monitor; do not log a row change if no monitored columns are modified.
  • Specify dedicated column which holds an author of row change.
  • Specify columns which are always logged, even if they are unchanged.

Читать дальше...



Эта библиотека позволяет перехватывать ошибки PHP (самое главное - включая фатальные!) вместе с красиво оформленным контекстом их возникновения (имя файла, строка, стек-трейс, переменные окружения, параметры HTTP-запроса и т.д.) и выполнять те или иные действия с этой информацией. На ошибки можно повесить функции обратного вызова (даже на Fatal Error).

Наиболее полезное применение библиотеки - отправлять нотисы, варнинги и даже фатальные ошибки PHP на адрес электронной почты разработчика. Естественно, эта отправка - "умная": если эта же самая ошибка уже происходила за последние N секунд, она не будет повторно отправлена на почту. Таким образом, ящик не зафлудится, а почтовый сервер и sendmail - не подвесит всю систему, если ваш сайт весьма популярен, но вдруг на продакшен "проскочил" какой-нибудь нотис, возникающий на каждой странице.

Узнать подробности и посмотреть примеры.



Хотя для этой библиотеки и нет подробной документации, она используется в нескольких продакшен-проектах достаточно долгое время, поэтому вы также можете ее использовать. Ниже приводится содержимое файла README.txt.

This library is used to load static image content from anywhere (e.g. from a database, from remote storage etc.), resize it and return to browser. Fetching and resizing is performed "on demand": images are resized when a request arrives, but resized result is stored to nginx (or similar) cache, so there is no performance bottleneck.

Читать дальше и скачать библиотеку.



16.03.2010. Утилита dklab vzfirewall: простое управление firewall-ом в OpenVZ.

Dklab vzfirewall — это утилита для OpenVZ, позволяющая конфигурировать firewall без утомительного ввода iptables-правил и без "завязки" на множество IP-адресов виртуальных машин. Главный принцип утилиты — быть настолько простой в использовании, насколько это возможно.

Читать дальше и скачать утилиту.



27.02.2010. Сервер Realplexor теперь работает с EV, а не libevent.

Библиотека libevent для Perl, как оказалось, имеет не самую лучшую производительность. К тому же в ней есть утечки памяти. Теперь Realplexor работает на более производительной библиотеке EV: в ней утечек памяти нет.



Dklab Realplexor — это Comet-сервер, позволяющий держать одновремено сотни тысяч долгоживущих открытых HTTP-соединений с браузерами пользователей. JavaScript-код, запущенный в браузере, подписывается на один или несколько каналов Realplexor-а и вешает обработчик на поступление данных. Сервер может в любой момент записать сообщение в один из таких каналов, и оно будет моментально передано всем подписчикам (хоть одному, хоть тысяче), в режиме реального времени и с минимальной нагрузкой для сервера.

Хотя идейным вдохновителем Realplexor-а был предыдущий проект, dklab_multiplexor, код Realplexor-а не имеет с ним практически ничего общего. Поэтому я и решил сменить название. Несопоставимы также возможности продуктов (см. ниже), да и размер кода увеличился в 7 раз.

Читать документацию.



Как известно, при работе с фреймами для обеспечения безопасности браузеры не позволяют JavaScript-коду обращаться со страницы одного домена на страницу другого домена. В этой статье мы рассмотрим аспекты кросс-доменной работы в JavaScript и опишем один из «хороших» частных случаев.

Но вначале я приведу решение задачи автоматического изменения высоты IFRAME, загружаемого с другого домена. (Resize height of an IFRAME from a different domain.)

Читать дальше и смотреть примеры.



18.12.2009. Библиотека HTTP_UrlSigner: безопасная передача параметров в URL и его цифровое подписывание.

HTTP_UrlSigner позволяет динамически строить URL, защищенный от подделки злоумышленниками. Имея такой URL, вы можете убедиться, что он составлен именно вашей системой, а не кем-то еще, и извлечь из него ранее записанные параметры, не опасаясь, что их могут подменить.

Читать дальше и смотреть примеры.



OAuth — популярный протокол, который позволяет социальным сервисам интегрироваться между собой и дает безопасный способ обмена персональной информацией. OAuth может связать между собой 2 сервиса, каждый из которых имеет свою пользовательскую базу — именно их я в данном случае называю "социальными". Когда начинаешь работать с OAuth, первое ощущение — что протокол весьма сложен и избыточен. В этой статье я попытаюсь объяснить основы OAuth человеческим языком.

Читать дальше...



В web-сервер и reverse-proxy nginx встроены очень мощные возможности по кэшированию HTTP-ответов. Однако в ряде случаев документации и примеров не хватает, в результате не все получается так легко и просто, как хотелось бы. Этой статьей я попробую немного улучшить ситуацию.

Если выбирать, кэшировать ли страницу на стороне PHP или на стороне nginx, я выбираю nginx. Во-первых, это позволяет отдавать 5-10 тыс. запросов в секунду без каких-либо сложностей и без умных разговоров о "высокой нагрузке". Во-вторых, nginx самостоятельно следит за размером кэша и чистит его как при устаревании, так и при вытеснении нечасто используемых данных.

Многие строки этой статьи написаны буквально кровью... Продолжить чтение.



12.09.2009. Сервер dklab_multiplexor: постоянное JavaScript-соединение с сервером в условиях сотен тысяч онлайн-клиентов.

Dklab_multiplexor — это инструмент, который позволяет держать одновременно сотни тысяч долгоживущих открытых HTTP-соединений с сервером. Например, если на вашем сайте находится одновременно несколько сот тысяч посетителей, каждый из них может быть связан с сервером постоянным соединением, установленным из JavaScript. Это например, полезно при организации онлайн-чатов или мгновенных уведомлений.

Читать дальше...



dklab_vzenter — это простейшая утилита для системных администраторов, позволяющая вам входить в тот или иной контейнер OpenVZ (vzctl enter), указав минимальную непротиворечивую часть его доменного имени. Теперь нет необходимости запоминать CTID или постоянно набирать команду vzlist.

Посмотреть примеры использования и скачать утилиту.



8 июня 1995 года, 14 лет назад, Расмус Лердорф выпустил первый публичный релиз технологии PHP/FI 2.0. И хотя современный PHP имеет весьма мало общего со старым PHP/FI, он по прежнему завоевывает популярность у программистов теми же самыми маркетинговыми средствами.

Возникает вопрос: как же г-н Лердорф и компания сумели затмить величие Perl (имеющего к тому времени многолетнюю историю и множество поклонников) и вывести PHP/FI (а затем и PHP) на лидирующие позиции? Для этого они сделали три очень точных шага, а также выбрали оптимальное позиционирование продукта. Об этом — речь ниже.

Читать дальше...



Вышла версия 2.0 библиотеки HTTP_StaticMerger. Теперь поддерживается цифровое подписывание URL склеенных файлов, а в случае несовпадения цифровой подписи выдается ошибка 404. Это особенно удобно, когда библиотека используется в связке с nginx и директивой proxy_store: теперь злоумышленник даже теоретически не сможет "зафлудить" временную директорию кэш-файлами.

Читать документацию и скачать библиотеку.



28.06.2009. Утилита plainmerge для скоростного слияния веток в Subversion.

Plainmerge — это простая и быстрая утилита для Subversion (Windows), позволяющая вам авторитарно сливать ветки в проектах с очень большим числом файлов. Ее удобно применять, если в вашем проекте есть 2 основные ветки:

  1. trunk: ветка для ведения разработки.
  2. RELEASE: ветка, которая работает на продакшен-версии проекта. При выполнении полного релиза в эту ветку копируется все содержимое trunk. Если же нужно "прокинуть" критический багфикс, он переносится в нее в индивидуальном порядке.

Читать дальше.



03.04.2009. Библиотека DB_Pgsql_Type для преобразования сложных типов данных PostgreSQL в PHP-массивы и обратно.

DB_Pgsql_Type — это фреймворк для преобразования сложных типов PostgreSQL 8.3+ в их аналоги на PHP и обратно. С ее помощью вы можете работать с полями сложного типа (к примеру, двумерным массивом композитных типов) так же просто, как с привычными массивами PHP.

Поддерживаются следующие типы данных и любые их вложенные комбинации:

  • Массивы элементов произвольного типа (в том числе многомерные).
  • Композитные типы и ROWTYPE (в частности, сами содержащие композитные поля или поля-массивы).
  • Hstore (в том числе содержащие сложные элементы).
  • Прочие типы: TIMESTAMP (преобразуется в Unix time), DATE, TIME, BOOLEAN и т. д.

Читать дальше...



28.02.2009. Библиотека Dklab_ShortXSLT: упрощенный синтаксис для XSLT с операторами вставки, if, else и т.д.

Библиотека Dklab_ShortXSLT -- это система для поддержки упрощенного синтаксиса XSLT, написанная на чистом PHP. Фактически это компилятор с диалекта XSLT в стандартный XSLT, запускаемый "на лету" и "прозрачно" для вызывающего кода. Там, где вы используете XSLT в PHP-скриптах, вы можете подключить Dklab_ShortXSLT, написав несколько дополнительных строчек кода.

Стандартный синтаксис XSLT весьма громоздок, что оказывается неудобным при его использовании в Web-программировании. Библиотека позволяет облегчить эту проблему.

Читать дальше...



Если не применить одну хитрость, реализовывая обработку очереди по статье PostgreSQL и задача параллельной многопроцессной обработки очереди, то можно столкнуться с серьезным багом. Теперь он подробно описан в статье.

Перейти к разделу с решением проблемы.



04.02.2009. Библиотека Dklab_SoapClient: параллельные запросы, реконнект, обработка тайм-аутов.

Dklab_SoapClient — это расширенная версия стандартного PHP-класса SoapClient, предназначенная для параллельного удаленного вызова процедур в высоконагруженных проектах.

По сравнению со встроенным в PHP SoapClient, поддерживаются дополнительные возможности:

  • Одновременное выполнение запросов к нескольким удаленным процедурам — ключевая особенность библиотеки. Если страница на вашем сайте собирается из 5 удаленных блоков, каждый из которых генерируется по 100ms, их можно запустить параллельно и получить всю страницу целиком не за 500ms, а за те же самые 100ms.
  • Читать дальше...


Удача, победа, правильный выбор, верная стратегия — все это почти синонимы, но с разной окраской. И вот то, что я хочу сказать: "удача" автоматически возникает там, где количество вариантов выбора стабильно велико день ото дня. В этом отношении удача — всего лишь иллюзия.

Читать дальше...



21.01.2009. Библиотека PHP_Exceptionizer: преобразование E_NOTICE в исключения (Exception).

Простая, но весьма полезная библиотека PHP_Exceptionizer позволяет преобразовывать нотисы (E_NOTICE), предупреждения (E_WARNING) и т. д. в исключения PHP.

Читать дальше.



Иногда встречается ситуация, которую можно обобщить фразой "задача параллельной обработки очереди". В данной статье я кратко расскажу, почему для эффективного решения этой задачи удобнее всего использовать PostgreSQL, а не какую-либо другую СУБД (типа MySQL или FireBird).

Читать дальше...



23.11.2008. Библиотека HTTP_StaticMerger: автоматическая "склейка" CSS- и JS-файлов для быстрой загрузки.

Библиотека HTTP_StaticMerger позволяет автоматически "сливать" набор статических файлов (CSS и JS) и, таким образом, ускорять загрузку страницы, экономя HTTP-запросы. Библиотеку рекомендуется применять совместно с кэширующим reverse proxy для минимизации времени ответа. Возможности:

  • Обработка директив @import и удаление комментариев из кода, что экономит трафик.
  • "Слитый" URL зависит от времени модификации входящих в него файлов.
  • Поддержка заголовков HTTP If-Modified-Since, If-None-Match, Etag.
  • Работа под очень высокой нагрузкой (при использовании reverse-proxy сервера с модулем кэширования, например, nginx).

Читать дальше.



07.11.2008. Unit-test фреймворк PGUnit получил существенные улучшения.

2008-11-07
  - Great speed-up while running a bunch of test with a single setUp block.
    In this case setUp is executed ONLY ONCE, and the effect of its 
    execution is stored in a savepoint which is used for all 
    individually-rollbacked tests. (All tests are still running 
    independently and are not intersected with each other.)
  - Time measurnment of each test execution (thanks to Garrynja).
  - Supress NOTICEs generated by a setUp or test code to keep the 
    execution log clean.


04.11.2008. PGUnit: unit-test фреймворк для хранимых процедур PostgreSQL 8.3.

PGUnit работает точно так же, как и любые xUnit-фреймворки (например, PHPUnit). Так что, научившись работать с тем же PHPUnit, вы легко поймете и принципы PGUnit.

"А как же pgTAP? Зачем еще один тестовый фреймворк?" - спросите вы. Дело в том, что pgTAP для нас оказался недостаточно прозрачным. Например, он не заботится на внутреннем уровне об откате тестовых транзакций и не поддерживает блок setUp, разделяемый несколькими unit-тестами (как это принято в xUnit). Он заставляет разработчика БД использовать утилиту psql и SQL-файлы (если разработчик предпочитает GUI-клиент, а не psql, это составляет некоторую проблему). Также pgTAP не умеет сканировать БД в поисках тестовых процедур. Но обратите внимание, что в настоящий момент pgTAP имеет гораздо больше проверочных функций, чем PGUnit. Возможно, вам следует использовать pgTAP, а не PGUnit - изучите его тоже.

Перейти на страницу библиотеки



В далеком 2002 году, когда в ходу были еще модемы, на замечательном форуме XPoint я опубликовал заметку, которую и хочу сейчас здесь перепечатать. Как выяснилось, она ничуть не потеряла своей актуальности за это время.

Читать статью.



19.08.2008. Multi-get оптимизация прозводительности в Dklab_Cache (бета-версия).

Выложена пока еще неофициальная версия Dklab_Cache с оптимизацией числа запросов на чтение из memcached. Теперь число запросов на чтение не зависит от количества тэгов, которым помечен некоторый ключ, и в худшем случае равно двум.

Хотя новая версия полностью совместима со старой и покрыта тестами, требуется тестирование энтузиастами. Подробности в форуме.



Хорошо известно, что конструкции ALTER TYPE для удобного типа ENUM PostgreSQL 8.3 не существует (по крайней мере, в версии 8.3.3). Таким образом, вы можете написать:

CREATE TYPE my_enum AS ENUM('first', 'second');

но после этого — не имеете возможности добавить новый элемент в данный ENUM, если на тип ссылается некоторая таблица. И даже если на какой-то элемент my_enum нет внешних ссылок, вы все равно не можете его удалить стандартными средствами.

К счастью, решение существует, и вы можете им воспользоваться.

Читать дальше





Предыдущая набла вызвала некоторые дебаты в форуме, часть которых я решил теперь выделить в отдельную статью. Надеюсь, это будет полезно тем, кто занимается высоконагруженными проектами.

Читать дальше...



20.05.2008. dkLab PostgreSQL patch: быстрые функции на C для работы с огромными массивами.

dkLab PostgreSQL patch — это небольшой набор патчей для PostgreSQL 8.3, а именно, для расширений ("контрибов") intarray и intagg. Он добавляет 3 написанные на C (а потому быстрые) функции для работы с очень большими наборами предварительно отсортированных массивов.

Читать дальше...



Большинство традиционных языков Web-программирования (Perl, Ruby, Python и т. д.) поддерживают написание скриптов, работающих в так называемом "FastCGI-режиме". Более того, Ruby on Rails, к примеру, вообще невозможно использовать в CGI-режиме, т.к. он тратит на подключение всех своих многочисленных библиотек десятки секунд.

Ниже я расскажу о методе, который позволяет в ряде случаев ускорить загрузку объемного PHP-кода более чем в 20 раз, не получая при этом побочных эффектов и значительных неудобств. Но вначале давайте поговорим об основах...

Вероятно, вы слышали, что PHP тоже можно запускать в режиме FastCGI, и что так делают многие нагруженные проекты (Мамба, некоторые проекты Mail.Ru и т. д.). Это якобы дает "существенный прирост" производительности, потому что FastCGI экономит время инициализации скрипта и подключения библиотек.

Не верьте! В действительности поддержка FastCGI в PHP имеет чисто номинальный характер. Точнее, она не дает преимуществ в том смысле, в котором ей привыкли оперировать для уменьшения времени инициализации скрипта.

Читать дальше.



В высоконагруженных системах данные добавляются в таблицы по нескольку (сотен) раз в секунду. Поэтому логика отслеживания зависимостей и проверки, какие ячейки кэша нужно очищать, а какие — нет, становится крайне сложной (а то и вовсе нереализуемой). Тэгирование предоставляет решение этой проблемы. Каждый раз, когда данные записываютя в некоторую ячейку кэша, мы помечаем их тэгами — пометками, представляющими зависимости этих данных от других частей системы. Тэги как бы позволяют объединять ячейки в множественные пересекающиеся группы. В дальнейшем мы можем дать команду "очистить все ячейки, помеченные определенным тэгом". Читать дальше.

Что это за зависимости в коде при работе с кэшем? В типичном случае нам приходится несколько раз ссылаться за ключ кэширования, чтобы эффективно работать с данными. Особенно это актуально, если мы напрямую используем backend-классы кэширования. Каркас Dklab_Cache_Frontend позволяет решить проблему лишних зависимостей, упростить код системы и сделать его более строгим. Каждый тип кэширования должен быть представлен в виде отдельного Slot-класса, а данные, на основе которых генерируется ключ кэширования, передаются в его конструкторе. Слоты, помимо прочего, поддерживают тэгирование. Читать дальше.



23.04.2008. Библиотека Dklab_Cache в Конструкторе: тэги в memcached, framework для кэширования.

Dklab_Cache — это (в основном) библиотека поддержки тэгирования ключей для memcached, использующая интерфейсы Zend Framework. Вот полный список возможностей библиотеки:

  • Backend_TagEmuWrapper: тэги для memcached и любых других backend-систем кэширования Zend Framework;
  • Backend_NamespaceWrapper: поддержка пространств имен для memcached и др.;
  • Backend_Profiler: подсчет статистики по использованию memcached и др. backend-ов;
  • Backend_MemcachedTag: поддержка еще весьма "сырого" патча memcached-tag;
  • Frontend_Slot, Frontent_Tag: каркас для высокоуровневого построения систем кэшиирования в сложных проектах.


В данной статье я попытался описать опыт последних нескольких лет работы над сложной и высоконагруженной системой, к которой предъявляются повышенные требования к "чистоте" и качеству данных. При этом сами данные пополняются не столько администраторами системы, сколько ее пользователями, что входит в серьезное противоречие с требованием "чистоты". Ведь известно, что основная масса пользователей склонна вводить всякий "мусор" в поля, где предполагается наличие качественных данных.

Статья, вероятно, получилась нескольпо абстрактной и наукообразной. Тем не менее, я уверен, что, взяв за основу изложенные в ней идеи, каждый сможет реализовать в своей системе качественную и универсальную работу с "чистыми" справочниками, пополняемыми "некачественными" пользователями.

Читать дальше.



Денвер-3 вышел из стадии альфа- и бета-тестирования. Также обновился сайт Денвера. Всем пользователям рекомендуется обновить Денвер на новую версию. Нововведения и отличия от Денвера-2:

  • Совместимость с Windows Vista.
  • Теперь в базовом пакете новые версии apache2, mod_php5 и mysql5.
  • Полноценная поддержка SSL для всех виртуальных хостов.
  • Полноценный Perl 5.8 идет в полноценном пакете расширения (урезанная версия больше не мешается в базовом пакете).
  • Увы, размер Денвера вырос: apache2, php5, mysql5 требуют больше места.
  • Пакет расширения Parser обновлен до последней версии.


Принято ошибочно считать, что фатальные ошибки в PHP (те, что отображаются как Fatal Error) невозможно перехватить и обработать программно. На самом деле, это не так.

Читать статью.



Orphus - система, суммирующая некоторую часть естественного интеллекта посетителей сайта в целях обнаружения орфографических (и других) ошибок на нем. Система крайне проста: любой посетитель сайта, где она установлена, имеет возможность выделить "не понравившийся" ему кусочек текста мышкой и нажать Ctrl+Enter. После этого выделенный фрагмент (вместе с окружающим текстом и другой полезной информацией) немедленно отсылается вебмастеру сайта (например, на почту), а для пользователя это выглядит совершенно прозрачно - ему больше ничего не надо делать.

Сегодня открылся Web-интерфейс, позволяющий вебмастеру обрабатывать ошибки без помощи почтового клиента. В настоящий момент реализованы только самые базовые возможности (многоязычность, группировка ошибок по посетителям, AJAX-обработка сообщений и т.д.), однако даже это уже гораздо удобнее, чем использование почты.

В дальнейшем планируется серьезное развитие системы в сторону эвристических методов приоритезации опечаток.



31.03.2007. Система dkLab Apache: запуск виртуальных хостов под владельцами аккаунтов.

dkLab Apache - это дистрибутив для тех, кто собирается использовать Apache в Unix для обслуживания нескольких полностью независимых друг от друга сайтов, работающих под разными, полностью разграниченными друг от друга пользователями Unix.

По сути это Apache 1.3.34, на который наложены некоторые "самодельные" патчи. Вот функциональность, которую они добавляют:

  • Запуск различных виртуальных хостов под различными Unix-пользователями. Это работает даже для mod_php. То, под каким пользователем работает виртуальный хост, задается в его стандартных директивах User и Group.
  • Возможность создавать виртуальные хосты по шаблону: ABC.example.com -> /home/example/ABC. Вы можете ссылаться в директиве DocumentRoot на нужную часть доменного имени, например, так: C (в данном примере это будет C).
  • Модуль mod_rewrite защищен от любого рода "зацикливаний". Неосторожно или злонамеренно написанные директивы в .htaccess не могут "подвесить" весь сервер.
Прочитать статью и скачать дистрибутив.


12.03.2007. Вышла новая версия JsHttpRequest 5.0: еще лучшая кроссбраузерность!

Главные нововведения по сравнению с версией 4.x:

  • Код frontend-части практически полностью переписан. Теперь он модульный: можно самостоятельно отключать ненужные загрузчики.
  • Еще большая кроссбраузерность (в частности, решена проблема с падениями в IE 5.0).
  • Автоматический framework для тестирования библиотеки в различных браузерах (JsTest).
  • Дополнительные отладочные возможности (например, централизованное хранение всех текстов ошибок).
  • В backend-части используется встроенная в PHP5 функцию json_encode() (если она недоступна, то работает старый способ, который в 3 раза медленнее).
  • Юрий Насретдинов написал сокращенную версию статьи о библиотеке, адаптированную "для буржуев".
  • Появилась полная спецификация протокола обмена данными между backend и frontend (на английском языке).
  • Код библиотеки оптимизирован по размеру при помощи утилит из Dojo Toolkit (соответственно, размер библиотеки уменьшился).


16.01.2007. Age of Web + Dk Lab = Rise and shine!

Лаборатория dk и агентства «Эпоха» договорились о совместной поддержке и развитии популярного сайта «Эпоха Веба» (http://ageofweb.ru), который некоторое время назад находился в кризисном техническом состоянии (возможно, в связи с затяжными праздниками) и даже чуть было не закрылся. Будем надеяться, это продолжит славное шествие данного ресурса по просторам Рунета. Заходите в гости!



Теперь вы можете скачивать все примеры и библиотеки, а также отслеживать изменения в исходных кодах при помощи Subversion:

  • воспользовавшись интерфейсом WebSVN: http://dklab.ru/wsvn/lib/
  • используя анонимный доступом к SVN: svn://dklab.ru/lib


10.12.2006. Вышла версия 2 библиотеки DbSimple (поддержка MySQL, PostgreSQL, FireBird).

Библиотека DbSimple является удобным инструментом для тех, кто пишет скрипты с использованием большого разнообразия сложных SQL-запросов. Ее основная черта — простота и лаконичность повседневного применения. А вот и другие два плюса библиотеки: расширенная поддержка placeholder-ов и условные макроблоки (появились в версии 2).

В настояший момент поддерживаются: MySQL, PostgreSQL, FireBird.

Читать статью и документацию.



JsHttpRequest (лицензия LGPL) реализует загрузку данных методом AJAX (Remote Scripting). Вот краткий перечень ее ключевых возможностей и отличий от аналогов:

  • Кроссбраузерность. Библиотека работает в IE5.0+, Mozilla 1.7+, FireFox 1.0+ и Opera 7.3+, Safari (здесь "+" означает "в этой и более новых версиях"). Кроме того, код может работать без поддержки ActiveX и XMLHttpRequest (однако, если эти возможности включены в браузер, они автоматически задействуются).
  • Закачка файлов (upload) из браузера на сервер без перезагрузки страницы.
  • Полная поддержка отладочных возможностей PHP. Если в скрипте на серверной стороне происходит ошибка (включая фатальную, например, вызов неопределенной функции), клиентская часть имеет возможность корректно ее обработать и вывести диагностику. Помимо данных ответа, ей передается выходной поток скрипта, содержащий текст ошибки PHP.
  • Передача многомерных структур (аналог JSON) в данных запроса и ответа сервера. При этом используются стандартные средства PHP — многомерные массивы (данные запроса можно получить из C<\$_REQUEST>, данные ответа записываются в C<\$_RESULT>), а также стандартные средства JavaScript — вложенные объекты и свойства. Никакого XML на уровне API: работа происходит "родными" средствами языков.
  • Поддержка сессий PHP стандартными средствами.
  • Выбор оптимального метода загрузки данных (XMLHttpRequest, Microsoft.XMLHTTP, <SCRIPT>, <IFRAME>) в зависимости от браузера. В частности, возможность загружать данные с других хостов.
  • Интерфейс, совместимый с XMLHttpRequest.

Читать статью JsHttpRequest: динамическая подкачка данных с поддержкой upload-а (AJAX). Благодаря Юрию Насретдинову доступен также английский перевод статьи: JsHttpRequest: dynamic data loading and file upload support (AJAX).



После почти полутора лет разработки концепции, около десятка переработок и шлифовок мне наконец-то удалось устранить все идеологические сложности и выпустить финальный релиз библиотеки HTML_MetaForm. Пользуйтесь!

Библиотека HTML_MetaForm, а также сопутствующая библиотека HTML_MetaFormAction позволяют свести различия между Web- и GUI-формами к минимуму, не изменяя при этом традиционную структуру Web-скриптов. Вот полный список возможностей комплекса:

  • Автоматическое извлечение полной информации о структуре формы (метаданные) прямо из HTML-потока с последующей передачей ее обработчику формы.
  • Цифровое подписывание формы: обработчик может быть уверен, что полученные метаданные достоверны, а не подделана злоумышленником. Обеспечение соответствий: обработчика атрибуту C формы, выбранного значения элементу выпадающего списка, допустимости теста скрытого поля.
  • Сохранение сведений о структуре (тексты и значения) выпадающих списков, radio-кнопок и checkbox-ов.
  • Передача в обработчик различных мета-атрибутов, задаваемых прямо в HTML-коде формы (например, сведения о валидаторах).
  • Накопление сообщений об ошибках валидации, привязанных прямо к полям формы, с возможностью последующего отображения в настраиваемом дизайне. При этом данные, введенные в поля ранее, автоматически остаются на своих местах.
  • Автоматический (возможен и ручной) запуск валидаторов, привязанных прямо к HTML-полям формы.
  • Запуск реакции на ту или иную кнопку формы, если ошибок валидации не было.

Читать статью...



Класс Debug_HackerConsole_Main предназначен для временного вывода отладочной информации в виде, не загромождающей окно браузера и логи сервера.

Особенно удобно использовать консоль для вывода лога всех SQL-запросов, выполненных скриптом. Если работа вашего сайта с СУБД идет через централизованную библиотеку, достаточно добавить вызов Debug_HackerConsole_Main::out() в функцию, осуществляющую SQL-запрос, чтобы получить хороший инструмент диагностики (особенно если вы будете логировать не только запросы, но также и результаты их выполнения в краткой форме вида «запрос возвратил X строк» или «запрос вернул ошибку Y»).

Читать дальше.



30.07.2005. Новый раздел сайта — Конструктор. Статьи снабжены zip-архивами исходников.

В последнее время в статьях Куроводства появляется все больше описаний законченных библиотек на PHP, Perl и JavaScript. Большинство этих библиотек используются во множестве проектов, разработанных автором, и поддерживаются им (происходит отладка и исправление ошибок). Я решил выделить все такие библиотеки в отдельный раздел



26.04.2005. Статья HTML_FormPersister: новый взгляд на построение форм.

Модуль HTML_FormPersister позволяет сильно упростить разработку скриптов, использующих сложные и большие формы. Особенно удобно его применять при модификации уже написанных скриптов (таких как, например, phpBB).

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

Читать статью.



23.04.2005. Префильтрация: статья про перехват фатальных (E_ERROR) ошибок в PHP-программах.

С применением метода, реализованного в модуле PHP_CodeFilter, процесс написания шаблонных языков выходит на качественно новую ступень, ранее доступную только в языке Perl. Например, появляется возможность создания Smarty-подобного транслятора, допускающего удобную отладку шаблонных файлов.

Преобразование (трансляцию) файла с некоторого мета-языка шаблонов в PHP-код с последующим его запуском я назвал префильтрацией кода (по аналогии с известным модулем для Perl Filter::Util::Call). С использованием этой идеологии можно «запускать» некоторый шаблон, как будто бы он является обычным PHP-кодом, но проводить в нем предварительную обработку — например, «разворачивать» собственные директивы в «чистый» PHP-код.

Читать статью.



Пакет расширения включает в себя СУБД FireBird, а также утилиту администрирования IBExpert.

FireBird — это СУБД (Система Управления Базами Данных), основанная на ядре Borland InterBase. Она представляет собой полнофункциональный SQL-сервер.

IBExpert — мощная утилита администрирования СУБД FireBird. Она позволяет не только полностью управлять структурами баз данных, но также и создавать хранимые процедуры, триггеры, а также отлаживать их в пошаговом режиме, как это принято в «обычных» языках программирования (C++, Delphi, Java, PHP и т.д.).

Инструкции по установке.



03.02.2005. Статья про новый подход к динамической подгрузке данных.

В отличие от ActiveX-компоненты IE Microsoft.XMLHTTP и Mozilla-класса XMLHttpRequest, используемых в Google Suggest, предлагаемая библиотека JSHttpRequest кроссбраузерна: она не опирается на особенности браузеров и работает в IE5.0+, Mozilla 0.7+, FireFox 1.0+ и Opera 7.3+ (здесь «+» означает «в этой и более новых версиях»). Код не использует ни ActiveX, ни <IFRAME>, а построен на базе динамической генерации тэга <SCRIPT>.

Текст статьи JSHttpRequest: динамическая подкачка данных без перезагрузки страницы.



Python — свободный интерпретируемый объектно-ориентированный расширяемый язык программирования сверхвысокого уровня. Пакет расширений ActivePython позволяет установить интерпретатор Python в Денвер-систему.

Начальную версию пакета предоставил tIT. Спасибо!

Скачать пакет ActivePython.



18.01.2005. Денвер перешел на использование MySQL 4.1!

Отныне в состав Денвера входит последняя версия MySQL — 4.1. Полный список изменений

* Денвер-2 2005-01-12
  - Переход к PHP версии 4.3.10.
  - Переход к MySQL версии 4.1 (с поддержкой Unicode).
    ВНИМАНИЕ!  НЕ УДИВЛЯЙТЕСЬ, если сразу же после установки новой версии 
    Денвера MySQL перестанет обнаруживать созданные ранее базы данных!
    Они все сохранились и находятся в директории /usr/local/mysql/data.
    Т.к. совместимость MySQL 3.x и MySQL 4.1 недостаточно хорошая, возможно, 
    вам придется повозиться, перенося старые базы на новое место. Для 
    переноса КАЖДОЙ БД необходимо:
    - завести пользователя и БД в новом MySQL 4.1, воспользовавшись скриптом
      http://localhost/Tools/addmuser/
    - скопировать файлы данных из /usr/local/mysql/data/ИМЯ_БАЗЫ на новое
      место - /usr/local/mysql4/data/ИМЯ_БАЗЫ
    ПОМНИТЕ: вы всегда можете переключиться назад на использование MySQL 3,
    для чего достаточно поменять путь к MySQL в файле /etc/CONFIGURATION.txt.
  - Переход к phpMyAdmin 2.6.1.
  - Переход к Parser 3.1.4.
* Денвер-2 2005-01-18
  - Теперь, если ПОЛНОЕ доменное имя некоторого виртуального хоста содержит
    часть вида NN.NN.NN.NN (т.е. IP-адрес), Денвер привязывает данный 
    виртуальный хост именно к этому адресу. Например, /home/test/192.168.0.1/ 
    доступен по адресам: 
    * http://192.168.0.1      (IP-адрес), 
    * http://192.168.0.1.test (доменное имя),
    а /home/192.168.0.1/www - по адресам:
    * http://192.168.0.1      (IP-адрес)
    * http://www.192.168.0.1  (доменное имя)


28.12.2004. Проект Денвер переехал на отдельный домен.

Новое (и постоянное) "место жительства" Денвера — сайт Denwer.Ru. Он расположен на машине генерального спонсора проекта, компании Net.Ru.

Теперь сайт работает на базе системы управления шаблонами Templier, описанной в книге автора PHP5 (исходные коды на сайте книги). Проведен редизайн с использованием стандартов XHTML и CSS. Все старые ссылки вида http://dklab.ru/chicken/web/dis/ по-прежнему работают, но переадресуют уже на новый сайт.

Добро пожаловать!



10.12.2004. Первый тираж новой книги «PHP5» (серия «В подлиннике» — не путать с «Самоучителем PHP5»!).

Перейти на сайт книги (пока находится в разработке, но тексты листингов уже доступны для скачивания).

Рассмотрен один из самых популярных в Интернете языков — PHP. Книга адресована как профессиональным Web-разработчикам, так и новичкам, владеющим лишь базовыми навыками программирования и не знакомым с PHP. Изложены основы функционирования Web-серверов, синтаксис и стандартные функции языка, техника разделения кода и дизайна сценариев. Приведено описание функций PHP для работы с файлами, СУБД MySQL, регулярными выражениями формата PCRE, графическими примитивами, почтой. Особое внимание уделено новым возможностям PHP 5 работе с XML-документами и полноценному объектно-ориентированному программированию.

Внимание: ни сайт, ни автор не занимаются продажами книги. Если вы хотите ее приобрести, пожалуйста, зайдите в книжный магазин либо на Yandex.

Внимание: не путайте данную книгу с «Самоучителем PHP5» (авторы: Кузнецов М., Симдянов И.)! Хотя все три книги — «Самоучитель PHP4», «PHP5» и «Самоучитель PHP5» и вышли в одном издательстве — BHV, — лишь первые две имеют отношение к данному сайту.



02.12.2004. Вышла статья про использование прототипов и наследование в JavaScript.

В Интернете масса литературы, описывающей, что такое prototype, и в каком контексте его обычно используют. Однако львиная доля статей страдает одним большим недостатком: там не разъясняется детально, как именно работают прототипы, когда их можно применять, а когда — нельзя.

Полная версия статьи.



Создана специальная разновидность базового пакета Денвера - Base_PHP5. Дистрибутив содержит: Apache, PHP5, Perl, MySQL, phpMyAdmin, sendmail-заглушка, однако в нем нет PHP версии 4; вместо него -- PHP5. В остальном архивы совпадают. Достоинство данного дистрибутива в том, что PHP5 работает в виде модуля Apache, а не в виде CGI-обработчика. Если вы планируете использовать только PHP5, то вам, вероятнее всего, будет удобнее всего скачать именно данную версию Денвера.

Список изменений:

* Денвер-2 2004-11-06
  - Скрипт запуска Apache автоматически настраивается на версию mod_php,
    так что теперь для подключения mod_php5 достаточно изменить лишь
    директиву LoadModule в httpd.conf. Также при помощи этой директивы
    можно ссылаться на внешнюю инсталляцию PHP, не входящую в Денвер, и
    даже расположенную на другом диске. [2004-11-06]
  - Переход к PHP 4.3.9 [2004-11-06].
  - Переход к PHP 5.0.2 [2004-11-06].
  - Создана PHP5-версия базового пакета (Base_PHP5), включающая в себя
    полный дистрибутив PHP5 вместо PHP4 [2004-11-06].
  - Переход к phpMyAdmin 2.6.0-pl2 [2004-11-06].
  - Шаблоны виртуальных хостов теперь могут ссылаться на DocumentRoot,
    расположенные на другом диске, вне /home Денвера (например, на 
    C:/CustomDomains) [Mike Frolov, 2004-11-06].


Выход Денвера-3 несколько откладывается в связи с далеко идущими планами по развитию проекта и вероятным привлечением к делу спонсора. Вместо этого продолжает развиваться ветка Денвер-2.

Список изменений:

* Денвер-2 2004-09-06
  - Теперь путь к директории WebServers может содержать пробелы.
  - Исправлена ошибка в механизме обработки "одноразовых" пользовательских 
    шаблонов виртуальных хостов. Теперь пользователь может просто скопировать 
    "обычный" блок VirtualHost в httpd.conf, предварить каждую его
    строку комментарием и заменть DocumentRoot на DocumentRootMatch.
    После этого получится шаблон, совпадающий с одним-единственным хостом,
    и этот хост будет обрабатываться Денвером (в частности, вноситься в
    vhosts.conf и, что самое главное, в hosts) [2004-07-13].
  - Исправлена ошибка в http://localhost/addmuser.php [baev, 2004-08-23].
  - Добавлен синтаксис $&{X:-default} и $^{X:-default} в шаблонах 
    хостов [2004-09-05].
  - Добавлена возможность "вешать" хосты на другой IP-адрес и порт
    (см. /home/custom/.htaccess и http://custom-host:8648/ - не забудьте
    отключить или настроить фаервол!) [2004-09-05].


Учтите, что на данный момент официальной версии Perl6 ещё не существует. Таким образом, Perl6 в данном пакете может содержать ошибки и временами работать не так, как нужно.

Внимание! Для функционирования Perl 6 необходимо наличие в системе Perl 5 вместе с библиотеками. Поэтому прежде, чем ставить данный пакет, поставьте расширение с модулями ActivePerl, расположенное на сайте Денвера.

Загрузить пакет.



Наконец-то вышла официальная версия PHP 5.0. Соответственно, создан и пакет для Денвера.



Изменения версии Orphus 3.1:

  • Главный скрипт переписан с нуля в лучших традициях современного JavaScript. Его объем сильно уменьшился.
  • Теперь вместо JS-скрипта в IFRAME подключается сразу HTML-страница.
  • Главный скрипт проходит валидацию в соответствии со стандартами XHTML 1.0 и CSS 1.0.
  • Выделенный контекст теперь также указывается и в теме письма.
  • Добавлено кодирование E-mail получателя писем, чтобы его не обнаруживали спам-роботы.
  • Оптимизирована многоязыковая поддержка.
  • Приходящие от Orphus-а письма соответствуют стандарту RFC на E-mail (все заголовки кодируются при помощи base64), что теоретически должно уменьшить число ``ложных срабатываний'' на них антиспам-систем.
  • Значительно улучшена устойчивость системы к различным кодировкам сайтов (письма всегда приходят в читаемом виде).
  • Теперь Orphus работает и в Опере -- выжимая все, на что она способна (но не более того).
  • Улучшена форма на данной странице -- скачивать кнопки в экзотических браузерах стало проще.
  • Добавлено множество новых кнопок.
Несмотря на значительные изменения как скрипта, так и серверной части, совместимость со старыми версиями JS-кода сохранена.


Вероятно, это последняя версия Денвера-2 перед выходом Денвера-3. Я очень не хотел ее выпускать (потому что сейчас Денвер-3 уже практически закончен, и возвращаться ко второй версии — проделывать одну и ту же работу повторно), но столько народу желали видеть новый Parser и PHP, что в конце концов я уступил.

Список изменений:

* Денвер-2 2004-04-08
  - переход к Parser 3.1.2 [Игорь Светликов].
  - Переход к phpMyAdmin 2.5.6 (сильно увеличился размер дистрибутива).
  - Переход к PHP 4.3.4 (версия 4.3.5 нестабильна в Windows 98).
  - Улучшена проверка, запущен ли Apache. Просто проверяется, можно ли открыть 
    его exe-файл на запись: если можно, значит, не запущен.
  - Добавлен скрипт поиска по документации и другим директориям
    [(C) Антон Сущев, 2004-01-16].
  - Улучшена отладочная заглушка sendmail: теперь каждое письмо помещается 
    в файл с расширением .eml в директории /tmp/!sendmail, так что его можно 
    открывать Outlook-ом [Vladimir Shishkin, baev, Антон Сущев, 2004-01-10].
  - Исправлены неточности в скриптах http://localhost (в том числе при 
    register_globals off) [Дмитрий Эсс, 2004-01-18]. 
  - Улучшен механизм обработки шаблона виртуальных хостов. В качестве 
    иллюстрации штатно поддерживаются следующие схемы (примеры отображений):  
      /home/somehost/abc.def      -> http://abc.def.somehost
      /home/somehost/domains/abc  -> http://abc.somehost   
      /var/www/html/~somehost/abc -> http://abc.somehost
      /home/somehost/public_html  -> http://somehost
    [Vitj0k, 2004-01-18]
  - Добавлен "виртуальный хост по умолчанию" - несуществующая директория,
    к которой производится обращение, если не удается найти запрошенный домен.
  - Добавлена проверка наличия SYSTEM32-директории в инсталляторе [Евгений 
    Ковалев, 2004-02-29].
Учтите, что данная версия уже почти не оптимизирована по размеру, и он увеличился примерно на 400 КБ. Это объясняется переходом к новой версии phpMyAdmin, а также GD2 в PHP.


05.03.2004. Новые статьи про тонкости JavaScript.

Вполне возможно, что после этой и следующей наблы вы почувствуете себя глупо. Вы будете ощущать себя так же, как программист для Windows, всю жизнь рисовавший круги, прямоугольники, кнопки и т.д. вручную (по точкам -- например, через DirectDraw), и вдруг обнаруживший, что в этой ОС существует куча готовых средств для отрисовки элементов интерфейса.
http://www.dklab.ru/chicken/nablas/38.html
http://www.dklab.ru/chicken/nablas/39.html



14.02.2004. Вышел модуль CGI::WebIn v2.00, переработанный и дополненный.

2.00  Sun Feb 14 22:40:00 2004
    - Fixed bug with autoarrays (QUERY_STRING is like test[]=a&test[]=b).
    - Merged with old 2.0 frozen project.
    - AutoLoader and Exporter is not used now.
    - Function loading no demand (as in CGI.pm).
    - Improved QUERY_STRING parser: test{'aa\'bc'}, test{'a\\b'} etc.
    - Error reporting system now silent (GetError() function added).
    - Autoarray handling improved: test[]{abc}=xxx, test[-10] 
      and test[12345678] are bad and generate errors.


В самой последней версии PHP разработчики серьезно изменили структуру директорий. Теперь все необходимые dll-библиотеки располагаются рядом с php.exe, что снимает необходимость добавлять в PATH дополнительные пути поиска. Кроме того, директория extensions с расширениями переименована в ext. Наконец, php.exe — отныне консольная версия; в CGI-окружении необходимо использовать php-cgi.exe.



Вскоре PHP версии 4 будет вытеснен своим более совершенным потомком — PHP5. В числе новых возможностей — улучшенная (я бы сказал, уже похожая на человеческую) поддержка ООП, исключения, встроенная СУБД sqLite, полностью переделанный механизм работы с XML. Полный список изменений можно найти в PHP Changelog-е и в кратком описании новой Zend Engine 2.

Обо всех неточностях и ошибках в пакете расширения просьба сообщать в форум по адресу http://forum.dklab.ru/denwer.



В тридцать шестой набле вкратце описывается, как устанавливать модули при помощи CPAN.pm. В тридцать седьмой набле приведены руководства к действию для разработчиков, желающих опубликовать свои модули на CPAN.org — сайте всемирного Perl-архива.



Модули CGI::WebOut, CGI::WebIn, Apache::Scriptor и Apache::Scriptor::Simple теперь доступны на сайте CPAN (Comprehensive Perl Archive Network): http://search.cpan.org/~koterov/



Речь в данной набле пойдет о том, как можно «починить сломавшийся Windows», не запачкавшись при этом машинным маслом по самые уши. Особенно советы помогут тем людям, которые рискнули установить себе на домашнюю машину Windows 2003 Server, не подозревая, какие проблемы ждут их с драйверами...



Выдержка из CHANGELOG-а:

2.00  Sat Aug 23 21:00:00 2003
    - code rewritten by 80%
    - now module is fully tie-safe (see comments inside and POD)
    - fixed bug: now module works in Perl 5.8 too
    - module is now fully transparent for caller code even if
      it uses tie(*STDOUT)
    - a number of comments is translated from Russian to English
    - no AutoLoader in new version
    - use strict
Подробнее читайте в тридцать третьей набле.


К сожалению, в новой версии утеряна совместимость со старой. Всем пользователям Orfo, чьи сайты проявляли активность на протяжение последних двух месяцев, было разослано письмо с предупреждением о закрытии старой версии (в течение двух недель). Сегодня старая Orfo окончательно канула в лету. Ее заменила более прогрессивная система — Orphus. Помимо всего прочего, в ней теперь возможен выбор кнопки.



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



Ядро форума постоянно развивается и совершенствуется. Обо всех замеченных неточностях и откровенных ошибках просьба сообщать прямо в форум.

Сейчас в полную мощность работает поиск по форуму. База данных содержит более семи тысяч сообщений и писем пользователей. Прежде, чем задавать вопрос в форуме, пожалуйста, поищите в нем готовый ответ.



10.02.2003. Новая версия Денвера. Вышел (пока неофициально) Денвер+Parser «в одном флаконе».

Полная сводка изменений:

  • В инсталлятор добавлена проверка наличия всех необходимых драйверов.
  • Небольшие изменения в интерфейсе инсталлятора.
  • Возможность инсталлировать Денвер в корневой каталог существующего диска БЕЗ создания виртуального диска.
  • Теперь при инсталляции поверх жизненно важные файлы (такие как файлы конфигурации PHP, Apache, MySQL) не переписываются. Это позволяет делать более-менее безопасный апгрейд.
  • Опять этот злополучный include_path. Теперь оказалось, что там еще и кавычки нужны, а то ; воспринимается, как комментарий [Yuri Safonov, 2003-02-04].
  • Добавлена директива RewriteEngine On в httpd.conf.
  • Из дистрибутива базового пакета исключена утилита mysqladmin.exe. В результате:
    • уменьшился размер дистрибутива;
    • теперь можно задавать root-пароль для MySQL, скрипту останова сервера он не нужен (используется kill для процесса).
    Вся функциональность mysqladmin-а доступна через phpMyAdmin.
  • Вышла новая разновидность базового пакета с включенной поддержкой Parser.
  • Улучшена система поиска и удаления старых dll-библиотек, которые делают сервер неработоспособным.


01.02.2003. Разработчики PHP 4.3.0 отказались от поддержки Windows 95.

Эта ужасная новость еще не успела облететь мир. Насколько я понимаю, EXE-версия PHP в Windows 95 больше не работает из-за сущей мелочи. Вот подробности: http://bugs.php.net/bug.php?id=21390. Впрочем, пользователи новых версий Денвера, включающего PHP как модуль, все еще могут работать в Windows 95, однако, вероятно, этому скоро также будет положен конец. Если ваши скрипты настроены для использования EXE-модуля PHP (/usr/local/php), вам придется устанавливать себе более старую версию вручную.



03.01.2003. Новая версия Денвера-2 — улучшена совместимость с Unix-хостингом.

Изменения в Денвер-2 2003-01-03:

  • ВНИМАНИЕ: php.ini теперь расположен в директории /usr/local/php, а не в /usr/local/apache! Этот путь прописывается в переменной окружения PHPRC в скрипте старта apache.pl.
  • Добавлена возможность использования PHP-скриптов с первой строчкой:
    #!/usr/local/bin/php или
    #!/usr/local/sbin/php или
    #!/usr/bin/php или
    #!/usr/sbin/php
    Такие скрипты нужно помещать в CGI-директорию, а не в директорию документов [Sergey, 2003-01-02].
  • Ссылки на Sendmail и Perl помещены в указанные выше четыре директории (для лучшей совместимости с Unix-хостингом).
  • Исправлена ошибка - PHP3 не находил свой php3.ini.
Скачать новую версию можно по адресу http://web.dklab.ru/dis.


В двух статьях приводятся лестные и нелестные отзывы пользователей Денвера (или его противников).



Изменения в базовом пакете Денвер-2 2002-12-30:

  • Косметическое исправление - убран один warning в Tools.pm, когда send() оканчивается неуспешно [Махно Юрий, 2002-12-04].
  • В регулярные выражения директивы DocumentRootMatch добавлена возможность использования \. Для этого его нужно удваивать, например: DocumentRootMatch "\home\(?!\\.)(.*)^1\(?!cgi)(.*)" [Алексей Степаненко, 2002-12-05]. Также чуть подправлен httpd.conf - a то cgi-bin считалась поддоменом.
  • Добавлены пиктограммы для ярлыков Денвера на Рабочем столе [Алексей Степаненко, 2002-12-05].
  • Переход к новой версии PHP: 4.3.0.
  • В базовый пакет добавлен модуль поддержки отладчика PHP. Правда, для полноценной отладки скриптов нужно использовать какую-нибудь IDE.
  • Добавлена команда установки переменной окружения для php_openssl.

Изменения в пакете поддержки полной версии PHP4:

  • Добавлен конфигурационный файл для openssl.
  • Добавлен автоматический инсталлятор модулей PEAR.


Список изменений:

  • Исправлена ошибка перехвата выходного потока команд, когда имя временной директории содержит пробелы. В общем-то, ошибка практически ни на что не влияла, но все равно.
  • В пути подключения include_path PHP добавлена директория ".".
  • Проверка, запущен ли Apache, теперь производится не по наличию активного 80 порта, а по файлу в /usr/local/apache/logs/httpd.pid. Это может помочь на системах Windows XP, в которых порт 80 часто оказывается "занятым".
  • Отказ от php_gd2 в пользу php_gd. Первая по непонятным причинам не работает на некоторых системах. В результате уменьшился размер дистрибутива.


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



Выдержка из CHANGELOG-а:

  • Исправлена ошибка в php.ini, приводящая к неработоспособности sendmail-заглушки в Windows 95 ... ME ("/" заменены на "\").
  • Переход к более стабильной версии PHP: 4.3.0RC2.

Новая версия доступна, как обычно, в директории дистрибутивов (читайте статью, если не знаете, где она).



27.11.2002. Орфо 2.1: улучшен механизм подключения к пользовательским страницам

Вышла версия 2.1 системы Орфо. Улучшен механизм подключения Орфо к пользовательским страницам. Теперь даже в случае сбоя на сервере http://orfo.dklab.ru страницы, использующие Орфо, продолжают отображаться, а не «тормозят». То же происходит и в случае слишком медленного соединения с сервером Орфо. Подробности здесь: http://orfo.dklab.ru. (Пользователям версии 2.0 необходимо обновить код подключения скрипта на своих страницах.)



24.11.2002. Вышли пакеты расширений для Денвера-2: модули Apache и библиотеки PHP4.

Пакет PHP4 включает следующие расширения: bz2, cpdf, crack, curl, db, dba, dbase, dbx, domxml, exif, filepro, gd, gd2, gettext, hyperwave, iconv, imap, interbase, java, mhash, ming, msql, mssql, openssl, pdf, pgsql, shmop, sockets, w32api, xmlrpc, zip, zlib, ldap, xslt, а также библиотеки PEAR. Читать дальше...

Пакет с Apache включает все стандартные модули Apache: mod_auth_anon, mod_auth_dbm, mod_auth_digest, mod_cern_meta, mod_digest, mod_expires, mod_headers, mod_info, mod_mime_magic, mod_proxy, mod_rewrite, mod_speling, mod_status, mod_unique_id, mod_usertrack, mod_vhost_alias. Читать дальше...



24.11.2002. Вышел Денвер-2 (новая версия со множеством изменений).

Вышла новая, переработанная версия комплекса Джентльменский набор Web-разработчика — Денвер-2. (Старая версия будет доступна здесь еще несколько месяцев.) Базовый пакет теперь включает:

  • Apache, SSI, mod_rewrite, mod_php.
  • PHP4 с поддержкой GD и MySQL.
  • MySQL с поддержкой транзакций (mysqld-max).
  • phpMyAdmin — система управления MySQL через Web-интерфейс. Полностью заменяет командную строку MySQL.
  • Ядро Perl без стандартных библиотек (они поставляются отдельно).
  • Эмулятор sendmail (отладочная Lзаглушка?, складывающая приходящие письма в /tmp/); работает и в Perl, и PHP.
  • Система управления виртуальными хостами, основанная на шаблонах. Чтобы создать новый хост, вам нужно лишь добавить директорию в каталог /home, править конфигурационные файлы не требуется.
  • Система управления запуском и завершением.
  • Инсталлятор (нечто вроде InstallShield).

Ознакомиться с полным списком изменений можно по адресу http://dklab.ru/chicken/web/dis/Base/LAST_README.txt.



Список изменений в версии 2.0:

  • Ядро системы переехало на отдельный домен (http://orfo.dklab.ru/orfo.js). Пожалуйста, как можно скорее обновите адреса на своих страницах, ибо через некоторое время старый адрес будет недоступен.
  • Благодаря идее Виктора Ганского (gunsky@digiskycorp.com) пользователю теперь посылается текст ошибки вместе с окружающим его контекстом (15 слов в обе стороны). Это позволит легко отличать ложные сообщения от истинных.


  • 17.08.2002. Города Денвера теперь отображаются на карте Земли.

    Сделать визуализацию городов, в которых установлен Денвер, помогла программа XEarth. На сервере использована ее сильно модифицированная UNIX-версия. Пришлось несколько перелопатить исходники (добавить отображение пометок, а также выдачу пиксельных координат городов по широте и долготе).



    15.08.2002. Ведется статистика городов, в которых устанавливался Денвер.

    Теперь вы можете посмотреть, что называется, «в реальном времени», как идет распространение проекта Денвер по всему миру (в основном — по России). Сейчас показывается имя города с координатами, страна и число пользователей Денвера, живущих в этом городе. В ближайшей перспективе — отображение точек на карте земного шара. Статистика ведется на основе данных лог-файлов.



    Не успели мы добавить в Денвер пакет поддержки Parser, как разработчики этой технологии... существенно ее улучшили. В новой версии — 3.0.0005 — сильно упрощено конфигурирование. Теперь нет необходимости устанавливать никакие переменные окружения в .htaccess. Кроме того, все настройки из parser3.conf перекочевали в auto.p. Имеются и другие нововведения, о которых вы можете узнать на сайте http://parser.ru. Благодаря Игорю Светликову, теперь новая версия доступна и в «Джентльменском наборе». Мы рады сообщить, что Parser стал еще более независим, и это как нельзя кстати в рамках Денвера.



    11.08.2002. Установка системы Orfo стала крайне простой.

    Система Orfo — это оригинальное средство, которое позволит вам полностью избавить свои сайты от орфографических ошибок и опечаток. С помощью несложной программки на JavaScript каждый может, нажав сочетание клавиш Ctrl+Enter, немедленно отправить выделенный кусок текста администратору сайта (попробуйте, если еще этого не сделали, — система установлена и на этом сайте). Важно, что пользователь остается на той же самой странице, а отправка происходит совершенно незаметно. И лишь мигающее в статусной строке сообщение «Спасибо за сотрудничество!» подтверждает действие и одновременно вознаграждает «доброго самаритянина». Главная особенность системы — то, что она действительно работает. Подробнее об этом читайте в двадцать четвертой (установка системы) и двадцать пятой (вопросы юзабилити) наблах.



    30.07.2002. Подключена новостная система.

    Теперь вы можете более удобно отслеживать изменения на сайте, используя систему новостей, которую вы видите перед собой.



    Идея добавить поддержку популярной технологии студии Лебедева под названием Parser принадлежит Игорю Светликову (mwiz@design.ru). Он же разработал первую версию дистрибутива этого пакета, которая, пройдя тестирование и некоторые доработки Дмитрия Котерова, предлагается теперь вашему вниманию. Следуя хорошо зарекомендовавшей себя традиции, пакет полностью автономен и не изменяет ничего вне основной директории Денвера. Перейти на страницу пакета.



    27.07.2002. Вышла новая версия Денвера, исправлены некоторые ошибки старых версий.

    Список изменений в новой версии:

  • Как сообщил Igor Svetlickov, в некоторых ОС команды `...` вызывают зависание инсталлятора. Все такие команды заменены на system(...).
  • Несколько изменена стартовая страница http://localhost. Надеемся, это поможет пользователям избежать распространенной ошибки - включенного прокси-сервера при работе с комплексом.
  • Теперь комплекс можно инсталлировать и запускать не только под Администратором, но и под обычным пользователем (выдается соответствующее предупреждение). Однако при этом не работают виртуальные хосты, за исключением localhost (из-за невозможности записи в файл hosts).
  • Изменена система обработки ошибок в менеджере серверов, что должно улучшить устойчивость при возникновении ошибок.
  • Теперь инсталлятор проверяет наличие start.exe и выдает осмысленное сообщение, если эта утилита не найдена (для Windows 9x).
  • Исправлены недочеты в скрипте addmuser.php.
  • Режим контроля ошибок по умолчанию в PHP изменен на E_ALL для более удобной отладки скриптов начинающими.


  • Сегодня, в международный день потребителя, в рамках проекта Куроводство наконец-то увидел свет Джентльменский набор Web-разработчика. Его ядро — универсальный дистрибутив, включающий Apache, PHP4, Perl и MySQL, а также дружественный инсталлятор. Потрясают новые возможности сервера Apache. Теперь вам не нужно вообще исправлять httpd.conf и файл hosts — система сделает это за вас. Не требуется также возиться с созданием виртуального диска для директорий документов виртуальных хостов. Исчезли сложности при добавлении новых виртуальных хостов ? все, что нужно сделать, это просто создать директорию документов в /home. Окно консоли Apache отныне не занимает места на экране, а PHP работает в виде модуля Apache. MySQL уже настроен, вы можете администрировать его при помощи последней версии phpMyAdmin. Дистрибутив занимает менее двух мегабайт, полностью автономен, не изменяет ничего в системной директории Windows и может располагаться в любом каталоге.








    Дмитрий Котеров, Лаборатория dk. ©1999-2016
    GZip
    Добавить на Del.icio.us   Добавить на Digg.com   Добавить на reddit.com
    1) Warning: Use of uninitialized value in hash dereference at /var/www/dklab.ru/_Kernel/lib/MysqlTable.pm line 27.