Miranda NG Official Community Forum

Miranda NG русскоязычный форум => Разработка => Topic started by: Erjo Loksn on 20 10 2019, 18:51:57

Title: YAMN
Post by: Erjo Loksn on 20 10 2019, 18:51:57
Пожалуйста, добавьте в плагин YAMN маленькое, но при этом очень важное улучшение: сделайте так, чтобы этот плагин постоянно не перезаписывал файл с базой писем, даже когда никаких новых писем нет и никакой необходимости в перезаписи нет. Конечно, когда новые письма есть - то было бы тоже неплохо, чтобы плагин не перезаписывал весь файл базы с нуля (ну он стирает файл полностью, а потом записывает его заново), а просто дозаписывал нужную информацию в конец файла. Из-за такого поведения плагина постоянно случаются всевозможные подвисания и сбои, поэтому одно это небольшое улучшение кардинально изменит ценность данного плагина.
Title: Re: YAMN
Post by: ghazan on 21 10 2019, 17:15:03
Erjo Loksn,
можно пару примеров подвисания и сбоев?
Title: Re: YAMN
Post by: Erjo Loksn on 21 10 2019, 23:03:23
В смысле - примеров? Итак, практическое использование плагина: имеем базу писем с трёх разных почтовых ящиков, которая занимает 50 мегабайт. При любой проверке любого из ящиков эта база полностью перезаписывается: то есть старый файл удаляется, а потом записываются 50 мегабайт. Причём так происходит даже тогда, когда в этом нет ну совсем никакого смысла, так как при очередной проверке какого-либо ящика новых писем не оказалось. Это не происходит мгновенно, и пока это происходит, Миранда "залипает" и очень плохо реагирует на нажатие тех или иных кнопок. Если в этот момент Миранду выключить, то файл с базой писем можно вообще потерять (это к вопросу о сбоях), и в этом случае придётся полностью выкачивать базу писем заново из почтовых ящиков, а перед этим - вносить заново в Миранду данные почтовых учётных записей (логины, пароли, адреса серверов). Вот оно всё как-то так, при этом я думаю, что это не является большой проблемой: сделать так, чтобы этот файл не перезаписывался полностью, во всяком случае тогда, когда в этом вообще нет никакой необходимости.
Title: Re: YAMN
Post by: ghazan on 22 10 2019, 18:02:57
В смысле - примеров?
буквально. нужна пара стеков зависания с Process Explorer (если нет студии, разумеется)
https://wiki.miranda-ng.org/index.php?title=Using_Process_Explorer_as_the_debugging_tool
Title: Re: YAMN
Post by: Erjo Loksn on 23 10 2019, 01:05:05
Наверное, я неправильно выразился. "Зависаний" в смысле ситуации, когда программа виснет и больше из этого состояния не выходит (кроме принудительного снятия) у меня не было. Под словом "подвисание" я имел в виду ситуацию, когда программа ощутимо тормозит некоторое время, а потом выходит из этого состояния. Мне не очень понятно, зачем это нужно, особенно в ситуации, когда в реальности перезаписывать базу писем не нужно, так как никаких новых писем нет.
Title: Re: YAMN
Post by: ghazan on 30 01 2020, 11:21:31
Erjo Loksn,
ok, а можно сделать стек во время торможения? хочется понять, чем занимается программа в это время
Title: Re: YAMN
Post by: Erjo Loksn on 01 05 2020, 23:07:26
Ой, ну у меня не получается, чтоб именно вот в этот момент проделать всю эту процедуру. Так зачем же вам это всё нужно? Я же вам сообщаю, что именно происходит: перезаписывается файл yamn-accounts.pop3.1.book , содержащий всю базу писем и настройки аккаунтов. Когда в соответствующих почтовых ящиках много писем - эта база может быть большой. И да, главная проблема даже не в подтормаживании, а в том, что я считаю подобный подход необоснованным изнашиванием жёсткого диска компьютера. Ну зачем с нуля перезаписывать огромную базу, особенно если никаких новых писем нет, и программа просто удаляет старый файл и потом записывает новый, который точно такой же, как старый? Это же вообще ничем обосновать невозможно!
Title: Re: YAMN
Post by: ghazan on 02 05 2020, 17:53:04
Ну зачем с нуля перезаписывать огромную базу, особенно если никаких новых писем нет, и программа просто удаляет старый файл и потом записывает новый, который точно такой же, как старый?
Да потому, что Миранда просто сливает на диск данные из памяти. Кому сейчас придет в голову экономить на записи, если самые чахлые винты пишут по 100 МБ/сек?
Title: Re: YAMN
Post by: Erjo Loksn on 07 05 2020, 17:46:23
То есть такие варианты, что кому-то захочется запускать Миранду со старой флешки и, таким образом, легко и беспроблемно запускать её на самых разных компьютерах, - такие варианты не рассматриваются? И да, почему-то база самой Миранды вовсе не перезаписывается постоянно с нуля без всякой на то причины - это происходит только с базой YAMN, при том что этим YAMN мало кто пользуется. Значит, видимо, всё-таки есть некоторый смысл в экономии на записи и в настоящее время.
Title: Re: YAMN
Post by: Apollo2k4 on 08 05 2020, 07:40:25
Erjo Loksn, реализация базы в YAMN очень старая и лезть туда это как гулять по минному полю, по сути там нужно переписать весь плагин, что с одной стороны может повлечь несовместимость со старым форматом базы, но на это сейчас нет ресурсов.
Title: Re: YAMN
Post by: Erjo Loksn on 08 05 2020, 10:43:50
Я, конечно, не программист, но за свою жизнь разные программы я, тем не менее, писал, потому как было надо. Так вот, с учётом имеющихся у меня общих познаний в программировании я прекрасно понимаю, что сделать так, чтобы база вовсе не перезаписывалась с нуля, а просто дозаписывалась (как это реализовано во всех нормальных современных программах - в том числе и в самой Миранде, в её основной базе) - это, видимо, придётся полностью переписывать код плагина. А вот сделать просто так, чтобы перезапись базы осталась, но хотя бы уж происходила только тогда, когда есть новые сообщения - для этого достаточно в имеющийся код просто добавить в нужное место оператор if с соответствующим условием. И вот просто нужно найти, куда этот оператор добавить.