Обновить
128K+

Java *

Объектно-ориентированный язык программирования

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

Представлен открытый проект AIKON — приложение, которое позволяет использовать Claude, ChatGPT, Gemini и Grok на старых Nokia 2007 года.

Ранее проект назывался Claude S40. До выхода версий 0.10.x (для мобильного приложения) и 0.7.x (для серверной части) он носил имя Claude S40, поскольку взаимодействовал только с Claude. Теперь, когда добавлена ​​поддержка OpenAI, Gemini и Grok, проект получил название AIKON («Nokia», написанное в обратном порядке). Репозиторий был перенесен с emir/claude-s40 на emir/AIKON (GitHub автоматически перенаправляет запросы со старого адреса), однако в названиях Java-пакетов и серверных компонентов сохранилось прежнее имя.

AIKON — это ИИ-чат-клиент для устройств Nokia серий S40 и S60 (платформа Java ME, спецификации CLDC 1.1 / MIDP 2.0), работающий в связке с компактным сервером на языке Go. Вы можете выбрать модель для каждого чата (Claude, OpenAI, Gemini или Grok), вводить текст с помощью кнопочной клавиатуры и получать ответы на экране с разрешением 240x320 пикселей. Доступны такие функции, как поиск актуальных новостей, прогноза погоды и курсов валют в интернете; длинные ответы можно просматривать постранично. Интерфейс переведён на турецкий, английский, испанский, португальский, французский, немецкий, русский и индонезийский языки. Приложение протестировано на моделях Nokia 6300 (S40) и Nokia E63 (S60 с QWERTY-клавиатурой).

Теги:
+1
Комментарии0

Представлен открытый вайбкод-проект TV VibeHac для убирания лагов на умных ТВ из-за мусорных приложений. Разработчику решения надоела реклама в умном ТВ Xiaomi у родителей, поэтому он попросил Claude отключить эту опцию. ИИ убрал из прошивки 25 бесполезных пакетов и полностью переписал лаунчер в духе Apple TV.

Также в сети есть аналогичный проект с инструкцией и пошаговыми действиями, как почистить и ускорить Android TV с помощью Claude Code или Codex.

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

Всем привет! На досуге хочется поразрабатывать чё-нить, как хобби что ли. Идей просто ноль! Везде этот ЫЫ..политика и т.д. Надо отвлечься.
Не ради денег - ради программирования! Есть у кого смелые идеи?
Вот первое что в голову пришло - напиши, глядишь не только мне поможешь :)

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

Что такое PVS-Studio?

Мы обновили видео “Что такое PVS-Studio?” 😎

В новом ролике рассказываем о самых важных аспектах статического анализатора кода PVS-Studio:

🐞 какие языки и стандарты поддерживает
🐞 как работает
🐞 куда интегрируется
🐞 какие ошибки позволяет находить

Видео тут:
▫️YouTube
▫️VK Video
▫️RuTube
▫️Наш сайт

Приятного просмотра!

Теги:
+1
Комментарии0

Вышел мод для Minecraft под названием AgentCraft, где ИИ‑агенты играют роль персонажей пользовательской IT‑компании:

  • за каждого сотрудника отвечает отдельный ИИ‑агент;

  • у каждого ИИ‑сотрудника есть свой рабочий стол с ПК, имя и подключение к сервисам;

  • ИИ‑сотрудники пишут реальный код, а пользователь следит за ними и раздаёт указания;

  • когда у ИИ‑агентов возникает вопрос, он реально бежит к пользователю в игре и задаёт его;

  • код от сотрудников готов к принятию в работу только тогда, когда пользователь лично ставит подпись под каждой фичей;

  • ИИ‑сотрудники пишут код даже тогда, когда пользователь выходит из игры.

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

Подборка материалов: что почитать разработчику

В этой подборке — пять материалов о повседневных задачах разработчика: работе с кодом и коммитами, автоматизации, полезных инструментах и технических решениях на примерах iOS и Java.

➡️ Разбираем фичи по кусочкам: атомарные коммиты как внутренняя дисциплина

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

➡️ Автоматическая генерация UI-настроек

