LINUX.ORG.RU

Сообщалка: программа для общения в команде

 , , , ,


1

3

Так как меня не устраивали существующие мессенджеры для локальной сети, я написал свой. Если у кого-то ещё сходные требования, можете пользоваться.

Что умеет Сообщалка:

  • общий список всех сообщений от всех собеседников;
  • отбор сообщений по собеседнику или группе собеседников (группы добавляются и редактируются администратором);
  • отправка сообщений собеседнику или группе;
  • поиск по регулярному выражению;
  • просмотр сообщений за указанную дату или несколько дней перед датой;
  • позволяет отметить факт ознакомления с сообщением одним щелчком;
  • позволяет вставлять в сообщение изображения в любое место (как принято в письмах и как нет в мессенджерах);
  • позволяет цитировать сообщения (в том числе несколько в одном сообщении) и по щелчку переходить к процитированному;
  • позволяет редактировать отправленное сегодня сообщение и хранит историю;
  • серверная часть хранит сообщения в каталоге в виде читаемых файлов, изображения в одном экземпляре;
  • полностью переносима в рамках Windows/Linux/MacOS, работает на любой архитектуре процессора;
  • не имеет внешних зависимостей, кроме языка программирования Racket.

Что не умеет и вряд ли будет:

  • шифрование канала: если надо, можно ставить stunnel;
  • много пользователей: интерфейс на данный момент не предполагает прокрутку списка пользователей, но за счёт этого все данные на сервере в памяти и работает очень быстро;
  • вложение файлов: я считаю, что если файл нужен, то его надо выкладывать на файловый сервер и давать ссылку, а не превращать средство общения в хранилище файлов;
  • видео и аудио: если надо позвонить, логичнее кинуть ссылку на jitsi или что в команде принято.

>>> Исходники

★★★★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 7)
Ответ на: комментарий от ugoday

Правда (истина) тоже может быть ложной. Всë зависит от колокольни, с которой смотрят. Думаешь «нет» – говоришь «да» :)

yars068 ★★★★★
()

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

zabbal ★★★☆☆
()

Что же оно такое страшное? У вас совсем нет чувства прекрасного? Ну уж «лампочки» справа от кнопок с именем просятся точно, чтобы кнопки были выровнены. Но это капля в море, ибо ужасно всё, от начала и до конца.

PS: Я даже на этапе прототипирования себе такого ужоса не позволяю. кровьизглаз.жпг.

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

Если же пользователей вдруг сотни, то прокруткой не ограничиться: надо делать какой-то поиск по пользователям

Ну это за пол часа же делается. И прокрутка и поиск. Ну ладно, пусть по часу на то и на это.

Loki13 ★★★★★
()

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

Велосипедостроение это хорошо, а когда на лиспе/схеме пишут что-то помимо библиотек расширений синтаксиса и прочей внутрянки, так и вообще здорово. Но, всё же, чем имеющиеся средства общения не устроили? Можете ли описать свою Сообщалку в терминах «это как $IM, но с/без …»?

ugoday ★★★★★
()

интерфейс на данный момент не предполагает прокрутку списка пользователей, но за счёт этого все данные на сервере в памяти

Впервые вижу чтобы для организации списка пользователей с прокруткой требовалось использовать файлы. 1С «программисты» не перестают удивлять.

группы добавляются и редактируются администратором

Либо не «все данные в памяти», либо список групп живёт до перезагрузки сервера.

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

Унылые виндузятники с факультета информатики наваяли.

Вот именно таким и было мое первое впечатление. У нас такое на УПК в школе ваяли.

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

Ну это странно странно в современно мире.

Отстань от 1С «программиста» - он кнопки-то выровнять не осилил, не говоря уж про такую инновационную штуку как прокрутка списка пользователей, а ты тут про какое-то шифрование. Чел пишет как может, наслаждайся как цирковым представлением :)

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

Но вообще, описательный код на русском, выглядит довольно годно. Это то что мы потеряли приняв англоязычное it и перестав развивать своё. И я бы не сказал что это похоже на 1С, 1С как раз выглядит как говно из-за точек, скобочек и точек с запятыми. Тут этого нет и читается на порядок лучше.

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

Я смотрю на этот скриншот и понимаю, что он летает, мгновенно реагирует на любое действие пользвателя или внешнее событие. В отличие от MS Teams, где после любого клика система задумывается в лучшем случае секунды на 3-4. А это бесит невероятно, особенно когда в ходе созвона нужно быстро что-то посмотреть. Вот Сообщалка визуально сообщает, что не будет раздражать тормозами.

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

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

