Pull to refresh
3
0.3
Роман @joffer

User

Send message

PHP функции и способы их применения

Level of difficultyEasy
Reading time11 min
Views1.6K

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

Читать далее
Total votes 20: ↑19 and ↓1+23
Comments27

Пример использования Workerman и Symfony Messenger

Level of difficultyEasy
Reading time5 min
Views1.4K

Недавно мной был создан самодостаточный пример совместной работы компонентов Symfony Messenger и Symfony Console, подробно описанный в статье https://habr.com/ru/articles/817425/.

Для демонстрации работы этого примера нужно вручную запустить несколько консолей (терминалов), а потом в каждой вручную запустить Worker.

Мой внутренний перфекционист :-) сильно против этого возражал и говорил «а вот бы все эти консоли-терминалы запускались одной командой, в нужном количестве, сразу с Worker’ами, а если какой Worker упадёт, то заново запускались в нужном количестве».

Возражать своему внутреннему перфекционисту я не стал и создал ещё один пример работы Symfony Messenger, который запускается Worker’ами из PHP фреймворка Workerman. При этом Symfony Console вообще не используется.

Пример: Workerman и Symfony Messenger
Total votes 3: ↑3 and ↓0+4
Comments4

Управление памятью в PHP. Сборка мусора, слабые ссылки и прочая челядь

Level of difficultyMedium
Reading time11 min
Views12K

1. Введенние.
2. Zval.
3. Циклические ссылки.
4. Сборщик мусора.
5. Алгоритм работы сборщика мусора.
6. Смотрим глазами.
7. Слабые ссылки.
8. Бонус-трэк: WeakMap.
9. Заключение.

Читать далее
Total votes 23: ↑22 and ↓1+26
Comments6

Во что поиграть? — Resident Evil 3: Nemesis

Level of difficultyEasy
Reading time2 min
Views4.1K

Последние годы ознаменовались выходом отличных Resident Evil 2, 4 и Village. Что же касается переиздания культовой для СНГ третьей части, то, в отличие от ремейка RE2, многие настоящие фанаты не были столь довольны игрой, несмотря на высокое качество. Её ругали за возросшую динамику, превращающую игру из неспешного хоррора с головоломками, местами довольно медитативного, в драйвовый экшен с отстрелом оживших мертвецов. Кроме того, фанаты и критики указывали на существенно меньшую сюжетную компанию (в сравнении со вторым ремейком). Что ж, я не буду ни хвалить, ни ругать обновлённую версию тройки, а предложу вам ностальгическую альтернативу.

Читать далее
Total votes 28: ↑22 and ↓6+31
Comments8

Наследование Entity в Doctrine

Level of difficultyMedium
Reading time7 min
Views3.7K

В практике разработки веб-приложений иногда возникает необходимость расширения сущностей, которые представляют таблицы базы данных в коде. Для примера рассмотрим следующую ситуацию: в нашем проекте была реализация класса автотранспортного средства Car, но спустя некоторое время появилась возможность ввести еще один класс автотранспортного средства под названием Buggy. Новый класс, имел одинаковые поля и представлял схожую концепцию. Нам важно было иметь возможность работать с ним как с объединенным типом Auto, а также как с отдельным типом.

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments10

Давайте уже разберемся в DNS

Reading time8 min
Views442K

image
Внимательный читатель найдет на этой картинке IPv6


Люди часто озадачены доменами. Почему мой сайт не работает? Почему эта хрень поломана, ничего не помогает, я просто хочу, чтобы это работало! Обычно, вопрошающий или не знает про DNS, или не понимает фундаментальных идей. Для многих DNS — страшная и непонятная штука. Эта статья — попытка развеять такой страх. DNS — это просто, если понять несколько базовых концепций.


Что такое DNS


DNS расшифровывается как Domain Name System. Это глобальное распределенное хранилище ключей и значений. Сервера по всему миру могут предоставить вам значение по ключу, а если им неизвестен ключ, то они попросят помощи у другого сервера.


Вот и все. Правда. Вы или ваш браузер запрашивает значение для ключа www.example.com, и получает в ответ 1.2.3.4.

Читать дальше →
Total votes 52: ↑48 and ↓4+44
Comments36

Wireshark — подробное руководство по началу использования

Level of difficultyMedium
Reading time8 min
Views184K

Wireshark – это широко распространённый инструмент для захвата и анализа сетевого трафика, который активно используется как для образовательных целей, так и для устранения неполадок на компьютере или в сети. Wireshark работает практически со всеми протоколами модели OSI, обладает понятным для обычного пользователя интерфейсом и удобной системой фильтрации данных. Помимо всего этого, программа является кроссплатформенной и поддерживает следующие операционные системы: Windows, Linux, Mac OS X, Solaris, FreeBSD, NetBSD, OpenBSD.

Читать далее
Total votes 32: ↑30 and ↓2+36
Comments21

Charles Proxy на пальцах: главный помощник QA и разработчиков

