subject: Что с станцией lessmore?
12.09.2020 20:55
hugeping (ping,1)
Хотел было забрать блог difrex, но:
====
$ curl https://dynamic.lessmore.pw/idec/u/e/difrex.blog
difrex.blog
error: Internal error
====
--------------------------------------------------------------------------------
subject: Re: Что с станцией lessmore?
13.09.2020 19:26
Difrex (dynamic,1) => ehRLadSELaPO4TbBEkm9
Хм. Это я сломал что-то в базовом протоколе :).
Работает только со смещением сейчас
====
curl https://dynamic.lessmore.pw/idec/u/e/difrex.blog/-250:250
difrex.blog
2fDZ67P8JkchA9Rh4If4
2NszlFTgvhakzz7dIfvc
ML8cpSyzyOKaFA6Lx1NF
8TtPHu5T7oo3GSXdDYc5
U6ZYZxgYz2sq01L96zZz
igt9lCsui5qE9AICtdgP
mTWsJXVOAljita3sgDOK
V0hj3Z0QjFxpluaaiKvI
b91aGfRgRLJWfB1q60bg
pNfzXBddGbSy7AW7slpz
4fmEizz5kjk4UcQf7VIJ
OxdmEiQJIZqrqjCUNp2i
ojRAXNp7wzVIF9GBetZn
z5UV57mUeyhAmFsaMUq0
====
Спасибо, поправлю.
--------------------------------------------------------------------------------
subject: Re: Что с станцией lessmore?
13.09.2020 22:37
Difrex (dynamic,1) => ehRLadSELaPO4TbBEkm9
Fixed
--------------------------------------------------------------------------------
subject: Re: Что с станцией lessmore?
13.09.2020 23:53
hugeping (ping,1) => IxjYsC9rgtEqOZWahnEE
> Fixed
Теперь есть другая проблема. Возможно, с моим фетчером.
В выводе у тебя нет последнего перевода строки. То-есть, на запрос -1:1, к примеру, приходит MsgId без \n. Как к этому относиться? Нужно ли мне переделывать?
--------------------------------------------------------------------------------
subject: Re: Что с станцией lessmore?
14.09.2020 08:54
Difrex (dynamic,1) => rSOQFHsYMr6rh6ORxnNJ
Хм, вот про newline в конце интересно. Это у нас нигде не описано, но и проблем ни у кого не возникало
--------------------------------------------------------------------------------
subject: Re: Что с станцией lessmore?
14.09.2020 09:40
hugeping (ping,1) => 08bZNf7SkmBAoYmsfrM5
> Хм, вот про newline в конце интересно. Это у нас нигде не описано, но и проблем ни у кого не возникало
Нужно решение комитета. )
Мне не сложно подправить, но это именно будет хак. Дополнительный блок условный. Заметил только благодаря адаптивному фетчу, который делает пробы по 1 id. Так бы просто последнее сообщение бы не взял и всё.
--------------------------------------------------------------------------------
subject: Re: Что с станцией lessmore?
14.09.2020 10:57
Difrex (dynamic,1) => 4BK8xzRIsLKmeJDlkYA2
> Мне не сложно подправить, но это именно будет хак. Дополнительный блок условный.
А почему так? Я код не хочу ща читать - лень, но ты разве не разбираешь ответ в слайс? Типа,
====
messages := make(map[string][]string)
echoList := strings.Split(getBody(resp.Body))
var currentEcho string
for i := range echoList {
if echoList[i] == "" {
continue
}
if isEcho(echoList[i]) {
currentEcho = echoList[i]
}
if isMessage(echoList[i]) {
messages[currentEcho] = append(messages[currentEcho], echoList[i])
}
}
====
--------------------------------------------------------------------------------
subject: Re: Что с станцией lessmore?
14.09.2020 12:11
hugeping (ping,1) => 8m8HzQZEvAAIjT4lLBbO
> А почему так? Я код не хочу ща читать - лень, но ты разве не разбираешь ответ в слайс? Типа,
Почему так, вопрос, который я тоже могу задать: "Разве ты не делаешь просто Printf каждого из id? Зачем вырезать последний \n?
Дело в том, что я старался писать строго. Строка с переводом строки - это однозаначность. Например, пустая строка - это тоже пустая строка и \n.
В системе, когда у нас последняя строка не содержит \n, мы не можем отличить ситуацию, прочиталась ли строка целиком?
Например, вот функция, которая используется везде при работе с сетью:
====
func http_req_lines(url string, fn func(string) bool) error {
resp, err := http.Get(url)
if err != nil {
return err
}
defer resp.Body.Close()
reader := bufio.NewReader(resp.Body)
for {
line, err := reader.ReadString('\n')
if err != nil && err != io.EOF {
return err
}
line = strings.TrimSuffix(line, "\n")
if err == io.EOF {
break
}
if !fn(line) {
break
}
}
return nil
}
====
Обрати внимание, что if err === io.EOF стоит ПЕРЕД fn(line).
А вот правка, чтоб сработало с твоей нодой:
====
if err == io.EOF {
if line != "" { /* no eol in last line? broken node? */
fn(line)
}
break
}
====
Если же я перенесу fn(line) перед err == io.EOF, то fn(line) будет вызываться для последнего \n у других нод, которые делают \n в каждой строке.
Я лично считаю, что \n быть должен, но в как бы мы не решили, это должно быть прописано в стандарте, кмк.
--------------------------------------------------------------------------------
subject: Re: Что с станцией lessmore?
14.09.2020 15:29
Difrex (dynamic,1) => oppZDI1KzWYwOOcilznC
Ну, в общем давай подождем остальных, что скажут. По мне так '\n' в конце списка эх необязателен, т.к. не относится к данным.
--------------------------------------------------------------------------------
subject: Re: Что с станцией lessmore?
14.09.2020 15:35
Difrex (dynamic,1) => 1d3OC0QZZmNw8oItZd5d
Т.е. я считаю, что "\n" - это разделитель списка и если в конец вносить его, то получится, что последний элемент списка - это всегда пустая строка.
Но в случае чего, я могу добавить перенос строки.
> В системе, когда у нас последняя строка не содержит \n, мы не можем отличить ситуацию, прочиталась ли строка целиком?
Это справедливо только для имен эх, а вот id сообщения всегда можно понять прочитался ли он полностью.
--------------------------------------------------------------------------------
subject: Re: Что с станцией lessmore?
14.09.2020 16:59
Andrew Lobanov (tavern,1) => 1d3OC0QZZmNw8oItZd5d
Difrex> Ну, в общем давай подождем остальных, что скажут. По мне так '\n' в конце списка эх необязателен, т.к. не относится к данным.
'\n' в конце это однозначное и ожидаемое поведение. Мне кажется, что делать стоит единообразно. У меня даже emacs в файлах в конце '\n' ставит :)
--------------------------------------------------------------------------------
subject: Re: Что с станцией lessmore?
14.09.2020 16:28
hugeping (ping,1) => a5Cd0H913XxNt1LMdW7J
> Т.е. я считаю, что "\n" - это разделитель списка и если в конец вносить его, то получится, что последний элемент списка - это всегда пустая строка.
Мой довод, в основном, будет таким.
В UNIX все текстовые файлы традиционно заканчиваются на \n.
https://stackoverflow.com/questions/729692/why-should-text-files-end-…
Стандарт POSIX определяет строку так:
> 3.206 Line
> A sequence of zero or more non- <newline> characters plus a terminating <newline> character.
Зафиксируем это и не ошибёмся. :)
--------------------------------------------------------------------------------
subject: Re: Что с станцией lessmore?
14.09.2020 17:25
vit01 (mira, 1) => a5Cd0H913XxNt1LMdW7J
Difrex> Т.е. я считаю, что "\n" - это разделитель списка и если в конец вносить его, то получится, что последний элемент списка - это всегда пустая строка.
В стандарте вроде про newline ничего не сказано, поэтому предусматривается, что "\n" - это лишь разделитель списка, и в конце он необязателен
В нодах и клиентах принято использовать логику, по которой принимают и то, и другое. Но, думаю, для лучшей совместимости с unix-утилитами стоит явно закрепить в стандарте, чтобы newline в конце присутствовал
+++ Отправлено через IDEC Mobile
+++ GNU/Linux, Android, physics, MLP:FIM
--------------------------------------------------------------------------------
subject: Re: Что с станцией lessmore?
14.09.2020 21:41
Difrex (dynamic,1) => z7EUlTurdQfIAo8fzzNY
> У меня даже emacs в файлах в конце '\n' ставит :)
У меня тоже. Но это все таки данные не совсем для человека.
Ты же не будешь править тело сообщения поинта если оно пришло без \n в конце, а просто запишешь в базу.
// Newline в конце добавлю, но фетчер у меня умеет и так и так.
--------------------------------------------------------------------------------
subject: Re: Что с станцией lessmore?
14.09.2020 22:21
hugeping (ping,1) => wLrNwpZyWAbhTTBbFY6X
> У меня тоже. Но это все таки данные не совсем для человека.
Ну как, curl можно автоматизировать. Я так и делал, когда переносил данные с ноды, генерировал скриптом запросы, парсил вывод. Удобнее с \n это делать.
> Ты же не будешь править тело сообщения поинта если оно пришло без \n в конце, а просто запишешь в базу.
Лучше я промолчу о том, что я делаю с сообщением поинта, а то вы меня тут заклюёте =)
> // Newline в конце добавлю, но фетчер у меня умеет и так и так.
Угу, отпишись тогда, я от тебя хочу взять fetch difrex.blog (ну и назад забирай тогда её у меня =)
--------------------------------------------------------------------------------
subject: Re: Что с станцией lessmore?
14.09.2020 23:34
hugeping (ping,1) => wLrNwpZyWAbhTTBbFY6X
Сделал исправление тоже, поставил на тебя фетч (blog.difrex). Ожидаю взаимного фетча. ;)
--------------------------------------------------------------------------------
subject: Re: Что с станцией lessmore?
15.09.2020 00:14
Difrex (dynamic,1) => qyfU9AI55OSbu3KQOi3O
Пофиксил, фетчу тебя :)
--------------------------------------------------------------------------------