Что делать, если с каждой новой настройкой приходится вручную добавлять элементы интерфейса и связывать их с данными. В статье — решение для iOS, которое позволяет генерировать экран настроек автоматически с помощью метаданных и интроспекции типов.

➡️ Инструменты, которые упрощают iOS-разработку

Какие инструменты помогают находить неиспользуемый код, проверять приложение в нестабильной сети, упрощать повторяющиеся команды и синхронизировать версии CLI-инструментов в команде.

➡️ Хороший код: как понять, что его будет удобно менять

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

➡️ Как ломался пиннинг в Java 21 и что починили в Java 24

Как менялась работа виртуальных потоков от Java 21 к более новым версиям: от проблемы с пиннингом до изменений в JDK 24 и дальнейшего развития Project Loom.

Сохраняйте пост, чтобы материалы были под рукой 🧡

Теги:
+3
Комментарии0

Gradle — один из главных инструментов в мире Java-разработки, но насколько хорошо вы действительно с ним знакомы?

Мы подготовили 10 вопросов по современному Gradle: зависимости, плагины, задачи, конфигурация, сборка и другие возможности инструмента. Здесь не нужно разбирать фрагменты кода — проверим именно ваше понимание того, как работает Gradle и как его используют в реальных проектах.

Переходите по ссылке и проходите квиз! В конце вас будет ждать подарок! Удачи!

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

Backend без сюрпризов: 15 уроков недели от кода до production

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

На ближайших бесплатных уроках разберём инструменты и подходы, которые помогают backend‑разработчикам решать реальные задачи: проектировать сервисы, работать с данными, понимать поведение приложений под нагрузкой и готовить решения к продакшену. Уроки проведут наши преподаватели – можно будет задать вопросы по теме или формату обучения.

Архитектура и высоконагруженные системы

  • 23 сентября в 20:00. «Узнайте, как использовать Patroni для управления высокодоступными кластерами PostgreSQL». Записаться

  • 6 октября в 20:00. «Практические подходы к переходу от монолита на микросервисы». Записаться

  • 6 октября в 20:00. «Apache Kafka в микросервисной архитектуре – лучшие практики асинхронного обмена». Записаться

  • 22 октября в 19:00. «Основы проектирования бизнес-логики в микросервисной архитектуре». Записаться

Java и Spring

  • 21 сентября в 20:00. «HTTP-сервер на чистой Java за 30 минут». Записаться

  • 30 сентября в 20:00. «Spring AI 2.0 на практике: добавляем AI в Spring Boot и доводим до production». Записаться

  • 22 октября в 20:00. «Spring Boot под нагрузкой: почему сервис работает локально и падает в production». Записаться

Backend на Go и C++

  • 22 сентября в 20:00. «Горутины и каналы: под капотом (under the hood) и нюансы в продакшене». Записаться

  • 1 октября в 20:00. «Паттерн многопоточного программирования Producer–Consumer». Записаться

.NET и ASP.NET Core

  • 1 октября в 20:00. «JIT и AOT в .NET: ReadyToRun и NativeAOT на практике». Записаться

  • 20 октября в 20:00. «OpenTelemetry в .NET: от чёрного ящика к наблюдаемой системе». Записаться

Базы данных и SQL

  • 30 сентября в 20:00. «Подзапросы или CTE – как сделать сложный запрос понятным». Записаться

  • 5 октября в 20:00. «Как SQL Server ищет данные – Scan, Seek и Lookup в плане запроса». Записаться

  • 15 октября в 20:00. «SQL против бардака в данных: поиск по шаблону и регулярные выражения». Записаться

  • 19 октября в 20:00. «Анализируем длинные и сложные запросы в SQL Server». Записаться

Полное расписание бесплатных уроков сентября собрали в дайджесте.

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

Зачем мы интегрируем свой анализатор в такое количество инструментов?

Мы разрабатываем и продаём статический анализатор PVS-Studio. В самом продукте есть множество всякого интересного: утилиты командной строки, диагностические правила разных категорий, вспомогательные утилиты и тому подобное.

За не самым красивым оборотом “тому подобное” мы обычно скрываем наши многочисленные интеграции со сторонними продуктами (плагины, расширения, сценарии работы). Вы можете спросить: “А зачем скрывать?” Смотрите сами: первой нашей интеграцией был плагин для Visual Studio 2005, вышедший 18 лет назад. Сегодня же анализатор интегрируется с более чем тремя десятками других инструментов для разработки: плагины для IDE, игровые движки, платформы контроля качества кода, сборочные системы, платформы CI/CD и т. п.

