Сообщения в Caesium

Caesium

Кстати, загляни в новую версию. Сейчас ей можно прикручивать сторонний фетчер (отправка правда пока не отделена), что упростит использование его с гк11. Опция oldquote даст тебе тот режим цитирования, который ты хочешь. Отправку поправить не проблема. Особенно с учётом того, что скоро и эта опция будет отдельным скриптом.

Может, есть смысл накатать на отправку патч? Я бы тогда его положил прямо в своём репе как сделал с патчами для android.

Просто появились всякие небольшие улучшения (тот же скроллбар) и багфиксы, которые имеет смысл использовать и тебе.
Andrew Lobanov to Roman Yakovlev (2016-04-25 11:25:43) [ссылка]

Re: Caesium

Ответ на сообщение
>Кстати, загляни в новую версию. Сейчас ей можно прикручивать сторонний фетчер (отправка правда пока не отделена), что упростит использование его с гк11. Опция oldquote даст тебе тот режим цитирования, который ты хочешь. Отправку поправить не проблема. Особенно с учётом того, что скоро и эта опция будет отдельным скриптом.
Особенности ГК11 у нас такие:

1. список подаётся в обратном порядке. при этом некоторые особенности запросов от БД (где, как известно, нет "порядка", а есть sort order) иногда дают не тот результат, на который рассчитываешь. Думаю, таких мест ещё вылезет

2. в отличие от некоторых вещей, которые я забыл, есть ещё одна вещь, которую я вообще непонятно, зачем сделал - наличие для отправки отдельного урла и отдельного формата: при том, что отправка сообщений через веб-интерфейс была всегда. А не, я вспомнил, почему - потому что нужен был ещё и метод GET и изначально работал только он (nginx не пропускал сообщения более 8 кб - красота :). Теперь же это не имеет смысла, и отправка клиентом делает точно такой же POST-запрос, что и отправка браузером.

3. Хэш это, собственно хэш логина и пароля - и для авторизации через веб-браузер (как по паре логин-пароль, так и по самому хэшу), так и для клиента (тем более, сейчас разницы между браузером и клиентом в плане отправки нет). Хэш генерируется, и, понятное дело, не сменяется.

4. *Условно тайных* эх быть не может (впрочем, оно и раньше не было особо нужно, если честно). Все эхи, где есть хоть одно сообщение, видны через discover

5. В списке эх больше нет внешнего идентификатора "все сообщения, которые ниже - из этой эхи". Имена эх берутся или из самого сообщения, или с помощью ключа withecho - например:

http://gk11.ru/bb/echo/besedka/withecho/1

Следует заметить, что в отличие от ii, где msgid мог быть прописан в /echo/echo.123, а в самом сообщении в графе "эха" стояло непонятно что (и такое уже встречалось) в ГК11 такое невозможно, ибо никаких списков просто нет - все списки создаются на лету. "Пустых сообщений", которые есть в списке, но нету в базе - понятное дело, тоже быть не может. Поэтому информации из сообщения можно смело доверять - но это несколько меняет логику программы.

6. Ключи appendts и afrom позволяют получать списки "только с даты" (немного меняя сам спискок). В отличие от ii, где было просто поле даты, которое ничего не гарантировало (сообщение могло быть три дня в пути), на каждом сервере хранится отметка, когда сообщение было доставлено на станцию - поэтому такой режим стал возможен. Но пока цепляться за него клиентам смысла не вижу - надо сделать хотя бы базовую реализацию, тем более ключом lim можно (и нужно!) забирать только последние сообщения, поскольку эхи не перекатываются, не надо бедному юзеру скачивать тридцать тысяч сообщений. Сам я в миграции bosfor -> гк11 оставил только 500 последних сообщений с эхи. И, думаю, эта цифра должна быть дефолтом для клиентов, а юзер в настройках уже поменяет.

Но главное, что интересует в этой версии - чтобы >>это>го>ужасно>го>цитирования там не было ни при каких обстоятельствах :) да и вообще, мне кажется, что хватит и одного уровня цитирования (хотя бы опционально, иначе прибегут юзеры, начнут оверквотить, а нам глаза ломай!)
Roman Yakovlev to Andrew Lobanov (2016-04-25 11:39:32) [ссылка]

