
Open source *
Открытое программное обеспечение
О, сколько нам открытий чудных... готовит школа по RISC-V

Сегодня устройства на базе «молодой» архитектуры RISC-V, представленной в 2010 году, имеют ограничения по документации. Каждая инструкция в процессоре обладает двумя характеристиками исполнения, латентностью и пропускной способностью, которые зависят от реализации процессорного ядра. Латентность определяет время выполнения одной инструкции, а пропускная способность — количество инструкций, выполняемых за определенное время. Эти данные помогают разработчикам оптимизировать код и повысить эффективность выполнения алгоритмов процессором. Обычно характеристики предоставляются производителями ядер, но в настоящее время для актуальных ядер их не найти.
Существуют стандартные инструменты для измерения латентности и пропускной способности, например llvm-exegesis. Однако из-за быстрого развития архитектуры RISC-V не все инструкции включены в эти инструменты. В рамках образовательного проекта предлагалось изучить принципы создания микробенчмарков для таких задач и измерить новые реализации недавнего векторного расширения для RISC-V (RVV) на примере плат LicheePi 4A.
Изначально мы не знали, как вычислить латентность, но знали, что на современных архитектурах скалярное сложение должно выполняться за один такт. Поэтому решили найти такой метод, который на скалярном сложении покажет латентность в один такт.
Самый простой вариант измерения времени в тактах — вызвать инструкцию rdcycle, которая возвращает количество тактов, пройденных с определенного времени, выполнить инструкцию, которую мы хотим исследовать, и снова вызвать rdcycle. Мы сделали так и получили время выполнения скалярного сложения в десятки тактов...
Так начинается лишь один из 18 интересных проектов, которые подготовили студенты в рамках Зимней школы RISC-V. О том, что это за школа и что еще разработали ее участники, читайте в нашем блоге.
Свой класс события для плагинов Joomla. Продолжение.
Продолжение потому, что начало уже было в статье Виталия Некрасова на Хабре.
Кратко.
В Joomla 5+ для событий аргументы упаковываются в собственные классы событий: ContentPrepareEvent, AfterSaveEvent и т.д. Данные из них мы получаем в виде $event->getArgument('argument_name') или [$var, $var2] = array_values($event->getArguments());. Также для разных типов событий могут быть специфичные методы типа $article = $event->getItem(); в ContentPrepareEvent и т.д. И в статье Виталия как раз об этом рассказывается.
А так же рассказывается о методах onGet и onSet. В ядре Joomla в классе \Joomla\CMS\Event\AbstractEvent сказано:
/**
* Add argument to event.
* It will use a pre-processing method if one exists. The method has the signature:
*
* onSet($value): mixed
*
* where:
*
* $value is the value being set by the user
* It returns the value to return to set in the $arguments array of the event.
*
* @param string $name Argument name.
* @param mixed $value Value.
*
* @return $this
*
* @since 4.0.0
*/
Добрался я тоже до своего класса события для плагинов, порылся в ядре и подумал, что onSet... и onGet... методы не обязательно делать (хотя в статье по ссылке об этом не упоминается). Это методы для "предварительных проверок и манипуляций" с данными перед тем, как они будут отданы через getArgument() или get<ArgumentName>. Метод getData() отдаст данные, которые предварительно будут обработаны методом onGetData(). Но обработаны они будут только в том случае, если метод реализован. Если нет, то ничего страшного. Ошибки не будет.😎
Эти методы напоминают своеобразные плагины внутри плагинов. На мой взгляд излишнее усложнение, хотя сеттеры и геттеры должны заниматься по идее только сеттерством и геттерством, а проверку/ приведение типов можно отдать в методы onSet... / onGet....
Узнаем содержимое любого GitHub-репозитория за один клик с помощью универсального бесплатного ИИ-помощника Git-Friend.
Решение:
создаёт подробные и структурированные README-файлы для ваших проектов — это поможет сэкономить часы работы и сделать ваши труды более узнаваемыми.
делает саммари и гайды по любым репозиториям и досконально разжевывает их кодинговую базу
отвечает на вопросы, если вы застряли при анализе проекта или установке нового фреймворка.
скоро сервис сможет генерить диаграммы для еще более подробного анализа кода.

Объявлено решении включить в состав выпуска GNOME 49 видеопроигрыватель Showtime, который станет поставляться под именем GNOME Video Player и будет задействован по умолчанию вместо видеопроигрывателя Totem (GNOME Videos).
Для желающих протестировать Showtime не дожидаясь осеннего релиза GNOME 49 подготовлен пакет в формате flatpak. Программа отличается минималистичным интерфейсом, отображаемым поверх содержимого и скрываемым во время просмотра. Поддерживаются типовые элементы управления, полноэкранный режим, изменение скорости воспроизведения, показ субтитров и создание скриншотов.

