Очередь сообщений и асинхронные задачи с помощью Celery и RabbitMQ

Асинхронное или неблокирующее выполнение операций - это такой метод исполнения, при котором некоторые задачи выполняются отдельно от основного потока программы. Такой подход даёт несколько преимуществ, одно из которых - непрерывная работа кода на стороне пользователя. Передача сообщений - это метод, при помощи которого компоненты программы могут взаимодействовать друг с другом и передавать информацию. Она может быть выполнена как синхронно, так и асинхронно, а так же она обеспечивает процесс коммуникации между отдельными частями программы. Передача сообщений часто применяется в качестве альтернативы базам данных, причем такой метод обеспечивает дополнительный функционал как улучшение производительности и работа в оперативной памяти. (далее…)

Балансировка нагрузки для NGINX

Недавно я написал статью на тему как настроить распределение нагрузки на Nginx, включил в неё немного примеров кода, но, как мне показалось, не всем пользователям она показалась исчерпывающей (включая меня). Поэтому сегодня я приведу пример настройки из реального опыта. (далее…)

Symfony 2 Joboard : API для партнёров

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

Создаём игру крестики-нолики на Kivy

Kivy - кросcплатформенный графический фреймворк на Python, направленный на создание новейших пользовательских интерфейсов даже для приложений, работающих с сенсорными экранами. Приложения, написанные на Kivy, могут работать не только на таких традиционных платформах как Linux, OS X и Windows, но также на Android, iOS и Rapberry Pi. Это означает, что в разработке можно использовать различные библиотеки, как Requests, SQLAlchemy или даже NumPy. Допускается даже доступ к нативным мобильным API посредством дочерних проектов Kivy. Еще одна отличительная черта Cython - оптимизированный конвейерный обработчик OpenGL. При его помощи можно легко добиться сложных GPU эффектов, не прибегая к сложным конструкциям в коде. (далее…)

Symfony 2 Joboard : RSS

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

Symfony 2 Joboard : Безопасность

Безопасность - это двухэтапный процесс, целью которого является запретить или разрешить доступ к ресурсу для определённых групп пользователей. Первый этап - аутентификация - система идентифицирует пользователя, исходя из предоставленных им данных. На втором этапе система переходит к авторизации и определяет, имеет ли пользователь доступ к определенным данным. (далее…)

Пространства имён в PHP

Начиная с версии 5.3 в PHP были добавлены пространства имен. Должен сказать, что большинство современных языков программирования уже довольно давно поддерживают этот функционал, так что можно сказать, что PHP немного задержались. Тем не менее, давайте рассмотрим как же это нововведение повлияло на разработку приложений. PHP не позволяет использовать два класса с одинаковым названием. Они должны быть уникальны. Представьте себе, вы используете какую-либо стороннюю библиотеку, в которой присутствует класс User. Это означает, что свой собственный класс с таким же названием вы уже не сможете использовать. Что не совсем нам подходит, ведь название для класса очень даже удобное. (далее…)

Веб аналитика с помощью фреймворка MongoDB Aggregation

До версии 2.1 для агрегации в MongoDB (группировка документов по ключам, вычисление общего или среднего значения и т.д.) приходилось использовать MapReduce., что довольно успешно делали программисты практически на интуитивном уровне. Конечно, присутствует определенный порог вхождения для полного понимания процесса, но использование MapReduce в приложении, написанном не на JavaScript, требует “хакерских” способностей. Приходится распределять данные и сокращать функции на JavaScript, код в качестве обычных строковых данных отправлять на сервер MongoDB. Довольно часто вследствие такого подхода мы получаем практически нечитаемый код. (далее…)

Как создать таблицы в MySQL и MariaDB на сервере Ubuntu

Что такое MySQL и MariaDB?

MySQL и MariaDB две наиболее распространенные СУБД, использующие язык запросов SQL. Довольно большое число приложений для Ubuntu в той или иной степени используют MySQL или MariaDB, чтобы хранить свои данные. В этой статье мы рассмотрим как создавать таблицы для MySQL и MariaDB. Все примеры, приведенные ниже, проверялись на сервере Ubuntu 12.04 VPS, но они должны работать на любой машине с установленной системой Ubuntu. (далее…)

Как базовые шаблоны помогают понять принцип работы контроллеров

Пол М. Джонс однажды завёл интересное обсуждение на тему применения шаблона MVC в веб, основные моменты которой он описал в статье Action-Domain-Responder. Предлагаю вам познакомиться с ней, после чего вы всегда сможете вернуться и прочитать эту статью. Хочу отметить, что я почти полностью разделяю мнение автора и, более того, я смог даже внести свою лепту при общении с Полом. Но всегда оставался один момент, на счет которого я имел свою точку зрения, и, наконец, я собрался с мыслями и решил изложить её. Контроллеры - действия в ADR - можно описать при помощи шаблона проектирования фасад. (далее…)