Обновить
128K+

PHP *

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

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

Два года один пилю MMORPG на CI4: пять багов, за каждым из которых стоял живой игрок

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели2.2K

Строка “false” в PHP равна true. Я узнал это, когда рубильник, которым я выключаю фичи перед живыми игроками, полгода отказывался выключаться. Два года в одиночку пилю текстовую MMORPG на CodeIgniter 4: мир дышит раз в минуту по крону, 485 выживших, 45 тысяч боёв. Пять багов — и за каждым стоял реальный человек по ту сторону экрана.

Читать далее

Новости

Mini Bucket 3.6.4: теперь с плагинами — двери для разработки открыты

Время на прочтение3 мин
Охват и читатели4.4K

Как мы превратили панель управления NAS в платформу для расширений, зачем туда Log Manager и для чего Plugin Template.

В новой версии 3.6.4 я добавил возможность устанавливать плагины. Перед реализацией возникло много вопросов. Наша ключевая фишка — мультисеть (позволяет переключать фронтенд на бэкенд другого сервера для его мониторинга и управления). Значит, и модуль плагинов должен уметь переключаться.

И......

Что же дальше...

Весь «вечно живущий» мир моей MMORPG держится на одной строке в кроне

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели5.9K

Два года по вечерам в одиночку пилю текстовую MMORPG в Telegram — мрачный остров, по которому ходят выжившие. В прошлой статье рассказал, как заброшенный на полтора года проект сам собрал игроков. Обещал показать техническую кухню — показываю. Без позы сеньора: где нормальные решения, а где костыли, которыми я не горжусь, но которые два года держат живой мир. Игровой цикл из одной строки в кроне, дюп ресурсов и атомарный захват, мёртвые кнопки, которые пережили все тесты, выпиленный из проекта Python и честный ответ — какой стек я взял бы сегодня.

Читать далее

Перенёс антиспам из Telegram в Макс — через месяц бота удалили. Что я понял про платформу

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели52K

В декабре 2024 я запустил антиспам-бот для Макс — по той же схеме, что уже годами работает в Telegram. Через месяц платформа удалила бота без объяснений. Поддержка отвечала: «работаем над вашим вопросом, ждите». Досудебная претензия заказным письмом — разблокировка и ответ в духе «вы согласились с правилами при регистрации».

Если вы разработчик ботов и думаете зайти в Макс — ниже не обзор «какие у меня продукты», а разбор того, что реально ломается на платформе и какие архитектурные решения пришлось собрать на ходу. Два кейса: антиспам (перенос TG-логики) и «Почтальон» (мост Макс ↔ Telegram), который родился уже после блокировки.

Читать далее

Создание сервера для онлайн ММО игр на PHP ч. 17 — внедряю ИИ: механики из одного описания

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели14K

Несколько лет я в одиночку пишу сервер для своей 2D MMO RPG. Эта часть — про то, как изменился сам процесс разработки: игровую фичу я по-прежнему придумываю сам, а реализую её уже не один.

Это не демо в духе «модель выдала сниппет». Внутри — настоящая 2D MMO RPG: авторитарный сервер реального времени, тайловые карты, клиент на Unity. ИИ не создал эту систему, а ускорил: то, что раньше занимало дни и недели, теперь укладывается в часы и дни, и в одиночку я держу темп целой команды. Расскажу по порядку, как я к этому пришёл и где у подхода честная граница.

Читать далее

Первый раз — в первый класс

Время на прочтение4 мин
Охват и читатели12K

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

Если вдруг вам интересен свой собственный мессенджер на своём PHP-хостинге - заходите почитать.

Раньше мы с коллегой пользовались для совместной работы над проектами (электронных разработок) таким проектом как Asana. Наблюдали ее развитие последних лет 7-8 изнутри бесплатного аккаунта. Создавали свои проекты, в них задачи, привязанные к срокам исполнения, ну - и набивали файлами-фотками в процессе разработок.

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

Тем более, что shared-хостингов уже в пользовании штук пять под мелкими проектами. Я сторонник того, что в ожидании "косяка клиентов" достаточно иметь малые shared-хостинги под каждый проектик, или даже под каждого клиента, чтобы его данные и доступность сервиса была независима от других. Ну а на VDS переходить когда уже есть нормальный коммерческий договор.
Ну, а значит, надо попробовать наваять такую систему именно в условиях shared-хостинга, с ее ограничениями.

Понимание web-технологий самое общее, конечно есть, но по моему мнению, достаточное для создания такого проекта максимум процентов на 10. Поэтому вся надежда на "эти ваши нейросети", в процессе самообучения. Ну, и при такой "кроильной" задаче главное условие поставил сам себе - что эксперимент будет полностью бесплатный, т.е. без покупки какого-либо платного доступа к ИИ-агентам.
Т.е. я решил сам себя замучить именно в режиме бесплатного чата с нейросетями, становясь копипастером кода 80-го уровня.

Почитать далее

