LINUX.ORG.RU

Froggy-BLC 1.02 (Книжная Система Сайта, CMS)

 , , , ,

Froggy-BLC 1.02 (Книжная Система Сайта, CMS)

0

2

Состоялся выпуск (1.02) Книжной Системы Сайта (Book-Like CMS) «Froggy-BLC», работающей на файлах без БД.

В этом релизе:

  • Используется собственная реализация тега «p» — «rich-paragraph role=paragraph» (HTML5). Это необходимо для поддержки блочных элементов внутри абзацев, особенно, когда CKEditor-4 проставляет теги «p» сам везде.
  • Устранено 4 вида уязвимостей.
  • Проводятся работы по де-обскуризации кода, уже есть значительный прогресс.
  • В алгоритмы «Симуляции БД» добавлен режим «GNU Concater». Это когда через Exec() вызываются GNU cat + GNU tail, для моментальной склейки Псевдо-БД, при редактировании одного поля. …
  • …С другой стороны — сделана функция проверки, на предмет доступности Exec() + /usr/bin/tail + /usr/bin/cat, и при отсутствии включается Fallback-режим «PHP-Concater» (…Но автор всё-же рекомендует использовать хостинги с GNU/Linux и просить хостера включить Exec() )
  • В псевдо-БД Комментариев добавлен режим DOM-Compactor — рядом стоящие «ul» схлопываются в один большой список для упрощения DOM для браузеров.
  • Счётчик загрузок файла стал более интерактивным, в комменты добавился timestamp, и десятки других мелких улучшений.

NB: Автор не умеет писать качественный код, потому система написана не очень хорошо, не судите строго.

Изначально систему планировалось назвать Temple-CMS, из-за схожей истории: из-за шизофрении автором движет маниакальный энтузиазм и вдохновение; но в последствии, от этой идеи было решено отказаться.

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

Автор вдохновлялся ранними версиями CMSimple (преследовал цель создания системы с сильной семантикой и таксономией), и очень хотел сделать хорошую (но не идеальную) самобытную «вещь в себе», наподобие FreeDOS. Так-же, автор является поклонником Джона Кармака, и решил писать свою систему без фреймворков, а с библиотеками, каждая из которых выполняет одну строго-определённую функцию.

Система написана на PHP и JavaScript и распространяется по лицензии MIT. При этом автор подчёркивает, что он против её использования для пропаганды насилия, разжигания любой вражды или унижения достоинства.

>>> Подробности на GitHub

★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 2)

Спрошу у автора: а чем работа на файлах без БД лучше работы с локальной БД, например, SQLite? Там тоже файл, только один, дополнительные процессы запускать не надо, как и файлы, работает на любом утюге. Тоже почти «вещь в себе», из дополнительных зависимостей только одна библиотека.

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

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

Тоже почти «вещь в себе», из дополнительных зависимостей только одна библиотека.

Посмотрел в портах FreeBSD, у самой sqlite тоже зависимости есть (хотя, наверное, по большей части на этапе сборки):

sqlite-2.8.17_5
    SQL database engine in a C library
    Description : Changes : Packages
    Maintained by: freebsd-ports@FreeBSD.org
    Requires: gettext-runtime-1.0_1, gmake-4.4.1, indexinfo-0.3.1_1, pkgconf-2.4.3_1,1, readline-8.3.3, tcl86-8.6.18_1

(Опять tcl, странно…)

в случае частичной порчи данных из отдельных файлов (они ещё и текстовые, наверное?)

ИМХО, если что-то можно логично хранить в виде текстового файла, превращать в бинарь – нонсенс.

Я с SQL мало дел имел. Такой вопрос: насколько БД useable с системами контроля версий?

Jullyfish
()
Последнее исправление: Jullyfish (всего исправлений: 1)
Ответ на: комментарий от Jullyfish

насколько БД useable с системами контроля версий?

Сам файл БД? Настолько же, насколько и любой другой не текстовый формат.

dataman ★★★★★
()
Ответ на: комментарий от Jullyfish

ИМХО, если что-то можно логично хранить в виде текстового файла, превращать в бинарь – нонсенс

Можно совместить, все метаданные в БД, текст книг оставить в файлах. Профит от БД как минимум быстрый поиск.

pavel_l ★★
()
Ответ на: комментарий от hobbit

