[#]
Разбор idec
ahamai(blackcat, 2) — All
2024-10-30 23:20:59
Складывается впечатление, что idec это пример плохого проектирования. Зачем менять устоявшуюся структуру запроса /u/e если можно этого не делать? Зачем вводить ограничение "количество сообщений в эхе может не совпадать со счётчиком", если можно этого не делать?
Формат /u/e был именно только для списка эх. Зачем добавлять туда что-то ещё? Почему не использовать, например /u/e?s=срез? Это значительно всё упрощает, это можно сувать куда угодно без разбора. А так алгоритм отдачи "всё эха" меняется на "последняя эха может быть не эхой":
ВЕСЬ ЗАПРОС СПИСОК ЭХ
ПОЛУЧИЛИ СПИСКИ
ЕСЛИ ЕСТЬ ЛИМИТ, УСТАНОВИЛИ
становится
ПОЛУЧИЛИ СПИСОК ЭХ
ПРОВЕРИЛИ ПОСЛЕДНЮЮ
ЕСЛИ ЭТО СРЕЗ, ТО РАСПАРСИЛИ СРЕЗ
СОХРАНИЛИ ЛИМИТ
УДАЛИЛИ ПОСЛЕДНЮЮ ЭХУ
ПОЛУЧИЛИ СПИСКИ
УСТАНОВИЛИ ЛИМИТ, ЕСЛИ ЕСТЬ
Команда lim появилась добавлением одного роута и одной строчки кода. Совместима с любым ii, хоть с ii-txt-0.1preprepre.
При этом корёжится список:
http://ii.blcat.ru/u/e/blcat.test/-100:100
ЧТО ТЫ ТАКОЕ? Эха? Нет точки, не эха. MSGID? по логике вроде бы да. У меня софт в расчёте на минималистичность и читаемость кода призван валиться при любых невалидных данных, а не разбираться, что это за ёжик.
Тут же появляется x/features. Это на каждый фетч надо ещё один запрос делать? Это не экономия трафика, это его расход. С какой-нибудь ?s= можно просто гонять url-ы и на любой клиент и на любой сервер, не задумываясь, поймёт ли он. А тут получается, надо прочитать x/features, потом подстроиться под сервера, давать ему срез или не давать. Лишний код, лишний трафик, лишнее переусложнение.
Сами же срезы не решают основной задачи "получить все нужные msgid одним запросом". Тебе нужно или обходить эхи по-очереди (привет, /e, от которого специально уходили для ускорения работы), или получать лишние сообщения. В стандарте не предусмотрено "хочу брать столько сообщений оттуда-то".
Кстати, ?sf потребовал добавления, по-моему, 4х строк кода и изменения одной. И он решает вопрос "получить только нужные msgid из нужных эх одним запросом".
И ещё. Для подсчёта по эхам нужно сделать ещё один запрос, чтобы получить текущее количество сообщений на сервере. Для ?sf этого не нужно, там делается ровно один запрос, а не три. И получает в итоге меньший бандл хэшей. И надёжнее, чем полагаться на количество сообщений.
Куча переусложнений там, где их можно было не делать, и при этом основная цель минимизации трафика до конца не доведена. Это пример плохого проектирования, как по мне.
ps. ?sf и ?h появились раньше, чем был сформирован стандарт iDEC.
[#]
Re: Разбор idec
shaos(spnet, 2) — ahamai
2024-10-31 03:17:33
Не надо драматизировать :)
Индексы тоже пару строк кода добавляют (ну может чуть больше)
Для разнообразия можно множественные "слайсы" тоже сделать, типа
/u/e/echo.1/echo.2/-1:1/echo.3/-100:100/echo.4
будет означать, что echo.1 и echo.2 должны вернуть одно последнее сообщение, echo.3 должно вернуть 100 последних, а echo.4 должно вернуть всё - в этом случае всё будет логично и гибко ;)
[#]
Re: Разбор idec
ahamai(blackcat, 2) — shaos
2024-10-31 03:30:31
кто будет переписывать цезий или фетчеры под замену стандартов? стандарты уже такие, какие получились. у меня вопрос - чому так?
> будет означать, что echo.1 и echo.2 должны вернуть одно последнее сообщение, echo.3 должно вернуть 100 последних, а echo.4 должно вернуть всё - в этом случае всё будет логично и гибко ;)
если менять это, то надо убирать неэхи из стрки для эх. чтобы оно прозрачно накладывалось, а не как у меня пишет -100:100 в файле списка, потому что на это вообще не рассчитвалась. в /u/e должны быть только эхи, это изначальный стандарт
[#]
Re: Разбор idec
shaos(spnet, 2) — ahamai
2024-10-31 03:42:10
> кто будет переписывать цезий или фетчеры под замену стандартов?
никто - сервер может поддерживать и ванильный ii без индексов, и старый IDEC где индексы в конце, и новый многоиндексный вариант - ничто ничему не противоречит!
[#]
Re: Разбор idec
shaos(spnet, 2) — ahamai
2024-10-31 03:46:24
> если менять это, то надо убирать неэхи из стрки для эх
очевидно, что запись [-]N:M не является эхой т.к. там не точка, а двоеточие (и может быть минус вначале)
[#]
Re: Разбор idec
shaos(spnet, 2) — shaos
2024-10-31 04:20:41
> Индексы тоже пару строк кода добавляют (ну может чуть больше)
Ну ок не 2 строки, а 20, но тем не менее :)
elseif ($opts[0] == 'u' and $opts[1] == 'e') {
$work_options=array_slice($opts, 2);
$w_opts_count=count($work_options);
if (
$w_opts_count > 1 and
strstr($work_options[$w_opts_count-1], ":")!==false
) {
$buffer="";
$numbers=explode(":", $work_options[$w_opts_count-1]);
$a=intval($numbers[0]);
$b=intval($numbers[1]);
$echoareas=array_slice($work_options, 0, $w_opts_count-1);
$messages=[];
foreach ($echoareas as $echo) {
$slice = $access->getMsgList($echo, $a, $b);
if (count($slice) > 0) {
$buffer.=$echo."\n".implode("\n", $slice)."\n";
} else {
$buffer.=$echo."\n";
}
}
echo $buffer;
} else {
foreach($work_options as $echo) {
echo $echo."\n".implode("\n", $access->getMsgList($echo))."\n";
}
}
}
Это так в ii-php и я думаю не сильно сложнее будет поддержать "слайсы" в любом месте строки, а не только в конце...
[#]
Re: Разбор idec
shaos(spnet, 2) — shaos
2024-10-31 04:21:32
Блин как эти ==== в этом ii-php работают? Ненавижу регулярные выражения...
[#]
Re: Разбор idec
ahamai(blackcat, 2) — shaos
2024-10-31 04:10:09
Это надо дополнительно разбирать. Когда иожно было бы этого не делать. Это неочевидно, теряется простота. И это порождает артефакты там, где это не поддерживается. Я всё написал выше, это ненужная работа вследствие плохого дизайна. Не надо пихать что то в список эх, это кривит архитектуру.
[#]
Re: Разбор idec
ahamai(blackcat, 2) — shaos
2024-10-31 04:28:59
Можно хоть xml регекспами парсить. Я спрашиваю зачем добавлять в список эх что то ещё, делать проверки которые можно было не делать, терять в прозрачности, если всё это можно было сделать кучей способов, каждый из которых лучше. Какую проблему решили добавив неэховую инфу в /u/e?
[#]
Re: Разбор idec
revoltech(spnet, 4) — ahamai
2024-10-31 05:00:09
ahamai> Складывается впечатление, что idec это пример плохого проектирования.
На это я пытался намекнуть чуть ли не с первого дня появления здесь.
ahamai> MSGID? по логике вроде бы да.
Нет, в msgid тоже двоеточий быть не может. И длина должна быть 20 символов.
Но в целом согласен, текущий формат слайсов какой-то недоработанный. Не то чтобы его сложно реализовать, но задачи экономить трафик при запросе большого количества эх он действительно не решает.
Я ещё могу понять, почему всё через / — это проще парсить, чем отдельно компоненты пути и компоненты HTTP query, особенно учитывая, что от HTTP в общем случае можно (и нужно) отходить. Но я не могу понять, почему бы не сделать в запросе такую же железобетонную структуру ключ-значение, как и в тегах бандла ii/ok/repto/blabla:
/u/e/echo.1/all/echo.2/-3:3/echo.3/-10:10
Этот формат (после удаления первого слэша) однозначно парсится в ключ-значение, на тикле он вообще одним сплитом преобразуется в список, читающийся через dict. И тогда и дополнительных проверок на то, где название эхи, а где диапазон, делать не нужно. Первый ключ — u со значением e, второй ключ — echo.1 со значением all и так далее. А сейчас всё как-то дико контекстозависимо получается, потенциал допустить ошибку куда выше.
[#]
Re: Разбор idec
ahamai(blackcat, 2) — shaos
2024-10-31 04:52:03
У меня вообще в ноде на парсере нет регулярных выражений :)
[#]
Re: Разбор idec
revoltech(spnet, 4) — revoltech
2024-10-31 05:03:54
revoltech> /u/e/echo.1/all/echo.2/-3:3/echo.3/-10:10
И да, в моём варианте вместо диапазона легко подставить msgid, и так же легко на стороне сервера проверить, что именно там стоит. Если диапазон, берём диапазон, если msgid, берём от этого msgid.
[#]
Re: Разбор idec
Andrew Lobanov(tavern,1) — ahamai
2024-10-31 05:21:39
Я честно пытался с тобой обсуждать, но ты, похоже, наркоман. Ты видишь то, чего нет.
За сим считаю, что обсуждение стандарта с тобой можно завершать. Какие счётчики? Какое скачивание лишних сообщений? Если ты не читал то, что я сюда приносил как черновик, то открой хотя бы исходники своего ii-0.3. Почитай на досуге. Сразу увидишь где ты неправ в своих претензиях. Ну а если не увидишь, то обсуждать с тобой дизайн, стандарт и реализацию тем более нет смысла.
[#]
Re: Разбор idec
Andrew Lobanov(tavern,1) — shaos
2024-10-31 05:21:40
shaos> Не надо драматизировать :)
shaos> Индексы тоже пару строк кода добавляют (ну может чуть больше)
shaos> Для разнообразия можно множественные "слайсы" тоже сделать, типа
shaos> /u/e/echo.1/echo.2/-1:1/echo.3/-100:100/echo.4
shaos> будет означать, что echo.1 и echo.2 должны вернуть одно последнее сообщение, echo.3 должно вернуть 100 последних, а echo.4 должно вернуть всё - в этом случае всё будет логично и гибко ;)
И это ломает поддержку стандарта.
[#]
Re: Разбор idec
Andrew Lobanov(tavern,1) — ahamai
2024-10-31 05:21:40
ahamai> кто будет переписывать цезий или фетчеры под замену стандартов? стандарты уже такие, какие получились. у меня вопрос - чому так?
Из стандарта выкидывается то, что по факту никому не нужно. Стандарты полностью совместимы с ii. Так что не понимаю твоего бухчения. Ты можешь взять хоть свой горячо любимый ii-0.3 и работать в сети полноценно.
[#]
Re: Разбор idec
Andrew Lobanov(tavern,1) — shaos
2024-10-31 05:21:40
>> кто будет переписывать цезий или фетчеры под замену стандартов?
shaos> никто - сервер может поддерживать и ванильный ii без индексов, и старый IDEC где индексы в конце, и новый многоиндексный вариант - ничто ничему не противоречит!
Ну просто всё несовместимое снимается с фетча. Зачем нам поломанные узлы?
[#]
Re: Разбор idec
Andrew Lobanov(tavern,1) — shaos
2024-10-31 05:21:40
shaos> Блин как эти ==== в этом ii-php работают?
Это знает только автор. И то вряд ли вспомнит.
shaos> Ненавижу регулярные выражения...
Что может быть проще? Грамматики? Конечные автоматы?
[#]
Re: Разбор idec
revoltech(spnet, 4) — Andrew Lobanov
2024-10-31 05:31:53
AL> И это ломает поддержку стандарта.
Ладно. Ломает, так ломает, будем контекстозависимые парсеры городить. А что насчёт /u/mc?
revoltech> А ещё предлагаю ввести /u/mc, возвращающий число, чтобы клиент знал максимум сообщений, который нода может ему отдать за один GET-запрос /u/m.
Сейчас у меня в фетчере это значение по умолчанию равно 12, пока явно не указано обратное. Было бы неплохо, если бы станция сообщала эту информацию клиенту для оптимального выкачивания мессаг.
[#]
Re: Разбор idec
Andrew Lobanov(tavern,1) — ahamai
2024-10-31 05:36:00
ahamai> Можно хоть xml регекспами парсить. Я спрашиваю зачем добавлять в список эх что то ещё, делать проверки которые можно было не делать, терять в прозрачности, если всё это можно было сделать кучей способов, каждый из которых лучше. Какую проблему решили добавив неэховую инфу в /u/e?
Проблему длинных индексов. Всё максимально прозрачно и понятно. Использование разных по смыслу значений в роутерах это нормальная практика. Посмотри хоть на ii. У тебя /u/e -- часть пути, которая определяет функционал. А параметры у неё что? Тоже часть пути. Зачем ты сделал эту неоднозначность?
[#]
Re: Разбор idec
Andrew Lobanov(tavern,1) — revoltech
2024-10-31 05:36:00
ahamai>> Складывается впечатление, что idec это пример плохого проектирования.
revoltech> На это я пытался намекнуть чуть ли не с первого дня появления здесь.
Но ты всё ещё здесь. В интернете кто-т неправ? Или что?
ahamai>> MSGID? по логике вроде бы да.
revoltech> Нет, в msgid тоже двоеточий быть не может. И длина должна быть 20 символов.
ahamai просто не помнит свой же стандарт. Надеюсь, у него всё хорошо.
revoltech> Но в целом согласен, текущий формат слайсов какой-то недоработанный. Не то чтобы его сложно реализовать, но задачи экономить трафик при запросе большого количества эх он действительно не решает.
Ну да. Вместо выкачивания сотен килобайт мы выкачиваем сотни байт. Никакой экономии!
В общем, обсуждение не имеет смысла. По делу все высказались, рассуждения не по делу не имеют смысла.
[#]
Re: Разбор idec
ahamai(blackcat, 2) — revoltech
2024-10-31 05:03:00
Я про это тоже собирался вечером написать. Это было в bosfor
[#]
Re: Разбор idec
shaos(spnet, 2) — revoltech
2024-10-31 05:40:50
ну IDEC клиентов и серверов наклепали за 10 лет некоторое количество, поэтому и /u/e/echo.1/echo.2/echo.3 и /u/e/echo.1/echo.2/echo.3/-10:10 должны продолжать работать, а я предлагаю раширение, которое исправит последнюю претензию, что слайс распространяется на каждую эху из списка - будет возможность задавать разные слайсы на разные наборы эх в пределах одного запроса - чем плохо то? ;)
[#]
Re: Разбор idec
shaos(spnet, 2) — Andrew Lobanov
2024-10-31 05:42:36
> Это знает только автор. И то вряд ли вспомнит.
Да там всё в коде - читай нехочу, но только без поллитры в этих регекспах не разрбраться (мне):
for ($i = 0; $i < count ($string); ++$i) {
$string[$i] = preg_replace("/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i", "$1http://$2",$string[$i]);
$string[$i] = preg_replace("/([\w]+:\/\/[\w\-?&;%#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</a>",$string[$i]);
$string[$i] = preg_replace("/([\w\-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<a href=\"mailto:$1\">$1</a>",$string[$i]);
$echo_check = preg_replace("/(.*)\<a target=\"_blank\" href=\"ii:\/\/(.+?)\"\>(.+?)\<\/a\>(.*)/", "$2", $string[$i]);
if ($access->checkEcho($echo_check)) {
$string[$i] = preg_replace("/target=\"_blank\" href=\"ii:\/\/(.+?)\"/s", "class=\"iilink\" href=\"?echo=$1\"", $string[$i]);
} else {
$string[$i] = preg_replace("/target=\"_blank\" href=\"ii:\/\/(.+?)\"/s", "class=\"iilink\" href=\"?msgid=$1\"", $string[$i]);
}
if (preg_match("/^====$/", $string[$i])) {
if (!$pre_flag) {
$pre_flag = true;
$string[$i] = preg_replace("/====/", "<pre>====", $string[$i]);
} else {
$pre_flag = false;
$string[$i] = preg_replace("/====/", "====</pre>", $string[$i]);
}
}
if(!$pre_flag && preg_match("/^\s?[a-zA-Zа-яА-Я0-9_\-]{0,20}(>)+.+$/i", $string[$i])) {
$string[$i]="<span class='quote'>".$string[$i]."</span>";
}
if(!$pre_flag) {
$string[$i]=preg_replace("/(^|\s+)(PS|P\.S|ЗЫ|З\.Ы|\/\/|#).+$/i", "<span class='comment'>\\0</span>", $string[$i]);
}
}
if ($pre_flag) $string[count($string) - 1] .= "</pre>";
[#]
Re: Разбор idec
shaos(spnet, 2) — Andrew Lobanov
2024-10-31 05:53:59
> Что может быть проще? Грамматики? Конечные автоматы?
Мне проще на сях - перебираем строку посимвольно и делаём чо хотим...
[#]
Re: Разбор idec
ahamai(blackcat, 2) — shaos
2024-10-31 05:43:47
Кстати, если в срезе будет точка, то старый софт будет считать это не как неккорректный msgid, а как пустую эху и и игнорировать её
[#]
Re: Разбор idec
ahamai(blackcat, 2) — Andrew Lobanov
2024-10-31 07:03:49
> ahamai просто не помнит свой же стандарт. Надеюсь, у него всё хорошо.
В бандле только эхи и msgid. Эхи с точками, всё осталное msgid. Если там что то ещё, падай а не игнорируй
[#]
Re: Разбор idec
Andrew Lobanov(tavern,1) — revoltech
2024-10-31 07:52:20
AL>> И это ломает поддержку стандарта.
revoltech> Ладно. Ломает, так ломает, будем контекстозависимые парсеры городить. А что насчёт /u/mc?
Ненужная вещь.
[#]
Re: Разбор idec
Andrew Lobanov(tavern,1) — shaos
2024-10-31 07:52:20
>> Это знает только автор. И то вряд ли вспомнит.
Да там всё в коде - читай нехочу, но только без поллитры в этих регекспах не разрбраться (мне):
if (preg_match("/^====$/", $string[$i])) {
if (!$pre_flag) {
$pre_flag = true;
$string[$i] = preg_replace("/====/", "<pre>====", $string[$i]);
} else {
$pre_flag = false;
$string[$i] = preg_replace("/====/", "====</pre>", $string[$i]);
}
}
А что тут разбираться? Может, кто-то пихает пробелы после ====? Ну так надо просто им напихать в панамку за это.
[#]
Re: Разбор idec
Andrew Lobanov(tavern,1) — shaos
2024-10-31 07:52:20
>> Что может быть проще? Грамматики? Конечные автоматы?
shaos> Мне проще на сях - перебираем строку посимвольно и делаём чо хотим...
Как только начинаем писать что-то сложнее поиска подстроки, код на Си превращается в чан доширака. Регулярки надо осилить один раз и потом кратко и лаконично описывать желаемое.
[#]
Re: Разбор idec
Andrew Lobanov(tavern,1) — shaos
2024-10-31 07:52:21
shaos> ну IDEC клиентов и серверов наклепали за 10 лет некоторое количество, поэтому и /u/e/echo.1/echo.2/echo.3 и /u/e/echo.1/echo.2/echo.3/-10:10 должны продолжать работать, а я предлагаю раширение, которое исправит последнюю претензию, что слайс распространяется на каждую эху из списка - будет возможность задавать разные слайсы на разные наборы эх в пределах одного запроса - чем плохо то? ;)
Тем, что не решает никаких проблем :)
[#]
Re: Разбор idec
Andrew Lobanov(tavern,1) — ahamai
2024-10-31 07:52:21
ahamai> Кстати, если в срезе будет точка, то старый софт будет считать это не как неккорректный msgid, а как пустую эху и и игнорировать её
Ты хочешь в срезе получить нецелое количество сообщений? Зачем тебе точка в срезе? Типа, -12.5:12.5?
[#]
Re: Разбор idec
shaos(spnet, 2) — Andrew Lobanov
2024-10-31 08:24:28
Ну проблему нелогичности решает, на которую некоторые указывают :)