Mini Bucket 3.6.2: от беты к релизу. Полная установка со скринами и комментариями

Время на прочтение6 мин
Охват и читатели6.3K

Почему Debian 9, PHP 7.0 и никаких фреймворков. И как поднять HTTPS за 5 минут

Предисловие для тех, кто не читал первую статью

В прошлый раз я рассказал, как хотел сделать две странички для SAMBA и NFS, а получилась панель управления NAS на 20+ страниц. Проект назвал Mini Bucket.

Важно: та версия была бета. Сырая, с недоработками, но живая. Её задача — показать концепцию. А народ заинтересовался. Значит, надо доводить до ума.

Теперь — версия 3.6.2. Исправлена куча проблем, добавлена безопасность, появился отдельный домен, форум и вики. И сегодня я по шагам покажу установку со скринами.

Но сначала — кратко о том, что изменилось. А потом — чистая практика....

Читать далее

Интеграция xdebug в свой проект idea

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели5.5K

Одной из первых задач, когда я начинал разработку idea, была интеграция xdebug в свой инструмент разработки и реализация основных возможностей работы дебагера. Первым делом надо было изучить документация по протоколу xdebug. В нем используется общий протокол дебагера DBGP. В целом ничего сложного, есть сокет через который мы отправляем команды в сам xdebug он нам отвечает в формате xml, парсим xml и получаем результат. Все просто подумал Я, но как всегда не без приключений.

Первая проблема возникла от недопонимания в какой момент создается сокет, тот самый порт 9000. Читаем документацию пункт 5.3 и 5.4 первый говорит про стандартный порт второй пункт говорит о инициализации подключения и что xdebug отвечает при готовности объектом <init>

Читать далее

Почему Claude Code и Codex не ускоряют команду: у компании нет общей памяти

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели17K

Компании уже оплачивают сотрудникам Claude Code, Cursor или Codex, но не всегда видят рост производительности.

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

Разбираю, зачем команде общая память, и при чём тут GBrain, OpenBrain и обычные Markdown-файлы.

Научиться работать с контекстом

Внедряем BX.UI.AccessRights.V2: современный интерфейс прав доступа Битрикс24 для своего компонента

Уровень сложностиСложный
Время на прочтение15 мин
Охват и читатели6K

В процессе кастомизации коробочной CRM Битрикс24 часто клиенты просят внедрить им права доступа. Захотелось внедрить с интерфейсом, как это выглядит в Задачах или Сделках. Изучил документацию — там всё изложено лишь в общем виде, пришлось анализировать исходники, сжечь несколько миллионов токенов различных нейронок, и даже после этого вникать в нюансы и дебажить код.

В статье подробно разбираются нюансы архитектуры компонента BX.UI.AccessRights.V2, подводные камни при внедрении в свой модуль (готовый репозиторий прилагается).

Читать далее

OTel Collector в кастомизации Битрикс24: подключаем Observability

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели8K

Рассказываем про инструмент для наблюдения за кастомизациями Битрикс24 — телеметрическую инфраструктуру на базе OpenTelemetry Collector. Для проектов Битрикс24 эту роль выполняет репозиторий github.com/bitrix-tools/b24-ai-starter-otel.

В статье объясним, зачем это надо, подключим Collector к уже существующему приложению чат-бота и покажем, как работает и выглядит сбор метрик.

Это статья из цикла туториалов, где мы показываем полезные вещи, которые можно сделать на своём портале с помощью стартер-кита для ИИ-ассистированной разработки: github.com/bitrix-tools/b24-ai-starter.

Что мы уже сделали и разобрали в других статьях:
Пишем первое приложение с AI-стартером, чтобы видеть прибыли и убытки
Добавляем в бизнес-портал Битрикс24 роботов для автоматизации
Что даёт воспроизводимая среда разработки и как развернуть контейнеры на VPS.
Анализ и модернизация коннектора баз данных с помощью AI-агентов
Создание чат-бота в портале Битрикс24 с помощью AI-агентов
Как стартер-кит может стать стандартом разработки
— OTel Collector в кастомизации Битрикс24: подключаем Observability (вы здесь)

Читать далее

Как не потратить полдня, прикручивая Юмани-оплату к сайту

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели6K

Спойлер: кажется SHA1 устарел, а туториалы этого еще не знают

Привет всем.
Для контекста: я не программист. Я гуманитарий, который до безумия боится цифрового неравенства, которое уже наступает. Поэтому, вооружившись AI‑агентом (Cursor) и бесплатными Claude, Gemini, DeepSeek пытаюсь быть в тренде (некоторые называют это вайб‑кодингом). Признаться я тоже думал, что это что‑то легкое, «вайбовое» — главное, все внятно описать, что ты хочешь. Но по факту в том, что происходит, всё равно приходится разбираться самому.

Свежий пример моих «грабель» — решил прикрутить оплату ЮМани.
Казалось бы, ЮМани, всё придумано до меня. Но есть нюансы...

Читать далее

