Киберспорт. Warcraft III: The Frozen Throne

Уже не первый раз мы публикуем различные тактики для Warcraft III: Reign of Chaos. Однако с выходом аддона Warcraft III: The Frozen Throne тактика игры за разные расы очень изменилась. В предыдущем номере вы могли прочесть подробную статью об изменениях по тактике игры в целом, а начиная с этого номера, мы предлагаем вашему вниманию цикл статей, посвященных подробному описанию тактик за каждую сторону. (далее…)

Использование Service Worker

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

Как сделать push-уведомления на сайте для Chrome

С 2015 года начала стремительно набирать популярность технология Push API от Chrome. Все чаще, заходя на различные новостные (и не только новостные) сайты, посетителям вылетает вот такой системный фрейм с запросом:

Системное окно Google Chrome, запрашивающее разрешение на доставку уведомлений от сайта.

(далее…)

Контейнеры, итераторы, функторы, алгоритмы

Контейнеры и итераторы

Контейнерcontainer— класс, объекты которого способны хранить набор однотипных значений (обобщение понятия “массив”). Контейнер предоставляет средства доступа к своему содержимому. В Стандартной библиотеке C++ эти средства доступа строятся на обобщении понятия “указатель на элемент массива”, которое носит названиеитераторiterator.
(далее…)

Подводные камни Service Workers

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

Под капотом Redis: Хеш таблица и Список

Судите сами — LISTсостоит из ziplist/linkedlist, SET состоит из dict/intset, а SORTED SET это ziplist/skiplist. Мы уже рассмотрели словарь (dict), а во второй части статьи будем рассматривать структуру ziplist — вторую наиболее часто применимую структуру под капотом Redis. Посмотрим на LIST — вторая часть его «кухни» это простая реализация связного списка. Это пригодится нам, чтобы внимательно рассмотреть часто упоминаемый совет об оптимизацию хеш таблиц через их замену на списки. Посчитаем сколько памяти требуется на накладные расходы при использовании этих структур, какую цену вы платите за экономию памяти. Подведём итоги при работе с хеш таблицами, при использовании кодировки в ziplist. (далее…)

Интерфейс командной строки

Операционная среда или окружение environment — интерфейс, предоставляемый пользователю или программе операционной системой. В частности, пользовательский интерфейс является частью операционной среды. Командная строка command line — принцип организации пользовательского интерфейса на основе ввода текстовых команд с клавиатуры и текстового вывода результатов на экран. Интерфейс на основе командной строки — command line interface, CLI.   Оболочка командной строки или просто оболочка shell — программное обеспечение, отвечающее за поддержку командной строки (обычно это компонент ОС, но может быть и сторонним ПО). Примеры: cmd.exe и Powershell в Windows, sh, csh, bash, ksh и др. в Unix-подобных системах. Оболочка командной строки предоставляет собственное окружение: “переменные среды” environment variables (глобальные и локальные для текущего сеанса) и интерпретатор текстовых команд. Пакетный файл batch file или сценарий — содержащий команды оболочки файл, который можно запустить на исполнение как исполняемый файл. Терминал (от лат. terminus — граница) — устройство или ПО, выступающее посредником между человеком и вычислительной системой. Обычно данный термин используется, когда точка доступа к системе вынесена в отдельное физическое устройство и предоставляет свой пользовательский интерфейс на основе внутреннего интерфейса (например, сетевых протоколов). Консоль console — исторически реализация терминала с клавиатурой и текстовым дисплеем. В настоящее время это слово часто используется как синоним сеанса работы или окна оболочки командной строки. В том же смысле иногда применяется и слово “терминал”. Консольное приложение console application — вид ПО, разработанный с расчётом на работу внутри оболочки командной строки, т.е. опирающийся на текстовый ввод-вывод.
(далее…)

Doctrine 2 для Symfony 3.3.6: Создание сущности, ассоциации и рекурсивные связи

Создание сущности

Буду все консольные команды писать в манере, как если Composer не установлен в системе. Установим для начала Symfony:
# Не забудьте на этом этапе указать верные пароль и логин для базы данных.
php composer.phar create-project symfony/framework-standard-edition ./gentlemans_set "v3.3.6"
# Переходим в папку проекта после установки
cd gentlemans_set/
# Запускаем создание базы данных
php bin/console doctrine:database:create
(далее…)

Битовые операции в PHP на примерах

 Обратил внимание, что несмотря на то, что коды ошибок в PHP специально заточены под битовые операции, тем не менее, что в примерах статьи, что в комментариях, для проверки кодов ошибок используются обычные операторы сравнения. Например, встречались такие варианты:

if ($error['type'] == E_ERROR || $error['type'] == E_PARSE || $error['type'] == E_COMPILE_ERROR){…}
или
if(in_array($error['type'], array(E_ERROR, E_PARSE,  E_COMPILE_ERROR)) {…}
В связи с этим решил написать небольшую статью о битовых операциях с примерами их использования.  (далее…)

Инкремент в PHP

Возьмите переменную и увеличьте её на 1. Звучит просто, верно? Ну… С точки зрения PHP-разработчика, наверное, да. Но так ли это на самом деле? Здесь могут возникнуть некоторые трудности. Существует несколько способов инкрементировать значения, они могут выглядеть равноценными, но под капотом PHP работают по-разному, что может привести к, так сказать, интересным результатам. (далее…)