31.05.2017


Один из частых предлагаемых use case'ов DC — это взаимодействие с браузером. Могут ли плагины определять, на какой странице ты находишься, что читаешь или смотришь? Может ли виртуальная тянка понять, что ты смотришь порно, и начать возмущаться или, наоборот, угорать вместе с тобой над мемасиками и смешными картинками? Если коротко: да. Но есть свои нюансы.

Браузер — это закрытая среда со своей системой безопасности. И мы не собираемся его хакать. Единственный законный способ взаимодействия сторонних программ с ним — это расширения. В браузер добавляется специальное расширение, которое может взаимодействовать с ним, какими-то страницами или всем сразу. Как же подружить расширение с DeskChan, как внешней программой? Ответ банален: клиент-серверная архитектура (DC — сервер, расширение — клиент). Для этого браузеры поддерживают стандарт специальных веб-сокетов. Они несколько сложнее обычных сокетов, что приводит к некоторым проблемам, но об этом позже.

Итак, в архиве лежит плагин server, который использует стандартные библиотеки Java, чтобы поднять локальный сервер и слушать порт 6867 (в случае неудачи в качестве запасного он пытается подключиться к 10099) [напиши в комментариях, если догадался, что это за цифры, не глядя на комментарий в коде!]. В качестве сообщения он ожидает JSON-строку, состоящую из объекта с полями msgTag и data (см. документацию по API). Все корректные сообщения он передаёт в систему сообщений. Соответственно, можно посылать из браузерного расширения в DC сообщения с любым тегом, который потом слушать плагином на стороне программы.

В папке плагина test_server есть файл test.py. Это простой скрипт, который можно выполнить с помощью интерпретатора Python и проверить работоспособность серверного плагина с обычными сокетами. Всё, что он делает — это выводит «Hello, world!» с помощью персонажа.

Теперь насчёт веб-сокетов. Они несколько сложнее, потому что следуют чёткой структуре запроса и начинают общение по протоколу HTTP. Всё это на себя берёт плагин-сервер. Куда более важный момент, что для сайтов с защищённым зашифрованным соединением (а их сейчас всё больше и больше) расширения не могут открывать небезопасные сокеты. По крайней мере, в Mozilla Firefox это так. В Chrome на данный момент это разрешается, но велика вероятность, что тоже прикроют. И вот эту проблему я пока не решил, так как надо получать официальный белый сертификат, разбираться в его установке и дистрибуции с плагином и т. д. и т. п.

В папке с тем же test_server есть файл webextension.crx, который является как раз расширением для браузера. По вышеописанной причине, работать он будет только под Google Chrome и, скорее всего, другими браузерами на движке WebKit (например, Opera, «Яндекс.Браузер», Safari). Что он делает? Он смотрит, не зашли ли Вы на страницу к себе или кому-то другому в социальной сети «ВКонтакте» и посылает имя этого человека в DC. Со стороны программы должен работать плагин (plugin.groovy; вообще, просто скиньте папку плагина в plugins и после установки расширения можете удалить всё, кроме этого файла), который обработает эти данные и выведет определённый текст.

Ссылки на скачивание:

31.05.2017


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

Ссылки на скачивание:

Здесь же можно прочитать вводную статью про особенности языка под JVM и всякие расширения и дополнения. Ну и можете читануть просто мои заметки в конце документации DeskChan API.


Обновление от 9 октября 2017 (v0.1.1)

Восстановлена работоспособность с новыми версиями DeskChan (начиная с v0.2.0-r256).

Старые ссылки: ZIP-архив (v0.1.0), SFX-распаковщик (v0.1.0).

30.05.2017


Что должна делать любая уважающая себя секретарша или ассистентка? Конечно же отвечать на звонки и принимать корреспонденцию! Ну первое DeskChan до сих пор не умеет (хотя кому нужны звонки в 2D17?), а вот со вторым, пусть и частично, но пытается справиться этот плагин. vk_message_reader предлагает Вам залогиниться через логин и пароль либо одноразовый токен во «ВКонтакте». В первом случае он также получает токен и хранит только его. Желающие могут сами пролистать код плагина и библиотеки, на которой он базируется, чтобы убедиться, что данные не отсылаются никуда на сторону.

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

Скачать плагин:

Для работы нужен плагин jython_support v1.2.0.

30.05.2017


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

Плагин для изменения размера персонажа:

Плагин для изменения прозрачности персонажа:

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

17.04.2017


scheduler в окне настроек

