Обновить
50.52

PHP *

Скриптовый язык общего назначения

Сначала показывать
Порог рейтинга
Уровень сложности

Я сомневался в юнит-тестах, но…

Время на прочтение6 мин
Количество просмотров7.5K
Когда я пишу тест, то часто не уверен, что мой дизайн будет на 100% удачным. И хочу, чтобы он давал гибкость в рефакторинге кода — например, чтобы затем изменить класс, не меняя код теста.



Но если у меня стандартная пирамида, внизу которой много юнит-тестов, то не получится ли так, что тесты будут знать не про поведение системы, а про то, какие классы там есть?

Laravel–Дайджест (5–11 октября 2020)

Время на прочтение2 мин
Количество просмотров5.1K

Полное руководство по аутентификации в Laravel. Новый фасад для ограничения скорости запросов. Быстрое параллельное тестирование. Стрим Тейлора: видео и текстовое резюме. Видеокурс по использованию Tailwind в Laravel.


Laravel Дайджест

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

ObjectManager в Magento 2

Время на прочтение5 мин
Количество просмотров2.7K

ObjectManager можно назвать одной из основных концепций, которая лежит в основе построения Magento2, и абсолютно новый если брать в сравнении с Magento1. Если мы вспомним Magento1, то там, для создания нужных нам для работы объектов, мы использовали класс Mage, который предоставлял статические методы для создания разных типов объектов — будь то модели, ресурс-модели, хелперы, или для создания объектов, которые мы хотели иметь в едином экземпляре(метод Mage::getSingleton). При создании Magento2 команда разработчиков отказалась от этой идеи и имплементировали принцип инъекции зависимостей и сервис-контрактов(ServiceContracts). Именно это позволило сделать Magento2 такой гибкой, легко кастомизируемой и тестируемой. Так же наличие функционала построенного вокруг ObjectManager’а делает возможным наличие всего функционала кастомизации поведения системы, который мы можем настраивать посредством конфигурационного файла di.xml.


Если смотреть глобально на функционал, который реализует ObjectManager, то можно сказать, что он является некой реализацией DI container, который в мире PHP представлен в виде PSR-11, хотя сам ObjectManager напрямую не реализует Psr\Container\ContainerInterface (и не имеет метода has, наличие которого предполагает Psr\Container\ContainerInterface). Он является централизованным средством для создания и получения объектов. Наличие такого централизованного класса для генерации необходимых объектов несет в себе следующие преимущества.

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

Ловим баги на клиенте: как мы написали свою систему для сбора клиентских ошибок

Время на прочтение15 мин
Количество просмотров10K

У нас в Badoo довольно много клиентских приложений. Помимо основных продуктов Badoo и Bumble, у которых есть как веб-версии (десктопная и мобильная), так и клиенты под нативные платформы (Android и iOS), ещё есть с десяток внутренних инструментов со своими UI.  Для сбора клиентских ошибок мы используем собственную разработку под кодовым названием Gelatо. Последние два года я работал над её серверной частью и за это время открыл для себя много нового из мира разработки Error Tracking систем. 

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

Читать далее

Типобезопасная работа с массивами PHP, часть 2

Время на прочтение5 мин
Количество просмотров4.2K

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

На днях расширил функционал парой методов, и хочу поделиться с вами этими новостями.

И конечно я напишу о работе над ошибками.

Читать далее

PHP-Дайджест № 189 (21 сентября – 5 октября 2020)

Время на прочтение4 мин
Количество просмотров13K

Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 8.0 RC 1 и переименование параметров внутренних функций, PhpStorm 2020.3 EAP, многострочные короткие лямбды, атрибуты для групп свойств и другие новости PHP Internals, порция полезных инструментов, статьи, стримы, подкасты.

Приятного чтения!


Как я Дота-лигу открывал. Часть 3

Время на прочтение9 мин
Количество просмотров4.7K


Читать сначала: Как я Дота-лигу открывал. Часть 1
Продолжение: Как я Дота-лигу открывал. Часть 2
Ответвление: Как я продолжил дело Дота-лиги

Год 2008-й, середина осени. В результате вооруженного переворота у меня отобрали лигу, и теперь я стал абсолютно свободен от каких-либо обязанностей. Мне больше не надо следить за ботами, за серверами, за лигой, за админами и думать над её развитием. Наконец-то я могу изучать интересные мне технологии! Я начал ковырять PHP, и придумывать следующий проект…
Читать дальше →

Laravel–Дайджест (28 сентября – 4 октября 2020)

Время на прочтение1 мин
Количество просмотров4.3K

Пакеты для настройки каркаса аутентификации под себя. Подключаем Google Drive. Сравниваем интернет-магазины. Кастомные логи и исключения.


Laravel Дайджест

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

Как высчитать ключи перехода от любой системы координат к WGS с сантиметровой точностью?

Время на прочтение5 мин
Количество просмотров30K
Для кого этот пост — картографы, геодезисты, генпланисты, строители и т.д.

Коллеги, привет!

Решаемая проблема — получение 100% достоверных параметров для пересчета координат, например в привычные картографические градусы (WGS84). Коллеги уже поняли про что я, а любопытным поясню — дело в том, что гуляющие по интернету приложения и алгоритмы с параметрами пересчета координат например из выписки ЕГРН на вашу дачу в координаты для GPS приемника, в подавляющем большинстве будут «лаптем по карте». Для поиска объекта размером с дом, это не будет проблемой, а вот для инженерной затеи, уже слабовата точность. К примеру мы хотим обозначить границы на местности с сантиметровой точностью, найти трубу под землей или кабель, запустить беспилотник по картам с плоскими координатами, чертить чертеж в плоских координатах с картографической онлайн основой из интернета и многое другое, что требует субметровой точности.
Читать дальше →

Перенос форума IPB в bbPress WordPress

Время на прочтение4 мин
Количество просмотров4.2K

Перенос форума Invision Power Board (Invision Community) на платформу Wordpress под bbPress

Как я переносил форум IPB на WP под bbPress. Танцы с бубном в конце недели. Все закончилось успешно, но не до конца...

Читать далее

Создание современного API на PHP в 2020 году

Время на прочтение5 мин
Количество просмотров19K
Итак, на примере этого API, я хочу показать современную PHP архитектуру для высоконагруженных проектов. Когда проект еще в самом начале, и не то, что бизнеслогика (взаимоотношения с базой данных) не прописана, но и сама бизнес модель не очень ясна, построение эффективной IT архитектуры может идти только одним путем: необходимо жестко разделить frontend и backend.

Что обычно делали в таких ситуациях два-три года назад? Брался монолитный фрейворк типа Laravel или Yii2, вся бизнес модель разбивалась, худо-бедно, на блоки, а эти блоки уже имплементировались как модули фреймворка. В итоге еще через 3 года получалась огромная не поворотная машина, которая сама по себе медленная, а становилась почти невыносимо медленной, в которой фронтенд рендится через бэкенд посредством классической MVC архитеркутуры (пользователь отправил запрос, контроллер его подхватил, вызвал модель, та в свою очередь чего-то там натворила с базой данных, вернула все контроллеру, а тот наконец-то вызвал вьювер, вставил туда данные из модели и отдал это все пользователю, который уже успел открыть очередную банку пива...). А… ну еще особо продвинутые ребята, они не просто вьюверели Tweeter Bootstrap, а во вьювер вкручивали на самом деле очень хорошие библиотеки типа JQuery или вместо вьювера использовали какой-нибудь фронтенд фреймворк. В итоге поддерживать такой БеЛаЗ становилось все сложнее, а ввести нового программиста в команду было очень сложно, ибо не все рождаются Энштейнами. Добавим сюда тотальное отсутствие документации разработчика (камменты в 9000 файлах почитаешь — там все есть!) и в итоге, смотря на это все, становилось по-настоящему грустно…
Читать дальше →

Сделайте свое приложение масштабируемым, оптимизировав производительность ORM

Время на прочтение5 мин
Количество просмотров3.6K
Перевод статьи подготовлен в преддверии старта курса «Backend-разработчик на PHP».





Привет! Я Валерио, разработчик из Италии и технический директор платформы Inspector.dev.

В этой статье я поделюсь набором стратегий оптимизации ORM, которые я использую, разрабатывая сервисы для бэкенда.

Уверен, каждому из нас приходилось жаловаться, что сервер или приложение работает медленно (а то и вовсе не работает), и коротать время у кофемашины в ожидании результатов длительного запроса.

Как это исправить?
Давайте узнаем!
Читать дальше →

Валидация в PHP. Красота или лапша?