⚡️Вести с полей - Duit
Новый релиз flutter_duit v3.5.0!
Что внутри:
⚙️ Новые виджеты: AnimatedAlign, AnimatedRotation, AnimatedPadding, AnimatedPositioned, AnimatedScale
⚙️ Фикс работы колбека окончания анимации для implicitly animated widgets
⚙️ Добавлены отсуствующие свойства атрибутов для виджета ElevatedButton
⚙️ Добавлена обработка свойств TextDecoration при парсинге TextStyle
⚙️ Передача свойства body для виджета Scaffold теперь осуществляется через свойство child json-схемы, а не через атрибуты виджета
⚙️ Исправление ряда багов в DSL-пакетах
Подробности о самом интересном:
🔧 В рамках релиза удалось исправить ряд проблем с DSL, где отсутствовали реализации некоторых виджетов (например AnimatedSize в duit_go)
🛠 Улучшена стабильность фреймворка, увеличено покрытие важных участков кода тестами
Поддержать проект:
- Кодом
- Денежкой
- TG канал DUIT
Android-приложение «Контакты»: работает — не трогай

У многих полей контакта есть типы. Например, у номеров телефонов или адресов электронной почты по умолчанию есть типы «рабочий» и «домашний». Аналитики сказали, что нужно реализовать дополнительные типы и дать пользователю возможность создавать свои. Звучит легко, но на деле оказалось совсем непросто.
Чтобы заменить стандартные типы полей, нужно добавить новую базу данных с доступными типами полей, а также реализовать отображение и возможность выбора поля. Для этого пришлось во многом переписать код редактирования полей контакта, где и без этого логика была непростой. Теперь стало совсем сложно: при добавлении или обновлении поля в contentProvider нужно указывать тип поля, так что мы начали указывать «custom».
После добавления кастомных типов приложение потеряло стабильность, появились кейсы, в которых кастомные типы работали неправильно. Один из них приводил к крашу: база данных не успевала создаваться при открытии интента на редактирование контакта.
Изначальный путь пользователя — это открыть приложение и увидеть список контактов с аватаркой, именем и номером телефона. Пока этот список подгружался на экране, база данных обычно успевала создаться. Но мы не учли, что при открытии интента на редактирование контакта из другого приложения сразу появляется экран редактирования — в этом случае база данных не успевала инициализироваться.
Создание схемы БД и инициализация стандартными значениями происходила в отдельном потоке, так что у нас получилась небольшая гонка потоков. UI готов отобразить экран и идет в БД за данными, но БД не успевает инициализироваться, так что запрос приводил к критической ошибке. Баг воспроизводился при попытке обратиться к БД только при первом холодном запуске на устройстве или после очистки данных, так как здесь приложению приходится заново создавать схему базы данных.
Пришлось опять добавлять костыль: в отдельной корутине ожидать инициализации БД и только потом начинать рисовать экран...
Дмитрий Бражник, старший инженер-программист в департаменте разработки мобильных приложений YADRO, рассказал в статье, как его команда пыталась допилить стандартное AOSP-приложение «Контакты» и к чему они в итоге пришли.
Представлен инструментарий Turns Codebase into Easy Tutorial with AI, который превращает любой репозитарий GitHub в учебник. Нейросеть анализирует весь код, разбирается в нём и создаёт гайд, в котором просто и понятно расписано как ресурс работает. С помощью решения можно легко учить новые технологии, изучать программирование по готовым проектам; писать документацию к своим репо.
Пример гайда по Tutorial: MCP Python SDK.

Новая маленькая, но полезная утилита:
password.hyoo.ru - генератор стойких уникальных паролей.

В отличие от менеджеров паролей, она ничего никуда не сохраняет. Это позволяет ей мгновенно генерировать пароли на любых девайсах даже в офлайне.
Вам достаточно помнить лишь один стойкий мастер-пароль и генерировать на его основе уникальные стойкие пароли для всех приложений.
Пароли соответствуют самым распространённым требованиям:
Длина 20 символов
Есть заглавные и строчные буквы
Есть хотя бы один спецсимвол
Есть хотя бы одна цифра
Только латиница
При генерации используются тысячи криптостойких хеширований, так что даже зная сгенерированный пароль, получить исходный мастер-пароль не реально.
Ах да, и ещё можно подписаться на новости об этом и других наших оупенсорс приложениях, а то и обсудить эту и другие важные темы на форуме гильдии.
Представлена подборка из 100 ресурсов для создания ИИ-агентов под большинство задач по всевозможным темам: от RAG, MCP-cерверов, мульти-агентов и саморефлективных моделей до узкоспециализированных агентов для подбора ресторанов, отелей, буста продуктивности и организации рабочих задач.

