Isotoxin: свободный мультипротокольный мессенджер с поддержкой Tox

    Вы наверняка слышали о Tox. Напомню: это свободный защищенный p2p протокол для передачи сообщений, аудио и видео потоков между участниками Tox-сети. По сути — это альтернатива скайпу. Когда я впервые услышал о Tox, мой градус неприязни к скайпу был еще не слишком высок, но я уже начал поиск альтернатив. Мне очень понравилась идея, лежащая в основе Tox: мы пишем протокол со всеми нужными плюшками, а вы пишете к нему клиенты. Когда появились первые клиенты для сети Tox, я подумал: «черт возьми, я смогу сделать это не хуже!». Вобщем, подталкиваемый неприязнью к скайпу, я взялся за проект мессенджера своей мечты. Сейчас, когда в моем локальном hg-репозитории первому комиту исполнилось 19 месяцев и был сделан 414-й комит, я наконец то созрел до того, чтобы рассказать об этом клиенте широкой аудитории Хабра.



    Что сделано


    • Полная поддержка всех текущих возможностей протокола tox, включая видеозвонки (исключая смену nospam, но я сильно сомневаюсь, что существует на свете человек, которому реально потребовалось этой возможностью воспользоваться)
    • Собственный протокол для общения внутри локальной сети (создавался в основном для отладки системы плагинов, но вполне работоспособен: имеется все тоже самое, что в tox, кроме видео)
    • Поддержка одновременной работы нескольких протоколов (можно, например, иметь сразу два подключения к tox с разных ID)
    • Стандартные возможности сферического мессенджера, такие как сохранение истории, аватары, смайлы, нотификация о приходе сообщения и др.
    • Продвинутые возможности, такие как метаконтакты, аудио/видео звонки, расшаривание десктопа, групповые чаты, поиск по сообщениям, передача файлов
    • Шифрование профиля паролем. Профиль — это файл, sqlite база, со всеми настройками и историей сообщений.
    • Поддержка «скинов» в интерфейсе
    • Автоматические обновления

    более полный список
    • Поиск контактов в контакт листе
    • «Живой» поиск по сообщениям
    • Возможность НЕ хранить историю сообщений
    • Тэги контактов и фильтрация по тэгам (сделано в последней версии)
    • Можно посмотреть данные контакта, в том числе версию клиента (если это Isotoxin) и его Tox ID (nospam будет показан только в случае, если вы отправляли запрос на добавление)
    • Можно написать комментарий к контакту (просто описание, никуда не отправляется)
    • Аватарку и имя можно указывать для отдельных соединений
    • Можно сделать аватарку с web-камеры
    • Звуковые оповещения. Возможность выбирать звуки для оповещений
    • Поддержка наборов смайлов. Поддержка анимированных gif-смайлов
    • Передается время создания сообщения (надстройка над tox протоколом)
    • Поддержка bb-кодов в сообщения и имени. Если клиент на другой стороне не поддерживает bb-коды, имя ему присылается чистым
    • Мультиязычность. Язык можно переключать без перезагрузки
    • Автоматически включается статус «Отошел» (настраиваемо)
    • Разные способы отправки сообщений: Enter/Ctrl+Enter/Shift+Enter/Double Enter
    • Кастомизируемый формат отображения даты и времени сообщений
    • Возможность экспорта истории сообщений в txt или html файл (при желании, формат файла для экспорта можно настроить любой)
    • Показ и отправка нотификации о наборе текста
    • Автоматический прием файлов в зависимости от расширения файла
    • Показ картинок в списке сообщений, в том числе анимированных
    • Можно обрезать картинку перед отправкой. Саму картинку можно получить из файла, из буфера обмена, с web-камеры или сграбить рабочий стол. После обрезки автоматически выбирается формат jpg или png, в зависимости от итогового размера
    • Автообновления можно пустить через прокси
    • Настройка автозапуска
    • Сворачивание в «трей»
    • Для отдельных контактов можно включить автоматический прием голосового вызова с отключением микрофона
    • При передаче видео, изображение масштабируется на источнике под размеры приемника, т.о. экономится полоса
    • Генерация QR кода из текста сообщения, линка, или ID контакта или текущего Tox ID

    Конечно, еще многое предстоит сделать, но того что сделано, вполне достаточно для комфортного использования.

    Разработка


    У меня довольно большой опыт в C++ и программировании под Windows. Глупо пренебрегать этим опытом, поэтому разработка была начата на C++ и под Windows. Однако, понимая всю важность поддержки разных платформ, я сразу решил минимизировать зависимость от winapi и других windows-only возможностей. У меня даже рендеринг текста не использует GDI, а написан свой. Для чтения шрифтов используется библиотека FreeType. Весь GUI, все контролы — всё написано с нуля и не привязано к системе. Вся работа с окнами winapi вынесена в отдельное место и максимально абстрагирована от логики интерфейса. Проблема за малым — научиться писать под линуксом. Пока что у меня на это нет времени. Может быть найдутся желающие портировать?
    С самого начала я задумал модульную архитектуру. Исполняемый файл должен был уметь только GUI и ничего более. Все сетевые дела поручались модулям. Проще говоря — обычная система плагинов.
    Одна из трудностей, с которой пришлось столкнуться в процессе разработки — полное нежелание ядра tox собираться под Visual Studio. Все дело оказалось в динамических массивах стандарта C99. irungentoo, главный разработчик ядра, отвергает любые просьбы убрать эти массивы из кода, говоря: «C99 — стандарт. Если msvc его не поддерживает, то это его проблемы». Если вам интересно мое личное мнение, то я считаю динамические массивы злом, т.к. они убивают константность оператора sizeof. Так что я вполне понимаю разработчиков компилятора msvc и их нежелание связываться с динамическими массивами. Итак, у меня было два пути: собирать toxcore отдельно через cygwin (как это делают остальные разработчики клиентов Tox под windows) или самому убрать динамические массивы из кода. Я выбрал второй путь и в результате на свет появился вот этот репозиторй. Это не прямой форк toxcore, а некая сборка из необходимых библиотек (libsodium, opus, vpx), которая легко и безграбельно собирается msvc компилятором (поддерживаются 2013 и 2015).
    Почти весь код Isotoxin'а написан мной в одиночку, исключая несколько моментов, написанных моими друзьями, а также сторонних библиотек. Активно используются возможности C++11. В связи с выходом апдейта к 2015-й студии и исправления некоторых, критичных для меня, багов, планирую полностью перейти на этот компилятор, чтобы задействовать constexpr и C++14 по полной.

    Архитектура


    Когда я только начал писать первые строчки кода Isotoxin'а, в моих планах совершенно отсутствовало желание открывать исходники. Однако, имелось противоречие с лицензией GPL3, под которой предлагалось ядро tox. В чем противоречие? Если коротко, то эта лицензия требует открывать исходный текст программы, которая использует библиотеку под этой лицензией. Очевидное решение этой дилеммы — вынести реализацию протокола в отдельную динамическую библиотеку (dll) и открыть исходники этой dll.
    Но я решил пойти немного дальше и не ограничился лишь только dll-кой. В итоге родилась следующая архитектура.
    1. isotoxin.exe — чистый GUI. По началу я не хотел открывать его исходники. Чтобы повысить степень доверия к этому файлу, я даже решил полностью лишить его возможности работать с сетью. Позже, когда я все же отказался от закрытости, работа с сетью была возвращена, но только для одной цели — проверка и скачивание обновлений.
    2. plghost.exe — Небольшой exe'шник, который загружает dll-ки протоколов. Точнее — только одну dll'ку. Запускается непосредственно из isotoxin.exe и общается с последним средствами межпроцессного взаимодействия, транслируя его команды в dll протокола и отправляя обратно результат.
    3. proto.*.dll — Собственно dll'ки протоколов. Реализуют единый интерфейс.

    У этой архитектуры есть достоинства и недостатки.

    Достоинства.
    • Разграничение обязанностей кода. Нельзя просто взять, и вызвать какую угодно функцию протокола из GUI и наоборот. Это дисциплинирует и помогает писать четкий и безопасный код с минимумом ошибок.
    • Надежность. Ошибки протокола, приводящие к падению, не уронят GUI. В случае падения plghost.exe, последний просто загружается заново. Пользователь может даже не заметить проблемы.
    • Защищенность. Пользователь — параноик — может обложить plghost.exe разными правилами работы с диском, например, полностью ограничить запись и чтение. Все будет работать, как ни в чем не бывало, и даже, если злоумышленник сможет использовать уязвимость реализации протокола для доступа к коду, он не сможет покинуть песочницу.
    • На будущее — поддержка одновременной работы как 32-битных, так и 64-битных реализаций протоколов. Достаточно собрать 64-битную версию plghost.exe. Т.о. выпуск 64-битной версии Isotoxin'а (а я не исключаю, что это произойдет), не повлечет за собой необходимость срочного выпуска 64-битных же версий сторонних протоколов, если таковые появятся.

    Недостатки. А как же без них.
    • Значительное усложнение кода и его отладки. Одновременный дебаг нескольких exe-шников — это не сахар.
    • «лишний» файл (plghost.exe)
    • Требования к ресурсам системы немного выше. Все же запуск дополнительного exe'шника на каждый работающий протокол не бесплатно.

    Список недостатков получился каким-то маленьким и несерьезным. Ничего сверх этого я придумать не смог. А, следовательно, выбор архитектуры считаю правильным.

    Внешний вид


    Признаю, дизайнер из меня аховый, поэтому я сразу заложил в программу возможность смены внешнего вида. Проще говоря, поддерживаются «скины». Пока что доступна только одна тема. Увы, моего времени на всё и сразу не хватает. В ближайшее время я планирую сделать поддержку раскрашивания темы. Под спойлером несколько скриншотов Isotoxin'а.
    Скрины
    Главное окно. Версия уже устарела, но внешний вид, практически не изменился.

    Установка пароля в окне настроек

    Подготовка изображения к отправке — можно обрезать лишнее

    Преимущества


    Понятно, что каждый разработчик старается хвалить свой продукт. Постараюсь быть максимально объективным. В настоящее время наиболее популярным и богатым на возможности среди всех клиентов, поддерживающих сеть tox, следует признать qTox. Однако Isotoxin обходит qTox почти по всем пунктам (исключая, разумеется, поддержку не-windows).
    • Портабельность. В какой то момент qTox перестал быть портабельным. Возможно, портабельность ему снова вернули, я не знаю, не проверял.
    • Поддержка XP. qTox больше нельзя запустить под Windows XP. Для кого-то это может быть проблемой. Isotoxin работает под XP без проблем
    • Стабильность. Isotoxin уже практически не падает. Каждое падение — это моя личная трагедия. Пока не докопаюсь до причины падения, не успокаиваюсь. qTox у меня падал, даже без активного использования
    • Дополнительные возможности, которых нет в протоколе. В своем форке toxcore я ввожу новые возможности, разумеется, с обратной совместимостью. Когда Isotoxin обнаруживает на другом конце провода тоже Isotoxin, то эти возможности включаются. Одна из таких возможностей — неограниченная длинна сообщений (другие клиенты следуют рекомендации создателей ядра и режут длинные сообщения по пробелу)

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

    Планы


    Планов на будущее много. Помимо добавления протоколов (очень хочется добавить Telegram и джаббер), есть большое желание портировать под линукс. Для знающего человека это не должно составить проблемы. Как я уже писал выше, никаких особых возможностей «винды» я не использую. Вобщем, идея в том, чтобы сделать полноценную замену скайпу.

    Ссылки


    Сайт проекта: isotoxin.im
    Форум проекта: isotoxin.im/forum
    Сайт проекта в сети i2p: isotoxin.i2p (тут, бывает, появляются промежуточные версии)
    Исходный код: github.com/isotoxin/isotoxin
    Блог, посвященный проекту: isotoxin-dev.livejournal.com
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 55
    • +2
      Как собрать под другие платформы?
      • +5
        Добавить в проект код для других платформ)
      • +3
        Что всё-таки сподвигло открыть код? Да ещё и под GPLv3?
        • 0
          Для этого должна быть особая веская причина?
          • 0
            Вроде нет, но если изначально не планировалось, значит были какие-то свои соображения. Поделитесь?
            • +3
              Думаю ответ вас разочарует. Просто хотел избежать критики моего стиля программирования. Это ведь мой первый opensource проект, до этого весь мой код был доступен ограниченному кругу лиц. Но потом понял — нечего тут стесняться. Работает? Стабильно работает? Значит всё хорошо. А если что-то не нравится — милости просим всё исправить и сделать еще лучше. На то он и opensource.
              • 0
                Если руки дойдут, в феврале возьму. На wxWidgets-порт или Qt-обёртку обижаться не будете?
                • 0
                  Нет, не буду. Просто мне кажется, что это излишне. У меня UI движок порождает готовую картинку, которую просто нужно выплюнуть на экран, а с этим, как я понимаю, неплохо справляется голый X11. Впрочем, в вопросах программирования под никсы я полный профан.
                  • 0
                    если посмотреть на uTox, то там тоже вроде свои средства отрисовки.
                    • 0
                      Со своим рендерингом шрифтов вы IMHO переборщили. Выглядит не очень. Лучше использовать какую-нибудь хорошую кроссплатформенную библиотеку, например Cairo.
          • 0
            Профиль в своём формате? Стандартный от токса не подойдет?
            • +1
              Профиль в своем формате — sqlite база. Стандартный формат токса не предусматривает возможности хранения истории, а я хотел сделать все в одном файле, т.к. это удобнее. Однако, Isotoxin понимает стандартный профиль. В диалоге добавлении tox соединения, можно выбрать tox-save файл и из него будет импортирован ToxID и список друзей.
            • +2
              В tox так и не появилась поддержка множества устройств с одним аккаунтом?
              • 0
                Нет, это архитектурная проблема, пока не до неё
              • +26
                Глупо пренебрегать этим опытом, поэтому разработка была начата на C++ и под Windows. Однако, понимая всю важность поддержки разных платформ, я сразу решил минимизировать зависимость от winapi и других windows-only возможностей. У меня даже рендеринг текста не использует GDI, а написан свой. Для чтения шрифтов используется библиотека FreeType. Весь GUI, все контролы — всё написано с нуля и не привязано к системе.
                С нуля? Но зачем? Почему не тот же Qt?

                P.S. Сказать по правде, интерфейс выглядит плохо, напоминает эксперименты 15 летней давности.
                • +3
                  Такая же мысль возникла… только про wxWidgets
                  • 0
                    Поддерживаю на счёт wxWidgets, применить его для GUI, а для всего остального уже есть связка C++ STL + Boost (который фактически расширение STL и с каждым новым стандартом из него многое приходит). Самое главное это то, что wxWidgets выглядит «как родной», по сути им и являясь на всех платформах, чего нельзя сказать про тот же Qt, который на всех платформах выглядит как Qt и идеально вписывается только в KDE окружение.
                  • +1
                    Вы поверите, если я скажу, что люблю программировать? Я ж не ради денег это делаю.
                    А что касается внешнего вида — это просто из меня плохой дизайнер — сделал как смог. С технической стороны нет никаких ограничений — все контролы формируются из полноценных RGBA изображений и их внешний вид ограничен только фантазией дизайнера.
                    Ну и это вопрос вкуса. Мне, например, интерфейс Windows 10 не нравится. Как раз «напоминает эксперименты 15 летней давности», а это вроде как самое лучшее, что есть.
                    • +8
                      Вам как бы намекают, что хорошим тоном является использование нативных виджетов. Опять же не привязано к системе, но собрать не под windows никак. И смысл?
                      • +2
                        Дело не только во внешнем виде. Вот попробовал я прожку и сразу же напоролся на многочисленные недоделки в поведении окон Isotoxin, когда отсутствует стандартная функциональность, а все рефлексы, накопленные годами, оказываются не при делах, и только бессильно материшься, когда очередное привычное действие не срабатывает. Начиная от чисто стилистических несостыковок (типа коряво-размытых шрифтов или неожиданной смены указателя мыши при перетаскивании окна) и заканчивая незакрывающимися по Esc диалогами, неработающим значком системного меню и тому подобными проблемами.

                        Сторонние библиотеки тем и хороши, что разрабатываются отдельным коллективом, который вылизывает все эти мелочи, в то время как вы получаете возможность не изобретать велосипед, а направить любовь к программированию на создание действительно уникальной функциональности. Плюсом идёт готовая кроссплатформенность из коробки.
                      • +1
                        некоторые вещи 15-ти летней давности НАМНОГО лучше современных.
                        • 0
                          При этом их поддержка для разработчиков на пару порядков сложнее и дороже либо уже вообще закончилась. Т.е. я к тому, что с клиентом для Tox так сейчас не получится ибо, с наибольшей вероятностью, просто приведёт к закапыванию проекта в очень скором времени ибо его поддержка станет причинять БОООЛЬ.
                          • 0
                            А можно пример?
                        • 0
                          А вы не пробовали Clang под Windows? Или Clang/C2?
                          • +9
                            Однако, имелось противоречие с лицензией GPL3, под которой предлагалось ядро tox. В чем противоречие? Если коротко, то эта лицензия требует открывать исходный текст программы, которая использует библиотеку под этой лицензией. Очевидное решение этой дилеммы — вынести реализацию протокола в отдельную динамическую библиотеку (dll) и открыть исходники этой dll.
                            На самом деле GPL требует, чтобы открывался весь код, который динамически связывается в процессе выполнения (за исключением системных компонентов). Поэтому DLL не помогла бы: exe-файл, который грузит GPL-библиотеку, всё равно пришлось бы открывать. DLL спасла бы положение лишь при лицензии LGPL, которая такое позволяет.

                            В текущей архитектуре проекта открытая и закрытая (потенциально) части разнесены по двум разным процессам, так что тут GPL не нарушается, но на всякий случай решил уточнить, чтобы кто-нибудь не наступил на грабли, прочтя процитированный текст.
                            • –22
                              У меня один вопрос с точки зрения не радости программирования, а реальной применимости. Я понимаю вы очень гордитесь своим творением и упоминаете, что пишете его в одиночку и уже очень давно и вложили в проект много сил и времени.

                              Но простите, а для чего это? Зачем мне ваш p2p мессенджер с возможностью видеосвязи? Почему мне не подходит скайп. К тому же сейчас скайп выпустил веб-версию, что даёт прямо в браузере звонить. Ну хорошо, у вас p2p связь и как бы это надежно и безопастно для клиентов. Но, а что если я просто обыватель и не видел исходников, как вы меня убедите, что сервер не читает и не хранит переписку и не пишет видео? Мало кто поверит вам наслово.

                              Я считаю это игрушкой, школьным проектом или проектом на 1 курсе для ознакомления с плюсами и возможностью p2p передачи.

                              Вообще кто-то кроме вас пользуется этим мессенджером. Всё, что я вижу сейчас, это как талантливый программист занимается непонятно чем.
                              • +2
                                Там же написано что открытый протокол
                                • +12
                                  Почему мне не подходит скайп

                                  Так то вообще всем наплевать подходит он вам или нет. Автору вот не подходит. И он написал свой. Уважуха. Я так не могу, но хотел бы.

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

                                  На что простите вы предлагаете верить? Или просто априори верить нельзя никому?
                                  • +6
                                    Автор вообще-то воспользовался существующим протоколом (Tox), а не изобрел свой.
                                    • +3
                                      Почему мне не подходит скайп.

                                      как вы меня убедите, что сервер не читает и не хранит переписку и не пишет видео

                                      Скайп делает и то и другое и (потенциально) третье, но вас вроде это вроде как не смущает.
                                      • +3
                                        Есть люди, в том числе и за рубежом, которые прямо сейчас используют Isotoxin и он их устраивает внешним видом и функциональностью. Ну или они просят меня что-то поменять и я с радостью иду им на встречу. Даже если бы это был всего один человек (кроме меня), я был бы рад.
                                        Я занимаюсь тем, чем мне нравится заниматься — программированием. Кому-то это приносит пользу и меня это устраивает. Я не зарабатываю на этом денег и видимо поэтому вы решили, что я занимаюсь «непонятно чем». Чем же, по вашему, я должен заниматься?
                                      • 0
                                        А что плохого в неконстантности sizeof для динамических массивов?
                                        Вроде есть alloca() можно ее использовать, но массивы это тоже самое только лучше. Мне вообще не понятно как писать на С без динамических массивов на стеке, либо уродливую alloca() использовать, либо malloc на каждый чих, но тогда можно и на перле/Java и остальном писать.
                                        • 0
                                          Я сужу с точки зрения C++. Возможно для C неконстантный sizeof и не является проблемой.
                                          Если более предметно — toxcore. Там динамические массивы используются в основном для генерации пакета, который имеет максимальный размер, что то порядка 1.4kb (чуть меньше). И я не вижу причин не создавать на стеке эти самые 1.4 килобайта, и просто использовать из них не всё. Это бы даже быстрее работало, т.к. выделить на стеке константное количество байт всяко быстрее, чем неконстантное.
                                          • 0
                                            Эм, а в чём проблема с точки зрения C++ до тех пор, пока это всё не просачивается в API?
                                            • 0
                                              константным sizeof'ом можно, например, инстанцировать шаблоны. Понятно, что на неконстантный компилятор мог бы и ругнуться, но, мне кажется, сущность языка, которая может быть константной и неконстантной в зависимости от контекста — это плохо. Больше путаницы, сложнее компилятор. Я просто уверен, что C и C++ строится одним и тем же компилятором msvc. И делать поддержку неконстантного sizeof, чтобы уметь собирать код стандарта, которого на самом деле не так и много, при том, что всегда можно выкрутиться при помощи alloca, в ms просто сочли экономически нецелесообразным.
                                              • 0
                                                А вообще, мне кажется, что в архитектуре компилятора msvc есть какая-то беда с константностью. Т.е. им отчего-то трудно обеспечивать поддержку стандарта в этой области. Думаю, не случайно constexpr появился только в 2015-й студии, хотя мог бы еще в 2010-й, когда стали делать поддержку C++11. Но это исключительно мое мнение на основе ощущений.
                                                • 0
                                                  Там вообще много проблем, вспомнить хотя бы напрочь сломанный two-phase lookup.
                                                • 0
                                                  В C константным sizeof'ом можно инициализировать enum'ы:
                                                  void f (int n)
                                                  {
                                                      int vla [n];
                                                  
                                                      enum FooEnum
                                                      {
                                                          FE0 = sizeof (int),
                                                          
                                                          // не соберется, ругаясь
                                                          // enumerator value for 'FE1' is not an integer constant
                                                          //FE1 = sizeof (vla) 
                                                      };
                                                  }
                                                  


                                                  Я-то к тому спросил, что в C++ VLA нет, поэтому с точки зрения C++ это может быть плохо лишь в том случае, если код, использующий VLA, является частью API.

                                                  И делать поддержку неконстантного sizeof, чтобы уметь собирать код стандарта, которого на самом деле не так и много, при том, что всегда можно выкрутиться при помощи alloca, в ms просто сочли экономически нецелесообразным.

                                                  Ну, вы с таким кодом вот встретились.
                                                  • 0
                                                    Ну, вы с таким кодом вот встретились.

                                                    В Isotoxin'е использованы 16 сторонних C библиотек. И только в toxcore используются эти массивы.
                                          • +1
                                            Ничего себе! Я поражен. Когда-то, во времена распространенности ICQ, мне очень нравилась Miranda — простой, но чрезвычайно расширяемый клиент. Ваши скрины и описание прямо-таки ностальгию вызвали.

                                            (Посмотрел, оказывается, она уже тоже Tox умеет. Мир развивается. Круто же)

                                            Желаю вам найти единомышленников и запилить большой проект с плагинами, скинами и радостным сообществом.
                                            • 0
                                              qTox у меня падал, даже без активного использования

                                              У меня работает с утра до вечера и не падает (18 контактов и 3 чата на 40 человек в сумме). toxic вообще вторые сутки работает с логированием.

                                              Собственный протокол для общения внутри локальной сети

                                              Зачем было оставлять собственный протокол? Интереса ради спрашиваю.

                                              исключая смену nospam

                                              Очень полезная вещь, когда айди написан везде, со временем появятся и спам боты.
                                              • 0
                                                У меня работает с утра до вечера и не падает (18 контактов и 3 чата на 40 человек в сумме). toxic вообще вторые сутки работает с логированием.

                                                *Нервный смех*
                                                qtox как и utox два самых глючных и недоработанных приложения на моем компьютере

                                                image
                                                И это абсолютно все версии, я их обновляю постоянно в надежде и с мыслью — «ну ребята ну вы уже несколько лет разрабатываете это приложение, сделайте хотя бы чтобы оно просто не крэшилось каждый час я уж не говорю про качество звука».
                                              • +2
                                                вроде бы новость отличная, но… Собственный протокол для общения внутри локальной сети — вот от этого надо бы уйти — либо переносите плюшки в основной протокол расширяя его, либо плюшки почти никто не сможет использовать если ваш клиент не станет самым популярным. Ну и над внешним видом поработайте — это одна из причин почему я не захотел ставить ваше «чудо» вместо qtox.
                                                • +1
                                                  Собственный протокол для общения внутри локальной сети — вот от этого надо бы уйти

                                                  Этот протокол создавался для отладочных целей. Понимаете, в текущей архитектуре нужно иметь хотя бы два работающих протокола, чтобы как следует все отладить. Так-то я никому этот протокол не навязываю. А если вы удалите proto.lan.dll, так он даже места на вашем диске занимать не будет.
                                                  Но, может быть вы имеете в виду нечто другое — то что я вношу в tox изменения, которые задействованы только в Isotoxin'е? Но, во первых, эти изменения никак не влияют на работу Isotoxin'а с другими tox-клиентами, т.е. соблюден принцип полной обратной совместимости. Во вторых, кто ж мне позволит внести эти плюшки в основной код протокола? Для этого нужно быть своим в среде разработчиков, а я там никто. Мне так кажется. Может я и ошибаюсь. В любом случае, нужно обосновать эти изменения, чтобы их приняли. А с английским у меня плохо.
                                                  По внешнему виду — тут я пас. Я, конечно, продолжу улучшать движок интерфейса и приводить внешний вид к современным канонам красоты. Но это всё очень субъективно. И я понятия не имею, чем именно для вас внешний вид qTox'а более привлекателен. Может цветами? В следующей версии я сделаю возможность выбирать цвета.
                                                  • 0
                                                    Но, может быть вы имеете в виду нечто другое — то что я вношу в tox изменения, которые задействованы только в Isotoxin'е? Но, во первых, эти изменения никак не влияют на работу Isotoxin'а с другими tox-клиентами, т.е. соблюден принцип полной обратной совместимости. Во вторых, кто ж мне позволит внести эти плюшки в основной код протокола? Для этого нужно быть своим в среде разработчиков, а я там никто. Мне так кажется. Может я и ошибаюсь. В любом случае, нужно обосновать эти изменения, чтобы их приняли. А с английским у меня плохо.


                                                    Если плюшки хорошие, то может все же имеет смысл попробовать внести их в toxcore?
                                                    Думаю, у меня с английским получше, могу поспрашивать и помочь оформить. Что там еще есть, кроме неограниченной длины сообщения?

                                                    Можно на d@dvor.me отвечать.
                                                  • +1
                                                    Ну и над внешним видом поработайте — это одна из причин почему я не захотел ставить ваше «чудо» вместо qtox.

                                                    По опыту разработки стрёмных и не нравящихся среднему пользователю софтин, от такого предложения очень трудно отталкиваться.
                                                  • 0
                                                    «Так что я вполне понимаю разработчиков компилятора msvc и их нежелание связываться с динамическими массивами.»
                                                    Это скорее их недоработка, зато другого, не поддерживаемого иными компиляторами, они понапихали и дальше пихают наплевав на все стандарты…
                                                    • 0
                                                      Как мне запустить 2 версии одновременно на одном компьютере?
                                                      • 0
                                                        запускать вторую копию с ключем multi (описание ключей есть тут)
                                                        правда, если вторая копия будет пытаться открывать тот же профиль, то тоже не запустится. Специально делал защиту, иначе можно логически покарраптить профиль
                                                    • 0
                                                      хотелось бы чтобы видео двойным кликом мыши открывалось на весь экран. И чтобы масштабировать было можно…
                                                      В целом очень понравилось.
                                                      • 0
                                                        На весь экран хочу сделать, но перед этим хочу переписать передачу видео. В текущем варианте видео сильно портится на слабых каналах. Я уже писАл об этом.
                                                      • 0
                                                        Интересный проект. С нетерпением буду ждать порта на linux.
                                                        • 0
                                                          Надо бы такой под линукс, и чтобы без скинов со времен винампа, то есть вообще без скинов.

                                                          Сейчас похоже qTox самый толковый клиент, кто-то может оценить?
                                                          • 0
                                                            Спасибо. Буду пользоваться. Небольшой недочет: если окно программы не помещается в экран — например, включена экранная клавиатура — то интерфейс постоянно перерисовывается.

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