# Caesium
Andrew Lobanov(tavern,1) — Roman Yakovlev
2016-04-25 12:25:43


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

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

Просто появились всякие небольшие улучшения (тот же скроллбар) и багфиксы, которые имеет смысл использовать и тебе.

# Re: Caesium
Roman Yakovlev(station13, 11) — Andrew Lobanov
2016-04-25 12:39:32


>Кстати, загляни в новую версию. Сейчас ей можно прикручивать сторонний фетчер (отправка правда пока не отделена), что упростит использование его с гк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 последних сообщений с эхи. И, думаю, эта цифра должна быть дефолтом для клиентов, а юзер в настройках уже поменяет.


Но главное, что интересует в этой версии - чтобы >>это>го>ужасно>го>цитирования там не было ни при каких обстоятельствах :) да и вообще, мне кажется, что хватит и одного уровня цитирования (хотя бы опционально, иначе прибегут юзеры, начнут оверквотить, а нам глаза ломай!)

# Re: Caesium
Andrew Lobanov(tavern,1) — Roman Yakovlev
2016-04-25 13:00:49


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

RY> Но главное, что интересует в этой версии - чтобы >>это>го>ужасно>го>цитирования там не было ни при каких обстоятельствах :)

Я тебе по секрету скажу, что и у нас такого цитирования, которое ты тут изобразил нет. Было несколько сообщений из-за моей криворукости в процессе обкатки, но теперь такого нет.

# Re: Caesium
Roman Yakovlev(station13, 11) — Andrew Lobanov
2016-04-25 13:02:41


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

я не знаю, что такое idec. но хочу, чтобы ты по возможности поддерживал перечисленное.

как я понимаю, если просто подменить фетчер - то уже можно что-нибудь фетчить? :) сейчас попробую - можно просто держать разные фетчеры и форкать не придётся. а может, придётся :)

>RY> Но главное, что интересует в этой версии - чтобы >>это>го>ужасно>го>цитирования там не было ни при каких обстоятельствах :)
>Я тебе по секрету скажу, что и у нас такого цитирования, которое ты тут изобразил нет. Было несколько сообщений из-за моей криворукости в процессе обкатки, но теперь такого нет.

любого цитирования, кроме >. кстати, раньше же вроде после > был пробел - куда он делся, надоело вручную их расставлять :)

# Re: Caesium
Roman Yakovlev(station13, 11) — Andrew Lobanov
2016-04-25 13:38:09


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

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

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

gk11 http://gk11.ru/

echo besedka
echo obsd

Оно скачивает по 100 сообщений на эху, как и было задумано. А при следующем фетче скачивает те же самые 100 сообщений для первой эхи из списка! Поменяй эхи местами - и будет снова скачивать в первую из списка. Хотя я сейчас задал ещё эху с 50 сообщениями - и он теперь скачивает 150! 50 из первой и 100 со второй. Ничего не понимаю вообще.

# Re: Caesium
Andrew Lobanov(tavern,1) — Roman Yakovlev
2016-04-25 13:38:10


RY> я не знаю, что такое idec. но хочу, чтобы ты по возможности поддерживал перечисленное.

Вряд ли. Мне пока не интересно распыляться на гк11, так как нет гарантии, что потом ты не изобретёшь ещё что-нить. ii, ulliss, bosfor, gk11. Если бы я всё поддерживал, то только тем бы и занимался, что фетчеры писал =)

RY> как я понимаю, если просто подменить фетчер - то уже можно что-нибудь фетчить? :) сейчас попробую - можно просто держать разные фетчеры и форкать не придётся. а может, придётся :)

Скорее всего не придётся.

> RY>

Странно. То ли регрессия, то ли ты пользуешься старой версией.

RY> любого цитирования, кроме >. кстати, раньше же вроде после > был пробел - куда он делся, надоело вручную их расставлять :)

У меня пробелы автоматом шпарятся.

# Re: Caesium
Andrew Lobanov(tavern,1) — Roman Yakovlev
2016-04-25 13:39:55


RY> я не знаю, что такое idec.

Ты просил, чтобы мы не использовали название ii и потому теперь это зовётся idec.

# Re: Caesium
Roman Yakovlev(station13, 11) — Andrew Lobanov
2016-04-25 13:51:59


>> я не знаю, что такое 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? Впрочем, сейчас попробую разобраться.

>Странно. То ли регрессия, то ли ты пользуешься старой версией.

а, у меня-то да - у меня очень старая версия, где есть всё, что нужно и нет ничего ненужного - даже не хочется её на что-то менять :) но вроде это не от меня такое цитирование.

# Re: Caesium
Roman Yakovlev(station13, 11) — Andrew Lobanov
2016-04-25 13:52:00


>> я не знаю, что такое idec.
>Ты просил, чтобы мы не использовали название ii и потому теперь это зовётся idec.

я просил, чтобы суть идеи ii не меняли :) на название мне всё равно.

# Re: Caesium
Roman Yakovlev(station13, 11) — Roman Yakovlev
2016-04-25 14:09:12


Ломал, ломал и доломал :(

Ща, в общем, напишу лучше свой фетчер, на python2, чтобы хотя бы работал

# Re: Caesium
Roman Yakovlev(station13, 11) — Roman Yakovlev
2016-04-25 14:09:12


>Чего-то я покрутил фетчер - кое-как добился, чтобы оно в правильном порядке выдавало сообщения, пока нашёл, куда реверсить :) но всё равно в коде не разобрался. Что за загадочное число 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)

# Re: Caesium
Andrew Lobanov(tavern,1) — Roman Yakovlev
2016-04-25 15:15:39


RY> я просил, чтобы суть идеи ii не меняли :) на название мне всё равно.

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

// Из твоей тогдашней формулировки я понял, что ты не хочешь, чтобы наша поделка ассоциировалась с твоей. И ещё в самом начале в 2014 году сказал, что можно наворотить поверх ii кучу фич, но под другим названием и где-нибудь в другом месте. Ну так и вот. Сетка другая, название другое. В центре великий и могучий ii и это особенно прекрасно.

# Re: Caesium
Roman Yakovlev(station13, 11) — Andrew Lobanov
2016-04-25 15:15:57


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

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

В ГК11 это распространяется уже только на клиента :)

# Re: Caesium
Andrew Lobanov(tavern,1) — Roman Yakovlev
2016-04-25 15:20:06


> А обязательно python3? Впрочем, сейчас попробую разобраться.

Просто я во втором примерно как ты в третьем, видимо. Без матов интерпритатора не могу писать совсем.

# Re: Caesium
Andrew Lobanov(tavern,1) — Roman Yakovlev
2016-04-25 17:24:53


RY> Что за загадочное число 48?

Это загадочное число сообщений, при котором индекс эхи ближе всего к 1 килобайту =)

# Re: Caesium
Andrew Lobanov(tavern,1) — Roman Yakovlev
2016-04-25 17:24:53


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

Ну так и тут не сложнее. Всё то же по сути.

# Re: Caesium
Roman Yakovlev(station13, 11) — Andrew Lobanov
2016-04-26 11:37:49


>> Что за загадочное число 48?
>Это загадочное число сообщений, при котором индекс эхи ближе всего к 1 килобайту =)

Андрей, я взял старую версию, но она неправильно считает, если сообщений - 0, то вообще не показывает эху, если 1 - то показывает эху, но говорит, что 0 сообщений, и так далее.

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

http://fossil.gk11.ru/artifact/8041f1a76241c152

# Re: Caesium
Andrew Lobanov(tavern,1) — Roman Yakovlev
2016-04-26 12:22:13


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

Последняя строка индекса всегда пустая, вроде. Посмотри функцию rescan_counts. Там вообще странный код, который я неизвестно как нагенерил, но функция предельно простая.

# Re: Caesium
Andrew Lobanov(tavern,1) — All
2016-04-26 13:22:52


Пришлось повозиться, но я поправил плюсик около эхи с одним сообщением. Пока ещё пообкатываю, но этот старый надоедливый баг пофикшен. Если это не вылезет боком в ближайшее время, то пушну в реп.

# Re: Caesium
Andrew Lobanov(tavern,1) — Roman Yakovlev
2016-04-26 13:24:22


RY> Андрей, я взял старую версию, но она неправильно считает, если сообщений - 0, то вообще не показывает эху, если 1 - то показывает эху, но говорит, что 0 сообщений, и так далее.

И да. Я уже это говорил. Я фикшу баги, но делаю это в своём репозитории. Два раза искать один и тот же баг мне откровенно лениво. Так что напиши уже патч и использую версию из моего репозитория.

# Re: Caesium
Roman Yakovlev(station13, 11) — Andrew Lobanov
2016-04-26 13:22:41


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

Версия, которую я использую уже давно, мне нравится намного больше. :)

И это не баг - я просто не могу понять, как оно работает.

# Re: Caesium
Andrew Lobanov(tavern,1) — Roman Yakovlev
2016-04-26 13:42:42


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

В текущей версии этого хватило для адекватного поведения плюсика =)

Про неотображаемые эхи я вообще фиг знает о чём речь. Ковырять старый код нет никакого желания.

# Re: Caesium
Roman Yakovlev(station13, 11) — Andrew Lobanov
2016-04-26 14:09:12


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

второй порции у меня нет вообще.

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

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

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

- когда надо скачать 200 сообщений, показывает 199
- когда надо 2, показывает 1
- когда надо 1, показывает 0
- а когда новых сообщений, вместо показа ИМЯЭХИ 0/0, просто рисует чёрную строку

# Re: Caesium
Andrew Lobanov(tavern,1) — Roman Yakovlev
2016-04-26 15:22:02


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

И тут выяснилось, что речь идёт о старом фетчере =)

Баг такой был и даже попал случайно в апстрим. Смотри более поздние версии.

# Re: Caesium
Andrew Lobanov(tavern,1) — Roman Yakovlev
2016-04-26 18:00:06


Посмотрел я на скрин, который ты на ЛОР кидал. Я не возьмусь настолько древнюю версию приводить в порядок по новой. Но дело твоё, конечно.

# Re: Caesium
Roman Yakovlev(station13, 11) — Andrew Lobanov
2016-04-26 19:25:09


> Посмотрел я на скрин, который ты на ЛОР кидал. Я не возьмусь настолько древнюю версию приводить в порядок по новой. Но дело твоё, конечно.

я думаю, она и будет официальной :)