Re: Caesium

Ответ на сообщение
Это всё интересно, но я не намерен пока поддерживать что-ибо кроме ii/idec. Но моё дело предложить, так сказать. Если ты будешь форкать цезий, не забудь сменить название и оставить ссылку на оригинальный проект.
RY> Но главное, что интересует в этой версии - чтобы >>это>го>ужасно>го>цитирования там не было ни при каких обстоятельствах :)
Я тебе по секрету скажу, что и у нас такого цитирования, которое ты тут изобразил нет. Было несколько сообщений из-за моей криворукости в процессе обкатки, но теперь такого нет.
Andrew Lobanov to Roman Yakovlev (2016-04-25 12:00:49) [ссылка]

Re: Caesium

Ответ на сообщение
>Это всё интересно, но я не намерен пока поддерживать что-ибо кроме ii/idec. Но моё дело предложить, так сказать. Если ты будешь форкать цезий, не забудь сменить название и оставить ссылку на оригинальный проект.
я не знаю, что такое idec. но хочу, чтобы ты по возможности поддерживал перечисленное.

как я понимаю, если просто подменить фетчер - то уже можно что-нибудь фетчить? :) сейчас попробую - можно просто держать разные фетчеры и форкать не придётся. а может, придётся :)
>RY> Но главное, что интересует в этой версии - чтобы >>это>го>ужасно>го>цитирования там не было ни при каких обстоятельствах :)
>Я тебе по секрету скажу, что и у нас такого цитирования, которое ты тут изобразил нет. Было несколько сообщений из-за моей криворукости в процессе обкатки, но теперь такого нет.
любого цитирования, кроме >. кстати, раньше же вроде после > был пробел - куда он делся, надоело вручную их расставлять :)
Roman Yakovlev to Andrew Lobanov (2016-04-25 12:02:41) [ссылка]

Re: Caesium

Ответ на сообщение
Чего-то я покрутил фетчер - кое-как добился, чтобы оно в правильном порядке выдавало сообщения, пока нашёл, куда реверсить :) но всё равно в коде не разобрался. Что за загадочное число 48?

В общем, оно почти работает, но работает как-то странно:
http://gk11.ru/s/fetcher2.py

конфиг - вместо node я взял кейворд gk11, и вот такой конфиг - как дефолтный, только строки поменяны на

gk11 http://gk11.ru/

echo besedka
echo obsd

Оно скачивает по 100 сообщений на эху, как и было задумано. А при следующем фетче скачивает те же самые 100 сообщений для первой эхи из списка! Поменяй эхи местами - и будет снова скачивать в первую из списка. Хотя я сейчас задал ещё эху с 50 сообщениями - и он теперь скачивает 150! 50 из первой и 100 со второй. Ничего не понимаю вообще.
Roman Yakovlev to Andrew Lobanov (2016-04-25 12:38:09) [ссылка]

Re: Caesium

Ответ на сообщение
RY> я не знаю, что такое idec. но хочу, чтобы ты по возможности поддерживал перечисленное.
Вряд ли. Мне пока не интересно распыляться на гк11, так как нет гарантии, что потом ты не изобретёшь ещё что-нить. ii, ulliss, bosfor, gk11. Если бы я всё поддерживал, то только тем бы и занимался, что фетчеры писал =)
RY> как я понимаю, если просто подменить фетчер - то уже можно что-нибудь фетчить? :) сейчас попробую - можно просто держать разные фетчеры и форкать не придётся. а может, придётся :)
Скорее всего не придётся.
> RY>
Странно. То ли регрессия, то ли ты пользуешься старой версией.
RY> любого цитирования, кроме >. кстати, раньше же вроде после > был пробел - куда он делся, надоело вручную их расставлять :)
У меня пробелы автоматом шпарятся.
Andrew Lobanov to Roman Yakovlev (2016-04-25 12:38:10) [ссылка]

Re: Caesium

Ответ на сообщение
RY> я не знаю, что такое idec.
Ты просил, чтобы мы не использовали название ii и потому теперь это зовётся idec.
Andrew Lobanov to Roman Yakovlev (2016-04-25 12:39:55) [ссылка]

