воскресенье, 28 февраля 2016 г.

best configuration.

http://digitaloceanvps.blogspot.com/2014/04/best-configuration-for-512mb-1gb-ram.html

среда, 3 февраля 2016 г.

Защита паролем директорий сайта, который работает на nginx(HTTP Base Authentication).

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

понедельник, 25 января 2016 г.

Установка заплаток безопасности для Magento на примере SUPEE-6788

Доброго дня. Раскажу про свой первый опыт установки заплатки Supee-6788 на существующий проект Magento 1.9.0.1

Заплатка Мадженто - это такой скрипт, который содержит в себе diffs изменения и выполняет определённые действия перед применением изменений и после. Скрипт проверяет зависимости к другим заплаткам, проверяет возможность применения diffs, применяет diffs, оставляет пометки в окружении Magento про выполнение скрипта.

пятница, 25 декабря 2015 г.

Magento: Design Patterns(Шаблоны проектирования)

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

Factory(Фабрика):
Исполнение концепции фабрики, которая решает проблемы создания объектов без точного указания класса объекта, который будет создан.


$product = Mage::getModel('catalog/product');


Singleton(Одиночка):
Предотвращает повторное создание объекта с тем же классом. При повторном использовании, шаблон ссылается на уже созданный объект.

$category = Mage::getSingleton('catalog/session');


Registry(Регистр):
Хранит общую информацию приложения для различных компонентов, используется как интерфейс обмена информацией, безопасная замена глобальных переменных.

Mage::register('key',$value); //stores
$currentCategory = Mage::registry('key'); //retrives


Prototype:
It determines the type of object to create. In Magento it can be Simple, Configurable, Grouped, Bundle, Downloadable or Virtual types.

Mage:getModel('catalog/product')->getTypeInstance();


Observer(Наблюдатель):
В основном используется, как распределённая система обработки событий. Существует субъект который инициирует событие, субъекты подписанные на данное событие получают оповещение. Субъекты ожидающие событие - observers(наблюдатели).
Инициация события объектом.

Mage::dispatchEvent('event_name', array('key'=>$value));


Регистрация субъектов на событие, где указана обработка данного события.
<config>
    <global>
        <events>
            <event_name>
                <observers>
                    <unique_name>
                        <class>Class_Name</class>
                        <method>methodName</method>
                    </unique_name>
                </observers>
            </event_name>
        </events>
    </global>
</config>

Object Pool(Пул объектов):
Используется для перереиспользования ресурсоемких объектов.

$id = Mage::objects()->save($object);
$object = Mage::objects($id);


Iterator(Итератор):

Используется для перебора элементов коллекции.

Mage::getModel('catalog/product')->getCollection();


Lazy Loading(Ленивая инициализация):
Инициализация по востребованию.

$collection_of_products = Mage::getModel('catalog/product')
->getCollection();


Decorator(Декоратор):
Используется для изменения поведения во время исполнения.

<script type="text/javascript">decorateTable('product_comparison');</script>


Helper(Помошник):
Множественные методы доступные для использования в других объектах. К примеру, возможно, использовать методы помошника ядра везде в приложении.

Mage::helper('core');


Service Locator(Регистратор сервисов):
Регистрирует различные сервисы, также позволяет их переопределять(модели, ресурсы, фабрики, ...).

Mage::getModel('catalog/product') and $installer->getTable('customer/address_entity');

понедельник, 16 июня 2014 г.

Увеличение производительности MySQL переносом даных на "быстрый" диск, повышая скорость доступа к даным.

Доброго дня, столкнулся с производительностью базы данных MySQL. Медленно работает.
Посмотрели в системный монитор - причина явна: недостаточно скорости доступа к диску запись/чтение.
Остальных параметров системы с головой достаточно. На продакшене нужно использовать SSD+ext4 (+скорость, -цена, +надёжность данных), а на компьютерах для разработки использовали HDD+ext4 без журналирования (+скорость, +цена, -надёжность данных). Данные мы постоянно обновляем. Так что явных поломок ещё не было. В обоих случаях данные с наиболее частым обращением к ним перенесём на
"быстрый" диск. Если данных много, а пространство ограниченно, тогда можно переносить только индексы. Здесь
мы переносим всю директорию с данными. Так у нас есть выделенный "быстрый" /iofast диск.

понедельник, 11 ноября 2013 г.

Debugging/tracing Drupal 8 tests.

Занялся тестированием тестов под Drupal 8. И осознал, что отладка тестов не так уж и проста. Сложность заключается не в написании, а организации процессов.

  • Укажите путь к основному файлу тестировщику, который с помощью phpunit соберает среду и запускает тест.
  • Желательно запускать от пользователя www-data.
  • Укажите обязательно параметр --url сайта.
  • Если вызапускаете тест с командной строки и хотите трассировать код, необходимо выставить переменную XDEBUG_CONFIG="idekey=netbeans-xdebug".
  • Заметьте, что тесты также выполняют GET/POST запросы к проекту. Трассировка проскакивает код сзапросами, отладка будет неполной. Если вы хотите также провести отладку тех скриптов в параметры также надо добавлять ключ. Проблема в том, что это вызывает мультипоточную отладку в которой очень легко запутаться.

Мой совет - При поиске проблемы в тесте советую создать свой тест с реализацией проблемы.
alias d8_run_tests="sudo -u www-data php /var/www/d8/drupal/core/scripts/run-tests.sh --url http://d8.local --verbose --color --class "
alias xd8_run_tests="sudo -u www-data /home/viktor/sh/d8_run_tests"

http://d8.local/?XDEBUG_SESSION_START=netbeans-xdebug

#!/bin/bash
export XDEBUG_CONFIG="idekey=netbeans-xdebug"
echo $1
php /var/www/d8/drupal/core/scripts/run-tests.sh --url http://d8.local --verbose --color --execute-test $1

xd8_run_tests "Drupal\locale\Tests\LocaleTranslationUi1Test"
or
d8_run_tests "Drupal\locale\Tests\LocaleTranslationUi1Test"