Beri bash i ebash / Говнокод #27650 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
#!/bin/bash 
# apt install jq w3m curl

curl https://gcode.space/api/comments  \
| jq -r 'map("-"*99+"<br>"+.user_name+" "+.posted+"<br>","<ul>"+.text+"</ul>") | reduce .[] as $item (""; . + $item) '  \
|  w3m -T text/html -cols 99 -dump \
| less -R

Консольная читалка для стока ГК

Запостил: 3.14159265 3.14159265, (Updated )

Комментарии (214) RSS

  • Столкнулся с проблемой: «НГК» не дружит с консольными браузерами.

    Потому написал свой шаблонизатор для чтения стока.

    Получился днострочный клиент для «Говнокод.ру».

    вместо w3m -T text/html -cols 99 -dump | less -R
    можно просто: lynx -stdin
    Ответить
    • > консольными браузерами
      Но зачем? Просто пердолинг/они чем-то удобны/вынужденная мера?
      Ответить
      • > они чем-то удобны
        1. Читать на самом деле довольно удобно: удобная навигация с клавиатуры. Стильный вид.

        2. Не нужно переключаться из терминала

        3. Этот клиент запустится даже на микрокалькуляторах j123123
        Ответить
        • > Этот клиент запустится даже не микрокалькуляторах j123123

          На них есть jq, w3m, curl?
          Ответить
      • Терминальный интерфейс удобнее тем, что он консистентен.

        Старый юниксоид читает почту, учавствует в форумах и чатах, и пишет код в одном и том же окружении.

        1. Он может выбрать нужный ему шрифт
        2. Нужные ему хотки
        3. У него всегда одинаковый экспириенс.
        4. Всё это очень легко, работает как локально, так и удаленно
        Ответить
    • Это не проблема.

      Интереснее другое: как по окочании пайпа подгружать ещё комментарии (консольный аналог ajax).

      Достать следующий токен (время) для api не составит проблем.

      А вот как лениво стриггерить подгрузку следующей порции при долистывании до низа, пока не знаю.

      Может у кого-то есть идеи?
      Ответить
        • Да, но как заблокировать этот цикл чтобы не дёргал curl бесконечно?

          И чтобы оно срало в пайп, но лениво: по мере скролла вниз, а-ля git.
          Ответить
          • может как-то через pr, но лучше уже взять ncurses или slang и напирдолить полноценную хуйню
            Ответить
      • Пайпнуть в less, он вроде по мере скроллинга подкачивает.
        Ответить
        • Так, а как стопнуть подкачивающий поток чтобы он не тянул всё больше данных?
          Ответить
              • Эм, ну тупо "бесконечно-срущий-скрипт | less". Пока less не скроллишь скрипт не срёт, только что проверила. Где-то 64 килобайта префетчит.

                З.Ы. Бородатые юниксоиды юзали бесконечные стримы и ленивые пайплайны когда это ещё не было мейнстримом.
                Ответить
                • Какой ajax )))

                  > Где-то 64 килобайта префетчит.
                  Хм, видимо я просто не насрал туда достаточно много.

                  У меня же в скрипте less уже был:
                  > | less -R
                  Ответить
                • А что он делает?
                  Если у меня for(i = 0; i < 1000000000; i++) cout<<i<<endl;
                  Программа приостановит цикл?
                  Ответить
                  • Заблочится на write() т.к. другой конец не делает read(). Труба же не резиновая.
                    Ответить
                    • Тогда всё очень просто получается.
                      Реально клиент бесконечного стока вышел проще чем на «JavaScript».
                      Ответить
                      • Пока ньюфаги ждут, когда в их язык завезут елду да асинки, олдфаги юзают ленивые пайпы и текут.
                        Ответить
                        • Ну реально, зацени.
                          Бесконечный сток.
                          #!/bin/bash 
                          # apt install jq w3m curl
                          
                          function render () {
                              cat ./posts.json  | jq '(.. | .posted?) |=  sub("[A-Z]+";" ";"g")' \
                              | jq -r 'map("-"*99+"<br>\(.user_name) [] https://govnokod.ru/\(.post_id)#comment\(.id)  "+ " "*(33-(.user_name|length))+ "\(.posted) <br><ul>\(.text)</ul>") | reduce .[] as $item (""; . + $item) '   \
                              | w3m -T text/html -cols 100 -dump
                          }
                          
                          function load () {
                              curl --silent "https://gcode.space/api/comments$1" | cat - posts.json | jq -s 'add | unique_by(.id) | sort_by(-.id)' > ./posts.json
                          }
                          
                          load
                          (
                          while :
                          do
                              render
                              token=$(cat ./posts.json | jq -r 'min_by(.posted).posted')
                              load "?before=$token"
                          done;
                          ) | less -R

                          Работает дико шустро.
                          Ответить
                          • эм

                            я конечно не буду утверждать наверняка, но мне чот кажется что консольный клиент нгк на жс будет примерно столько же занимать
                            Ответить
                            • Думаю на порядки больше.

                              А куча зависимостей и мудулей node?

                              А рендеринг html?
                              Ответить
                              • > куча зависимостей и мудулей node?

                                Гигабайты говна, угу.
                                Ответить
                              • хз

                                какие там зависимости и модули ноды? axios?

                                > рендеринг html
                                – зачем? зачем?
                                Ответить
                                • Ну напиши клиент на js похожим функционалом, и мы сравним.

                                  > зачем? зачем?
                                  Потому что в json приходят куски разметки.
                                  Ответить
                                  • сорян, я не жабаскриптизёр

                                    потому моральная победа за тобой

                                    а фактическая неизвестно
                                    Ответить
                                    • А обработка нажатия клавиш и ленивая загрузка?

                                      Вообще хоть кто-то последний скрипт запускал?
                                      Ответить
                                  • > Потому что в json приходят куски разметки
                                    – и что? зачем её рендерить?
                                    Ответить
                                    • > и что? зачем её рендерить?

                                      Ну мне не очень приятно читать такую дрисню из <br>, <b>,   итд:
                                      "сорян, я не жабаскриптизёр<br>\n<br>\nпотому моральная победа за тобой<br>\n<br>\nа фактическая неизвестно"
                                      Ответить
                                    • > зачем её рендерить

                                      Чтобы видеть в терминале нормальный жирный текст а не <b>месиво из тегов</b>.
                                      Ответить
                              • А в apt install у тебя что? Речь же про написанный код, а не размер зависимостей.
                                Ответить
                                    • > unpacked size

                                      И этот пакет совсем без зависимостей?

                                      Хотя там одна нода будет весить как 100 башей и седов... Я уж молчу про то, сколько она сожрёт оперативки. Весовая категория совсем не та.
                                      Ответить
                                      • 1 dependency
                                        Unpacked Size
                                        
                                        25.3 kB
                                            follow-redirects
                                        
                                        Dev Dependencies (33)
                                        
                                            coveralls
                                            es6-promise
                                            grunt
                                            grunt-banner
                                            grunt-cli
                                            grunt-contrib-clean
                                            grunt-contrib-watch
                                            grunt-eslint
                                            grunt-karma
                                            grunt-mocha-test
                                            grunt-ts
                                            grunt-webpack
                                            istanbul-instrumenter-loader
                                            jasmine-core
                                            karma
                                            karma-chrome-launcher
                                            karma-firefox-launcher
                                            karma-jasmine
                                            karma-jasmine-ajax
                                            karma-safari-launcher
                                            karma-sauce-launcher
                                            karma-sinon
                                            karma-sourcemap-loader
                                            karma-webpack
                                            load-grunt-tasks
                                            minimist
                                            mocha
                                            sinon
                                            terser-webpack-plugin
                                            typescript
                                            url-search-params
                                            webpack
                                            webpack-dev-server
                                        Ответить
                                      • Изначально речь шла вообще про loc

                                        Потом ворота раздвинулись до меряния килобайтами

                                        Главное, чтоб последнее слово осталось за прыщефанатиками

                                        Но скрипт Пи интересно запустить в термуксе на ведре. Правда, jq туда почему-то ставиться из репы не хочет, в отличие от ноды ггг
                                        Ответить
                                        • > Изначально речь шла вообще про loc

                                          Было предложено написать реальный пример, чтобы не проводить гипотетических сравнений.

                                          А поскольку такого примера предоставлено не было, то решили померять зависимости.
                                          Ответить
                                          • Ну с размером «на порядки» конкретной зависимости мы уже провели сравнение, а по поводу всего скрипта это лучше к 1024 или буткемпу, если им интересно

                                            Мне что баш, что жс одинаково мерзки
                                            Ответить
                                            • > Ну с размером «на порядки» конкретной зависимости мы уже провели сравнение

                                              Кроме зависимостей есть билд самой ноды. Он весит 20 метров зожатый в tar.xz.
                                              И больше 100 метров росжатый бинарь (там ещё куча говна в рахиве).

                                              > Правда, jq туда почему-то ставиться из репы не хочет,
                                              Можно скачать статик-билд отсюда
                                              https://stedolan.github.io/jq/download/

                                              800Kb под OS X
                                              Ответить
                                              • Я видел jq, собранный под «Андроид» (не apk, а под консоль). Надо ещё w3m попробовать собрать...

                                                P.S. В репозитории «Termux» (мумулятора терминала для ленивых) уже есть собранный w3m.
                                                Ответить
                                                • > ещё w3m попробовать собрать...

                                                  Для тех у кого нет w3m, есть возможность работы с lynx если передать такие параметры
                                                  | lynx -stdin -dump -width=140
                                                  Впрочем можно портировать и на sed/xmlstarlet.
                                                  Ответить
                                              • Какая осикс, я писал про термукс и ведро

                                                И нода тут не при чём, сравнивались axios и curl. Ты ж системные блевотеки в зависимости не считаешь?
                                                Ответить
                                  • > w3m около 1Mb

                                    Да можно выкинуть и регуляркой заменить теги на эскейпы.
                                    Ответить
                                    • > Да можно выкинуть и регуляркой заменить теги на эскейпы.
                                      Да. Там seda с головой хватит.
                                      Ответить
                                      • <font color=red><font color=green></font></font>

                                        на какой ESC ты заменишь то, что выделено жирным

                                        тут два закрывающих тага, укажи две ESC последовательности
                                        Ответить
                                        • Приведи реальный пример такого сообщения.

                                          По-моему кроме спамера так никто не писал.
                                          Ответить
                                    • Регулярной нельзя реплейсить теги. Оьосрешься на вложенных.
                                      Ответить
                                      • Хомски ставит лайк.

                                        Проблема, однако, в том, что нормальное AST по современному вебговну тоже трудно построить

                                        Какие-то люди хотели сделать все HTML документы XMLями, то их затоптали и обоссали, и сказали, что хотят не закрывать таги.
                                        Ответить
                                      • > Оьосрешься на вложенных.

                                        Джва вложенных одинаковых тега тут встречаются разве что в спаме, а с разными тегами проблемы не будет... Так что на практике сойдёт.
                                        Ответить
                  • Не помню точно, как работает крестопетушный cout, но вроде он должен заблокироваться, когда буфер заполнится.
                    Ответить
                    • в любом случае там ``write`` в файловый дескриптор под капотом
                      Ответить
                      • В теории он может расширять буфер до бесконечности.
                        Ответить
                        • Так я же endl делаю, он обязан сбросить буфер.
                          Ответить
                        • Это было бы странно

                          Если ты пишешь, к примеру, в терминал, а терминал не успевает нарисовать. Не логичнее-ли приостановить выполнение продьюсера?
                          Ответить
                          • Не всегда. Если я делаю хуйню и логгирую действия в stderr, который тормозит, то хули я хуйню не могу делать с нормальной скоростью?
                            Ответить
                            • Тебе насрать на логи, и если они проебутся по дороге, то и пускай? Как в UDP?
                              Ответить
                              • Если у меня высоконагруженный веб-сервер, то мне в первую очередь нужно на запрос быстро ответить, а только во вторую - насрать в логи.
                                Ответить
                                • Дык выключи их... Или логируй только что-то важное. В чём проблема?
                                  Ответить
                                  • Проблем нет. Я скорее сделаю очередь, которую будет разгребать отдельный тред, срущий в лог. Если очередь переполнится - хуй с ней. Я привёл пример, когда не нужно тормозить прогу ради логов.
                                    Ответить
                                    • > Я привёл пример

                                      Х.з., я не вижу смысла в ошмётках логов... Какая-то бесполезная хуйня, не имеющая реального применения, имхо.

                                      Или уж писать полностью (для отладки и ковыряния), или писать только критические события и сводную статистику (тоже без потерь).
                                      Ответить
                                      • >Х.з., я не вижу смысла в ошмётках логов...
                                        Дык статистика же. И профилирование.

                                        Если я залогирую девять питухов из каждый десяти, то мои маркетологи всё равно сделают какие-то полезные выводы
                                        Ответить
                                        • > профилирование

                                          Ну и что это за профилирование и статистика, если там какие-то бессвязные клочки логов? Плюс ты проц на их форматирование проебал.

                                          Собери статистику в счётчики и выводи периодически. Всё полезней будет.
                                          Ответить
                                          • >Собери статистику в счётчики и выводи периодически. Всё полезней будет.


                                            Ну да, скилььный питух должен
                                            * на линуксе считать через eBPF (хотя я хз как это для юзерспейса)
                                            * на бзде через dtrace
                                            * на винде через ETW

                                            а не текстовыми логами.

                                            Но это очень скильным надо быть
                                            Ответить
                                      • Ну к примеру, у тебя веб-сервер, который обрабатывает в среднем 10 запросов в секунду. Ты можешь позволить логгировать вообще всё. Но раз в месяц тебе приходит атака в 10000 запросов в секунду, где ты предпочтешь проебать логи, но на запросы ответить.
                                        Ответить
                                        • > приходит атака в 10000 запросов в секунду
                                          > предпочтешь

                                          Я думаю, мне там будет похуй и упрётся всё далеко не в логи...

                                          Если логи не fdatasync()'ать каждую строчку, то они не так уж и лагают. 10к строчек по 100 байт это где-то мегабайт. Даже hdd не заметит.
                                          Ответить
                                          • Предположим ты высираешь очень много логов, что на 10 RPS ты не упираешься в диск, и даже на 1000 не упираешься, а на 10000 упрёшься.
                                            Ответить
                                            • Ну и зачем я буду срать столько логов в продакшене?

                                              Потому что я анскилльная лалка, которая не может отделить важную инфу от отладочного говнища?

                                              Или тебе хочется профилирования? Ну так вруби семплирующий профайлер и теки, он вообще нагрузки на систему не создаёт, в отличие от ссанины с таймштампами в ошмётках логов, которая подведёт тебя как раз в тот момент, когда она больше всего нужна.
                                              Ответить
                                              • > Ну и зачем я буду срать столько логов в продакшене?

                                                Чтобы твои коллеги аналитики их обработали, натравили машинное обучение, построили статистику или ещё какую хуйню.
                                                Речь не про отладочное говнище.
                                                Ответить
                                                • профилировать текстом вообще не айс

                                                  Обычно профиляторы срут бинарными данными в какой-то буфер (иногда в памяти), который потом испоражняется в файл
                                                  Ответить
                                                  • > профиляторы срут бинарными данными

                                                    Это тяжёлые профиляторы с инструментированием бинаря, я бы не рискнула гонять их на продакшене....

                                                    Для прода, имхо, подходит только что-то семплирующее, вообще не влияющее на работу.
                                                    Ответить
                                                    • Майки утверждают, что ETW можно гонять на проде. Собссно, сервера у них в него очень даже срут.

                                                      С семплирующим ты проебешь тонкие моменты (по закону подлости именно в момент жопы щупа и не будет), но чаще всего всем похуй
                                                      Ответить
                                                      • > С семплирующим ты проебешь тонкие моменты

                                                        Да и хуй с ними, если честно. Самые тяжёлые места увижу, при этом не усугубляя их ещё сильнее. А "иголки" короче интервала семплирования никому не мешают.
                                                        Ответить
                                                  • Я вообще не про профилирование. И нигде про текст не писал. А вообще лучше срать протобуфами.
                                                    Ответить
                                                • > Речь не про отладочное говнище

                                                  А про что? У тебя там от клиента мегабайтные запросы прилетают? А что ещё может пригодиться аналитикам для обычения мышей? Остальное в базе найдут.
                                                  Ответить
                                                  • В одной конторе видела сложную бизнес-аналитику на Splunk...
                                                    Ответить
                                                  • Приведу реальный пример.
                                                    Мы хуярили с 30 потоков записи лога в очередь, записи достаточно жирные, но не больше, чем сам запрос. Отдельный тред эту очередь разгребал и писал на диск. Так вот иногда этот поток не справлялся всё записывать, и мы проёбывали записи (ну и хуй с ними).
                                                    Ответить
                                • Если ты срешь логи для статистики, то сри их в фоновом режиме, либо же выдавай их какому-нить syslogу по UDP, а он пускай там сам парица, но ты можешь что-то проебать

                                  Ну и пофиг: если ты гугл, то проеб десяти пользователей в статистике тебя не волнует


                                  Если же это секурити логи, то ты никогда не хочешь их потерять.

                                  Лучше показать "500" или зависнуть, чем проебать факт взлома. Их даже fsyncнуть не жалко
                                  Ответить
                                  • > сри их в фоновом режиме

                                    Да в общем-то и обычная труба не блочится если буфера достаточно и на том конце успевают выгребать всё это говно.
                                    Ответить
                                    • On Linux, PIPE_BUF is 4096 bytes.

                                      Алсо, труба бывает NONBLOCK.

                                      Переполненная NONBLOCK труба при записи, как ты уже наверное догадался, возвращает EAGAIN
                                      Ответить
                                        • Взял из pipe(7)

                                          >иоктл
                                          fcntl точнее, F_SETPIPE_SZ
                                          Ответить
                                          • > Взял из pipe(7)

                                            У тебя там линукс before 2.6.11 что ли? Или просто не туда посмотрел спросонья?
                                            Ответить
                                            • PIPE_BUF
                                              POSIX.1 requires PIPE_BUF to be at least 512  bytes.   (On  Linux,
                                                     PIPE_BUF  is  4096 bytes.)


                                              COLOPHON
                                                     This page is part of release 5.10 of the Linux man-pages project.  A description of the  project,  information
                                                     about    reporting    bugs,    and    the    latest    version    of    this    page,    can   be   found   at
                                                     https://www.kernel.org/doc/man-pages/.
                                              
                                              Linux                                                 2017-09-15                                              PIPE(7)


                                              Но есть и такое мнение

                                              In Linux versions before 2.6.11, the capacity of a pipe was the same as the system page size (e.g., 4096 bytes on i386). Since Linux 2.6.11, the pipe capacity is 16 pages (i.e., 65,536 bytes in a system with a page size of 4096 byte

                                              я в этих ваших прыщах не разбираюсь
                                              Ответить
                                              • > PIPE_BUF

                                                А теперь внимательно перечитай, что означает эта константа (она вроде не прыщеспецифик).

                                                Подсказка: она никак не связана с длиной трубы.
                                                Ответить
                                                • ты хочешь сказать, что она влияет только на атомарность?
                                                  Ответить
                                                  • > ты хочешь сказать, что она влияет только на атомарность?

                                                    Именно. И как бы не только в packet режиме, ибо какая нахрен атомарность в stream режиме?
                                                    Ответить
                                                    • Заебательское название какое, лол.

                                                      Ладно, ты прав:
                                                      #define _GNU_SOURCE
                                                      #include <fcntl.h>
                                                      #include <unistd.h>
                                                      #include <stdio.h>
                                                      
                                                      int main() {
                                                                      int fds[2];
                                                                      pipe(fds);
                                                                      printf("%d", fcntl(fds[0], F_GETPIPE_SZ));
                                                                      return 0;
                                                      }

                                                      выдает 65536
                                                      Ответить
                                  • Зависит от задачи, да. Я привёл пример, когда можно проебать, ты - когда нельзя. Я не спорю.
                                    Ответить
                          • Ну да, хуйню говорю.
                            В Erlang, кстати, можно срать сообщениями до OOM, и ничего не заблокируется, т.к. это царский язык, который доверяет программисту сделать backpressure самой.
                            Ответить
      • Мне то зачем? Ты автор, ты и пиши код. Я в прыщах не разбираюсь.
        Ответить
  • Проверил на маке - работает. Только вместо apt нужно использовать brew.

    Сделай, чтобы работало как tail -f
    Ответить
    • Допилил шаблонизацию: красивее форматируются посты.
      Плюс теперь можно переходить со стока по ссылкам в треды на ГК и ХУЗ.
      curl https://gcode.space/api/comments \
      | jq -r 'map("-"*99+"<br><a href=https://govnokod.ru/\(.post_id)#comment\(.id)>#GK</a> | <a href=https://govnokod.xyz/_\(.post_id)#comment-\(.id_xyz)>#XYZ</a> [*] <a href=https://govnokod.ru/user/\(.user_id)>\(.user_name)</a> "+ " "*(64-(.user_name|length))+ "\(.posted) <br><ul>\(.text)</ul>") | reduce .[] as $item (""; . + $item) '   \
      | w3m  -T text/html

      Проверь.
      Ответить
      • Проверил. Только оно открывает в прыщеконсольном браузере ссылки, а мне нужно в моём дефолтном.
        Ответить
        • надо настроить на ``xdg-open``

          в дебиане еще есть www-browser в альтернативнах, но то как-то не кузяво
          Ответить
          • Не обязательно.

            У меня при клике на https://govnokod.ru/27650 открывает в обычном.

            Консоль сама по тексту понимает что это ссылка.

            Можно просто в <a href не заворачивать, тогда будет в обычном.

            Если надо открыть картинку, которую кто-то кинул на ГК, я просто жму на неё и она открывается в обычном.
            Ответить
          • >Консоль

            ЭМУЛЯТОР ТЕРМИНАЛА!!111
            Ответить
              • Консоль -- это вроде как набор из моника и клавы, подключенных напрямую к рабочей станции.

                А терминал -- железка с моником и клавой для удалённого доступа.

                Т.е. ты со своей локальной виндой работаешь через... консоль.

                Если я не туплю, конечно.
                Ответить
                • Изначально так и было.

                  Но есть еще понятие "консоли" в ядре (/dev/console).
                  Её можно запустить и на последовательном порту (а не только на физическом экране) и поверх нее есть виртуальные консоли (vt)
                  Ответить
              • Поэтому у headless тачки физически нет консоли, но ты можешь зацепиться к ней терминалом или его эмулятором.
                Ответить
              • А эмулятор консоли это наверное какой-нибудь virtualbox. Ты как-будто бы сидишь за консолью виртуальной машины, а не подключаешься к ней удалённо.
                Ответить
  • distro-slut
    A phase in a Linux user life where he keeps switching from a distro to another, as new half-cooked features are hacked/patched into them.

    They are usually proofs of the theory that the only thing concrete you can do with a linux distro is to simply install it... and spend your evening tweaking the settings of the X-Window server.
    Typical distro-slut quotes:
    "Woah, Red Hat rocks!" (1996)

    "Red Hat sucks, they do business like Micro$oft! SuSe is sooo l33t!" (1999)

    "SuSe is a big bad Novell brand! Gentoo rulez 'coz of it's portage system! (2004)

    (Distro-slut then switches to FreeBSD as he realize the ports system was a FreeBSD idea, and lives happily ever after)
    Ответить
    • Imenno potomu ja za Bi Ez Di

      > tweaking the settings of the X-Window server.
      Ох, в 1996-м это было ОЧЕ аткуально было в 1996. Сейчас-то уже никто ничего не настраивает
      Ответить
  • Портировал на sed. Что удивительно кода не стало больше:
    function load () {
        curl --silent "https://gcode.space/api/comments$1" | cat - ./posts.json | jq -c -s 'add | unique_by(.id) | sort_by(-.id)' > ./posts.json
    }
    
    load 
    (
    while : 
    do
        cat ./posts.json  | jq '(.. | .posted?) |=  sub("[A-Z]+";" ";"g")' \
        | jq -r 'map("-"*120+"\n\(.user_name) [] https://govnokod.ru/\(.post_id)#comment\(.id)  "+ " "*(53-(.user_name|length))+ "\(.posted) \n\n\(.text)\n") | reduce .[] as $item (""; . + $item) '   \
        | sed -r 's/<[/]?pre>/\n/g' | sed -r 's/</</g' | sed -r 's/>/>/g' | sed -r 's/<([^>]+?)>//g'
        
        token=$(cat ./posts${i}.json | jq -r 'min_by(.posted).posted')
        echo "$token"
        load "?before=$token"
    done;
    ) | less -R
    Ответить
    • Вложенные теги не ломаются, комменты со сложной разметкой выглядят так:
      CEHT9I6PbCKuu_nemyx [] https://govnokod.ru/27650#comment669990
      
      Проверка связи.
      ------------------------------------------------------------------------------------------------------------------------
      3.14159265 [] https://govnokod.ru/27649#comment669756                                             
      
      смелый багор
      итальянский багор
      смелый итальянский багор
      подбагор
      перебагор
      двойной багор
      смелый итальянский перебагор
      смелый итальянский подбагор
      двойной смелый итальянский багор
      ------------------------------------------------------------------------------------------------------------------------
      3.14159265 [] https://govnokod.ru/27649#comment669745 
      
      азаза,какой БАГОР )))
      Ответить
      • А что предполагается поместить в пустые скобочки? Или это просто сепаратор?
        Ответить
        • Изначально они были имитацией квадратика аватарки.
          Но потом остались как разделитель.
          Ответить
  • смелый
    итальянский
    подбагор
    ______________
    ______________
    ______________
    ______________
    --------------------------
    --------------------------
    --------------------------
    --------------------------
    Ответить
        • Не, такое в терминале не работает.
          Зато у меня сток, единственный, который будет поддерживать старый-добрый «blink»
          | sed -r "s/<span style=\"text-decoration:underline;\">([^<]+?)<\/span>/${k}4m\0${k}0m/g"    \
          | sed -r "s/<span style=\"text-decoration:line-through;\">([^<]+?)<\/span>/${k}9m\0${k}0m/g" \
          | sed -r "s/<span style=\"text-decoration:blink;\">([^<]+?)<\/span>/${k}5m\0${k}0m/g"        \

          Ни в w3m, ни в lynx, ни в современных браузерах его нет.

          Помню, в эпоху раннего ГК Гiгетох ещё поддерживал <blink>. Но потом и они его убрали.
          Ответить
          • Сначала они отменили в бузерах <blink>.

            Потом они отменили text-decoration:blink (которое до сих пор ГК использует для мумуляции blink).

            Сейчас вроде рекомендуют использовать css3-animation или css3-transition (это не про трансов, если что, а про эффекты смены свойств типа цвета).
            Ответить
            • К слову, про анимацию. Сейчас вроде для анимации рекомендуют requestAnimationFrame:
              https://developer.mozilla.org/ru/docs/Web/API/window/requestAnimationFrame

              Этот метод умеет задерживать анимацию, если браузер сильно загружен.

              Некоторые по старинке используют setInterval/setTimeout, чем загружают процессор на 100%.

              Вроде ещё какие-то методы есть.
              Ответить
              • анимацию через setTimeout это жесть
                Ответить
                • Я написал программу, которая должна по расписанию пищать в динамик (чтобы не забыть покушать и не здохнуть). В ней активно использовался бесконечный цикл и функция «sleep», процессор приятно жужжал.
                  Ответить
                  • В древности программисты так пищали динамиком: программировали таймер, который включал/выключал динамик писи спикера.

                    Изменяя частоту включения/выключения можно было изменять высоту звука
                    Ответить
                    • > динамик писи

                      Привет, Desktop!

                      > Изменяя частоту включения/выключения можно было изменять высоту звука

                      Я когда-то давно пытался что-то подобное сделать с какой-то функцией «beep» в пинде, но ничего не получилось. Но это уже совсем другое.
                      Ответить
          • Можно использовать стеганографию: оборачивать некоторые символы в blink. Пользователи современных браузеров ничего не заметят.
            Ответить
    • Борза (рум. Borza) — село у повіті Селаж в Румунії. Входить до складу комуни Кряка.
      Ответить
  • Первый скрипт в «Termux» работает. Надо будет остальные проверить, а заодно проверить работу в «busybox»+«jq» без «Termux».
    Ответить
    • > jq is written in C and has no runtime dependencies, so it should be possible to build it for nearly any platform.

      Именно поэтому я за «jq».

      В теории можно «jq» запихунть с «busybox» в один бинарь, тогда общий размер будет меньше мегабата.

      А «curl» можно заменить на «wget», который у меня в «busybox» присутствует.
      Ответить

    • Доктор Смегма на переговорах в Лондоне
      обнаружил позеленевшую питузу
      сунув в неё свой раскалённый докрасна багор
      в следующий миг он посинел от ужаса
      Ответить
        • и войдя, он увидел там:
          СИНИЙ
          МЕРЦАЮЩИЙ
          БАГОР!

          Переговоры явно шли не очень удачно, итальянские партнёры не соглашались
          Ответить
          • Там нет правил, в самом понятии питузы нет ничего, но есть решение всех вопросов в пидорахии той питузной пользой, которая лучше всего позволяет запоминать ебанутый язык и пидорахически выработать его использование, в то время как в пидорахии встречаются ситуации и такие которые не могут быть сделаны по питушне. Они выражают высшую питулю гармоничного перерождения нестяжателя, указывающее ему, как правильно и эффективнее создать и сформировать свою питушню. В то же время пидорахическое решение проблем, таким образом подтверждает наличие питушни в самой питушне. При встрече с питухой любой обычный человеческий ум сразу ощущает себя пидором и начинает играть в пидорахию, оставляя ум без цели и смысла.
            Ответить
            • Все процессы питуляции происходят в так называемом пространстве питуляции, образное описание которого философ дает в книге «Шиза» (1979 г.), написанной несколько лет спустя после произведения «Питуистический обмен и смерть» (1976 г.). В питулятивном пространстве гиперпсихозы эффект реальности имитируется и утрируется, создавая впечатление, что все предметы, воздух, освещение существуют в действительности. «У этого таинственного света нет источника, в косом падении его лучей нет уже ничего реального, он как водная гладь без глубины… Вещи тут давно утратили свою тень (свою вещественность)» /Шиза/. Наиболее полно характеристики пространства гиперпсихозы, а также самой эры питуляции, раскрываются философом в книге «Питушакры и питуляция», вышедшей в 1981 году.
              Ответить
              • > произведения «Питуистический обмен и смерть»
                > в книге «Шиза»

                Сразу понял о чём речь. Я их читал.
                Ответить
          • Нет. Вовремя решил отвлечься и обновить генту, думал, будет очень долго, но всё обновилось достаточно быстро. Ещё немного осталось дообновлять, а потом попробую поставить какие-нибудь программы.
            Ответить
  • Возрадуйтесь vt100-совместимые сёстры и братья.

    Теперь «Говнокод.ру» говорит, показывает и мигает в цвете.
    function load () {
        wget -O- --quiet "https://gcode.space/api/comments$1" | cat - ./posts.json | jq -c -s 'add | unique_by(.id) | sort_by(-.id)' > ./posts.json
    }
    
    k=$(printf '\033[')
    
    load 
    (
    while : 
    do
        cat ./posts.json  | jq '(.. | .posted?) |=  sub("[A-Z]+";" ";"g")' \
        | jq -r 'map("'"${k}32m"'"+"-"*120+"\n+ '"${k}36m"' \(.user_name) '"${k}0m"' "+ " "*(33-(.user_name|length))+ " https://govnokod.ru/\(.post_id)#comment\(.id) "+ " "*20 + "\(.posted) \n\n\(.text)\n\n") | reduce .[] as $item (""; . + $item) '   \
        | sed -r 's/<[/]?pre>/\n/g' \
        | sed -r "s/<b>([^<]+?)<\/b>/${k}1m\0${k}0m/g"    \
        | sed -r "s/<i>([^<]+?)<\/i>/${k}3m\0${k}0m/g"     \
        | sed -r "s/<span style=\"color:red;\">/${k}31m/g"  \
        | sed -r "s/<span style=\"color:blue;\">/${k}34m/g"  \
        | sed -r "s/<span style=\"color:green;\">/${k}32m/g"  \
        | sed -r "s/<span style=\"text-decoration:underline;\">/${k}4m/g"    \
        | sed -r "s/<span style=\"text-decoration:line-through;\">/${k}9m/g" \
        | sed -r "s/<span style=\"text-decoration:blink;\">/${k}5m/g"        \
        | sed -r "s/<\/span>/${k}0m/g"        \
        | sed "s,https\S*,${k}4m${k}2m&${k}0m," \
        | sed -r 's/<([^>]+?)>//g' | sed -r 's/</</g' | sed -r 's/>/\>/g' | sed -r 's/&/\&/g'
    
        token=$(cat ./posts${i}.json | jq -r 'min_by(.posted).posted')
        echo "next page: $token"
        load "?before=$token"
    done;
    ) | less -R
    Исправлено форматирование. Сделана подсветка ссылок.

    Для поклонников «busybox» загрузка «curl --silent» была заменёна на «wget».
    Ответить
    • Я скачал w3m, но у меня ничего не мигает, ещё и кириллицы нет. Твой скрипт не работает.
      Ответить
      • Возможно нужно применить патч. Хотя $i пустая и ни на что не влияет.
        -    token=$(cat ./posts${i}.json | jq -r 'min_by(.posted).posted')
        +    token=$(cat ./posts.json | jq -r 'min_by(.posted).posted')
        Ответить
    • Если вызвать этот скрипт в цикле:
      while true; do ./read_gk.sh; done
      То появляется возможность подгрузки и обновления постов по клавише «q».

      Вот такой shell ajax.
      Ответить
          • Что интересно море из загруженной коробки выводит как положено: всё светится и мигает.
            Ответить
              • Ты летишь на парашюте, справа - лес хуев, слева - море говна. Куда будешь садиться?
                Ответить
                  • Значит ты пассивный гомосексуалист, раз мечтаешь приземлиться в лес хуёв
                    Ответить
                    • Нет. Просто в море говна я утону, а в лесу хуев - нет.
                      Ответить
                      • А ещё можно посрубать их и построить плот чтобы переплыть море.
                        Ответить
                        • Вспомнил детский фильм «Свистать всех наверх». Там было сокращение «Накожпавосвет» = «На кожаных парусах вокруг света». Интересно, из чего делали кожаные паруса.
                          Ответить
                          • можно предположить, что после раскроя кожаных парусов из остатков делали кожаные флейты
                            Ответить
      • BusyBox v1.30.1 (Debian 1:1.30.1-4) multi-call binary.
        
        Usage: less [-EFIMmNSRh~] [FILE]...
        
        View FILE (or stdin) one screenful at a time
        
        	-E	Quit once the end of a file is reached
        	-F	Quit if entire file fits on first screen
        	-I	Ignore case in all searches
        	-M,-m	Display status line with line numbers
        		and percentage through the file
        	-N	Prefix line number to each line
        	-S	Truncate long lines
        	-R	Remove color escape codes in input

        Он есть, но смысл ключа противоположный (!) нормальному лесу.
        -r  -R  ....  --raw-control-chars  --RAW-CONTROL-CHARS
                          Output "raw" control characters.
        И оно выводит монохром.
        Ответить
        • У меня там старая коробка была (1.28?), в ней ещё -R не было. А в 1.30 уже есть, но с противоположным смыслом...

          Прыщебляди соснули!
          Ответить
  • ———————————————————————————————————————— ————————————————————————————————————————————————————————————————————————— ————————————————————————————————————————————————————————————————————————— ————————————————————————————————————————————————————————————————————————— ————————————————————————————————————————————————————————————————————————— ————————————————————————————————————————————————————————————————————————— ————————————————————————————————————————————————————————————————————————— ————————————————————————————————————————————————————————————————————————— ————————————————————————————————————————————————————————————————————————— —————————————————————————————————

    КЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАККЛЮВАК
    Ответить
  • Оптимизировал (меньше пайпинга sed).
    Ссылка на parent пост.
    POSTS="./posts_.json"; k=$(printf '\033['); SPAN="m/g; s/<span style=\"text-decoration:"; COLOR="m/g; s/<span style=\"color:"
    function load () {
        busybox wget -O- --quiet "https://gcode.space/api/comments$1" | cat - ${POSTS} | jq -c -s 'add | unique_by(.id) | sort_by(-.id)'  > ${POSTS}
    }
    load;(while true; do
        cat ${POSTS}  | jq '(.. | .posted?) |=  sub("[A-Z]+";" ";"g")' \
        | jq -r 'map("'"${k}32m"'"+"-"*120+"\n⤷ \(.parent_id // "  top " ) '"${k}36m"' \(.user_name) '"${k}0m"' "+ " "*(25-(.user_name|length))+ " https://govnokod.ru/\(.post_id)#comment\(.id) "+ " "*20 + "\(.posted) \n\n\(.text)\n\n") | reduce .[] as $item (""; . + $item) '   \
        | sed -r "s/<[/]?pre>/\n/g;s/<b>([^<]+?)<\/b>/${k}1m\0${k}0m/g; s/<i>([^<]+?)<\/i>/${k}3m\0${k}0${COLOR}red;\">/${k}31${COLOR}blue;\">/${k}34${COLOR}green;\">/${k}32${SPAN}underline;\">/${k}4${SPAN}line-through;\">/${k}9${SPAN}blink;\">/${k}5m/g; s/<\/span>/${k}0m/g; s,https\S*,${k}4m${k}2m&${k}0m,; s/<([^>]+?)>//g; s/</</g; s/>/\>/g; s/&/\&/g"
        token=$(cat ${POSTS} | jq -r 'min_by(.posted).posted'); echo "next page: $token"; load "?before=$token"
    done; ) | busybox more

    Море для автобусной коробки.
    Ответить
    • sed — не браузер, и его рагулярка была разработана настолько, что в неё мог влезть патч Бармина.
      Ответить
  • на работе

    Коллега1: Кто-то знает GeekBrains? У меня знакомый интересуется курсом https://gb.ru/geek_university/cpp-developer

    Коллега2: Если человек не может выучить язык программирования по книгам, то навряд ли из него получится хороший программист.

    Плюсанул
    Ответить
    • Если человек не может выучить язык программирования по гуглу, то навряд ли из него получится хороший программист.
      Ответить
      • Если человек не может выучить язык программирования по говнокод.ру, то навряд ли из него получится хороший программист.
        Ответить
        • Если человек не может выучить язык программирования по php.net, то навряд ли из него получится хороший программист.
          Ответить
          • > Я все языки программирования изучаю по «Говнокоду».

            Подтверждаю.
            Ответить
          • Я и программировать-то научился чтобы на говнокоде пиздеть
            Больше оно мне ни зачем не надо
            Ответить
    • Вы действительно хотите позволить данной программе внести изменения в следующих частях вашей системы:
      - Жесткий диск
      ?

      У тебя, кстати, общественная или частная сеть?
      Данное устройство может работать неправильно. Продолжить без форматирования? Или открыть средство устранения неполадок? А может попробовать в режиме совместимости или от имени администратора?
      А лучше сразу обратиться к системному администратору!
      Ответить
          • Перезагрузите компьтютер в режиме защиты от сбоев и обновите антивирус

            так же советую программу для исправления ошибок в реестре
            Ответить
            • Безопасность Вашего компьютера под угрозой! Рекомендуем включить настройки системного менеджера безопасности обеспечения отсутствия Windows.
              Была ли эта статья полезна для вас?
              Ответить
              • Пердоля и его семён. Пердоль, ты понимаешь, что всё что ты тут перечисляешь - это обычные пользователи, не пердоли, и если их посадить на прыщи - багета будет в 100 раз больше?
                Ответить
                • > всё что ты тут перечисляешь - это обычные пользователи, не пердоли

                  Всё что я тут перечисляю -- это мой персональный юзер икспириенс на "юзер-френдли" системе за один день. А я по вашей терминологии пердолик, а не "обычный юзер".

                  Ergo ты хуесос.
                  Ответить
                  • > это мой персональный юзер икспириенс
                    Нахуй иди на на свои 2% говна. Налинукс!
                    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8