Wild World, два года спустя: как заброшенная текстовая MMORPG в Telegram получила второе дыхание

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели6.5K

Полтора года я не трогал код — а люди продолжали сами находить игру, регистрироваться и играть. Рассказываю с реальными цифрами, что технически изменилось в моей текстовой MMORPG в Telegram за два года и почему проект получил второе дыхание.

Читать далее

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

Какие проблемы чаще всего ломают кастомизации Битрикс24 после перехода на ORM и PHP 8

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели8.2K

Пятница, 18:00. Вы обновляете PHP на сервере с 7.4 на 8.0 — что может пойти не так? Деплой проходит, страница обновляется, и вместо привычного портала вы видите белый экран с TypeError: array_search(): Argument #2 ($haystack) must be of type array, null given. Мессенджер разрывается от сообщений: «Ничего не работает». Знакомо?

Читать далее

AI для PHP-разработчиков. Часть 7: Экосистема AI-агентов в PHP – от простых вызовов OpenAI до мультиагентных платформ

Время на прочтение8 мин
Охват и читатели12K

За последние два года в экосистеме PHP вокруг AI-разработки сформировалась целая индустрия. Если раньше интеграция LLM выглядела как несколько строк кода с вызовом OpenAI API, то сегодня разработчики строят полноценные агентные системы: с памятью, инструментами, workflow, наблюдаемостью (observability) и даже командами специализированных агентов.

Обычно, когда говорят об AI-разработке, в первую очередь говорят о Python. Тут полно интересных вещей, таких как: LangChain, LangGraph, CrewAI, AutoGen – весь основной шум долгое время происходил именно там.

Но параллельно интересная история развивается и в PHP. И меня это, безусловно, очень радует.

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

Давайте посмотрим, как выглядит этот рынок сейчас.

Читать далее

Кэширование в Symfony: как мы сломали авторизацию и починили ее через Lock

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели6.7K

Привет, Хабр! На связи команда «Исходного Кода».

Когда бэкенд на Symfony начинает тормозить, одним из первых инструментов оптимизации почти всегда становится кэширование. И это логично: правильно настроенный кэш круто снижает нагрузку на базу данных, режет latency API и убирает лишние ресурсоемкие операции внутри приложения.

Но на практике мы редко ограничиваемся простым cache->get() и базовым TTL, особенно когда приложение крутится не на одном сервере, а в Kubernetes-кластере с пачкой внешних API и жесткой конкуренцией запросов. В таких условиях кэш - это уже не только про скорость, но и про синхронизацию состояния между процессами и pod'ами.

Читать далее

UUID мертв? Да здравствует Smart ID! Почему ваш проект заслуживает лучшего

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели10K

В этой статье я поделюсь опытом проектирования идентификаторов для крупной медицинской системы. Мы пройдем путь от простых автоинкрементов до UUID, ULID и в итоге создадим гибридное решение, которое оказалось лучше всех существующих подходов. Спойлер: идеальный ID — это не технология, а архитектура.

Читать далее

Healthchecks в Docker Compose для Laravel: как сделать так, чтобы сервисы запускались в правильном порядке

Время на прочтение3 мин
Охват и читатели6.9K

Если вы хоть раз поднимали Laravel-проект в Docker Compose, наверняка сталкивались с ситуацией: контейнер с приложением стартует раньше, чем база данных успевает принять соединения, и миграции падают с ошибкой SQLSTATE[08006] или Connection refused. Перезапустишь — всё работает. На локалке терпимо, но в продакшене — это в падающие деплои.

По умолчанию Docker считает контейнер «живым», если его процесс запущен. Но это не всегда означает, что сервис внутри готов к работе.

Решение — правильно настроенные healthcheck’и и условие depends_on с параметром condition: service_healthy. В этой статье разберём, как это сделать для типичного стека Laravel: PHP-FPM, PostgreSQL, Redis и Nginx.

Читать далее

Как я хотел две странички для SAMBA и NFS, а сделал полноценную панель управления NAS на 20+ страницах

Время на прочтение4 мин
Охват и читатели16K

Как я хотел две странички для SAMBA и NFS, а сделал полноценную панель управления NAS на 20+ страницах

Читать далее

Как я написал плагин для WooCommerce под Yandex YCP или как купить в 1 клик из Алисы

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели8K

В конце мая Яндекс открыл Yandex Commerce Protocol для всех — теперь онлайн-магазины могут подключать продажи через Алису AI, Поиск и Яндекс Ритм. Из коробки готовые решения есть для Яндекс KIT, Яндекс Маркета и 1С-Битрикс. Для WooCommerce — нет. У меня магазин на WP, и я написал плагин сам. Open-source, GPL-2.0, все 10 эндпоинтов протокола закрыты. Разбираю архитектуру: как боролся с письмами “новый заказ на 0 ₽”, зачем идемпотентность по session_id, как сделать совместимость с HPOS-хранилищем заказов, и пара других граблей, в которые наступил.

Читать далее
1
23 ...