LINUX.ORG.RU

XMPP-клиент на Tcl/Tk, который заводится даже на Android

 , ,


2

3

Делаю десктопный XMPP-клиент на Tcl/Tk 9.

Что уже есть

  • Современный стек XMPP: OMEMO, звонки (совместимые с dino/conversations), отправка файлов, MAM (история на сервере, ленивая подгрузка), MUC, аватары
  • Статичная сборка в один бинарь без внешних зависимостей: всё перечисленное умещается в ~15 МБ, под Linux и под Windows

Чем отличается

Бизнес-логика жёстко отделена от гуя — в отличие от Dino/Gajim/etc, и по аналогии с телеграмным tdlib. Бэкенд может разговаривать по JSON, поэтому к нему можно прикручивать альтернативные фронтенды: в качестве proof of concept я накидал GTK-шный GUI и даже версию на Android.

По охвату даже шире, чем tdlib: в той же либе лежат и звонки с простым API уровня «начать/завершить звонок», так что любой порт получает функционал звонков почти бесплатно.

Как потыкать

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

Ответ на: комментарий от Berliner

XMPP даже хорошие клиенты уже не спасут. А уж клиенты на tcl/tk и подавно.

anonymous
()

на Tcl/Tk 9

На мой взгляд Tcl неплох как замена shell скриптов. Однако для проектов большего размера уже неудобен - постоянная путаница со строками (забытый $ или кавычки никак не отслеживаются при компиляции).
Кроме того я неожиданно столкнулся с ограниченной поддержкой юникода. Скорее всего это уже исправлено.

Кстати, что можешь сказать по-поводу языка Vala? ann_lortemp2 негативно отзывался, но не развернуто.

Бизнес-логика жёстко отделена от гуя

IMHO перспективнее мультипротокольные клиенты. Т.е. нужно еще протокол отделить и поставлять в виде плагинов.

MirandaUser2 ★★
()
Ответ на: комментарий от MirandaUser2

IMHO перспективнее мультипротокольные клиенты.

Настолько перспективнее, что нет ни одного живого :(

yorshka
()
Ответ на: комментарий от MirandaUser2

IMHO перспективнее мультипротокольные клиенты. Т.е. нужно еще протокол отделить и поставлять в виде плагинов.

Звучит классно, но сложность растёт экспоненицально. Это значит, что тебе нужно пилить абстракции фронтенда, которые каким-то образом подойдут под все поддерживаемые протоколы. Значит, и код фронтенда усложняется - например у тебя уже не может быть во фронтенде просто переменной jid типа string, у тебя теперь должен быть какой-то AbstractUserIdentifier с несколькими имплементациями, которые ещё и вести себя по-разному могут, ведь например в джаббере у тебя для каждой конфы отдельный псевдонимный jid (а может и не быть), в simplex вроде вообще нет стабильного id в стандартном понимании и т.д. Что уж говорить об истории сообщений с динамической подгрузкой, навигации по архиву сообщений и т.д., там вообще без вариантов имхо.

Мультипротокольные клиенты можно было тянуть во времена irc, и в общем-то не было ничего принципиально сложнее irc - без синхронизации истории сообщений как таковой, например, без эзотерики как simplex/jami и т.д.

wusspuss
() автор топика
Ответ на: комментарий от wusspuss

Звучит классно, но сложность растёт экспоненицально. Это значит, что тебе нужно пилить абстракции фронтенда, которые каким-то образом подойдут под все поддерживаемые протоколы.

Да нет, всё проще. Можно сделать общее подмножество, которое работает для более-менее всех протоколов: окно чата, список контактов, история и т.д. А остальное, то что реально специфично (настройки, какие-то спец.фичи, etc), тащится из плагина как есть. Разрабы Миранды с этим как-то справились же.

Но да, это требует сесть и подумать, а не просто херачить код при помощи LLM не приходя в сознание.

yorshka
()
Ответ на: комментарий от wenxuan

Думаю tcl можно малой кровью откатить до 8.4 и собрать на xp. Но вот звонки (libdatachannel) - скорее всего гиблое дело.

wusspuss
() автор топика
Ответ на: комментарий от MirandaUser2

Кстати, что можешь сказать по-поводу языка Vala?

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

wusspuss
() автор топика
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария