forum.wfido.ru  

Вернуться   forum.wfido.ru > Прочие эхи > RU.FTN.DEVELOP

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 24.08.2023, 18:02
Nil A
Guest
 
Сообщений: n/a
По умолчанию BaseMsgNum в JAM

Nil A написал(а) к Alexey Fayans в Aug 23 16:40:48 по местному времени:

* Originally in ru.fidonet.today
* Crossposted in ru.ftn.develop
Нello, Alexey!

Thursday August 24 2023 07:47, from Alexey Fayans -> Nil A:

NA>> Притензия в том, что создаётся новый файл с базой, в котором
NA>> нумерация $BaseMsgNum начнётся заново, а это значит всякие
NA>> ништяки, типа SmapiNNTPd поломаются, потому что не смогут сразу
NA>> прыгнуть на нужный номер, потому что базовый номер съехал.
AF> Это проблемы кривого софта типа SmapiNNTPd, а не пуржилки.

Пример, надо тебе написать софт, который сразу может прыгать на 10ое сообщение из JAM базы. После пуржинья, предположим, это сообщение стало 5ым. Линеный поиск сообщения по всей базе не предлагать O(n).

AF> Упаковать JAM базу без сброса BaseMsgNum, наверное, возможно, но это
AF> крайне тупо.

Решение в том, что я хочу прыгнуть не на 10ое сообщение порядковое в базе, а именно 10ое. После пуржинья, например, BaseMsgNum выставился в 5, значит, чтобы добраться до 10го сообщения, мне надо прыгнуть сразу на 5ое порядковое. Это O(1) сложность.

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

Кстати, примерно также работает Usenet. Он тебе говорит от кого сообщения у него в базе есть и до кокого, и сколько их всего, и разница может не быть равна сколько всего, потому что дырки.

AF> Вообще, BaseMsgNum - это рудимент, нормальный софт его не трогает.

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

Best Regards, Nil
--- GoldED+/LNX 1.1.5
Ответить с цитированием
  #2  
Старый 25.08.2023, 09:03
Nil A
Guest
 
Сообщений: n/a
По умолчанию BaseMsgNum в JAM

Nil A написал(а) к Alexey Fayans в Aug 23 07:25:10 по местному времени:

* Originally in ru.fidonet.today
* Crossposted in ru.ftn.develop
Нello, Alexey!

Thursday August 24 2023 21:26, from Alexey Fayans -> Nil A:

AF>>> Это проблемы кривого софта типа SmapiNNTPd, а не пуржилки.
NA>> Пример, надо тебе написать софт, который сразу может прыгать на
NA>> 10ое сообщение из JAM базы. После пуржинья, предположим, это
NA>> сообщение стало 5ым. Линеный поиск сообщения по всей базе не
NA>> предлагать O(n).

AF> Такой софт должен импортировать сообщения в свою базу, предназначенную
AF> для таких специфичных действий.

А вот и нет. Мне, лично, не симпатизируют все те разрабы, что засовывают сообщения в SQL, например. Засунули, свои какие-то там дела порешали, и всё, больше ни с кем не совместимо - пример тому JNode.

А тут, мы берём, чиста по спекам, и всё работает, и со всеми совместимы.
Только не все спеки читают, и пуржиют, как им в голову взбредёт.

AF> Либо строить какой-то свой индекс,

Ага, типа как ластрид файлик, который опциональный, но про него хоть знают все, и его обновляют (иногда).
Так то я и full-text search индекс могу положить рядом, чтобы поиск работал сразу, но это всё НЕСОВМЕСТИМО.

AF> Нельзя расчитывать на то, что у сообщения в базе (Jam, Squish) есть
AF> какой-то перманентный абсолютный номер.

Дану? В Сквише есть этот самый UMSGID (Unique Message Identifier).
В Джаме есть номер сообщения в заголовках, но за константное время туда можно также добраться через BaseMsgNum прям.

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

AF> В теории, можно написать пуржилку, которая будет сохранять номера
AF> писем, оставляя дырки в индексе, но такая пуржилка никому, кроме
AF> держателей странного софта, не нужна, поэтому вряд ли кто-то будет это
AF> делать.

А знаешь сколько у разных утилит есть опций? Например, rsync, скопировать слева на право, казалось бы, а man rsync ты зачитаешься. Я про то, что кто как хочет, так и пуржит, только дайте опции людям. Людям, с потребностями разными. А которые без потребностей, тем и дефолт софйдёт какой-нибудь.

NA>> После пуржинья, например, BaseMsgNum выставился в 5
AF> После пуржинга он должен выставиться в 1 и больше никогда не меняться
AF> вообще.

Ну окей, в мире котором ты живёшь, там BaseMsgNum==1 всегда. Есть вариант, когда он не 1?
Если ты начинаешь новую базу, то он 1, если продолжаешь старую, то уже не 1.

Пойдём от обратного. Если BaseMsgNum есть, и учавствует в арифметике номеров сообщений, значит оно кому-то надо. Иначе бы такое поле не делали.

