Обновить
512K+

Open source *

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

585,25
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

YuE2 Studio: бесплатная замена Suno на своей видеокарте, и почему я перешел с Python и Gradio на Rust, Tauri и C++

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели3.1K

Всем привет, любите ли вы генерировать музыку так, как люблю я? Можете не отвечать, скорее всего нет. Но вот с ужесточением правил Suno, генерировать музыку там стало просто бессмысленно (кто не в курсе с сентября, они закрыли скачку треков).

Потому я собрал десктопную студию в стиле Suno для YuE2, новой открытой модели генерации песен от команды M‑A-P (Multimodal Art Projection). Пишете стиль и текст, получаете полноценную песню с вокалом и аккомпанементом в 48 кГц стерео. Всё считается на вашей видеокарте: без облака, подписок, очередей и без установки Python.

Читать далее

Новости

Морские навигационные карты S-57 в браузере: открытый парсер на TypeScript без GDAL и без SDK за $200k

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели4K

Электронные навигационные карты S-57 стоят на каждом коммерческом судне, но живого JavaScript-парсера для них не было: только серверный GDAL или коммерческие SDK за десятки тысяч долларов в год. Я написал открытый стек на TypeScript, который читает карты S-57 и S-101, собирает топологию и рисует их по стандарту S-52 прямо в браузере, без сервера и без зависимостей. Рассказываю, на какие грабли бинарного формата 1994 года я наступил, и показываю демо, где любую из 7108 карт NOAA можно открыть в один клик.

P.S. Причалы на обложке складываются в S-57, а в коде слева спрятаны две строки. Кто первый расшифрует, пишите в комментарии.

Читать далее

Я написал верификатор eBPF для микроконтроллера. А потом ядро Linux объяснило мне, где я неправ

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели4.1K

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

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

Дальше мысль поехала не туда, и в итоге на плате оказался интерпретатор eBPF со своим верификатором байткода. Логика управления теперь заливается по Wi-Fi обычной программой на C, скомпилированной clang -target bpf. А потом я взял десять маленьких программ и прогнал каждую через свой верификатор и через верификатор ядра Linux, чтобы посмотреть, кто из нас двоих что думает.

Сошлись шесть из десяти. Про оставшиеся четыре и написана статья — они оказались интереснее, чем сам проект.

Читать далее

Хотел свою систему, которую можно менять когда угодно, и сделал три десктопных AI-приложения

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели3.6K

Я всегда хотел иметь свою систему: свои приложения, в которых можно изменить что угодно, а не что-то чужое, что завтра могут поменять. Так появился Zeqou — три десктопных приложения для работы с языковыми моделями: чат ZeqouXChat на Tauri 2 и React 19, рабочее пространство для агентов Zeqou Harness со списком задач и памятью и студия дообучения моделей ZeqouXTraining с LoRA, QLoRA и режимом Thinking. Рассказываю, как всё устроено, с какими проблемами столкнулся (спойлер: установщики) и почему выбрал закрытую лицензию.

Читать далее

Как я спроектировал офлайн‑приложение для заметок под будущую синхронизацию — и собрал лендинг без единой сборки

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели3.3K

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

Читать далее

Компонент перерисовался. Почему? Пишем инструмент для Vue и трижды ломаем чужой прод

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели4.1K

Есть Vue DevTools с галкой «Highlight updates». Есть react-scan в соседней экосистеме. Оба показывают одно и то же: вот этот компонент перерисовался.

Проблема в том, что знание «перерисовался» само по себе бесполезно. Ты и так видишь, что страница дёргается. Вопрос всегда другой: что именно изменилось. Какой проп, какой реф, какое поле стора. Без этого ты сидишь и комментируешь куски шаблона, пока не найдёшь виновника методом половинного деления.

В React иначе и нельзя: реактивность там на уровне «перерисовался компонент», причину приходится реконструировать диффом пропсов. А во Vue реактивность точечная — фреймворк знает, какая именно зависимость дёрнула рендер.

И он её отдаёт.

Читать далее

SEO-плагины на DeepSeek Harness: что переезжает из Claude Code, а что нет

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели3.7K

У DeepSeek появился свой агентный харнесс — dsh. Разбираю, как перенести на него SEO-набор: серверы с данными, правила работы и страховку от ошибок модели.

Читать далее

Дело было не в коде: Hacktoberfest, ИИ и ценность самого пути

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели8.1K

Hacktoberfest в этом году не будет считать пул-реквесты. Агенты пишут PR за секунды. Так что же мы всё это время ценили на самом деле? Личное эссе о том, что осталось вместо кода, и о двух вещах, которые агент не сделает за тебя.

Читать далее

Native AOT заставил меня переписать весь .NET проект

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели9.6K

Мне хотелось, чтобы знакомство с HydraScript выглядело просто: скачал интерпретатор, запустил скрипт. Сомнительно предлагать человеку сначала установить подходящий .NET Runtime ради моего языка программирования.

Переход на Native AOT поначалу казался правкой .csproj. Включил настройку, опубликовал бинарник, пошёл дальше. На практике пришлось переписать всё. Досталось даже интеграционным тестам. А в процессе рефакторинга ещё и пропали логи.

Читать далее

Redis в маршрутах.NET: кэш, Pub/Sub, Streams с группами и Claim Check одним коннектором

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели9.7K

Коннектор Redis для redb.Route: все структуры данных как шаги маршрута, Pub/Sub, Streams с группами потребителей, список как очередь и Claim Check на Redis.

В интеграционном проекте Redis редко бывает чем-то одним. Это кэш ответов внешних систем, счётчики и блокировки, шина событий через Pub/Sub, журнал сообщений через Streams, очередь задач на списке. Обычно каждая из этих ролей живёт в своём куске кода со своим подключением, своими повторами и своим логированием.

В redb.Route все они собраны в одном коннекторе redb.Route.Redis. Любая операция Redis становится шагом маршрута, а подписка, стрим или список становятся его входом. Подключение, телеметрия и плавная остановка при этом общие с остальными коннекторами. Под капотом StackExchange.Redis 2.11.8.

Потребители Redis описаны здесь начиная с ...

Читать далее

Точечные перезапуски в JUnit+GitHub Actions: диалог с тестами

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели6.1K

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

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

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

В этой статье я запущу тестовую сюиту на стеке JUnit + Gradle + GitHub Actions, и опробую различные способы перезапуска конкретных тестов в ней.

Читать далее

Good Bear: анонс веб‑браузера для безопасной работы с сертификатами Минцифры

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели12K

Привет, Хабр. Меня зовут Валерий Ледовской, и последние десять лет я занимаюсь русской локализацией Mozilla. Вы наверняка видели мои статьи про Browser Policy Manager или Russian Spelling Dictionary. Сегодня я хочу рассказать о проекте, который мы с командой готовим к выпуску — и который, надеюсь, вы захотите поддержать.

Читать далее

Свежий OpenWrt на Xiaomi BE7000 без UART, или как три бага в драйвере Ethernet притворялись мёртвой платой

Уровень сложностиСложный
Время на прочтение7 мин
Охват и читатели7.2K

У меня есть Xiaomi BE7000, и железо там вполне приличное (IPQ9554, коммутатор QCA8084 на четыре порта 2.5G, QCN9274 на 5 ГГц, гигабайт памяти и 128 МБ NAND), а вот стоковая прошивка мне быстро стала тесной. Хотелось поставить нормальный OpenWrt из main с ядром 6.18, причём не через kexec поверх стока, а чтобы он грузился прямо с флеша.

Порт под этот роутер уже делает kravasuper в своей ветке xiaomi_be7000, так что я собрал его как есть и прошил, после чего получил быстро мигающий белый диод и полное отсутствие сети, Wi-Fi и SSH, а через четыре включения питания загрузчик сам вернул сток. В обсуждении порта на такое жалуются и другие владельцы, и обычно всё списывают на ревизию платы.

UART на плате есть, но он на 1.8 В, адаптера под такой уровень у меня не было, а обычный на 3.3 В цеплять не хотелось, так что искать причину пришлось вслепую, и как я это делал, как раз и есть большая часть текста.

Читать далее

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

Мониторинг SSRS и Power BI Report Server: дашборд для Grafana

Время на прочтение17 мин
Охват и читатели5.5K

К этой статье меня подтолкнула причина донельзя прозаическая. Сижу недавно на брифинге, и прилетает жалоба: сервер отчётов работает из рук вон плохо. Сервер при этом не мой, в орбиту обслуживания он не входил, а тут пришлось вспомнить, как оно всё устроено у SQL Server Reporting Services (SSRS), вспомнить молодость, так сказать. Вспомнил. Заодно собрал то, чего мне самому когда-то не хватало, — и решил, что пора всё это выложить в одну статью.

Сервер отчётов — сервис незаметный, пока кто-нибудь из бизнеса не напишет: «а почему мне со вчерашнего дня не приходит утренняя рассылка». Сидишь, открываешь портал, видишь, что подписка вроде есть, вроде активна, а письма не уходят. Ну и как оно всегда было? Лезешь в логи, а логов нормальных нет, есть только таблица где-то внутри базы, в которую редко кто, кроме DBA, и заглядывал.

