Все потоки
Поиск
Написать публикацию
Обновить
341.46

Open source *

Открытое программное обеспечение

Сначала показывать
Порог рейтинга

Аркадный автомат на RISC-V: сбиваем астероиды с микроконтроллером MIK32 АМУР

Вадим Новиков решил реализовать игровую физику в условиях bare metal, используя свой предыдущий опыт на C++/SFML. В проекте использовалась плата Elbear Ace-Uno на базе микроконтроллера MIK32 АМУР, SPI OLED-дисплей SSD1306 разрешением 128×64 и джойстик HW-504 (KY-023), а также модули SPI (цифровой интерфейс передачи данных), аналого-цифровой преобразователь для калибровки и чтения положения джойстика и GPIO для вывода настройки и ввода состояния кнопки.

Код на C включал непрозрачные типы, которые позволяют реализовать подобие инкапсуляции из ООП. С ними можно объявить в заголовочном файле указатель на некую структуру, но не определять ее. А в единственной трансляции определить структуру и статические функции для взаимодействия с внутренними полями, которые недоступны извне. И поместить туда, соответственно, реализацию открытого интерфейса. Вместо использования регистров напрямую Вадим подключил библиотеку hardware abstraction layer (HAL), чтобы впоследствии было проще портировать проект на STM32 и другие микроконтроллеры.

Результатом работы стала Asteroids — реинкарнация классической игры эпохи аркадных автоматов. Корабль игрока непрерывно выпускает снаряды. После столкновений снаряда с астероидом исчезают оба объекта, при столкновении с кораблем — только астероид. Астероиды, вышедшие за нижнюю границу, возвращаются сверху экрана. Корабль же выйти за границы экрана не может.

Это лишь один из интереснейших проектов, реализованных студентами по итогам последнего потока курса YADRO по программированию микроконтроллеров на RISC-V. Интересно узнать о других проектах? Мы уже рассказали о них в статье.

Теги:
Всего голосов 4: ↑4 и ↓0+4
Комментарии0

Repeater - планировщик для анализа данных, упрощенный Apache Airflow.

Repeater запускает задачи по расписанию. Задачи - последовательности консольных программ - описываются в toml-файлах. Запуски отображаются в веб-интерфейсе.

Пример задачи - запуск скриптов wiki_stats.py и wiki_pageviews.py импорта верхнеуровневой статистики Википедии в локальную базу.

title = "wiki"
cron = "0 55 * * * *"

[[tasks]]
name = "wiki_stats"
cmd = "python3 ./examples/wiki_stats.py"   

[[tasks]]
name = "wiki_pageviews"
cmd = "python3 ./examples/wiki_pageviews.py --end_date={{.scheduled_dt}}"

Бэкэнд написан на Go. Команды ниже запустят Докер-контейнер с сервисом и окружение для примеров:
- Repeater http://localhost:8080 - планировщик
- ClickHouse http://localhost:8123 и http://localhost:9000 - база данных
- ch-ui http://localhost:8001 - веб-интерфейс к базе данных
- Streamlit http://localhost:8002 - дашборды

git clone https://github.com/andrewbrdk/Repeater
cd Repeater
docker compose up --build

В примерах импорт количества просмотров страниц Википедии, курса биткоина, статистики репозитория Линукса на Гитхабе. Графики в Streamlit http://localhost:8002 .

Интересны применения проекта. Попробуйте! Впечатления пишите в комментариях. Спасибо!

Репозиторий: https://github.com/andrewbrdk/Repeater

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Одной из особенностей любого опенсорс-проекта является проблема управления этим проектом. Человек с ключами от главного репозитория и с правами на управление сайтом и/или мобильными сторами имеет возможность осуществлять действия, которые не будут пользоваться поддержкой иных участников (контрибьюторов) данного проекта.

Например, владельцу продукта может придти в голову идея внедрить жесткую монетизацию каких-либо фичей, или вставить рекламу, или изменить условия лицензии на часть кода, сделав её проприетарной, а не свободной.

Случившийся в марте конфликт между сооснователями проекта Organic Maps стал тем триггером, который запустил создание комьюнити-форка проекта, над которым начали работу часть бывших контрибьюторов Органикмапса.