Время на прочтение6 мин
Количество просмотров22K
Выбирая лучший PHP-валидатор из десятка популярных, я столкнулся с дилеммой. Что для меня важнее? Следование всем SOLID / ООП-канонам или удобство работы и наглядность кода? Что предпочтут пользователи фреймворка Comet? Если вы считаете, что вопрос далеко не прост — добро пожаловать под кат в длинное путешествие по фрагментам кода :)

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

Ближайшие события

Использование Nginx FastCGI Cache

Время на прочтение9 мин
Количество просмотров30K

FastCGI Cache — это система кэширования данных реализованая на уровне HTTP-сервера Nginx.

Преимущество FastCGI Cache заключается в том, что Nginx вернёт закешированный ответ пользователю сразу, как только получит запрос, при этом слой приложения не будет вовсе обрабатывать поступивший HTTP-запрос, если он имеется в кэше Nginx. 

Использование FastCGI Cache — отличный способ снизить нагрузку на вашу систему.

Если на вашем сайте есть страницы, которые изменяются редко или задержка обновления информации на некоторое время не критична, то FastCGI Cache именно то, что нужно.

Читать далее

Laravel–Дайджест (21–27 сентября 2020)

Время на прочтение2 мин
Количество просмотров3.5K

Набор уроков по восьмой версии фреймворка. Советы по Laravel и веб-разработке. Используем очереди для переноса изображений. Чистим тяжелые таблицы. Полное описание маршрутизации в Laravel.


Laravel Дайджест

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

Рефакторинг в стиле ниндзя и другие приемчики

Время на прочтение3 мин
Количество просмотров5.3K
Можно вечно смотреть на улучшать три вещи: первую, вторую и код, который написан не тобой. Именно ему мы решили посвятить один из ближайших онлайн-митапов:

  • посмотрим на код популярного опенсорс-проекта на гитхабе,
  • покажем разные подходы к его рефакторингу, обсудим полезные инструменты, возможные грабли — ну и немного попишем в прямом эфире.
  • а еще разыграем вот такого слона за лучшую историю о рефакторинге
    Истории будут приниматься в чате трансляции на Youtube. Лучшую историю субъективно выберут ведущие в конце стрима. Мы отправим слоника из Москвы в любую точку мира.

    У слона есть вторая сторона, на которой написано Symfony. Возможно, кому-то будет важно это знать.


    Слоник официальный. Ехал к нам 3 месяца.




Подключайся в ближайший четверг, 1-го октября, в 19 часов по Москве/Киеву/Минску. Тут можно посмотреть расписание стрима и получить напоминалку.

Под катом — знакомство с участниками и несколько «разогревающих» историй от них.

Собеседование php-developer (вопросы и ответы)

Время на прочтение10 мин
Количество просмотров284K
Так уж получилось, что в этом году я прошел ряд собеседований на позицию PHP разработчика, чего я не делал уже несколько лет. Будучи человеком ленивым практичным, перед собеседованием я попытался найти сборники вопросов-ответов, но все найденное было довольно старым, поэтому я решил сам подготовить список вопросов, которые встречал.

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

Система управления иерархическими древовидными комментариями для Laravel

Время на прочтение9 мин
Количество просмотров5.3K

Пакет для фреймворка Laravel, который позволяет организовать управление древовидными комментариями. Используется симбиоз двух методов хранения иерархических структур — «Closure Table» и «Adjacency List».

Совместное применение методов «Closure Table» и «Adjacency List» позволяет: Минимизировать количество запросов к базе данных. Для извлечения ветки комментариев достаточно одного запроса, обеспечить высокую производительность, гарантировать целостность данных иерархи, работать с древовидными структурами без рекурсивных запросов.

Читать далее

PHP-Дайджест № 188 (7 – 21 сентября 2020)

Время на прочтение4 мин
Количество просмотров13K

Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 8 Beta 4, инициатива по консолидации PHP-сообщества, концепт PHP для GraalVM, предложение по дженерикам в Internals, полезные инструменты, видео, подкасты, статьи.

Приятного чтения!

PHP-класс для работы с INI-файлами

Время на прочтение3 мин
Количество просмотров3.2K

Касс-помощник для работы с INI файлами. Класс расширяет возможности класса File. Класс реализует шаблон проектирования "Строитель". В представленном классе идет реализация функционала для работы с INI файлами. В качестве базового функционала представлено создание, добавление и чтение секций, добавление и удаление ключей и другой функционал.

Узнать больше