Удобный инструмент замера скорости выполнения участков PHP-кода

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

<?php
class SomeClass
{
    function getData()
    {
 
        Profiler::init();
        Profiler::measure("Подключение к базе данных");
 
        $this->connect();
 
        Profiler::measure("Запрос количества элементов");
 
        $fullCount = $this->getCount($this->currentDbCriteria);
 
        Profiler::measure("Запрос первой страницы элементов");
 
        $firstPage = $this->getData($this->currentDbCriteria, 0);
 
        Profiler::measure();
        Profiler::print_measures();
    }
}

И вывод функции print_measures, выглядящий так:
print_measures

Читать далее


SSL-сертификат Comodo Positive SSL и Nginx

Запись о том, как сгенерировать и настроить самый простой SSL-сертификат (Comodo Positive SSL) на веб-сервере Nginx.
Сертификат в данном примере заказывался не у Comodo непосредственно, а у его реселлера ssl.com.ua, за более привлекательную цену. Суть же от этого не меняется, так как сертификат всё равно генерирует и присылает сам Comodo.

План действий:

  1. Сгенерировать CSR (Certificate Signing Request)
  2. Использовать CSR для генерации сертификата
  3. Подготовить сертификат для использования с Nginx
  4. Включить SSL в Nginx с использованием сертификата

Читать далее


Модификация классов Webasyst и в частности Shop-Script 6 без потери изменений при обновлениях

Кратко:

Как вносить изменения в код фреймворка Webasyst, приложений и плагинов, написанных на нём, так, чтобы не отказываться от обновлений, не отслеживать вручную изменившиеся файлы, при этом, чтобы изменения хранились отдельно от самого кода и хорошо поддавались контролю версий git или других VCS? В этой статье будет предложен почти идеальный способ.

Длинно и подробно:

Утверждение первое: Фреймворк Webasyst, на котором основан Shop-Script 6 (раньше был 5), обладает встроенным механизмом обновлений.
Этот механизм позволяет достаточно удобно применять обновления, выпускаемые компанией Webasyst.
Утверждение второе: При этом, расширяемость приложений, таких как Shop-Script базируется исключительно на использовании плагинов, которые должны использовать «хуки» для улучшения или изменения функциональности. Если вам не достаточно «хуков», те, что есть не дают возможностей влиять на нужные вам элементы функциональности, либо вам нужно изменить работу некоей функции самого фреймворка Webasyst, то плагины вам не подойдут.
Утверждение третье: Для изменения функциональности «на уровне ядра» вы можете изменить непосредственно сами классы Webasyst, ShopScript6 и других приложений, и именно это и советуют разработчики Webasyst на своём форуме поддержки в особо сложных случаях. Однако, благодаря встроенному механизму обновлений, ваши изменения могут легко быть затёрты при следующем обновлении.

Что можно сделать?
Способ «в лоб»:
Можно, при изменении каждого системного файла, копировать то, что получилось куда-нибудь в специальное место, откуда копировать обратно при каждом изменении. Но это утомительно, неудобно, и «некрасиво» с точки зрения архитектуры веб-приложения.
Идеальный способ:
Идеально было бы хранить изменения где-то в отдельных файлах, да так, чтобы они применялись к исходным файлам webasyst при запуске приложения, либо при деплое на удалённый сервер.

У меня есть «почти идеальное решение»!

Читать далее


Установка Redmine + Nginx + Thin на Debian 8 Jessie

UPD: Доступна инструкция по установке Redmine в Debian 9 Stretch с Nginx в качестве фронт-энда

Эта заметка по большей части копирует мою же заметку об установке redmine в Debian Wheezy, за некоторыми исключениями.
Во-первых, с выходом Debian Jessie успела обновиться версия Redmine.
Во-вторых, в этой версии Debian по-умолчанию стоит Apache 2.4, который заметно отличается от Apache 2.2, что делает их конфигурационные файлы несовместимыми. Наткнувшись на данную проблему, я решил, что это будет отличным поводом полностью и окончательно перейти на Nginx.

Устанавливать будем Redmine в виртуальной машине на хостинге Digital Ocean под управлением ОС Debian GNU/Linux 8.0 Jessie, а также, дополним его парой полезных «в хозяйстве» плагинов и тем оформления.

В интернете масса инструкций об установке редмайна в Debian. Однако с ними всеми возникают какие-то проблемы. Связанные то с различием в версиях Redmine (между той, которую пытаешься установить и той, о которой написан мануал), то с недостатком в системе пакетов, которые были у писателя мануала, и он просто не обратил на них внимания, то с неправильной фазой луны…
Моя предыдущая инструкция — не исключение, попытавшись провернуть её в Debian Jessie я сам же наткнулся на проблемы в настройке сервера Apache.

Обойдёмся без длинного предисловия, объясняющего, почему будем ставить redmine с нуля, а не пользоваться готовым образом, предоставляемым DigitalOcean, я это уже писал 🙂

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


Кстати, если у вас нет аккаунта в DigitalOcean вы можете создать его и получить 10 долларов если пройдёте по этой реф-ссылке: https://www.digitalocean.com/?refcode=e5a7f5c338ab

Читать далее


Debian Jessie перезапуск сети VirtualBox после пробуждения (resume)