NA>> В спеке он есть. Нормальный софт всегда высчитывает номер
NA>> сообщения прибавляя BaseMsgNum.

AF> Всё верно, потому что если какой-то древний софт зачем-то меняет
AF> BaseMsgNum, то любой другой софт должен это учитывать. Но при пуржинге
AF> (а точнее при упаковке) оставлять BaseMsgNum отличным от 1 - как
AF> минимум странно.

Как минимум ты не понимешь юзкейс, почему BaseMsgNum может быть не 1.

AF> В спеке указан только один юзкейс для этого - удалить первые N
AF> сообщений в базе, точнее, сделать их "недоступными". Это явно было
AF> придумано до того, как сделали soft delete. Сейчас в этом смысла нет.

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

Про smapi, кстати. Там MsgMsgnToUid/MsgUidToMsgn притащили из Сквиша (Squish MSGAPI, если уж название раскрывать польностью), но когда универсальный API натянули и на Jam (аля-виртуальные функции в C, или как в Джаве говорят - интерфейсы), то эти функции работают не корректно тоже, ещё и зачем-то весь индекс в память вычитывают, ДОСа на них нету.

Best Regards, Nil
--- GoldED+/LNX 1.1.5
Ответить с цитированием
  #3  
Старый 25.08.2023, 11:32
Alexey Fayans
Guest
 
Сообщений: n/a
По умолчанию BaseMsgNum в JAM

Alexey Fayans написал(а) к Nil A в Aug 23 09:15:16 по местному времени:

Нello Nil!

On Fri, 25 Aug 2023 at 07:25 +0300, you wrote to me:

AF>> Такой софт должен импортировать сообщения в свою базу,
AF>> предназначенную для таких специфичных действий.
NA> А вот и нет. Мне, лично, не симпатизируют все те разрабы, что
NA> засовывают сообщения в SQL, например. Засунули, свои какие-то там дела
NA> порешали, и всё, больше ни с кем не совместимо - пример тому JNode.

Значит ты любитель костылестроения.

NA> А тут, мы берём, чиста по спекам, и всё работает, и со всеми
NA> совместимы. Только не все спеки читают, и пуржиют, как им в голову
NA> взбредёт.

Изначально речь шла о сортировке, а не о пуржинге, и как ты себе представляешь сортировку без смены номера сообщения?

Да и спеки никто не нарушает делая renumbering даже без сортировки. При упаковке это нормальная история. А вот оставлять дыры в индексе ради сохраниения номеров сообщений - это костыли, нужные только для работы специфичного софта, который вместо того, чтобы использовать нормальную БД, пытается работать с не предназначенной для таких целей JAM-базой.

AF>> Либо строить какой-то свой индекс,
NA> Ага, типа как ластрид файлик, который опциональный, но про него хоть
NA> знают все, и его обновляют (иногда). Так то я и full-text search
NA> индекс могу положить рядом, чтобы поиск работал сразу, но это всё
NA> НЕСОВМЕСТИМО.

Это и не должно быть совместимо, потому что нужно только одной специфичной софтине. И класть это нужно рядом с этой софтиной, а не с JAM-базой.

AF>> Нельзя расчитывать на то, что у сообщения в базе (Jam, Squish)
AF>> есть какой-то перманентный абсолютный номер.
NA> Дану? В Сквише есть этот самый UMSGID (Unique Message Identifier).

Это не номер сообщения в общепринятом понятии. В JAM прямо в заголовке есть MSGID, OADDRESS и DADDRESS, этого вполне достаточно для использования в качестве уникальной сигнатуры.

NA> В Джаме есть номер сообщения в заголовках, но за константное время
NA> туда можно также добраться через BaseMsgNum прям.

Если быть точным, то BaseMsgNum нужен только для того, чтобы посчитать относительный номер сообщения, зная абсолютный, чтобы через JDX найти позицию заголовка в JНR и сделать туда fseek().

Я ещё раз хочу подчеркнуть, что BaseMsgNum в разговоре о том, что пуржинг (точнее упаковка) может привести к изменению абсолютных номеров сообщений, не играет вообще никакой роли. Это всего лишь часть механики по вычислению относительного номера, зная абсолютный, и наоборот.

NA> Например, хаски под низом использует smapi библиотеку, и там
NA> постоянные вызовы MsgMsgnToUid и MsgUidToMsgn, не знаешь зачем?

Я с этой либой не знаком, поэтому ХЗ.

AF>> В теории, можно написать пуржилку, которая будет сохранять номера
AF>> писем, оставляя дырки в индексе, но такая пуржилка никому, кроме
AF>> держателей странного софта, не нужна, поэтому вряд ли кто-то
AF>> будет это делать.
NA> А знаешь сколько у разных утилит есть опций?

Для опций нужен код. Этот код кто-то должен написать. Я к тому, что никто такой код писать не будет, потому что нафиг это не нужено. Ибо <тут известная цитата про бедуинов>.

