Сообщения в Пишу ноду ii/idec на go

Пишу ноду ii/idec на go

Вот и до меня добралось. :)
В общем, пишу ноду на go.
Цели:
- никаких внешних зависимостей;
- экстремальная простота настройки и переноса базы;
- поддержка умного (адаптивного) fetch

На данный момент черновик ноды готов: https://github.com/gl00my/ii-go
Пока нет никакой морды, нет документации. Но решил показать что есть, вдруг кто-то pr накидает. ;)

Как посмотреть:

git clone https://github.com/gl00my/ii-go.git

cd ii-go/ii-tool
go build

./ii-tool fetch http://idec.spline-online.tk (полный фетч в 6 потоков всех эх (нужна поддержка list.txt), запускается только если видит, что база ноды изменилась, по наличию последнего сообщения)

./ii-tool -lim=-32 fetch http://idec.spline-online.tk (адаптивный фетч, спускается вглубь истории постепенно, по мере необходимости)

./ii-tool -lim=32 fetch https://club.syscall.ru (неадаптивный фетч, просто последние 32)

В конце можно указать файл с эхами или - для stdin

cat std.club | ./ii-tool -lim=32 fetch https://club.syscall.ru -

В итоге сольётся db и создастся db.idx - индекс. db - это просто бандл, и только этого файла достаточно, чтоб переносить базу.

можно теперь положить его к ноде:

mv db ../ii-node/
cd ../ii-node
go build
./ii-node - и запустить ноду на 8080

Теперь можно пофетчить с 127.0.0.1:8080 и позамерять скорость.

Ну и посылка сообщений тоже есть, см. -h

Увлекательное занятие, должен я сказать. :)
Peter to All (2020-09-01 21:14:20) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
Это уже третья реализация годы на go будет :).

Опять предлагаю развивать библиотеку вместе: https://github.com/idec-net/go-idec
Difrex to Peter (2020-09-02 08:47:26) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
> Опять предлагаю развивать библиотеку вместе: https://github.com/idec-net/go-idec
Я с неё начал, сейчас фактически моя реализация покрывает твою. Почему я это сделал.

1) Хочу другую лицензию (MIT)
2) Нашел некоторые странности (@repto вместо @Repto, StdBASE64 вместо URLBase64 в get запросе, точно не помню, может ещё что-то по мелочи, типа Subg вместо Subj...
3) Наличие внешних зависимостей (противоречит моей цели)
4) Субъективно, хотелось простоты =)
Peter to Difrex (2020-09-02 17:09:20) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
> 1) Хочу другую лицензию (MIT)
На этом можно было и остановиться на самом деле :D GPL не хочу менять на MIT точно.
> @repto вместо @Repto
Разве у нас в стандарте с большой буквы прописано? В тех же iing и ii-php реализованно с маленькой.
> StdBASE64 вместо URLBase64 в get запросе
Там ескейпится потом. Не помню уже почему именно так сделано было.
> Subg вместо Subj
Это у меня исторически сложилось еще с perl клиента :)
> 3) Наличие внешних зависимостей (противоречит моей цели)
Хм, но там только одна внешняя зависимость и только для тестов - httpmock. Сама либа полностью на стандартной либе написана.
Difrex to Peter (2020-09-02 19:03:17) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
Но вообще ты меня подбил на то, чтобы почитать код go-idec :). Нашел несколько мест, которые можно определенно улучшить. Ну, и коверадж надо бы добить до 99% =)
Difrex to Peter (2020-09-02 19:11:56) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
> Разве у нас в стандарте с большой буквы прописано? В тех же iing и ii-php реализованно с маленькой.
Вот это интересный момент. В стандарте с большой вроде бы написано. Давайте определим, как именно правильно. А то я пока закодил и то и другое.
> Хм, но там только одна внешняя зависимость и только для тестов - httpmock. Сама либа полностью на стандартной либе написана.
Угу, ошибся.
> Там ескейпится потом. Не помню уже почему именно так сделано было.
Да я видел. Я в итоге сделал всё таки urlsafe для get варианта.
Peter to Difrex (2020-09-02 20:46:40) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
>> @repto вместо @Repto
Difrex> Разве у нас в стандарте с большой буквы прописано? В тех же iing и ii-php реализованно с маленькой.
Всегда было с маленькой. Глянул в документацию - оказалось, что Github стал неправильно рендерить Markdown, и там отображается с большой, хотя в исходнике осталось всё как надо
>> StdBASE64 вместо URLBase64 в get запросе
Difrex> Там ескейпится потом. Не помню уже почему именно так сделано было.
Для кодирования самого сообщения вроде как раз urlbase64 и используется. Для хэшей же идёт полная подмена символов, чтобы избежать знаков препинания
+++ Отправлено через IDEC Mobile
+++ GNU/Linux, Android, physics, MLP:FIM
vit01 to Difrex (2020-09-03 01:44:41) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
>>> @repto вместо @Repto
Difrex>> Разве у нас в стандарте с большой буквы прописано? В тех же iing и ii-php реализованно с маленькой.
vit01> Всегда было с маленькой. Глянул в документацию - оказалось, что Github стал неправильно рендерить Markdown, и там отображается с большой, хотя в исходнике осталось всё как надо
Прикольно :)
>>> StdBASE64 вместо URLBase64 в get запросе
Difrex>> Там ескейпится потом. Не помню уже почему именно так сделано было.
vit01> Для кодирования самого сообщения вроде как раз urlbase64 и используется. Для хэшей же идёт полная подмена символов, чтобы избежать знаков препинания
Из документации это не следует никоим образом.
Andrew Lobanov to vit01 (2020-09-03 04:00:29) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
> Глянул в документацию - оказалось, что Github стал неправильно рендерить Markdown, и там отображается с большой, хотя в исходнике осталось всё как надо
Походу дела нужно @ экранировать.
Difrex to vit01 (2020-09-03 16:18:21) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
Что нового и вообще, что в ноде особенного на данный момент.