Поддерживать всё это в актуальном и рабочем состоянии — большая работа, и в новой статье расскажем, зачем мы вообще этим занимаемся.

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

🤖 MCP для Jetbrains

Ваша IDE это очень мощный инструмент, который может пригодится вашему агенту, но дефолтное MCP Jetbrains довольно бедное и местами забагованное.

✨ Плагин IDE Index MCP Server предоставляет куда больше возможностей:

  • Просмотр кода зависимостей (чтобы вашему агенту не пришлось лазить в .m2)

  • Запуск тестов (полезно, если в вашей огромной монорепе мавен запускает тесты слишком медленно)

  • Иерархия классов, стек вызовов, переход к объявлению и так далее

  • Удобное окно для просмотра запросов и ответов MCP сервера

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

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

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

JDBC, Hibernate, Spring Data, MyBatis, jOOQ — почему в Java столько способов работать с базами данных?

Разбираемся на бесплатном вебинаре «Java Persistence: обзор фреймворков для доступа к данным». В прямом эфире пройдём от низкоуровневых инструментов до высокоуровневых абстракций.

Программа:

☕ JDBC и Spring JDBC — основы работы с БД без абстракций.
☕ JPA и Hibernate — что такое ORM, persistence context и как это работает внутри.
☕ Spring Data JPA vs Spring Data JDBC — различия репозиториев и критерии выбора.
☕ MyBatis и jOOQ — почему выбирают SQL-центричные фреймворки ради полного контроля.
☕ Альтернативные реализации JPA — что кроме Hibernate.
☕ Reactive Data Access — когда нужен R2DBC, а когда достаточно JDBC.
☕ Как выбрать фреймворк — сценарии, компромиссы и рекомендации. 

📆 Когда: 31 августа в 16:00 (Мск)

🙍‍♂ Спикер: Александр Краснянский, эксперт в Java/Kotlin и архитектуре ПО

✍ Записаться

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

Дело было вечером, делать было не чего, решил я запустить quake 3 arena на старом jar s40 телефоне (nokia 6303 classic).

Но тут сразу появился упор в слабое железо, а квейк 3 арена имеет уже полноценное 3д с эффектами и прочими плюшками, пришлось оригинальные текстуры ужать до 32x32 но геометрия оригинальная (чуть больше 5000 треугольников на этой карте), всего одна карта q3dm17 и 1 оружие, при этом работают даже тригеры для джампа (прыжков от панелей) и телепорты, да это не совсем оригинальный квейк 3 арена, более того, это скорее нейрослоп, ну или просто очередная поделка под старый телефон ради ностальгии-хобби, хоть и со средним fps около 8.

+ бонус ещё несколько проектов которые смог запустить на этом телефоне

  • quake 3 arena (сорсы на github) там же в релизе и jar файл

  • сапёр 3д на сфере (без стыков, не uv и не икосфера)

  • настоящий рендер лучами (path tracing) но с оптимизированными упрощениями (в рендере 240*320 + msaa x4 = 40 секунд на cpu)

  • клон minecraft в изометрии (с телефона скринов не осталось)

но всё это хорошо работало на этом телефоне без проблем, ну разве что в квейке низкий fps.

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

Современный Gradle для Java-разработчика

Собрали курс «Современный Gradle для Java-разработчика». Если Gradle для вас до сих пор воспринимается магической коробкой, которая путём магических конфигураций собирает проект, а что-то новое в неё вносится только через Claude Code или Codex, это для вас.

Курс рассчитан на тех, кто уже пишет на Java/Kotlin или каком-то другом JVM-языке и хочет перестать бояться строгать сборку лишний раз. Разбираем мультимодульные проекты с нуля, копаемся по compile classpath и смотрим на современные подходы к конфигурации.

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

Найти вебинары можно тут.

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

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

Инференс трансформеров на чистой Java без Python и JNI