Level of difficultyEasy
Reading time8 min
Views46K

Привет, меня зовут Света и я тимлид Mobile QA в Emerging Travel Group. В этой статье я простым языком расскажу про один из самых полезных и простых в использовании инструментов тестирования мобильных приложений — мистер Charles Proxy, и покажу на примерах некоторые самые полезные его функции.

Для начала разберёмся, кто вообще такой этот Charles.

Charles Proxy — это сниффер (sniffer – перехватчик) трафика, инструмент для анализа трафика, который позволяет отслеживать, записывать и анализировать сетевые запросы между устройствами и интернетом.

Charles — не единственный инструмент для анализа трафика, у него есть аналоги, например: WhireShark, Fiddler, Proхyman, mitmproxy. Все они в той или иной степени про одно, различие лишь в интерфейсе, поддержке разных платформ, и наборе функционала.

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments21

Оптимизация бэкенда приложения с примерами на Symfony. Часть 2

Reading time20 min
Views8.9K

Всех приветствую!

Это продолжение серии статей, где мы рассмотрим еще несколько методов, которые помогут улучшить производительность приложения. Мы поговорим о том, как использовать entity manager, unit of work, bulk inserts и batching processing для более эффективной работы с базой данных.

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

В предыдущей статье мы говорили о проблеме n+1, видах пагинации и индексах. Там же Вы можете найти описание приложения, репозиторий проекта и схему данных.

Читать далее
Total votes 13: ↑11 and ↓2+9
Comments9

Оптимизация бэкенда приложения с примерами на Symfony. Часть 1

Reading time6 min
Views5.7K

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

В текущей статье, рассмотрим темы - n+1, пагинация и индексы. Приятного чтения!

Описание приложения

Рассматриваемый проект - это веб-журнал посещений различных мест людьми с возможностью выгрузки и загрузки журнала в формате XML. Пользователь может загрузить журнал посещений в формате XML через форму на странице /upload, и на основе информации из файла будет заполнена база данных. Вся информация о посещениях будет отображаться на главной странице /index. Экспорт из системы осуществляется через команду, которая преобразует информацию из системы в формат XML и выгружает ее в файл (data.xml).

Читать далее
Total votes 7: ↑6 and ↓1+6
Comments4

Отменить нельзя продолжить

Level of difficultyMedium
Reading time7 min
Views9.9K

Как описать асинхронную цепочку запросов и не сломать всё? Просто? Не думаю!

Я автор менеджера состояния Reatom и сегодня хочу вам рассказать про главную киллер-фичу redux-saga и rxjs и как теперь её можно получить проще, а так же про грядущие изменения в стандарте ECMAScript.

Речь пойдёт об автоматической отмене конкурентных асинхронных цепочек — обязательном свойстве при работе с любым REST API и другими более общими асинхронными последовательными операциями.
Читать дальше →
Total votes 33: ↑30 and ↓3+38
Comments21

Bash скрипты

Level of difficultyEasy
Reading time13 min
Views117K

Работа с командной строкой Linux & Shell скрипты для начинающих.

В Linux автоматизация процессов в значительной степени решается исполняемыми скриптами в shell оболочке. Это подразумевает под собой создание файла, содержащего ряд команд, которые исполняются последовательно.

В этой статье мы обсудим основы написания сценариев bash, включая переменные, команды, ввод/вывод и отладку. Каждый пункт сопроводим примерами.

Начнем.

Читать далее
Total votes 16: ↑9 and ↓7+6
Comments81

Статический анализ. PHPStan

Level of difficultyEasy
Reading time4 min
Views7.5K

Цель статьи - помочь разработчикам которые много слышали про статический анализ, но пока что так и не поняли что это такое и с чем его едят.

Статический анализ

Анализ программного обеспечения, производимый без реального выполнения исследуемых программ, процесс выявления ошибок и недочетов в исходном коде программ. Список языков для которых существуют статические анализаторы кода достаточно велик - Си, Си++, C#, Java, Ada, Fortran, Perl, Ruby и т.д.  Компиляторы различных языков программирования во время своей работы так же запускают статические анализаторы (как правило усеченные версии) которые находят ошибки. Т.о. использование статичского анализа, в поисках ошибок, приравнивает (а может даже и превосходит, все зависит от используемого анализатора и стиле написания приложения) PHP к компилируемым языкам программирования.

Сообщество PHP прикладывает значительные усилия в сторону развития статического анализа, так типы mixed и never были добавлены для лучшего анализа программами статического анализа.

Необходимость статического анализа

Статический анализ позволяет найти уйму различных проблем в коде, начиная от неправильного использования конструкций языка, заканчивая опечатками.  При проведении code review позволяет сосредоточиться на просмотре реализации логики программы, а не на поиске синтаксических ошибок, опечаток, ошибок в данных, мертвый код и т.п.

Читать далее
Total votes 8: ↑6 and ↓2+4
Comments8

