1. JavaScript / Говнокод #25921

    −2

    1. 1
    $scope.ignoreUser = ignoreUser.bind(undefined, undefined);

    Новая нить Бесконечного Стока имени Борманда.

    Запостил: gost, 08 Октября 2019

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

    • Ремонтный отдел починил игнор юзеров, всё снова работает. Как всегда, Ctrl+F5 для обновления (или очистка кэша).
      Ответить
      • Ходит легенда, что изобретателя гильотины казнили первого. Но это легенда.
        Зато достоверно известно, что создатель медного быка испытал его сам.
        Собственно вопрос, не испытываешь ли ты внутреннего диссонанса от осознания того, что твой потенциал забанивания может быть направлен против тебя?
        Ответить
      • https://govnokod.ru/25937
        Ответить
        • Гавношка, как же примитивен и скудоумен твой владелец.
          Ответить
    • показать все, что скрытоХуйло неплохо так себя премировал за крымнаш
      https://pbs.twimg.com/media/EGYP9YZWkAAjhKk.jpg
      Ответить
    • 
        cnt  |        name
      -------+--------------------
       51339 | guest
       39385 | guest8
       36795 | bormand
       15978 | Lure Of Chaos
       14183 | kegdan
       12244 | roman-kashitsyn
       12000 | inkanus-gray
       10975 | 3.14159265
        9849 | 3_14dar
        8388 | 1024--
        7786 | TarasB
        6425 | defecate-plusplus
        6106 | bugmenot
        5314 | wvxvw
        5223 | LispGovno
        4824 | absolut
        4600 | Stertor
        4498 | anonimb84a2f6fd141
        4322 | Vasiliy
        4269 | Анонимус
        3945 | gost
        3808 | Dummy00001
        3636 | eth0
        2801 | barop
        2587 | vistefan
        2468 | j123123
        2362 | roskomgovno
        2216 | CHayT
        2216 | istem
        2040 | SemaReal
      Ответить
      • показать все, что скрытоvanished
        Ответить
      • cnt  |        name
        -------+--------------------
         51339 | guest
         39385 | guest8
         36795 | bormand
         15978 | Lure Of Chaos
         14183 | kegdan
         12244 | roman-kashitsyn
         12000 | inkanus-gray
         10975 | 3.14159265
          9849 | 3_14dar
          8388 | 1024--
          7786 | TarasB
          6425 | defecate-plusplus
          6106 | bugmenot
          5314 | wvxvw
          5223 | LispGovno
          4824 | absolut
          4600 | Stertor
          4498 | anonimb84a2f6fd141
          4322 | Vasiliy
          4269 | Анонимус
          3945 | gost
          3808 | Dummy00001
          3636 | eth0
          2801 | barop
          2587 | vistefan
          2468 | j123123
          2362 | roskomgovno
          2216 | CHayT
          2216 | istem
          2040 | SemaReal


        Вычеркнул совсем безнадежных.
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • Вот ты и спалился.
            cnt  |        name
            -------+--------------------
             51339 | guest
             39385 | guest8
             36795 | bormand
             15978 | Lure Of Chaos
             14183 | kegdan
             12244 | roman-kashitsyn
             12000 | inkanus-gray
             10975 | 3.14159265
              9849 | 3_14dar
              8388 | 1024--
              7786 | TarasB
              6425 | defecate-plusplus
              6106 | bugmenot
              5314 | wvxvw
              5223 | LispGovno
              4824 | absolut
              4600 | Stertor
              4498 | anonimb84a2f6fd141
              4322 | Vasiliy
              4269 | Анонимус
              3945 | gost
              3808 | Dummy00001
              3636 | eth0
              2801 | barop
              2587 | vistefan
              2468 | j123123
              2362 | roskomgovno
              2216 | CHayT
              2216 | istem
              2040 | SemaReal
            Ответить
            • Bugmenot - охуенный был чувак. Кажись его Лёхой звали. Анонимус - ваще башка. Да и все остальные - не то что вы тут сейчас слюной брызжитесь. Да даже Stertor - и тот иногда великие вещи мог спиздануть. Роман - так тот весь яндекс отрефакторил. Вот люди были.
              И Тарас куда-то пропал. Жалко ево.
              Ответить
            • хорошо меня там нет
              Ответить
            • Вот ты и спалился.
              cnt  |        name
              -------+--------------------
               51339 | guest
               39385 | guest8
               36795 | bormand
               15978 | Lure Of Chaos
               14183 | kegdan
               12244 | roman-kashitsyn
               12000 | inkanus-gray
               10975 | 3.14159265
                9849 | 3_14dar
                8388 | 1024--
                7786 | TarasB
                6425 | defecate-plusplus
                6106 | bugmenot
                5314 | wvxvw
                5223 | LispGovno
                4824 | absolut
                4600 | Stertor
                4498 | anonimb84a2f6fd141
                4322 | Vasiliy
                4269 | Анонимус
                3945 | gost
                3808 | Dummy00001
                3636 | eth0
                2801 | barop
                2587 | vistefan
                2468 | j123123
                2362 | roskomgovno
                2216 | CHayT
                2216 | istem
                2040 | SemaReal


              Произошло 2 изменения
              Ответить
    • показать все, что скрытоВ Петербурге полицию подняли по тревоге: мужчина оскорбил Путина на заборе

      https://www.pravda.com.ua/rus/news/2019/09/30/7227665/
      Ответить
    • 
        cnt  |                                                                  text
      -------+----------------------------------------------------------------------------------------------------------------------------------------
       12746 | cleaned
        1180 |
        1147 | Подтверждаю.
        1050 | Какой багор )))
         983 | vanished
         313 | <span style="color:red;">Золотоi хуй наспамил.</span>
         300 | .
         294 | __тут был очень большой ASCII-арт гоатсе__
         254 | i am a very baaaad boy
         244 | Засунул тебе в жопу резиновый член, зачекай!
         241 | <span style="color:white;">Vanished</span>
         231 | &lt;strong&gt;&lt;/strong&gt;
         183 | +1
         173 | -
         161 | <i><span style="color:white;">Vanished</span></i>
         156 | <span style="color:red;"><i>Я засоряю сток.</i></span> #collapse_me
         141 | Именно поэтому я за «PHP».
         117 | Да.
         100 | ...
          99 | да
          95 | Где здесь С++?
          90 | __тут был второй большой гоатсе__
          89 | А между тем, в Яунде двадцать градусов тепла.
          88 | <i>Vanished</i>
      Ответить
    • Надо номерной тред делать и перекат пилить.
      Ответить
    • Тред #2. Предыдущий тред: http://govnokod.ru/25864
      Ответить
    • Что такое http://gcode-xp.space/ ? Не проще ли по основному адресу убрать редирект на https?
      Ответить
    • Хотел въебать минус, но оказалось, что я уже въебал его ранее.
      Ответить
    • показать все, что скрытоПроведена дезинфекция
      Ответить
    • показать все, что скрытоПроведена дезинфекция
      Ответить
    • показать все, что скрытоПроведена дезинфекция
      Ответить
    • показать все, что скрытоПроведена дезинфекция
      Ответить
    • показать все, что скрытоПроведена дезинфекция
      Ответить
    • показать все, что скрыто
      Ответить
    • import requests
      from bs4 import BeautifulSoup, Tag
      from requests import Response
      
      data: Response = requests.get("http://govnokod.ru/comments")
      for tag in BeautifulSoup(data.text, features="html.parser").find_all("div", {"class": "entry-comment"}):
          txt_bytes: bytes = tag.text.encode("koi8-r")
          txt_cut_bit = bytes(byte & 0x7F for byte in txt_bytes)
          print(txt_cut_bit.decode())

      oNI O^KU@T, ^TO IH STERTOR WYEBET POPXQNI, A POTOM NE VENITSQ, OSTANUTSQ DO PENSII W PACANAH.
      sTAJRTOR, PRIEDE[X?
      pO^INIL: if (res < ans * 2) {
      ans = res / 2;
      } tEPERX DUBLIROWANIQ KODA NET.
      http://govnokod.ru/25937#comment508908
      oGO, PQTIZNA^NYJ AJDI[NIK
      wOT TWOJ TARAS
      https://vk.com/id29482

      iKANUS, A NAPI[I EMU?
      kEGGI, PO[LI BUHATX?
      pROWERIL. oPQTX NE RABOTAET.
      nU WOT..
      kAKOJ BAGOR (((
      s#MA, A TY?
      TARAS, POEHALI PITX?
      s#MA, TY ^ITAL \FFEKTIW PAJTON?
      https://sun9-54.userapi.com/c845522/v845522601/1648bc/s-qf3cRK6qs.jpg
      tY - ODNA IZ FAEK iNHO?
      gA-GAK.
      gA-GAK.
      BOLEE TUPOGO TEKSTA I PREDSTAWITX NELXZQ.
      mINUS.
      pROWEDENA DEZINFEKCIQ
      pROWEDENA DEZINFEKCIQ
      Ответить
    • показать все, что скрытоПроведена дезинфекция
      Ответить
    • показать все, что скрытоПроведена дезинфекция
      Ответить
    • показать все, что скрытоПроведена дезинфекция
      Ответить
    • Проведена дезинфекция
      Ответить
    • Проведена дезинфекция
      Ответить
    • Проведена дезинфекция
      Ответить
    • Как вам такая идея? Добавить кнопку временно показать всех, где можно будет разбанивать.
      Ответить
    • Чуть-чуть отрефакторил вёрстку, может забаговаться из-за кэша. Чтобы починить — сбросьте кэш через Ctrl+F5.
      Ответить
    • Слюшай, а может исправишь все ссылки на гк на https? А то я не ебу как это на мобильном бравзере сделать.

      Сменил опсоса, а он оказался охуевшим втирателем рекламы.
      Ответить
    • Тест.
      Ответить
    • Добавил страничку «gcode.space/#!/replies/<user_name>». Там можно посмотреть последние ответы на комментарии пользователя <user_name>. В наличии регулярное обновление (как на главной) и бесконечный трскроллинг.

      Знатно поебался, пока пытался прикрутить обновляемую древоведную структуру. В результате заебался и оставил как есть, с одним уровнем.
      Ответить
    • Добавил автоматическую выкладку дампов базы. Дампится каждый день в 09:00 по МСК (UTC+3).
      https://gcode.space/ngk/db_dumps
      Ответить
    • Обновляю дистр, NGK может на некоторое время уйти в оффлайн.
      Ответить
    • Ещё тестирую.
      Ответить
      • Хуестируешь?
        Ответить
        • Ага.
          Ответить
          • Много нахуестировал?
            Ответить
            • Немного, ебанутость какая-то происходит.
              Ответить
              • Малость ебанутость какая-то происходит или много ебанутость какая-то происходит?
                Ответить
                • Вроде много ебанутость исправил. Проверяю малость ебанутости.
                  Ответить
                  • И ещё разок.
                    Ответить
                    • Эх, раз, да ещё раз…
                      Ответить
                      • Да ещё много-много-много-много раз!
                        Да ещё раз, да еще мноого-много раз!
                        Ответить
                  • Гост поехал на голову!
                    Ответить
                    • Я полковник! Я стану полковником!
                      Ответить
                    • И время, как вода.
                      Ни берега, ни дна,
                      Всё начинать с начала.
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • В которых никогда
                          Ты малость не бывала.
                          Ответить
                          • показать все, что скрытоvanished
                            Ответить
                            • «Полко́внику никто́ не пи́шет» (исп. El coronel no tiene quien le escriba) — повесть колумбийского писателя, нобелевского лауреата Габриэля Гарсиа Маркеса, опубликованная в 1961 году.

                              ...

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

                              До окончания срока закладной на дом остаётся два года, в доме почти не осталось еды, продана швейная машина, приносившая хоть какой-то доход. Но полковник кормит петуха, тренирует его и продолжает ждать письма. В доме не осталось ни крошки еды, жена полковника заболела. Промозглыми декабрьскими ночами полковника греют воспоминания о боевой юности. Он все надеется с ближайшим почтовым катером получить письмо. Поддерживает его и то, что уже начались тренировочные бои и его петуху нет равных. Остается потерпеть сорок пять дней, убеждает полковник впавшую в отчаяние жену, и на её вопрос, что они будут есть все это время, решительно отвечает: «Дерьмо».
                              Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • Фу.
                                  Ответить
                                • El coronel no supo si había oído esa palabra antes o después del sueño. Estaba amaneciendo. La ventana se recortaba en la claridad verde del domingo. Pensó que tenía fiebre. Le ardían los ojos y tuvo que hacer un gran esfuerzo para recobrar la lucidez.

                                  -Qué se puede hacer si no se puede vender nada -repitió la mujer.
                                  -Entonces ya será veinte de enero -dijo el coronel, perfectamente consciente-. El veinte por ciento lo pagan esa misma tarde.
                                  -Si el gallo gana -dijo la mujer-. Pero si pierde. No se te ha ocurrido que el gallo puede perder.
                                  -Es un gallo que no puede perder.
                                  -Pero supónte que pierda.
                                  -Todavía faltan cuarenta y cinco días para empezar a pensar en eso -dijo el coronel.
                                  La mujer se desesperó.
                                  -Y mientras tanto qué comemos -preguntó, y agarró al coronel por el cuello de la franela. Lo sacudió con energía-. Dime, qué comemos.

                                  El coronel necesitó setenta y cinco años -los setenta y cinco años de su vida, minuto a minuto- para llegar a ese instante. Se sintió puro, explícito, invencible, en el momento de responder:

                                  -Mierda.

                                  «Полковнику никто не пишет» реально заканчивается словом «дерьмо».
                                  Ответить
                              • Россия-дзярмо.
                                Ответить
      • Приведи реальный пример, когда тебе в работе пригодилось тестирование.
        Ответить
    • Перевёл сток на «WebSockets», теперь он стал стильным, модным и молодёжным.

      Пока модно и молодёжно работает только главный сток, страница с ответами пуллит по-старому.
      Ответить
    • Провожу эксперименты с ускорением загрузки. Скорее всего буду прикручивать «webpack» или какую-нибудь подобную хипстерскую парашу.
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • Говно какое-то. Внезапно стали тихо отваливаться вебсокеты, без disconnect'а на клиенте. Проверяю.
      2019/12/22 15:21:13 [error] 2632#2632: *15638 upstream timed out
      (110: Connection timed out) while reading response header from upstream,
      server: gcode.space,
      request: "GET /socket.io/?EIO=3&transport=polling&t=Myj-h1m&sid=69f9eb73ce3a43ae93fd6c9b98fdec37 HTTP/1.1",
      upstream: "http://127.0.0.1:1488/socket.io//?EIO=3&transport=polling&t=Myj-h1m&sid=69f9eb73ce3a43ae93fd6c9b98fdec37",
      host: "gcode.space", referrer: "https://gcode.space/"
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • Пук
      Ответить
    • Пук-пук
      Ответить
    • екуеуке
      Ответить
    • 6546546
      Ответить
    • е
      Ответить
    • нен
      Ответить
    • ненен
      Ответить
    • екуе
      Ответить
    • екуе
      Ответить
    • 6546
      Ответить
    • некн
      Ответить
    • некн
      Ответить
    • Провайдеру стока плохо стало, надо поспать, полежать немножко, все ж мы люди. Могут наблюдаться кратковременные перебои в работе.
      Ответить
    • Кажется, второй раз дампнуть ГК ради исправления кодов в постах не получится: только что он целиком упал в «Debug mode is off». Отключил дампалку.
      Ответить
    • Добавил табличку забаненных, в которой их можно разбанивать (применение мгновенное, но юзер остаётся в списке до перезагрузки страницы — чтобы можно было забанить обратно): https://gcode.space/ngk/#!/blacklist.
      Дизайнерские_петухи, которые смогут оформить эту табличку в более вебдванольный вид, приветствуются.
      Ответить
      • > Дизайнерские_петухи, которые смогут оформить эту табличку в более вебдванольный вид, приветствуются.

        Опять за еду?
        Ответить
    • «Nginx» внезапно завис. Хуйня какая-то.
      ● nginx.service - A high performance web server and a reverse proxy server
         Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
         Active: active (running) since Wed 2019-12-18 20:34:06 CET; 1 months 26 days ago
           Docs: man:nginx(8)
       Main PID: 762 (nginx)
          Tasks: 4 (limit: 2359)
         Memory: 34.9M
         CGroup: /system.slice/nginx.service
                 ├─  762 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
                 ├─11243 nginx: worker process is shutting down
                 └─26928 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;

      Ничего не понял. Именно поэтому я за «Python».
      Перезапустил, вроде работает.
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • Неа, всё тихо. Лишних подключений в «ᛋᛋ -ntp» тоже не было.
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Так и сделаю, если вдруг опять зависнет.
              Ответить
              • А можно добавить вотчдог и забить на зависания.
                Ответить
                • Всегда так делаю. Ставлю в кроне задачу restart с интервалом в час.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Анскиллябры. Элементарное же решение: взять механические двадцатичетырёхчасовые часы, на нужный час поставить контакт, который бы включал моторчик, жмущий на кнопку сброса. Присыпать это всё ещё несколькими релешками (что-то типа триггера соорудить, чтобы преобразовывало длительный сигнал с часов в один импульс) — и готово!
                      Ответить
                      • Главное, не забыть провода обмотать фольгой, чтобы помехи не наводились.
                        Ответить
                        • Это заедушным лифтёрам-анскиллябрам с ардуинами помехи мешают. А хардкорным релешкам на ЭМ похуй, они и в микроволновке будут работать!
                          Ответить
                          • Я однажды разбирал стиральную машину типа «Малютки», но с автореверсом: она несколько секунд крутит активатор в одну сторону, несколько секунд — в другую, чтобы бельё не скручивалось. Так вот там автореверс был реализован полумеханически: на оси мотора была шестерёнка, которая с другими шестерёнками образовывала понижающий редуктор. К последней шестерёнке прислонена зубчатая рейка.

                            Когда мотор крутится по часовой стрелке, зубчатая рейка медленно едет вправо. Когда рейка доедет до конца, она торцом нажимает на микровыключатель. Микровыключатель переключает реле, которое включает реверс мотора и блокирует само себя.

                            Мотор начинает крутиться против часовой стрелки, рейка едет в противоположную сторону. Когда рейка доедет до конца, она задевает другой микровыключатель, который отпускает реле, реле снимает с себя блокировку и снова изменяет вращение мотора.

                            Надёжно! Никакой ардуины!
                            Ответить
    • Тестирую.
      Ответить
    • Перевёл «NGK» на «ORM», проверяйте.
      Ответить
      • Переведи на «PHP».
        Ответить
      • показать все, что скрытоvanished
        Ответить
        • Вот же:
          https://github.com/gost-gk/ngk/

          Да, он алхимик.
          Ответить
          • Подтверждаю. На «Гитхабе» лежит в точности то, что крутится на сервере.
            Ответить
      • А зачем?
        Ответить
      • Там же и так юзался ORM.
        Ответить
        • Да, но отношения не были настроены, поля приходилось выбирать длинными коньструкциями. А теперь, к примеру, все комменты к посту — это просто «post.comments», вместо страшного «comment, user in session.query(Comment, User).filter(Comment.post_id == post_id).filter(Comment.user_id == User.user_id).order_by(Comment.posted.as c()).all()».
          Ответить
          • Какой скилл )))
            Ответить
            • Да вообще, я вчера весь вечер сидел со включённым логгером запросов и совал их в «ANALYZE EXPLAIN» — смотрел, что за говно там алхимия генерирует. Ну, вроде нормальное говно — особых тормозов или seq scan-ов не заметил.
              Меня, конечно, смущают семь джоинов в одном запросе, но я БДшник не настоящий, а ОРМ на «Гитхабе» нашёл.
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Неплохо. Вот реальный пример запроса, который алхимия генерирует. Сниппет (получение последних ответов на комментарии пользователя, без before/ignore):
                  with ScopedSession() as session:
                      parent_user = session.query(User).filter(User.user_id == 8086).first()
                  
                      Comment_parent = aliased(Comment)
                      query = session.query(Comment, Comment_parent) \
                          .filter(Comment.user_id != parent_user.user_id) \
                          .join(Comment_parent, Comment.parent) \
                          .filter(Comment_parent.user_id == parent_user.user_id)
                  
                      parents = {}
                      children = []
                      for comment, parent_comment in query.order_by(Comment.posted.desc()).limit(20).all():
                          if parent_comment.comment_id not in parents:
                              parents[parent_comment.comment_id] = parent_comment.to_dict()
                          children.append(comment.to_dict())

                  Запрос: https://pastebin.com/MrU2Y7Ay;
                  План: https://pastebin.com/iySpv4aR.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Не знаю, постоянно так делает. Это и есть EXPLAIN ANALYZE.
                      Ещё реальные примеры:
                      ngk=> EXPLAIN (ANALYZE, BUFFERS, COSTS) SELECT * FROM comments WHERE comments.user_id = 65000;
                                                                                 QUERY PLAN
                      ---------------------------------------------------------------------------------------------------------------------------------
                       Index Scan using comments_user_ids on comments  (cost=0.42..222.85 rows=59 width=449) (actual time=0.269..0.269 rows=0 loops=1)
                         Index Cond: (user_id = 65000)
                         Buffers: shared hit=2 read=1
                       Planning Time: 0.149 ms
                       Execution Time: 0.302 ms
                      (5 rows)

                      ngk=> EXPLAIN (ANALYZE, BUFFERS, COSTS) SELECT * FROM comments WHERE comments.user_id = 1;
                                                                                   QUERY PLAN
                      -------------------------------------------------------------------------------------------------------------------------------------
                       Bitmap Heap Scan on comments  (cost=1226.71..38842.72 rows=52424 width=449) (actual time=12.089..157.928 rows=51339 loops=1)
                         Recheck Cond: (user_id = 1)
                         Heap Blocks: exact=14400
                         Buffers: shared hit=1886 read=12689
                         ->  Bitmap Index Scan on comments_user_ids  (cost=0.00..1213.60 rows=52424 width=0) (actual time=9.467..9.467 rows=51822 loops=1)
                               Index Cond: (user_id = 1)
                               Buffers: shared hit=3 read=144
                       Planning Time: 0.154 ms
                       Execution Time: 164.716 ms
                      (9 rows)
                      Ответить
                    • > и вообще поцчитать https://wiki.postgresql.org/wiki/Performance_Optimization
                      Спасибо, передали в исследовательский отдел, изучаем.
                      Ответить
      • Проверил. Ничего не изменилось. Еды ты не заработал.
        Ответить
        • Какой багор )))
          Ответить
        • > Ничего не изменилось.
          Отлично, так и должно быть. Я беспокоился, что после перевода что-то могло поломаться (тестов-то нет!).
          Ответить
          • Конечный пользователь в этих ваших «SQL» и «Python» не разбирается. Надо что-нибудь в «CSS» подкрутить, чтобы создать эффект бурной деятельности!
            Ответить
            • А я не умею в это ваше «CSS».
              :(
              Ответить
              • Тогда в «HTML». Сделать что-нибудь жирным или курсивом. Тогда посетители точно заметят изменения!
                Ответить
                • Могу ещё одну аниме-няшу добавить.
                  Ответить
    • Чо б такого в стоке запилить?..

      Кстати, я ж запилил адекватное детектирование новых/обновлённых комментариев. Могу подписку организовать, шоб новые комменты заливались на кастомные эндпоинты.
      Ответить
      • Скрытие тредов, мейби. Не все хотят видеть вореции *в стоке*...
        Ответить
        • Есть классификаторы вореций?
          Ответить
        • Да, было бы круто иметь игнор тредов с возможностью их последующего разбана, как с юзверями
          Ответить
        • Спасибо, передали в инженерный отдел.
          Ответить
    • Сделал скрытие тредов, проверяйте.
      Ответить
    • Поменял структуру папок, надо сделать Ctrl+F5, а то всё сломается.
      Ответить
    • Инженерному отделу требуются комментарии пользователей!
      Планируется разработка опционального метода оповещений о новых комментарий. Есть два стула:
      1) Проигрывание звука, звук можно менять;
      2) Показ браузерных оповещений с изменяемым таймаутом.
      На какой сесть, на какой Сток посадить? Или, может, ещё какие-нибудь стулья есть?
      Ответить
      • А чем индикатор в имени вкладки плох?
        Ответить
        • Со смарта эти имена не видно.
          Ответить
        • Не видно со смарта, не видно при большом количестве открытых вкладок, не видно при свёрнутом браузере.
          Ответить
          • Кстати, на смарте и звук с неактивной вкладки не будет проигрываться, неактивны вкладки же вообще не робят.
            Ответить
            • По идее можно пуш-уведомления запилить… Но вообще наш инженерный отдел в решении этой проблемы больше ориентирован на ПК.
              Ответить
    • Ничего не понял. Почему у меня фавиконка при «cache-control: max-age=31536000, public» на каждом запросе заново загружается?
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • Хм, поглядел, какая-то хуйня происходит:
          Запрос:
          :authority: gcode.space
          :method: GET
          :path: /img/favicon.ico
          :scheme: https
          accept: image/webp,image/apng,image/*,*/*;q=0.8
          accept-encoding: gzip, deflate, br
          accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
          cache-control: no-cache
          cookie: __cfduid=1234
          dnt: 1
          pragma: no-cache
          referer: https://gcode.space/
          sec-fetch-dest: image
          sec-fetch-mode: no-cors
          sec-fetch-site: same-origin
          user-agent: Mozilla/2.0 (compatible; MSIE 3.02; Windows 95)
          
          Ответ:
          cache-control: max-age=31536000, public
          cf-cache-status: DYNAMIC
          cf-ray: 12345-ARN
          content-encoding: br
          content-type: image/x-icon
          date: Fri, 06 Mar 2020 22:55:07 GMT
          etag: W/"5e573ebf-2871e"
          expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
          last-modified: Thu, 27 Feb 2020 03:59:59 GMT
          pragma: public
          server: cloudflare
          status: 200
          strict-transport-security: max-age=31536000; includeSubDomains; preload

          Браузер зачем-то шлёт «no-cache» при простом обновлении страницы по F5. Зачем? Зачем?
          Ответить
          • dnt: 1 и SPDY, но при этом user-agent: Mozilla/2.0 (compatible; MSIE 3.02; Windows 95)?

            Кака́я маскировка )))
            Ответить
          • показать все, что скрытоvanished
            Ответить
            • Попробовал в папку с бэкапами зайти, получил странное:
              Ответ:
              cache-control: max-age=31536000, public
              cf-cache-status: DYNAMIC
              cf-ray: 12345-ARN
              content-encoding: br
              content-type: image/x-icon
              date: Sat, 07 Mar 2020 00:39:22 GMT
              etag: W/"5e573ebf-2871e"
              expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
              last-modified: Thu, 27 Feb 2020 03:59:59 GMT
              pragma: public
              server: cloudflare
              status: 200
              
              Запрос:
              Provisional headers are shown
              DNT: 1
              Referer: https://gcode.space/db_dumps/
              Sec-Fetch-Dest: image
              User-Agent: Mozilla/2.0 (compatible; MSIE 3.02; Windows 95)


              Спасибо, попробую.
              Ответить
      • https://gcode.space/img/default.png?

        Мне от сервера пришёл ответ 304 Not Modified. Связь была по SPDY.
        Ответить
    • Наконец-то наш инженерный отдел запилил параметры поиска. Теперь (после Ctrl+F5, как обычно) можно ссылаться на результаты: https://gcode.space/#!/search?q="UB"&user=TheCalligrapher.
      Ответить
      • > после Ctrl+F5, как обычно
        Питушня. Есть какая-то питушня для пропитушения файлов без питушения пользователя? Не такая адвансовая питушня, как ВК или Whatsapp питушня, где тебе явно питушут "я Лунтик, я обновился, питушни и ты меня", а хотя бы приписывание GET-параметров с хэшем коммита, в котором файл последний раз изменился.

        Вообще, что за питушня? Приложения только растут и растут, сервер может пропитушить клиенту новый файл, а программисты оставляют факториальный рост кобенаций психозы, которая может произойти из-за совмещения разных версий скуриптов.

        Если в проекте 20 скуриптов, после их смены у миллиона пользователей будут уникальные баги, которых нет у разработчика.
        Ответить
        • Ну то есть я не против F5 (пока ещё), но против Ctrl+F5.
          Ответить
        • Проблема (у НГК) в том, что пользователь всё равно сначала дёргает index.html, который в кэше. В принципе, можно туда запихнуть какой-нибудь скрипт, который будет проверять версию (возможно даже через вебсокеты) и динамически всё обновлять… Но это мало того, что геморрой, так ещё и тормозить будет. Я-то как раз, следуя заветам Борманда, стараюсь сделать НГК максимально лёгким и быстрым (и именно поэтому у меня фавиконка весит 69 килобайт).
          Ну и версионирование с вебпаком инженерному отделу лень пилить, хотя надо…
          Ответить
          • Версионирование можно прикрутить O(1) раз. У клиента обернуть AJAX питуха в if (response.version != VERSION) sosnooley(); (либо заголовками) и request.version = VERSION; send(), у сервера - в самом начале запроса if (response.version != VERSION) sosnooley(); и в шаблоне страницы <script>var VERSION = $VERSION</script>.
            Ответить
            • И что надо сделать в sosnooley() чтобы обновить клиента на новую версию?
              Ответить
              • В серверном sosnooley просто ничего не делать и отправлять ошибку (либо ответ без ошибки, т.к. клиент сначала проверит его .version и вспетушится).
                В клиентском sosnooley - обновлять страницу, если она не зависит от пользовательского состояния, либо рисовать плашку как на гитхабе.
                Ответить
                • То есть
                  * для статики назначается кэширование на 1.5*average(release.time - release.prev.time), чтобы у клиента не замусоривался кэш
                  * к статике добавляется GET-параметр с идентификатором версии, чтобы были гарантированно актуальные файлы
                  * к запросам добавляется GET/POST-параметр с идентификатором версии, к ответам - заголовок или поле с идентификатором версии,
                      * при несовпадении версий клиент/сервер ничего не делает
                      * при несовпадении версий клиент просит перезагрузить страницу или перезагружает её сам
                  Ответить
                  • Кстати, может ли быть ситуация, когда в такой системе просирается ответ сервера? То есть когда серверу от клиента v.n пришёл запрос, сервер ответил ответ v.n, а его принял клиент v.n+1?

                    Если нет, то эта система всегда будет работать не впустую. В самом плохом случае клиент получит ошибку, обновится, переформулирует запрос и отправит заново. Сервер же никогда не будет делать работу зря, т.к. запрос всегда будет инициировать клиент, про которого сразу известно, что он устаревший, и делать ничего не надо.

                    А если веб-сокеты? Или в этом случае сервер при обновлении закроет сокет, а сокет тоже всегда инициирует клиент, который при попытке переподключения получит установку на перезагрузку?
                    Ответить
                    • Разве что, в случае многосерверности на клиенте надо будет сравнивать на >, а не на !=, чтобы не перекатываться на старую версию, когда на запрос пришёл ответ от обновлённой серверной ноды 1, а на следующий - от ещё старой серверной ноды 2.
                      Ответить
              • Соснуть
                Ответить
    • Хуйня какая-то. В «EasyList» внесли вот такой фильтр:
      ! revolving adservers
      /^https?:\/\/.*\.(xyz|site|pro|best|club|space|info|bid)\/.*/$image,script,subdocument,third-party,xmlhttprequest

      Теперь на «NGK» блокируются дефолтные аватарки с «https://i2.wp.com/gcode.space/img/default.png?ssl=1». Ко-ко-кой позор (((
      Ответить
      • https://github.com/easylist/easylist/commit/d6e6a848f1aff9921e90ffcb1299a103dedaa6ee
        Пидорас.
        Ответить
      • > xyz

        Хузу тоже пизда?
        Ответить
        • Ага. Тоже аватарки отвалились.

          PS, починил:
          <img ng-src="{{comment.avatar_url}}" class="avatar" onerror="this.onerror = null; this.src = '/img/default.png';">

          И 404 в default «Граватара»:
          return location.protocol + '//www.gravatar.com/avatar/' + hash + '?size=48&r=pg&default=404';


          Какой багор )))
          Ответить
      • Какой багор)))
        Ответить
    • Хуйня какая-то [2]. Периодически на несколько секунд появляется такая вот хрень:
      [17/Mar/2020:09:15:25 +0100] "GET /api/comments HTTP/1.1" 200 4446 "https://gcode.space/" "Mozilla/5.0 (Android 9; Mobile; rv:68.0) Gecko/68.0 Firefox/68.0"
      [17/Mar/2020:09:15:25 +0100] "GET /api/comments HTTP/1.1" 200 4446 "https://gcode.space/" "Mozilla/5.0 (Android 9; Mobile; rv:68.0) Gecko/68.0 Firefox/68.0"
      [17/Mar/2020:09:15:25 +0100] "GET /api/comments HTTP/1.1" 200 4446 "https://gcode.space/" "Mozilla/5.0 (Android 9; Mobile; rv:68.0) Gecko/68.0 Firefox/68.0"
      [17/Mar/2020:09:15:25 +0100] "GET /api/comments HTTP/1.1" 200 4446 "https://gcode.space/" "Mozilla/5.0 (Android 9; Mobile; rv:68.0) Gecko/68.0 Firefox/68.0"
      [17/Mar/2020:09:15:25 +0100] "GET /api/comments HTTP/1.1" 200 4446 "https://gcode.space/" "Mozilla/5.0 (Android 9; Mobile; rv:68.0) Gecko/68.0 Firefox/68.0"
      [17/Mar/2020:09:15:25 +0100] "GET /api/comments HTTP/1.1" 200 4446 "https://gcode.space/" "Mozilla/5.0 (Android 9; Mobile; rv:68.0) Gecko/68.0 Firefox/68.0"
      ...

      Примерно сотня запросов в секунду, будто бесконечный трскроллинг сошёл с ума несмотря на троттлинг. Причём прошлый раз (в начале марта) это было что-то с «OSX».
      Ничего не понимаю.
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Верно, гробы нынче дорогие. Закатать в ковер - и в крематорий.
        Ответить
    • показать все, что скрытоvanished
      Ответить
      • показать все, что скрытоvanished
        Ответить
      • Что ты имеешь в виду и что хочешь получить в итоге?
        Ответить
        • показать все, что скрытоvanished
          Ответить
        • показать все, что скрытоvanished
          Ответить
          • Посты, которые опубликованы на самом хузе и которых нет на ру?
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • А на хузе нет идов комментов с ру. А сами комменты как-то преобразовываются (например, в них добавляются ссылки, что ещё — хз, нужно у Иньо спрашивать), так что даже простым поиском их сличить сложна. Так что организовать параллельный парсинг хуза достаточно… проблематично.
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Да, точно, гостей нет.

                    > А что если просто парсить только хуз?
                    Тогда это будет https://govnokod.xyz/comments/.
                    Ответить
                    • Инженерный отдел подумал и решил, что было бы неплохо для начала распарсить хуз на предмет ссылок хотя бы на зеркальные комменты, пока без гостя. Завтра отдел общественных отношений попробует связаться с Иньо на предмет запиливания им какого-нибудь API с джейсонами («xyz/api/post/1234» -> «[{comment_id, comment_id_ru, user, text, ...}, ...]»), дабы не заниматься хуйнёй.

                      Спокойной ночи.
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • Я нихуя не понял, о чём вы там с Иньо посрались, но на всякий случай инженерный отдел начал говнокодить.
                          Ответить
                        • Гы. Гы-гы-гы.
                          Ответить
                          • Блядь, написали классный SAX-парсер, а в итоге оказалось, что «lxml» не поддерживает SAX для HTML.
                            Какой багор (((

                            # inside <p class="entry-info">
                            if self._p_depth > 0:
                                if elem_name == 'p':
                                    self._p_depth += 1
                            
                                elif elem_name == 'strong' and class_name == 'comment-author vcard entry-author':
                                    self._inside_vcard = True
                            
                                elif elem_name == 'time':
                                    self._posted_time = attrs.get((elem_uri, 'datetime'), None)
                                    if self._posted_time is None:
                                        raise ParseError('<time> element inside entry-info without datetime attribute')
                            
                                elif elem_name == 'a':
                                    if self._inside_vcard:
                                        self._author_link = attrs.get((elem_uri, 'href'), None)
                                        if self._author_link is None:
                                            raise ParseError('author link element without href attribute')
                                        return
                                    
                                    if class_name == 'comment-link':
                                        self._comment_link_xyz = attrs.get((elem_uri, 'href'), None)
                                        if self._comment_link_xyz is None:
                                            raise ParseError('<a class="comment-link"> element without href attribute')
                                    elif class_name is None:
                                        if attrs.get((elem_uri, 'style'), None) == 'border-bottom:none':
                                            self._comment_link_ru = attrs.get((elem_uri, 'href'), None)
                                            
                                return
                            Ответить
                      • Скоро у ГК будет больше фронтендов чем юзеров.
                        Ответить
    • показать все, что скрытоvanished
      Ответить
      • Дык перекатили уже.
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • Странно, я вроде перекатывал, но сейчас коммента найти не могу.
            Перекат!
            https://govnokod.ru/26544
            https://govnokod.xyz/_26544
            Ответить
            • > https://govnokod.xyz/_26544
              Надо было на хузе и нгк автоматически ссылки на ГК транслировать в ссылки на хуз и нгк при добавлении/распарсивании/изменении комментария, а при транслировании комментария с хуза на ГК - заменять ссылки на хуз на ссылки на ГК. Тогда везде бы было по одной ссылке, и если какой-то из сайтов бы сдох, на остальных бы об этом даже не узнали, не было бы лишних нерабочих ссылок.
              Ответить
              • Проблема в комментах. Иньо не заморачивался с айдишниками, в итоге они никак не связаны с гкшными. Ну хоть у тредов маппинг нормальный.
                Ответить
            • > найти не могу

              Мож потёр пидор сракер?
              Ответить
              • Он так ювелирно удалять комменты не умеет.
                Ответить
                • > ювелирно

                  Ну да, они бы в соседнем треде возродились, лол.
                  Ответить
            • показать все, что скрытоvanished
              Ответить
              • В реанимации одной из больниц видел коврик "Welcome".
                Ответить

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