Запуск нейросетей на Java часто воспринимается как компромисс: либо JNI-обвязки, либо Python-стек, либо готовые рантаймы. Но современные JDK уже позволяют строить полноценный пайплайн инференса внутри JVM — без Python, без JNI-слоя и без лишней магии.

Хочу провести технический вебинар и показать, как на чистой Java реализовать инференс трансформеров и оптимизировать его под CPU, используя:

  • Foreign Function & Memory API (FFM) — для безопасной работы с нативной памятью и маппинга весов моделей без лишнего оверхеда и давления на GC;

  • Vector API — для SIMD-ускорения матричных операций на CPU.

И это не только про LLM.

На вебинаре разберём, как на Java можно запускать и оптимизировать разные классы трансформеров (encoder-only, encoder-decoder, decoder-only):

  • RoBERTa — для классификации и NLP-задач;

  • MiniLM — для эмбеддингов и семантического поиска;

  • T5 — для seq2seq-сценариев и генерации;

  • Qwen — для современных LLM-сценариев и практического инференса.

То есть цель вебинара — не показать ещё один способ вызвать llama.cpp по API, а разобраться, как устроен сам Java-слой инференса для трансформеров и где он реально полезен.

Если тема вам интересна — оставьте контакты по ссылке.

Если наберём 20+ заинтересованных, я подготовлю программу и разошлю приглашения с датой.

UPD: Всем, кто заполнит форму предрегистрации, я сразу после вебинара (или даже чуть раньше) скину ссылку на приватный репозиторий с базовым PoC/бенчмарком инференса Qwen на Vector API, чтобы вы могли покрутить код сами.

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

Почему ИИ-агент для кода промахивается мимо нужного метода

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

Агент, который ищет код текстом, физически не отличает OrderService.validate от UserDto.validate: для него это просто совпадение символов «validate». Агент, который спрашивает у IDE «кто на самом деле вызывает этот метод», получает точный ответ, потому что IDE знает типы, разрешённые ссылки и видимость каждого символа. Разница между этими двумя подходами не абстрактная, она измеряется в конкретных цифрах.

Точка отсчёта: почему grep и RAG промахиваются

Кодовый агент ищет по проекту двумя способами: grep/ripgrep по содержимому файлов и векторный поиск по эмбеддингам кусков кода. На маленьком проекте оба варианта работают сносно. На enterprise-репозитории на миллионы строк с десятками модулей поведение ломается одинаково: запрос «найди использования метода validate» возвращает тысячу с лишним совпадений, из которых подавляющее большинство - другие методы с тем же именем в других классах. Векторный поиск находит куски кода, которые «похожи по смыслу», но это может быть валидация в совершенно другом домене.

Что показали цифры на 27 задачах

Мы сравнили три версии агента на 27 задачах вида «найди все места, где используется метод X» из реальных тикетов трёх внутренних репозиториев на Java и Kotlin: агент на ripgrep, агент на ripgrep с векторным RAG и агент на PSI-индексе IntelliJ (find_usages, find_declaration, class_hierarchy вместо текстового поиска).

Вариант поискаPrecisionRecallF1Контекст, токенов$/ответripgrep0,410,820,5578 4001,12ripgrep + векторный RAG0,580,790,6792 1001,38PSI-индекс0,960,930,9416 7000,21
Вариант поискаPrecisionRecallF1Контекст, токенов$/ответripgrep0,410,820,5578 4001,12ripgrep + векторный RAG0,580,790,6792 1001,38PSI-индекс0,960,930,9416 7000,21

Precision показывает, сколько из найденного агентом оказалось реальными использованиями метода, а не случайным совпадением имён. Recall показывает, сколько из всех реальных использований в коде агент вообще нашёл, ничего не пропустив.

У ripgrep recall высокий (0,82): текстовый поиск почти никогда не пропускает совпадения по имени. Но precision низкий (0,41): больше половины найденного - чужие методы с тем же именем, и их приходится разбирать вручную. У PSI-индекса высоки обе величины (0,96 и 0,93): агент находит почти все нужные места и почти не приносит лишнего. F1 сводит обе величины в одно число, и у ripgrep он проседает именно из-за мусора в выдаче, хотя нужные места он и находит.

Отсюда пятикратная экономия контекста и в пять с лишним раз более дешёвый ответ при кратно более высокой точности: агент на PSI-индексе не читает тысячи лишних строк, которые вернул бы текстовый поиск.

