Как стать автором
Обновить
70.55

PHP *

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

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

Реализация простого механизма регулярных выражений в 70 строк кода

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

Эта короткая статья обязана одному интересному тестовому заданию, в котором требовалось реализовать базовый функционал утилиты grep на языке PHP, не используя никаких встроенных функций по работе с регулярными выражениями.

Строка с шаблоном должна была включать поддержку следующих метасимволов:

^ - начало строки

$ - конец строки

. - любой символ

* - 0 или более раз

? - 0 или 1 раз

+ - 1 или более раз

Так же нужно было поддерживать экранирование метасимволов при помощи '\', чтобы по ним возможно было производить поиск. В результате, получившаяся утилита занимает порядка ста строк кода, из которых 70 - это функции регулярных выражений. 

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

Читать далее

PHP 8: observability из коробки. Наблюдаемость среды выполнения

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

За последние два десятилетия виртуальная машина Zend Engine, лежащая в основе PHP, претерпела определенные улучшения. Значительный скачок производительности произошел с выходом версии PHP 7, в которой ощутимо выросла производительность WordPress и других традиционных веб-приложений. В версии PHP 8, в свою очередь, появился JIT-компилятор, значительно ускоривший выполнение ресурсоемких алгоритмов.

Однако основная ловушка наблюдения, используемая трассировщиками, профилировщиками и отладчиками для наблюдения за поведением вызова функций PHP, не развивалась параллельно улучшениям Zend Engine и все сильнее замедляла работу наблюдаемых PHP-приложений. Например, трассировщик Datadog PHP просто не мог развиваться с учетом нововведений PHP 8 без изменения ловушки наблюдения.

Выпуск PHP 8 включает в себя изменения, которые привносят в среду выполнения PHP современный уровень наблюдения. Наша команда совместно с сообществом разработчиков движка PHP разработала и выпустила новый API наблюдателя. Перед выпуском этого API мы, как и другие PHP-разработчики, столкнулись со множеством проблем.

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

Читать далее

Мой штрихкод. Code128

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

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

Первая мысль — поиск готовых библиотек. Навскидку определили критерии — с pl/sql не связываемся, пусть это будет внешний сервис: возможно кусок на javascript для генерации прямо на страничке, либо обращение за картинкой к ближайшему серверу где имеется php. Беглый поиск в интернете показал что тема истоптана весьма плотно. Есть как наколенные поделки уровня лабораторки по программированию, так и мощные библиотеки для всех вариантов кодирования вплоть до qr-кодов. Варианты с JavaScript пришлось отбросить т.к. они во первых практически все «обфусканы» (даже непонятно, то ли для сокращения объема, то ли стыдно исходники показать), во вторых генерируют строку для отображения определенным шрифтом, наличие которого не всегда можно обеспечить на рабочем месте и требует дополнительных обработок для экранирования спецсимволов. Внимательное рассмотрение библиотек и кусков кода на php тоже произвел тягостное впечатление — на первый взгляд всё вроде бы правильно: и классы написаны на все случаи жизни, комментарии в наличии, украшательства типа выбора цвета и рамочек, примеры подготовлены. Начнёшь вникать — хотят либо php самой распоследней версии (на боевых серверах не всегда это получается добыть), либо внутренняя логика не различима совсем, либо штрихкод на выходе получается длиннее ожидаемого. Вот последнее не дало покоя и подтолкнуло к собственной реализации.

Читать далее

Браузерные Push-уведомления на Javascript и PHP

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

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

В данной статье не будут "размусолены" принципы работы и тонкости Push уведомлений, только код

Читать далее

CS Cart или через терни к черной дыре костылей и оптимизаций

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

Совсем недавно, я стал разработчиком модулей для CS Cart. Случилось это по воле случая: меня взяли на работу в Петербургскую сеть интернет магазинов, торгующих вейпами и всякими интересными штуками для удовлетворения потребностей физического характера страждущих пар и одиночек (кто не понял - еще не дорос ). Оба интернет магазина развернуты на двух витринах с разными доменами, но одной админкой и общей базой данных. Что же с ней не так? Думаю о CMS написано много, но я добавлю свою ложку дегтя в бочку с дегтем .

Читать далее

Автоматическая проверка кода за 5 минут

Время на прочтение6 мин
Количество просмотров8K
Данная инструкция показывает как автоматизировать проверку на code style в вашем php проекте.

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

Курсы PHP-программирования в Минске. Куда пойти учиться?

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

Многие мечтают об успешной карьере в IT. Весь Байнет завален статьями о перспективах специалистов, работающих в этой сфере: обзоры зарплат, возможности карьерного роста, высокая востребованность. Все знают, что хорошие PHP-программисты нарасхват.

