Садился в прошлом году пилить кастомный GUI для двачя.Потом понял, что имиджборды — всё, но код довёл до минимальной альфа-0.0.1 версии, раз что-то уже было.https://catamphetamine.github.io/chanchan/https://github.com/catamphetamine/chanchanВ принципе, ничё так получилось, но по фичам это, конечно, процентов пять от функционала двача, и я уже не буду там ничего делать (максимум разве что для себя докручу браузилку тредов с фильтром по щитпостингу), постинга там нет и не планируется.Просто кидаю сюда, вдруг какой-то мазохист захочет покопаться в легаси коде, но это вряд ли.
Последний из могикан, кстати, тоже не так давно таки сдался.https://github.com/DiscoursProject/Discours> Goodnight, sweet prince> К 2019 году борды умерли. Активное население ушло, остались нытики и пустословы. На этом прощайте. Счастливого Нового года!
>>1335666>>1335662На самом деле моя молодость вбухана в веб, который теперь уже всё.Изучайте лучше сиплюсы и в геймдев валите.Я сам в геймдев буду сваливать.В вебе уже нечего валить.Мобильные приложения тоже уже всё.
>>1335669Ладно, это крик души просто был, не обращайте внимания.Везде деньги есть.Просто столько надежд было в своё время, и как-то всё сдулось.Хочу драйва, чтобы как в 90-ые, хачили в гаражах.Веб теперь полон хипстеров и девушек, любого студента можно за пару месяцев обучить.Ценность веб-мастера девальвировалась.
>>1335672>>1335669на самом деле, если ты гуру оптимизации, шаришь в матане и всяческом clever stuffе типа hyperloglog++ и тп. то можешь в гейдев не валить
>>1335675> на самом деле, если ты гуру оптимизации, шаришь в матане и всяческом clever stuffе типа hyperloglog++ и тп. то можешь в гейдев не валитьДа я тут открыл для себя подкаст Галёнкина, и прямо понравилось.Конечно, клондайк в геймдеве вроде бы как уже прошёл, и Стим уже завалили дешёвой индюшатиной, но в целом AAA-паблишинг, на мой взгляд, никуда не денется и будет расти.Только вот, говорят они там, что AAA-проекты стали слишком много денег жечь, и что издателям не хватает уже цены за коробку, отсюда и появляются шапки и лутбоксы.Но я вообще удивился, кто все эти игры покупает, в том числе всякую индюшатину.Кто все эти люди.Одни пишут какие-то странные игры.Другие — их находят, покупают, обсуждают.В общем, интересно, конечно...------------------------------------------Кстати, небольшой соц.опрос.На мой взгляд, не удобно каждый раз наводить мышью, чтобы смотреть, на что там Семён ответил Антону.Сделал на коленке автоматическое разворачивание отвечаемых постов (что-то типа "разворачивать картинки", только для постов).На мой взгляд, интересно получилось — удобнее.https://catamphetamine.github.io/chanchan/v/3749775Это я так, просто, фигнёй страдал.
>>1335675> на самом деле, если ты гуру оптимизации, шаришь в матане и всяческом clever stuffе типа hyperloglog++ и тп. то можешь в гейдев не валитьКуда мне там.Я и универ не закончил.Вот, в 30 лет формочки леплю.Как совочком в песочнице, ага.Зенит славы, ничего не скажешь...Главным драйвером было, конечно, написать свою соц.сеть и разбогатеть, как Пашка, но в реальности только осознал, что тупик развития в данной области достигается очень быстро, а также есть неиллюзорные шансы упразднения данной среды в целом.
Запилил форчонг.https://catamphetamine.github.io/chanchan/?chan=4chanВсё, надо остановиться.Хватит время просирать)
Кстати, могу заметить, что по сравнению с форчонгом двач — это жесть и содомия.Форчонг очень простой по своей структуре.Синтаксис постов: либо просто текст, либо цитата, либо ссылка на пост.И картинка может быть только одна.И API очень чистый и логичный.У двачей в API видно всё наследие его разработки, "с древнейших времён и до наших дней".Если кому-то понадобится, я для себя расшифровывал поля:https://github.com/catamphetamine/chanchan/blob/master/docs/2ch.hk/API.mdИ синтаксис постов у двачей тоже полный Содом: верхние индексы, нижние индексы, цвета, заливки, и чего только нет.
Как следствие простоты синтаксиса: посты форчонга могут быть выведены на мобильных как системный текст, а для двача во всех этих мобильных клиентах наверняка под каждый пост городят отдельный Web View (или типа того).Как следствие: один может работать и скроллиться в бесконечность на 60 фпс, а другой ест процессор (и батарейку), и грузится дольше.Это так, просто предположения.В общем, старое-доброе правило: отсеки всё лишнее и "чем проще — тем лучше".
>>1347103 > Ты лучше оптимизацию запили, медленно все пиздец как.Так это бесплатный публичный прокси, на котором задержка под две секунды.Надо будет в ридми добавить капсом, что ВСЁ МЕДЛЕННО, потому что есть такая вещь как CORS, с которым не получится просто так взять и подтянуть сторонний JSON в браузер.Как по мне — глупость.Те же мобилки — тянут и в ус не дуют.Из новостей: я-таки решил, что допилю до нормального состояния всё это дело, раз уж начал.Потом буду форсить её Нариману и Хироюки во все щели.
>>1347103> Ты лучше оптимизацию запили, медленно все пиздец как.А вообще-то, Анон, хороший совет был.Поднял CORS прокси на nginx на Амазоне, время ожидания ответа от сервера снизилось.Полный сетевой цикл теперь — пол секунды вместо полутора секунд.Ещё оказалось, что с форчаном такой прокси не робит, так как CloudFlare у форчана анально огорожена от подсети AWS EC2, что по сути правильно: ничего не стоит запустить ботнет из 100500 инстансов и дудосить во все поля.А двач, вот, не блочит AWS.Возможно, при переезде на мейл.ру КлаудФлеру заменили местным CDN-ом, который более адекватен.
>>1347103> Ты лучше оптимизацию запили, медленно все пиздец как.Второй факт: оказалось, что я грузил описания видео с YouTube в один проход (скилл), когда такое лучше подгружать "асинхронно" уже после выдачи страницы.Небольшой совсем выигрыш в скорости, но идеологически более верно.
>>1347103> Ты лучше оптимизацию запили, медленно все пиздец как.А вообще, при более пристальном рассмотрении оказалось, что тормозит не сеть, а ЦПУ (молотит в загрузке на 100%), так что всё-таки действительно тормозит, пойду дебажить.
>>1335602 (OP)Оче тормозит, треды не открываются. 1/10. Алсо, >>1335662 - что там можно было год делать, это же пиздец какой-то.>>1335607404Если это тот дискурс, про который я думаю, то это не борды умерли, это просто дискурс был говном с админом-аутистом.
>>1347532> Оче тормозит, треды не открываются. 1/10.Ну да, есть такое...Открыли мне глаза, там много ещё пилить.Много оптимизировать.А с проксированием вообще затея оказалась недальновидной: по сути получается, что сначала запрос идёт из браузера на прокси через Атлантический океан, далее с этого прокси обратно на двач через Атлантический океан, потом обратно на прокси через Атлантический океан, и потом уже с прокси обратно в браузер через Атлантический океан.В общем, весело придумал, да...Я тут ещё глянул время загрузки двача.Как-то не очевидно было — он же молниеносно грузится.У меня, в ближайшей Области, грузится за 15 миллисекунд: что API, что страница сайта.В общем, молниеносно, прямо как логотип.> Алсо, что там можно было год делать, это же пиздец какой-то.Да она походу рабочее время считает, сейчас же все в житхаб коммитят, там и код ревью проводить удобно.Я в скольких последних конторах работал — везде житхаб используют.Берёшь себе задачу из Issues, открываешь Pull Request, и тимлид каждый день смотрит, сколько ты наработал или снова член пинал и двачи весь день читал.Сейчас они ещё что-то там запилили, что карточки можно двигать (ЭДЖАЙЛ), автоматически тесты запускать по коммиту, и прочее.>>1347534> на самом деле просто дилетант.Дилетант на самом деле ты.Значит, рассказываю, как делают в мире взрослых людей: если ты такой умный, то берёшь и пишешь, как бы ты реализовал то-то и то-то.Объясняешь подробно, что такое TextView в Андроиде, NSAttributedString в iOS, или что там у вас в этих ваших мобилках.Кидаешь ссылки на документацию, и т.п.Либо идёшь в /b/ и там перекидываешься калом со сверстниками.
Буду-ка, наверное, изредка пилить посты сюда про то, что интересного узнал для себя, поскольку тематика раздела — не "я пиарюсь".Сегодняшняя тема: парсинг видео с Ютуба.Берётся ссылка, из неё вынимается ID.Далее регаетесь в Google Developer Console, в разделе YouTube API v3, и там выдают "ключ".На ключ у Ютуба есть квоты: максимум миллион "очков" в сутки.Очки считаются по типу операций.Для получения данных по видео используются типы операций ("parts"): "contentDetails" (2 очка, продолжительность видео, соотношение сторон) и "snippet" (2 очка, название и описание).Описание и демо:https://developers.google.com/youtube/v3/docs/videos/listТаким образом, в день с одного ключа можно получить 250 000 видео.Как обходится — хз, не нагуглилось.Я думаю, в Гугле не дураки сидят и засекают HTTP заголовок Origin, в котором стоит сайт, отправивший запрос, так что просто завести кучу ключей — не факт, что дадут. А может и дадут.Для защиты ключа от кражи можно делать ограничение по адресу сайта, отправляющего запрос.Многие ещё могли заметить, что если зайти на ютуб с английской операционной системы, то у некоторых русских роликов будет иностранное название: это потому что в ютубе можно переводить ролики на произвольное количество языков.Однако API всё это дело не возвращает, а выдаёт только по одному, для каждого конкретного языка, и стоит это дополнительные 2 очка, так что я это не использую.Запросы выполняются быстро: из ближайшей Области — около 70 миллисекунд.
Можно ещё парсить твиты.API: https://publish.twitter.com/oembed?url=https://twitter.com/Interior/status/{id}Где "{id}" заменяется на ID твита.Возвращает объект вида: { url, html, author_name, author_url }.HTML можно парсить в обычный текст, убирая теги.Есть нормальное API, но оно не работает в обозревателе, так как выдаётся не ключ API, а ключ получения ключей API (которые истекают со временем — протокол oAuth).Эта схема работала бы, но Твитор не хочет разрешать CORS на своих адресах получения ключей по ключу получения ключа.Много тредов в интернете, но Твитору без разницы.Но вот этот "oembed" — работает, и CORS не выдаёт ошибку.Поэтому использую его.
>>1335602 (OP)Грузится как 4К торрент, треды не открываются, разметка везде поломана. Хуй знает, чем ты там год занимался, имея апи, я за неделю спарсил все сайты стройматериалов россии в свое время. А это, дружочек, не лямода, там агрегаторов нету :)Ставлю тебя писю в ротик/10, глотай.
>>1335602 (OP)пиздец, ошибки вылетают, грузится долго. шрифт большой.какой-то кружок на весь экран при скролле. очень слабенько.
Ебать, у меня постоянно бублик крутится при загрузке треда, мой виндовый. Это че такое, посоны? Первый раз такое вижу.
>>1354518> Это через oembed бесплатно и без ограничений нельзя разве делать?oembed у Ютуба не всегда работает.На StackOverflow есть много сообщений, где челы пишут: "НЕ ИСПОЛЬЗУЙТЕ, ЮТУБ ЗАБИЛ НА ЭТОТ API, НЕ ВСЕ ВИДЕО ГРУЗЯТСЯ, ИСПОЛЬЗУЙТЕ YOUTUBE DATA API".
>>1354844> Грузится как 4К торрент, треды не открываются, разметка везде поломана. Хуй знает, чем ты там год занимался, имея апи, я за неделю спарсил все сайты стройматериалов россии в свое время. А это, дружочек, не лямода, там агрегаторов нету.Лол, как же у него пригорело.Беги туши пожар.
>>1354850> пиздец, ошибки вылетают, грузится долго. шрифт большой.какой-то кружок на весь экран при скролле. очень слабенько.Ещё один не шарящий.
>>1354917> Ебать, у меня постоянно бублик крутится при загрузке треда, мой виндовый. Это че такое, посоны? Первый раз такое вижу.Это один и тот же пишет, походу.
>>1354518> Это через oembed бесплатно и без ограничений нельзя разве делать?А вообще, погуглил сейчас эти темы на StackOverflow и не нагуглились.В целом, да, можно было бы использовать его (вроде бы как он в целом работает).Официальной документации просто нет по нему никакой от Ютуба, что тоже навело меня на мысли о его неподдержке.А так, у Твиттера есть поддержка JSONP (это я не правильно написал, что он поддерживает CORS: на самом деле не поддерживает), а у Ютуба такой поддержки нету, поэтому из обозревателя его oembed в любом случае не прочесть. Только если через прокси какой-то. В принципе, тоже вариант, для какого-нибудь продакшена.Сам Двач использует YouTube Data API (можно посмотреть в консоли). При его гигантской посещаемости — хз, как хватает ключа.500 тысяч видео в день.Судя по официальным данным, у Двача миллион просмотров в сутки:https://2ch.hk/price.htmlВ принципе, не каждый тред содержит Ютубовое видео, но при этом некоторые треды содержат их много (/v/, /vg/), так что хз.
>>1354518> Это через oembed бесплатно и без ограничений нельзя разве делать?Резюмируя по YouTube oEmbed: судя по всему, он-таки работает, и можно его использовать (но без JSONP или CORS — на мобильных и на серверах).Единственное, он не всегда, видимо, возвращает правильную картинку.Пример:https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=INVdbXTuPVIВыдаёт "thumbnail_url": "https://i.ytimg.com/vi/INVdbXTuPVI/hqdefault.jpg"Если открыть её, то это будет картинка 4:3.На самом деле, есть картинка гораздо больше, и 16:9:https://i.ytimg.com/vi/INVdbXTuPVI/maxresdefault.jpgНо oEmbed её не указал.Так что, видимо, oEmbed подходит для названия видео, а также для соотношения сторон, и всё.
>>1347252Мое увожение, анон.Я вообще оче скептически отношусь к веб-макакам и очень редко вижу хороший UI, но твоя поделка прям понравилась.
>>1355399> Мое увожение, анон.ммм, положительный комментарий, дела...ну спасибо)По традиции, чего нового для себя прочитал.1. SSL сертификаты.Для поднятия своего прокси копипастинга по кускам из интернета конфига nginx оказалось недостаточно — https-сайт не может запрашивать не https-адреса.Оказалось, что сегодня получить сертификат бесплатно без СМС и регистрации может любой — достаточно поставить на машину утилиту `certbot`.Вот хорошая статья для Debian (я ставил на AWS Linux, который основан на Red Hat, в котором немного по-другому):https://habr.com/ru/post/318952/Сертификат выдаётся на три месяца, и по этой причине требуется добавлять в cron ежедневную задачу на его обновление.Обновление возможно только около срока истечения, поэтому задача ежедневная.2. CSS Grid.Если раньше я видел статьи про CSS Grid, то пролистывал их, так как они ещё только начинались.Похоже, что время уже почти пришло: из актуальных обозревателей только IE не будет их поддерживать.IE — всё ещё держит около 3% аудитории, поэтому на работе скорее всего не следует применять CSS сетку.Но для своих "pet project"-ов — вполне стоит, для набивания руки.По сути, они позволяют делать всё, что можно сделать тегом <table/>: например, плитку в стиле Microsoft Metro.Но если <table/> зафиксирована в разметке через colspan и rowspan, то CSS Grid можно делать динамической просто через CSS (`style`).Так что можно рисовать плитки разных размеров в цикле, и они сами будут распределяться по клеткам.3. HTML парсер.Изначально, в качестве эксперимента, набросал свой "быстрый" вариант HTML-парсера, который по итогу перерос в большой "хак" по мере разрастания, да и производительность вполне могла проседать.Оказывается, в каждом обозревателе есть встроенный DOMParser, которым я и воспользовался.4. React.Оказывается, React действительно очень медленный в плане рендеринга: как на сервере, так и на клиенте.Рендеринг всех тредов /vg/ занимает 4 секунды.Всех тредов /b/ — полторы секунды.Так что буду вводить постраничность.С постраничностью возникает другой вопрос: как показывать общий прогресс, потому что скроллбар уже не выступает мерилом.Есть различные решения.Например, полоска вверху (можно посмотреть на сайте Варламова).На мой взгляд, выглядит противоестественно — пользоватль листает вниз, а растёт она вправо.Можно было бы сделать такую же полоску, но сверху вниз.Идея ещё получше: справа внизу делать fixed элемент, в котором писать, сколько из скольки загружено.
>>1357514>сегодня получить сертификат бесплатно без СМС и регистрации может любой Это Wildcard certificate>делать всё, что можно сделать тегом <table/>: например, плитку в стиле Microsoft Metro.Не понимаю, есть ли у него качественные преимущества перед Bootstrap, ибо почти та же сетка.>набросал свой "быстрый" вариант HTML-парсераЕсть возможность с помощью HTML распарсить контент с собственного хостинга страницы? Так чтобы контент (текст) добавлять типовыми файлами, которые будут подхватываться и отображаться внутри элементов страницы? Вроде того как видео добавляется плейлистами.
>>1357564> Это Wildcard certificateНе понятно, что вы имели ввиду под этим."wildcard certificate" — это сертификат вида *.example.com, то есть подходящий под все поддомены.LetsEncrypt выдаёт как wildcard сертификаты, так и обычные.Вы считаете, что есть какая-то уязвимость?> Не понимаю, есть ли у него качественные преимущества перед Bootstrap, ибо почти та же сетка.Да вы чего, CSS Grid гораздо гибче.Вы не сделаете плитку в стиле Метро на сетке бутстрепа.Вы не сделаете чересполосицу на сетке бутстрепа (colspan).> Есть возможность с помощью HTML распарсить контент с собственного хостинга страницы? Вы имеете ввиду, на сайте парсить самого себя?Ну, конечно есть, что такого: CORS позволяет, можно считывать любые файлы со своего домена, и дальше уже их парсить.
Сегодня переписал систему игнорируемых слов.Изначально сделал её по аналогии с основным сайтом, когда составляется список "стоп-слов", и далее сообщение скрывается.Как выяснилось, это очень неудобный рабочий процесс: часто сообщения могут быть очень длинными (например, ОП-посты, или истории, "пасты"), и в них чисто по теории вероятности вполне может проскочить одно или два "стоп-слова".Новая реализация не скрывает сообщения, а помещает "стоп-слова" под красные спойлеры.С таким фильтром можно даже сквозь пальцы листать /po/.
>>1357564> Не понимаю, есть ли у него качественные преимущества перед Bootstrap, ибо почти та же сетка.Я понял, что вы имели ввиду: сетка бутстрепа делит страницу на 12 столбцов, и в рамках этих 12 столбцов можно делать плитку Метро и colspan, да.Но такая схема не подойдёт для "резиновой" вёрстки.Бутстреповые столбцы очень ограничены: они лучше, чем desktop-only дизайн, но в целом не идеально-резиновая технология.По-настоящему резиновая вёрстка использовала бы CSS Grid.По сути, это будет как бутстреп, только с шириной колонок, рассчитываемой во время рендеринга, а не заданной при компиляции.Я использовал сетку в меню досок слева: если посмотреть, то можно увидеть, что левый столбец имеет в точности ширину наиболее длинного URL-а доски, а второй столбец — уже оставшаяся ширина.Без CSS Grid я это делал таблицей, но это не модно.Кстати, эффекты :hover и :active пришлось сделать скриптом, т.к. по-другому их реализовать в такой конфигурации не представляется возможным.
>>1357984>Вы считаете, что есть какая-то уязвимость?Я не разбираюсь, но определенно его советуют не для бзопасности использовать, а лишь чтобы в поисковике по ранжированию не просесть и чтобы провайдер не знал куда ходишь.>Вы не сделаете плитку в стиле Метро на сетке бутстрепа.Не вижу причин, которые могут мне помешать.>Вы не сделаете чересполосицу на сетке бутстрепа (colspan).Нечто схоже могу блоками, но это же табличная фича, грид это фреймворк для таблиц? Они становятся адаптивны?>CORS позволяетПроблема в том что я не администратор хоста.Пользуюсь бесплатным хостингом для статики.Ищу возможно реализовать удобное хранение контента.С картинками проблем не имею, а вот текст в блок подгрузить не знаю как, собрался для этого учить JS.
>>1357989>"резиновой" вёрсткиНе вижу причин на сегодняшний день растягивать дизайн.Резина у меня и на ванильном хтмл получалась через вьюпорты.
>>1358061> Не вижу причин, которые могут мне помешать.Ну, по сути можете и на бутстрепе, да.Просто CSS Grid заменит все эти бутстрепы в будущем, так что можно постепенно перекатываться.На собеседованиях пригодится, как минимум.> Проблема в том что я не администратор хоста.Пользуюсь бесплатным хостингом для статики.Ищу возможно реализовать удобное хранение контента.С картинками проблем не имею, а вот текст в блок подгрузить не знаю как, собрался для этого учить JS.Ну попробуйте подтянуть через `fetch('https://...file.html').then(response => console.log(response))` в теге <script> на этом хостинге.Если в консоли будет ошибка — значит, CORS не пропустит.Если не будет — значит, можно парсить.
>>1357514Привет, слушай как вкатиться в парсинг? Хочу например что-то простое для начала спарсить, как начинал?
Две недели пилил сокращалку постов.Вот это да...Не ожидал, что будет такой запар.Возможно, я усложнил это дело.В общем, сначала строится древо частей поста, затем программа идёт построчно и смотрит, на какой строке переполняется максимальная длина поста.Смотрит длину этой последней строки: если она меньше 30% всего предыдущего текста, то убирает её, и всё, что после неё, "под кат".Если строка достаточно большая в масштабах всего предыдущего текста поста, то анализирует эту строку по частям: ищет концы предложений (". ", "? ", "! "), и пробует разбивать по этим точкам. Есть ещё неграмотные товарищи, которые в принципе не пользуются грамматикой, и для подобных случаев она просто отщипляет по максимальной длине поста и ставит троеточие.На словах звучит просто, но для меня такая алгоритмика уже не изи-мод.Всех программистов можно условно поделить на алгоритмистов и интерфейсников.Вот я скорее ко вторым, и с детства всю эту алгоритмику не понимал.>>1358087> Привет, слушай как вкатиться в парсинг? Хочу например что-то простое для начала спарсить, как начинал?Ммм, ну, вкатываться-то там особо некуда.Я хз, берётся текст, парсится в "абстрактное синтаксическое древо" (AST), и дальше уже из этого древа берётся нужная информация.Например, там, парсится какой-нибудь сайт (как в старые-добрые): скачивается страница, дальше парсером парсится как XML, а дальше уже используя "XPath" (древняя технология, но работает) информация оттуда берётся в программу.Если говорить про Node.js, то скачивание файла делается на 10 строк с помощью `http.request(url, callback)`, парсинг XML в древо — можно делать с помощью библиотеки "xmldom", а дальше уже поиск по этому древу — с помощью библиотеки "xpath".import xpath from 'xpath'import XMLDOM from 'xmldom'const document = new XMLDOM.DOMParser().parseFromString(content)const result = xpath('//path/to/data', document)Вот что-то по XPath, если надо:https://habr.com/ru/post/114772/Мне лично удобнее DOM, чем XPath, потому что XPath достаточно сложен для человека с не алгоритмическим складом, а DOM — гораздо проще, и все его уже знают.Для получения DOM-а в Node.js можно использовать библиотеку "jsdom", и там уже дальше по привычной схеме вида "document.querySelectorAll('a[href]').map(_ => _.getAttribute('href'))"https://github.com/jsdom/jsdomТакже уйма статей есть в интернетах наверняка.Типа таких: (переводы)https://frontender.info/web-scraping-with-nodejs/Там они используют тоже DOM, но в ещё более упрощённом виде (jQuery-подобный синтаксис).В общем, если интересно научиться парсить что-то, то можно начать с Node.js и парсинга HTML страниц с помощью DOM.Дальше можно попробовать XPath (потому что это более "серьёзный" способ).
>>1358087А вообще, я там выше написал когда про "xmldom" в связке с "xpath": я так смотрю, этот "xmldom" уже два года не обновлялся, так что лучше сразу смотреть на "jsdom".Так бывает: нагуглится что-нибудь, и вроде бы всё по статье, а на библиотеку уже забили, и статья уже года три как написана, и уже давно все используют что-то другое.Так что в динамичном мире яваскрипта нужно смотреть на дату статьи/ответа, и на последний релиз библиотеки.Вот статья какая-то:https://habr.com/ru/post/301426/С неё и начать советую.Там тоже используют этот "cheerio", у которого 20 тысяч звёзд на житхабе, и релиз был в конце января, так что проект живой и популярный:https://github.com/cheeriojs/cheerioПостроен на основе какого-то парсера HTML:https://github.com/fb55/htmlparser2/Если посмотреть ридми этого парсера, то можно увидеть, что у него совсем другое API: события "тег открывается", "содержимое тега", "тег закрывается".Это вторая "школа парсинга", так сказать: "SAX парсер".В отличие от "DOM-парсеров", "SAX-парсеры" парсят по чуть-чуть, и сразу обрабатывают, в то время как DOM-парсеры сначала всё считают и распарсят, а потом уже древо целиком дают.Соответственно, когда я писал программы под Java-телефоны в нулевые, там не использвались DOM-парсеры, потому что памяти оперативной, выделяемой на программу/игру, не хватало на подобную роскошь (хз, сколько там было, может быть 64 килобайта или типа того).Поэтому использовались SAX-парсеры, которые не потребляют оперативку, но и не строят "AST" (древо).Это так, просто, дед опять молодость вспомнил.
Кстати, HTML парсинг в контексте имиджборд до сих пор иногда актуален, т.к. древние движки типа iichan.hk не имеют своего API, и они даже запилили для своей доски клиент на Адроиде под названием "Сырноид", который парсит HTML "на лету".https://kerrigan.bitbucket.io/cirnoid/(не ищут лёгких путей)Ну и в сторонних клиентах типа Overchan тоже просто парсят HTML:https://github.com/miku-nyan/Overchan-Android/tree/master/src/nya/miku/wishmaster/chans/cirn>>1363932> Лучше запили имиджборду в торе, что бы можно было спокойно обсуждать наркоту и цп.Хорошая идея, на самом деле.Даркнет всё прочнее входит в нашу жизнь, смотря на то, как вокруг закручивают гайки.Там даже и монетизировать можно было бы, повесив какие-нибудь баннеры с наркотой и торговлей рабами.
Ещё вот задачка: как сформулировать надпись "Read more".По-английски я сформулировал это как "Show more" (звучит, на мой взгляд, адекватнее в данном контексте, чем Read more).Для русского были варианты: "Показать текст полностью", "Показать полностью", "Показать целиком", "Показать всё", "Читать далее", "Раскрыть".Пока склоняюсь к "Раскрыть".Мб какие-то ещё варианты есть.
Кстати, интересное наблюдение: на форчане скорость постинга очень велика, но при этом посты короткие и очень простые по синтаксису (цитата, текст, редко — спойлер).На дваче — скорость постинга гораздо спокойнее, но при этом посты "наши" любят писать "от души" — на экран, а то и на два — и проявляют много творчества при форматировании (творческая натура).
Дежурный бамп, шоб не утонул.Добавил какой-то kohlchan и какой-то 8ch (притон расстрельщиков мечетей).https://catamphetamine.github.io/chanchan/?chan=kohlchanhttps://catamphetamine.github.io/chanchan/?chan=8ch(8chan в России заблочен, открывается через Тор)Оба — на движке "vichan", который уже не разрабатывается, и копирует API форчана (с упрощениями, но при этом и с улучшениями в виде поддержки нескольких картинок на пост).Вылезла пара багов: у Кольчана почему-то расширение миниатюр — об балды, то есть для картинки JPG может быть миниатюра (ВНЕЗАПНО) вопреки всем Законам Вселенной PNG (вставить картинку с Джеки Чаном).Написал даже админу, но он сам мышей не ловит, на том оставил его в покое и просто загружаю все возможные варианты расширений картинок, и потом из них уже выбираю тот, который работает (высокая культура разработки в Восточной Европе).Ещё у vichan-а нашёлся баг, что "images": 0, даже когда в треде куча картинок, но багрепорта им уже не отправить, т.к. они закрылись, поэтому там колхозится подсчётом картинок по постам вручную.Ещё на 8chan-е узнал, что есть какой-то способ обхода блокировок РосКомНадзора.https://github.com/ValdikSS/GoodbyeDPIЭта вещь перехватывает исходящие TCP пакеты в Windows, разбивая их на части, вставляя нестандартные символы, чтобы обмануть DPI (Deep Packet Inspection, у нас на работе такую писали) на роутерах провайдера, чтобы они не засекли, что вы запрашиваете именно rutracker.org, и не ответили пакетом "сайт не найден".Подобная есть и для Linux.Драйвер называется "WinDivert".Не тестил, мне и Тора хватает.
>>1371196> Забил чтоле блять?Да не, код крутится, коммиты мутятся.Не учитывая того, что я уже пару недель как положил болт на свою основную работу (нехрен зарплату задерживать по 3 месяца), прошлую/эту неделю возился ещё с конкурсом Телеги на 125 тысяч долларов.По условиям конкурса Телеги хотел, чтобы вы написали программу на любом языке (iOS, Android, JS), суть такова: имеется массив с данными вида X, Y1, Y2, ..., и по этим данным требовалось строить интерактивные графики с YOBA-анимациями (см. прикреплённые файлы). На всё про всё давали две недели, но я, естественно, думал: "да ладно, начну на следующей неделе", "да ладно, начну на этой неделе", "да ладно, воскресенье ещё целое будет", "да ладно, целых 4 часа осталось, самое время начинать". В итоге, конечно, к концу конкурса ничё не сделал, но спать после такого интенсива не хотелось, и сидел допиливал, пока не сдался в итоге на YOBA-анимациях (я вертел, сами делайте свои анимации).По результатам запилил библиотеку, если кому интересно/надо:https://catamphetamine.github.io/chartogram/Теперь надо будет раскидывать все завтраки, которыми я две недели кормил менеджера на работе, и пилить уже интеграцию с этой платёжной системой, пока они ничего не заподозрили.
>>1357986Даю подсказку: вводишь еще одно условие - длина текста. Если есть стоп-слово и длина поста меньше заданной - скрыть.мимо-от-нечего-делать-написал-аналог-спеллов-куклоскрипта
Прикольный проект! Давай мы тебе помогать будем. И для нас полезно, и проект мы может приведем к какому-то удобоваримому виду.Пробежался по коду 5 минут, и хотелось бы отметить пару вещей, которые могли бы привлечь контрибьютеров:1) Реакт версии 16.6. Без хуков разрабатывать уже не айс.2) Нет линтера. Без него все будут коммитить в своем стиле и работать станет невозможно. Я на дух не переношу код без точек с запятой.3) Файловая структура. То, что файлы лежат в двух кучах - не ок, когда еще тесты добавятся, то будет вообще пиздец. Может рассуешь по папкам?Пока все, но это я не всматривался еще.
>>1371955> Даю подсказку: вводишь еще одно условие - длина текста. Если есть стоп-слово и длина поста меньше заданной - скрыть.> мимо-от-нечего-делать-написал-аналог-спеллов-куклоскриптаДа, это была одна из первых идей по улучшению скрытия у меня тоже, однако вскоре я понял, что это не вариант, так как даже в коротких сообщениях может быть смысл/интерес.Например, "По последним данным на 2019 год дефлятор ВВП Парагвая сосёт член".К тому же, была драма в /b/ в свой время, когда создатель ДоллЧана начал скрывать все посты со словами Крым, ДНР, ЛНР, и т.п., отчего у Абу (видимо) пригорело, и он издал указ "с завтрашнего же дня запретить доллчан во всея бе".А поскольку я собираюсь питчить данный проект Самому, то лучше не гневать.
>>1371955> Даю подсказку: вводишь еще одно условие - длина текста. Если есть стоп-слово и длина поста меньше заданной - скрыть.Аналогично, в /sn/ бывают пасты на два экрана, в которых проскакивает пара матов, которые там к месту, но из-за скрытия такие пасты полностью скрывались бы, что не вариант.В общем, мой вариант скрытия лучше по всем параметрам.
>>1372123> Прикольный проект! А будет ещё прикольнее.> Давай мы тебе помогать будем.Ну, хз, можно посмотреть, как пойдёт.Я художник и я так вижу, поэтому у меня право вето.> И для нас полезноУ вас есть возможность поучиться у квалифицированного разработчика.> , и проект мы может приведем к какому-то удобоваримому виду.Я его и сам приведу, но если хотите поучиться — попробуйте.> Пробежался по коду 5 минут, и хотелось бы отметить пару вещей, которые могли бы привлечь контрибьютеров:> 1) Реакт версии 16.6. Без хуков разрабатывать уже не айс.Не нужны эти ваши новомодные фичи.Вы ещё молодые, вам всё весело — хуки, хуюки...Я вам говорю, не стоит вскрывать эту тему.Но вы, пока шишек своих не набьёте, не поймёте.> 2) Нет линтера. Без него все будут коммитить в своем стиле и работать станет невозможно. Ну, вообще да, можно было бы. Можете запушить, я просто в линтерах всяких не разбираюсь, куда там чего.> Я на дух не переношу код без точек с запятой.У меня весь код без точек с запятой (был, есть и будет).Я ещё раньше писал не в camelCase и на русском языке, так что вы ещё не видели всего в этой жизни.> 3) Файловая структура. То, что файлы лежат в двух кучах - не окСказывается недостаток опыта у негодующего — как раз таки такая структура файлов в серьёзных проектах.> , когда еще тесты добавятся, то будет вообще пиздец. Может рассуешь по папкам?А может ты себе по анусу рассуёшь?> Пока все, но это я не всматривался еще.пёс
>>1372123Есть две задачки: одна — про голосовалку политачевскую, вторая — про посты отправляемые. Какую сами возьмёте, а какую другим оставите?Голосовалка:Я уже прикрутил кнопки репутации в /po/, но они ничего не делают.https://catamphetamine.github.io/chanchan/po/В файле ThreadComment.js есть метод `.onVote()`.Можно: проследить, что делает 2ch.hk при голосовании, и слать такой же HTTP запрос.Также в localStorage хранить массивы upvotes и downvotes, которые отображать при показе постов ("свои голоса": плюсовал или минусовал данный пост, может ли голосовать или уже голосовал).Ограничить массив по длине, чтобы не переполнил localStorage.Документацию по API — добавить в 2ch/API.mdhttps://github.com/catamphetamine/chanchan/blob/master/docs/2ch.hk/API.mdПостинг:Я уже прикрутил кнопку "ответить", но она ничего не делает.В файле ThreadComment.js есть метод `.onReply()`.Можно: прочитать доки Гугловой РеКапчи; проследить, что делает 2ch.hk при голосовании, и слать такой же HTTP запрос.Также в localStorage хранить массив comments, который отображать при показе постов ("свои посты": помечать свои посты в треде).Ограничить массив по длине, чтобы не переполнил localStorage.Второй массив сделать: "trackedThreads".Это будет задел для трекера тредов.Документацию по постингу — добавить в 2ch/API.mdhttps://github.com/catamphetamine/chanchan/blob/master/docs/2ch.hk/API.md
Сам я допиливал свои графики для конкурса Телеги.Накрутил немного YOBA-анимаций:https://catamphetamine.github.io/telegram-charts-contest/По Андроиду уже объявили результаты, какой-то 25-летний парень из Петрограда получил $50k. Вот это заработок в интернете... В общем, Павел Дуров по-братски там отсыпает, всего человек 20 на Андроиде вроде бы в призёрах.Новый конкурс обещают уже на выходных, так что мб будет интересно.
А вообще, мне надо бы уже сделать "бесконечную прокрутку" для постов и тредов, а не показывать весь список сразу, чем я и займусь в качестве следующей фичи.Вот приоритетный список фичей:Add "infinite scroll" (streaming) for loading threads and posts.Add message posting.Add thread watching.Add thread auto-update.Add "favorite" boards list.Add dark mode.Add a non-default theme.Хз, успеем ли до лета.Желательно.
Зашёл тут в /po/ потестить лайки, и увидел тред про некую вайпалку, ссылки на которую запрещено постить здесь, и которая выложена на житхабе.Интересная программа, да... На питоне написана, с примесью C++ для GUI, и даже содержит три аниме-помощницы на выбор.Автор оказался хорош: я его спросил пояснить за коды ошибок, и ему было не лень расписать мне всё в деталях, поэтому я обновил документ с API.Добавлены разделы:Постинг: https://github.com/catamphetamine/chanchan/blob/master/docs/2ch.hk/API.md#%D0%BF%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B3Голосование: https://github.com/catamphetamine/chanchan/blob/master/docs/2ch.hk/API.md#%D0%B3%D0%BE%D0%BB%D0%BE%D1%81%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5Анон, возжелавший принять участие: можете воспользоваться этой документацией.Я сам пока ещё позадрачиваю мелкие доделки, ближе к маю мб возьмусь за постинг.Конкурс Павла Дурова номер 2, кстати, начался в субботу, и там слишком YOBA-анимации и YOBA-фичи, и дают всего неделю на этот раз, но призовой пул снова $150k.Интересное предложение, но принимать участия в нём я, конечно же, не буду.Чего ещё прикрутил...Добавил навигацию по просматриваемому видео стрелками влево-вправо, паузу пробелом, mute/unmute по клавише M, fullscreen по клавише F (всё это — как для .webm, так и для youtube)
По мотивам дискуссии в /d/ https://2ch.hk/d/res/421281.html#630545 набросал раскрытие ответов к постам в стиле Реддита (он же Пикабу).Прикрепляю скришоты того, как это выглядит.На первой картинке — когда ответы не раскрыты.На второй картинке — когда одна ветка ответов раскрыта.На третьей картинке — когда раскрыта глубокая ветка ответов.Посмотреть вживую можно всё там же, на демо-сайте:https://catamphetamine.github.io/chanchan/Также нажимаются полоски древа ответов (они работают как кнопка скрытия ветки).