На данный момент в DC ещё нет нормальной системы ввода и возможности хоть как-либо адекватно взаимодействовать с элементами окна настроек, так что сделать полноценный органайзер пока не представляется возможным. В связи с этим данный плагин можно считать очередной демонстрацией возможностей: он умеет только создавать новые напоминания и выдавать их в указанное время со звуком уведомления или без (причём для каждого события можно задать отдельный звук). Ни удалить, ни отредактировать событие нельзя. Если только через сам файл настроек в формате JSON.

Поскольку плагин написан на Python, то для его запуска требуется наличие плагина jython_support v1.1.1 или новее. Также требуется сборка DC не раньше, чем от 15 апреля (для Linux — от 21 апреля), так как используется компонент DatePicker и манифест (с версии 1.0.1).

Скачать:


Обновление от 21 апреля 2017

Работа над ошибками. Для корректной работы нужна последняя версия jython_support на данный момент — 1.1.1, а для Linux-систем также свежая сборка DC от сегодняшнего числа.

Старые ссылки: ZIPак (v1.0.0), SFX-архив (v1.0.0).


Обновление от 28 мая 2017

Обновлено для работы с новой версии jython_support (1.2.0), исправляющей ряд ошибок. Начальной папкой для выбора звукового файла теперь будет директория со звуками, поставляемыми с плагином.

Старые ссылки: ZIPак (v1.0.1), SFX-архив (v1.0.1).

13.03.2017


Новая штука для DC! В этот раз это плагин, который позволяет другим плагинам быть написанными на языке Python 2.5 2.7 (с v1.0.2). Ну, если быть более точным, называется он Jython и поддерживает не только модули, входящие в стандартную поставку Python-интерпретатора, но и библиотеки Java. Пример простейшего плагина для изучения присутствует в архиве для версий до 1.2.0 или его можно скачать отдельно для поздних версий (test_python).
По сути тут поддерживаются вызовы тех же функций, что и в Groovy-плагине (sendMessage(), addMessageListener(), getPluginDir() и т. д.), но мне пока не удалось элегантно "заинжектить" их в интерпретатор именно как функции*. Поэтому взаимодействие с системой сообщений приложения осуществляется через так называемую шину (bus) — специальный объект, проксирующий вызовы методов в Java-код.

* Сделать плагин наследником Java-класса, как сделано для Groovy-плагинов у меня не получилось. В многообразии Джавовских "коллбэков" я тоже плохо ориентируюсь. Ближе всего к желаемому результату получилось заинжектить Грувовский Closure. Но из Python-кода его приходится вызывать через callOn(), что ещё хуже, чем решение с шиной. Может потом я всё-таки что-нибудь придумаю. Или кто-нибудь подскажет. В любом случае, обратная совместимость с шиной будет сохранена.

Как обычно, два варианта установки, которым надо указать папку с DC.

Для особых "извращенцев", любящих голый код и ручную сборку, ссылка на ветку.

Скачать тестовый плагин-пример (для версий до 1.2.0 он включён в основной архив):

Также не забываем подписываться на мой канал в Telegram! Там новости, связанные с этим проектом, выходят первыми. А ещё я там публикую некоторые эксклюзивные штуки, связанные с мессенджером.


Обновление от 24 марта 2017 (v1.0.1)

  • Восстановлена совместимость с последними версиями приложения, переделанного со Swing на JavaFX;
  • добавлены новые методы для логирования, доступные Groovy-плагинам;
  • добавлен нестандартный метод say(), облегчающий вывод сообщений и автоматически приводящий строку к нужной кодировке (почему-то там опять что-то отвалилось, так что поправлю завтра); качестве параметра принимает любой объект, приводимый к строке (то есть вообще любой, лол);
  • плагин-пример теперь использует стандартный таймер, а не из Swing.

Старые ссылки: ZIPак (v1.0.0), SFX (v1.0.0).


Обновление от 25 марта 2017 (v1.0.2)

  • Исправлена ошибка с кодировками, оставшаяся в предыдущей сборке;
  • зависимость изменена с Jython 2.5.2 на более новый 2.7.1b3, что позволяет пользоваться новыми фишками языка и улучшает совместимость со сторонними модулями;
  • добавлен Python-модуль busproxy, который содержит функции, проксирующие вызовы к шине, и алиасы к ним с именами более близкими стилю языка; просто импортируйте из него все или только нужные функции и больше не пишите постоянно «bus.»!

Кроме того, я придумал, как мне кажется, оптимальный вариант для дистрибуции зависимостей. К JYTHON_PATH теперь отдельно добавляется папка __dependencies__ внутри папки Вашего плагина. Туда я и предлагаю устанавливать все зависимости с помощью следующей команды, чтобы не мешались:

pip install --target=__dependencies__ --ignore-installed <названия пакетов...>

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

Старые ссылки: ZIPак (v1.0.1), SFX (v1.0.1).


Обновление от 17 апреля 2017 (v1.1.0)

  • Плагины теперь компилируются только при загрузке. Это значит, что плагины, занесённые в «чёрный список» больше не будут тратить время на собственную компиляцию. Но при этом при каждой загрузке плагина через load/unload или blacklist/unblacklist он будет компилироваться заново. Также это позволяет ещё немного обособить плагины друг от друга.
  • Методы шины getPluginDirPath(), getDataDirPath() и их псевдонимы в модуле busproxy теперь возвращают строки, а не объект Path из Java-кода. Это позволяет без лишних преобразований пользоваться стандартным Питоновским модулем os.path.
  • Метоод say() вновь поддерживает не только строки, а любые объекты, приводимые к ним. Также теперь ему можно передавать те же дополнительные параметры приоритета, спрайта и таймаута, какие доступны через обычный sendMessage().
  • Добавлен новый метод getId(), который позволяет получить идентификатор плагина (на данный момент, это строка с его именем).
  • Документация обновлена до актуального состояния.
  • В тестовый плагин-пример (test_python) добавлена демонстрация новых возможностей, а текстовое поле в настройках теперь не просто выводит сообщение, а позволяет выполнять и тестировать однострочные команды на языке Python.
  • Добавлен новый модуль pluginutils, предоставляющий классы Settings и Localization, предоставляющие для плагинописателей встроенные средства для сохранения настроек плагина и создания мультиязычных плагинов. Подробнее можно почитать в документации или посмотреть в обновлённом плагине-примере.

Старые ссылки: ZIPак (v1.0.2), SFX (v1.0.2).


Обновление от 21 апреля 2017 (v1.1.1)

Исправлено несколько ошибок, в том числе с кодировками и кроссплатформенностью.

Старые ссылки: ZIPак (v1.1.0), SFX (v1.1.0).


Обновление от 28 мая 2017 (v1.2.0)

Помимо обновления тестового плагина под изменившийся API, а также добавления новой функции get_root_dir_path и мелких изменений вроде логгирования загрузки плагинов (раньше были типы ошибок, которые заканчивались исключением без указания источника; теперь выяснить виновника проще), была почти полностью переработана система работы с шиной. И это очень важный момент, поскольку содержит изменения, не совместимые с предыдущей версией!

В прошлых версиях был серьёзный баг: все загружающиеся плагины, пользующиеся моими модулями, переписывали для этих самых модулей общую ссылку на pluginProxy. Поэтому все плагины выполнялись от ID последнего загруженного плагина. Я придумал, как это исправить, но пришлось полностью изменить логику работы этих самых модулей.
В итоге теперь нельзя импортировать нужные функции из busproxy. Теперь нужно импортировать его и вызвать функцию inject, передав ей ссылку на шину и текущую область видимости. А меняя ссылку на область видимости, можно «инжектить» функции в другие модули. По умолчанию внедряются все функции, но можно ограничить только до перечисленных.
Также обратите внимание, что get_instance у модулей локализации и настроек теперь всегда требует ссылку на шину! Поэтому при необходимости либо передавайте её в другие модули, либо сделайте собственный статический класс-хранитель, который будете инициализировать в начале плагина, а дальше использовать из других модулей (подобный подход использован в плагине vk_message_reader, который будет опубликован на днях).

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

Для работы требуется версия DC не ниже сборки от 30 апреля.

Старые ссылки: ZIPак (v1.1.1), SFX (v1.1.1).


Обновление от 9 сентября 2017 (v1.2.1)

  • Восстановлена работоспособность с новыми версиями DeskChan (начиная с v0.2.0-r256).
  • Библиотека jython-standalone:2.7.1b3 заменена на вышедшую релизную версию 2.7.1.
  • Добавлены манифесты.

Старые ссылки:

  • сам плагин-загрузчик: ZIPак (v1.2.0), SFX (v1.2.0).
  • тестовый плагин: ZIPак (v1.2.0), SFX (v1.2.0).
04.03.2017


В прошлом посте я спойлернул одну вещь. И так уж получилось, что в рамках эксперимента пост про неё я полностью оформил для Telegraph'а. Так что просто прошу проследовать туда и почитать. Может заинтересует кого.

http://telegra.ph/Character-Manager-03-04

Чокола! Ну или DeskChan

Пост по ссылке обновлён 28 мая. Если вкратце, то в версии 1.1.0 добавлены новые действия и условия к ним: возможность погулять с персонажем, погладить, поиграть в какую-нибудь игрушку, посмотреть аниме или послушать музыку. Для работы требуется версия DC не ниже 0.1.7.

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

<<   / 1   >>