Точный поиск не отменяет проверку

Даже когда агент точно нашёл все места, где используется метод, и внёс правку во все, это не гарантирует, что правка корректна: точный поиск решает только задачу «найти нужные места», а не «проверить, что код после правки работает». Поэтому прежде чем объявить об успехе, агент должен прогнать компилятор и тесты: тест зелёный, ошибок компиляции нет, покрытие не просело. Пока в выводе компилятора или тестового прогона есть хоть одна ошибка, агент обязан либо исправить её, либо сообщить о проблеме, а не писать об успехе.

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

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

Как записывать "кружочки" в мессенджере "BITCORD".

Пишу крутой облачный мессенджер (мини-соцсеть) под пилотным названием BITCORD. Недавно для него реализовал новую функцию отправки видеосообщений в формате других популярых мессенджеров. Теперь любой пользователь может отправить своему собеседнику модное селфи без каких-либо специальных настроек. Это дополняет общение дополнительными крутыми фишками.

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

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

Особенности видеосообщений:

  • Лимит времени: Максимальная длительность одного ролика составляет 10 секунд.

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

  • Воспроизведение: В чате такие ролики проигрываются один раз при нажатии "Play".

Способ 1

Бэкенд приводит видео к "квадратному" формату с соотношением сторон 1:1 и возвращает ссылку на него обратно в чат собеседникам.

Ниже пример выполнения преобразования видео в "квадратный" формат с помощью "ffmpeg":

ffmpeg 
  -i input.mp4 
  -vf "crop=480:480:0:(ih-480)/2" 
  -c:v libx264 -crf 23 
  -c:a copy output.mp4

Чтобы отобразить "квадратное" видео в виде круга на Java, я создаю шаблон (ViewOutlineProvider). Он принудительно задает графическому элементу (View) форму идеального круга фиксированного размера:

private static final ViewOutlineProvider CIRCLE_PROVIDER = new ViewOutlineProvider() {
  @Override
  public void getOutline(View view, Outline outline) {
    int sizeInPx = (int) TypedValue.applyDimension(
      TypedValue.COMPLEX_UNIT_DIP, 270, view.getResources().getDisplayMetrics()
    );
    outline.setOval(0, 0, sizeInPx, sizeInPx);
  }
};

Затем в холдере применяю описанный выше шаблон к TextureView и ImageView:

static class CircleVideoViewHolder extends BaseViewHolder {
  TextureView texture;
  ImageView   preview;

  VidCrViewHolder(View v) {
    super(v);
          
    texture = v.findViewById(R.id.video_texture);
    preview = v.findViewById(R.id.video_preview);

    texture.setOutlineProvider(CIRCLE_PROVIDER);
    preview.setOutlineProvider(CIRCLE_PROVIDER);

    texture.setClipToOutline(true);
    preview.setClipToOutline(true);
  }
}

В результате выполнения этого кода видео примет "круглый" вид.

Способ 2

Как показала практика, кодирование видео в "квадратный" формат на бэкенде невыгодно, так как оно занимает время и нагружает сервер. Без хорошей видеокарты, которая на бэкенде часто отсутствует, работать с видео накладно. Поэтому я пошел другим путём.

Так как камера смартфона снимает видео не в "квадратном" формате, я воспользовался матрицей преобразования, центрировал кадр и обрезал лишние стороны.

//фиксированный размер видео с камеры смартфона: 480x640
float scaleY = h / (w * 480 / 640); 
Matrix matrix = new Matrix();
matrix.setScale(1.0f, scaleY, w / 2f, h / 2f);
CircleVideoViewHolder vch = (CircleVideoViewHolder) holder;
vch.texture.setTransform(matrix);

При таком подходе вся работа выполняется на стороне графического процессора (GPU) самого смартфона с максимальной скоростью. Это полностью избавляет от необходимости обрабатывать видео на бэкенде.

В результате получилась вот такая красота:

селфи видео в круглом формате
селфи видео в круглом формате

Итог:

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

Спасибо за вашу поддержку. Это придает стимул писать дальше.

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

Прямая Web3-монетизация без посредников (Peer-to-Peer) для артистов на радио.

