Немного обновил главную Albireo CMS.
https://maxsite.org/albireo/
Теперь она автоматом переводится на русский, украинский и английский. Для этого немного доработал механизм перевода новой функцией
https://maxsite.org/albireo/
Теперь она автоматом переводится на русский, украинский и английский. Для этого немного доработал механизм перевода новой функцией
langText(). Примеры см. в доках: https://maxsite.org/albireo/introduction/multi-language#создание-перевода-внутри-страницыAlbireo CMS — «движок» блога
Albireo CMS - Flat-File CMS
Albireo CMS — система для тех, кто хочет создавать сайты по своим правилам
👍2👏2
Небольшое, но важное добавление в Berry CSS. Теперь можно использовать css-функцию
То есть это позволяет задавать стиль например так:
То есть когда light-режим, то цвет будет primary200, а для dark он сменится на primary700. 🤟
light-dark(), которая автоматом цепляется к dark-режиму. То есть это позволяет задавать стиль например так:
color: light-dark(var(--primary200), var(--primary700));
То есть когда light-режим, то цвет будет primary200, а для dark он сменится на primary700. 🤟
👍2
Предположим, что есть некая программа. Она могла появиться как простой каркас (MVP) или как хорошо продуманное решение. То есть по факту есть программа, которая работает.
Цель разработчика — это довести её до ума так, чтобы она выполняла все поставленные задачи, но при этом не содержала ошибок. С одной стороны, программу можно развивать дальше, постоянно добавляя в неё новый функционал. С другой стороны — количество ошибок будет накапливаться.
То есть в какой-то момент разработчик должен приостановить добавление новых возможностей, и сосредоточиться только на исправлении и оптимизации того, что уже работает. Если этого не сделать, то технический долг будет сильно расти.
Фишка в том, что оптимизация существующего ПО достаточно муторный, сложный и неинтересный процесс. В какой-то мере это приводит к потере «темпа разработки», когда вместо создания новых фич, приходится возиться с тем, что уже есть. Внешне может казаться, что разработчик ничего не делает.
Если посмотреть на IT-новости, то часто встречаются что-то вроде этого: «мы удалили лишние 1400 строк кода». Или «мы переписали 100 строк кода и получили ускорение в 3 раза». Это говорит только о том, что у программы накопился огромный технический долг и ситуация оказалась настолько плачевной, что на неё пришлось обратить внимание.
Здесь вопрос не просто в оптимизации ПО, а в том, что часто изначальный код пишется буквально на коленке, задача которого просто работать по заданному алгоритму. Но при разработке важно держать в голове ещё несколько факторов.
Например вопросы безопасности. Если функция принимает имя файла, то должны быть проверки на существование файла, а также на то, что файл не расположен за пределами дозволенного каталога. Такие проверки не относятся к непосредственной работе функции, но должны быть её частью. На начальном этапе её создания такие вещи просто упускают. Потом про них забывают и в таком виде они уходят в релиз.
Другой вопрос — работа с алгоритмами. Не секрет, что часто задачу можно решить разными способами, но понять какой более эффективный, можно только тестированием и отладкой разных вариантов. Можно потратить несколько дней, просто проверяя какая из нескольких функций быстрее и экономнее работает.
На мой взгляд более выгодно в разработке — это постоянное перечитывание кода и его анализ. При достаточной квалификации можно оценить его качество и принять решение по исправлению. В этом случае технический долг будет всегда держаться на минимальном уровне, что исключает ситуации «аврала». 😎
Цель разработчика — это довести её до ума так, чтобы она выполняла все поставленные задачи, но при этом не содержала ошибок. С одной стороны, программу можно развивать дальше, постоянно добавляя в неё новый функционал. С другой стороны — количество ошибок будет накапливаться.
То есть в какой-то момент разработчик должен приостановить добавление новых возможностей, и сосредоточиться только на исправлении и оптимизации того, что уже работает. Если этого не сделать, то технический долг будет сильно расти.
Фишка в том, что оптимизация существующего ПО достаточно муторный, сложный и неинтересный процесс. В какой-то мере это приводит к потере «темпа разработки», когда вместо создания новых фич, приходится возиться с тем, что уже есть. Внешне может казаться, что разработчик ничего не делает.
Если посмотреть на IT-новости, то часто встречаются что-то вроде этого: «мы удалили лишние 1400 строк кода». Или «мы переписали 100 строк кода и получили ускорение в 3 раза». Это говорит только о том, что у программы накопился огромный технический долг и ситуация оказалась настолько плачевной, что на неё пришлось обратить внимание.
Здесь вопрос не просто в оптимизации ПО, а в том, что часто изначальный код пишется буквально на коленке, задача которого просто работать по заданному алгоритму. Но при разработке важно держать в голове ещё несколько факторов.
Например вопросы безопасности. Если функция принимает имя файла, то должны быть проверки на существование файла, а также на то, что файл не расположен за пределами дозволенного каталога. Такие проверки не относятся к непосредственной работе функции, но должны быть её частью. На начальном этапе её создания такие вещи просто упускают. Потом про них забывают и в таком виде они уходят в релиз.
Другой вопрос — работа с алгоритмами. Не секрет, что часто задачу можно решить разными способами, но понять какой более эффективный, можно только тестированием и отладкой разных вариантов. Можно потратить несколько дней, просто проверяя какая из нескольких функций быстрее и экономнее работает.
На мой взгляд более выгодно в разработке — это постоянное перечитывание кода и его анализ. При достаточной квалификации можно оценить его качество и принять решение по исправлению. В этом случае технический долг будет всегда держаться на минимальном уровне, что исключает ситуации «аврала». 😎
👍3
Я пока занимаюсь переделкой синхронизации через WinSCP и столкнулся с забавным «багом».
Есть некий скрипт, который возвращает файлы с сервера и файлы с локального компа. Потом они сравниваются. Так вот я увидел, что на сервере есть файл
Уточню, что у меня win11, поэтому для неё регистр значения не имеет, но для синхронизации это важно. Поэтому я потратил пару часов, чтобы понять, почему локальный файл не соответствует серверному. Я весь мозг сломал, даже сделал поиск файлов, где есть различия в регистре...
Но потом сообразил посмотреть стандартные свойства файла и там, о чудо!, именно
Тут я выяснил виновника — это Total Commander. Я давно уже им пользуюсь, но сразу вспомнил про опцию «Имена формата 8.3 — в нижнем регистре (как в Проводнике Win9x)». Она у меня отмечена и все короткие файлы отображаются в нижнем регистре. Вот такая может быть засада. 🕶
Есть некий скрипт, который возвращает файлы с сервера и файлы с локального компа. Потом они сравниваются. Так вот я увидел, что на сервере есть файл
LICENSE — без точек, просто в верхнем регистре. Но, когда стал проверять, то увидел, что локальная копия с другим регистром License.Уточню, что у меня win11, поэтому для неё регистр значения не имеет, но для синхронизации это важно. Поэтому я потратил пару часов, чтобы понять, почему локальный файл не соответствует серверному. Я весь мозг сломал, даже сделал поиск файлов, где есть различия в регистре...
Но потом сообразил посмотреть стандартные свойства файла и там, о чудо!, именно
LICENSE!Тут я выяснил виновника — это Total Commander. Я давно уже им пользуюсь, но сразу вспомнил про опцию «Имена формата 8.3 — в нижнем регистре (как в Проводнике Win9x)». Она у меня отмечена и все короткие файлы отображаются в нижнем регистре. Вот такая может быть засада. 🕶
👏1💯1
Результат переделки синхронизации через WinSCP. Теперь весь код в Albireo CMS и юзеру больше не нужно загружать специальные файлы на сервер. Переделка большая, потратил несколько дней, но результатом доволен. Стало очень удобно проверять различия, и решать конфликты. Пока тестирую.
https://maxsite.org/albireo/introduction/sync-script-for-winscp
https://maxsite.org/albireo/introduction/sync-script-for-winscp
Albireo CMS — «движок» блога
Синхронизация файлов через WinSCP
👍3🔥1
Что-то я совсем перестал понимать ChatGPT... Уже который раз сталкиваюсь с тем, что он вместо того, чтобы обсуждать задачу по существу, начинает придираться к словам, фразам и уходит в какую-то софистику...
Например если написать «Все — козлы!» он по настоящему начнёт это обсуждать и делать замечание, что а) не все, и б) не только козлы...
Это у всех так, или только у меня такая нейромодель подвернулась?
PS Напомню наш чат здесь: https://t.me/maxsite_chat
Например если написать «Все — козлы!» он по настоящему начнёт это обсуждать и делать замечание, что а) не все, и б) не только козлы...
Это у всех так, или только у меня такая нейромодель подвернулась?
PS Напомню наш чат здесь: https://t.me/maxsite_chat
В Albireo CMS добавил баннер об использовании кук. Тут всё не так просто. Есть законы (GDPR), которые регулируют как именно следует собирать персональные данные посетителей, и куки, как раз один из этих механизмов.
Сами куки, условно делятся на «технические», то есть те, которые необходимы для работы сайта, например токены безопасности, авторизации. Другие куки — персонализированные, например сбор статистики.
Если сайт использует только технические куки, то ему не нужно разрешение от посетителя. Можно даже не выводить уведомление. Просто потому что эти куки не используются для персонализации.
Но если, например добавить счётчик Google Analytic, то сайт должен спрашивать разрешение посетителя на использование этого счётчика. Причем явно и до того, как код счётчика будет загружен. Если посетитель не даёт согласие, то сайт не имеет права подключать счётчик ни в каком виде.
Если, скажем, загружать счетчик, но потом вывести диалог согласия, то это всё-равно нарушение закона. Здесь строго: вначале согласие, потом сбор информации.
На Западе уже много случаев, когда крупные сайты штрафовали за такие нарушения.
Технически это интересная задача и не такая простая как может показаться.
Для запоминания выбора посетителя используется кука (назовём её gdpr). У неё может быть два значения: allow и deny. Поэтому сайт оперирует тремя вариациями:
- allow - разрешен счетчик,
- deny - запрещен,
- none - куки нет, выбора не было.
Если gdpr-кука равна none, то нужно вывести диалог согласия. Если же другое значение, то диалог не выводится. При этом, проверятся допустимые значения куки. Если скажем она равна «yes», то это неверное значение и оно присваивается как «none» — то есть нужно опять показать диалог.
Что касается вывода кода счётчика, то этот код размещается в сниппете и там добавляется одна проверка:
Диалог согласия я сделал тоже на сиппете, причем в 4-варианциях дизайна (как в MF), подключается в конфигурации
Всю логику я разместил прямо в сниппете. Если нужно поменять, копируется в my-каталог и там свои правки.
Кроме того сразу сделал мультиязычность: она задаётся в конфиг-файле. Там же меняется время жизни куки. 🧐
Сами куки, условно делятся на «технические», то есть те, которые необходимы для работы сайта, например токены безопасности, авторизации. Другие куки — персонализированные, например сбор статистики.
Если сайт использует только технические куки, то ему не нужно разрешение от посетителя. Можно даже не выводить уведомление. Просто потому что эти куки не используются для персонализации.
Но если, например добавить счётчик Google Analytic, то сайт должен спрашивать разрешение посетителя на использование этого счётчика. Причем явно и до того, как код счётчика будет загружен. Если посетитель не даёт согласие, то сайт не имеет права подключать счётчик ни в каком виде.
Если, скажем, загружать счетчик, но потом вывести диалог согласия, то это всё-равно нарушение закона. Здесь строго: вначале согласие, потом сбор информации.
На Западе уже много случаев, когда крупные сайты штрафовали за такие нарушения.
Технически это интересная задача и не такая простая как может показаться.
Для запоминания выбора посетителя используется кука (назовём её gdpr). У неё может быть два значения: allow и deny. Поэтому сайт оперирует тремя вариациями:
- allow - разрешен счетчик,
- deny - запрещен,
- none - куки нет, выбора не было.
Если gdpr-кука равна none, то нужно вывести диалог согласия. Если же другое значение, то диалог не выводится. При этом, проверятся допустимые значения куки. Если скажем она равна «yes», то это неверное значение и оно присваивается как «none» — то есть нужно опять показать диалог.
Что касается вывода кода счётчика, то этот код размещается в сниппете и там добавляется одна проверка:
// если нет явного разрешения, счётчик выводить нельзя
if (myGetCookie('gdpr', 'none') !== 'allow') return;
Диалог согласия я сделал тоже на сиппете, причем в 4-варианциях дизайна (как в MF), подключается в конфигурации
page-data.php:'snippet.lazy[gdpr/cookies1]' => 1,
Всю логику я разместил прямо в сниппете. Если нужно поменять, копируется в my-каталог и там свои правки.
Кроме того сразу сделал мультиязычность: она задаётся в конфиг-файле. Там же меняется время жизни куки. 🧐
👍6
Почему лучше не настаивать на своей точке зрения
Парень лет 30, приехал с женой — покупали весной у нас рассаду клубники. Дотошный, всё расспрашивает, живо интересуется что к чему.
Заинтересовала его выгребная яма на участке. Визуально это просто несколько листов шифера. Внутри достаточно сложная конструкция. Я не хотел делать как все: кольца, кирпич, бетон и т.п. Поэтому изучил вопрос досконально: какой тип грунта, какова способность впитывать воду, провёл несколько экспериментов. В итоге остановился на американском варианте.
Они используют специальные пластиковые кубы, напоминающие наши обычные ящики. Кубы сцепляются между собой, оборачиваются агротекстилем и потом закапываются в землю. Впечатляет то, что потом над ними потом организуют парковки, лужайки и т.п. То есть несущая способность кубов очень высокая.
Я использовал эту идею, только на наших обычных ящиках. Собрали по периметру ямы (высота 3 метра), сделали две секции, снаружи агроволокно, сверху обычный шифер. Дешево и сердито.
За несколько лет уровень воды внутри не более 30-50 см. Так работает фильтрация почвы. Каждый год закидываю специальные водоросли для септиков. Цена вопроса 20-50 грн, но эти звери очень эффективны. Их я проверял еще до оккупации Крыма, где у дома септик был простой пластиковой ёмкостью. Водоросли перерабатывали всё до обычной воды.
Так вот, парень интересуется, я рассказываю. Потом он говорит, что на днях с каким-то родственником чистил свою яму из колец. Причем им пришлось лезть прямо внутрь колодца и вышкрябывать всё руками... Жуть конечно...
Я тогда говорю, что вначале нужно было бы водоросли попробовать. Он кривится: «Что-то я сомневаюсь, что они вообще работают!».
Ситуация немного странная, я 100% уверен в своём совете, но он его отвергает (пусть даже и на будущее). Ему проще буквально ковыряться в дерьме, чем попробовать другой способ.
Я, конечно, больше не стал доказывать и убеждать. Пусть делает выбор сам. 😚
Парень лет 30, приехал с женой — покупали весной у нас рассаду клубники. Дотошный, всё расспрашивает, живо интересуется что к чему.
Заинтересовала его выгребная яма на участке. Визуально это просто несколько листов шифера. Внутри достаточно сложная конструкция. Я не хотел делать как все: кольца, кирпич, бетон и т.п. Поэтому изучил вопрос досконально: какой тип грунта, какова способность впитывать воду, провёл несколько экспериментов. В итоге остановился на американском варианте.
Они используют специальные пластиковые кубы, напоминающие наши обычные ящики. Кубы сцепляются между собой, оборачиваются агротекстилем и потом закапываются в землю. Впечатляет то, что потом над ними потом организуют парковки, лужайки и т.п. То есть несущая способность кубов очень высокая.
Я использовал эту идею, только на наших обычных ящиках. Собрали по периметру ямы (высота 3 метра), сделали две секции, снаружи агроволокно, сверху обычный шифер. Дешево и сердито.
За несколько лет уровень воды внутри не более 30-50 см. Так работает фильтрация почвы. Каждый год закидываю специальные водоросли для септиков. Цена вопроса 20-50 грн, но эти звери очень эффективны. Их я проверял еще до оккупации Крыма, где у дома септик был простой пластиковой ёмкостью. Водоросли перерабатывали всё до обычной воды.
Так вот, парень интересуется, я рассказываю. Потом он говорит, что на днях с каким-то родственником чистил свою яму из колец. Причем им пришлось лезть прямо внутрь колодца и вышкрябывать всё руками... Жуть конечно...
Я тогда говорю, что вначале нужно было бы водоросли попробовать. Он кривится: «Что-то я сомневаюсь, что они вообще работают!».
Ситуация немного странная, я 100% уверен в своём совете, но он его отвергает (пусть даже и на будущее). Ему проще буквально ковыряться в дерьме, чем попробовать другой способ.
Я, конечно, больше не стал доказывать и убеждать. Пусть делает выбор сам. 😚
👍5
Переделал админку Albireo CMS. Так выглядит страница файлов-записей сайта.
Я мого думал как именно следует «правильно» выводить записи во Flat-File CMS и в итоге пришел к выводу, что лучше всего использовать файловую структуру. Потому что это создаёт меньше путаницы.
Если же выводить в привычном «сплошном» формате списка, то теряется понимание того, что страница — это отдельный файл. Такой вывод не проблема, но уже невозможно будет понять структуру каталогов, и для этого типа систем, это уже не очень хорошо.
Я мого думал как именно следует «правильно» выводить записи во Flat-File CMS и в итоге пришел к выводу, что лучше всего использовать файловую структуру. Потому что это создаёт меньше путаницы.
Если же выводить в привычном «сплошном» формате списка, то теряется понимание того, что страница — это отдельный файл. Такой вывод не проблема, но уже невозможно будет понять структуру каталогов, и для этого типа систем, это уже не очень хорошо.
👍2
Встретилась интересная статья о том, как сейчас усложнилась верстка... Меня всегда удивляло то, что люди предпочитают какие-то сложные и дорогие, обходные пути, вместо того, чтобы научиться каким-то базовым вещам. Лично мой подход — это двигаться от результата, то есть понять что нужно получить в итоге, а уже потом думать какой для этого использовать инструмент. Оказывается для многих такой подход в диковинку (не хватает «адреналина»?).
https://davidpoblador.com/deep-dives/what-happened-to-the-frontend/
https://davidpoblador.com/deep-dives/what-happened-to-the-frontend/
David Poblador i Garcia
The Descent — What Happened to the Frontend While You Weren't Watching
The last time you wrote one it was a <button> and an FTP upload — spare twenty minutes and get up to speed on everything the web did while you looked away.
👍3
Хочу добавить в Albireo CMS еще с десяток разных примеров страниц. Вот здесь: https://maxsite.org/albireo/features#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B «Pure», «Vega», «Microlanding».
Если есть какие-то интересные примеры (речь в первую очередь про дизайн блога), то предлагайте в комментариях.
Если есть какие-то интересные примеры (речь в первую очередь про дизайн блога), то предлагайте в комментариях.
Albireo CMS — «движок» блога
Возможности Albireo CMS
Есть такая контора Hugging Face, очень крупная в области ИИ. Им нужна база данных и они решили просто спиздить всё с гитхаба. А чё, там же всё открыто, да и лицензии в основном открытые. Правда забыли уточнить, что всё равно это требует указания авторства. Но это же мелочь...
Теперь скандал разросся и Hugging Face милостиво разрешила владельцам репозиториев отправить запрос на удаление своих данных из их хранилища. Вот здесь форма: https://huggingface.co/spaces/HuggingFaceCode/in-the-stack
Мне кажется, что это хороший такой гвоздь в гроб Open Source с Гитхабом в придачу. 🤬
Теперь скандал разросся и Hugging Face милостиво разрешила владельцам репозиториев отправить запрос на удаление своих данных из их хранилища. Вот здесь форма: https://huggingface.co/spaces/HuggingFaceCode/in-the-stack
Мне кажется, что это хороший такой гвоздь в гроб Open Source с Гитхабом в придачу. 🤬
👎1🤬1
Для Albireo CMS я использую встроенную статистику, где выдаётся кол-во просмотров каждой страницы.
Заметил, что число просмотров явно завышено: 1500-3000 в сутки. Мой сайт однозначно не имеет такой посещаемости, поэтому я заподозрил, что это нашествие ботов.
Просмотрев логи сервера, я подтвердил свою догадку. Поэтому внёс в статистику изменения так, чтобы она отсекала по возможности все боты.
В итоге реальная посещаемость держится в районе 400-600 хитов, что более-менее совпадает с анализом логов.
То есть получается, что сейчас основной трафик делают не люди, а боты. Причем ботов больше чем людей примерно в 3-5 раз. 🧐
Заметил, что число просмотров явно завышено: 1500-3000 в сутки. Мой сайт однозначно не имеет такой посещаемости, поэтому я заподозрил, что это нашествие ботов.
Просмотрев логи сервера, я подтвердил свою догадку. Поэтому внёс в статистику изменения так, чтобы она отсекала по возможности все боты.
В итоге реальная посещаемость держится в районе 400-600 хитов, что более-менее совпадает с анализом логов.
То есть получается, что сейчас основной трафик делают не люди, а боты. Причем ботов больше чем людей примерно в 3-5 раз. 🧐
🔥3
Сегодня смотрю, опять всплеск активности ботов. Скормил логи gemini, он нашёл новые боты. В итоге добавил их в регулярку.
Если нужно, вот текущий список:
Если нужно, вот текущий список:
bot|spider|crawl|slurp|mediapartners|ia_archiver|semrush|ahrefs|mj12bot|dotbot|bytespider|claudebot|perplexity|chatgpt|gptbot|anthropic|cohere|python|java|curl|wget|libwww|httpclient|okhttp|phantomjs|headless|scrapy|guzzle|axios|fasthttp|go-http|selenium|puppeteer|playwright|scan|scanner|checker|nikto|sqlmap|masscan|zgrab|censys|shodan|acunetix|dirbuster|rce|shell|rss|feed|externalagent
👍3