Так появился проект CoMaps - полностью оффлайновые и бесплатные карты для мобильных устройств с фокусом на приватность: в приложении нет каких-либо трекеров, мы не собираем и не передаем кому-либо каких-либо данных.

https://comaps.app

А приставка "Co" намекает, что это именно community-driven проект, где ключевые решения принимаются после обсуждения внутри всего сообщества контрибьюторов и при необходимости - после сбора мнений путем голосования за тот или иной вариант.

За прошедшие три месяца команде разработчиков удалось наладить стабильную сборку приложения и карт из OpenStreetMap, провести доработку части функциональности приложения. Например, добавили изолинии (рельеф) с шагом 100 метров для всех возможных территорий, сделали локальный бэкап меток и записанных треков, изменили на более удобный для восприятия (ну, нам так кажется) картостиль.

Дальнейшее развитие проекта предполагает как развитие текущих и создание новых фичей на основе сбора обратной связи от самих пользователей, так и формализация самого статуса проекта. Прямо сейчас мы обсуждаем и рассматриваем разные варианты, в том числе создание "нон-профит" организации; или же можем придти под крыло какой-нибудь известной организации вроде SFC или подобной.

Так как сегодня, 3 июля 2025, мы сделали первый публичный релиз приложения в сторах, приложу пачку ссылок на ключевые ресурсы проекта:

Такие дела.

Теги:
Всего голосов 15: ↑15 и ↓0+19
Комментарии7

Открыта регистрация на Kubernetes Community Day — главную сходку K8s-сообщества

31 июля в Москве состоится первая независимая конференция Kubernetes Community Day для открытого сообщества профи по куберу и тех, кто только начинает. Два пространства с техническими докладами, дискуссиями и хардкорными воркшопами, интерактивы и IT StandUp. Никаких HR-стендов и дорогих билетов — только бесплатное участие, сообщество, живое общение.

Цель мероприятия — создать площадку для объединения сообщества, обмена опытом и нетворкинга. В программе — актуальные выступления от коллег из различных компаний, которые дышат контейнерами: Yandex Cloud, ecom.tеch, VK, Luntry, МКБ, «Лаборатория Числитель», Lamoda Tech, Rebrain, Cloud ru и др.

Среди заявленных тем:

  • «Legacy-кубы и как нежно увезти с них продукты»

  • «Ретроспектива уязвимостей системных компонентов Kubernetes»

  • «Блеск и нищета Cluster API Kubernetes»

  • «Почему K8s — плохой продукт и он вам не нужен?»

  • «Как мы переизобрели UI для Kubernetes: динамический фронт на основе OpenAPI и CRD».

Полная программа будет объявлена позже.

Зачем идти?

  • Послушать истории коллег про реальные кейсы, факапы и «боли». 

  • Прокачать свои знания, узнать про актуальные инструменты и подходы из первых рук.

  • Встретиться со старыми друзьями и найти новых.

  • Внести свой вклад в сообщество.

Формат: офлайн и онлайн.

Участие бесплатное. Количество мест на офлайн ограничено площадкой — успейте зарегистрироваться!

Следите за анонсами мероприятия в Telegram-канале генерального партнера конференции — платформы «Штурвал».

Информационные партнеры: Computerra, ICT Online, Cybermedia, Global Digital Space, AM Live, ict2go, Kubernetes_ru, DevOps For Love, IT STAND.

Теги:
Всего голосов 4: ↑2 и ↓2+1
Комментарии0

Представлен обновлённый проект Awesome Black Hat Tools, где собраны все инструменты, которые когда-либо были представлены на ИБ-конференциях Black Hat. Инструменты аккуратно структурированы по странам, где проходила конференция, по годам и категориям Red Teaming, Blue Teaming, OSINT & Recon, Exploit Development, Malware Analysis, DFIR & Forensics, Threat Intelligence, ICS/IoT/SCADA и Application Security (AppSec).

Также все презентации с выступлений Black Hat, начиная с 2023 года, собраны на отдельной странице GitHub.

Теги:
Рейтинг0
Комментарии0

Прошло довольно много времени с тех пор, как я в последний раз что-либо публиковал на Хабре, около 10 лет или около того, и сегодня настал день, чтобы поделиться своим небольшим Open Source проектом.

Проект под названием Gaunt Sloth Assistant — это CLI-клиент для ИИ (AI), созданный на TypeScript (LangChain.js), распространяемый через npm и работающий в Linux, Windows и Mac. Пользователь полностью контролирует промпты, и рекомендуется формировать свои собственные системные промпты, но у него также есть и стандартный.

GitHub: https://github.com/andruhon/gaunt-sloth-assistant

NPM: https://www.npmjs.com/package/gaunt-sloth-assistant

В настоящее время Gaunt Sloth имеет dependencies, позволяющие использовать простую конфигурацию JSON для VertexAI, Anthropic, Groq, DeepSeek, OpenA. Теоретически он должен работать с любой моделью, поддерживаемой LangChain; есть даже package для Яндекса, который я никогда не пробовал, но думаю, он должен работать, если установить пакет и предоставите конфиг в JS. OLLAMA? Возможно, это сработает; я никогда не пробовал, но буду признателен, если кто-нибудь поделится своим опытом.

Gaunt Sloth может просматривать запросы на слияние и сопоставлять их с требованиями из задачи Jira или GitHub, просматривать локальные различия, общаться в чате, имеет доступ к файловой системе и может записывать код в файловую систему.

Gaunt Sloth — это универсальный инструмент с рядом полезных возможностей:

  • Просматривает запросы на слияние (например 42) и сопоставляет их с требованиями из задачи Jira или GitHub (например 12).

    • gth pr 42 12

  • Просматривает локальные различия.

    • git --no-pager diff | gth review

  • Предоставляет интерактивный сеанс чата.

    • gth chat

  • Имеет доступ к файловой системе для чтения и записи кода.

    • gth code

Конечно, у него есть MCP и OAuth, так что вы можете подключиться к удаленному MCP, такому как Jira, и создавать и редактировать issues "like a boss".

У него также есть крошечная функция, которая может регистрировать время по задаче Jira, когда она заканчивает проверку PR. Это еще не задокументировано, но вы можете найти пример конфигурации в примечаниях к выпуску или спросить меня в комментариях (насколько я знаю, Jira MCP этого делать не может).

Кроме того, вы можете поставлять простые локальные инструменты ИИ в формате инструментов LangChainJS, такие как этот:

import { tool } from "@langchain/core/tools";
import { z } from "zod";
const multiply = tool(
  ({ a, b }: { a: number; b: number }): number => a * b,
  {name: "multiply", description: "Multiply two numbers", schema: z.object({ a: z.number(), b: z.number(), })}
);

Он очень ориентирован на конфигурацию и рекомендации. У меня есть отдельная конфигурация в каждом проекте, которая настраивает его для меня и предоставляет необходимые рекомендации, чтобы ИИ не напортачил из-за недостатка информации.
Кроме того, у меня есть ряд проектов, не связанных с кодированием. У меня есть отдельный для Jira с подробными инструкциями по работе с ним и еще один для написания текстов.

Зачем?

Несколько месяцев назад я искал CLI-помощника на базе LangChainJS/LangGraphJS и не нашел многого. Был фактор любопытства и другие факторы.

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

Например gth code, говорите implement requirements.md, чтобы он прочитал файл и начал кодить.

GeminiCli, ClaudeCode? Они не были официально выпущены, и я не знал, что они находятся в разработке. Aider, Goose? Конечно, они вероятно лучше, но в них сложнее вносить свой вклад и добавлять нужные вам функции.

И что?

У меня больше идей по созданию функций, чем времени.
Приветствуются контрибьюторы.
Попробовать его и создать issue или поделиться отзывом — это тоже вклад; PR был бы еще лучше.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии4

UART-сенсоры и браузер: читаем воздух через браузер на sensor.pollutants.eu

polluSensWeb
polluSensWeb

Привет, Хабр!
Делюсь своим простым, но мощным инструментом: веб-интерфейс для чтения данных с UART-сенсоров прямо через браузер. Да, без установки чего-либо. Просто открываешь страницу — и видишь, что творится в воздухе.

🤔 Зачем всё это?

Если ты возишься с датчиками качества воздуха, то знаешь, как это бывает: подключил — и пошёл искать minicom, Ultra, какой-нибудь Python-скрипт, или ещё чего. А если ты просто хочешь посмотреть, дышит ли твой сенсор — зачем столько движений?

И тут пришла идея: а почему бы не сделать всё в браузере?