Re: Caesium

Ответ на сообщение
>> я не знаю, что такое idec. но хочу, чтобы ты по возможности поддерживал перечисленное.
>Вряд ли. Мне пока не интересно распыляться на гк11, так как нет гарантии, что потом ты не изобретёшь ещё что-нить. ii, ulliss, bosfor, gk11. Если бы я всё поддерживал, то только тем бы и занимался, что фетчеры писал =)
разница между ГК11 и bosfor только в том, что надо писать не /bb/msgs/1:2:3/fmt/bundle, а /bb/msgs/1:2:3 :) и в том, что в bosfor через url можно было получить доступ КО ВСЕМУ, а в ГК11 большинство *жирных* реквестов сделать нельзя. формат сообщения точно такой же, только поле адрес действует иначе.
>RY> как я понимаю, если просто подменить фетчер - то уже можно что-нибудь фетчить? :) сейчас попробую - можно просто держать разные фетчеры и форкать не придётся. а может, придётся :)
>Скорее всего не придётся.
А обязательно python3? Впрочем, сейчас попробую разобраться.
>Странно. То ли регрессия, то ли ты пользуешься старой версией.
а, у меня-то да - у меня очень старая версия, где есть всё, что нужно и нет ничего ненужного - даже не хочется её на что-то менять :) но вроде это не от меня такое цитирование.
Roman Yakovlev to Andrew Lobanov (2016-04-25 12:51:59) [ссылка]

Re: Caesium

Ответ на сообщение
>> я не знаю, что такое idec.
>Ты просил, чтобы мы не использовали название ii и потому теперь это зовётся idec.
я просил, чтобы суть идеи ii не меняли :) на название мне всё равно.
Roman Yakovlev to Andrew Lobanov (2016-04-25 12:52:00) [ссылка]

Re: Caesium

Ответ на сообщение
Ломал, ломал и доломал :(

Ща, в общем, напишу лучше свой фетчер, на python2, чтобы хотя бы работал
Roman Yakovlev to Roman Yakovlev (2016-04-25 13:09:12) [ссылка]

Re: Caesium

Ответ на сообщение
>Чего-то я покрутил фетчер - кое-как добился, чтобы оно в правильном порядке выдавало сообщения, пока нашёл, куда реверсить :) но всё равно в коде не разобрался. Что за загадочное число 48?
В общем, вот фетчер на python2, который просто работает:
import urllib2, sys, base64, os

NODE='gk11.ru'
ECHO='obsd besedka humor gk11'
LIMIT=200

def b64d(s):
    return base64.b64decode(s.replace('-', '+').replace('_', '/'))

def getf(l):
    print 'fetch %s' % l
    from StringIO import StringIO
    import gzip
    request = urllib2.Request(l)
    request.add_header('Accept-encoding', 'gzip')
    response = urllib2.urlopen(request)
    if response.info().get('Content-Encoding') == 'gzip':
        f = gzip.GzipFile(fileobj=StringIO(response.read()))
    else:
        f = response
    return f.read()

def sep(l, step=20):
    for x in range(0, len(l), step):
        yield l[x:x+step]

def debundle(ea, s):
    for n in s.splitlines():
        mid, kod = n.split(':', 1)
        msgbody = b64d(kod)
        open('msg/%s' % mid,'w').write(msgbody)
        open('echo/%s' % ea,'a').write(mid + '\n')

def fetch(ea, url, lim):
    out = getf('%sbb/echo/%s/lim/%s' % (url, ea, lim))
    if os.path.exists('echo/%s' % ea):
        prev = open('echo/%s' % ea).read().splitlines()
    else:
        prev = []
    dllist = [x for x in reversed( out.splitlines()) if x not in prev]
    for dl in sep(dllist, 80):
        if ''.join(dl):
            s = getf('%sbb/msgs/%s' % (url, ':'.join(dl)))
            debundle(ea, s)

url = 'http://%s/' % NODE

for en in ECHO.split():
    fetch(en, url, LIMIT)
Roman Yakovlev to Roman Yakovlev (2016-04-25 13:09:12) [ссылка]

Re: Caesium