NA>>> После пуржинья, например, BaseMsgNum выставился в 5
AF>> После пуржинга он должен выставиться в 1 и больше никогда не
AF>> меняться вообще.
NA> Ну окей, в мире котором ты живёшь, там BaseMsgNum==1 всегда. Есть
NA> вариант, когда он не 1? Если ты начинаешь новую базу, то он 1, если
NA> продолжаешь старую, то уже не 1.

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

NA> Пойдём от обратного. Если BaseMsgNum есть, и учавствует в арифметике
NA> номеров сообщений, значит оно кому-то надо.

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

NA> Иначе бы такое поле не делали.

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

AF>> Всё верно, потому что если какой-то древний софт зачем-то меняет
AF>> BaseMsgNum, то любой другой софт должен это учитывать. Но при
AF>> пуржинге (а точнее при упаковке) оставлять BaseMsgNum отличным от
AF>> 1 - как минимум странно.
NA> Как минимум ты не понимешь юзкейс, почему BaseMsgNum может быть не 1.

Я понимаю, а ты точно понимаешь?


... Music Station BBS | https://bbs.bsrealm.net | telnet://bbs.bsrealm.net
--- GoldED+/W32-MSVC 1.1.5-b20230214
Ответить с цитированием
  #4  
Старый 25.08.2023, 19:03
Nil A
Guest
 
Сообщений: n/a
По умолчанию BaseMsgNum в JAM

Nil A написал(а) к Alexey Fayans в Aug 23 17:28:44 по местному времени:

Нello, Alexey!

Friday August 25 2023 09:15, from Alexey Fayans -> Nil A:

NA>> А вот и нет. Мне, лично, не симпатизируют все те разрабы, что
NA>> засовывают сообщения в SQL, например. Засунули, свои какие-то там
NA>> дела порешали, и всё, больше ни с кем не совместимо - пример тому
NA>> JNode.
AF> Значит ты любитель костылестроения.

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

AF> Изначально речь шла о сортировке, а не о пуржинге, и как ты себе
AF> представляешь сортировку без смены номера сообщения?

А вот, кстати, проблема тоже. Зачем мне каким-то образом сортировать сообщения в базе, т.е. как они там физически последовательно записаны в файле? Меня устраивает физический порядок следования записей, как они туда попадала - это же база просто.
Ааа.. наверное почтовая программа не умеет сортировать так, как мне хотелось бы, а только последовательно из файла базы показывает сообщения, поэтому физческий порядок следования важен? А если я тредами показываю, у меня там сортировка другая, а если я по имени автора, а если у меня скоринг и сортируется хитро? Нет, мы будет сортировать сообщения только тем "кашерным" способом, что нам предложил Стас своим скриптом.

AF> Да и спеки никто не нарушает делая renumbering даже без сортировки.

Нет, не нарушает. Просто он создаёт новую базу. А кто имеет какие-то "индексы" к старой базе, то он страдает.

AF> Если быть точным, то BaseMsgNum нужен только для того, чтобы посчитать
AF> относительный номер сообщения, зная абсолютный, чтобы через JDX найти
AF> позицию заголовка в JНR и сделать туда fseek().

Верно. Можно прыгать на абсолютный номер сообщения за O(1), прям пользуясь спеком, из-коробки. А msdid+oadress+... связка, этож надо сначала построить индекс, хотя дуполовка так и делает.

AF> Я ещё раз хочу подчеркнуть, что BaseMsgNum в разговоре о том, что
AF> пуржинг (точнее упаковка) может привести к изменению абсолютных
AF> номеров сообщений, не играет вообще никакой роли. Это всего лишь часть
AF> механики по вычислению относительного номера, зная абсолютный, и
AF> наоборот.

Верно. Механизм есть, и он должен работать. Вопрос. Откуда у тебя изначально берётся абсолютный номер сообщения, что тебе надо пересчитывать на относительный? Значит тебе абсолютный номер зачем-то таки нужен?

NA>> Например, хаски под низом использует smapi библиотеку, и там
NA>> постоянные вызовы MsgMsgnToUid и MsgUidToMsgn, не знаешь зачем?
AF> Я с этой либой не знаком, поэтому ХЗ.

Ну окей, не пользуешься hpt, но голдедом то пользуешься? Там это в goldlib/gall/gutltag.cpp файле.

// Return the tag number corresponding to a relative tag number.
uint32t GTag::CvtReln(uint _reln)

// Return the relative tag number corresponding to a tag number.
uint GTag::ToReln(uint32t __tagn, int _closest)

NA>> Как минимум ты не понимешь юзкейс, почему BaseMsgNum может быть
NA>> не 1.
AF> Я понимаю, а ты точно понимаешь?

А я вопросом на вопрос ;-) Зачем тебе может потребоваться абсолютный номер? Читай сообщения всю дорогу по относительному номеру, просто как смещение в файле.

Best Regards, Nil
--- GoldED+/LNX 1.1.5
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 11:23. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot