? Editing: Post:21.body Save Delete Cancel
Content changed Sign & Publish new content

BORS©.Blog

Блог PHP-фреймворка и просто разной DevOps всячины

Follow in NewsfeedFollowing

Latest comments:

Содержание

Just now · less than 1 min read ·
1 comment

Содержание блога (отдельным постом для запинивания)

Read more

Наложение текста поверх картинок на сайте с разметкой Markdown

on Dec 08, 2018 · 1 min read ·
2 comments

Жена на сайте делает ссылки на разделы в виде картинок. И накладывает на них надписи вручную в графическом редакторе:

2018-12-08_13-37-47.png (0x0)

Сейчас ей, похоже, надоело и она спросила, нельзя ли это как-то автоматизировать :)

Пишет страницы она в Grav'е в разметке Markdown. Понятно, что при этом можно делать вставки на чистом HTML и написать что угодно, но это не спортивно! Мне давно интересно реализовывать что-то расширенное в рамках синтаксиса и идеологии Markdown.

Картинки в Markdown вставляются с таким синтаксисом:

![](http://ссылка)

Или, в неурезанном варианте:

![Alt-текст](http://ссылка)

Ага! Первое же, что приходит в голову, использовать Alt-текст для визуального вывода поверх картинки. Ну и сама картинка может быть произвольного формата, а выводить нужно в фиксированном размере, в нашем случае 250x200px. Укажем всю эту обработку, задав CSS-класс картинки:

![Лабораторные животные](lab-mouse.jpg){.cover}
Read more

YAML to PHP

on Oct 10, 2018

Обнаружил у себя сегодня ещё один заповедник с YAML-классами :) Переконвертировал…

Поскольку в этот блог давно ничего не писал, и предыстория осталась за кадром, вкратце:

  • Раньше в движке были «YAML-классы». С виду удобная фигня, когда можно было в .yaml кратко описать основные поля и методы. При работе класслоадера такой файл компилировался в кеш и оттуда брался как .php

  • На практике оказалось часто неудобно. Когда это были файлы в 1-2 строчки, то и на PHP описать то же самое в 4-5 строк не обломишься. А вот когда потом это всё требовалось расширять, можно было застрелиться :) Начинались костыли из PHP-вставок в отдельном файле и т.п. Кроме того, класслоадер в Composer стал стандартом и собственный колхоз стал терять смысл.

  • Посему в утилитку bors была добавлена команда yaml2php для конвертации первого во второе и YAML-класслоадер снесён из фреймворка. Кажется, вообще с механизмом своих класслоадеров.

Пример такой миграции: https://bitbucket.org/Balancer/balancer-board-bors/commits/b26cda898ad61c096dbd0994ef3ff252f5489877

Read more

Фильтры обсценной лексики

on Jun 01, 2018

По случаю тут вспомнилось. Тесты «мат-фильтра» пришлось сразу пополнить «словами-исключениями». А то, типа, как на известном военном авиафоруме долгое время слово «истребитель» писалось со звёздочккми: «истр*тель». Военная авиация! :D Но со временем стали попадаться более редкие и изысканные обороты, требующие пополнения матфильтра с обоих сторон. «Разрешённые» слова из юнит-теста привожу тут для прикола :)

    static function __unit_test($test)
    {
        // Список нормальных слов с выглядещами обсценно подстроками.
        $allowed = ['ансамбля Джебат дебаты колебания колебать колебаться постебаться дебилов учёба'];
        $allowed[] = 'Усугубляясь истребители застрахуйте рубля Хулиганы потребляет потреблять тихую психуют психующим';
        $allowed[] = 'оскорблять уподобляться Усугубляясь Олеговна плохую лихую употребляющих сухую глухую';
        $allowed[] = 'хребтами Глеб Глеба небу сабля гребля корабля лапидарий скипидар туебень залужью';
        $allowed[] = 'абляция'; // В начале строки!
        $allowed[] = 'аббляционного веба потребляемого стеблями констебля';
        $allowed[] = 'небу ещёб ещеб нёбу хлебом Пиебалгс деблокировать хлебнуло хулит';
        $allowed[] = 'ибупрофен Ибашники';
        $allowed[] = 'хребтом хребтами хребту сердцебиение досудебную колеблется беби мразеблоггерша';
        $allowed[] = 'дирижабля дубля волшебную внеблоковый пищеблоку хребта ассеблеров';
        $allowed[] = 'заштрихуйте Хулиан Хулио потребную Хулимсунт'; // Хулимсунт — посёлок такой.
        $allowed[] = 'хулахуп ибо хулению служебную Себу'; // Себу — провинция на Филиппинах.

// ...
Read more

БД на хосте или в LXC-контенере

on Dec 04, 2017 ·
1 comment

Похоже, нужно возвращаться к идее индивидуальных серверов БД в LXC-контейнерах. С одной стороны, это заметный оверхед по памяти/кешам, из-за которых я и пришёл к идее использования общей БД на хосте для всех контейнеров, с другой стороны, начинается каша при попытке многосторонней репликации баз данных и лишний геморрой при переносе контейнера на другой сервер. Когда всё в локальной БД контейнера, то этот контейнер можно тупо запаковать и перебросить куда надо целиком.

Единственное, над чем надо ещё подумать, делать ли LXC-контейнер полностью автономным или держать два отдельных контейнера для БД и для сайта. Во втором случае получаются лишние сущности, но процесс переноса можно разделить на этапы.

Read more

Ещё один WTF от разработчиков

on Sep 08, 2017

Смотрю тут движки форумов. Вижу на официальном сайте одного из них в новостях вот такое чудо :D

wtf-developers.png (647x258)

Read more

Яндекс...

on Aug 28, 2017

Что-то Яндекс совсем опустился. Вот, к примеру, подобные записи в блоге:

http://www.zites.cf/2016/03/6-new-troubles

Уникальный для Интернета контент. Никаких копипаст. Однако, из поиска выбрасывается: «Недостаточно качественный контент». И такое — сотнями. Ну и какого им ещё нужно, блин?

yandeks-hernya.jpg (300x200)

Read more

Производительность MariaDB в Docker-контейнере

on Aug 10, 2017 · less than 1 min read

Возвращаясь к старому спору :)

