Замечания и предложения по нему, а также их обсуждение. Предыдущий тред >>1000000.
Починил предпросмотр. Убрал setLocale, вроде parse.class.php локалеинвариантный.Починил удаление, кроме bulk deletion. Там было два основных момента.В отличие от 410, стояло if(!isset($_POST['message'])) $_POST['message'] = ''; перед if(CheckValidPost()). Для чего оно было добавлено? CheckValidPost возвращал бы false, будь message unset'нутым, и тогда уже проверялось бы наличие постов на репорт/удаление. Так что я убрал if(!isset внутрь блока if(CheckValidPost()){}.Поскольку типы у нас теперь строгие, попытка escape'ить $this->post_id вызывала ошибку. Убрал из класса Post mysqli_esc() для ->post_id, ->post_parentid и для ответов БД на запросы.Расширил допустимые символы в бордоимени до [\w]. Hyphen пока включать не стал; проверить, везде ли posts_ оборачивается в backtick'и и решить, что делать если нужна портируемость. ANSI_SQL?Переписал addboard. Заменил sleep(5) на spinlock с usleep(100000) шагом. Там точно надо ждать и нету ли каких-нибудь менее затратных примитивов синхронизации для create table?Не применял линтер.Применить, проверить, протестировать, смёржить в котокафе, и я бы >>1000497 и >>1000500 уже занялся тогда.Возвращаясь, к возникшей ситуации с if(CheckValidPost()){}, думаю, было бы неплохо разделить board.php на несколько разных endpoint'ов.А по posts_, если когда-нибудь убирать текстодоски как отдельный тип, то в догонку такой вопрос. Насколько имеет смысл отказаться от архитектуры, где под каждую доску своя таблица, и вместо этого сделать единный posts с composite key по (boardname, post_id)? Кажется, много чего упростило бы ценой, может, нескольких «лишних» полей в таблице под разные типы досок.
if(!isset($_POST['message'])) $_POST['message'] = '';
if(CheckValidPost())
CheckValidPost
if(!isset
if(CheckValidPost()){}
posts_
>>1000604>проверить, везде ли posts_ оборачивается в backtick'иВ идеале обязан.>Там точно надо ждатьДа вроде нет? CREATE TABLE блокирует и так.>Применить, проверить, протестировать, смёржить в котокафеСкорее всего я не смогу это сделать раньше 12го.>Насколько имеет смысл отказаться от архитектуры, где под каждую доску своя таблица, и вместо этого сделать единный posts с composite key по (boardname, post_id)?Основная проблема это правильно дёргать генератор нумерации для каждой доски, но в рамках одной транзакции если всё делать должно работать.Вторая проблема это что индивидуальные базы меньше по размеру и проще их обходить, но тут не те размеры.Так как тут один процесс контролирует всё и делать разный доступ к таблицам не получится, проще слить.>нескольких «лишних» полей в таблице под разные типы досокПросто вынести их в отдельную таблицу и через JOIN. Особенно файлы хорошо выносятся.
Предлагаю все рефлинки на посты, которые ведут в другой тред, не тот, в котором запощен пост с рефлинкой, помечать маленькой стрелочкой справа: https://www.freepik.com/search?format=search&iconType=standard&query=arrow+link&type=icon
>>1000606Думаю, реализовать можно. Но SVG-значком или юникодом? Если SVG, то интересно узнать, откуда были взяты значки, которые сейчас используются. Стоит взять из той же серии, если есть.BTW, помнится, звучала как-то также просьба сделать, чтобы на +50 и -100 страницах рефлинки, пока возможно, вели на них же, а не на целый тред. Надо? И если ссылка ведёт извне страницы-отрывка на полную страницу треда, тоже добавлять arrow link?Also, есть ли идеи, как запилить preview поста, на который ведёт ссылка, для мобилок? Сейчас, если long tap'нуть, то срабатывает, но может выйти за пределы экрана и перекрывается браузерным меню.
>>/b/1005489'%' — это вам не '%'!Озадачиться ли мне добавлением японских символов в разметку или можно положить дело в долгий ящик?
>>1000607> Но SVG-значком или юникодом?Проще(?) Юникодом. Только вот этого устоявшегося символа external link там, кажется, нет. Или не находится по arrow / link substring-ам в имени.И надо ещё стрелочку выбрать! И проверить её на отображаемость в основных ОСях. Или не надо.Вон Supplemental Arrows-C даже на дизайнерском Маке у кого-то не рендерится. (у меня так же на Шин)> Если SVG, то интересно узнать, откуда были взяты значки, которые сейчас используются. Стоит взять из той же серии, если есть.Вспоминается что-то, что их же конвертировали из растра? А брали их откуда-то ведь как бы не до 2010-го года ещё! Но это те которые вверху.Да и какая в данном случае "серия"? Что его, в красненький красить или жирно рисовать? Хоть это и устоявшийся в некотором роде символ (в уже старом вебе... который умирает/убивают. Сейчас "устаивается" что-то из Android вроде бургера... www.linux.org.ru/forum/talks/17692956), но как-то почему-то подозреваю вообще вряд ли он там будет, даже там, откуда недавно "облачко ответа" взято.a.extref::after { content: "⬏"; padding-left: 2px; font-size: small; text-decoration: none; display: -webkit-inline-box;}⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯> Надо?Мелочёвка, но если не лень.> пока возможноВсмысле, если попадает в страницу-отрывок?> И если ссылка ведёт извне страницы-отрывка на полную страницу треда, тоже добавлять arrow link?Хорошая идея!Ссылка на посты с других досок - очевидное исключение для всей фичи.Также там не рефлинки, а ссылки No и с номером поста — та которая с номером поста выглядит как [...]/d/res/1000357last50.html#i1000552. Зачем? Выглядит как баг ("last").> AlsoПока phoneпостингом не занимаюсь, ничего не могу сказать. Пофиг. По-моему (и вообще) там в этом важно быстро запомнить как референсируемый пост визуально выглядит, чтобы потом прыгнув на него, сопоставить с этим flash image и успокоиться. А как иначе? Потому как без hover оно быстро исчезает и всё равно ничего не прочитаешь на не одно-двустрочном посте.>>1000608Голосую ненужно. Сейчас это простой способ обойти разметку. Смотрю на эту help-страничку как баран на ворота / табличку с линейным письмом A/B =_= С этими "особенностями работы". С lookahead/behind я ещё в регулярках не разобрался, а тут в разметку подвезли! Книжку надо издавать по этому парсеру! /hj
a.extref::after { content: "⬏"; padding-left: 2px; font-size: small; text-decoration: none; display: -webkit-inline-box;}
[...]/d/res/1000357last50.html#i1000552
https://en.wikipedia.org/wiki/Supplemental_Arrows-C
Опубликуйте же, сколько чего и за какие посты проголосовали пока была ДБК-кармомётка включена!
Shared worker сошёл с ума. Долбит при user present на вкладке. Если уйти с неё - перестаёт.Перезагрузка страницы; убийство в chrome://inspect/#workers; перезапуск по новому посещению не помогают пока (попробовал 2-3 раза).В localStorage оффсеты постов новые - последние.До этого в таком же состоянии был найден на 410. Но там хотя бы раз в 10 секунд (что всё равно много) (тоже продолжает).Хотя бы успокаивается при неактивной, и то хорошо.Но у меня опять outdated browser ╮( ̄▽ ̄"")╭. 2023 build.Screencast 2026-01-06-0141.mp4 14.7 MB https://files.catbox.moe/w2g6l1.mp4Screencast 2026-01-06-410.mp4 10.6 MB https://files.catbox.moe/68yiu8.mp4Посмотрим что будет после отправки поста.
chrome://inspect/#workers
То же безобразие продолжается.
>>1000606А может просто (Cross-thread) добавлять как на 4чане?В любом случае, это не-жсом делать долго.
>>1000612Дополнение: машинка иногда отправляется и возвращается из sleep. После этого прыгает время. Может, это таймеры сбивает... Но как просто догадка.>>1000614> А может просто (Cross-thread) добавлять как на 4чане?Можно и так, понятнее. Тогда в 50-версиях надо предусмотреть другой текст, (full thread)?> В любом случае, это не-жсом делать долго.Навесить класс? Ну не знаю, не смотрел. Но тот PHP и так сильно перерабатывается сейчас.Можно и жсом. Такого не много, так что неким миганием после загрузки можно будет пренебречь.
Так что надо будет мне ещё проверить после перезапуска браузера.
В ближайшую неделю или две попробую посмотреть, что там не так.Пока, наверное, вернуть на if(false), чтобы polling шёл во вкладке.
if(false)
>>1000616Не исправило.
>>1000612Уточнение, убийство-то помогает, да толку то этого нет если оно при каждом визите восстанавливается.
>>1000619Т.е. не помогает как способ "хоть что-то сделать" или "сбросить состояние" какое-то.
> var max_navbar_check_delay = trueНашёл. Указать в конфиге количество миллисекунд больше 1000 (16384 by default) и перегенерировать страницы.
>>1000621Это было поправлено вроде в тот же день.>>1000605ВНЕЗАПНО хостер приказывает долго жить, так что перенесём ещё на неделю.
>>1000611Она была включена всего ничего по времени, и, помнится, там только один или два поста получили Д или Б, или К.>>1000609> Сейчас это простой способ обойти разметку.Eeeeh?> спойлерВозможно, стоит сделать описание по-русски, а не одними примерами?Основная суть в чём.Есть escape-символ, 【~】. Заставляет воспринимать следующий за ним символ, как обычный текст. Может escape'ить сам себя. Обычно всё почти также просто, как когда пишешь string literal в С и используешь там 【\】 для escape'а кавычки или переноса строки.Но! Распознаётся тильда, как escape-символ, не перед любым символом, а только непосредственно перед допустимым в текущем контексте тэгом разметки.Поэтому 【~%%】 => 【%%】 (тильда стоит перед открытием/закрытием спойлера), но 【~%~%】 => 【~%~%】: тильды стоят перед одиночным 【%】, который ничему не соответствует. Вместе с тем, 【~*~*】 => 【**】: тильды стоят перед 【*】, которое соответствует открытию/закрытию курсивного текста.Есть блок, где разметка отключается. Объявляется через 【``】 или 【[nofmt]】.【`` 2*x**2 + 3*x - 4 ``】 => 【 2*x**2 + 3*x - 4 】. Чтобы для случаев, когда escape'ить пришлось бы много, был более удобный способ. Разметка также отключается и в code блоках. В этих блоках из символов разметки работает только 【~】.> особенностями работыПо большей части про поведение в крайних случаях.> С lookahead/behind я ещё в регулярках не разобрался, а тут в разметку подвезли!Видимо, не очень удачное описание у меня.> Особенности работы/Код и nofmt> `*lookahead* до закрытия``Про то, что backtick после 【я】 распознаётся, как закрытие ранее объявленного блока кода, а не как первый символ 【``】 тэга. Чем отличается от того, как, скажем, обрабатывается звёздочка. 【* text **】 — это не 【 text *】, а 【* text **】, ибо понимается, как wakaba_italics; text; wakaba_bold.> [nofmt][code] 1234567890 ~[/nofmt][/code]Также про то, что будет в этой ситуации: 【[nofmt] 1234567890 ~[/nofmt]】. По 【[nofmt]】, parser ищет неза-escape'ленный 【[/nofmt]】, не находит, сбрасывает состояние до момента, когда встретил 【[nofmt]】 и продолжает parse'ить со следующего за этим 【[nofmt]】 символа. Встречает 【[code]】, игнорирует всё, что не 【[/code]】 и не тильды непосредственно перед 【[/code]】, находит этот 【[/code]】 и дальше business as usual. Поэтому тильда перед 【[/nofmt]】 хотя и приводит к тому, что объявление nofmt блока оказывается незакрытым, не исчезает — из-за code блока.> Распознаётся тильда, как escape-символ, не перед любым символом, а только непосредственно перед допустимым в текущем контексте тэгом разметки.Возвращаясь к. Недопустимо закрытие неоткрытого блока. Недопустимо открытие уже открытого блока. Недопустимый в текущем контексте тэг разметки понимается, как просто текст: 【This text isn't code ~[/code]】 => 【This text isn't code ~[/code]】 — здесь тильда не исчезает потому, что понимается не как escape-символ, а как текст, поскольку стоит перед текстом, не перед активным тэгом.Also, в контексте URL'ов тильда не является escape-символом и используется для указания конца ссылки.Можете давать советы по улучшению end user документации. Можете попробовать, основываясь на parse.class.php, markdown.html и изложенном, написать её сами.
1234567890 ~[/nofmt]
Оно опять? бампается после бамплимита.
Пора поправить подпостформенный на реальное значение!
>>10006273次/kawaii тред-то? Но там bump limit не достигнут: постов больше 200, но часть из них с сажей. Так что это ⇩-индикатор не прав.
>>1000629Оно так не работает.>>1000627Off-by-one. Fixed.
Another relocation completed. >>1000622
>>1000631Может наверное слететь проезд врочем.
>>1000631Gut. Будем надеяться, что этот хост будет стабильнее, чем предыдущий.
Ryo не принимается без u, хотя она необязательна.
На HYR ввели, почему мы всё ещё не имеем? Arghrghghghhhh!Предлагаю генерировать включение скрипта хотя бы для картинкотредов, вручную добавляя thread id-ы на сервере.
>>1000630И оно снова бампнулось 201-м ответом.
>>1000655I don't see anything.
>>1000656>>1000653 >>1000654 ну вот такие чудеса. Опять что-нибудь про считается ли ОП-пост за пост входящий в лимит?
>>1000657Нет, Оп-пост не является бампом.
Возможно, имеет смысл поставить между "Message" и "Preview" один <br> — чтобы столбец с заголовками по получению предпросмотра не растягивался.
>>1000604Применено, тестируется.>>1000611Под конец всего мероприятия у меня записано только два кота на >>1000445. Всего кликалось на больше постов, но вполне вероятно то были тесты и потом я голоса снял. Или пользователь передумал.>>1000659Попробуем.
>>1000660Применено на здесь. Обращайтесь если что сломалось.
Баны, удаления и дубликаты изображений мне протестировать не доводилось, спасибо.
>>1000661Но вообще, занятно что в локальном тестировании recursive_node_format не выдавала ни DOMText (что я углядеть был должен), ни DomElement (откуда оно вообще), что вообще неожиданно. И в качестве входных данных тоже не шло.Надо в тестовый набор тяжёлую разметку включить.
recursive_node_format
DOMText
DomElement
>>1000661Good job.>>1000665Помню, что у меня удаление (после правок) работало. Странно.Вижу, язык в форме отправки поменялся на английский. Что-то не так с gettext?
>>1000667>Что-то не так с gettext?Кажется поменялась семантика аргументов _bindtextdomain. Поправлено.
>>1000667>что у меня удаление (после правок) работало.А, удаление собственных постов тоже, тут скорее в мод-удалении.
Наверное, дальше пойти таким путём?Реформа БД и config.php: создание редактора конфига, вынос posts_* в единную таблицу с PRIMARY KEY (board_name, post_id) и UNIQUE INDEX (board_name, parent_id, post_id) или наоборот (?), запись части нужных для kusaba.js параметров в отдельный JSON, а не в каждый HTML;Написать проверку соответствия файла расширению на сервере и на клиенте. Сделать, чтобы ориентация уменьшенных копий учитывала EXIF. Может, улучшить качество генерируемых thumbnail'ов.Сделать progress bar или иного рода отображение полноты отправки поста. Сделать, либо чтобы для preview не отправлялась картинка, либо чтобы показывало то, как пост будет выглядеть по итогу вместе с картинкой.
>>1000670>вынос posts_* в единную таблицу с PRIMARY KEYСудя по части комментариев, когда-то в Кусабе так и было, а затем автор решил разделить.>Сделать progress bar или иного рода отображение полноты отправки поста.Не совсем представляю как это возможно, это ж совсем низкоуровень тцп-соединения?
>>1000671Возможно через callback у XHRUpload. fetch вроде в такое не умеет.
>>/b/1006144> 014chan.org/b/res/0.html#1006111Добавить $thread_id = ! $thread_id ? $post_id : $thread_id; к 538'ой строке в handle_post_link в parse.class.php.
$thread_id = ! $thread_id ? $post_id : $thread_id;
>>1000674
> Написать проверку соответствия файла расширению на сервере и на клиенте.Было бы крайне любо сделать логику этого удобной Ычановской, то есть, можно запостить всё, что можно запостить (по типу файла), а расширение приклеивать правильное сервером уже потом, если нужно, вместо того, чтобы заставлять ошибкою юзера лезть переименовывать что-то, повышая тем его раздражённость.
>>1000677Правильно, зачем вообще все эти расширения? Юзеру они не нужны! Сервер тоже пусть пишет что в картинке пнг, а отдаёт вебп./сарказм
> Сервер тоже пусть пишет что в картинке пнг, а отдаёт вебп.Это уже реальность... Если в FF, наверно, ещё можно отредактировать свой Accept-Encoding, то в Хромиумах нет.
Пруф >>1000679 даже: https://static.wikia.nocookie.net/denpaonna/images/b/b2/Erio_Touwa_3.jpg