Ответ на сообщение
RY> я просил, чтобы суть идеи ii не меняли :) на название мне всё равно.
Ну если суть идеи исключительно в получении полного индекса, то извини. Ну ещё есть возможность через ноду отдавать файлы, но это вообще не про то и до сих пор нигде толком не реализовано, вроде. В остальном это старый добрый ii. В любом случае, ты до сих пор можешь взять хоть клиент версии 0.3 и работать с таверной, которая 100% idec. Без неудобств, без проблем. И фетчер с ноды версии 0.3 будет работать с другими нодами так же.

// Из твоей тогдашней формулировки я понял, что ты не хочешь, чтобы наша поделка ассоциировалась с твоей. И ещё в самом начале в 2014 году сказал, что можно наворотить поверх ii кучу фич, но под другим названием и где-нибудь в другом месте. Ну так и вот. Сетка другая, название другое. В центре великий и могучий ii и это особенно прекрасно.
Andrew Lobanov to Roman Yakovlev (2016-04-25 14:15:39) [ссылка]

Re: Caesium

Ответ на сообщение
>> я просил, чтобы суть идеи ii не меняли :) на название мне всё равно.
>Ну если суть идеи исключительно в получении полного индекса, то извини.
Суть идеи в том, что и клиент и сервер можно было реализовать с помощью первой дискеты OpenBSD или на ассемблере для KolibriOS :)

В ГК11 это распространяется уже только на клиента :)
Roman Yakovlev to Andrew Lobanov (2016-04-25 14:15:57) [ссылка]

Re: Caesium

Ответ на сообщение
> А обязательно python3? Впрочем, сейчас попробую разобраться.
Просто я во втором примерно как ты в третьем, видимо. Без матов интерпритатора не могу писать совсем.
Andrew Lobanov to Roman Yakovlev (2016-04-25 14:20:06) [ссылка]

Re: Caesium

Ответ на сообщение
RY> Что за загадочное число 48?
Это загадочное число сообщений, при котором индекс эхи ближе всего к 1 килобайту =)
Andrew Lobanov to Roman Yakovlev (2016-04-25 16:24:53) [ссылка]

Re: Caesium

Ответ на сообщение
RY> Суть идеи в том, что и клиент и сервер можно было реализовать с помощью первой дискеты OpenBSD или на ассемблере для KolibriOS :)
Ну так и тут не сложнее. Всё то же по сути.
Andrew Lobanov to Roman Yakovlev (2016-04-25 16:24:53) [ссылка]

Re: Caesium

Ответ на сообщение
>> Что за загадочное число 48?
>Это загадочное число сообщений, при котором индекс эхи ближе всего к 1 килобайту =)
Андрей, я взял старую версию, но она неправильно считает, если сообщений - 0, то вообще не показывает эху, если 1 - то показывает эху, но говорит, что 0 сообщений, и так далее.

Видимо, он отбрасывает первую строчку. Андрей, посмотри, пожалуйста, свой код, и скажи, что сделать, чтобы убрать это поведение?

http://fossil.gk11.ru/artifact/8041f1a76241c152
Roman Yakovlev to Andrew Lobanov (2016-04-26 10:37:49) [ссылка]

Re: Caesium

Ответ на сообщение
RY> Видимо, он отбрасывает первую строчку. Андрей, посмотри, пожалуйста, свой код, и скажи, что сделать, чтобы убрать это поведение?
Последняя строка индекса всегда пустая, вроде. Посмотри функцию rescan_counts. Там вообще странный код, который я неизвестно как нагенерил, но функция предельно простая.
Andrew Lobanov to Roman Yakovlev (2016-04-26 11:22:13) [ссылка]

Re: Caesium

Ответ на сообщение
>> Андрей, я взял старую версию, но она неправильно считает, если сообщений - 0, то вообще не показывает эху, если 1 - то показывает эху, но говорит, что 0 сообщений, и так далее.
>И да. Я уже это говорил. Я фикшу баги, но делаю это в своём репозитории. Два раза искать один и тот же баг мне откровенно лениво. Так что напиши уже патч и использую версию из моего репозитория.
Версия, которую я использую уже давно, мне нравится намного больше. :)