🌐 HTML + JS + JSON = 👌

Ты заходишь на sensor.pollutants.eu, выбираешь нужный сенсор из списка (если в JSON их несколько), подключаешься к COM-порту — и данные потекли.

Без установки. Просто HTML-страница, в которой уже всё встроено:

  • работа с Web Serial API,

  • парсинг бинарных фреймов по структуре из JSON,

  • визуализация данных через Chart.js,

  • конфигурация через внешний JSON-файл.

  • скачивание статистики в CSV

⚙️ Конфигурация сенсоров

Конфиг грузится с GitHub и содержит несколько сенсоров. Можeте загрузить свой JSON.
Проект на hackaday

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Можно ли развернуть кластер Kubernetes на процессоре с открытой архитектурой RISC-V?

Короткий ответ: нет.

К сожалению, на данный момент «классический» K8s неполноценно портирован на RISC-V. Один из необходимых модулей K8s — kubelet — отказался запускаться на RISC-V-машине (в роли нее — микрокомпьютер Lichee Pi 4A).

Плата с кулером и подключенной WiFi-антенной
Плата с кулером и подключенной WiFi-антенной

Зато облегченная версия оркестратора K3s и Docker Swarm заработали на RISC-V, но с разными компромиссами:

→ Docker Swarm проще в развертывании.

→ K3s — более гибкий в работе, так как поддерживает Kubernetes-инструменты.

В синтетических тестах (stress-ng) K3s показал лучшую производительность на матричных вычислениях — он обошел показатели Docker Swarm примерно в 16 раз. В цифрах: 2.996 bogo ops/s (K3s) против 188 bogo ops/s (Docker Swarm). Возможно, это связано с оптимизацией Kubernetes или меньшими накладными расходами: K3s потребляет меньше ресурсов на фоновые процессы, такие как управление кластером и сетью, что важно для маломощных устройств.

Интересно узнать больше? Тогда переходите по ссылке и читайте подробности экспертимента по заапуску известных оркестраторов на RISC-V.

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0

🔺HFDay.ru

Сделал для сообщества сайт с обзорами статей с HF Daily Papers на русском.

hfday.ru
hfday.ru

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

Обзоры, теги по темам и прочие данные генерируются через claude-3.7 и gpt-4o на основе спаршенных с сайта абстрактов. Аффилиации, имена авторов и скриншоты также вытаскиваются из статей и отображаются.

Код. Развернуто все полностью на GitHub — через Workflow джобы и Pages, что само по себе очень прикольно. Скрипты обновляют файлы с данными, пишут логи и генерируют страничку, которая коммитится обратно в репозиторий. Такую автоматизацию удобно использовать для своих проектов. Код открыт.

Данные. Предыдущие выпуски, включая json с классифицированными обзорами, откладываются в папку /d, можно брать их для своих нужд. Кушает это где-то по 20-30 рублей в день.

Языки. Кроме русского, обзоры переводятся на английский и китайский (вдруг вы его подучиваете).