Всё очень просто: я не знаю SQL. А на момент начала написания этой системы — научить меня было некому. Я тогда даже Чат-ЖПТ не умел использовать (то есть не знал про него ничего).

К SQLite у меня множество вопросов по части Мульти-Доступа на запись и блокировках. Мне именно нужно сделать было так, чтобы БД комментов была для каждой статьи своя, и БД контента — всё лежало отдельно, так-как с одним-единственным файлом в очередях блокировки образуется «пробка», + кроме-того, мульти-доступ записи очень опасен. — Мне надо, чтобы каждый писатель, писал свою Копию *.new.$PID и в файл DBNAME.lock, атомарно, под блокировками LOCK_EX, LOCK_SH, LOCK_UN — записывался последний пришедший на запись $PID. И из этой «лотерейной записи» брался тот писатель, который победил в «конкурентно-кооперативном конфликте», и его файл переименовывался сразу атомарно в DB_REAL. (Проигравшим писателям выводится текстарея с постом, который только-что хотел запостить корректор или комментатор) … Причём, вся логика обмазана идеями KERNEL_PANIC; Это fopenOrDie(), freadOrDie(), fwriteOrDie() итд. — Смысл в том, что если в системе что-то искарёжилось плохими данными — она не доедет до ренэйма *.new.$PID в DB_REAL, никакие данные не испортит, а просто упадёт со строчкой сообщения о панике, чёрным по белому.

То есть, моя система отказоустойчивая.

Кроме-того, БД комментов представляет из себя li/ul-лапшу, чем-то похожую на XML. Древовидность комментов там до мозга костей файловая.

Мне кто-то говорил, что SQLite не даёт возможности писать из нескольких пидов сразу, многопоточно. И мне так представилось, что для неё сделать блокировки гораздо сложнее, чем на файлы. Кроме-того, если хранить всю базу в одном файле, то все данные скопом, при копировании в *.new.$PID — при набежавших писателях завесят много на диске.

Просто мне хотелось иметь железный контроль над всеми алгоритмами, а об SQLite я не осведомлён.

Если честно, когда я начинал эту штуку писать, — это был небольшой скрипт, написанный без всякой цели. Мне нравилось идти по этому пути, я писал всё тупо Джаст4Фан, и только потом, сделал вид, будто хотел добиться каких-то целей.

Set440 ★★
() автор топика
Ответ на: комментарий от pavel_l

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

И у меня есть поиск по этому ужасно-длинному меню, на джаваскрипте.

Set440 ★★
() автор топика
Ответ на: комментарий от hobbit

Мне кажется, раз дядька написал ЦМСку на Си — он очень суров. В его скилле я не сомневаюсь, просто иногда кажется, что он либо отстал от жизни малёх, либо, местами читал документацию по диагонали. Но скилл есть.

Я не настолько хорош, чтобы судить других программистов и кодеров (и прочих девопсов). Я просто бешенный скрипткед-шыз, You know…

Set440 ★★
() автор топика
Ответ на: комментарий от Set440

Всё очень просто: я не знаю SQL.
К SQLite у меня множество вопросов по части Мульти-Доступа на запись и блокировках

Ты даже SQL не знаешь, но откуда то у тебя множество вопросов к SQLite... Научись решать проблемы по мере их поступления.

Rodegast ★★★★★
()
Ответ на: комментарий от hobbit

sql БД берут, что быть иметь: 1) надёжность 2) многопоточность/многоклиентность 3) независимые от ЯП встроенные функции

SQLite не умеет ничего из этого. Да он минималистичен, но кроме как хранить в себе простые конфиги больше ни для чего не пригоден. По всем вышеперечисленным пунктам обычные файлики лучше. Особенно если хранить и править картинки - склайт на такой задаче сдохнет.

next_time ★★★★★
()
Ответ на: комментарий от Jullyfish

Или можно изначально не создавать себе проблем.

Почему ты думаешь что автор уже не создал себе проблем?

Rodegast ★★★★★
()
Ответ на: комментарий от next_time

Последние версии SQLite вполне себе надёжны, умеют в многопоточность на чтение и гибкую систему автоматических блокировок при записи(намного надёжнее того, что ТС реализовал у себя с файлами и PID'ами, так как работает не на уровне процессов, а на уровне соединений, хотя есть режим с использованием одного соединения, но я его не проверял), обладает широким набором встроенных функций, которые предоставляет SQL. Я, например, использую скулайт в одном своём проекте. Там у меня плодятся сотни горутин, которые очень много читают и десятки, которые пишут. Когда я говорю, много, я имею ввиду сотни запросов в секунду. Отлично работает, затыков нет, скорость работы не проседает. И не нужно в коде задумываться о парсинге файлов и ручной реализации локов при записи. Я в этом проекте поначалу тоже файлы хотел использовать, но потом провёл несколько экспериментов и таки решил использовать скулайт.

shell-script ★★★★★
()
Ответ на: комментарий от Jullyfish

писал свою Копию *.new.$PID и в файл DBNAME.lock, атомарно, под блокировками LOCK_EX, LOCK_SH, LOCK_UN

Вот это уже проблема. Автор сам называет это лотереей.

shell-script ★★★★★
()
Ответ на: комментарий от Rodegast

Ты даже SQL не знаешь, но откуда то у тебя множество вопросов к SQLite...

Можно представить, сколько вопросов будет, когда (и если) он узнает хоть что-то «за SQL»... ;))

Somebody ★★★★
()
Ответ на: комментарий от Set440

К SQLite у меня множество вопросов по части Мульти-Доступа на запись и блокировках

А к текстовым файлам это не применимо, не?.. ;))

Somebody ★★★★
()
Ответ на: комментарий от shell-script

не нужно в коде задумываться о парсинге файлов и ручной реализации локов при запис

В общем, скукота!.. ;)))

Somebody ★★★★
()

@Rodegast @shell-script

Рэбьята! Я не говорю, что SQLite плох. Я утверждаю, что мне очень хотелось сделать на файлах, так как никто не верил, что это вообще возможно.

Интерес был исследовательский.

Set440 ★★
() автор топика
Ответ на: комментарий от Set440

так как никто не верил, что это вообще возможно

Ну это ты загнул. Посмотри на dokuwiki. 100500 лет работает на файлах.

shell-script ★★★★★
()
Ответ на: комментарий от next_time

SQLite не умеет ничего из этого. Да он минималистичен, но кроме как хранить в себе простые конфиги больше ни для чего не пригоден.

У меня в актуальном пет-проекте (десктопном, не веб) в скулайтовской базе где-то 70 тысяч записей (из них 40 тысяч в одной таблице), работает вполне шустро и надёжно. Это, мягко говоря, не «простые конфиги». Да, это не постгре, не фаербёрд и тем более не оракл. Но со своей задачей справляется, про «простые конфиги» сейчас прозвучало ну очень смешно.

Картинки хранить, может, и не надо. Даже в движках на основе MySQL, который в отличие от SQLite клиент-серверный, я видал такое, что в базе лежит только структурированная информация, а картинки, торрент-файлы и прочая блобень хранится в файловой системе, и из БД на неё ссылки кидаются. Наверное, авторы не зря так сделали. А, и имя пользователя в БД там было отдельное, никак не связанное с аккаунтами движка. То есть насколько там используется многоклиентность БД, вопрос тоже открытый. (Речь, в частности, про старую версию движка рутрекера, когда он ещё назывался torrents.ru, про картинки не помню, но вот торрент-файлы там точно лежали отдельно от БД.)

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от Set440

Да мы верим, верим. Просто интересно же обсудить альтернативы.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

в базе лежит только структурированная информация, а картинки, торрент-файлы и прочая блобень хранится в файловой системе

Вообще-то так правильно... Всегда так делал.

Somebody ★★★★
()
Ответ на: комментарий от next_time

Дополню по первому абзацу: то, что ты перечислил, это про клиент-сервер. «sql БД» это совершенно не обязательно синоним клиент-серверных СУБД. Локальным реляционным СУБД лет примерно столько же, сколько и ПК: dBase, потом FoxPro, Paradox… Просто в эпоху DOS применение SQL в них было скорее исключением, чем правилом, железо было слабенькое (хотя вот у Борланда через BDE можно было через SQL работать и с перечисленным). Но последние 25-30 лет вполне комфортно гонять SQL и в локальном варианте. Чем SQLite и пользуется.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от Set440

Я утверждаю, что мне очень хотелось сделать на файлах, так как никто не верил, что это вообще возможно.

