Шаблоны проектирования в PHP : Цепочка обязанностей

Назначение паттерна? Паттерн Chain of Responsibility (Цепочка обязянностей) позволяет избежать жесткой зависимости отправителя запроса от его получателя (т.е. обеспечивается слабая связанность компонентов системы), при этом запрос может быть обработан несколькими объектами. Объекты-получатели связываются в цепочку. Запрос передается по этой цепочке, пока не будет обработан. Вводит конвейерную обработку для запроса с множеством возможных […]

Nunjucks: Шаблонизатор для JavaScript

Фреймворки шаблонизаторы отделяют макет (разметку страницы) динамических веб-сайтов и приложений от интегрированной в них логики. Все фреймворки поддерживают различные формы циклов, условной логики и специального форматирования. Но мне хотелось получить такой движок, который бы располагал продвинутыми инструментами построения страницы для нескольких целей: для совместного использования разметки на страницах; для включения […]

Nested Set

Хранение иерархических структур при помощи модели вложенных множеств Создание модели для хранения иерархических данных — совсем непростая задача. Что же мы подразумеваем под иерархическими данными? Представьте, что вам необходимо организовать список продуктов по категориям. Например, у вас будет несколько основных категорий: продукты, оборудование, электроника. А далее вам потребуется разбить их […]

Symfony 2 Joboard : Отправка писем через Mailer

Symfony по-умолчанию содержит в себе один из лучших решений в PHP для организации рассылки — Swift Mailer. Конечно же библиотека полностью интегрирована с Symfony и включает в себя некоторые дополнительные функции. Давайте начнем с отправки простого письма с токеном, в котором партнеру сообщается, что его аккаунт был активирован. Но сначала надо […]

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

Чтобы начать понимать Python достаточно хотя бы немного знать английский язык. Как показывают исследования Ассоциации Вычислительной Техники, язык Python занимает лидирующие позиции в качестве первого языка программирования во многих американских колледжах. По опросу 39 передовых IT факультетов США, он сместил Java и стал первым языком программирования общего назначения, на который обращают […]

Google AI разработала ActiveQA на основе TensorFlow

Google AI выпустила пакет ActiveQA — проект, направленный на исследование использования усиления обучения для тренировки ИИ-агентов. Понимание языка — одна из наиболее важных проблем, которые решают специалисты из Google AI, применяя методы машинного перевода, анализа синтаксиса, семантики и так далее. Одним из наиболее активных направлений исследований стала возможность обучения ИИ давать конкретный ответ на вопрос пользователя.

Как установить и использовать Redis

Что такое Redis? Redis был разработан в 2009 году и представляет собой хранилище типа ключ-значение. Следуя опыту таких NoSQL баз данных, как Cassandra, CouchDB и MongoDB, Redis позволяет хранить большой объем данных без ограничений реляционных баз данных. Также его часто сравнивают с memcache, он находит применение в качестве БД для […]

Шпаргалка по оптимизации индексирования в Elasticsearch

Планируете проиндексировать большой объем данных в Elastisearch? Или вы уже пытались это сделать, но производительность не обрадовала? В этой статье я приведу ряд советов по ускорению процесса индексирования с Elasticsearch. Одни я опробовал лично, про другие просто читал, но считаю, что они должны помочь. В любом случае, надеюсь, мои советы […]

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

Асинхронное или неблокирующее выполнение операций — это такой метод исполнения, при котором некоторые задачи выполняются отдельно от основного потока программы. Такой подход даёт несколько преимуществ, одно из которых — непрерывная работа кода на стороне пользователя. Передача сообщений — это метод, при помощи которого компоненты программы могут взаимодействовать друг с другом […]

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

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