И это не баг - я просто не могу понять, как оно работает.
Roman Yakovlev to Andrew Lobanov (2016-04-26 12:22:41) [ссылка]

Re: Caesium

Ответ на сообщение
Пришлось повозиться, но я поправил плюсик около эхи с одним сообщением. Пока ещё пообкатываю, но этот старый надоедливый баг пофикшен. Если это не вылезет боком в ближайшее время, то пушну в реп.
Andrew Lobanov to All (2016-04-26 12:22:52) [ссылка]

Re: Caesium

Ответ на сообщение
RY> Андрей, я взял старую версию, но она неправильно считает, если сообщений - 0, то вообще не показывает эху, если 1 - то показывает эху, но говорит, что 0 сообщений, и так далее.
И да. Я уже это говорил. Я фикшу баги, но делаю это в своём репозитории. Два раза искать один и тот же баг мне откровенно лениво. Так что напиши уже патч и использую версию из моего репозитория.
Andrew Lobanov to Roman Yakovlev (2016-04-26 12:24:22) [ссылка]

Re: Caesium

Ответ на сообщение
RY> Версия, которую я использую уже давно, мне нравится намного больше. :)
Ну я ту версию уже не поддерживаю.
RY> И это не баг - я просто не могу понять, как оно работает.
В общем, там через задницу оно работает. Я ж тот ещё быдлокодер =)

На rescan_counts забей.

В функции get_echo_length() замени
echo_length = len(f.read().split("\n")) - 2
на
echo_length = len(f.read().split("\n")) - 1
В функции draw_echo_selector():
if echo[0] in lasts:
    last = lasts[echo[0]]
else:
    last = 0
if last < echo_length:
    stdscr.addstr(y + 1 - start, 1, "+")
на
if echo[0] in lasts:
    last = lasts[echo[0]]
else:
    last = -1
if last < echo_length - 1 or last == -1 and echo_length == 1:
    stdscr.addstr(y + 1 - start, 1, "+")
if last < 0:
    last = 0
и в echo_selector():
if last < echo_length:
    last = last + 1
на
if last < echo_length - 1:
    last = last + 1
В текущей версии этого хватило для адекватного поведения плюсика =)

Про неотображаемые эхи я вообще фиг знает о чём речь. Ковырять старый код нет никакого желания.
Andrew Lobanov to Roman Yakovlev (2016-04-26 12:42:42) [ссылка]

Re: Caesium

Ответ на сообщение
>В текущей версии этого хватило для адекватного поведения плюсика =)
>Про неотображаемые эхи я вообще фиг знает о чём речь. Ковырять старый код нет никакого желания.
второй порции у меня нет вообще.

в третьей немного иначе, там ещё проверка на last > 0 перед этим

в общем, применил первую и третью порцию патчей - ничего не изменилось:

скачивает-то он всё правильно (вроде), но при нажатии на g:

- когда надо скачать 200 сообщений, показывает 199
- когда надо 2, показывает 1
- когда надо 1, показывает 0
- а когда новых сообщений, вместо показа ИМЯЭХИ 0/0, просто рисует чёрную строку
Roman Yakovlev to Andrew Lobanov (2016-04-26 13:09:12) [ссылка]

Re: Caesium

Ответ на сообщение
RY> скачивает-то он всё правильно (вроде), но при нажатии на g:
И тут выяснилось, что речь идёт о старом фетчере =)

Баг такой был и даже попал случайно в апстрим. Смотри более поздние версии.
Andrew Lobanov to Roman Yakovlev (2016-04-26 14:22:02) [ссылка]

Re: Caesium

Ответ на сообщение
Посмотрел я на скрин, который ты на ЛОР кидал. Я не возьмусь настолько древнюю версию приводить в порядок по новой. Но дело твоё, конечно.
Andrew Lobanov to Roman Yakovlev (2016-04-26 17:00:06) [ссылка]

Re: Caesium

Ответ на сообщение
> Посмотрел я на скрин, который ты на ЛОР кидал. Я не возьмусь настолько древнюю версию приводить в порядок по новой. Но дело твоё, конечно.
я думаю, она и будет официальной :)
Roman Yakovlev to Andrew Lobanov (2016-04-26 18:25:09) [ссылка]