Хочу поделиться одним видео, в котором хорошо объясняется «Что такое Observable». Автор пошагово, с нуля создает свой прототип Observable. По мере роста кода и функции, видно какие цели может решать Observable. К сожалению, название видео очень плохо передает его суть, точнее очень плохо индексируется и ищется в поисковике. Само видео нашел случайно в комментариях к одному из видео, в которых автор, обычно, пересказывает официальную документацию. Поэтому, было решено оставить у себя в заметках, а также помочь в продвижении этого выступления. Observable, точнее библиотека RxJs очень плотно интегрирована в Angular. Так что если будете смотреть код Angular точно столкнетесь c Observable. Кажется, что все запросы в Angular, которые могут вернуть ответ …

How to Create a Bootable Windows 10 USB in Linux

Линукс как всегда удивляет своей «дружелюбностью». Если в винде, чтобы создать загрузочный диск, нужно просто скачать программу Rufus и запустить ее, то Линуксе пришлось потратить несколько часов на чтение и поиск, а если учесть тестирование, то целых два дня, чтобы найти верный способ. Сналала о способах, которые НЕ работают. Все действия выполнялось на Linux Mint Cinnamon. Один индуский друг на сайте https://itsfoss.com/bootable-windows-usb-linux/ советует программу Disks для создания загруочной флешки. Так вот создания загруочной флешки Windows 10 через встроенную программу Disks НЕ работает. Следующий способ через встроенную программу Usb Image Creator. Вердикт — Не работает. Вызвать эту программу можно выбрав iso образ -> нажть на ПКМ -> make bootable usb Далее, …

Самым популярным инструментом для анализа кода PHP является Codesniffer. Установить его можно как глобально, так и локально. Через композер выглядит это так:

Запуск через:

Настройка Codesniffer это отдельная тема, сейчас пойдет речь про авто запуск этой команды. Чтобы не запускать каждый раз перед коммитом или пушем, можно привязать запуск на git webhooks. Все хуки лежат в папке .git\hooks. Возьмем к примеру файл pre-commit.sample, событие вызывается до коммита. Этот хук легче всего тестировать локально, так что и другие скрипты, необходимые для других хуков, можно потренировать «на кошках» Для начала нужно переименовать или создать новый файл с именем pre-commit. Вставить туда вот такой код

Подведение итогов года 2019

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

Переписал проект Gitlab Webhooks + Redmine, интеграция с помощью вебхуков на Lumen. Основная идея — посмотреть отличия между проектом на чистом PHP и проектом на известном фреймворке. Из побочных эффектов — возможность использования Dependency Injection в тестах. С помощью Laravel Service Container and PHPUnit сделать это легко. Исходный код лежит в репозиторий: https://github.com/Carsak/GitlabWebhookExample

Gitlab webbhooks + Redmine

Задача — при создании мерж реквеста(pull request) в Gitlab обновлять задачу в Redmine. Например, обновить описание задачи, добавив ссылку на мерж реквест, или отредактировать любое другое поле. Стандартная интеграция из под коробки Gitlab не позволяла это сделать. Было решено делать это через веб хуки. Алгоритм работы: после каждого открытия мерж реквеста отправляется событие на кастомный endpoint. Будет отправляться имя ветки из MR, projectCode-issueId-task-description, откуда будет парситься ID задачи Redmine. Пример имени ветки wh-123456-add-webhooks, где 123456 — это ID задачи.

Список прочитанных книг за осень

Заметка о том, что удалось прочитать за квартал, за эту осень. За три месяца было прочитано четыре книги «Предметно-ориентированное проектирование (DDD)» Эрика Эванса, «Использование Docker» Моуэт Эдриен и «Проект Феникс. Роман о том как DevOps меняет жизнь» авторов Ким Джин, Спаффорд Джордж, Бер Кевин, также книга Mastering Gitlab 12 Packt Publishing Общие впечатления о книгах.

Docker Network

Задача — соединить два контейнера в одну сеть. Допустим это будет веб сервер nginx and php-fpm. Естественно они должны обмениваться сообщениями без проблем, ip адреса должна быть из одной подсети. Также должны находить друг друга не просто по ip адресу, но и по имени сервиса. Намного удобнее работать с именем php-service, вместо 172.21.0.2, который еще может измениться при повторном запуске. Для начала немного теории. При установке Docker-а автоматически создается три сети под название none, host, bridge. Список можно посмотреть через команду docker network ls none — у контейнера нет сети, он изолирован, ему сломали ethernet port, host — использовать сеть хоста. Чтобы присоединиться к ним, придется вручную прописать имя сети …