Суперскоростной Symfony с помощью nginx

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

Фреймворки, такие как Symfony, потенциально позволяют создавать суперскоростные приложения. Мы уже видели один способ как добиться этого (путём превращения приложения в HTTP сервер), другой способ заключается в установке обратного прокси перед ним.

В данной статье мы возьмём Symfony приложение и увидим, как увеличить его производительность в 140 раз с помощью nginx.

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

Генератор запоминающихся паролей теперь и на Android!

google-play-badge Screenshot_2016-06-01-16-01-42 Screenshot_2016-06-01-16-03-11 

В работе часто приходится придумывать пароли, что порядком надоело. С целью упростить задачу, экспериментировал с различными сервисами генерации паролей, но они выдавали чистой воды кашу из букв и цифр, которую только посимвольно можно переписать в блокнот (да, пароли храню на бумажном носителе), а потом также посимвольно «считывать» каждый раз. Немного утрирую, конечно, но всё же.

Тогда я написал свой генератор паролей с «играми и девицами», который генерирует легко запоминаемые пароли — ahrameev.ru/password.

Встречайте его мобильную версию! Сгенерированный пароль вы можете скопировать в буфер обмена нажатием кнопки «Копировать» и вставить в любое приложение.

Почему PHP-разработчики думают, что MVC – это архитектура приложения?

Ранее я указывал на то, что Model-View-Controller представляет собой паттерн пользовательского интерфейса, а не архитектуру приложения. Но откуда у PHP-разработчиков возникла идея, что MVC – это в первую очередь архитектура? (Это можно сказать обо всех разработчиках серверной части, не только о PHP)

Я одно время думал, что MVC — это архитектура. Даже после прочтения «Каталога шаблонов корпоративных приложений» Фаулера и, несмотря на то, что MVC предназначался для пользовательского интерфейса, я полагал, что всё правильно понял и делаю «приложение пользовательского интерфейса». Но это было не совсем так; правильнее было бы сказать, что я смешивал проблемы пользовательского интерфейса с основой ядра приложения.

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

Никогда не используйте NULL

Когда мы вместе с клиентами проводим код-ревью, регулярно наблюдаем одну и ту же картину, которую я считаю проблематичной во многих отношениях – использование null в качестве допустимого свойства или возвращаемого значения. Можно же сделать лучше.

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

Для чего это используется

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

class SomeLoggingService {
    private $logger = null;

    public function setLogger(Logger $logger) {
        $this->logger = $logger;
    }
}

 

В большинстве случаев logger будет установлен, но кто-то забудет об этом при использовании вашего сервиса. На сцену выходит второй разработчик и пишет новый метод в этом классе, используя свойство $logger. Во время разработки свойство всегда устанавливается и тестируется по соответствующим сценариям использования, так что разработчики забывают проверять на null – очевидно, это станет проблемой при других обстоятельствах. Вы полагаетесь на то, что методы будут вызваны в определённом порядке, который сложно документировать. Метод getLogger(), создающий нулевой логгер по умолчанию, мог бы решить эту проблему, но не гарантировано, поскольку второй разработчик может не знать об этом методе и просто использовать свойство.

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

Как сделать HTTPS на сайте и защититься от SSL-атак

Обычной установки SSL сертификата может быть недостаточно, поскольку нужно также обеспечить защиту от атак, направленных на сам SSL. В данной заметке пошагово рассказывается как сделать HTTPS на сайте, работающем под Apache и защититься от известных SSL-атак. Для проверки будет использован популярный сервис тестирования HTTPS:

summary-a

 

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

Асинхронные контроллеры в Symfony

Асинхронное программирование в последние годы стало синонимом высокой производительности в веб-приложениях со стороны сервера. Во многом это связано с возрастающей популярностью изначально асинхронных JavaScript и Node.js.

Как и многие другие вещи, асинхронное программирование не является чем-то новым. Вы можете использовать этот стиль программирования во многих средах, начиная с Python и заканчивая .NET.

