Pull to refresh
@shasoftXread⁠-⁠only

User

Send message

Представление родственных связей (генеалогического дерева) в виде графа

Level of difficultyEasy
Reading time3 min
Views4.4K

Прочитал статью Фамильный вики-движок Bonsai: 6 лет спустя и вспомнил что в своё время были планы сделать что-то подобное. После того как я попробовал использовать некоторые существующие решения (особенно одно в котором предлагалось при добавлении человека указать кем он является по отношению к другим и список на 100500 позиций вида сын, дочь, мама, папа, дедушка и т.д. и т.п. ) была разработана собственная схема хранения родственных связей в виде графа. В качестве вершин графа выступают люди, а в качестве ребер отношения между людьми. При этом типов отношений всего два:


  1. Родитель->Ребенок (связь имеет направление от родителя к ребенку)
  2. Брачный союз (связь равноправна и не имеет направления)
    С помощью отношений этих двух видов возможно задать родство любой сложности.
Читать дальше →
Total votes 3: ↑3 and ↓0+3
Comments7

Построитель SQL запросов на основе мета-информации миграций БД

Level of difficultyEasy
Reading time8 min
Views4.7K

В век когда ORM шагает по планете обычный построитель запросов выглядит откатом назад. Однако тут есть нюанс — Sql Query Builder использует пакет версионирования shasoft/db-schema и владеет всей информацией о структуре базы данных. Это позволяет реализовать все стандартные для таких решений функции, прозрачно конвертировать типы данных SQL<=>PHP + реализовать нестандартные возможности в виде выборки данных с использованием КЭШирования. (Просьба не искать логику в SQL запросах в статье и примерах, её там нет. Искусственные примеры предназначены для демонстрации возможностей пакета и никакой другой смысловой нагрузки не несут).


Читать дальше →
Total votes 3: ↑3 and ↓0+3
Comments9

Версионная миграция структуры базы данных через PHP атрибуты

Level of difficultyEasy
Reading time7 min
Views3.6K

Всегда немного раздражало что при написании миграций в Laravel сначала необходимо прописывать поля в классе модели, а затем эти же поля в миграциях. И когда мне понадобилось написать версионирование структуры БД, то решил совместить класс модели и миграции. И сделал я это через атрибуты PHP. Также вместе с миграциями я получил состояние базы данных с мета-информацией которую можно использовать при работе с ней.

Читать дальше →
Total votes 9: ↑8 and ↓1+7
Comments19

Группировка вызовов функций через обещания

Level of difficultyEasy
Reading time8 min
Views2.4K

Прошлая статья по данной теме была чисто теоретическая. Теперь есть готовый пакет. И данная статья - инструкция к нему.

Базовый функционал
Самое очевидное применение группировки вызовов - решение проблемы N+1 запросов. Данная проблема возникает когда фреймворк доступа к данным выполняет N дополнительных SQL-запросов для получения тех же данных, которые можно получить при выполнении одного запроса.
К примеру для получения данных имеются вызовы следующих функций, каждая из которых выполняет один SQL-запрос. При применении пакета 6 вызовов функций группируются в две группы по типу функции вызова. И в каждую группу попадают все аргументы вызова.

Читать далее
Total votes 4: ↑2 and ↓20
Comments17

Решение проблемы N+1 запроса с помощью группировки вызовов

Level of difficultyEasy
Reading time8 min
Views3.4K

Проблема N+1 запросов

Проблема N + 1 возникает, когда фреймворк доступа к данным выполняет N дополнительных SQL-запросов для получения тех же данных, которые можно получить при выполнении одного SQL-запроса.

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

Читать далее
Total votes 2: ↑1 and ↓10
Comments11

Samoyed CMG — генератор API

Level of difficultyEasy
Reading time7 min
Views1.7K

Я писал ранее статью Генерация API сайта на основе заданных пользователем функций, однако информация там была о конечной реализации (к тому же теоретической), и, ожидаемо, никто не понял для чего это вообще нужно. Поэтому попробую расписать это с другой стороны: от задачи к её решению через генерируемое в Samoyed CMG API.