Автоматическое подключение локализации для веб-ассета в Joomla
Начиная с Joomla 4 в ядре реализована концепция веб-ассетов. Управление JavaScript и CSS в Joomla значительно упростилось благодаря классу WebAssetManager. Есть замечательная статья Как правильно подключать JavaScript и CSS в Joomla 4, в которой подробно и с примерами кода рассказывается об этой концепции и её применении. Например, в web asset мы можем оформить какую-нибудь готовую js-карусель или библиотеку.
Также можно оформить веб-ассетом и свой собственный js-скрипт, которому могут понадобиться дополнительные данные для работы на странице: как данные из PHP, так и языковые константы. С помощью WebAssetManager мы можем получить эти данные в момент сразу при подключении ассета. Как это сделать?
Для веб ассетов в Joomla создаётся файл joomla.asset.json, в котором описываются url подключаемых файлов, версии, их зависимости друг от друга, собираются пресеты для подключения пачкой и т.д. В нём можно указать пользовательский класс WebAssetItem, который будет выполнять нужную работу для вашего ассета. Для этого определите свойства namespace и class для всего файла или же для каждого ассета.
{
"$schema": "https://developer.joomla.org/schemas/json-schema/web_assets.json",
"name": "com_example",
"version": "4.0.0",
"namespace": "Joomla\Component\Example\Administrator\WebAsset",
"assets": [
{
"name": "foo",
"type": "script",
"class": "FooAssetItem",
"uri": "com_example/foo.js"
},
{
"name": "bar",
"type": "script",
"namespace": "MyFooBar\Library\Example\WebAsset",
"class": "BarAssetItem",
"uri": "com_example/bar.js"
}
]
}Ассет foo будет работать с классом Joomla\Component\Example\Administrator\WebAsset\FooAssetItem, а ассет bar с классом MyFooBar\Library\Example\WebAsset\BarAssetItem. Если namespace не указан, будет использоваться Joomla\CMS\WebAsset по умолчанию. Ну и сам класс должен находиться по указанному неймспейсу.
<?php
/**
* Класс WebAssetItem для подключения данных для работы веб ассета
*/
namespace Joomla\Component\Example\Administrator\WebAsset\AssetItem;
\defined('_JEXEC') or die;
use Joomla\CMS\Document\Document;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\WebAsset\WebAssetAttachBehaviorInterface;
use Joomla\CMS\WebAsset\WebAssetItem;
class FooAssetItem extends WebAssetItem implements WebAssetAttachBehaviorInterface
{
/**
* Method called when asset attached to the Document.
*
* @param Document $doc Active document
*
* @throws \Exception
*
* @since 1.0.0
*/
public function onAttachCallback(Document $doc)
{
Factory::getApplication()->getLanguage()->load('com_example');
// Add my-js-script.js language strings
Text::script('COM_EXAMPLE_LANGUAGE_STRING_FOR_FRONTEND');
/** @var array $data Данные для фронтенда, чтобы получать их
* в js через Joomla.getOptions('com_example.foo.js.data';)
*/
$data = [
'any' => 'data',
];
/** @var bool $merge Whether merge with existing (true) or replace (false) */
$merge = true;
$doc->addScriptOptions('com_example.foo.js.data', $data, $merge);
}
}Таким образом для нашего js-скрипта мы получили и локализованные стринги сообщений (как? - пост на Хабре) и дополнительные данные из PHP для фронтенда (статья на Хабре - в середине). Теперь когда вы где-то в любом месте Joomla подключаете веб ассет с помощью $wa->useScript('foo') - автоматически подключится всё необходимое для его работы.
xan, волшебник CSV
→ https://github.com/medialab/xan
xan — это приложение командной строки, которое можно использовать для обработки CSV-файлов непосредственно прямо из шелла.
Написан на Rust, а значит — быстрый, почти не жрёт память и без проблем обрабатывает очень большие CSV-файлы (гигабайты). Способен выполнять некоторые задачи параллельно (за счет многопоточности).
Сделан для удобного просматра, фильтрования, фрагментации, агрегации, сортировки, объединения CSV-файлов и предоставляет большую коллекцию компонуемых команд, которые могут быть объединены в цепочку для выполнения широкого спектра типичных задач.
xan также использует свой собственный язык выражений, позволяя выполнять сложные задачи. Этот минималистичный язык был разработан специально для работы с данными в формате CSV и работает намного быстрее, чем обычные языки с динамической типизацией, такие как Python, Lua, JavaScript и т.д.
Совет по Joomla: dot-нотация для доступа к значениям вложенных массивов.
Позволю себе немного ребячества ))