В Debian Jessie (в отличии от Debian Wheezy) для управления службами используется systemd и с некоторыми из служб возникают проблемы.
Одна из них: VirtualBox не перезапускает свои виртуальные сетевые адаптеры после пробуждения системы из сна.

Когда это происходит:

  1. Если у вас установлен и используется VirtualBox версии 4.3.8 и ниже (на более высоких не проверял)
  2. Если в VirtualBox у вас настроен host-only адаптер
  3. Вы «усыпили» ваш реальный компьютер, например закрыв крышку ноутбука, после чего «разбудили его»

Каковы признаки:

  1. Виртуальная машина перестаёт пинговаться
  2. Подключиться к виртуальной машине по ssh также невозможно
  3. Если одна из папок виртуальной машины была примонтирована с помощью sshfs, все процессы, пытающиеся ей пользоваться намертво зависают

Что делать?

Читать далее


Консольные команды в плагине webasyst и Shop-Script 5/6 в частности

В документации по фреймворку webasyst описано, как создавать консольные команды, то есть команды которые можно вызывать из консоли, без участия веб-сервера.
Статья справки размещена здесь: www.webasyst.ru/developers/docs/features/cli/
Минус описанного в ней метода в том, что скрипт придётся помещать в папку wa-apps/[APP_ID]/lib/cli, то есть фактически в папку с приложением класть свой код, что приведёт в конечном итоге к бардаку и хаосу.

Также, в справочной системе есть статья о плагинах, где написано, что плагины тоже могут иметь консольные команды.
вот эта статья: www.webasyst.ru/help/98/shop-script-5-plugin-development/

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

Читать далее


SealatusSerafim

SealatusSerafim — ник некоего фрилансера. Кому интересно, стоит ли с ним сотрудничать — пишите мне на почту, расскажу


Установка Redmine в Debian 7 Wheezy на DigitalOcean

Заметка о том, как установить Redmine в виртуальной машине на хостинге Digital Ocean под управлением ОС Debian GNU/Linux 7.0 Wheezy, а также, как дополнить его парой полезных «в хозяйстве» плагинов и тем оформления.

UPD: Доступны:
инструкция по установке Redmine в Debian 9 Stretch с Nginx в качестве фронт-энда и инструкция по установке Redmine в Debian 8.0 Jessie с Nginx в качестве фронт-энда

В интернете масса инструкций об установке редмайна в Debian. Однако с ними всеми возникают какие-то проблемы. Связанные то с различием в версиях Redmine (между той, которую пытаешься установить и той, о которой написан мануал), то с недостатком в системе пакетов, которые были у писателя мануала, и он просто не обратил на них внимания, то с неправильной фазой луны…

В DigitalOcean даже можно сразу создать дроплет (виртуальную машину) с установленным Redmine. Однако и там не всё идеально. И настроен он не полностью, и операционная система Ubuntu, да и главное, для тех кто не совсем разбирается в устройстве приложений на фреймворке Ruby on rails, полностью установленный редмайн становится «чёрным ящиком», где ничего непонятно.

Поэтому пойдем длинным путём и все установим с нуля.

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


Кстати, если у вас нет аккаунта в DigitalOcean вы можете создать его и получить 10 долларов если пройдёте по этой ссылке: https://www.digitalocean.com/?refcode=e5a7f5c338ab

Читать далее


Создание плагина для бэкэнда Webasyst Shop-script 5

Цель и смысл создания плагина

Зачем вообще создавать плагины для Webasyst, Если можно просто «поковыряться» в коде приложения (того же Shop-Script 5) и изменить всё прямо там?

Я задался таким вопросом, и попытался пойти напролом без всяких плагинов. Довольно быстро я обнаружил, что при этом начинаются проблемы с автоматическими обновлениями — приходится вручную отслеживать все обновлённые инсталлером файлы, и переносить из них изменения в «актуальные версии файлов», например с помощью утилит diffuse или meld, ну или консольных diff, если совсем по хардкору. Со временем это превращается в кошмар.

UPD: Спустя некоторое время после написания этого поста я сделал движок «патчинга на лету», который позволяет хранить изменения файлов отдельно от основного кода, подверженного обновлениям, и применять их автоматически, вот этот движок: Monkey Patching для webasyst

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

Причина написания этой статьи

Так как справка по этой теме по состоянию на середину 2014 года весьма бедная (кстати вот она: http://www.webasyst.ru/developers/docs/plugins/ ), приходится изучать её при помощи ковыряния в готовых плагинах, и отладчика XDebug. Жаль что он не умеет «заглядывать» в Smarty-файлы шаблонов…

На форуме forum.webasyst.ru есть немного информации по теме, но чувствуется, что людям незачем делиться ей бесплатно, так как они зарабатывают разработкой плагинов за деньги. Хотя, может быть, они бы и рады поделиться, но работа отнимает всё свободное время, и просто некогда сидеть на форумах.

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


Что происходит, и кто здесь?

Это — мой блог.

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

Долгое время в голове скреблась мысль о том, что стоит делиться с миром тем что у меня есть, в ответ на то, что мир даёт мне. Сейчас, в середине 2014 года, достигнута критическая масса, и блог создан.  Движущей силой этому послужили попытки разобраться в php-фреймворке WebAsyst и приложениях, на нём написанных, а точнее, очень бедная документация, и очень скудное количество информации в интернете.

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

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

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

 


Страницы:12345