Описание задачи


Пусть у нас есть небольшой сайт со списком статей с пагинацией. Статьи пишут пользователи сайта.


На главной странице выводим список последних 10 статей. В списке заголовок и автор. При нажатии на заголовок выводится страница с выбранной статьёй. На странице статьи выводится заголовок, содержимое + автор.


Простейшая схема таблиц базы данных представлена ниже.


Читать дальше →
Total votes 2: ↑1 and ↓10
Comments0

Samoyed CMG — пользовательские генераторы кодовой базы

Level of difficultyEasy
Reading time7 min
Views655

В прошлой статье был описан процесс установки и запуска Samoyed CMG (Content Management Generator). Основная идея — генерация кода сайта на основе настроек заданных кодом. Т.е. фактически кэширование всех настроек в коде при генерации, а не при развертывании на хостинге.


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



Рассмотрим генераторы более подробно для понимания их работы.

Читать дальше →
Total votes 3: ↑1 and ↓2-1
Comments0

Samoyed CMG — установка и генерация сайта

Level of difficultyEasy
Reading time7 min
Views1.2K

В прошлой статье была описана теория CMG (Content Management Generator). Основная идея — генерация кода сайта на основе настроек заданных кодом. Т.е. фактически кэширование всех настроек в коде при генерации, а не при развертывании на хостинге.


В данной статье описан процесс установки и генерации тестового сайта. Итоговый сайт и код примера прилагается. Также сайт содержит страницу с технической информаций (картинка именно оттуда).


Читать дальше →
Total votes 5: ↑4 and ↓1+3
Comments0

CMS, CMF … CMG (Content management generator)

Level of difficultyEasy
Reading time27 min
Views1.7K

Основная идея CMG (Content management generator) — не выполнять в Runtime то, что можно сгенерировать в виде статического PHP кода. Т.е. мы кэшируем все данные в генерируемом коде. Это происходит во всех современных фреймворках, но в данном случае это происходит не при развертывании на хостинге, а при кодогенерации. Код сайта генерируется с помощью конфига в виде кода. На мой взгляд для программиста это удобнее + больше гибкости чем при работе с конфигом.

Читать дальше →
Total votes 6: ↑3 and ↓30
Comments7

Берем абсурдную идею и находим ей применение

Reading time6 min
Views3.2K

Абсурдная идея

Если создать в интернете базу данных всех существующих файлов, то любой архив будет представлять собой список имен каталогов, файлов, дата+время изменения/создания и хеши этих файлов. А при распаковки архива достаточно будет просто скачать из интернета содержимое файла по его хешу, записать на диск и присвоить атрибуты (дата,время). Т.е. даже архив с полным сезоном какого-нибудь сериала из 20 серий будет занимать не больше нескольких килобайт (в независимости от качества видео).

Читать далее
Total votes 9: ↑7 and ↓2+5
Comments14

Генерация API сайта на основе заданных пользователем функций

Reading time7 min
Views2K

Основная идея

Идея достаточно простая: в определенной директории задаётся API функция в виде файла php которая возвращает анонимную функцию. Функции могут быть четырех типов: Put (изменение значений), Get (кеширование до изменения зависимостей), LifeTime (кеширование по времени), Direct (прямой вызов). При этом в функциях типа Get кешируют своё значения до вызова соответствующего значения Put.

Читать далее
Total votes 5: ↑2 and ↓3-1
Comments6

Как преобразовать правило .gitignore в регулярное выражение

Reading time2 min
Views4.5K

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

Читать далее
Total votes 7: ↑6 and ↓1+5
Comments51

Information

Rating
Does not participate
Location
Волжский (Волгоградская обл.), Волгоградская обл., Россия
Works in
Registered
Activity

Specialization

ERP Developer, SAP-разработчик
Middle
From 1,000,000 ₽
ABAP
C++
C
PHP
Laravel
JavaScript
Web development