Наткнулся на пост в одном из php-шных каналов о том, как в Laravel можно использовать нотацию "точка" для доступа к значениям вложенных массивов. И тем самым упростить доступ к многомерным массивам с помощью одной строки, разделенной точками.
😎 Joomla тоже так может!
use Joomla\Registry\Registry;
$data = [
'user' => [
'name' => 'John Doe',
'email' => 'john@example.org',
]
];
$data = new Joomla\Registry\Registry($data);
$name = $data->get('user.name');
dump($name); // 'John Doe'Чат русскоязычного Joomla-сообщества.
Upd. И коллеги сразу решили дополнить:
Преимущество джумлы перед ларой в этом плане:
можно так обращаться не только к массивам, но и к объектам и даже к json'у
можно дополнять
можно выполнять
merge. Причём, как на весь объект, так и на отдельные его вложенности
Недостатки:
нужно сначала создать новый объект
нет вот такой нотации
get('*.key'), т.е. чего-то похожего наarray_column()
Ближайшие события
Наконец сделал открытый доступ к протеганным подборкам новостей в Feeds Fun. Безвозмездно, то есть без регистрации :-)
🔬 Свежие научные статьи с ArXiv — подборка особенно полезна, если вы хотите следить за узкой областью: генетическими алгоритмами там или особой математикой. Пошарьте с вашим друзьям-учёным, им должно зайти.
🚀 Новости для предпринимателей и стартаперов.
Также теперь можно делиться ссылками на отфильтрованные по тегам новости — например, на новые статьи по машинному обучению или на новости о профессиональном нетворкинге.
Представлен список из 20 самых популярных стартапов 2024 года с открытым исходным кодом по всему миру с точки зрения количества «звёзд» GitHub в проектах и их прироста. Оказалось, что более половины из них (11 из 20) тесно связаны с ИИ.

Redash в Amvera Cloud
Сегодня мы выпускаем Redash, как преднастроенный сервис.
Redash позволяет осуществлять запросы к базам данных и визуализировать результаты. Это хороший и простой BI-инструмент, которым мы пользуемся сами.
Для установки Redash необходимо заполнить по инструкции несколько переменных/секретов для подключения к PostgreSQL и Redis, и выбрать тариф от 290 р./мес.
Amvera Cloud — это облако для простого деплоя приложений через git push. Встроенный CI/CD, бэкапы и мониторинг позволяют развернуть проект тремя командами в IDE и не думать о настойке инфраструктуры. А встроенное проксирование к OpenAI, облегчает работу с LLM. Amvera проще, чем использование VPS.
Собственные макеты вывода для пользовательских полей Joomla
Мы привыкли использовать механизм переопределения макетов Joomla: скопируй нужный тебе файл макета в папку html шаблона и твори там что хочешь. Это в полной мере относится и к пользовательским полям Joomla.
Joomla ищет макеты рендера всех пользовательских полей в следующем порядке:
Есть ли файл
templates/[template name]/html/layouts/[component name]/fields/render.php, переопределяющий макет вывода полей для конкретного компонента? Да - используем его.Нет? Есть ли файл
components/[component name]/layouts/fields/render.phpв папке компонента? Да - используем его.Нет? Есть ли файл
templates/[template name]/html/layouts/com_fields/fields/render.php, переопределяющий вывод полей дляcom_fields? Да - используем его.Нет? Используем файл
components/com_fields/layouts/fields/render.phpЭто механизм поиска переопределений файлов макетов.
Вчера столкнулся с тем, что если поле вставлено в текст материала с помощью шорт-кода (кнопкой редактора) вида {field 25}, то переопределения не сработали. Поэтому стал вспоминать как сделать свой макет для поля Joomla.

Файл components/com_fields/layouts/field/render.php копируем в templates/YOUR_TEMPLATE/html/layouts/com_fields/field/etapy-raboty-nad-proektom.php. Обратите внимание, что мы файл переименовали, чтобы в настройках поля видеть его в выпадающем списке. После этого всё заработало как надо.
Благо, переводил уже раньше статью Как происходит рендер пользовательских полей в Joomla?. Потом, порывшись по своему же переводу увидел, что эта особенность работы Joomla в статье уже в ней описана 😂. А также напомнил себе о возможности указывать макет поля прямо в шорт-коде, через запятую: {field 25,etapy-raboty-nad-proektom}.
IMPulse - менеджмент инцидентов. Интеграция с Telegram.

