-
Написал первые две главы Руковдства пользователя. Осталось еще две. Финал все ближе.
-
Анатолий, выложите актуальную базу и версию, я таки решил поставить.
-
Удалено модератором
-
Все актульное выложено
Но обнаружилась одна ошибка, ночь у провайдера сеть падало и сегодня все задержаные сообщения ушли, но текст неверный, пока даже не представлю где искать.
-
> guard_gg (11.11.2006 10:05:02) [2]
> guard_gg (11.11.2006 6:28:00) [0]
> не любят люди чатов Еще как любят, за уши не оттянешь, пойдут на любые нарушения.
-
> Anatoly Podgoretsky (11.11.2006 13:12:04) [4]
Не помогло, надо еще искать.
-
> Anatoly Podgoretsky (11.11.2006 13:14:05) [5]
Проверка опять. "Anatoly Podgoretsky" <=?Utf-8?B?QW5hdG9seSBQb2Rnb3JldHNreQ==?=> сообщил/сообщила в новостях следующее: news:1163197855.5@delphimaster.ru... Anatoly Podgoretsky © (11.11.2006 13:14) [5] > Anatoly Podgoretsky (11.11.2006 13:12:04) [4] Не помогло, надо еще искать.
-
Итак, скачал снова документацию и бинарник, (на базу трафик тратить не хочу, надеюсь старая валидна). Очистил реестр от старых значений. Запускаю. Окна нет.
-
> GuAV (11.11.2006 14:21:06) [6]
Проблему со сбоями у провайдере еще не решил, но решу При работе с сервером NNTP надо учитывать ряд моментов, например особенности клиента и особенности форума, который не является NNTP сервером. Он работает с понятием сообщение (одно) и номерами ответа, ответы не являются самостоятельными сообщениями. Клиент знает какие последнии MsgID он уже спрашивал. Новые могут не появиться в клиенте, если у них ИД меньше. При текущей ситуации, когда меняешь клиентское обеспечение, могу предложить простой трюк, в ОЕ можно сбросить список сообщений и заголовков, тогда они будут поновому загружены с сервера, а так как это персональный сервер, то это будет очень быстро и ничего с Интернета браться не будет. Я при изменениях так и поступаю. В стабильной работе это не потребуется, но будут иногда всплывать старые удаленые из базы или из клиента сообщения, это из-за принципов работы delphimaster.ru Если бы форум работал иначе, например если бы все сообщения имели уникальные возрастающие номера и клиентский скрипт их бы выдавал в порядке возразстания, то работа была бы иная. Сейчас скрипт выдает записи в любом порядке, со старым номером, а где то внутри есть признак измененых сообщений и выдает он только 500 тем. Клиент может обрабатывать только последовательно и учитывать даты ответов. И если форум не выдаст в списке сообщение то его никак не получить, или наоборот выдаст старое сообщение, то его придется получать. Но ничего дважды не будет закачано через Интернет, только действительно новые темы и новые ответы, по крайней мере пока они не будут удалены из базы. По наблюдением некоторые сообщения форум выдает только спустя несколько часов
-
> guav (11.11.2006 15:05:07) [7]
Я проверил валидность, все с ней в порядке, но навсякий случай я заменил на текущую. После того как просмотришь документацию то посмотри реестр, можно просто удалить всю ветку, она воссоздастся в значение по умолчанию. К сожалению за это время все изменялось и исправлялись обшибки и дважды менялся формат базы, добавлялись новые поля, естественно страрые бинарники с новым форматом работать не будут. И если есть записи в реестре, то они тоже будут сохранены. Например если были запрещены и главное окно и иконка, то скачивание новой версии ситуацию не изменит, надо или изменить вручную запись в реестре или удалить весь ключ. Меня сейчас волнует обнаруженая проблема, связаная с падением провайдера, пока причину неверной посылки на форум еще не нашел, но буду эмулировать разрыв канала и трассировать. Эта часть по крайней мере не в потоке, так что оттрасировать будет не тяжело, в отличии от потоков, когда управление в функцию идет попеременно из разных. Насчет беты - нет это не бета, это релиз, просто обнаружился глюк. И после исправления обращаться к коду уже не буду. Все остальное работает стабильно, кроме этой ситуации, которая ранее не встречалась, а этой ночью стала остро.
-
> Anatoly Podgoretsky (11.11.2006 15:08:08) [8]
Использование ручной установки требует ручного задания настроек. Но вся процедура хорошо расписана в документации, главное получить икону или главное окно. Остальное в диалогах.
-
слишком молчаливо он работает, не нашел базу, так молча перезапустился и всё.
> Использование ручной установки требует ручного задания настроек. > Но вся процедура хорошо расписана в документации, главное > получить
Неужели написать default занчение true при чтении из реестра сложнее чем написать лишние буквы в документации ? :-)
-
> Anatoly Podgoretsky (11.11.2006 15:17:10) [10]
> У меня подозрения, что при резком пополнении базы сервер не выдаёт всё что у него в базе есть при требовании заголовков, а только самые старые. Это большая загадка, в каком порядке он выдает, но все что он выдаст, я в обратном порядке добавляю в базу, чтобы хотя бы приблизительно номера шли по возрастанию, но выдает он не по порядку идентификаторов, а как то связано с датой последнего обновления. По этому при резком обновление номера идут не по порядку, а так как выдается только 500 то еще и не все. Так построен клиентский скрипт. Максим сейчас думает над его изменением, а вот систему нумерации изменить нельзя, поскольку это кардинальная вещь. Тоже относится и к анкетам, но тут Максим обещал уйти от дат в идентификаторах. NNTP требует, чтобы каждоее сообщение имело свой номер, и чтобы эти номера шли по возрастанию, не обязательно подряд, но каждый новый номер должен быть больше другого. Клиент запрашивает с помощью команды GROUP список номеров, первый, последний и общее количество сообщений. Далее на основание внутренней информации, какой он последний номер получал с сервера делает уже запрос командой ARTICLE по одному сообщению за раз, при этом он не знает какие номера есть, поэтому он перебирает все номера подряд, от последнего заполненого до последнего на сервере. В режиме опроса заголовков клиент посылает команду XOVER (которая почти не документировано в RFC) запрашивает диапазон заголовков x-y Все заголовки принимаются и помещаются в базу клиенте, затем можно получить сами сообщения. Клиент может запросить только те номера сообщений, о которых сообщил сервер, и если сервер не сообщил, то их получить нельзя. Теперь если вернуться к форуму, если сервер не сообщит, то их точно также получить нельзя или если даже они получены, но номер меньше заполненого в новостном клиенте, то клиент их тоже не спросит. Ну со вторым бороться легко, просто сбросить в клиенте список сообщений и он заново, за несколько секунд перечитает все заголовки, далее можно отсортировать по дате и отметить ненужные как прочитаные, можно и удалить, но они с высокой вероятностью снова всплывут, по неизвестым правилам, поэтому я предпочитаю скрывать, вместо удаления. Это из-за того, что сообщения не имеют своих номеров, согласно требованиям NNTP, номер имеет только тема. Зато мой клиент может резко снизить Интернет трафик, особенно если базой будет пользоваться несколько человек у локальной сети, прямо пропорционально их количеству, но и без этого снижение трафика очень заметное, у меня от 4 до 10 раз, учитывая, что я получаю все форумы, а если ограничиться только тематически, минус Начинающие то трафик мизерный. Меня правда трафик никак не волнует, меня волнует очень быстрая навигация по сообщениям, и она резко возросла, что мне как модератору очень важно, я могу очень быстро реагировать, ранее было так, прочитал сообщение, ответил, ждешь когда оно опубликуется, затем снова открываешь тему и крутишь до последнего прочитанного сообщения - это очень медленно. У меня есть одна задумка по прямому модерированию сразу из новостного клиента, если получится то будет очень удобно и быстро. Но пока этим не еще не занимался. Сейчас насущная проблема разобраться с глюком при падении провайдера.
-
> Anatoly Podgoretsky (11.11.2006 15:41:12) [12]
В общем, дружба NNTP и форума нелегко ладистя... Насчёт трафика - больше экономят клиенты где сообщения грузятся только при открытии тем, а темы - только при открыии конференций. PS: Клиент вообще выводит какие-нибудь сообщения об ошибках или это впринципе невозможно ? "Anatoly Podgoretsky" <=?Utf-8?B?QW5hdG9seSBQb2Rnb3JldHNreQ==?=> сообщил/сообщила в новостях следующее: news:1163197855.12@delphimaster.ru... Anatoly Podgoretsky © (11.11.2006 15:41) [12] > Anatoly Podgoretsky (11.11.2006 15:17:10) [10] > У меня подозрения, что при резком пополнении базы сервер не выдаёт всё что у него в базе есть при требовании заголовков, а только самые старые. Это большая загадка, в каком порядке он выдает, но все что он выдаст, я в обратном порядке добавляю в базу, чтобы хотя бы приблизительно номера шли по возрастанию, но выдает он не по порядку идентификаторов, а как то связано с датой последнего обновления. По этому при резком обновление номера идут не по порядку, а так как выдается только 500 то еще и не все. Так построен клиентский скрипт. Максим сейчас думает над его изменением, а вот систему нумерации изменить нельзя, поскольку это кардинальная вещь. Тоже относится и к анкетам, но тут Максим обещал уйти от дат в идентификаторах. NNTP требует, чтобы каждоее сообщение имело свой номер, и чтобы эти номера шли по возрастанию, не обязательно подряд, но каждый новый номер должен быть больше другого. Клиент запрашивает с помощью команды GROUP список номеров, первый, последний и общее количество сообщений. Далее на основание внутренней информации, какой он последний номер получал с сервера делает уже запрос командой ARTICLE по одному сообщению за раз, при этом он не знает какие номера есть, поэтому он перебирает все номера подряд, от последнего заполненого до последнего на сервере. В режиме опроса заголовков клиент посылает команду XOVER (которая почти не документировано в RFC) запрашивает диапазон заголовков x-y Все заголовки принимаются и помещаются в базу клиенте, затем можно получить сами сообщения. Клиент может запросить только те номера сообщений, о которых сообщил сервер, и если сервер не сообщил, то их получить нельзя. Теперь если вернуться к форуму, если сервер не сообщит, то их точно также получить нельзя или если даже они получены, но номер меньше заполненого в новостном клиенте, то клиент их тоже не спросит. Ну со вторым бороться легко, просто сбросить в клиенте список сообщений и он заново, за несколько секунд перечитает все заголовки, далее можно отсортировать по дате и отметить ненужные как прочитаные, можно и удалить, но они с высокой вероятностью снова всплывут, по неизвестым правилам, поэтому я предпочитаю скрывать, вместо удаления. Это из-за того, что сообщения не имеют своих номеров, согласно требованиям NNTP, номер имеет только тема. Зато мой клиент может резко снизить Интернет трафик, особенно если базой будет пользоваться несколько человек у локальной сети, прямо пропорционально их количеству, но и без этого снижение трафика очень заметное, у меня от 4 до 10 раз, учитывая, что я получаю все форумы, а если ограничиться только тематически, минус Начинающие то трафик мизерный. Меня правда трафик никак не волнует, меня волнует очень быстрая навигация по сообщениям, и она резко возросла, что мне как модератору очень важно, я могу очень быстро реагировать, ранее было так, прочитал сообщение, ответил, ждешь когда оно опубликуется, затем снова открываешь тему и крутишь до последнего прочитанного сообщения - это очень медленно. У меня есть одна задумка по прямому модерированию сразу из новостного клиента, если получится то будет очень удобно и быстро. Но пока этим не еще не занимался. Сейчас насущная проблема разобраться с глюком при падении провайдера.
-
> guav (11.11.2006 15:38:11) [11]Я иногда твои вопросы не могу понять, ну не попадает в контест. Ну это моя личная проблема. Насчет default так и сделано, просто в одно из ранних версий default был неверный Было ShowMainForm := false вместо True, когда я понял из твоих сообщения я исправил и сообщил тебе видимо ты упустил этот ответ. Вот выписка из программы.
if ValueExists('ShowTrayIcon') then
ShowTrayIcon := ReadBool('ShowTrayIcon')
else begin
ShowTrayIcon := True;
end;
if ValueExists('ShowMainForm') then
ShowMainForm := ReadBool('ShowMainForm')
else begin
ShowMainForm := True;
end;
-
>Я иногда твои вопросы не могу понять, ну не >попадает в контест. Ну это моя >личная проблема.
Может быть, я неправильно их формулирую.
Насчет default так и сделано, просто в одно из ранних версий default был неверный Было ShowMainForm := false вместо True, когда я понял из твоих сообщения я исправил и сообщил тебе видимо ты упустил этот ответ. Вот выписка из программы.
if ValueExists('ShowTrayIcon') then ShowTrayIcon := ReadBool('ShowTrayIcon') else begin ShowTrayIcon := True; end; if ValueExists('ShowMainForm') then ShowMainForm := ReadBool('ShowMainForm') else begin ShowMainForm := True; end;
У Вас в программе ошибка. Это таки работает, если нет раздела, но если вообще ключа нет, это не работает. Это вообще не так делается, а так:
// до чтения настроек ShowTrayIcon := True;
// чтение настроек if ValueExists('ShowTrayIcon') then ShowTrayIcon := ReadBool('ShowTrayIcon')
Вот ещё - перестало опять пускать без прокси (не грузится ничего), опять никаких сообщений об ошибке. Партизан, блин.
-
> GuAV (11.11.2006 15:52:13) [13]
Клиенты они разные, для разных целей, иначе бы их столько не было. Мне например надо получать все сообщения, а у кого то, только телефон или кпк Ну если прикинуть, то по темам при правильном алгоритме результаты одинаковые, список тем для всех одинаков, могут различаться алгоритмы, но будем считать, что они у всех одинаковые. К сожалению клиентский скрипт не позволяет это сделать нормально и оптимально, на что опираться то? По темам у всех одинаковые, разница начинается сколько тем и какие ответы считывать, сколько раз это делать, сколько человек могут пользоваться базой. Вот базовые критерии. > PS: Клиент вообще выводит какие-нибудь сообщения об ошибках или это впринципе невозможно ? сервер выдает и я их обрабатываю в полном размере, но выдает он их в виде большой HTML страницы, которую надо разбирать. Клиенту сообщения выдаются при запросе сообщений, а там возможно только 1. сообщение удалено или перемещено При опросе сообщений с форума выдаются только глобальные ошибки, например нет связи. Если сообщение удалено, то сообщение удаляется и из базы, если сообщение перемещено, то оно перемещается из одной таблицы в другую без обращение на форум и если потом в списке сообщений нового форума появится это сообщение, то оно не будет закачиваться с форума, если же сообщение появится раньше, наприме в форуме основное, то его придется закачать два раза, ну не совсем так, только одно сообщение из темы, но придется поскольку при закачке в форум скажем Начинающие еще не известно, что оно перемещено из форума базы. Мы сейчас пытаемся уговорить Максима сделать модераторский скрипт, который можно опросить до закачки сообщений и тогда уже не качать повторно сообщение. Более того при закачке даже в пределах одного форума сначала могут попасться сообщение и только позже запись о перемещение, но это минимизируется в определенных пределах. Тоже и на веб, что бы узнать что сообщение перемещено надо его предварительно открыть, потом прочитать что увы его уже нет. Точно также я читаю тему, а потом бах, а она уже перенесена, а трафик то потрачен, когда я войду в сообщение в новом форуме я опять загружу его повторно. Так вот NNTP минимизирует эти потери, второй раз, кроме особых случаев, сообщение качаться не будет. <=?Utf-8?B?QW5hdG9seSBQb2Rnb3JldHNreQ==?=> Вот это не лечится, это новостной клиет посылает в таком виде, но если сделать по инструкции, чтобы подпись начиналась с двух символов тире в отдельной строке, то удалять это не надо, программа сама удалит по линии отрыва. Уж тяжело отвечать на кучу сразу в одном сообщении и тебе будет тяжело читать, лучше короткими сообщения. но я ка понял, ты просто перенес сюда для обсуждения. Я здесь прервусь, что бы не смешивать в одном месте разные вещи и продолжу в другом ответе. Поскольку это подразумевает дисскуссии и будет тяжело обсуждать Последнее, сейчас в ответе вся длинная цитата и она будет отрезана автоматом при постинге, это то чего нет в других новостных клиентах и на большинстве серверов, удалять приходится ручками
-
> guav (11.11.2006 16:12:15) [15]Ошибки нет, это масло маслянное, ты делаешь значение по умолчанию несколькими строками выше, а я в момент получения. Результат абслютно одинаковый. Настройки считываются в самом начале программы, в датамодуле, еще до показа и до выполнения других вещей, поэтому результат одинаков, кроме количества машинных операций, у меня меньше, значение присваивается только один раз, а не дважды, но это так между делом, тут нет предмета для их экономии. Насчет ключа надо проверить код, что у меня там стоит true или false. Что бы правильно работаль надо True Вот что там стоит
with TRegistry.Create do
try
OpenKey(RegBase, True);
if ValueExists('DBName') then
-
> [17] Anatoly Podgoretsky © (11.11.06 16:30)
я не знаю что там стоит, но при отсутствии ключа AP\APC там прописывается False. ошибка в программе.
-
> [18] guav © (11.11.06 16:31)
При наличии ключа, но отсутствии значения там прописывается True, как и надо.
-
> guav (11.11.2006 16:12:15) [15]
C прокси у тебя постоянные проблемы. Работа с прокси сделано просто, если параметры заполнены, то они присваиваются соответствующим свойствам TWSocket никаких действий по работе с прокси не делается, сообственно присваивается во всех случаев, без анализа.
-
> guav (11.11.2006 16:31:18) [18]Хорошо, добавил еще контрольный выстрел. При разрушении датамодуля дополнительный вызов
procedure TDM.DataModuleDestroy(Sender: TObject);
begin
SaveConfigToRegistry;
end;
-
> guav (11.11.2006 16:32:19) [19]
Ты пиши свои замечания, я прислушиваюсь и применяю их. Это не в холостую.
-
> Anatoly Podgoretsky (11.11.2006 16:41:22) [22]
> [22] Anatoly Podgoretsky © (11.11.06 16:41)
А толку, уже сейчас видно, что даже когда сеpвер будет полностью отлажен, некоторые проблемы не могут быть разрешены. Похоже что идеально может работать только клиент, который ничего не делает, т.е. не преобразует информацию в другую форму (это DMClient и MF).
> C прокси у тебя постоянные проблемы.
У меня проблемы не с прокси а с нормальным доступом без прокси, мне вообще прокси не нужны.
-
> [23] GuAV © (11.11.06 17:02)
ну вот. формат хтмл сам прописывается, при этом текстовая версия кодируется в QP и строки сильно короткими получаются :-( с "нативными" ньюзгрупами - ни какое сравнение.
может стоит попробовать текстовый формат (убрать форматирование, зато лучше совместимость будет).
-
> guav (11.11.2006 17:09:24) [24]
text/html и другие форматы не используются, только text/plain Форматирования также нет, все форматирует человек и новостной клиент, с моей стороны только добавляется ссылка на цитату. И сделано также сохранение пустых строк, сервер их режет. Кетмар подсказал как сделать. Я тоже удивляюсь, почему у тебя короткие строки, возможно в настройках клиента указана маленькая величина, для ОЕ это "Автоматический перенос текста на ### знаков при переносе", в документации данный факт отмечен. Некоторые характеристики HTML используются и в текстовой части сообщения. Желательно клиента настроить одинаково для текстовых и HTML сообщений.
-
> guav (11.11.2006 16:32:19) [19]
Я прислушался к твоей рекомендации, не в чистом виде, не в моем виде, а просто сделал процедуру инициализации глобальных переменных самой первой строчкой в программе, а из процедуры чтения из реестра убрал. Так более управляемая программа получилась. В чтение из реестра оставил только проверку на наличие параметра. Кроме того прошелся по всей программе и удалил где еще остались конструкции if KeyExist и заменил на абсолютное OpenKey('', True) если где то и оставались не созданые ключи, то теперь они будут создавать в обязательном порядке без анализа.
Весь текст одна строка! Посылаю в Base64
-
> Anatoly Podgoretsky (11.11.2006 20:41:26) [26]
Вот это уже base64, тут много буков, но я всё же надеюсь, что обойдёмся без переносов. Кстати, как насчёт совместимости base64 с другими NNTP ? И как сделать чтобы в ответе на сообщение, которое в формате HTML, всё равно был использован текстовый формат ? "Anatoly Podgoretsky" <=?Utf-8?B?QW5hdG9seSBQb2Rnb3JldHNreQ==?=> сообщил/сообщила в новостях следующее: news:1163197855.26@delphimaster.ru... Anatoly Podgoretsky © (11.11.2006 20:41) [26] > guav (11.11.2006 16:32:19) [19]
Я прислушался к твоей рекомендации, не в чистом виде, не в моем виде, а просто сделал процедуру инициализации глобальных переменных самой первой строчкой в программе, а из процедуры чтения из реестра убрал. Так более управляемая программа получилась. В чтение из реестра оставил только проверку на наличие параметра. Кроме того прошелся по всей программе и удалил где еще остались конструкции if KeyExist и заменил на абсолютное OpenKey('', True) если где то и оставались не созданые ключи, то теперь они будут создавать в обязательном порядке без анализа.
Весь текст одна строка! Посылаю в Base64 яяяя5мm=ЄняM4яM5э5Ѕ9oэОиM?
-
> GuAV (11.11.2006 21:46:27) [27]
"яяяя5мm=ЄняM4яM5э5 Ѕ9oэОиM?" Я не знаю откуда это, могу предъявить сообщение из ОЕ, но оно большоеяяяя5мm=ЄняM4яM4чэ5Ѕ9Џхozр]?
-
> [28] GuAV © (11.11.06 21:56)
вот это не очень большое, привожу From: "guav" <noemail@nowhere.bv>
Newsgroups: Magazine
References: <1163197855.@delphimaster.ru> <1163197855.27@delphimaster.ru>
Subject: Re: APC
Date: Sat, 11 Nov 2006 20:58:14 +0200
Lines: 26
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_000_0009_01C705D4.1C2968F0"
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.2869
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2962
This is a multi-part message in MIME format.
------=_NextPart_000_0009_01C705D4.1C2968F0
Content-Type: text/plain;
charset="windows-1251"
Content-Transfer-Encoding: base64
Iv 7O7j8yDv8OXk+v/i6PL8IPHu7uH55e3o5SDo5yDOxSwg7e4g7u3uIOHu6/z47uU=
------=_NextPart_000_0009_01C705D4.1C2968F0
Content-Type: text/html;
charset="windows-1251"
Content-Transfer-Encoding: base64
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv
L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MSI+DQo8TUVUQSBjb250ZW50PSJNU0hU
TUwgNi4wMC4yOTAwLjI5NjMiIG5hbWU9R0VORVJBVE9SPg0KPFNUWUxFPjwvU1RZTEU+DQo8L0hF
QUQ+DQo8Qk9EWSBiZ0NvbG9yPSNmZmZmZmY+DQo8RElWPiL D2/9D84B6E0/IjwvRElWPg0KPERJVj7fIO3lIOft4P4g7vLq8+TgIP3y7iwg7O7j8yDv8OXk+v/i
6PL8IPHu7uH55e3o5SDo5yDOxSwg7e4g7u3uIA0K4e7r/Pju5TwvRElWPjwvQk9EWT48L0hUTUw+
DQo=
------=_NextPart_000_0009_01C705D4.1C2968F0--
-
"яяяя5мm=ЄняM4яM4чэ5 Ѕ9Џх ozр]?" Ошибка ясна. Декодируется: Iv 7O7j8yDv8OXk+v/i6PL8IPHu7uH55e3o5SDo5yDOxSwg7e4g7u3uIOHu6/z47uU=
------=_NextPart_000_0009_01C705D4.1C2968F0 , тода как должно Iv 7O7j8yDv8OXk+v/i6PL8IPHu7uH55e3o5SDo5yDOxSwg7e4g7u3uIOHu6/z47uU=
-
> GuAV (11.11.2006 21:46:27) [27]
Это уже ошибка Outlook Express, в списке сообщений показывает правильно, а при ответе забывает раскодировать, но если ты про мой клиент, то это абсолютно не мешает, если подпись сделана по правилам, сморти ранее про два тире. Работа в этом случае простая нажимает ответить, набиваем текст, нажимаем послать. Ничего удалять не надо.
Насчет совместимости с другими NNTP это очень сложный вопрос, каждый сам по себе, обязаны следовать стандарту, но так не всегда. Если про клиентов, то их еще больше (некоторые ничего кроме простого текста не понимают). Но мой сервер принимает во многих форматах и его задача преобразовать в plain text 1251 и поместить это в поля веб формы для публикации, и для него не требуется ни переводить в текстовый, не требуется устанавливать особую кодировку, без разницы какая упаковка, все сожрет. Поэтому и пришлось потратить столько времени, чуть более месяца и половина срока ушла на это. Потому что сервер и первая команда HELP заработали спустя два часа после скачивания компонента. Команда POST это особая команда - если остальным достаточно одного обработчика, то данной их потребовалось 11. Она очень разнообразна по форматам, при том в одном сообщение и даже в одной строке могут быть разные форматы, например в заголовке From. У меня осталось еще одна проблема, которую не решить, по стандарту пробел должен преобразовывать или в +, или %20, или в =20 - но Микрософт почему то решила преобразовывать в символ подчеркивания и теперь их не различить.
По поводу длин строк, я не имел в виду это "яяяя5мm=ЄняM4яM5э5 Ѕ9oэОиM?", как раз с этим полный порядок, я имел ввиду реальные строки сообщения, например предыдущий абзац это одна строка, но она будет разбита на множество, кроме случая с Base64 - это ограничение стандарта, который требует/рекомендует разбивать строки примерно по 72 символа, поскольку не все сервера умеют работать, к Base64 это не относится, поскольку текст кодируется, потом передается строками по 72 символа, на приеме раскодируется и объединяется. В случае простого текста это не так, и в случае с QP тоже, там свои ошибки.
Мой сервер написан по RFC это было настольной книгой.
-
> GuAV (11.11.2006 21:56:28) [28]
Я ничего не могу сказать вне контекста и без знания клиента и его особенностей, я хорошо изучил повадки OE за последнии 10 лет и то не все удается сделать, но это похоже на UTF-8
-
> [31] Anatoly Podgoretsky © (11.11.06 22:53)
"яяяя5мm=ЄняM4яM4чэ5 Ѕ9Џх ozр]?" - это IMO Ваша ошибка. по [29] видно, что сообщение закодировано правильно, в [30] я даже показал откуда оно взялось. Ещё раз: Взяли то, что надо: Iv 7O7j8yDv8OXk+v/i6PL8IPHu7uH55e3o5SDo5yDOxSwg7e4g7u3uIOHu6/z47uU=
Это раскодируется как "яяяя5мm=ЄняM4яM5э5 Ѕ9oэОиM?"
Я не знаю откуда это, могу предъявить сообщение из ОЕ, но оно большое Взяли то, что надо и ещё лишнее захватили: Iv 7O7j8yDv8OXk+v/i6PL8IPHu7uH55e3o5SDo5yDOxSwg7e4g7u3uIOHu6/z47uU=
------=_NextPart_000_0009_01C705D4.1C2968F0 Это раскодируется как "яяяя5мm=ЄняM4яM5э5 Ѕ9oэОиM?"
Я не знаю откуда это, могу предъявить сообщение из ОЕ, но оно большоеяяяя5мm=ЄняM4яM4чэ5 Ѕ9Џх ozр]?
-
> guav (11.11.2006 22:00:29) [29]
From: "guav" <noemail@nowhere.bv> Newsgroups: Magazine References: <1163197855.@delphimaster.ru> <1163197855.27@delphimaster.ru> Subject: Re: APC Date: Sat, 11 Nov 2006 20:58:14 +0200 Lines: 26 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_0009_01C705D4.1C2968F0" X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.2869 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2962
This is a multi-part message in MIME format.
------=_NextPart_000_0009_01C705D4.1C2968F0 Content-Type: text/plain; charset="windows-1251" Content-Transfer-Encoding: base64
Iv////817G09qu3/TTT/TTUD/TUgvTkPb/0PzgHoTT8iDQrfIO3lIOft4P4g7vLq8+TgIP3y7iwg 7O7j8yDv8OXk+v/i6PL8IPHu7uH55e3o5SDo5yDOxSwg7e4g7u3uIOHu6/z47uU=
Будет использована только эта часть, здесь текст в Base64 он будет раскодирован, остальные части, включая первую псевдо часть будут игнорированы. После раскодирования будет проверено на линию отреза (два отдельно стоящих тире) и отброшено все дальше начиная с них. Поскольку кодировка 1251 то перекодировать не потребутся.
Из заголовков будут использованы From: и поскольку noemail то емайл не будет публиковать на форуме, от слова "guav" будут отрезаны двойные кавычки и оставшее будет вставлено в поле Логин (но поскольку у тебя есть анкета), то эта информация использоваться не будет, а будет использоваться информация AUTHINFO Включи в настройках показ Before process request и показ информационных сообщений, тогда увидишь это в логе
Заголовок Newsgroups: будет использован для определения в какую группу посылать ответ/сообщение
References: будет использовано по назначению для ссылки
Subject: ну тут все в порядке, тоже потребовал усилий из-за своей многообразности
boundary= будет использовано для определения границ частей
Content-Type: text/plain; charset="windows-1251" Content-Transfer-Encoding: base64
Эти заголовки будут использованы при приеме части, для перекодировки и распаковки. Содержимое данной части будет использовано для публикации на форуме.
Большего по этому образцу сказать нельзя, но он и так законченый.
-
> [32] Anatoly Podgoretsky © (11.11.06 22:55)
Это ОЕ. Ошибка в АРС. Он неверно выделяет из "multi-part message" часть text/plain. Программеров убеждать сложнее, чем пользователей :-) > Iv////817G09qu3/TTT/TTUD/TUgvTkPb/0PzgHoTT8iDQrfIO3lIOft4P4g7vLq8+TgIP3y7 > iwg > 7O7j8yDv8OXk+v/i6PL8IPHu7uH55e3o5SDo5yDOxSwg7e4g7u3uIOHu6/z47uU= > > Будет использована только эта часть, здесь текст в Base64 > он будет раскодирован, остальные части, включая первую псевдо > часть будут игнорированы.
Если бы так. Использована эта часть (выделено Ж): ------=_NextPart_000_0009_01C705D4.1C2968F0
Content-Type: text/plain;
charset="windows-1251"
Content-Transfer-Encoding: base64
Iv 7O7j8yDv8OXk+v/i6PL8IPHu7uH55e3o5SDo5yDOxSwg7e4g7u3uIOHu6/z47uU=
------=_NextPart_000_0009_01C705D4.1C2968F0
Content-Type: text/html;
charset="windows-1251"
-
> guav (11.11.2006 22:28:30) [30]
Не очень понял, они одинаковые у тебя, но могу предположить из предыдущего сообщения, что здесь кодировка UTF-8 тогда как в заголовках сообщения указано 1251
-
> [36] Anatoly Podgoretsky © (11.11.06 23:09)
АРС. Захватывает. ------=_NextPart_000_0009_01C705D4.1C2968F0 . При. Декодировании. UTF8 нет.
-
воспроизведите сами - напишите в формате ХТМЛ без границы подписи --
-
> guav (11.11.2006 23:01:33) [33]
Если хочешь, то можешь сохранить сообщение из папки Отосланные как *.nws и послать мне на адрес apc@podgoretsky.com я посмотрю, может чего и увижу
Но они же у тебя одинаковые
Iv////817G09qu3/TTT/TTUD/TUgvTkPb/0PzgHoTT8iDQrfIO3lIOft4P4g7vLq8+TgIP3y7iwg 7O7j8yDv8OXk+v/i6PL8IPHu7uH55e3o5SDo5yDOxSwg7e4g7u3uIOHu6/z47uU=
Это раскодируется как "яяяя5мm=ЄняM4яM5э5 Ѕ9oэОиM?" Я не знаю откуда это, могу предъявить сообщение из ОЕ, но оно большое
Взяли то, что надо и ещё лишнее захватили: Iv////817G09qu3/TTT/TTUD/TUgvTkPb/0PzgHoTT8iDQrfIO3lIOft4P4g7vLq8+TgIP3y7iwg 7O7j8yDv8OXk+v/i6PL8IPHu7uH55e3o5SDo5yDOxSwg7e4g7u3uIOHu6/z47uU=
-
-
> [39] Anatoly Podgoretsky © (11.11.06 23:14)
ну да, клиент ещё и искажает сообщение 33, отсюда и непонимание. смотрите на [33] из клиента и через веб.
-
> guav (11.11.2006 23:09:35) [35]
> Программеров убеждать сложнее, чем пользователей :-)
Да не тяжело, но им нужны факты, предмет для иследования. Пока я не вижу ничего плохого в приведеном, части разделяются или по пустой строке, для Base64 или по boundary Внутри части, каждая строка декодируется независимо, и склеивается с предыдущими. Возможно то сообщение о котором говоришь, относится к периоду отладки, когда я отлавливал ночную ошибку, причину я нашел, это была моя причина и отловить ее не легко, для этого надо чтобы провайдер упал или работа в автономном режиме и потом груповая отсылка, причина связана с неверной начальной инициализацие, не учел, что в случае групповой отсылки, сообщения отсылаются в одном соединение и отловить было тяжело, а исправить легко, при получение команды POST включил переинициализацию членов класса, они в данном случае действовали как глобальные переменные.
Разумеется мог всплыть и другие ошибки, но за последнии две недели они почти не всплывали, только при введение новых свойств в первые часы. Уровень ошибок пониже, чем у многих МС продуктов этого уровня, а они годами отлаживали, а у меня весь проект был сделан за месяц и то лишь потому, что я слишком многого от него захочел, рядовой стандартный сервер было бы быстрее написать, но я то для себя писал, мне надо повышать производительность, кроме того я люблю NNTP даже больше чем почтовые рассылки. Но если бы не модерирование, то наверно не взялся бы за него, поскольку сложность хорошо представлял.
Кстати все мои сообщения сейчас идут в Base64, 7 бит и в кодировке 1251, но я долго поработал и с другими форматата, ну и поругал разработчиков, нагородили они с форматами, так еще и не следуют ему, смотри сообщение про подчеркивания и до сих пор не могу понять зачем им нужна псевдо часть, которая выпадает из общего правила. Тоже пришлось повозиться, что бы правильно разбивать на части.
-
> guav (11.11.2006 23:12:38) [38]
Понимаешь я не могу тебя понять, смысл от меня ускользает, может пришлешь сохраненое сообщение. Что значит без границы, без линии отреза, но так я вижу в приведеном образце и пустую строку и идентификатор начала следующей части.
Мне же не воспроизвести ситуацию. Ну вот попробую без линии отреза, но это же по понятиям мусор, я его должен убрать руками при отсылке сообщения
With best regards, Anatoly Podgoretsky
"guav" <=?Utf-8?B?Z3Vhdg==?=> сообщил/сообщила в новостях следующее: news:1163197855.38@delphimaster.ru... guav © (11.11.2006 23:12) [38] воспроизведите сами - напишите в формате ХТМЛ без границы подписи -- яяяя5мm=ЄняM4я@ьлэ5Ѕ9_ъїw?
-
Ну ответил без линии отреза, вижу что ожидалось, мусор от ОЕ, но именно в том виде, в котором я отправил.
-
> [42] Anatoly Podgoretsky © (11.11.06 23:29)
сообщение прямо из этой ветки, версия сегодняшняя.
> части разделяются или по пустой строке, для Base64 или по > boundary
вот в том и проблема, что не по пустой строке а по boundary, boundary оказывается включённой в часть.
> но за последнии две недели они почти не всплывали,
у Вас есть подпись отделённая == или -- не помню как там, вот и не всплывала ошибка. она есть.
-
> With best regards, > Anatoly Podgoretsky > > "guav" <=?Utf-8?B?Z3Vhdg==?=> сообщил/сообщила в новостях > следующее: news:1163197855.38@delphimaster.ru... > guav © (11.11.2006 23:12) [38] > воспроизведите сами - напишите в формате ХТМЛ без границы > подписи -- > яяяя5мm=ЄняM4я@ьлэ5 Ѕ9_ъїw?
выделенное жирным - не мусор от ОЕ, а мусор от АРС.
-
> guav (11.11.2006 23:21:41) [41]
Я уже посмотрел и ответил.
Посмотрю при первой возможности, но это не приоритетно пока.
Кстати у меня настроено отвечать в формате исходного письма, а это всегда html для форума Тут еще проблема, одновременно отвечаю, смотрю содержимое, думаю, пишу ответы сюда и в другие места и все это по сути в режиме чата. Нужна пауза для отдыха.
-
> guav (11.11.2006 23:43:46) [46]
яяяя5мm=ЄняM4яM4зэ5Ѕ9Џьуџ-?
-
> guav (11.11.2006 23:37:45) [45]
Письмо получил, канал работает, но сейчас я могу воспроизвести уже и без него. Как сказал - этой проблемой займусь, ее вроде не должно быть, но может что и испортил при последних переделках. Только это не сейчас.
Строка разрыва два тире в отдельной строки, начинаться должны с первой позиции, если бы не много образие форматов и каждый по своему, то было бы проще, как у меня было в начале на основе StringList, но как только дошел до разделения частей пришлось ломать голову и пришлось отказаться от него. Поскольку уже нельзя было разделять по пустой строке. Мне бы было хорошо, если бы сообщения шли в простом тексте, но не могу же я потребовать подобного, как другие сайты, как например sql.ru они требуют именно в простом тексте, а сами присылают в html да еще и жесткая кодировка, на форуме 1251, в сообщение 1251, а в ответе кои. Одно из условия было гибкость, пользователь должен иметь возножность посылать в любом формате, в любой кодировке, в любой упаковке. Твой случай требует другой работы, сразу после создания Ctrl+A убрать весь мусор и затем ввод ответа, я сделал возможность не делать этого. Но единственно условие, в этом случае в сообщение должна быть линия отреза.
-
на этом я заканчиваю тестирование АРС. Всё же, мне сюда удобнее писать через другой клиент.
-
> guav (11.11.2006 23:43:46) [46]
Э вопрос разделения ответсвенности, это мусор не от ОЕ, это мусор от отправителя, он не убрал, то что в ответ сунул ОЕ. На другом бы форуме в вечный бан отправили бы. Но сказал посмотрю, что можно сделать, а сделать можно, нужно еще больше усложнить разделение частей. Только когда не знаю. Пока рекомендую или убирать мусор руками или сделать линию отрыва
"--" такую только без кавычек и больше ничего в данной строке
-
> GuAV (11.11.2006 23:54:48) [48]
Вот пристал, да понял я, понял :-)
-
> guav (12.11.2006 0:00:50) [50]
Дело вкуса и дело обычное, я лично делал для себя и для тех кому он подойдет, больше ни для кого, остальные наверно тоже.
-
Если не используется строка отреза, то все перед
With best regards, Anatoly Podgoretsky
Должен отрезать сам отправитель, ты же при ответе через веб, подобное не будешь делать? Я могу конечно повозиться и с этим, только надо время найти, но нужно ли? Не проще ли сделать подпись со строкой отреза, в соответсвии с стандартом? Или заставить убирать весь мусор самостоятельно когда отвечает в таком формате, точно такое же происходит и в стандартных группах новостей, еще и хуже. Но теперья понял о чем ты говоришь и могу это воспроизвести, и как только будет лишнее время, то я подумаю об этом, но что с этим сообщением делать, что отрезать я не могу решить, для этого в сообщение нет информации, максимус что смогу сделать, так что бы вот это яяяя5мm=ЄняM4я@ьлэ5 Ѕ9_ъїw? не появлялось с сообщении
-
> максимус что смогу сделать, так что бы вот это > яяяя5мm=ЄняM4я@ьлэ5 Ѕ9_ъїw? > не появлялось с сообщении
А больше ничего и не надо IMHO. Мне, например, привычнее удалить цитирование вручную.
PS: Тут в конференции 3 Mike Kouzmine © установку не осилил. Думаю, что у АРС будет только один пользователь :-)
-
> guav (12.11.2006 0:14:55) [55]
> АРС будет только один пользователь :-)
А мне достаточно :-), тем более, что у меня устанавливается на чистую систему. Вообще то я не могу понять почему, исталятор штатный от 2006 Проверка тоже показывает, что запускается любой и из проекта, и из Program Files, реестр я тоже проверял после инсталяции, база установлена в указаную по умолчанию папку, старая папка и старый рестр были замаскированы до установки. После установки сменил базу на старую, тоже работает, только естественно пришлось сбросить базу сообщений в ОЕ.
-
Оказывается, base64 не везде уважают. Видимо в англоязычных ньюзгрупах не все заботятся о кодировании сообщения, и при этом большинство кодировок работают правильно для латинских символов, но не base64. То я ставил для АРС MIME с base64, таки пришлось вернуть на без MIME.
-
> guav (12.11.2006 14:33:57) [57]
Ну так я писал, что каждая группа может устанавливать свои правила, обычно жесткие. А ОЕ к сожалению не имеет индивидуальных настроек. На запросы разработчикам ОЕ они утверждают, что никто этого не просит. Часто очень трудно найти вариант, который бы удовлетворил всех. Для APC без разницы, поэтому я столько и потратил на него времени, что бы пользователь мог подобное себе позволить, например работу в KOI8 и любой метод упаковки, мне бы было проще если бы можно было использовать только PLAIN без всяких MIME
А когда я начал реализовывать, то ужаснулся насколько же эти методы различаются в реализации и непоследовательности.
|