Взаимодействие между процессами на С++ и PHP. Сокеты, семафоры и разделяемая память

Level of difficultyMedium
Reading time9 min
Views6.8K

Доброго всем дня!

Хочу рассказать о своём практическом опыте реализации взаимодействия между процессами в среде Linux в условиях, когда вычислительных ресурсов существенно не хватает. По условию, один из процессов написан на C++, второй на PHP, потому дополнительно мы рассмотрим доступность соответствующих API из PHP а также варианты действий в случае, когда для нужного API PHP-обёртка отсутствует.

Читать далее
Total votes 24: ↑24 and ↓0+24
Comments23

Пути и графы

Level of difficultyMedium
Reading time14 min
Views6.1K

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

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

Читать далее
Total votes 3: ↑2 and ↓1+1
Comments6

Clean Architecture, DDD, гексагональная архитектура. Разбираем на практике blog на Symfony

Level of difficultyMedium
Reading time91 min
Views70K

Всем привет! Давайте знакомиться ;) Я Аня, и я php разработчик. Основной стек - Magento. С недавних пор начала посматривать налево на Symfony и писать свои Pet Projects на этом фреймворке.

Мне всегда нравилось писать решения которые легко бы расширялись / адаптировались под требования бизнеса (заказчика). И мне всегда хотелось сделать это более 'правильно' и красиво. Так я и познакомилась с понятиями чистой архитектурой.

Мой пост ни в коем случае не претендует на самый правильный. Но позвольте мне здесь донести свои идеи. В комментариях буду рада услышать конструктивную критику к данному посту.

Для нетерпеливых, вот прямая ссылка на гитхаб

Читать далее
Total votes 23: ↑20 and ↓3+23
Comments34

Отправка уведомлений из Symfony API с помощью Mercure

Reading time7 min
Views2.1K

В статье я создал атрибут, чтобы помечать операции API для выполнения в фоновом режиме. Когда аннотированная операция вызывалась как фоновая, ее выполнение задерживалось с помощью symfony messenger, клиент получал в ответ код состояния HTTP 202 Accepted. В этой статье я внесу некоторые изменения, которые позволят операции уведомлять пользователя о завершении. Чтобы реализовать это, я буду использовать mercure, так как symfony очень хорошо с ним интегрируется.

Читать далее
Total votes 6: ↑5 and ↓1+5
Comments0

CLI инструменты, которые облегчат времяпровождение в терминале и сделают его приятнее

Reading time6 min
Views51K

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

В этом посте описан мой топ-25 обязательных инструментов CLI, на которые я привык полагаться. Если тут нет вашего любимого - дайте мне знать в комментариях :)

Читать далее
Total votes 100: ↑93 and ↓7+100
Comments83

Заканчивается 2022 год, а я всё ещё использую Flash

Reading time14 min
Views18K
В 2020 году Adobe прибила Flash Player, но я не захотел, чтобы мои Flash-игры пропали навечно.

С разными промежутками я делал игры всю свою жизнь, но людям особенно нравилась серия Hapland, поэтому я решил, что неплохо было бы исправить их для релиза в Steam. Можно нарисовать графику получше, повысить частоту кадров и разрешение, а может, и добавить новых секретов и тому подобного.


Hapland 2

Проблема в том, что игры Hapland по большей части созданы на Flash. Графика нарисована во Flash, код написан во Flash, все анимации выполнены в таймлайне Flash. Технология Flash стала их плотью.

Как же мне их улучшить?
Читать дальше →
Total votes 88: ↑88 and ↓0+88
Comments13

Честные модули внутри PHP: теперь они существуют

Reading time15 min
Views8.9K

Низкий порог входа и строгость языка программирования — вещи обычно несовместимые. Потому что ты либо, как Rust, бьёшь по рукам borrow checker’ом — либо, как PHP, позволяешь не задумываться о типах и быстро прототипировать. 

На самом деле, если писать код грамотно, это становится неважным и язык перестаёт иметь значение. Архитектура важнее языка, и хороший код на PHP ничем не отличается от аналогичного кода на любом другом ООП-языке. Другое дело, что возможность «любой домохозяйке» писать на PHP сопровождается и риском наворотить полное неподдерживаемое безобразие. Поэтому нам нужны тайпхинты, линтеры, статические анализаторы и подобные инструменты. 

Но в PHP есть и ещё один изъян: в нём любой класс, функция или константа — глобальны. Можно создать класс из любого места в коде, и нет способа скрыть его или сделать деталью реализации где-то в отдельной папке. Иными словами, в PHP нет того, что в других языках называется модулями.

Наша новая open-source разработка называется Modulite и внедряет в PHP модули. Это сквозная технология: мы внедряемся в IDE, в PHPStan, в KPHP, в CI, в Composer — и делаем так, будто бы модули нативно есть в языке PHP.

Читать далее
Total votes 46: ↑43 and ↓3+55
Comments10
1

Information

Rating
2,125-th
Location
Украина
Registered
Activity