Обновить
512K+

Open source *

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

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

Восемь аниме-плееров рунета изнутри: шифр Цезаря, пустой параметр и домен, который увели

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

Я взял за основу популярную опенсорсную библиотеку парсеров аниме-плееров, запустил её — и получил от Kodik 500 Internal Server Error. Не «токен протух», не «IP заблокирован», а именно 500 на каждый запрос. Разбор занял вечер, а причина оказалась в одном символе: библиотека отправляла параметр ref пустым, а сервер требует его заполненным и раскодированным.

Дальше выяснилось, что это не единичная поломка, а норма жанра. Один плеер полгода назад переехал на другой формат страницы. Другой отвечает бесконечным редиректом на самого себя. У третьего домен просто увели — сейчас там индонезийский интернет-магазин, а не аниме. Четвёртый прячет ссылки в WebSocket из обфусцированного бандла на 600 КБ, и его я честно не осилил.

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

Читать далее

Новости

Купил ИБП, а его программа недоступна для NVDA. Пришлось написать дополнение

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

Я незрячий и пользуюсь NVDA. После покупки ExeGate LLB-3000 выяснилось, что работать с PowerManagerII с клавиатуры и на слух неудобно. Вместе с Codex я разработал дополнение: разобрали графические кнопки, наладили навигацию, добавили текстовые показания и проверили управление. Рассказываю, как устроено решение и что в этой работе делал я.

Как устроено дополнение

Свои книжные метаданные: Pivot-архитектура, Spring Boot и бесплатный API для Obsidian

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

Как я собрал бесплатный сервис метаданных книг на Java и Spring Boot — с EAV/Pivot-схемой БД вместо ALTER TABLE на каждое новое поле, агрегацией нескольких открытых источников. Плюс обновлённый плагин для Obsidian.

Читать далее

Один Telegram‑бот, три сервиса, один 301: как я сделал webhook‑router вместо монолита

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

У Telegram-бота может быть только один активный webhook. У меня при этом появились три независимых сценария: поддержка пользователей, управление небольшим магазином и внутренние административные команды. Склеивать их в один процесс не хотелось, заводить отдельного бота под каждый сервис — тоже.

Пока я выбирал архитектуру, переезд панели с одного домена на другой неожиданно провёл бесплатный chaos test: Telegram продолжил отправлять updates на старый адрес, получил 301 Moved Permanently и перестал доставлять сообщения. В очереди зависло шесть updates, а со стороны пользователей бот просто замолчал.

В статье разберу диагностику этого инцидента и устройство небольшого open-source router на FastAPI и Redis: с декларативными правилами, дедупликацией, надёжной очередью, retry и HMAC-подписью внутренних запросов.

Читать далее

Локальный ассистент для зумов, часть 2: как граф встреч становится памятью и почему ему можно верить

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

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

Читать дальше

Как использовать облачные AI модели внутри контура компании и не получить по шее от ИБ?

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

Или пример того, что будет, если роль пакетного менеджера доверить AI.

[ Перед прочтением ознакомьтесь с политикой безопасности в вашей компании ]

Читать далее

Найти ПДн, замаскировать, развернуть копию: большой разбор открытого pg_anon

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

pg_anon — полностью открытый инструмент для PostgreSQL, который ищет персональные данные по заданным правилам и выгружает копию базы уже замаскированной. За год проект заметно вырос: частичный дамп и восстановление, поддержка сложных схем, REST API, новый CLI. В статье разбираем все режимы на реалистичной демо-базе.

Читать далее

Rust: Макетирование форм для Iced 14

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

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

Некоторое время назад у меня образовалось немного (вернее много) свободного времени, и я между моментами серфинга на известном сайте HH решил посмотреть в сторону освоения Rust. Кроме всего прочего мне очень интересует тема библиотек графических интерфейсов.

В Rust есть несколько подобных библиотек, я решил остановиться на Iced — текущая версия Iced 0.14. Прежде всего понадобилось понять принципы построения библиотеки и архитектурную философию паттерна ELM, которая реализована в библиотеке.

В процессе изучения родился описываемый ниже PET‑проект Iced Forms Pack. Проект представляет собой конструктор форм из базовых элементов Iced.

Читать далее

Очередные извращения с DOOM: упаковали в sheet-контейнер и запустили внутри Sheeternetes в электронной таблице

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

