В украинском цифровом приложении Дия ( аналог Госуслуг)- теперь можно будет жениться по видео связи...

Сохраняй посты, комментируй и ставь оценки

Недавно я рассказывал про хакатон, где мы пилили аналог NotebookLM для корпоратов (и, кстати, выиграли его). После этого мне захотелось принести эту идею домой.
Если вы вдруг пропустили этот хайп: NotebookLM - это гугловский сервис, куда ты закидываешь свои PDF, заметки или ссылки, и нейронка превращается в эксперта конкретно по твоим файлам. Можно чатиться со своими доками, вытягивать инсайты и даже генерить из сухих текстов аудио-подкасты. Надеюсь, кстати, что благодаря этой апке на Яндекс Музыке и VK теперь будут больше выпусками моих выпусков.
Open Notebook - это отличный open-source клон этой штуки. Это особенно актуально, учитывая, что с доступом к гугловскому оригиналу из РФ сейчас та ещё возня. К тому же мне хотелось забрать этот инструмент себе, чтобы скармливать доки локально и не сливать данные в чужие облака. (+ на русском не делает подкасты).
Но меня дико бесит, что сейчас для запуска полезного опенсорса нужно быть сеньор-девопсом и поднимать гирлянду из Docker-контейнеров.
Поэтому я психанул, форкнул Open Notebook и упаковал весь их web/Docker-зоопарк в одно нативное macOS-приложение. Цель была простая: скачал .dmg, перетащил в Applications, вставил API-ключ и всё работает.
Что под капотом и как это работает
Приложение полностью privacy-first. Документы, настройки и встроенная векторная база (SurrealDB) лежат локально на маке. Парсить можно PDF, аудио, видео, сайты, а AI-провайдера выбираешь сам: хоть OpenAI или Anthropic, хоть локальную Ollama.
Звучит просто, но скрестить это всё оказалось больно. Исходник: Next.js, FastAPI и фоновые воркеры на Python. Я завернул интерфейс в Electron, а Python-часть собрал через PyInstaller.
Самым большим челленджем стали PDF. Парсер Docling тянет за собой Torch и нейромодели, из-за чего билд приложения раздувался до неприличия. В итоге я разделил поставку: в базе идёт лёгкий воркер, а тяжёлый OCR-движок юзер скачивает прямо из настроек аппки только если он реально нужен.
Ну и отдельный кайф desktop-разработки: заставить Electron корректно убивать дочерние Python-процессы при закрытии окна, чтобы они не висели в памяти призраками.
Можно качать, щупать и форкать:
💻 Репозиторий: https://github.com/eryabyshev/open-notebook-app
📦 Релизы (.dmg): https://github.com/eryabyshev/open-notebook-app/releases
⭐️ Если вам зашла идея или просто хотите поддержать пет-проект - влепите звездочку репозиторию. Вам секунда, а мне лучшая мотивация пилить обновы дальше.
В планах на будущее: допилить сборки под Windows и Linux.
А пока у меня остался один незакрытый гештальт с macOS: сборка не подписана сертификатом Apple, поэтому при первом запуске мак ругается и просит разрешить аппку в Privacy & Security.
Дебаж 🐞с ноги 🦶
Мы подражали волнам, мы колебались и вибрировали…
Часть первая
Часть вторая
Пора сделать следующий шаг.
Настало время выбрать красную таблетку и погрузиться в матрицу.

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

Бинарный, в переводе с орочьего на русский, означает двоичный.
Из названия можно понять, что код этот состоит из двух символов. 0 и 1.
Зачем он нужен, если мы с успехом пользуемся десятичной системой исчисления и всем норм?
Можно сказать, что вопрос передачи информации на дальние расстояния, появился с открытием электричества, но это не так. Сигнальный костер является отличным примером двоичного кода. Костер горит (1) – напали враги, не горит (0) – в Багдаде все спокойно. Пока там ваш голубь с запиской долетит, а большой костер видно за километры. А если поджечь голубя, то эффект увеличивается в разы.

Да, много информации таким способом не передашь, но ведь можно и усложнить. А давайте три костра рядом соорудим, итого у нас будет 8 различных комбинаций. Например, 001 – на город напали, 011 – дворец пал, 110 – заказ пиццы во дворец. Главное потом не напутать.
Полицию вызвать таким способом не получится, а пожарных вполне.
Буквы или цифры по проводам передать невозможно, а вот двоичный код просто. Свет горит – 1, не горит – 0. Есть напряжение – 1, нет напряжения – 0. Достиг успеха в жизни – 1, ничего не добился – 0.
Из меня и сына маминой подруги, например, можно составить двоичный код.
Значок кнопки питания тоже тянет корни из бинарной логики. 1 и 0.

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

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

Один бит информации – это и есть 0 или 1. В одном мегабайте данных – 8 388 608 нулей и единиц. Нехило, правда? Уж можем себе позволить разгуляться на весь объем.

Подходим к главному.
У нас была волна, клубные колонки, компакт-диск и пара цифр. Мы хотели танцевать.
Как двумя цифрами изобразить волну?
Все гениальное просто – записывать высоту волны через маленькие промежутки времени. Называется это импульсно кодовой модуляцией.

На CD дисках такая запись происходит 44 100 раз в секунду и каждый замер сигнала кодируется 16-ти битным числом.
В итоге мы имеем такую картину:

Как рисование картин по точкам с нумерацией.
И тут уже не обойтись без вычислительной техники, чтобы такое провернуть. Для записи аналога в цифру используется АЦП (аналого- цифровой преобразователь)
А для воспроизведения цифры ЦАП (цифро-аналоговый преобразователь)

С картинками все иначе – мы зашифровываем яркость, цвет и координаты каждого пикселя. Ваш монитор старательно воспроизводит эту инструкцию, и мы видим фото с котиком. А видео – это сменяющиеся картинки. Принцип тот же.
Во времена CD дисков и трава была травенее и шушпанчики толще. А вот скорость интернета и объем носителей были весьма факапными.

Мы не могли позволить себе такую роскошь, как громоздкие файлы. И речь ведь не только о скачивании картинок и фильмов с торрента. Интернет в том виде, в каком мы его знаем, не мог бы существовать без алгоритмов сжатия.
И их таки придумали. Знакомьтесь, два брата шакала – MP3 и JPEG.
Оба эти алгоритма используют особенности нашего восприятия. MP3, например, использует кучу разных уловок. Психоакустика, в связке с нашим аналого- чувственным преобразователем.
Не слышите до 20гц и выше 18 000Гц? Срежем их нафиг. Во время громкого звука не различаете более тихие? Тоже под нож. Сразу после громкого звука наступает краткий период глухоты? Под нож. Две разные дорожки для стерео непозволительная роскошь. Складываем их вместе, и находим чем они отличаются. Не такие уж они и разные, а значит, можно сократить лишние данные. И многое другое. На слух, большинство людей не определит подмены, а размер уменьшился в десяток раз.

То же самое и джипегом. Зачем прописывать характеристики каждого пикселя, если у нас целые блоки одного цвета и яркости? Пропишем один раз и укажем сколько таких. Наше зрение менее чувствительно к изменениям цветности, чем к изменениям яркости. Значит часть цветовой информации можно убрать. Например, объединить каждые 4 пикселя в один.
Сами по себе эти алгоритмы, при разумном использовании - наши друзья. Они действительно убирают излишнюю информацию, которую мы просто не воспринимаем. Шакалы наступают при попытках сжать несжимаемое, тут уже вовсю идет потеря качества.

До встречи в последней серии нашего увлекательного путешествия.
Комментарии