Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Плагины/индикаторы для индикации статуса синхронизации с Yandex-disk  (Прочитано 937863 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
А в логах при таких разных запусках какая-то разница есть?

Я у себя попробовал - у меня никакой разницы нет :( но и меню показывается в любом случае.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн jzyken

  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
А в логах при таких разных запусках какая-то разница есть?
Да, разница точно такая, как и между yd-bad и yd-good, когда я тестировал автозапуск.
у меня никакой разницы нет
Вы не забыли остановить сам демон?

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Конечно остановил, понятно что без остановки - будет совсем не то.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Тут стал мне любопытен Go (Golang)... почитал, попробовал - ну довольно интересные концепции... но на чем-то надо было попробовать.....

Взял да и попробовал повторить обертку для yandex-disk, благо на питоне это уже все отлажено было в индикаторе (класс YDDaemon).

(Нажмите, чтобы показать/скрыть)

Собственно немного экспериментов с GO, и я получил все "прелести" реально много-поточного кода: data racing или гонки обновлений.

В Python (cpython) есть GIL - некая такая чаша Грааля - его многие питонисты люто ненавидят, но многие оправдывают. Так вот попробовав реальный много-поточный код я как-то для себя неожиданно перебрался из лагеря первых в лагерь вторых :)....

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

Одним словом я совершенно по-другому сделал эту задачу. Получилась обертка, которая транслирует команды и отлавливает изменения.

Встал вопрос с UI... а вот с десктопным UI в GO - явно не задалось - его чаще используют для постороения web-сервисов, даже web-UI обычно делают с использованим JS тулкитов.... Ну а раз у меня в питоне уже есть UI решил прикрутить его к своей GO-поделке.

И вот тут вылезли новые вопросы... Запустить процесс обертки (демона обертка сама запускать умеет) - проще простого, через stdin ему команды отдать - проще простого. Получать из stdout данные об изменениях статуса..... а вот тут затык. Слушать stdout лучше в отдельном процессе (как я думал) ведь на чтении поток будет блокироваться. Ну так и сделал... и тут у меня GTK начал сыпать корками (критическая ошибка с дампом ядра - code dumped).
Я же как находил в другом потоке данные таки начинал в GTK отрабатывать - а гтк многпоточность вообще не переваривает. Первым делом сделал чередь: поток слушатель кидает в очередь, а очередь по таймауту просматривает главный поток... велосипед с костылями еще тот- но заработало.

Однако костыльный велосипед - это не то что меня устраивает.... полез копать гугл... гуглеж ничего не дал...попробовал тостер - только один человек подписался как тот кто тоже хочет узнать ответ... гуглил дальше - нагуглил решение, сам себе на тостере ответил :).

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

Получился вполне рабочий индикатор, хотя конечно тот еще бутерброд: GUI в питоне командует и слушает обертку на Go, которая "пасет" демона yandex-disk. Зато каждый язык на своем месте, питону с его GIL все-же довольно трудно следить за демоном, который сам о себе ничего не говорит (явным образом), и тут нормальная и быстрая много-поточность Go - выручает. А вот интерфейс на Go - это проблема, зато совсем не проблема для питона.   

Вот теперь думаю...  может запилить и эту версию индикатора на ланчпад? Правда публикация будет чуть сложнее, там ведь и сборка нужна под 64 и 32 бита (питону пофиг - он интерпритируемый, а вот go...)

А может быть уже ну ее эту 32-х битную платформу?

Да размер go-оберточки меня немного смущает... весь пакет индикатора на питионе в развернутом виде ~ 250кб (72.1 KiB в deb пакете), а одна Go-обертка весит 2,7мб (1мб в tar.gz)...

Вообщем вопросов довольно много.... попутно может таки найду на чем GUI сделать в Go... вроде как есть обертки правда полуживые почти все....
« Последнее редактирование: 16 Декабря 2017, 23:18:37 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн jzyken

  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
В версии 1.9.14 теперь и после ручного запуска не появляется окошко с последними синхронизированными.
А по поводу Го версии. Не подкинете пакет х64? Или подскажите, как скомпилировать, а то я не понимат...  :-\

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
У вас в обоих случаях в логах есть запись

Sub-menu 'Last synchronized' has 10 items
Это сообщение выводится тогда, когда успешно отработал весь код по добавлению в подменю последних обновленных 10-и новых строк. Если бы при добавлении были ошибки - были бы еще сообщения... Т.е. глючит сам GTK виджет, который должен все это показывать.

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

Вы пробовали без логгирования запускать - тоже не показывается?
И еще - у вас сам то пункт меню (от которого подменю открывается) активен?



По поводу "GO версии": на go там только прокладка между яндексным демоном и GUI на питоне (использующем все те же виджеты GTK). Т.о. даже замена части кода питона на GO вам врят-ли поможет, но можем попробовать.

Сама версия с вставкой на GO - еще ни разу не продакшен. Это просто мои эксперименты. Но можно конечно попробовать.

Бинарик собрать в GO - элементарно: Нужен установленный GO и просто go build <исходник>. go build сразу все компилирует и собирает исполняемый бинарик под вашу верисю ОС (нужно будет только скопировать в нужное место). Если вам GO ставить влом/неохота - не вопрос могу сам вам бинарик собрать под 64 бита (собственно он у меня так и собран для экспериментов).
 
Но, само собой и питоновскую часть тоже надо новую ставить, ту которая знает как GO-прокладку вызывать и как с ней работать.

И go и python исходники лежат тут. Но там не полноценный пакет, все иконки, переводы, и утилиту настройки этот python код использует от полностью питонного индикатора (того что на ланчпаде). Кроме того там код пока запускает go-прокладку из того-же каталога в котором запущен python код. Т.е. прокладку нужно тоже в /usr/bin положить, но можно это место и поправить, что бы прокладка по PATH находилась.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн jzyken

  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
Ну, собственно, как вы и говорили, го не помогло :) Но на всяк случай прикреплю лог.
И еще - у вас сам то пункт меню (от которого подменю открывается) активен?
Вот так выглядит:

Вы пробовали без логгирования запускать - тоже не показывается?
Ничего не меняется.
« Последнее редактирование: 18 Декабря 2017, 22:14:57 от jzyken »

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Так и тут в логе: Sub-menu 'Last synchronized' has 10 items - т.е. тоже все 10 путей (что из go-обертки были получены) в GTK виджет загрузилось, а то, что он показал - вообще нонсенс! Там активный компонент суб-меню, но нет самого суб-меню. При том, что в коде по пустому суб-меню ставится и головному элементу неактивность. А если он сделан активным, то значит суб-меню было заполнено....
Я, честно говоря, вообще ума не приложу как там оно в GTK так может быть...  :o :idiot2:
Надо будет погуглить на эту тему...

Пользователь добавил сообщение 19 Декабря 2017, 00:03:46:
Вообщем давайте пробовать разные варинаты как можно это суб-меню обработать....

Попытка номер 1 - пробуем чуть поменять порядок действий (шансов что поможет не много, но давайте все перепробуем)
Код как обычно на гитхабе возьмите: https://raw.githubusercontent.com/slytomcat/yandex-disk-indicator/last_not_shown/yandex-disk-indicator.py

PS пробовать давайте на чисто-питоновском коде будем, то место где Go использовался, как и предполагалось к сути проблемы отношения не имеет.
« Последнее редактирование: 19 Декабря 2017, 00:03:46 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн jzyken

  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
Ничего не поменялось.
Появляется подменю только если демон стартует вместе с индикатором.
Не используйте редактирование, так я не получаю уведомления на почту и поэтому отвечаю с такой задержкой. :(

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Попытка 2: пере-создаю подменю вместо того, что бы очищать старое от элементов (перед добавлением новых строк).

Измененный код там же https://raw.githubusercontent.com/slytomcat/yandex-disk-indicator/last_not_shown/yandex-disk-indicator.py
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн jzyken

  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
Всё по-прежнему.
« Последнее редактирование: 20 Декабря 2017, 17:55:49 от jzyken »

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Попытка 3 - заменил серию вызовов прорисовоки отдельных пунктов меню на общий вызов прорисовки всех элементов сразу
Код - там же:
https://raw.githubusercontent.com/slytomcat/yandex-disk-indicator/last_not_shown/yandex-disk-indicator.py
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн jzyken

  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
Что-то всё по-прежнему.

Оффлайн Sly_tom_cat

  • Автор темы
  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Честно говоря, что ещё поменять - идей пока нет.... :(

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

А вот такой вопрос: когда меню не показывается, если добавить/удалить файл/каталог (т.е. вызвать запуск синхронизации) после этого меню покажется?

Пользователь добавил сообщение 20 Декабря 2017, 18:51:15:
Кстати вот ещё одно предложение на попробовать: а если индикатор запускать с задержкой: sleep 1s; yandex-disk-indicator
« Последнее редактирование: 20 Декабря 2017, 18:51:15 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн jzyken

  • Новичок
  • *
  • Сообщений: 34
    • Просмотр профиля
Нет, не показывает. Знаете, может ну его? У меня всё-таки KDE. Может потому, что не родное, вот и не работает. И это совсем не от вас зависит.
С задержкой после чего?

 

Страница сгенерирована за 0.055 секунд. Запросов: 25.