Валидация больших XML-файлов

По специфике моей текущей работы нам приходится работать с большими XML-файлами, как в сторону выгрузки наших данных сторонним сервисам, так и наоборот, импорт данных из сторонних сервисов. Размеры файлов весьма большие, вплоть до 500 Мб. Соотв-но в один прекрасный момент наша выгрузка сломалась, и весь ответ от стороннего сервиса заключался в том, что мы присылаем им «invalid xml». Как следствие, встал вопрос: как понять, в чем невалидность нашего XML.

Онлайн валидаторы XML не принимают настолько большие файлы, поэтому пришлось искать локальное решение. И на помощь пришел Sublime. Есть плагин к нему под названием Exalt, который на лету валидирует XML, и либо в строке статуса выдаст Valid markup, либо напишет, в какой строчке возникла проблема при парсинге.

В нашем случае оказалось, что при генерации XML в некоторых узлах были незаэкранированные «<» и «>» 🙂

Блог теперь работает на SSL

После историй о подмене трафика сотовыми операторами, включающими собственную рекламу поверх незащищенных сайтов, решил перевести блог на HTTPS.

Подключение пакета к своему проекту из локальной директории

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

Грязный хакинг: вскрываем приватные внутренности объектов без рефлексии

Как известно, в (наверное) любом ООП-языке поддерживаются области видимости переменных и методов класса (public, protected, private). И, разумеется, получить доступ напрямую к protected и тем более private извне не получится в штатном режиме.

Но, как говорится, если нельзя, но очень хочется, то можно. Можно к ним получить доступ. И есть тут «два путя»: первый широко известен, и называется он Reflection, его я описывать не буду. А вот второй мне открылся совершенно внезапно, когда я читал официальную документацию по замыканиям.

Читать далее «Грязный хакинг: вскрываем приватные внутренности объектов без рефлексии»

Сессии в Telegram-боте на Laravel

День добрый, уважаемые читатели!

В процессе написания бота для Telegram у меня возникла необходимость сохранять сессионные данные, привязанные к пользователю, который общается с ботом. Это может потребоваться для запоминания «стадии» диалога, если процедура, которую инициировал пользователь, является многоступенчатой, и нужно помнить состояние этого диалога. С одной стороны, есть возможность решить данную проблему «сложно», в каждом подобном диалоге имея свой механизм запоминания. Но это «хардкорный» путь, имеющий множество недостатков. Гораздо более элегантным способом была бы возможность использовать встроенный в Laravel механизм сессий, который используется в обычных HTTP-запросах. Как это сделать, я и попытаюсь объяснить в данной статье.

Читать далее «Сессии в Telegram-боте на Laravel»

Мой первый Telegram-бот на Laravel

Я хоть и не миллионер, но возникла потребность в удобном отслеживании ПИФов в Альфа-Капитале, в связи с чем решил написать простенького Telegram-бота (@AlfaCapitalOPIFBot). В качестве бэкэнда выбрал Laravel — пришлось вспоминать практически все «с нуля», настолько долго я не писал на нем ничего. Код, конечно, не идеален, поскольку хотелось побыстрее получить результат, но если кому интересно, вот репа. В перспективе еще хочется добавить к этому приложение под Android ради получения уведомлений. Можно, конечно, и в Telegram слать обновления, но у них есть лимит сообщений в промежуток времени, а так — в легкую бы написал 🙂

PhpAmqpLib: проблема разрыва соединения

Всем привет 😉

Какое-то время назад при работе с RabbitMQ посредством PhpAmqpLib в Symfony иногда возникали странные ошибки вида

Или схожая

Причина, в принципе, у этих ошибок одна: разрыв соединения между воркером, обрабатывающем сообщение («задачу») от рэббита, и самим рэбитом.

Читать далее «PhpAmqpLib: проблема разрыва соединения»

Windows 10 и Vagrant (Virtual Box)

Есть известная проблема, которая заключается в том, что на некоторых устройствах под управлением Windows 10 не всегда стартует виртуальная машина Vagrant (совместно с Virtual Box): выводится ошибка

Как временное решение, пока не выпустили официальное обновление Virtual Box, можно проделать следующее: установите режим совместимости с Windows 8 на следующие файлы Virtual Box:

  • Virtualbox.exe
  • VBoxManage.exe
  • VBoxHeadless.exe

В большинстве случаев это помогает. Мне, например, помогло.

Удачи!

Запись Laravel Broadcasting Events Livecoding Stream

Приветствую всех посетителей моего блога!

Сегодня я провел полутора-часовой livecoding-стрим, где разобрался с broadcast-событиями в Laravel 5 на базовом уровне, с применением собственного nginx-сервера (с модулем push-stream) в качестве PubSub-сервиса.

Читать далее «Запись Laravel Broadcasting Events Livecoding Stream»

Приложения реального-времени (real-time) на Laravel 5.1, используя широковещательные события (перевод)

Оригинал: http://www.sitepoint.com/real-time-apps-laravel-5-1-event-broadcasting/

Версия Laravel 5.1 включает в себя функционал, называемый вещанием событий, который с легкостью позволяет создавать приложения реального времени (real-time) на PHP. Этот функционал позволяет приложению посылать события на различные «облачные» PubSub-сервисы, наподобие Pusher‘а, или в Redis.

В этой статье мы разберем простое TODO-приложение и превратим его в real-time приложение, используя вещание событий в Laravel.

Читать далее «Приложения реального-времени (real-time) на Laravel 5.1, используя широковещательные события (перевод)»