Буквально вчера закончил написание сервисного бота для коммерческих нужд в мессенджере "Concord". Основной целью проекта является автоматизация процессов публикации авторского материала на интернет-радио. Бот был создан как помощник для авторов аудиоконтента: музыкантов, продюсеров, подкастеров и т. п.

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

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

function isJpeg(string $data): bool
{
    return substr($data,0,2) === "\xFF\xD8";
}

function isMp3(string $data): bool
{
    if (substr($data,0,3)==="ID3") {
        return true;
    }

    return isset($data[1])
        &&
        ord($data[0])===0xFF
        &&
        (ord($data[1]) & 0xE0)===0xE0;
}

После получения данных нужно сразу определить что именно пришло - команда или файл:

if (preg_match('/^\/(help|bio|title|tracks|done)\b/i', $data))
{
    processCommand($db, $uuid, $data);
    exit;
}

if (isBase64($data))
{
    saveBinary($db, $uuid, $data);
    exit;
}

reply("Unknown command, please use /help.", false);

Описание профиля артиста и названия его треков передаются в текстовом виде используя специальный набор команд:

  • /help - Show this help

  • /bio text - Update artist biography

  • /tracks - Show info of all tracks

  • /title text - Update current track title

  • /pay amount - Pay for service

  • /done - Finalize current track

  • Send JPG image to update artist image

  • Send MP3 audio to update current track

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

  1. артист отправляет фото профиля

  2. артист отправляет описание профиля

  3. артист загружает трек

  4. артист отправляет описание трека

  5. артист выполняет оплату сервиса

  6. артист финализирует трек

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

МОНЕТИЗАЦИЯ

Отправка материала артистом требует платы за сервис. Когда артист подтверждает оплату, бот списывает с его кошелька требуемую сумму и зачисляет её на кошелек владельца радиосервиса. Это значительно упрощает обмен активами между плательщиком и получателем.

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

схема работы блокчейна
схема работы блокчейна

Следующим этапом разработки я планирую реализовать возможность начисления роялти каждому автору музыкального материала. Для этого потребуется создать публичную таблицу рейтинга на сайте радио, где слушатели смогут голосовать за понравившиеся треки, продвигая артиста на верх списка. Исходя из количества прослушиваний конкретного трека, можно будет рассчитать сумму роялти и автоматически выплачивать её на личный кошелек автора в мессенджере.

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

Если у вас появятся предложения, буду рад подискуссировать.

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

30 июня в 18:00 начнется  вебинар «Почему Java-разработчику следует брать на вооружение Quarkus». В прямом эфире рассмотрим ключевые преимущества Quarkus перед Spring Boot: родную сборку, малое потребление памяти и удобство разработки.

Создадим один и тот же REST-сервис на Spring Boot и на Quarkus, сравним время старта и затраты ресурсов.

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

Содержание:

✅ Проблема долгого запуска и высокого потребления памяти в Spring Boot.

✅ Что такое Quarkus? Окружающая среда расширений, родная сборка.

✅ Живой код: создание REST-сервиса на Spring Boot и на Quarkus.

✅ Измерение времени запуска и потребления памяти.

✅ Как родная сборка ускоряет размещение в Kubernetes и снижает затраты.

✅ Настоящий случай из практики автора.

✅ Как продолжить изучение Quarkus.

🧑‍🎓 Спикер: Чвилёв Константин, эксперт в области разработки ПО

📆 Когда: 30 июня, 18:00–19:00 (Мск)

👉 Регистрация

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

Представлено бесплатное десктопное приложение Streambert с открытым исходным кодом для ПК на Windows, macOS и Linux. Решение распространяется по лицензии GNU GPL v3.0. Главное преимущество Streambert — здесь совсем нет рекламы и трекеров. Разработчики подчёркивают, что приложение всегда будет бесплатным и не станет собирать личные данные пользователей.

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

Разработчики утверждают, что приложение обеспечивает более быструю потоковую передачу видео по сравнению с большинством браузерных кинотеатров и поддерживает многопоточную загрузку файлов. При этом Streambert не хранит и не распространяет защищённый авторским правом контент, программа лишь агрегирует ссылки с внешних источников и выступает в роли поисковика.

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