Фильтры. Можно фильтровать по тематике статей, классификация на 42 класса (#agents, #data, #healthcare, #machine_translation, #science, #long_context, #reasoning и другие). Можно делать перекрестные и объединяющие фильтры.

Рейтинг. Кроме топа по дням есть топ по месяцам — например, за июнь было уже 600+ статей. Можно посмотреть какие из них лучшие по каким темам. Опять же, на оригинальной страничке такого нет.

В общем, добавляйте в закладки и шарьте с коллегами. Идеи приветствуются.

hfday.ru x градиент обреченный

//Upd. Забыл добавить — код тут.

Теги:
Всего голосов 5: ↑5 и ↓0+5
Комментарии2

Добавили поддержку российских ОС в Open Source-платформе Deckhouse Kubernetes Platform

Хабр, мы кратко. В нашей Open Source-платформе Deckhouse Kubernetes Platform (DKP CE) появилась поддержка отечественных операционных систем. Изменения смержены в версии 1.69. 

Теперь в качестве ОС для узлов поддерживаются:

  • Astra Linux;

  • ALT Linux;

  • РЕД ОС;

  • РОСА Сервер.

Напомним — если у вас есть вопросы и обратная связь по DKP CE, их можно принести в наше Telegram-сообщество для инженеров. 

Теги:
Всего голосов 5: ↑5 и ↓0+6
Комментарии0

⚡️Вести с полей - Duit

Новый релиз - flutter_duit v3.6.0!

Что внутри:

⚙️ Новые виджеты: Offstage, AbsorbPointer, AnimatedCrossFade, AnimatedSlide, PhysicalModel, AnimatedPhysicalModel, CustomScrollView, SliverPadding, SliverFillRemaining, SliverToBoxAdapter, SliverFillViewport, SliverOpacity, SliverVisibility, SliverAnimatedOpacity, SliverSafeArea, SliverOffstage, SliverIgnorePointer, SliverList, SliverAppBar, FlexibleSpaceBar and SliverGrid (+21)

⚙️ Улучшен механизм передачи текущих значений анимации дочерним виджетам AnimatedBuilder

⚙️ Исправлен баг сепаратора в виджете ListView.separated, который не уничтожался правильно

⚙️ Значительно улучшено покрытие юнит-тестами критических участков кода (с 27% до 64%)

📖 Обновленная документация

Подробности о самом интересном:

⚡️Самое большое обновление виджетов! В этом важном релизе были добавлены сливеры - важная часть Flutter, без которой зачастую сложно реализовать высокоэффективные эффекты скролла.

🚀 Duit v4: производительность и простота. Анонсирую начало масштабных работ над мажорным обновлением проекта. Упрощение кодовой базы, решение проблем производительности, переосмысление дизайна DSL и надежная валидация входящих параметров - это лишь малая часть грядущего большого обновления!

Поддержать проект:
Кодом
Денежкой
TG канал DUIT

Теги:
Рейтинг0
Комментарии0

Представлена игра 2048 на Bash в терминале с 64 битами состояния.

«Поделитесь своим игровым состоянием с друзьями, просто отправив им число! Если переменная $STATE env не установлена, она генерирует новое случайное начальное число. В противном случае состояние доски и все будущие созданные ячейки будут детерминированными»,‑ пояснил автор проекта.

Теги:
Всего голосов 7: ↑7 и ↓0+8
Комментарии1

Процессор на RISC-V есть в Google Pixel 6. А когда в ноутбуках появится?

В 2024 году в продаже появились устройства с поддержкой векторного расширения RVV 1.0. RISE опубликовала гайд по оптимизации на RISC-V, провела адаптацию программных компонентов, запустила бонусную кампанию для разработчиков, портирующих на RISC-V. Canonical заявила, что с версии 25.10 ОС Ubuntu будут собирать под профиль RVA23. А Samsung продемонстрировала телевизор на RISC-V с Tizen.

Сейчас для RISC-V прорабатывают множество новых исследовательских идей и дальнейших расширений. Например, расширение формата команд до 48 и 64 бит, что в некоторых случаях поможет повысить эффективность архитектуры. За счет поддержки новых размеров констант, immediate-операндов и других нововведений в перспективе можно будет уменьшить размер кода. Развивается безопасность векторных расширений, а также расширенное профилирование для анализа сложных приложений, стеков и ПО.

Текущие наработки войдут в профиль RVA30, который, по всей видимости, станет следующим в развитии стандарта. На пути к этому большому обновлению увидит свет ABI для AOSP, а также платформы, определяющие дополнительные требования — например, в серверных сценариях.

Если выяснится, что в RVA23 не хватает каких-нибудь важных обязательных расширений, то придется выпускать новый major-профиль с ними раньше, чем хотелось бы. По пути к нему увидят свет и minor-профили: они содержат только опциональные расширения и не создают проблем с совместимостью.

На пятом митапе Российского Альянса RISC-V и YADRO эксперты в сфере RISC-V — Сергей Якушкин, Роман Хатько и Антон Афанасьев — обсудили успехи и перспективы RISC-V на рынке мобильных устройств в середине 2025 года.

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Ближайшие события

Подключайтесь к трансляции митапа для инженеров и сисадминов

Сегодня на SelectOS OpenFix Day обсуждаем лучшие практики работы с Open Source, вспоминаем свои инженерные факапы и разбираемся с нестандартными инфраструктурными задачами. Начало трансляции в 18:30 (мск).

Программа

  • Rust в ядре — прогресс или костыль в бронзе? Живая дискуссия про разный опыт работы с этим языком программирования.

  • Как справиться с инфраструктурным хаосом: вредные советы.

  • Честные истории о том, как падал и поднимался прод.

Ждем всех, кто не просто использует Linux, а вникает в код, фиксирует баги и патчит уязвимости. 

Смотреть трансляцию:

📱на YouTube

📱в VK

Теги:
Всего голосов 5: ↑5 и ↓0+7
Комментарии0

URLCheck: Полезная утилита для инспекции URL на Android

Хочу поделиться находкой, которая многим здесь придется по душе. Каждый из нас хоть раз с недоверием кликал по сокращенной или странной ссылке, присланной в мессенджере или почте. Сколько раз мы неосознанно переходили по ссылкам с кучей UTM-меток и прочего трекающего мусора?

Недавно я наткнулся на утилиту для Android, которая решает эту проблему - URLCheck.

Это не браузер, а приложение-посредник. Вы назначаете его для открытия ссылок по умолчанию, и когда вы кликаете на любую ссылку, вместо того чтобы сразу открыть его в браузере, URLCheck перехватывает его и показывает вам вот такое окно:

Вот несколько любопытных ключевых фич:

  • Очистка от трекеров: Автоматически вырезает из линка весь мусор вроде UTM-меток и параметров отслеживания, используя правила проекта ClearURLs.

  • Сканер VirusTotal: Позволяет в один клик отправить ссылку на проверку в VirusTotal и посмотреть отчет. (Нужен свой бесплатный API-ключ).

  • Раскрытие коротких ссылок: Показывает, куда на самом деле ведет укороченный линк типа bit.ly - зачастую фишинговые ссылки скрываются за укороченными линками, чтобы усложнить блокировки.

  • Проверка по хост-листам: Интегрируется со списками StevenBlack (adware, malware, fakenews и т.д.) и предупреждает, если домен находится в одном из них.

  • Pattern-checker: Для продвинутых - можно настроить свои правила на основе регулярных выражений. Например, автоматически заменять http на https или twitter.com на nitter.net.

  • Полный контроль над линком: Вы можете вручную отредактировать URL, посмотреть историю изменений или просто скопировать/поделиться ей.

И самое главное — приложение с открытым исходным кодом! Настоящий швейцарский нож для тех, кто заботится о своей безопасности и приватности в сети.

Где скачать:

В общем, рекомендую попробовать. Для меня это стало одним из приложений категории "must-have".

Теги:
Всего голосов 3: ↑3 и ↓0+4
Комментарии0

ByteDance выпустили нейросеть Dolphin, которая перегоняет pdf в классический формат документов, не превращая их в кучу непонятных символов:

  • выходе получаете тот же документ, но в другом формате.

  • cохраняются все подписи, изображения, графики и таблицы в оригинале.

  • работает за секунды, потому что парсит несколько фрагментов текста и визуала параллельно.

  • весить очень мало и не требует жесткой производительности.

Код на GitHub лежит — тут. Онлайн-демка — здесь.

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии2

Свои типы полей в Joomla.

Это большая тема, о которой можно говорить очень много. Самое главное, что возможности применения ограничиваются только вашей больной фантазией. Вы строите интерфейс своего модуля или плагина и вам нужно подтянуть данные из сторонней системы (список чего-нибудь по какому-нибудь API), чтобы сохранить выбранный id в Joomla. Или сделать какую-то проверку и в зависимости от неё показать то или иное сообщение пользователю. Для этого подойдут свои пользовательские типы полей.

Интерфейс Joomla по большей части описан в XML-файлах. У каждого из них свои параметры. Некоторые не описаны в документации (manual.joomla.org), поэтому самым любопытным будет полезно заглянуть в собственно файлы фреймворка по пути libraries/src/Form/FormField.php, а так же в libraries/src/Form/Fields. У каждого класса поля перечислены его специфические свойства, которые можно описывать в XML. А в своём типе поля вы можете устанавливать эти значения программно.

В моём модуле WT Quick links под капотом происходят изменения. Теперь для работы (в админке) ему нужен вспомогательный плагин. А в самом модуле нам бы проверить, а не выключен ли он?

В Joomla есть тип поля Note - заметка. Его можно использовать для вывода примечаний.

<field type="note"
     name="your_note_for_user"
     label="Заголовок примечания"
     title="Альтернативный способ для заголовка"
     description="Текст примечания"
     class="col-12 alert alert-info"
     heading="h1"
     close="true"
/>

heading- указывать уровень заголовка. close - позволяет закрыть это примечание.

В классе поля libraries/src/Form/Field/NoteField.php описана логика вывода. И в принципе оно нам подходит для нашей задачи. Но оно будет выводить сообщение всегда, а нам нужно только тогда, когда плагин отключён.

Поэтому берём и создаём свой класс поля, который мы унаследуем от NoteField. Это значит, что у нас в руках будет весь инструментарий стандартного поля Note + то, что мы сами добавим.

В XML-манифест добавляем наше поле:

<field type="systempluginstatus" 
     name="systempluginstatus"
     addfieldprefix="Joomla\Module\Wtquicklinks\Site\Fields"/>
  • type - имя файла и класса,

  • addfieldprefix - указываем namespace к нашему классу, может быть любой нам нужный

  • name - нельзя полю без имени...

Это означает, что Joomla будет использовать класс поля из файла modules/mod_wt_quick_links/src/Fields/SystempluginstatusField.php. А в классе поля будет написано следующее:

<?php
// namespace для атрибута addfieldprefix
namespace Joomla\Module\Wtquicklinks\Site\Fields;
// нельзя напрямую обращаться к этому файлу
defined('_JEXEC') or die;
// подключаем родительский класс для переопределения
use Joomla\CMS\Form\Field\NoteField;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Plugin\PluginHelper;

// имя класса и имя файла точь-в-точь
class SystempluginstatusField extends NoteField
{
     protected $type = 'Systempluginstatus'; // тип поля без "Field" в конце

     protected function getLabel()
          {
               // если плагин не включён
               if(PluginHelper::isEnabled('system','wtquicklinks')) {
                    // меняем свойства родительского класса поля
                    $this->class = 'alert alert-danger w-100';
                    $this->element['label'] = '⚠️ А-а-а-а!';
                    $this->element['description'] = 'Плагин не включён!!';
                    // и просто рендерим его с нашими свойствами
                    return parent::getLabel();
               }
          // А иначе всё хорошо, скрываем поле из виду.
          $this->parentclass = 'd-none';
          return '';
     }
}

Просто и удобно. И людям приятно, что о них позаботились и рассказали почему что-то не работает.

Теги:
Рейтинг0
Комментарии0

Как подход Docs-as-a-code применили в создании документации для TestY TMS

Команда разработки системы управления тестами TestY объединилась с командой технических писателей, чтобы создать удобную документацию.

Для ведения документации выбрали подход Docs-as-a-code. Документация хранится вместе с кодом приложения. Для написания и сборки использовали более-менее классическое сочетание: rST-формат в связке со Sphinx. 

Инженеры уверены, что такой вариант предоставляет большую гибкость, чем стандартный MD. К тому же,  rST в связке со Sphinx — стандарт документации для open source-проектов.

Одна из страниц документации
Одна из страниц документации

Разработчики поддерживают документацию в актуальном состоянии, поэтому рассчитывают, что в дальнейшем любое изменение текущей функциональности, как и разработка новой, будет сопровождаться обновлением документации. Это будет одним из Definition of Done для реализации фич.

Помимо документации в релизе 2.1 появилась темная тема и другие обновления интерфейса. Читайте о них в статье 

Теги:
Всего голосов 5: ↑5 и ↓0+7
Комментарии0

Джентельменский набор расширений Joomla, которые стоят на каждом моём сайте

Сел немного формализовать свои процессы. Получился вот такой список:

  • Blank page - компонент пустой страницы. Обычно используем для главной.

  • Revars (GitHub) - плагин шорт-кодов для контактов, реквизитов и т.д.

  • WT Revars insert (GitHub) - плагин кнопки редактора для вставки шорт-кодов

  • RadicalForm (GitHub) - плагин формы обратной связи. Подробная инструкция на сайте. Статья Разработка форм обратной связи для магазинов на Joomla на Хабре как создать форму + примеры кода. Есть интеграции с Б24 и Amo.

  • WT Quick links (GitHub) - модуль-конструктор повторяемых элементов

  • WT SEO Meta templates - комплект плагинов для автоматического заполнения <title> и meta-description по формуле.

  • JL Sitemap (GitHub) - компонент XML-карты сайта

  • View logs (GitHub) - просмотр логов Joomla в админке

  • WT Eternal admin - плагин автоматического продления сессии в панели администратора.

  • Reset Media Version (GitHub) - для верстальщиков: гарантированная загрузка новых версий css и js файлов, а не из кэша браузера.

Установка остальных расширений уже зависят от конкретного проекта.

И так же welcome в чат русского Joomla-сообщества.

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0

Уязвимость в протоколе REALITY XTLS/Xray-core: быстрый фикс уязвимости Aparecium

На прошлой неделе была обнаружена уязвимость в известном ПО для создания прокси соединений XTLS/Xray-core, а именно в протоколе REALITY, позволяющая выявлять работу этого протокола.

Для тех, кто не в курсе: REALITY — это уникальный протокол прокси, который позволяет маскировать прокси-трафик под легитимное посещение реальных сайтов (например, google.com или любого другого), при этом не требуя покупки домена и настройки TLS-сертификата на своем сервере.

Обнаружение уязвимости

В начале июня 2025 года исследователь под ником ban6cat6 опубликовал утилиту под названием Aparecium. Ее цель — находить серверы, использующие протоколы вроде REALITY.

В чем была суть уязвимости?
Утилита обнаружила, что серверы на базе OpenSSL после завершения основного TLS-рукопожатия (handshake) обычно отправляют клиенту один или два служебных сообщения NewSessionTicket. Это стандартное поведение, позволяющее возобновлять сессии. Протокол REALITY в своей реализации это поведение не имитировал.

Это тонкое различие позволяло Aparecium с высокой точностью отличать настоящий веб-сервер от сервера с REALITY, просто проанализировав последовательность TLS-сообщений.

Быстрый фикс

Информация об уязвимости была опубликована в виде issue #4778 в репозитории Xray-core. Разработчики, в частности RPRX, отреагировали практически молниеносно.

Вместо того чтобы добавить отправку фейковых NewSessionTicket, они пошли по более правильному пути. Уже через несколько дней в версии Xray-core v25.6.8 появилось «предварительное» решение:

Теперь при первом запуске сервер REALITY, используя отпечаток клиента Chrome, сам подключается к целевому сайту (dest), «подсматривает», какие именно post-handshake сообщения и какой длины тот отправляет, кэширует эту информацию и в дальнейшем идеально имитирует именно это поведение.

На это «зондирование» уходит около 30 секунд при первом старте сервера, но оно по большей части решает основную проблему. Вместе с этим был исправлен и неприятный баг с производительностью из-за неработающего аппаратного ускорения AES-NI.

Глубокий анализ

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

  1. Загадка «лишнего пакета» от bilibili.com
    Один из разработчиков заметил, что при подключении к некоторым сайтам (например, bilibili.com) с отпечатком Chrome, сервер возвращает не только NewSessionTicket, но и еще один небольшой пакет. После анализа выяснилось, что это не TLS-сообщение, а кадр настроек HTTP/2 (settings frame). Это значит, что для идеальной маскировки нужно имитировать не только TLS-уровень, но и поведение прикладного протокола (HTTP/2), который был согласован в ходе рукопожатия.

  2. Проблема разных отпечатков (fingerprints)
    Выяснилось, что один и тот же сайт может по-разному отвечать на ClientHello от разных клиентов. Например, на запрос с отпечатком Chrome он может отправить два NewSessionTicket и settings фрейм, а на запрос от Go-клиента — только один NewSessionTicket. Похоже, что статического зондирования недостаточно.

  3. Идея «живого обучения»
    В ходе мозгового штурма родилась идея для долгосрочного решения, которое было оформлено в issue #4788. Суть в том, чтобы сервер REALITY, получив ClientHello от нового клиента, не просто использовал стандартный отпечаток для зондирования, а копировал отпечаток реального клиента и именно с ним обращался к целевому сайту. Это позволит динамически адаптироваться под любого клиента и достичь практически идеальной мимикрии.

Разработчики рекомендуют всем обновить сервера и клиенты, использующие Xray-core, до версии 25.6.8.

Теги:
Всего голосов 8: ↑7 и ↓1+8
Комментарии2

Вклад авторов