Comments 52
Да, я знаю весь стандартный набор комментариев про ограничения платформы, кривые пуши, фоновые ограничения и то, что «настоящие пацаны пишут только натив»
Я даже не успел до базовых ограничений добраться, потому что мой сеанс тестирования завершился прямо на входе 🥲

Это же PWA, зачем же так бить себя по рукам и вставлять палки себе в колёса строго ограничивать возможности своего же продукта?
Заходишь на сайт, видишь там большую кнопку - открыть этот замечательный мессенджер. Нажимаешь ее и видишь там такое. Автор, ну зачем? Как я тебе поверну 27 дюймовый мониитор, он же тяжелый, неудобно его держать в таком виде и писать сообщение одновременно.
"Заузил" окно, чтобы оно казалось приложению вертикальным. Баг прошел, приложение "пытается" открыться, но видно только пустой черный экран. Linux/Firefox
Как написал автор "Ну вроде едет" - похоже у меня как и у вас велосипед не той системы) если на первом же этапе такая преграда, то добраться до финиша надо ещё постараться)))
. Заузил, прошел этап 1. Второй этап только Gmail. И долго шло письмо, но я справился). Наверное тест на человечность.. uin за это время изменился.
Имя недоступно. Номер только для РФ? Печаль
Короче. Все очень ещё сыро, но вроде понятно и аську напоминает. Ещё бы звуки оттуда.
За найденные баги с логином — спасибо. Логи вижу, буду фиксить.
А с приходом кода на почту - код должен приходить достаточно быстро (по крайней мере достаточно быстро для того чтобы поймать добытый UIN) - проверь пожалуйста, не было ли первого сообщения с кодом в спаме? Детали можно писать в TG мне или непосредственно в моем мессенджере какой тестируем.
Ребят, я понимаю вашу боль, но давайте честно: я строю мобильный мессенджер для связи на ходу, а не корпоративный Slack для 27-дюймовых мониторов.
Заглушка на десктопе и жесткая привязка к вертикали — это не палки в колеса, это суровая расстановка приоритетов. У меня две руки и 24 часа в сутках. После работы над бекендом и инфраструктурой, оставшиеся силы я решил направить на PWA, но чтобы оно вело себя почти как натив на телефоне, держало сокет и не жрало батарею. Чтобы мог пользоваться на телефоне я и мои близкие. Десктопный фронтент — отдельная песня, которую я пока не начинал петь.
Спойлер на будущее: когда допилю ядро и если получится создать и выложить SDK/библиотеку, кто угодно сможет написать хоть CLI-клиент для Linux, хоть десктоп на Электроне, хоть клиент для умного холодильника. А пока — эмулируйте мобилку в DevTools или открывайте с телефона.
я строю мобильный мессенджер
Так это надо было сразу в заголовок вынести или хотя бы в тексте обозначить, а не в комментариях объяснять спустя ~10 часов после презентации 😉
Просто странно показалось: PWA буквально сделан для того, чтобы быть везде, а тут такое нелепое искусственное ограничение — поэтому и написал 🙂
Вы делаете хорошее дело, продоллжайте. Комментарий про монитор и подобные - он по сути шуточный, всем все понятно, разработчикам: и про кол-во рук, и про часы в сутках. Это не придирка, а просто обратная связь от тех, кто тестирует приоложение, кого оно заинтересовало (иначе бы даже не запускали).
А для чего вообще делать такое ограничение? Пусть оно хоть как-то открывается в горизонтальном режиме. Растянуто, зауженно, с прокруткой - не суть важно. Не надо для этого ничего разрабатывать, если не хочется - пусть открывается так, как само открылось.
На гитхаб не выложил, значит есть что скрывать)
Конечно мне есть что скрывать) Там местами такой слой изоленты и хардкода, что от моего репозитория заплачет даже самый суровый сеньор, а мне придется краснеть за это.
Статья не о том, «как писать идеальный код», а о том, что живая система уже крутится и ее можно потрогать руками (и попытаться поломать, если получится). Кстати логи на фронтенде (см. DevTools) сейчас открыты очень богатые, можно отлично посмотреть что происходит и как это работает на практике.
А исходники выложу когда мне самому перестанет быть за них стыдно. Сейчас моя цель — краш-тест архитектуры и приложения под нагрузкой и хаосом пользовательского поведения, а не код-ревью моего личного франкенштейна. Кому без гитхаба не читается — ваше право. Остальным — велкам на прод развлекаться и пробовать ломать транспорт.
Хотите проверить, как это переживает плохую сеть — отлично
В этом вопросе белые списки российских мобильных операторов предоставляют вам обширное пространство для натурных экспериментов.
А чего xmpp не поднять просто?
На самом деле xmpp (например, на ejabberd) как и например Matrix - замечательные современные решения
Matrix (на Synapse) - отличное полуготовое решение с настоящим (а не просто заявленным) E2E для самохостинга. Пробовал его. К сожалению Synapse написан в основном на Python (как я понял), и не самый шустрый - федеративность тут не только идеолоическая но но чисто техническая необходимость. Помимо Synapse есть альтернативные решения (например есть эксперименты на Rust) но они не поддерживают многого. Есть некоторые неудобства для меня как пользователя (например настоящий E2E жестко привязывается к конкретному устройству и использование аккаунта с нескольких устройств практически невозможно) И если на ПК клиенты для Matrix более менее адекватно работают, то на мобильных устройствах почему-то все печально с этим - тормознутость их мобильных клиентов я уж и не знаю чем объяснить.
xmpp (ejabberd) - отличное проверенное временем решение. Даже более того скажу - в первых версиях прототипа я и собирался сделать просто симпатичный клиент для ejabberd, просто обогатив его парой современных функций. Но попробовав это, протестировав - увидев что многие функции не отвечают современным паттернам мессенджеров (например слишком шумные MUC-комнаты, где расход на трафик и процессор растет в геометрической прогрессии с ростом количеством пользователей там), и вкусив всю сложность работы с Legacy системой при попытках хоть немного расширить функционал и понял что все это в итоге легче будет написать с нуля.
Всё это разбивается о законы РФ с регистрацией через смс/госуслуги, предоставлением всего кому надо, реестрах ОРИ и прочем. Так что если это будут использовать не два человека - то и заблочат сразу. При этом все эти законы расчитаны на то, что негодяи не будут такой вот селф-хостед с e2e шифрованием на коленке лепить из кучи готового на гитхабе, т.е. реальную угрозу не устраняют.
Так что придем к белым спискам, к сожалению,
И не только законы РФ, очень много стран где мессенджеры регулируются. И крайне не рекомендую такие мессенджеры даже собранные на коленке давать в свободный доступ запушённый на своей инфраструктуре. (Если мессенджер используется для распространения запрещенной информации (например, экстремистской), его создатели могут быть привлечены к уголовной ответственности).
Чтобы не слишком беспокойно спать держа собственный мессенджер, нужно жить не в России (хотя история Дурова во Франции показывает, что не является абсолютной гарантией, но и Telegram пытается быть чуть менее замодерированной площадкой, чем другие, если же полностью идти на встречу властям, то комплаенс мессенджеров во многих странах попроще, чем в России, и не выглядит как заградительный).
Но если жить не в России, то у тебя работает и Telegram, и Whatsup, так что мотивация что-то делать уменьшается)
А если хотя бы формально соответствовать требованиям российской юрисдикции, то банально нужна авторизация по номеру телефона, а это требует финансовых вложений линейно зависящих от количества пользователей (в отличии от сервера, который можно хостить под кроватью и/или как то особо оптимально написать бекэнд). А ещё регистрация самого мессенджера в РКН, что-то там с СОРМ и т. д.
Льстит, конечно, что мою гаражную поделку в коментариях к первой же публикации сравнивают с империей Дурова. Спасибо. Но давайте спустимся на землю. У Павла миллиарды, лучшие инженеры и статус глобального игрока. У меня — кофе, энтузиазм и Docker-контейнер.
Я не ОРИ. И я не делаю коммерческий продукт на миллионы людей.
А если уж мой сервер внезапно начнет превращаться в даркнет и рассадник запрещенки — я сам выпилю этих юзеров без суда и следствия. Этот проект - мой личный инженерный эксперимент, и альтернативный канал связи для тех кто хочет хоть как-то связаться с близкими. Уж извините, без обид.
Для этого надо знать что они появились, ну и тут возникает ещё один важный вопрос - модерация/перлюстрация. И да таки его так или иначе надо решать.
Справедливое замечание. И ответ на него — это как раз тот компромисс, на котором держится любой независимый проект хоть как-то касающийся людей.
Сразу оговорюсь: перлюстрации (автоматического или ручного чтения личных сообщений) - я буду стараться избегать как смогу, сколько смогу. Это мне и не интересно, ввиду преимущественно инженерных целей в проекте, да и в здоровом сообществе лучше когда этого нет.
А вот модерация, в перспективе со строгим аудитом действий модераторов если они будут, — планируется. Архитектурно уже есть наброски, надеюсь смогу вскоре реализовать это. В целом планируется работать по классической схеме, как в старом добром интернете. Например, пользователь видит дичь (спам в публичном чате, угрозы, откровенная запрещенка) -> жмет кнопку «пожаловаться» -> я получаю алерт с ID нарушителя, ID чата и контекстом жалобы (например, несколько сообщений, на которые пожаловались). И предпочтительно ручной вердикт по этим нарушениям.
Конечно это не попытка построить «безопасное пространство» в корпоративном смысле. Это скорее цель сохранить в баре порядок, чтобы можно было спокойно поговорить, не опасаясь, что кто-то начнет кидаться стульями. Если кто-то кидается стульями — то вышибала (то есть на начальных этапах я) выводит разгорячившегося на улицу. Все просто.
Ну я скорее не про общественные нарушения - ругаются матами и показывают кровькишки, а использование в целях, к примеру, продажи наркотиков, ну или любой другой условный "терроризм". То есть наружу это никак выходит, увидеть реальное применение можно только если открыть и посмотреть. А полиция (или как оно там сейчас у нас называется) это установит уже постфактум, ну и дальнейшие последствия...
Тут вы бьете в самую точку почти любого мессенджера или средства связи. Технически и логически вы абсолютно правы: если я принципиально не лезу в базу читать чужие личные сообщения, то о «тихих» приватных делах я узнаю только в тот момент, когда ко мне постучат в дверь. Это уязвимость любой немодерируемой системы.
Но давайте включим холодную прагматику и оценим реальную модель угроз. Серьезным ребятам с серьезной запрещенкой нужна стабильность, аудированный E2E-код, гарантии анонимности и миллионная аудитория вокруг, чтобы раствориться в толпе. Они сидят в каких нибудь Матриксах, Сешшионах, XMPP с OMEMO, секретных чатах TG, ну или на крайний случай в каких нибудь Ватсапах.
Пойдут ли они проворачивать свои дела в экспериментальный PWA-мессенджер, написанный одним разработчиком на Хабре? В систему, где исходники закрыты (то есть для них это черный ящик, нулевой OpSec), а сервер может лечь просто потому, что я решил пересобрать контейнеры в пятницу вечером?
Вряд ли. Для них мой эксперимент — это слишком ненадежно и опасно. Я делаю обычный молоток. Да, риск того, что кто-то решит проломить им кому-то голову, а не забить гвоздь, существует. Но если вдруг реальность окажется тупее моих ожиданий, и ко мне придут органы из-за того, что два идиота решили поиграть в наркобаронов... Что ж..
И теперь без иллюзий. Эпоха, когда можно было, как Дуров в 2015-м, строить публичный личный бренд как борца за абсолютную интернет-свободу, закончилась. И по всей видимости не только у нас, но и во всем мире - просто где-то эти изменения происходят жестче и прямее, а где-то более постепенно и мягко. Но, кажется, такая тенденция наблюдается почти во всем мире - нравится нам это или нет.
В будущем, если почему-то мой проект еще будет существовать и в него пойдет более массовая аудитория, а не пару инженеров-энтузиастов желающих прикоснуться к живой инженерной, пусть и нестабильной системе, - возможно я тогда найду более гармоничный баланс в таком тонком вопросе. А возможно тогда контекст деятельности всех иных мессенджеров изменится.
Так или иначе - вы поднимаете вопросы и стороны жизни на которые в нашем современном мире никто не может однозначных и правильных ответов. Не буду настаивать на правильности какого-то ответа и я...
Проблема тут не в эстетике. Проблема в том, что верхний вариант ищет по нужному полю
Как правило искать пользователю надо не по «нужному полю» а по всем полям. Вы Гуглом пользовались? Он не спрашивает по каким полям искать- просто данные выдает.
Далее: зачем все валить в одну базу PostgreSQL? У вас проблемы будут если начнут более 2-х клек пользоваться.
Допустим у нас 1М пользователей.
Каждому даем свою базу SQLite.
На каждого активного пользователя на back-end по одному потоку erlang. Итого плюс/минус умножим на 5, поскольку будут и другие потоки. Имеем 5 млн распределенных потоков
Каждый сам по себе, на каком реально сервере поле крутиться пользователю по барабану. Можно их на 1000 серверов раскинуть.
Итого: поиск в SQLite базе в чатах одного пользователя займет что-то около 0 времени.
Без исходников, мог бы даже не утруждаться писать эту портянку.
Была недавно статья про свой аналог дискорда - https://habr.com/ru/articles/1009658/
Может, автору будет интересно.
Поднять свой matrix сервер с блек Джеком и шлюхами не вариант?
Да, интересно, спасибо.
На самом деле парень @Mhessel красавчик. Выбрал хороший современный стек, который к тому же любят нейросети.
React популярный, куча готовых компонентов, и достаточно хорош для фронтенда (особенно когда уже есть опыт работы с ним). Красивый дизайн для ПК.
node.js который он выбрал для бекенда - также достаточно неплохой для бекенда (само собой когда на TypeScript, и хорош например в nest.js). Тут и единый язык с фронтендом, и хорошая конкурентность, и достаточная производительность для маленького проекта. Проблемы могут быть в нюансах, которыми в начале можно пренебречь - ошибки 5xx в главном потоке могут затронуть всех пользователей, может непредсказуемо вести себя под нагрузкой.
Но в целом, на самом деле хороший, современный проект, хоть какая-то альтернатива для связи.
Т.е. автор может в базе смотреть все сообщения? Шифрование не предусматривалось? А в планах есть?
Но всё равно зарегался:)
И, кстати, почему только gmail?
В теории - да, любое сообщение может быть прочитано. Как и в почти любом интернет-сервисе или мессенджере, где есть серверный поиск по сообщениям или пользовательскому контенту
На практике – лишь частично так. Читать чужие сообщения у меня нет ни времени, ни желания, ни сил; интересы у меня в проекте преимущественно в области инженерии и предпочтительно highload. А имею доступ к сообщениям только я, третьи лица не подпускаются.
В расшифрованном виде они только на сервере, при покидании сервера сообщения шифруются - шифруются и при транспорте (пока они летят до вас они зашифрованы скучным и надежным TLS1.3), как и при бекапе БД. И я стараюсь как могу защищать сервер от атак и разных любопытных ботов.
Относительно надежности сервера, чтобы не я в статье почти прямо прошу Хабровчан, технически подкованных людей, которые порой XSS/SQL-инъекциями перекусываю за завтраком, сломать мой сервер – чтобы на раннем этапе, пока почти нет пользователей, набить шишки и заткнуть все щели. Но пока взломать, как я понял, никому не удалось; а если кому-то и удастся, то я надеюсь этот Хабровчанин расскажет, как он это сделал, чтобы я мог усилить мой сервер.
К тому же этот проект мой личный инженерный эксперимент, моя личная песочница; мы слишком малы и экспериментальны чтобы представлять для кого-то интерес по наблюдению.
Поэтому с большой долей вероятностью ваши сообщения никто никогда и не прочитает. Если будут жалобы явные - тут другой разговор, нужно будет разбираться. Но без этого - ваши любовные переписки особо никому и не нужны. Но как и писал в статье - я пока не рекомендую передавать тут особо чувствительные данные (например, банковской карты или паролей от чего-то важного);
Так или иначе, тут вам придется довериться мне. Или не довериться, и продолжать пользоваться тем, чему уже доверяете.
В будущем я надеюсь найти на уровне архитектуры баланс между модерируемостью и частной жизнью всех участников. Но пока как есть.
А gmail – это как дополнительный фильтр против ботов и абьюза. Гугл достаточно неплох в фильтрации ботов, и при этом у большинства живых людей скорее всего найдется хотя бы один gmail.

А давно - это вчера? Или на прошлой неделе?
А сервер-то на чём? Любопытно как раз именно это, я попиливаю свою узкоспециализированную соцсеточку, там есть и мобильный клиент (на флаттере), но принципиальной является только архитектура сервера, и от выбора стека тут внезапно зависит чуть ли не все (на мой взгляд).
Оо.. Сервер у меня полный фарш..
А если кратко - то микросервисы, и использую все что попалось под руку. От Python для некритичных компонентов и быстрых прототипов, до Rust для небольших но критичных к производительности точек, если появляется bottleneck.
Если интересно конкретнее - первая версия была на Python FastAPI, еще пол года назад. Хорошая конкурентность, достаточная для IO-задач, простой и понятный язык. Потом с добавлением кучи функций я начал упираться в недостаточный RPS для моих целей, сложности с отладкой. В итоге где мог начал постепенно переходить на более серьезные языки.
А вообще если у меня будут силы и время - я планировал как нибудь написать на Хабр статью с чем именно я столкнулся, сила и слабости языков и подходов, компромиссы на какие пришлось идти, что сначала дает головную боль а что лишь потом потом но выносит голову совсем. Но это лишь в перспективе, пока еще даже не начинал писать это
Интересно, конечно. Мой сервер весь на эрланге, с нуля.
Это конечно круто. Мое почтение. Крутой мощный язык, особенно для реалтайм систем.
Я пробовал на erlang писать, сначала как модули для ejabberd - что-то даже написал, но надолго меня не хватило, особенно когда бизнес-логику всех моих хотелок попытался реализовать. Конечно легаси ejabberd и xmpp сыграло роль.
Но тем не менее - erlang есть erlang!
Всегда приятно читать про увлечённых людей. Чем бы ни закончился эксперимент, свою долю фана вы уже получили, и это прекрасно. В общем, желаю всяческих успехов.
А если хотите, чтобы из этого выросло что-то полезное, то было бы очень круто подготовить что-то типа университетского курса по разработке мессенджеров:
Протоколы. Начиная от SMTP и POP3, которые вообще не совсем про это, и далее через IRC, XMPP, OSCAR, MTProto, Matrix и далее со всеми остановками. В чём разница, в чём слабые места, почему решили делать новые протоколы, что в новых протоколов такого, чего не было в старых и т. д.
Формы общения: индивидуальные чаты, групповые чаты, каналы. В чём разница, какие паттерны нагрузки.
Криптография. От e2e шифрования до шифрования в разных группах.
Передача медиаконтента: какие кодеки, с какими допущениями всё пережимается «на лету».
Инфраструктура бэк-енда: примерная структура базы данных, процессы, поддержка сетевых соединений. CDN для раздачи медиаконтента. Федерация серверов.
Интерфейсные решения: сортировка чатов, группировка, поиск, прочие сервисные функции, которые отличают «хороший» мессенджер от «плохого».
Вы сейчас набьёте шишки на учебном проекте и будете понимать, на что обращать внимание, какую информацию искать и как её систематизировать. А потом студенты это всё изучат, сделают ещё стопиццот учебных проектов, и наконец-то появится команда, способная сделать Превосходный Национальный Мессенджер, а не [но тут я прекращаю дозволенные речи]
Спасибо за такие добрые слова. Честно, очень приятно читать.
Идея про «университетский курс» — это, конечно, красиво. Но боюсь, что после моего опыта такой курс будет больше похож на дневник выжившего в окопах борьбы с хаосом, чем на академический учебник.
Глава про протоколы будет называться «Почему XMPP прекрасен в теории и почему я больше никогда его не трону на практике». Раздел про криптографию сведется к одной фразе: «Не трогай, убьет. Начиная бери готовый TLS 1.3 и не выпендривайся». А лекция про инфраструктуру будет состоять из матерных логов упавшего сервера в 3 часа ночи и рассказа о том, как я пытался заставить два контейнера видеть друг друга.
Это больше тянет на сборник баек у костра для уставших инженеров, чем на учебное пособие)
А вот «Превосходный Национальный Мессенджер»… боюсь, после такого «партизанского» курса получится только то, что обычно и получается, когда за дело берутся комитеты.
Но за идею и поддержку — огромное спасибо. Значит, всё это не зря.
Ну нет, учебник — это огромный труд по поиску, обработке и систематизации материала. На базе одного любительского проекта его не напишешь.
Но не имея опыта разработки соответствующего приложения его тоже не сделаешь, потому что просто не знаешь, на что обращать внимание. Вот такие вещи
Почему XMPP прекрасен в теории и почему я больше никогда его не трону на практике».
без практики никогда не найдёшь.
Просто когда-нибудь оно действительно «поедет», и вы задумаетесь, а что дальше. Повторить успех Паши Дурова вряд ли получится, но есть другое направление, о котором я сказал. И вот там можно добиться :)
Да, взрослеть это не статья с красивыми эпитетами про борьбу жабы с гадюкой, а описание с конкретными примерами и сложностями. Пусть даже это будет серия статей по каждому из пунктов выше, какие трудности для каких сценариев были с ХМРР пример кода замеры трафика и тд. Почему выбран самый неудобный дизайн телеграма, а не предыдущий "как у всех". Как организована борьба за УИН какие варианты были опробованы и почему не сработали. Мне было бы интересно читать реальные примеры с объяснением выбора какие преимущества какие недостатки. И довольно странно выглядят просьбы оценить архитектуру и прочее когда нет никакого описания этой самой архитектуры и "за код стыдно" хотя насколько я вижу код клиента даже не минифицирован и доступен только инспектор открой.
При попытке открытия приложения - вижу только белую заставку на черном фоне, далее - черный экран. Android, Chrome
Видимо основное приложение почему-то не прогрузилось у вас.
Попробуйте закрыть вкладку, проверить что интернет есть и достаточной скорости (чтобы приложение скачало в разумное время все ассеты для запуска), и открыть заново желательно в новой вкладке перейдя по ссылке. Если будут проблемы - напишите детали мне в TG (найти меня можете в нашей группе Plumb Early Birds)
Спасибо, видимо действительно ассеты прогружались долго - оставил на несколько минут, после чего загрузилось. Оказывается, очень медленно грузит ассеты с сервера, сам интернет очень быстрый (600Мбит/с), но из США видимо медленно на РФ домены ходит.
Посмотрел через dev tools на десктопном браузере - иконка 120кб грузится за 2с, большие ассеты wasm - примерно за 2 минуты каждый, а некоторые до сих пор висят в статусе pending.
Выглядит любопытно, по изучаю.
Какие системные требования? На насколько старом телефоне можно запустить? (Что бы не включать на основном аппарате).
Сколько кушает трафика?

«Ну вроде едет». Мой самописный мессенджер готов к публичной порке. Начнём?