Другое дело — что не все так просто. Чтобы попасть в их ряды, нужно пройти определенный путь. Можно ли его заменить самообразованием без наставника и практики, просто реализовав правило «10 000 часов»? Как показывает опыт — нет. Кандидату в разработчики либо не хватит терпения, либо обучение будет слишком несистемным и безрезультатным. Разберемся подробнее.

Читать далее

Job — шаблон проектирования для новичков и опытных Go программистов

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

Я начал программировать на Go после достаточно продолжительного периода программирования на PHP. Полагаю судя по последним тенденциям, мой случай далеко не единичный. Go в целом набирает популярность среди Web разработчиков.

Читать далее

Эволюция команды разработки

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

Весной 2019 года меня пригласили руководить разработкой в небольшой стартап, занимающийся обработкой Big Data.

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

Читать далее

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

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

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

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

Читать далее

Кто победит: человек — венец творения или обратный слэш?

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

 
За основную часть перехода информационных систем с Oracle на PostgreSQL часто отвечают инструменты автоматической конвертации. Но среди гигантского объёма кода, покрываемого такими решениями, есть и исключительные истории, с которыми приходится импровизировать. В таких случаях первым делом, конечно, необходимо локализовать проблему, установить её причину и, чтобы подобрать правильное решение, подумать, нет ли аналогичных реальных или вымышленных ситуаций, которые могли бы иметь похожую природу. После этого обычно приходится рефакторить оригинальный код на Oracle, дорабатывать процессы конвертации и грамматику или реализовывать на PostgreSQL не имеющую аналогов функциональность Oracle. Однажды нам бросил вызов, на первый взгляд, примитивный запрос с ошибкой, для решения которой пришлось проводить целое расследование.

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

Laravel-Дайджест (3–9 августа 2020)

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

Подборка новых статей по фреймворку Laravel. Новая версия с исправлением двух уязвимостей. Книга по оптимизации приложений. Рилтайм чат на сокетах. Соблюдение SRP в Laravel.


Laravel Дайджест

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

Laravel-Дайджест (29 июня – 5 июля 2020)

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

Подборка новых статей по фреймворку Laravel. Разберемся как работает шифрование во фреймворке. Аутентифицируем пользователя по отпечатку пальца. Развернём приложение по методу zero-downtime. Спарсим данные с сайтов и выведем в удобной для себя форме. И устроим видео-стриминг.


Laravel Дайджест

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

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

7 ошибок одного Black Friday и как работает Magento Cloud — видео

Время на прочтение1 мин
Количество просмотров1.1K
Это доклады с Magento Meetup Kharkiv Online, где разработчики поделились опытом и рассказали, что такое Magento Cloud, чем хорош модуль Enhanced media gallery и как избежать ошибок в инфраструктуре, которые могут положить сайт в самый разгар сезона продаж.

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



Как переиспользовать код с бандлами Symfony 5? Часть 7. Релизный цикл, установка и обновление

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

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


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


В этой статье:


  • README.md
  • Установка: через composer, рецепты Flex, консольные команды
  • Релизный цикл, выпуск новых версий
  • Семантическое версионирование
  • Фиксация изменений в CHANGELOG.md
Читать дальше →

Как добавить уведомления в реальном времени в Laravel с помощью Pusher

Время на прочтение14 мин
Количество просмотров21K
Перевод статьи подготовлен специально для студентов курса «Framework Laravel».




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

К счастью, с Laravel и Pusher реализация этого функционала довольно проста.

Уведомления в реальном времени


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

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

Instagram api на минималках

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

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

Разворачиваем API с AWS Elastic Beanstalk

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


В конце января мы провели очередной онлайн-интенсив по курсу «Backend-разработчик на PHP». В этот раз темой открытого урока стало создание Telegram-бота для заказа кофе в заведении и оплаты онлайн. Вебинар получился очень насыщенным, поэтому растянулся на два дня: «День 1» и «День 2». Мы же предлагаем вашему вниманию текстовую версию первого дня онлайн-интенсива. Он был посвящён знакомству с AWS Elastic Beanstalk и разворачиванию API с его помощью.

Преподаватель — Михаил Каморин, Senior Backend Developer в Skyeng.
Читать дальше →

Программный поиск общего кода с помощью oEmbed

Время на прочтение7 мин
Количество просмотров1.9K
Всем доброго времени суток! Хочу поделиться переводом статьи ""Programmatically Discovering Sharing Code With oEmbed" автора Drew McLellan.

Введение


На многих сайтах размещены мультимедиа и контент, которыми можно поделиться в другой платформе с помощью некоторого HTML-кода для встраивания. Что произойдет, если у вас есть только URL-адрес элемента и вам нужно найти встраиваемую версию мультимедиа без участия человека? Вот тут нам и пригодится oEmbed.
Читать дальше →