У меня тут образовался новый и пока пустой сервер на Scaleway. Решил сравнить свежим взглядом и посмотреть, что изменилось с последних моих тестов. Использую всё тот же sysbench, тест complex на 1 млн строк. Три варианта:

  • host через сокет
  • host через 127.0.0.1
  • docker с мапингом на 127.0.0.1
Read more

WTF-Code

on Jul 24, 2017

Кидал тут в группу в Telegram примеры WTF-кода, которые встречал в своей практике. Решил и тут поделиться :)

Read more

Миграции БД

on Jun 07, 2017

Уже писал ранее в одном из блогов (когда же я их объединю? :) ) о проблеме выбора места для хранения миграций composer-пакетов. Пока у нас один только набор миграций для приложения, проблемы нет. Когда же надо поддерживать отдельно пакеты composer, то нельзя их миграции хранить в общей базе. Они могут обновляться независимо! Значит, или по отдельной таблицей на каждый пакет в общем базе в MySQL (как правило) или, чтобы не засорять базу, по отдельному файлу sqlite для каждого пакета в composer/data. Склонялся ко второму варианту, но (отчасти из-за лени) реализовывал первый. Это меня и спасло, когда пришлось при отладке постоянно перегружать старые дампы сторонней БД. Если бы история миграций хранилась отдельно, в локальном sqlite, был бы облом из-за несоответствия БД и истории миграций. А тут, поскольку и история и БД хранятся вместе и консистентны, просто делаем phinx migrate после каждой загрузки дампа. И всё прекрасно обновляется.

Так что отныне — всегда отдельная таблица для отдельного пакета!

Read more

Положение с Graphviz в PHP

on Jun 07, 2017

Я много лет использовал PEAR Image_GraphViz и не знал бед. Но теперь этот пакет устарел, не поддерживается, его нет в Composer и так далее. Вчера потребовалось по-быстрому вывести на PHP пару диаграмм из БД. Решил сделать современно/модно/молодёжно. Полез в libraries.io, отсортировал по популярности пакеты Composer с подстрокой Graphviz и... Завис. Есть монолитные пакеты, генерирующие готовые изображения, но с очень куцыми функциями, не реализующими многое из возможностей GraphViz. Есть в большом ассортименте более гибкие пакеты, создающие GraphViz-скрипты (для dot), но нет средств рендерить их. Два часа угрохал, но так ничего штатными средствами и не добился. Плюнул, быстро слепил костыль с прямой генерацией строками скрипта и вызов dot через exec, сделав задачу за 10 минут. А с библиотеками придётся разбираться позже :-/

Read more

Фабрики/одиночки в приложениях

on Jun 07, 2017

Раньше активно использовал для запуска приложений синглтоны:

\Balancer\Board\App::instance()->run();

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

\Balancer\Board\App::factory()->run();

Для простых случаев «один сайт — одно приложение» разницы нет, но в сложных... Я долго так ловил одну ошибку, не понимая, почему не срабатывает роутинг :)

Read more

Иерархия с навигацией в другие домены/проекты

on May 18, 2017

Основательно зарылся в один крупный проект (конечно же, на BORS©), так что давно не писал ничего. А вылезла заметная проблема — с новым App-подходом, когда вся работа идёт не в рамках одного глобального приложения, а с локальными приложениями, вешающимися на конкретные домены и пути, отвалилась навигация («хлебные крошки»), ссылающаяся на посторонние ресурсы. Например, у нас форум на одном домене, а родителем к нему прописана страница в другом домене. Раньше второй проект всё равно был доступен в общей каше кода, теперь — нет. Нужно повесить этот проект при инциации приложения в точке входа на нужный домен:

// Форум
\Balancer\Board\App::instance()
    // Вот, то, что нужно, чтобы форум ссылался на нужную корневую страницу
    ->reg_app(\Balancer\Site\Main::class, '//www.balancer.ru/')
    ->run();

Следует обратить внимание на // вместо http:// или https://. Сейчас в движке происходит отход от использования явного указания протокола, поскольку это чревато проблемами http-ресурсов на https-страницах.

Read more

ZeroNet. Поехали!

on May 18, 2017

Я уже начинал вести отдельный блог фреймворка в GitHub через ФС (надеюсь, после слияния с ними эта запись окажется уже в середине потока), но оформлять так материалы оказалось неудобно. И хотя у нас есть, скажем, WordPress, который в роли блог-платформы почти идеален, мне удобнее делать заметки в блогах ZeroNet. Даже не смотря на то, что в системе написанной на Python + JS писать о PHP несколько странно :D

Так что теперь я постараюсь писать чаще и именно через ZeroNet :) А далее уже настрою двусторонний синк с ФС-блогом в bors/app-data / GitHub. А со временем, может, и с WordPress. С последнего, например, удобнее всего писать в дороге, через мобильный клиент. Но это — потом.

Read more
Add new post

Title

21 hours ago · 2 min read ·
3 comments
Body
Read more

Not found

Title

21 hours ago · 2 min read

0 Comments:

user_name1 day ago
Reply
Body
This page is a snapshot of ZeroNet. Start your own ZeroNet for complete experience. Learn More