Вы наверняка слышали о 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/Rotkaermota/Isotoxin
Блог, посвященный проекту: isotoxin-dev.livejournal.com

Комментарии (55)


  1. ploop
    12.01.2016 21:17
    +2

    Как собрать под другие платформы?


    1. Wedmer
      12.01.2016 21:30
      +5

      Добавить в проект код для других платформ)


  1. Kanedias
    12.01.2016 21:40
    +3

    Что всё-таки сподвигло открыть код? Да ещё и под GPLv3?


    1. Ohar
      13.01.2016 13:36

      Для этого должна быть особая веская причина?


      1. gaelpa
        13.01.2016 14:48

        Вроде нет, но если изначально не планировалось, значит были какие-то свои соображения. Поделитесь?


        1. isotoxin
          13.01.2016 16:00
          +3

          Думаю ответ вас разочарует. Просто хотел избежать критики моего стиля программирования. Это ведь мой первый opensource проект, до этого весь мой код был доступен ограниченному кругу лиц. Но потом понял — нечего тут стесняться. Работает? Стабильно работает? Значит всё хорошо. А если что-то не нравится — милости просим всё исправить и сделать еще лучше. На то он и opensource.


          1. Kanedias
            14.01.2016 08:59

            Если руки дойдут, в феврале возьму. На wxWidgets-порт или Qt-обёртку обижаться не будете?


            1. isotoxin
              14.01.2016 17:21

              Нет, не буду. Просто мне кажется, что это излишне. У меня UI движок порождает готовую картинку, которую просто нужно выплюнуть на экран, а с этим, как я понимаю, неплохо справляется голый X11. Впрочем, в вопросах программирования под никсы я полный профан.


              1. Wedmer
                15.01.2016 10:44

                если посмотреть на uTox, то там тоже вроде свои средства отрисовки.


              1. ComodoHacker
                18.01.2016 11:10

                Со своим рендерингом шрифтов вы IMHO переборщили. Выглядит не очень. Лучше использовать какую-нибудь хорошую кроссплатформенную библиотеку, например Cairo.


  1. Scratch
    12.01.2016 21:50

    Профиль в своём формате? Стандартный от токса не подойдет?


    1. isotoxin
      12.01.2016 22:07
      +1

      Профиль в своем формате — sqlite база. Стандартный формат токса не предусматривает возможности хранения истории, а я хотел сделать все в одном файле, т.к. это удобнее. Однако, Isotoxin понимает стандартный профиль. В диалоге добавлении tox соединения, можно выбрать tox-save файл и из него будет импортирован ToxID и список друзей.


  1. coolspot
    12.01.2016 22:12
    +2

    В tox так и не появилась поддержка множества устройств с одним аккаунтом?


    1. Scratch
      12.01.2016 22:17

      Нет, это архитектурная проблема, пока не до неё


  1. Zifix
    12.01.2016 22:19
    +26

    Глупо пренебрегать этим опытом, поэтому разработка была начата на C++ и под Windows. Однако, понимая всю важность поддержки разных платформ, я сразу решил минимизировать зависимость от winapi и других windows-only возможностей. У меня даже рендеринг текста не использует GDI, а написан свой. Для чтения шрифтов используется библиотека FreeType. Весь GUI, все контролы — всё написано с нуля и не привязано к системе.
    С нуля? Но зачем? Почему не тот же Qt?

    P.S. Сказать по правде, интерфейс выглядит плохо, напоминает эксперименты 15 летней давности.


    1. Source
      12.01.2016 22:31
      +3

      Такая же мысль возникла… только про wxWidgets


      1. IRainman
        13.01.2016 00:10

        Поддерживаю на счёт wxWidgets, применить его для GUI, а для всего остального уже есть связка C++ STL + Boost (который фактически расширение STL и с каждым новым стандартом из него многое приходит). Самое главное это то, что wxWidgets выглядит «как родной», по сути им и являясь на всех платформах, чего нельзя сказать про тот же Qt, который на всех платформах выглядит как Qt и идеально вписывается только в KDE окружение.


    1. isotoxin
      12.01.2016 23:07
      +1

      Вы поверите, если я скажу, что люблю программировать? Я ж не ради денег это делаю.
      А что касается внешнего вида — это просто из меня плохой дизайнер — сделал как смог. С технической стороны нет никаких ограничений — все контролы формируются из полноценных RGBA изображений и их внешний вид ограничен только фантазией дизайнера.
      Ну и это вопрос вкуса. Мне, например, интерфейс Windows 10 не нравится. Как раз «напоминает эксперименты 15 летней давности», а это вроде как самое лучшее, что есть.


      1. norguhtar
        13.01.2016 07:48
        +8

        Вам как бы намекают, что хорошим тоном является использование нативных виджетов. Опять же не привязано к системе, но собрать не под windows никак. И смысл?


      1. CaptainFlint
        14.01.2016 00:30
        +2

        Дело не только во внешнем виде. Вот попробовал я прожку и сразу же напоролся на многочисленные недоделки в поведении окон Isotoxin, когда отсутствует стандартная функциональность, а все рефлексы, накопленные годами, оказываются не при делах, и только бессильно материшься, когда очередное привычное действие не срабатывает. Начиная от чисто стилистических несостыковок (типа коряво-размытых шрифтов или неожиданной смены указателя мыши при перетаскивании окна) и заканчивая незакрывающимися по Esc диалогами, неработающим значком системного меню и тому подобными проблемами.

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


    1. Sergey6661313
      12.01.2016 23:08
      +1

      некоторые вещи 15-ти летней давности НАМНОГО лучше современных.


      1. IRainman
        13.01.2016 00:03

        При этом их поддержка для разработчиков на пару порядков сложнее и дороже либо уже вообще закончилась. Т.е. я к тому, что с клиентом для Tox так сейчас не получится ибо, с наибольшей вероятностью, просто приведёт к закапыванию проекта в очень скором времени ибо его поддержка станет причинять БОООЛЬ.


      1. i360u
        13.01.2016 08:37

        А можно пример?


  1. encyclopedist
    12.01.2016 22:24

    А вы не пробовали Clang под Windows? Или Clang/C2?


  1. CaptainFlint
    12.01.2016 22:38
    +9

    Однако, имелось противоречие с лицензией GPL3, под которой предлагалось ядро tox. В чем противоречие? Если коротко, то эта лицензия требует открывать исходный текст программы, которая использует библиотеку под этой лицензией. Очевидное решение этой дилеммы — вынести реализацию протокола в отдельную динамическую библиотеку (dll) и открыть исходники этой dll.
    На самом деле GPL требует, чтобы открывался весь код, который динамически связывается в процессе выполнения (за исключением системных компонентов). Поэтому DLL не помогла бы: exe-файл, который грузит GPL-библиотеку, всё равно пришлось бы открывать. DLL спасла бы положение лишь при лицензии LGPL, которая такое позволяет.

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


  1. Mugik
    13.01.2016 00:59
    -22

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

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

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

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


    1. dzugaru
      13.01.2016 01:18
      +2

      Там же написано что открытый протокол


    1. Klaster
      13.01.2016 08:28
      +12

      Почему мне не подходит скайп

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

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

      На что простите вы предлагаете верить? Или просто априори верить нельзя никому?


    1. Randl
      13.01.2016 12:20
      +6

      Автор вообще-то воспользовался существующим протоколом (Tox), а не изобрел свой.


    1. Ohar
      13.01.2016 13:40
      +3

      Почему мне не подходит скайп.

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

      Скайп делает и то и другое и (потенциально) третье, но вас вроде это вроде как не смущает.


    1. isotoxin
      13.01.2016 15:36
      +3

      Есть люди, в том числе и за рубежом, которые прямо сейчас используют Isotoxin и он их устраивает внешним видом и функциональностью. Ну или они просят меня что-то поменять и я с радостью иду им на встречу. Даже если бы это был всего один человек (кроме меня), я был бы рад.
      Я занимаюсь тем, чем мне нравится заниматься — программированием. Кому-то это приносит пользу и меня это устраивает. Я не зарабатываю на этом денег и видимо поэтому вы решили, что я занимаюсь «непонятно чем». Чем же, по вашему, я должен заниматься?


  1. billyevans
    13.01.2016 01:17

    А что плохого в неконстантности sizeof для динамических массивов?
    Вроде есть alloca() можно ее использовать, но массивы это тоже самое только лучше. Мне вообще не понятно как писать на С без динамических массивов на стеке, либо уродливую alloca() использовать, либо malloc на каждый чих, но тогда можно и на перле/Java и остальном писать.


    1. isotoxin
      13.01.2016 15:48

      Я сужу с точки зрения C++. Возможно для C неконстантный sizeof и не является проблемой.
      Если более предметно — toxcore. Там динамические массивы используются в основном для генерации пакета, который имеет максимальный размер, что то порядка 1.4kb (чуть меньше). И я не вижу причин не создавать на стеке эти самые 1.4 килобайта, и просто использовать из них не всё. Это бы даже быстрее работало, т.к. выделить на стеке константное количество байт всяко быстрее, чем неконстантное.


      1. 0xd34df00d
        13.01.2016 16:00

        Эм, а в чём проблема с точки зрения C++ до тех пор, пока это всё не просачивается в API?


        1. isotoxin
          13.01.2016 16:51

          константным sizeof'ом можно, например, инстанцировать шаблоны. Понятно, что на неконстантный компилятор мог бы и ругнуться, но, мне кажется, сущность языка, которая может быть константной и неконстантной в зависимости от контекста — это плохо. Больше путаницы, сложнее компилятор. Я просто уверен, что C и C++ строится одним и тем же компилятором msvc. И делать поддержку неконстантного sizeof, чтобы уметь собирать код стандарта, которого на самом деле не так и много, при том, что всегда можно выкрутиться при помощи alloca, в ms просто сочли экономически нецелесообразным.


          1. isotoxin
            13.01.2016 17:02

            А вообще, мне кажется, что в архитектуре компилятора msvc есть какая-то беда с константностью. Т.е. им отчего-то трудно обеспечивать поддержку стандарта в этой области. Думаю, не случайно constexpr появился только в 2015-й студии, хотя мог бы еще в 2010-й, когда стали делать поддержку C++11. Но это исключительно мое мнение на основе ощущений.


            1. 0xd34df00d
              13.01.2016 17:06

              Там вообще много проблем, вспомнить хотя бы напрочь сломанный two-phase lookup.


          1. 0xd34df00d
            13.01.2016 17:05

            В 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 просто сочли экономически нецелесообразным.

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


            1. isotoxin
              13.01.2016 17:37

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

              В Isotoxin'е использованы 16 сторонних C библиотек. И только в toxcore используются эти массивы.


  1. mtp
    13.01.2016 01:40
    +1

    Ничего себе! Я поражен. Когда-то, во времена распространенности ICQ, мне очень нравилась Miranda — простой, но чрезвычайно расширяемый клиент. Ваши скрины и описание прямо-таки ностальгию вызвали.

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

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


  1. nikitasius
    13.01.2016 01:55

    qTox у меня падал, даже без активного использования

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

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

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

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

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


    1. ReaM
      18.01.2016 09:09

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

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

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


  1. Vinchi
    13.01.2016 04:23
    +2

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


    1. isotoxin
      13.01.2016 14:21
      +1

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

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


      1. dvor
        13.01.2016 14:48

        Но, может быть вы имеете в виду нечто другое — то что я вношу в tox изменения, которые задействованы только в Isotoxin'е? Но, во первых, эти изменения никак не влияют на работу Isotoxin'а с другими tox-клиентами, т.е. соблюден принцип полной обратной совместимости. Во вторых, кто ж мне позволит внести эти плюшки в основной код протокола? Для этого нужно быть своим в среде разработчиков, а я там никто. Мне так кажется. Может я и ошибаюсь. В любом случае, нужно обосновать эти изменения, чтобы их приняли. А с английским у меня плохо.


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

        Можно на d@dvor.me отвечать.


    1. 0xd34df00d
      13.01.2016 15:12
      +1

      Ну и над внешним видом поработайте — это одна из причин почему я не захотел ставить ваше «чудо» вместо qtox.

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


  1. horlon
    13.01.2016 12:59

    «Так что я вполне понимаю разработчиков компилятора msvc и их нежелание связываться с динамическими массивами.»
    Это скорее их недоработка, зато другого, не поддерживаемого иными компиляторами, они понапихали и дальше пихают наплевав на все стандарты…


  1. Sergey6661313
    13.01.2016 19:10

    Как мне запустить 2 версии одновременно на одном компьютере?


    1. isotoxin
      13.01.2016 20:08

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


      1. Sergey6661313
        13.01.2016 22:09

        Спасибо!


  1. Sergey6661313
    13.01.2016 19:58

    хотелось бы чтобы видео двойным кликом мыши открывалось на весь экран. И чтобы масштабировать было можно…
    В целом очень понравилось.


    1. isotoxin
      13.01.2016 20:13

      На весь экран хочу сделать, но перед этим хочу переписать передачу видео. В текущем варианте видео сильно портится на слабых каналах. Я уже писАл об этом.


  1. mikevmk
    13.01.2016 22:26

    Интересный проект. С нетерпением буду ждать порта на linux.


  1. serf
    14.01.2016 18:53

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

    Сейчас похоже qTox самый толковый клиент, кто-то может оценить?


  1. Kempston
    15.01.2016 04:27

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