Search
Write a publication
Pull to refresh
31
0
Артур @Ar2r

PHP/Go Developer

Send message

Функциональные опции в Go

Level of difficultyEasy
Reading time5 min
Views9.3K

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

Читать далее

Требования ACID на простом языке

Reading time6 min
Views376K

Мне нравятся книги из серии Head First O`Reilly — они рассказывают просто о сложном. И я стараюсь делать также.

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

Требования ACID — набор требований, которые обеспечивают сохранность ваших данных. Что особенно важно для финансовых операций. Мы же не хотим остаться без денег из-за разрыва соединения или ошибки в ПО, не так ли?

Читать далее

Композиция или наследование: как выбрать?

Reading time9 min
Views155K

В начале...


… не было ни композиции, ни наследования, только код.


И был код неповоротливым, повторяющимся, нераздельным, несчастным, избыточным и измученным.


Основным инструментом для повторного использования кода была копипаста. Процедуры и функции были редкостью, подозрительными новомодными штучками. Вызов процедур был дорогим удовольствием. Части кода, отделенные от основной логики, вызывали недоумение!


Мрачные были времена.


Но вот лучик ООП воссиял над миром… Правда, несколько десятилетий1 никто этого не замечал. Покуда не появился графический интерфейс2, которому, как выяснилось, очень-очень не хватало ООП. Когда нажимаешь на кнопку в окне, что может быть проще, чем отправить кнопке (или ее представителю) сообщение "Нажатие"3 и получить результат?


И вот тут ООП взлетел. Было написано множество4 книг, расплодились бесчисленные5 статьи. Так что сегодня-то каждый может в объектно-ориентированное программирование, так?


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

Как мы запускали SSP-систему, боролись с высокими нагрузками и прокачивали навыки

Reading time11 min
Views3.2K

В этот раз к нам пришел клиент, желавший запустить собственную SSP (Supply-Side Platform). Это система, которая позволяет владельцам отдельных сайтов или целых сетей продавать рекламные места и получать доход от размещения объявлений. У клиента уже был реализован MVP системы, но оставалось еще много работы.

Меня зовут Сергей Дербуш, я архитектор в компании «СмартАп Технолоджи». Расскажу о том, что мы доделывали, чтобы система заработала на полную, и как это бустануло навыки всей команды.

Читать далее

PHP. Как увеличить потребление памяти в 3 и более раз при работе с массивами

Level of difficultyMedium
Reading time12 min
Views20K

1. Общие сведения.
2. Увеличиваем потребление памяти вдвое.
3. Увеличиваем потребление памяти втрое.
4. Ещё раз увеличиваем потребление памяти на ровном месте.
5. Заключение.

Читать далее

Постановка задачи (Job) в очередь Laravel из хранимой процедуры или триггера PostgreSQL

Level of difficultyEasy
Reading time9 min
Views5.4K

Можно ли заставить приложение на Laravel реагировать на события, происходящие в функциях и триггерах СУБД PostgeSQL? Если повезёт с конфигурацией приложения, то можно. Используя задания и очереди Laravel.

Увлекательный туториал на примере простейшего приложения.

Читать далее

Doctrine ResultSetMapping на примерах

Reading time8 min
Views22K
Doctrine ORM предоставляет разработчику удобные средства выборки данных. Это и мощный DQL для работы в объектно-ориентированном ключе, и удобный Query Builder, простой и понятный в использовании. Они покрывают большую часть потребностей, но иногда возникает необходимость использовать SQL запросы, оптимизированные или специфичные для конкретной СУБД. Для работы с результатами запросов в коде важно понимание того, как работает маппинг в Doctrine.


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

Управление высокодоступными PostgreSQL кластерами с помощью Patroni. А.Клюкин, А.Кукушкин

Reading time62 min
Views162K

Расшифровка доклада/tutorial "Управление высокодоступными PostgreSQL кластерами с помощью Patroni". А.Клюкин, А.Кукушкин


Patroni — это Python-приложение для создания высокодоступных PostgreSQL кластеров на основе потоковой репликации. Оно используется такими компаниями как Red Hat, IBM Compose, Zalando и многими другими. С его помощью можно преобразовать систему из ведущего и ведомых узлов (primary — replica) в высокодоступный кластер с поддержкой автоматического контролируемого (switchover) и аварийного (failover) переключения. Patroni позволяет легко добавлять новые реплики в существующий кластер, поддерживает динамическое изменение конфигурации PostgreSQL одновременно на всех узлах кластера и множество других возможностей, таких как синхронная репликация, настраиваемые действия при переключении узлов, REST API, возможность запуска пользовательских команд для создания реплики вместо pg_basebackup, взаимодействие с Kubernetes и т.д.


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


  • область применения: какие задачи HA успешно решаются Patroni
  • обзор архитектуры
  • создание тестового кластера
  • утилита patronictl
  • изменение конфигурации PostgreSQL для кластера, управляемого Patroni
  • мониторинг с помощью API
  • подходы к переключению клиентов
  • дополнительные возможности: ручное переключение, перезагрузка по расписанию, режим паузы
  • настройка синхронной репликации
  • расширяемость и универсальность
  • частые ошибки и их диагностика

Ретроспектива: быть или не быть?

Reading time4 min
Views3.1K

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

Начнем с того, что вся продуктовая часть Сравни делится на кроссфункциональные команды. В каждой продуктовой команде есть свой разработчик, аналитик, тестировщик и тд. Сейчас в разных продуктовых командах работает 21 тестировщик. Вместе с развитием продуктов у нас появилась проблема, которая заключалась в рассинхронизации команды тестировщиков: коллеги не знали, кто чем занимается внутри маленьких команд, каждый тестировщик находился в своем “мире” внутри команды. Мы поняли, что начинать работу по улучшению нам надо с командообразующего инструмента. 

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

Читать далее

Организация PHP-тестов с большими массивами данных

Reading time4 min
Views3.9K

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

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

В результате был написан скрипт, который позволяет извлекать массивы данных из php-файлов, а также из обычных текстовых файлов, и подставлять эти данные в код теста. Позже этот скрипт был оформлен в php-пакет test-data-provider.

Читать далее

Атаки на сеть. Часть 2

Reading time5 min
Views15K

Основной темой данной части будет сканирование и сбор данных о хостах в сети. Рассмотрим основные методы определения наличия рабочих хостов и сервисов в сети. Первую часть можно прочитать здесь.

Читать далее

Laravel: разработка пакетов

Reading time15 min
Views13K

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

Для лучшего понимания данного материала рекомендуется ознакомиться с разделом о разработке пакетов в официальной документации Laravel. А для более детального изучения темы будет полезен данный ресурс.

Данная статья в большей мере ориентирована на начинающих разработчиков.

Читать далее

Мониторинг и управление потоком задач в рамках взаимодействия микросервисов

Reading time11 min
Views7.8K


Ключевые тезисы:

  • Взаимодействие между компонентами напрямую друг с другом может привести к неожиданному поведению, в котором сложно будет разобраться разработчикам, операторам и бизнес-аналитикам.
  • Чтобы обеспечить устойчивость бизнеса, вам нужно видеть все возникающие в системе взаимодействия.
  • Добиться этого позволяют разные подходы: распределённая трассировка, обычно не учитывающая бизнес-аспекты; озёра данных, требующие заметных усилий по настройке получаемых срезов данных; отслеживание процессов, когда вам приходится моделировать интересующий поток задач; контроль и анализ процессов (process mining), позволяющие исследовать поток задач; и вплоть до оркестрации, в которой прозрачность процессов уже имеется.
  • Мы поговорим о том, что вам нужно балансировать между оркестрацией и хореографией микросервисной архитектуры, чтобы понимать, управлять и менять свою систему.
Читать дальше →

PHP: изменение стуктуры БД в командной разработке

Reading time6 min
Views9K


В мире PHP хорошо известны инструменты миграций структуры БД — Doctrine, Phinx от CakePHP, от Laravel, от Yii — это то первое, что пришло в голову. Наверняка, есть еще с десяток. И большинство из них работают с миграциями — командами для внесения инкрементных изменений в схему базы данных.

Я не буду описывать зачем это, на хабре много постов на эту тему. Например:


Далее, развитие моего опыта работы в команде с постоянным изменением структуры БД в разных ветках.
Читать дальше →

PgGraph — утилита для архивации и поиска зависимостей таблиц в PostgreSQL

Reading time10 min
Views5.3K

Сегодня я хочу представить читателям Хабра утилиту, написанную на Python, для работы с зависимостями таблиц в СУБД PostgreSQL.

API утилиты простое и состоит из трех методов:

  • archive_table — рекурсивная архивация/удаление строк с указанными Primary Keys
  • get_table_references — поиск зависимостей для таблицы (покажет таблицы, на которые ссылается указанная и ссылающиеся на нее)
  • get_rows_references — поиск строк в других таблицах, которые ссылаются на указанные строки в нужной таблице
Читать дальше →

Что накапать в глаз, чтобы не чесался

Reading time9 min
Views19K

Аллергопробы. Ищем тот самый мятлик, на который аллергия

Коты начинают репетировать радостные вопли под окном, ненормальный скворец снова решил, что кондиционер отличное место для гнезда, а солнце упорно намекает, что зима почти закончилась.

Все радуются. А я страдаю в предвкушении всех радостей аллергии на пыльцу, когда хочется выходить на улицу исключительно в скафандре. Мне почему-то кажется, что на Хабре найдётся немало собратьев по несчастью, и им будет интересно разобраться, что это за гадость и как с ней жить. А ещё я расскажу, зачем в моей дамской сумочке лежит коробка Преднизолона и Блефарогель.
Читать дальше →

«Коллеги, дышите потише»: почему офисный шум сводит нас с ума — обсуждаем исследования

Reading time5 min
Views40K
Для многих людей опенспейсы — символ корпоративного ада. Противники открытой планировки говорят об ощущении переполненного муравейника, который населяют не люди, а производственные единицы. Разберемся, откуда появляется такое ощущение. И какую роль в этом играет шум.

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

PHP-Дайджест № 134 (24 июня – 8 июля 2018)

Reading time4 min
Views16K

В выпуске: PHP 7.3.0 alpha 3, PHPStan 0.10, Yii 1.1.20 и другие релизы, свежее предложение из PHP Internals по сравнению объектов, порция полезных инструментов, и многое другое.
Приятного чтения!

Памятка евангелиста PostgreSQL: репликанты против репликации

Reading time14 min
Views37K


В продолжение серии публикаций «Памятка евангелиста PostgreSQL...» (1, 2) дорогая редакция снова выходит на связь, на этот раз с обещанным обзором механизмов репликации в PostgreSQL и MySQL. Главным поводом для написания послужила частая критика репликации MySQL. Как это часто бывает, типичная критика представляет из себя забористую смесь из правды, полуправды и евангелизма. Всё это многократно реплицируется разными людьми без особых попыток разобраться в услышанном. А поскольку это довольно обширная тема, я решил вынести разбор в отдельную публикацию.
Читать дальше →
1
23 ...

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Date of birth
Registered
Activity