Вот именно затем и изобретена булева логика. Есть истина и есть ложь. А не «да», «нет», «да, но давно было, может путаю чо», «бабские враки» или «ложь, рассказанная пидором».

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

в винде я тоже как свинья в апельсинах, но подозреваю что кроме как стандартного window defender проблем не должно быть.

gagarin0
()
Ответ на: комментарий от Loki13

Интерфейс действительно выглядит не совсем аккуратным, однако «страшным» его никак не назвать. Вполне норм выглядит.

Меня больше бы беспокоили возможности структурирования диалогов (а вовсе не декоративные качества), из скриншота непонятно есть ли они.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от sunjob

Вопрос был про графический интерфейс.

Пока Racket единственная система, встретившаяся мне, которая упаковывает Gtk с собой, а не требует его поставить куда-то в систему.

Если в lazarus всё так же хорошо, надо посмотреть.

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

хм, пока не вижу подвоха, или есть какие-то нюансы запускать биранрик с флешки?

Если бинарник собран Haskell (ghc) и использует Gtk, то Gtk он ищет в C:\tools\msys64 (или где он был установлен для компиляции), а если такого на компьютере нет, то падает. По крайней мере, так раньше было, когда я начинал эту сообщалку писать.

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

Меня больше бы беспокоили возможности структурирования диалогов (а вовсе не декоративные качества), из скриншота непонятно есть ли они.

Через отбор собеседника (кнопкой слева). Собственно, это меня и сподвигло писать своё, когда я в чётырёх рабочих чатах искал сообщение от сотрудника (помню, кто писал, примерно помню когда, но естественно не помню, в каком именно чате-теме).

Если диалог групповой, то предполагается, что для него создана группа и тогда отбор по группе.

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

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

Я программист, а не дизайнер.

Ну уж «лампочки» справа от кнопок с именем просятся точно, чтобы кнопки были выровнены.

Собирался растянуть кнопки групп, чтобы правый край совпадал, забыл. Сделаю.

Если сможете придумать макет интерфейса с этими же функциями, но без кровьизглаз, прошу помочь. У меня основной критерий был, чтобы все действия были доступны в одно нажатие (кроме ввода логина и пароля, которые нужны раз в жизни).

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

Поэтому и не сделано. Чтобы не казалось, что можно использовать. Тестировать этот случай я всё равно не буду, а если кому-то будет надо, то он это сделает за полчаса.

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

к моему удивлению, на расте получилось написать GUI кодец, который запускался без дополнительных библиотек на всех трех ОС, при этом собирались бинарники их через cross-tools на линуксе в контейнерах, но повозиться конечно пришлось.

gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 3)
Ответ на: комментарий от gagarin0

на расте получилось написать GUI кодец, который запускался без дополнительных библиотек на всех трех ОС

То есть, он не Gtk/Qt использует, а напрямую системные вызовы на Win/Mac?

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

Я не профессиональный дизайнер, но просто как взгляд со стороны:

  • Сделай дату и время сереньким — эта информация довольно полезная, но не та, что должна бросаться в глаза первой, сейчас они выглядят так, будто важнее самого сообщения.
  • Убери буллит перед ними — он просто не нужен, зря замусоривает вид. Как вариант, можно на его место перенести галочку, которая сейчас справа, но не обязательно.
  • Если уж цветов использовано достаточно много при всей минималистичности, сделай так, чтобы разные ники отображались разными цветами (выбирать цвет можно рассчётом чексуммы от ника), так глазами гораздо удобнее наблюдать, кто именно с кем где общается, где подошёл новый участник, и т. д. — тупо по внешнему виду ника, при этом места не занимает.
  • Всю эту строчку с временем и датой можно сделать чуть-чуть меньшим размером шрифта по сравнению с самим сообщением — станет аккуратнее.
  • Убери неиспользуемую полосу горизонтальной прокрутки — она тоже только зря перегружает интерфейс. Она вообще хоть когда-то бывает нужна? Если бывает, показывай её только когда оказывается нужна.
  • Полосу вертикальной прокрутки я бы сделал несколько у́же. Хотя тут может от темы зависит, не знаю.
  • Кнопка справа с верху с буквой Х неочевидно, что делает. Если очищает поле ввода, я бы её сильно уменьшил и перенёс куда-нибудь. Да и в принципе не очень понятно, зачем она, можно же выделить всё двойным/тройным кликом и нажать delete (или даже не нажимать, а выделить и начать печатать, заменяя). Если выделить всё в этом поле двойным или тройным кликом нельзя — надо чтобы было можно.
  • Дата всегда имеет одинаковую длину в символах — это 8 цифр и две точки. Сейчас она занимает половину поля ввода. Можно это поле уменьшить, а лейбл «от даты» для него разместить слева.
  • Кнопку «перейти в конец» я бы по вертикали выровнял с нижней границей поля собственно с чатиком. Так оно как-то логичнее ощущается — в конец же, значит и кнопка должна быть внизу.
  • В главном меню всего один пункт «Настройки», и он целую строчку занимает. Можно его или перенести в аккуратненькую кнопочку в уголке (а строку меню убрать), или уж развернуть, так чтобы его подпункты стали уже пунктами главного меню.
CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 3)
Ответ на: комментарий от monk

да, именно, использовал egui, она простенькая, но для моих задач подошло. (отрисовать меню, кнопки, события и т.д.)

egui = "0.33.3"
gagarin0
()
Ответ на: комментарий от CrX

Благодарю!

Только про букву Х уточнение: это кнопка «Сбросить поиск». Если просто стирать и нажимать «Найти», то, оказалось, что не очевидно (стирают и звонят, что поиск не сбрасывается). А по вводу искать тоже плохо, так как сначала вводят слово, а потом ставят галочку «Без регистра». Разве, что её в конец поля ввода поставить и сделать меньше.

Остальное так и сделаю.

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

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

А разве принято, чтобы при шелчке по пункту главного меню сразу действие происходило? Я думал, это контринтуитивно.

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

В троичной логике всё то же самое: есть явные логические состояния, каждое исключает друг друга, у каждого своё имя.

В таком случае их можно назвать вкл/выкл, да/нет, есть/нет и они останутся точно так же исключающими друг друга.

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

Есть истина и есть ложь. А не «да», «нет», «да, но давно было, может путаю чо», «бабские враки»

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

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

Назвать-то можно всё, что угодно, бумага всё стерпит. Но речь идёт об одном из базовых типов языка программирования. Ложь и истина универсальны, а вот вкл/выкл подходят только ситуативно, не работают в большинстве случаев, требуют запоминания (и трансляции в голове в стандартные ложь/истина).

Стилистически мигает = да выглядит лучше, нежели мигает = истина. Однако во втором случае мы можем быть уверены, что альтернативный вариант только один мигает = ложь. В первом же случае, нужно пойти и почитать документацию, что такое в данном контексте мигает и как с этим жить работать.

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

Можно написать

да = истина
нет = ложь

...


мигает = да


...

если мигает тогда ...

Как пожелает программист.

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

А можно так:

мигает = 'да

...

если что-то() тогда
  мигает := 'нет
  иначе
  мигает := 'иногда

...

если мигает == 'да тогда ...
monk ★★★★★
() автор топика
Ответ на: комментарий от monk

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

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

по моим данным, на haskell научилась хорошо писать Kimi K3 (K2 справлялась не очень)

gagarin0
()
Ответ на: комментарий от monk

Да всё возможно

