Author Topic: YAMN  (Read 8491 times)

0 Members and 1 Guest are viewing this topic.

Offline Erjo Loksn

  • Newbie
  • *
  • Posts: 23
YAMN
« on: 20 10 2019, 18:51:57 »
Пожалуйста, добавьте в плагин YAMN маленькое, но при этом очень важное улучшение: сделайте так, чтобы этот плагин постоянно не перезаписывал файл с базой писем, даже когда никаких новых писем нет и никакой необходимости в перезаписи нет. Конечно, когда новые письма есть - то было бы тоже неплохо, чтобы плагин не перезаписывал весь файл базы с нуля (ну он стирает файл полностью, а потом записывает его заново), а просто дозаписывал нужную информацию в конец файла. Из-за такого поведения плагина постоянно случаются всевозможные подвисания и сбои, поэтому одно это небольшое улучшение кардинально изменит ценность данного плагина.
 

Offline ghazan

Re: YAMN
« Reply #1 on: 21 10 2019, 17:15:03 »
Erjo Loksn,
можно пару примеров подвисания и сбоев?
 

Offline Erjo Loksn

  • Newbie
  • *
  • Posts: 23
Re: YAMN
« Reply #2 on: 21 10 2019, 23:03:23 »
В смысле - примеров? Итак, практическое использование плагина: имеем базу писем с трёх разных почтовых ящиков, которая занимает 50 мегабайт. При любой проверке любого из ящиков эта база полностью перезаписывается: то есть старый файл удаляется, а потом записываются 50 мегабайт. Причём так происходит даже тогда, когда в этом нет ну совсем никакого смысла, так как при очередной проверке какого-либо ящика новых писем не оказалось. Это не происходит мгновенно, и пока это происходит, Миранда "залипает" и очень плохо реагирует на нажатие тех или иных кнопок. Если в этот момент Миранду выключить, то файл с базой писем можно вообще потерять (это к вопросу о сбоях), и в этом случае придётся полностью выкачивать базу писем заново из почтовых ящиков, а перед этим - вносить заново в Миранду данные почтовых учётных записей (логины, пароли, адреса серверов). Вот оно всё как-то так, при этом я думаю, что это не является большой проблемой: сделать так, чтобы этот файл не перезаписывался полностью, во всяком случае тогда, когда в этом вообще нет никакой необходимости.
« Last Edit: 21 10 2019, 23:07:58 by Erjo Loksn »
 

Offline ghazan

Re: YAMN
« Reply #3 on: 22 10 2019, 18:02:57 »
В смысле - примеров?
буквально. нужна пара стеков зависания с Process Explorer (если нет студии, разумеется)
https://wiki.miranda-ng.org/index.php?title=Using_Process_Explorer_as_the_debugging_tool
 

Offline Erjo Loksn

  • Newbie
  • *
  • Posts: 23
Re: YAMN
« Reply #4 on: 23 10 2019, 01:05:05 »
Наверное, я неправильно выразился. "Зависаний" в смысле ситуации, когда программа виснет и больше из этого состояния не выходит (кроме принудительного снятия) у меня не было. Под словом "подвисание" я имел в виду ситуацию, когда программа ощутимо тормозит некоторое время, а потом выходит из этого состояния. Мне не очень понятно, зачем это нужно, особенно в ситуации, когда в реальности перезаписывать базу писем не нужно, так как никаких новых писем нет.
 

Offline ghazan

Re: YAMN
« Reply #5 on: 30 01 2020, 11:21:31 »
Erjo Loksn,
ok, а можно сделать стек во время торможения? хочется понять, чем занимается программа в это время
 

Offline Erjo Loksn

  • Newbie
  • *
  • Posts: 23
Re: YAMN
« Reply #6 on: 01 05 2020, 23:07:26 »
Ой, ну у меня не получается, чтоб именно вот в этот момент проделать всю эту процедуру. Так зачем же вам это всё нужно? Я же вам сообщаю, что именно происходит: перезаписывается файл yamn-accounts.pop3.1.book , содержащий всю базу писем и настройки аккаунтов. Когда в соответствующих почтовых ящиках много писем - эта база может быть большой. И да, главная проблема даже не в подтормаживании, а в том, что я считаю подобный подход необоснованным изнашиванием жёсткого диска компьютера. Ну зачем с нуля перезаписывать огромную базу, особенно если никаких новых писем нет, и программа просто удаляет старый файл и потом записывает новый, который точно такой же, как старый? Это же вообще ничем обосновать невозможно!
 

Offline ghazan

Re: YAMN
« Reply #7 on: 02 05 2020, 17:53:04 »
Ну зачем с нуля перезаписывать огромную базу, особенно если никаких новых писем нет, и программа просто удаляет старый файл и потом записывает новый, который точно такой же, как старый?
Да потому, что Миранда просто сливает на диск данные из памяти. Кому сейчас придет в голову экономить на записи, если самые чахлые винты пишут по 100 МБ/сек?
 

Offline Erjo Loksn

  • Newbie
  • *
  • Posts: 23
Re: YAMN
« Reply #8 on: 07 05 2020, 17:46:23 »
То есть такие варианты, что кому-то захочется запускать Миранду со старой флешки и, таким образом, легко и беспроблемно запускать её на самых разных компьютерах, - такие варианты не рассматриваются? И да, почему-то база самой Миранды вовсе не перезаписывается постоянно с нуля без всякой на то причины - это происходит только с базой YAMN, при том что этим YAMN мало кто пользуется. Значит, видимо, всё-таки есть некоторый смысл в экономии на записи и в настоящее время.
 

Offline Apollo2k4

Re: YAMN
« Reply #9 on: 08 05 2020, 07:40:25 »
Erjo Loksn, реализация базы в YAMN очень старая и лезть туда это как гулять по минному полю, по сути там нужно переписать весь плагин, что с одной стороны может повлечь несовместимость со старым форматом базы, но на это сейчас нет ресурсов.
«Все глупости совершаются с серьёзным выражением лица» © Кён «Меланхолия Сузумии Харухи»

Правильно заданный вопрос – 50% решения.
Правила постинга
 

Offline Erjo Loksn

  • Newbie
  • *
  • Posts: 23
Re: YAMN
« Reply #10 on: 08 05 2020, 10:43:50 »
Я, конечно, не программист, но за свою жизнь разные программы я, тем не менее, писал, потому как было надо. Так вот, с учётом имеющихся у меня общих познаний в программировании я прекрасно понимаю, что сделать так, чтобы база вовсе не перезаписывалась с нуля, а просто дозаписывалась (как это реализовано во всех нормальных современных программах - в том числе и в самой Миранде, в её основной базе) - это, видимо, придётся полностью переписывать код плагина. А вот сделать просто так, чтобы перезапись базы осталась, но хотя бы уж происходила только тогда, когда есть новые сообщения - для этого достаточно в имеющийся код просто добавить в нужное место оператор if с соответствующим условием. И вот просто нужно найти, куда этот оператор добавить.