Есть проверенный закон вселенной: если у чего-то есть экран и хоть немного памяти, рано или поздно на этом запустят DOOM. Запускали на осциллографах, на тесте на беременность, на кофемашине и на тракторе. Мы в Sheet-Native Computing Foundation тоже решили побыть в этом уже достаточно запылившемся тренде и запустить DOOM в контейнере, упакованном в ячейки электронной таблицы. То есть образ контейнера с игрой физически лежит в ячейках, оттуда собирается обратно в Docker-образ, проверяется по sha256 и запускается.

В первой статье я рассказывал про Sheeternetes — оркестратор контейнеров, у которого весь control plane (Deployments, Nodes, Pods, Events) живёт внутри Google Таблицы или Excel, а на другом конце крутятся настоящие Docker-контейнеры. Там же мельком был упомянут наш формат образов — SICF (Sheet-Native Image Container Format). Эта статья как раз про него: как он устроен, как всё это воспроизвести у себя, как оно работает на bare metal (то есть в эксельке, а не гугл-таблице) без интернета и какие неожиданно интересные находки вылезли, когда мы начали пихать всё это дело в ячейки Google Sheets.

Спойлер: DOOM — настоящий (Chocolate Doom плюс свободный Freedoom, всё в Linux-контейнере, играется в браузере с клавиатуры).

Читать далее

Vanilla Disintegrate — современные и эффектные анимации для веба

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

Какие обычно бывают анимации в вебе? Появление, исчезновение, небольшой сдвиг, масштабирование. Они не обязательно плохие: чаще всего интерфейсу действительно не нужно ничего сложнее. Иногда лучшее решение — вообще не добавлять анимацию. Так интерфейс остаётся быстрым, понятным и не отвлекает от основной задачи. Но иногда хочется сделать один небольшой момент запоминающимся. Не длинную заставку и не тяжёлый спецэффект на весь экран, а короткую реакцию на действие пользователя. Меньше секунды — и удаление карточки, появление элемента или отмена действия уже ощущаются совсем иначе.

Читать далее

Опенсорс — это ред флаг

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

«Форкнул, сделал патч, пользуешься — а чо такого?» — самый частый ответ на прошлую статью про Klipper. Отвечаю. Если коротко: носить в мейнлайн выгодно — и вам лично, а не только обществу. Публичный код и открытый код — разные вещи. Форк — не одноразовая экономия, а подписка на ребейзы до конца жизни проекта. А апстрим взамен даёт школу, бесплатный мейнтейн и репутацию, которая возвращается железом. Разбираю на своём порте KN-1012 в OpenWrt: семь самостоятельных патчей, три серии в netdev и кочерга вместо паяльника.

Читать далее

Open Source IP камера на основе Raspberry Pi

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

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

Читать далее

Sheeternetes: первое нагрузочное тестирование и реальные бенчмарки против Kubernetes, Docker Swarm и Nomad

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

В одном чате по куберу меня спросили единственное, что реально важно, когда ты собрал оркестратор контейнеров внутри таблицы: а сколько оно вообще тянет? Сколько подов, пока не ляжет. Какой образ влезает в ячейки. Сколько кластеров держит одна машина. И — раз уж мы фонд с серьёзным лицом — как это смотрится рядом с настоящими: Kubernetes, Docker Swarm, Nomad.

Поэтому мы провели честное нагрузочное тестирование. Четыре измерения, два бэкенда (.xlsx на диске и живая Google-таблица), синтетика на ноутбуке и реальные Docker-образы на облачной виртуалке. А потом поставили цифры рядом со взрослыми оркестраторами.

Короткая версия: по каждой оси, которая имеет значение, мы проигрываем на 3–5 порядков. По осям, которые значения не имеют, — выигрываем вчистую. И один наш давний «факт» оказался неверным — бенчмарк нас поправил. Поехали.

Читать далее

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

Как мы скрестили Go, Rust и MCP, чтобы построить масштабируемый оркестратор ИИ-агентов часть 2

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

Как мы скрестили Go, Rust и MCP, чтобы построить масштабируемый оркестратор ИИ-агентов часть 2.

Глубокий разбор архитектуры Zettaverse AgentHub

Кастомная валидация структуры flow_json и построение DAG

Читать далее

Protestware: как идейные злоумышленники атакуют ваш код — и как этого избежать

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

Всем привет! Меня зовут Руслан, я инженер в отделе развития процессов безопасности в YADRO. В прошлой статье я рассказывал о рисках транзитивных зависимостей в open source: один неблагонадежный пакет во всей цепочке — и продуктовая сборка скомпрометирована. Таким пакетом может быть protestware — вид ПО или библиотек, в которые разработчики (мейнтейнеры) намеренно внедряют деструктивный, изменяющий логику работы или политизированный код. Он так же опасен, как уязвимости в зависимостях, компрометации репозиториев и атаки класса Dependency Confusion.

В отличие от «традиционного» вредоносного ПО, в основе protestware — не получение финансовой выгоды, а идеологическая мотивация: выражение социальных, политических или идеологических взглядов, привлечение внимания к каким‑либо событиям в мире, влияние на пользователей, связанных с определенными регионами, организациями или государствами и так далее. С точки зрения безопасности это такой же риск для цепочки поставок ПО, как и другие вредоносные компоненты. 

Ниже разберемся, как эта функциональность попадает в инфраструктуру и open source, как ее обнаружить и какие меры предпринять, чтобы защитить свой проект.

Читать далее

«Аниме-завод» открыт: выкладываю код конвейера, который сам режет эпизоды на Shorts

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

За последнее время я написал три статьи про систему, которая превращает длинные видео в вертикальные клипы: общий обзор «аниме-завода», разбор виртуальной камеры с face tracking и рассказ о том, почему связка «транскрипт + LLM» почти всегда даёт мусор.

Комментарий, который повторялся под всеми тремя, был один и тот же: «покажи код».

Показываю.

github.com/ialakey/shorts-factory

Это витринная ветка большого приватного проекта: MVP, в котором оставлен полный путь «взял длинное видео → получил готовый вертикальный клип», а всё остальное вырезано. Ниже — что именно внутри, как код соотносится с тремя предыдущими статьями и что пришлось выкинуть.

Заглянуть на производство

Поправки к ГОСТам живут только в изданиях. Веб-копии стандартов показывают редакцию до правок

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

Если вы разбираете стандарт по тексту с сайта-агрегатора, вы почти наверняка разбираете редакцию до поправок. Мы наткнулись на это случайно, а потом проверили и убедились, что это правило, а не исключение.

Читать далее

И снова 3 сентября: Sheeternetes-оператор для Google-таблиц, который лечит сам себя

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

Недавно я рассказывал про Sheeternetes — оркестратор, у которого control plane живёт в таблицах. Здесь — про следующий логичный шаг: паттерн «оператор», применённый к самим таблицам. Настоящий полноценный Sheeternetes-оператор. Не скрипт внутри таблицы, а внешний контроллер, который приводит табличку к желаемому состоянию.

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

Читать далее

Tome Reader, своя читалка для Obsidian

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

Собрала свой плагин для Obsidian. Это Tome Reader – читалка EPUB с четырьмя темами, выделением текста в заметки и в словарные карточки, закладками, правкой опечаток прямо во время чтения, автоматическим оглавлением для «битых» книг и опциональным AI-ассистентом, куда пользователь добавляет собственный ключ. Читалка доступна в официальном каталоге плагинов Obsidian.

Читать далее

Sheeternetes: как мы запустили оркестратор контейнеров внутри Google Таблиц (а заодно написали ОС и создали фонд)

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

Хабр, привет! Есть такой тип проектов, которые начинаются со слов «а что если» и заканчиваются тем, что ты в три часа ночи объясняешь kubelet-у, что таблица — это его новый control plane. Так вышло и тут, всё родилось из субботней шутки в одном телеграм-канале по кубернетесу.

Правила игры простые: раз весь мир можно создать в эксельке, то пускай всё состояние кластера живёт внутри электронной таблицы. Не «метаданные в таблице», не «экспорт в CSV» — а буквально: Deployments, Nodes, Pods, Events — это вкладки Google Sheets (или листы Excel). Планировщик читает и пишет ячейки. kubectl-подобная утилита ходит в таблицу. И — вот это ключевое — на другом конце крутятся настоящие Docker-контейнеры. Таблица не симулирует кластер. Таблица и есть кластер.

Проект называется Sheeternetes. Это, конечно, шутка. Но шутка, которая компилируется, проходит тесты и переживает падение ноды.

Ниже — как это устроено, как это поднять у себя за пять минут, как оно работает на bare metal без интернета (в Excel и LibreOffice), как связать несколько таблиц-кластеров в федерацию с живой миграцией, почему контейнеры можно хранить прямо в ячейках, — и что это внезапно выросло в целый фонд с 30 проектами, стандартом контейнеров и системой сертификации.

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