CL-USER> (deftype состояние-мигалки () '(member мигает не-мигает))
СОСТОЯНИЕ-МИГАЛКИ
CL-USER> (defparameter *мигалка* 'мигает)
*МИГАЛКА*
CL-USER> (defparameter *ложная-мигалка* 'то-мигает-то-не-мигает)
*ЛОЖНАЯ-МИГАЛКА*
CL-USER> (typep *мигалка* 'состояние-мигалки)
T
CL-USER> (typep *ложная-мигалка* 'состояние-мигалки)
NIL
CL-USER> (declaim (ftype (function () состояние-мигалки) переключить-мигалку))
(ПЕРЕКЛЮЧИТЬ-МИГАЛКУ)
CL-USER> (defun переключить-мигалку ()
  (setq *мигалка*
	(if (eq *мигалка* 'мигает) 'не-мигает
	    'хочу-чтоб-мигала)))
ПЕРЕКЛЮЧИТЬ-МИГАЛКУ
CL-USER> (переключить-мигалку)
НЕ-МИГАЕТ
CL-USER> (переключить-мигалку)
The value
  ХОЧУ-ЧТОБ-МИГАЛА
is not of type
  (MEMBER COMMON-LISP-USER::НЕ-МИГАЕТ COMMON-LISP-USER::МИГАЕТ)
from the function type declaration.
   [Condition of type TYPE-ERROR]

только речь (по крайней мере в моём случае) о названиях для базового типа языка программирования. И тут уж истина и ложь безальтернативны.

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

лазар точно так-же действует, с небольшой оговоркой:
далее сделал выкус из одной своей переписке, по «данному» поводу:
- имеет возможность выбрать из нескольких тулкитов (GTK2/QT4/5)
- но, должен быть установлен gui-toolkit (под который написана программа): qt4/qt5/qt6/gtk2
соответственно, если использовался qt-интерфейс, то должна быть установлена библиотека-прослойка qt4pas/qt5pas/qt6pas, причем (*), в некоторых случаях «родная библиотека» из комплекта дистрибьютива линукса может не подойти (как было у меня), т.к. собирается в однопоточном режиме (по умолчанию) и нужно самостоятельно пересобирать в «мультипоток», либо добавить данную библиотеку в архив, далее варианты (либо пишем запускающий скрипт-обертку с добавлением LD_LIBRARY_PATH, либо копируем библиотеку в «системный lib-каталог»)

(*) - если в системе установлен lazarus (в дефолтный PREFFIX=/usr), то, установленная библиотека собрана как «мультипоточная» (обычно)

надо таскать с собой всего одну библиотеку. вообще не такая уж и большая проблема?! зато сколько плюсов!!!
дополнительно: возможно переносить проекты из Delphi (с некоторыми усилиями, но все же можно, сам перенес несколько старых проектов под лазаря, не жалею :о)

обязательно присмотритесь к проекту.
ну и понятно, придется немного попотеть, помахать лопатой... но скорость GUI-разработки реально впечатляет.

https://freepascal.ru/forum/
https://www.lazarus-ide.org/

Projects using Lazarus/FPC:
https://wiki.freepascal.org/Projects_using_Lazarus/ru
https://wiki.freepascal.org/Projects_using_Free_Pascal
далее жмем на ссылки:

Projects using the Lazarus Component Library (LCL)
    Business Software
    Communications software
    Components and Libraries
    Databases and Tools (see also database portal)
    Developer utilities
    Editors and IDEs
    Educational software
    Games (see also game development portal)
    Hobby software
    Medical and Scientific software
    Multimedia
    User utilities
    Web

https://wiki.freepascal.org/Other_projects_using_Lazarus
https://vtemah.livejournal.com/1344776.html
https://kuzduk.ru/delphi/delphi_progs.html
немного хабра:
https://habr.com/ru/articles/835244/
https://habr.com/ru/articles/832686/
https://habr.com/ru/articles/867968/
https://habr.com/ru/articles/868720/
https://habr.com/ru/articles/876424/

sunjob ★★★★★
()
Последнее исправление: sunjob (всего исправлений: 5)
Ответ на: комментарий от monk

к стати, многие для «данных целей» используют старую Delphi (бинарники которой работаю «нативно» с виндой)
я для «этиx» случаев использу втч Delphi 4 & 7 - реально ахренеть скорость написания приложения, скорость сборки - гм... мгновенная (не успел отпустить клавишу - уже запустилось собранное приложение)
читал что window-commander пишется на одной из старых версий дельфей.

т.е.
- если только под винду - однозначно старая Delphi.
- если под все - современная Delphi (не самая последняя, а какая-то промежуточная... читал рекомендации).
- если приверженец опенсорса - Lazarus/FPC.

ну вот, как-то так :о)

sunjob ★★★★★
()
Последнее исправление: sunjob (всего исправлений: 2)

Название не нравится! «Сообщалка» — это вот условный AltLinux ID мог бы называться, например.

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

ну назовите «чат/разработка», «чат разработчиков» или «чат для разработчиков» :o)

sunjob ★★★★★
()
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от monk

А разве принято, чтобы при шелчке по пункту главного меню сразу действие происходило? Я думал, это контринтуитивно.

Нет, такое не принято. Но я ж не тыкал, что там у тебя, только на скриншот смотрел. Думал, там подпункты, а из них уже действия.

Если действий в этом меню не очень много, можно их вместо главного меню сделать тулбаром с кнопками — там как раз принято.

CrX ★★★★★
()

главное-окно{показать ложь}

ei-grad ★★★★★
()

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

похвально, а ты видел zulip ?

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

на расте получилось написать GUI

Какую библиотеку для Gui использовал?

P.S. А, увидел ниже. EGUI.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от sunjob

возможно переносить проекты из Delphi (с некоторыми усилиями, но все же можно, сам перенес несколько старых проектов под лазаря, не жалею :о)

У тебя там виндовых артефактов вроде SendMessage() в коде не было?

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

Самый лисапедный лисапед мной построен под оффтоп 2000. Им стал «анимированный контроллер наличия почты на серверах» - так я его обозвал.

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

по моему нет... во всяком случае не помню (из серии оконного цикла сообщений под винду, если не изменяет...)

sunjob ★★★★★
()
Последнее исправление: sunjob (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.