В браузере отдельные события, такие как клик мыши, помещаются в цикл обработки событий (см. What the heck is the event loop anyway?, Филип Робертс), а затем события обрабатываются асинхронно без определённой очерёдности: нельзя точно узнать, когда событие клика мыши выполнится.

Ключевое место в асинхронности занимает I/O. В браузерах данное понятие включено начиная с Internet Explorer 5.0 и популяризировано Gmail в 2004 году. Придуманный метод, AJAX, позволил браузерам выполнять запросы к серверу после первоначальной загрузки страницы.

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

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

Асинхронный PHP

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

У дополнения WebAPI появился публичный репозиторий

WebAPI — Open Source дополнение, позволяющее внешним одобренным сервисам и приложениям взаимодействовать с сайтом, работающим под управлением Ruxe Engine.

Дополнение необходимо для работы мобильного приложения Ruxe Engine Monitor (на скринах), которое доступно через Google Play.

Скачать дополнение: https://github.com/maindefine/webapi/archive/master.zip

Документация: https://github.com/maindefine/webapi/blob/master/README.md

GitHub репозиторий: https://github.com/maindefine/webapi

Ruxe Engine Monitor 1.0

Screenshot_2016-03-02-18-54-50 Screenshot_2016-02-27-18-05-05 Screenshot_2016-02-27-18-20-35 Screenshot_2016-02-27-18-11-35
 

Рад сообщить, что Ruxe Engine Monitor на Android готов и опубликован на Google Play. Это большой шаг для развития проекта Ruxe Engine, поскольку позволяет разрабатывать новый Ruxe Engine 2 с закладыванием мобильного приложения.

Присоединяйтесь к обсуждению на нашем форуме: http://ruxe-engine.ru/viewtopic.php?f=21&t=183

button-google-play
 

Приложение является дополнением для сайта, работающего под управлением CMS Ruxe Engine. Оно позволяет проверять новые уведомления из админ-центра, следить за последними постами на форуме проекта, а также узнать о появлении новой версии Ruxe Engine, чтобы не пропустить выход Ruxe Engine 2. Необходимо, чтобы на сайте был установлен и активирован плагин WebAPI: http://ruxe-engine.ru/viewtopic.php?f=21&p=2332 (присутствует в дистрибутиве Ruxe Engine 1.9).

Как собрать приборную панель для Live For Speed

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

MVI_5069.mp4_snapshot_02.00_[2015.09.21_16.25.04]

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

Исходники LFS «in real life» dashboard

В конце сентября публиковал видео демонстрацию своей приборной панели для симулятора Live For Speed, но не виртуальной, а, что называется, IRL (в реальной жизни). Теперь пришла очередь и исходниками поделиться.

Со схемой всё достаточно понятно — это просто два сервопривода, имеющие внешнее питание (5В, ~1 А) и кнопка сброса максимального значения оборотов двигателя, подключённые к Arduino. А исходные коды приложения на C#, которое перенаправляет данные из игры в Arduino, и собственно код программы для Arduino опубликованы на GitHub по свободной лицензии CC BY-SA 3.0: https://github.com/maindefine/dashboard

Ну и новенькое видео приборной панели:

Те, кто не видел старое видео, рекомендую посмотреть (сейчас позади приборной панели не такой колхоз, конечно):

Защищённые классы

Сегодня у меня была любопытная беседа с Дэвидом Мюрреем об идее защищённых моделей от использования в нежелательных контекстах. Он разрабатывал приложение, у которого есть репозитории, работающие с моделями, и мы подумали, что стоит попробовать защитить модели от непосредственного использования.

Ограничения

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

Давайте предположим, что конкретные классы могут быть созданы только в контексте других классов. Мы можем создать только модели Doctrine в репозиториях доктрины, модели Eloquent в Eloquent репозиториях и так далее.

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