0) Ни одной внешней зависимости.
1) Вся база - это бандл. Бандлы легко мержить друг с другом, переносить и так далее. Индекс создается автоматически но он не является необходимым, так как при удалении создается заново автоматически.
2) Есть тулза для работы с базами если это понадобится
3) Нода - это фактически форум с видом по тредам
4) Можно редактировать сообщения. При этом ничего не меняется, а просто в базу добавляется новый вариант сообщения с тем же ID. Более актуальной считается всегда более новая версия. Blacklist делается так же.
5) Многопоточный фетчинг
6) Адаптивный фетчинг, это когда пробуем по одному сообщению с каким то шагом, постоянно умножая его на *2 и уходим в глубь до тех пор, пока не найдутся те сообщения, что у нас есть в базе. Например: -16:1 -32:1 -64:1 -128:1 (увидели, что сообщение есть в нашей базе!), Сделали: -128:128
7) Простая web морда, нормально выглядит и на мобильном и в eww
8) Никакого js!
9) Предпросмотр сообщений при редактировании и создании новых
10) Простота разворачивания

Продолжаю работать. То, что хочется сделать.

1) RSS
2) Возможно, активацию юзеров по почте или вручную
3) Карбонка
4) Поиск
5) Избранное

http://club.syscall.ru:8080 - демка для экспериментов,
Peter to Peter (2020-09-05 16:17:32) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
На ii-go завезли котиков!

Не знаю зачем, но теперь в теле сообщения детектятся xpm. Как это выглядит - можно посмотреть на стенде. Можно постить котиков, но помните: лучше всего котика делать с 1 символом на цвет. (64-цветные палитры, например).

Котики тут: http://club.syscall.ru:8080/t5KocgBVCe3m37eRsXjd/1
Peter to Peter (2020-09-06 08:18:42) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
Сырое сообщение, конечно, трэшовенько смотрится =)
Difrex to Peter (2020-09-07 13:37:24) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
Нормально смотрятся только небольшие. 32x32 или 64x64

Вот, например - ещё более менее: http://club.syscall.ru:8080/m/HUwMVOKfbms85NMXfkcy#HUwMVOKfbms85NMXfkcy

Короче, я на этом скоро сделаю аватарки :)
Peter to Difrex (2020-09-07 16:13:18) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
Прикрутил автатарки. Их можно загружать тоже в xpm и хранятся они в points.txt в текстовой форме.

http://club.syscall.ru:8080/IAXXN7yBVRqHzb9iG4Af/1
Peter to Difrex (2020-09-07 17:50:51) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
Я бы предложил это как-то стандартизировать в расширениях.
Можно добавить текстовые теги. Типа,
-*- xpm; -*-
static char * x_xpm[] = {
"32 32 17 1",
" 	c None",
".	c #18293E",
"+	c #112C39",
...
-*- xpm; -*-
Чтоб в клиентах можно было вырезать(или отрисовывать) это, например.
Difrex to Peter (2020-09-08 06:51:03) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
Аватарки - это круть же! Может апи серверный какой придумать в расширениях, чтоб можно было постом аватарку пропихнуть на свою ноду?
-XPOST /x/avatar -d "pauth=authstring&xpm=$(echo "$XPM" | base64)"
Правда это небезопасная штука может быть.
Difrex to Peter (2020-09-08 07:05:46) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
> Я бы предложил это как-то стандартизировать в расширениях.
> Можно добавить текстовые теги. Типа,
Я только за! Сейчас у меня такие _нестандартные_ теги:

1) @base64: имя файла - всё, что после этой строки берется как base64 аттач демка тут: http://club.syscall.ru:8080/jaHRwm0sPfK2w6n8jqhm#jaHRwm0sPfK2w6n8jqhm

