Всем привет! Ровно год читаю vas3k.club, но пока ничего полезного не написал, и пора это исправить. Расскажу, как я дорвался до вайбкодинга и сделал за несколько вечеров всё, что собирался делать в ближайшие десять лет, в том числе — свой собственный мессенджер MAX за один вечер. Чтобы хорошие близкие люди (и вы тоже) могли бесплатно созваниваться по видео с родственниками без всяких ВПН. И навернул сверху современное шифрование чтоб больше не париться вопросом, читают майоровы нейросетки трафик Телеграма, как они читают мою Яндекс-почту, или пока нет. Сперва про сервер шифрованных вебсокетов.
https://tele.karlson.ru/doc/ws/postman1.webp
Прогнозы фантастов и техногиков, как нас окружит скоммутированный «интернет вещей», давно протухли. Как и 30 лет назад, каждый торшер сидит в своем углу. Перекинуть видосик напрямую с мобильника на мобильник? Передать фотки в домашнюю фоторамку? Задачи, сравнимые по сложности с переобувкой колес на зимнюю резину голыми руками в темноте на морозе без домкрата. А если вспомнить про такой грех человечества, как IPv6? Который вот-вот родится в мир и даст доступ всего ко всему, но роды начались в прошлом веке, вылезла наружу только левая пятка, и беременность с тех пор как бы продолжается 27 лет. А там уже приехали разнообразные идеи безопасности, лицензий, юридической ответственности, и личный IP устройства стал выглядеть такой же тайной интимной подробностью как половые органы. А потом приехала истерия персональных данных, и скоро каждый, кто разглядывал на улице прохожих, будет считаться преступником, который получал незаконный доступ к личным данным морд. Хотя еще лет 50 назад справочники телефонных номеров жителей города лежали в телефонных будках городов, и никто почему-то не пугался, что коварный незнакомец разбудит Джона Смита сатанинским хохотом. Иными словами, про уникальный номер IP, который присвоен каждому устройству в мире, пору бы забыть навсегда. Вместо скоммутированного мира мы оказались в изолированном — разделены NAT и анально огорожены файрволами. Аренда статического IP, проброс портов, тоннели, шлюзы, VPN (в хорошем исконном смысле), разрешения админов, безопасников, и прочая перхоть IT-цивилизации.
https://tele.karlson.ru/doc/ws/postman4.webp
Я много работал с устройствам, и для своих проектов давно пришел к старой доброй идее сервера-реранслятора, к которому все подключены исходящим соединением (вебсокет, альтернативы нет): пользователи, погодные датчики, поливальные станции комнатных растений, собеседники, чаты, роботы и службы. Ретранслятор не в курсе, какие пакеты через него идут. Единственное, что меня не устраивало в вебсокетах, — отсутствие шифрования. Вместо которого обычно используют TLS и делают вид, что это и есть шифрование. Все понимают, что https/wss растет от такого же дяди с большого облака с его корневыми и прочими сертификатами, но кому мы нужны. Поэтому хорошей идеей оказалось перейти на нешифрованные вебсокеты, и пусть всё шифруют сами устройства своими ключами по топовым схемам — X25519, Ed25519, XChaCha20-Poly1305, Blake3. Сервер видит шум, он просто труба, которая может стоять где угодно, почему бы не в России. Личных данных нет, логинов и регистраций нет, все делается оконечным шифрованием. С этой сложившейся архитектурой и ее выстраданными на прошлых работах исходниками я и пришел к Claude, и он мне за три вечера набыдлокодил так много полезного, что...
tele.karlson.ru - звонилка и мессенджер
https://tele.karlson.ru/doc/ws/karlson.webp
В России не запрещены звонки. Запрещены иностранные мессенджеры с функцией звонка — Telegram, WhatsApp, Facebook и далее по списку. В результате условный пожилой Георгий Иванович не может позвонить в Торонто своей внучке Анюте потому что ничего не смыслит в VPN, у Анюты нет мессенджера MAX, а звонилка VK жрет мобильный трафик как слон тростник, даже когда отключено видео (черные кадры тоже жрут трафик, но разработчики наверно об этом не думали). При этом в каждом браузере есть протокол WebRTC — мощнейший, современный. И любая звонилка собирается за пять минут, это вообще не проблема, проблема лишь сделать грамотный сигналинг. Поэтому в порядке импортозамещения и развития отечественного IT я взял простой российский сервер в питерском датацентре, накатил туда свой скоростной вебсокет на Rust, добавил пару полезных сервисов (таких же ws-клиентов по сути), ну и TURN, если не вышло P2P (но там свое шифрование тоже оконечное, без дяди). Так появилась удобная и качественная звонилка, к ней добавились сообщения с файлами и фотками — это уже совсем пустяк. Для Андроида было написано нативное приложение с вызовом-звонком, теперь думаю, как бы на iOS собрать еще. Оказалось, Claude Opus 4 делает полноценный мессенджер Макс ровно за 1 вечер. При этом все ключи и архивы хранятся только у пользователей, сервер и провайдеры видят шифрошум. Чтобы вступить в контакт, надо как-то отправить собеседнику ссылку со своим публичным ключом — придумайте как, хоть в Максе. Кому надо, пользуйтесь на здоровье.
Веб-версия: https://tele.karlson.ru
Андроид-приложение: https://tele.karlson.ru/apk
Открытый код на гитхабе, покажите своему Claude и попросите сделать себе такой же или лучше:
https://github.com/lleokaganov/tele
Связаться со мной лично:
https://tele.karlson.ru/?peer=K0dQtK86Vzg5hAhw4fQo-KFumFWrojajQXOkIQkwRuvHrbQoH3tyqJo01W-5NPf63XxR2U9SnUQWJZ70K1gTF3n0xMZW8
usbws и wsusb — удаленная работа с USB
https://tele.karlson.ru/doc/ws/wsusb.webp
Ну ладно, звонилка, мессенджер, удаленные собеседники, что еще можно делать с вебсокетами? Почему бы не сделать удаленное железо? Пробросить порт USB как он есть на низком уровне? Сперва с Claude мы сделали проект под Линукс, и это было уже интересно. Я включал даже usb-саундкарту и гнал туда звук с другого компа. Песни смешно тормозили и заикались — еще бы, каждый электрон заворачивается через питерский датацентр в криптографию и обратно. Но играло же! Однако для удаленных USB есть более важные задачи, например, прошивка софта в микроконтроллеры: UART-консоли, ST-link, Segger — они все портативные usb-свистки, но зачем бегать с ноутбуком, если достаточно мобильника? Код соберется на компьютере в одном месте, а зальется прошивка в любом другом. Начальник позвонит с выставки в Барселоне и попросит срочно, просто очень срочно поправить прошивку стенда — достаточно включить свисток в его мобильник, и прошивка будет залита. Андроид с OTG — лучший карманный гейт.
Код для Linux: https://github.com/lleokaganov/ws_usb_linux
Код для Андроида: https://github.com/lleokaganov/wsusb
APK: https://tele.karlson.ru/wsusb/wsusb-latest.apk
Немного IoT
https://tele.karlson.ru/doc/ws/effel_ph2.webp
Все свои WiFi проекты на ESP я стал гнать через те же шифрованные вебсокеты. Когда-то казалось, что умение чипа ESP поднять внутри веб-страничку — суперсила. Но это тупик. Рисовать клиентскую часть надо на сайте в нормальном интернете, а с чипом обмениваться только данными, командами, да менять прошивку по воздуху. И все это можно делать не стоя под домашним роутером и не через дурацкие ESP-Home и протоколы 80-х годов. Об этом могу говорить долго, но по глазами вижу, что вам не интересно. И правильно.
claude_wsbridge — консоль с Claude
https://tele.karlson.ru/doc/ws/claude.webp
Когда заработал собственный мессенджер, следующий вопрос я задал Claude: а можем мы с тобой перейти из нашего терминала туда? Через пять минут Claude создал мост. Я я ушел от компьютера на диван. И больше уже к экрану не подходил. Гулял по городу, ходил по магазинам, спал, просыпался попить воды, и снова засыпал, обсудив коротенько накопившиеся вопросы и дальнейшие шаги — а разработка проектов шла на компьютере круглосуточно. Конечно, где-то у Claude есть свой официальный мобильный ассистент. Но зачем он, когда за пять минут собирается такой же, где вместо чужих коммерческих ограничений (число сессий, обрывы интернета — там их хватает) — есть возможность просить [его же] добавлять [в себя же] любые новые полезные фичи, какие самому придут в голову. Какие? Да любые. Ты можешь из чата попросить Claude создать вот прямо сейчас отдельную сессию для сына, прислать ссылку с ключом, и дальше сын из своего мессенджера попросит Claude написать ему, что захочет, и прислать-выложить куда надо готовый софт, статью, мобильное приложение, — не будучи даже абонентом. Можно из ночного автобуса помочь другу перенести его сайт на новый домен. Можно даже настроить Claude генерить картинки по твоему промпту через API ChatGPT (собственной генерации у Claude нет). Просто покажите своему Claude это, пришлите свой публичник мессенджера, попросите поднять вам мост и идите гулять с мобильником:
https://github.com/lleokaganov/claude_wsbridge
итожик
Один небольшой протокол — шифрованные вебсокеты — и на этом компосте за три дня выросло много полезных грибов. Самым полезным оказался мессенжер для созвона с родственниками (и не только — поддерживается групповой чат до 5 персон). Буду рад, если он кому-то поможет. Заранее спасибо за комменты и отзывы. И заранее отвечу на три ожидаемых вопроса:
Нет. Архитектура подразумевает, что на сервере не хранится вообще ничего by design. Причин много, и ни одну из них я не хотел бы обнаружить на хостинге на мое паспортное имя. Забудем про учетные записи, логины и архивы переписок — всё хранится только на вашем устройстве, пока вы его не потеряли и не сбросили. Бэкапьте ключи. Да, сделать логины и учетки было бы удобней. И вам, и товарищу майору, но не мне, сорян.
Да. Вы правы, в мире есть блокчейн, матрикс, кубиты, игдрочил, галоперидол и много других красивых слов. Которые пока никому не помогли удобно созваниваться с тещей во Владивостоке без ВПН. А здесь маленький личный сервер, вы можете его использовать для звонков и переписок, а можете сделать свой такой же, или другой, но связи между ними нет, потому что не единая сеть. И в этом плюс: блокируют сервера пусть тоже по отдельности.
Да. Я изобретаю велосипед. Мы с Синдзабуро Шимано обожаем изобретать велосипед. Кто-то увлекается зимней рыбалкой, кто-то вышивает крестиком, а мое хобби — бесплатно изобретать велосипеды. Попробуйте сами, с нынешними инструментами вайбкодинга это быстро и фантастически приятно!