Знакомо? Если вы держите SSRS или его старшего брата Power BI Report Server, наверняка знакомо.

Вопросы, на которые SSRS обязан отвечать сам, звучат просто.

Какие рассылки упали этой ночью и по какой причине?

Какие отчёты открывают чаще всего, а какие не открывали полгода? Это обычная статистика использования отчётов, которой в портале нет.

Где сервер реально упирается в ресурсы?

Кто владелец подписки, которая ломается третью неделю подряд?

Штатными средствами ни один из этих ответов не достаётся: портал показывает список объектов, а журнал выполнения лежит таблицей в служебной базе, без графиков поверх. Ниже — как я собрал дашборд в Grafana поверх базы ReportServer и какие грабли попались по дороге.

Читать далее

Шрифт — это не просто буквы: как устроен шрифтовой дизайн, что изменят нейросети и за что на самом деле платят

Уровень сложностиСредний
Время на прочтение26 мин
Охват и читатели5.3K

Почему логотип Coca-Cola — не шрифт, зачем одной гарнитуре сотни знаков, почему хороший веб-шрифт надо проверять на плохом мониторе и что именно нейросети уже могут забрать у шрифтового дизайнера?

Я, Александр, автор телеграм-канала «Shulepov Code», поговорил с Александрой Корольковой — арт-директором Paratype, автором книги «Живая типографика» и YouTube-канала «Шрифтовой видеоблог», соавтором PT Sans, PT Serif и других известных шрифтовых систем. Обсудили историю профессии от металлических литер до веб-шрифтов, устройство работы шрифтовой студии, лицензии и цены, роль кириллицы, инструменты, заказные проекты, ИИ и довольно практичный ответ на вопрос, сколько шрифтов действительно нужно одному сайту. 

Читать далее

110 тестов, которые не проверяют код: как заставить документацию падать вместе со сборкой

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели5K

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

Читать далее

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

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели5.1K

Я собираю фидбэк по проекту, который советую людям как альтернативу тяжёлому фреймворку. Вставляю его в диалог с ассистентом кода и прошу подсказать библиотеку под задачу, которую он решает лучше всего. Ассистент называет три конкурента покрупнее и ни разу — мой проект. Дело не в качестве кода: я решил проверить гипотезу техническими средствами, а не спором в комментариях.

Гипотез было три. Может, дело в файле robots.txt, который блокирует ботов ИИ. Может, у проекта просто нет llms.txt — модного файла, который сейчас советуют выкладывать. Может, документация физически нечитаема для краулера. Я написал скрипт, прогнал его на 30 сайтах документации популярных Python- и JS-библиотек и получил цифры, которые сходятся не с той гипотезой, что я держал в голове изначально.

Коротко результат: robots.txt не блокирует ботов ИИ ни на одном из 30 доменов — ни по адресу документации, ни в корне домена; llms.txt есть у 11 проектов, и независимые логи показывают, что его почти никто не запрашивает; а пустая для краулера страница нашлась у трёх проектов, но после проверки внутренних страниц из них остался один. Метод, код и таблица — дальше, вместе с сопоставлением с чужими исследованиями и командой, которой это можно проверить у себя.

Читать далее

Агент поддержки на LLM, который не может забыть сходить за заказом

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели4.6K

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

Агентский цикл, где модель решает сама, поднимается за вечер и пропускает тул в 1 ходу из 24. Конвейер для прода не пропускает совсем, но роутер и сценарии для него пишет человек. Тысяча диалогов на Qwen стоит полдоллара, на Opus тридцать долларов.

Читать далее

Гига Писарь: полторы недели после первой статьи. Сколько установок и какие грабли

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели13K

Привет, Хабр!

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

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

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

Если коротко: увидел, как GigaAM от Сбера распознаёт русскую речь, офигел и сделал диктовку для себя, а вам спасибо за такую высокую оценку, я её не ожидал.

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

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

Скачать и обновиться

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

Что сломалось и как чинил

Почему "+=" сложнее реализовать, чем "+": опыт HydraScript

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели12K

Мой язык программирования HydraScript, написанный на C#, уже умел выполнять такой код:

let x = 10 x = x + 1 >>> x

Получаем 11; >>> — это оператор вывода. Присваивание работает, сложение работает. Захотелось добавить привычное сокращение:

let x = 10 x += 1 >>> x

Результат должен остаться тем же — 11. Зачем учить весь компилятор ещё одной операции, если всё необходимое у него уже есть? Можно прямо в парсере превратить x += 1 в дерево для x = x + 1.

Эта часть уместилась в несколько строк. Основная работа досталась методу Clone().

Читать далее
1
23 ...