Проблема не в возможности, а в целесообразности. Тебе так SQLite советуют как раз потому что это наиболее правильный вариант хранения информации в файлах. А SQL учить в любом случае придётся, ну если конечно захочешь дальше развиваться.

Rodegast ★★★★★
()
Ответ на: комментарий от Rodegast

Спасибо!

Я знаешь, наверное, как сделаю: Я приурочу к какому-то празднику себе «подарок» — попрошу нанять грамотных фрилансеров, чтобы мою текущую систему они использовали как дубовый прототип-макет (чучело из шкуры молодого дермантина).

Ну и чтобы они написали на SQLite и грамотно. Я буду смотреть на их реализацию функциональности в коде, и сам буду делать так-же, «повторенье — мать ученья».

Чтобы без посредничества фриланс биржи — спрошу прямо здесь, на ЛОРе. Условия лишь таковы, что из прототип-макета надо попытаться вытащить как можно больше самых нормальных функций, и в перерывах, по вечерам обсуждать со мной работу. Естественно, никаких дедлайнов.


Вся беда в том, что мне говорят:

  • Не пытайся в хэллоуворлде повторить алгоритм гипертекстуры Кармака, в 2026 будущее за Директ-Стримингом, и так уже никто не делает. Только замучаешься и ничего тебе это не даст.
  • Не пиши Шаблонно-Объектную генерацию Радиант-Локаций DragonAge 2, так-как этот алгоритм выглядит как тупейший копипаст уровней, и не имеет никакого значения его «прикольность».
  • Статический свет RAGE и DragonAge 2 — устарел. Перестань насиловать логику. Эти гипер-оптимизации сегодня никому не нужны. Будущее за РэйТрейсингом. Учись лучше писать на C++ внутри Unreal Engine.

…И я разве кого-то слушаю? — Нет. Делаю контр-продуктивные вещи. Их в 2026 делать нельзя, а я всё-равно буду.

Это как говорят про Александра Пушного, «еслиб он захотел, и перестал дурачиться — был бы величайшим музыкантом». А ему покайфу делать пародию-ковёр на всё, и его серьёзные вещи не интересуют.

Set440 ★★
() автор топика
Ответ на: комментарий от shell-script

В докувики скорее-всего одна статья — один файл, и нет БД комментов.

Потому там нет функций конкурентного доступа.

То, что написал я — это типа-как технодемка, что-то вроде демосцены. Типа «Смотрите как я могу».

Это так сделано потому, что очень хотелось написать типа-как «свою СУБД», но «без головы / без SQL».

Задача была именно «проникнуться пониманием», и пожертвовать вещами типа Поиска по БД.

Самая сложная задача была в обработке одной строки БД: Трункейт() + fwrite(ab) + TailConcat()

Это потому я так радуюсь, что сделал конкатер через exec()

Set440 ★★
() автор топика
Ответ на: комментарий от Set440

Потому там нет функций конкурентного доступа.

Есть. Там несколько человек могут одновременно редактировать одну статью.

Это потому я так радуюсь, что сделал конкатер через exec()

У меня на серверах запрещён exec() ;) Поэтому этот момент я просто не стал комментировать.

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

На моём хостинге — он оказался включён глобально.

Я, чтобы все разузнать — замучил службу тех-поддержки

Set440 ★★
() автор топика
Ответ на: комментарий от shell-script

Тут вопрос это на каких объёмах. У меня например были объёмы вплоть до бесконечности: если не под свой сервачок пишу, я же не знаю, сколько пользователь положит данных. И оперативки не знаю, сколько у пользователя. В общем, при нагрузочном тестировании 100Гб объём базы в виртуалке и 8Гб выделенной ОЗУ, оно сдохло. А файлики работали предсказуемо как часы.

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

Последние версии SQLite

Но я давно проверял, может в случае последних версий вы и правы

next_time ★★★★★
()
Ответ на: комментарий от next_time

100 гигов база - это уже такой серьёзный объём даже для нормального прода. Тут я точно смотрел бы уже на что-нить типа постгреса, даже не мускля.

shell-script ★★★★★
()
Ответ на: комментарий от next_time

берут nosql обычно

Вот честно, не люблю, когда везде пихают nosql. Это стильно-модно-молодёжно, но не везде оно работает как надо. Много проблем из-за этого встречал.

shell-script ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.