2) @spoiler: строка - показать спойлер (В веб версии это реверс-строки и бледный цвет

3) XPM2 и XPM3 как есть воспринимаются, в соответствии с их форматом

@ мне нравятся, так как это аналог @repto:

Peter to Difrex (2020-09-08 07:14:33) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
С аватарками есть проблема. Как именно идентифицировать пользователя?
Сначала, я сделал по адресу. Потом по полю From. Оба решения не ахти.
Мне кажется, пока у нас нет отдельных register серверов, аватарки можно делать только кустарно-индивидуально. А так, мне тоже аватарки нравятся. )))
Peter to Difrex (2020-09-08 08:25:37) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
Новое на стенде: Появились ЛС! Как реализовано?

Эха, которая начинается с . (.private - на сервере). Это такая эха, в которой пользователь видит только свои сообщения, сообщения написанные ему и сообщения адресованные All

Такие эхи отдаются на фетч только по строке: /point/authstr/u/e/список эх

Список эх может включать не только приватные эхи, но и другие

В веб это смотрится довольно гармонично!

Итого, из моих планов -- осталось только шлифануть порефакторить и написать документацию :)

Peter to Peter (2020-09-08 12:09:26) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
В общем, я поднял свою ноду - персональный арт-проект: http://hugeping.tk

Сейчас идёт синк с http://club.syscall.ru , но я буду его закрывать...
Прошу всех, кто с меня фетчит, переходить на http://hugeping.tk и отписаться о возникновении проблем.

Испытываю по живому. :)

За одно сливаю теперь свои материалы с разных источников. Хочу, чтобы хранилось всё в одном месте.
hugeping to Peter (2020-09-08 18:32:26) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
> @base64: имя файла - всё, что после этой строки берется как base64 аттач демка тут
Т.е. этот тег должен находится в конце тела сообщения?
Difrex to Peter (2020-09-09 06:02:33) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
Написал базовую документацию. На этом пока всё, буду потихоньку развивать ноду, но уже не так экстемально. :)

Если кого-то будут интересовать детали, расскажу или дополню доку.

https://github.com/gl00my/ii-go/blob/master/README.md
hugeping to hugeping (2020-09-09 07:24:07) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
> Прошу всех, кто с меня фетчит, переходить на hugeping.tk и отписаться о возникновении проблем.
Фетчу тебя. Пока все идет нормально.
Difrex to hugeping (2020-09-09 11:02:37) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
У тебя почему-то в топиках количество сообщений выводится на одно меньше, чем сообщений в топике на самом деле, т.е. существуют топики с нулем сообщений. Я тебе об этом в чате писал, но ты наверное пропустил, либо это фича, а не баг.
btimofeev to Peter (2020-09-09 19:11:20) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
> У тебя почему-то в топиках количество сообщений выводится на одно меньше, чем сообщений в топике на самом деле
Не заметил в чате.

Я специально вычитаю 1. Как это сделано на punbb форуме. Типа это ответы на пост. Не считая заголовок. 0 - нет ответов.

В принципе, фича, но можно поменять в коде....
hugeping to btimofeev (2020-09-09 19:26:32) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
hugeping> Я специально вычитаю 1. Как это сделано на punbb форуме. Типа это ответы на пост. Не считая заголовок. 0 - нет ответов.
hugeping> В принципе, фича, но можно поменять в коде....
Просто тогда в колонке это надо назвать не посты, а ответы, наверное.
btimofeev to hugeping (2020-09-09 21:05:55) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
> Просто тогда в колонке это надо назвать не посты, а ответы, наверное.
Согласен, завтра сделаю.
hugeping to btimofeev (2020-09-09 21:20:45) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
>> @base64: имя файла - всё, что после этой строки берется как base64 аттач демка тут
> Т.е. этот тег должен находится в конце тела сообщения?
Да. Все что после него это base64. Вообще, может быть стоит сделать по другому. Я сделал как было проще...
hugeping to Difrex (2020-09-09 21:39:46) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
> Фетчу тебя. Пока все идет нормально.
Отлично! :)
hugeping to Difrex (2020-09-09 21:40:26) [ссылка]

Re: Пишу ноду ii/idec на go

Ответ на сообщение
btimofeev> У тебя почему-то в топиках количество сообщений выводится на одно меньше, чем сообщений в топике на самом деле, т.е. существуют топики с нулем сообщений. Я тебе об этом в чате писал, но ты наверное пропустил, либо это фича, а не баг.
Главное, чтобы в x/c правильно отображалось :)
Andrew Lobanov to btimofeev (2020-09-10 03:54:55) [ссылка]