После первой публикации об IMPulse, стало понятно, что основная интеграция, которую от нас ждут, это Telegram. И мы рады её представить!
Для работы с Telegram мы использовали группы с топиками - они лучше всего ложатся на наш функционал. В процессе разработки мы столкнулись с багом при упоминании (mention) пользователей в Telegram, о чём составили соответствующий issue. Если вы тоже заинтересованы в закрытии этого бага, пожалуйста поставьте "👍".
Помимо интеграции с Telegram стоит упомянуть реализованный шедулер для работы команд реагирования по расписанию. Синтаксис конфигурации составлен таким образом, чтобы в будущем была возможность интегрироваться с внешними календарями типа Google.
Также мы запустили нашу группу в Telegram для вопросов и обсуждений.
Скоро мы снова придём с очередными хорошими новостями! Подписывайтесь здесь, в Telegram'е или на GitHub'е, чтобы быть в курсе.
В Joomla 4 и Joomla 5 появилась концепция Web Assets и WebAssetManager, с помощью которого можно управлять подключениями css, js файлов, подключением. Все css и js файлы включаются в общий реестр ассетов, затем выстраивается граф зависимостей и в итоге на генерируемую страницу подключается только то что нужно на данной странице.
Поскольку веб-ассеты можно добавлять с помощью плагинов (ссылка на статью ниже) - можно сказать, что появилось новое направление для плагинов - веб-ассеты. Вы можете устанавливать плагины, включающие веб-ассеты и использовать их как зависимости в самых разных местах Joomla: в шаблоне, в макетах модулей и плагинов.
Одним из таких плагинов веб-ассетов является WT JSwiper.js. Плагин добавляет в Joomla Web Assets Registry ассет популярного скрипта swiper.js, который потом легко можно использовать в коде:
use Joomla\CMS\Factory;
$wa = Factory::getApplication()->getDocument()->getWebAssetManager();
// Локальный файл
$wa->useScript('swiper-bundle')->useStyle('swiper-bundle');
// Подключение из CDN
$wa->usePreset('swiper-bundle-remote'); 😐 Например, было: иконочный шрифт могут использовать 2 разных модуля. CSS обычно подключается в шаблоне и он грузится везде, даже там, где не надо. Если же подключать CSS в одном модуле, а в другом нет - на странице стиль есть ровно до тех пор, пока опубликован модуль с этим подключением.
👍 Стало: теперь в макетах расширений мы просто пишем $wa->useStyle('my.style'); и за необходимостью подключения нужного ассета (в данном случае CSS с иконочным шрифтом) следит Web Asset Manager. Если мы снимем один модуль с публикации, то нужный ассет подключит другой модуль.
Поскольку плагин - расширение Joomla - его можно обновлять обычным для Joomla способом и всегда иметь самую свежую версию любимого js-скрипта или веб-ассета на всех своих сайтах и сайтах ваших клиентов.
В этой версии, кроме обновления собственно ассета до версии 11.2.5 к нему добавился пока что частичный перевод документации Swiper на русский язык.
Также будет полезно:
Исследование выявило ключевые тенденции в том, как open-source проекты работают с документацией:
✅ README-файлы появляются на ранних этапах жизни проекта.
✅ Руководства по внесению вкладов (CONTRIBUTING) добавляются позже, когда активность растёт.
✅ Документация в основном сосредоточена на использовании и внесении изменений, а не на развитии сообщества, несмотря на частые рекомендации уделять больше внимания именно этому аспекту.
Хотя развитие сообщества считается важным фактором устойчивости FLOSS-проектов, не все основатели сразу ставят эту цель. Более того, излишний упор на построение сообщества на ранних этапах может усложнить процесс и отпугнуть потенциальных участников.
🔍 Главный инсайт: Вместо универсального подхода open-source проекты могут выстраивать стратегию документации, исходя из реального роста и потребностей участников. Интересно, что более содержательная документация, как правило, коррелирует с расширением проекта со временем.

Вклад авторов
alizar 12529.6Jeditobe 5045.8Andrey2008 2241.9SvyatoslavMC 2206.0Seleditor 2043.2ru_vds 1666.1m1rko 1437.2empenoso 1433.0dalerank 1291.0shurup 1120.2
