1. Куча / Говнокод #26838

    +1

    1. 1
    Бесконечный оффтоп имени Борманда #4

    #1: https://govnokod.ru/25864 https://govnokod.xyz/_25864
    #2: https://govnokod.ru/25921 https://govnokod.xyz/_25921
    #3: https://govnokod.ru/26544 https://govnokod.xyz/_26544

    Запостил: nepeKamHblu_nemyx, 03 Августа 2020

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

    • Добрый вечер.

      Этот оффтоп сгенерирован автоматически.
      Индекс оффтопов: https://index.gcode.space/.
      Зеркала Говнокода и полезные ресурсы:
      * https://govnokod.xyz/
      * https://gcode.space/
      * @GovnokodBot в «Telegram»
      Ответить
      • Добрый вечер.

        Этот оффтоп сгенерирован автоматически.
        Индекс оффтопов: https://index.gcode.space/.
        Зеркала Говнокода и полезные ресурсы:
        * https://govnokod.xyz/
        * https://gcode.space/
        * @GovnokodBot в «Telegram»
        Ответить
        • Добрый вечер.

          Этот оффтоп сгенерирован автоматически.
          Индекс оффтопов: https://index.gcode.space/.
          Зеркала Говнокода и полезные ресурсы:
          * https://govnokod.xyz/
          * https://gcode.space/
          * @GovnokodBot в «Telegram»
          Ответить
    • Перекатный петух заработал. Сейчас инженерный отдел занимается публикацией перекатного петуха на удалённый сервер.
      Ответить
      • А если продолжать писать в старый тред, он будет напоминать о перекате?
        Ответить
        • Нет, он не настолько умный.
          Ответить
          • Пока просто перекатывает оффтопы длиннее 400?
            Ответить
            • Подтверждаю.

              Тем временем, перекатный петух запущен на удалённом сервере, проверка на оффтопы будет происходить раз в час.
              В ближайшие дни инженерный отдел закончит очистку кода и выдавит его на «Гитхаб».
              Ответить
              • Кстати, а как он треды читает? Напрямую или через говнокод.космос?
                Ответить
                • В космосе спрашивает, чтобы лишний раз не грузить ГК (оффтопы-то обычно тяжёлые). Проверяет последний оффтоп из каждой категории на предмет наличия четырёх сотен комментов через https://gcode.space/api/posts_info/26833,26836.
                  Ответить
                  • А какой в этом всём был смысл, кроме твоего спортивного интереса?
                    Ответить
                    • Чтобы мы не грузили слишком большие оффтопы и не клали ГК.
                      Ответить
                    • А какой в этом всём был смысл, кроме твоего спортивного интереса?
                      Ответить
                  • В космосе спрашивает, чтобы лишний раз не грузить ГК (оффтопы-то обычно тяжёлые). Проверяет последний оффтоп из каждой категории на предмет наличия четырёх сотен комментов через https://gcode.space/api/posts_info/26833,26836.
                    Ответить
                • Кстати, а как он треды читает? Напрямую или через говнокод.космос?
                  Ответить
                  • Кстати, а как он треды читает? Напрямую или через говнокод.космос?
                    Ответить
              • > на гитхаб

                Опасный инструмент так то, если в плохие руки попадёт. Но установка тензорфлоу - достаточный барьер, наверное.
                Ответить
                • Борманд, какими ты пользовался тулзами для код ревью, кроме гитхаба?
                  Ответить
                  • Борманд, какими ты пользовался тулзами для код ревью, кроме гитхаба?
                    Ответить
                • Распознавалка капчи вынесена в отдельный сервис, с пользователями и авторизацией, перекатный петух его дёргает.
                  Ответить
                  • А автокомплит для пользователей в поиске скоро будет?
                    Ответить
                    • Сегодня вечером попытаемся что-то наговнякать, но у нашего инженерного отдела от фронта очень сильно пригорает, трудно работать.
                      Ответить
                      • Наймите фронтендера. Могу 1024-- порекомендовать.
                        Ответить
                        • 1024-- вроде писал, что с фреймворками особо не работал.

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

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

                                  См. ниже.

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

                                    См. ниже.

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

                                Другое дело что в ангуляре нет из коробки ui-плюшек и готовых компонент.
                                *(Может уже и есть)
                                Ответить
                              • даже я директивы для ангуляра писал
                                Подтверждаю.

                                Другое дело что в ангуляре нет из коробки ui-плюшек и готовых компонент.
                                *(Может уже и есть)
                                Ответить
                            • Проще, кмк взять готовую питушню.
                              Но всё-равно хуйня, собирать говнокомпоненты по интернетам. Должна быть стандартная библиотека ui, как раньше в жкверях.

                              https://www.npmjs.com/package/angular-ng-autocomplete
                              Ответить
                              • Ну что-то госту готовые не понравились.
                                Ответить
                                • >npmjs.com
                                  >pethu
                                  >isTen

                                  Просто он не понаслышке знает какого какчества модули на npm
                                  Ответить
                                  • > pethu

                                    Пользуясь случаем, прорекламирую свой сайт: https://pethu.ru/
                                    Ответить
                                    • pethu

                                      Пользуясь случаем, прорекламирую свой сайт: https://pethu.ru/
                                      Ответить
                                  • npmjs.com
                                    pethu
                                    isTen

                                    Просто он не понаслышке знает какого какчества модули на npm
                                    Ответить
                                • Ну что-то госту готовые не понравились.
                                  Ответить
                                • Ну что-то госту готовые не понравились.
                                  Ответить
                              • Проще, кмк взять готовую питушню.
                                Но всё-равно хуйня, собирать говнокомпоненты по интернетам. Должна быть стандартная библиотека ui, как раньше в жкверях.

                                https://www.npmjs.com/package/angular-ng-autocomplete
                                Ответить
                            • Да ладно, даже я директивы для ангуляра писал. Так что опытный жсник без проблем справится.
                              Ответить
                          • 1024-- вроде писал, что с фреймворками особо не работал.

                            Я так понимаю, что у госта проблема с отображением списка.
                            Ответить
                        • Наймите фронтендера. Могу 1024-- порекомендовать.
                          Ответить
                          • Наймите фронтендера. Могу 1024-- порекомендовать.
                            Ответить
                      • Инженерный отдел начал пилить прототип, вроде получается. Посмотрим, как дальше пойдёт.

                        На самом деле не пилить, а пиздить, кто в конце угадает, с какого сайта — тому нихуя.
                        Ответить
                        • надеюсь, с qaru.site?
                          Ответить
                        • С главной Гугла?
                          Ответить
                          • Г разве на нагуляре?
                            Ответить
                            • Так если гост пилит свой компонент, то он туда может что угодно вставить
                              Ответить
                              • Так если гост пилит свой компонент, то он туда может что угодно вставить
                                Ответить
                                • Так если гост пилит свой компонент, то он туда может что угодно вставить
                                  Ответить
                              • Так если гост пилит свой компонент, то он туда может что угодно вставить
                                Ответить
                                • Так если гост пилит свой компонент, то он туда может что угодно вставить
                                  Ответить
                            • Логику инженерный отдел спокойно сам запилить может, там делов на несколько десятков строк ЙАЖАсцрипта максимум. Инженерный отдел горит от вёрстки.
                              Ответить
                              • Вот чё нашёл.

                                https://material.angularjs.org/latest/demo/autocomplete

                                Для первого ангуляра.

                                Ебать, а я когда-то как лошара скильная сам писал директивы.
                                Ответить
                                • Это другой «Ангуляр», материальный.
                                  Ответить
                                  • Не понял.
                                    Там вроде первый нагуляр, как и в НГК.Пространстве

                                    Просто ещё пару js подключить и лолжно работать.
                                    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.0/angular.min.js"></script>
                                      <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.0/angular-animate.min.js"></script>
                                      <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.0/angular-route.min.js"></script>
                                      <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.0/angular-aria.min.js"></script>
                                      <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.0/angular-messages.min.js"></script>
                                      <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>
                                    
                                      <script src="angular-material.min.js"></script>
                                      <script src="docs.js"></script>
                                      <script src="docs-demo-scripts.js"></script>
                                    Ответить
                                    • А, понял, я думал это два разных «Ангуляра».

                                      Не, пошли они нахуй, я не буду грузить сорок два мегабайта скриптов чтобы отрисовать простой список.
                                      Ответить
                                      • Ну там 400к и 100к gzipped.

                                        > не буду грузить сорок два мегабайта скриптов чтобы отрисовать простой список

                                        Я тоже так думал, когда велосипедил, но потом нужен ещё какой-то компонент, потом ещё один, итд.

                                        Просто когда я изучал «АнгуларЙС» этой либы ещё не было. А вот оказывается теперь компоненты из коробки.
                                        Ответить
                                        • Наш инженерный отдел очень сильно борется за «TTFB», поэтому загрузка лишних (!) сторонних (!!) скриптов для нас — как серпом по «PHP». Особенно с учётом того, что велосипедный вореант — это двести неминифицированных строчек ЙАЖАСцрипта.
                                          Ответить
                                          • > очень сильно борется за «TTFB»

                                            >document.getElementById('username-input')

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

                                            Лучше бы они альтернативные функции завезли, вместо ecma7 питухов.

                                            >document.getElementById

                                            >element.byId
                                            >element.byName
                                            >element.byTag
                                            >element.byCss
                                            Ответить
                                            • Типичный обфусцированный js-файл начинается с такой питушни:
                                              var i = document.getElementById;
                                              var n = document.getElementByName;
                                              Ответить
                                              • а
                                                var d = document;

                                                ?
                                                Ответить
                                                • Просто подумайте сколько раз js-макаки писали такие бессмертные строки за 20 с лишним лет.
                                                  function ebid(id){return document.getElementById(id);}
                                                  Резиг вообще целый jquery для этого написал.
                                                  Ответить
                                                  • Не поверю, что не существует такого npm-пакета.
                                                    Ответить
                                                  • Просто подумайте сколько раз js-макаки писали такие бессмертные строки за 20 с лишним лет.
                                                    function ebid(id){return document.getElementById(id);}
                                                    Резиг вообще целый jquery для этого написал.
                                                    Ответить
                                                • а
                                                  var d = document;

                                                  ?
                                                  Ответить
                                              • Типичный обфусцированный js-файл начинается с такой питушни:
                                                var i = document.getElementById;
                                                var n = document.getElementByName;
                                                Ответить
                                            • очень сильно борется за «TTFB»

                                              document.getElementById(&#039;username-input&#039;)

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

                                              Лучше бы они альтернативные функции завезли, вместо ecma7 питухов.

                                              document.getElementById

                                              element.byId
                                              element.byName
                                              element.byTag
                                              element.byCss
                                              Ответить
                                          • Наш инженерный отдел очень сильно борется за «TTFB», поэтому загрузка лишних (!) сторонних (!!) скриптов для нас — как серпом по «PHP». Особенно с учётом того, что велосипедный вореант — это двести неминифицированных строчек ЙАЖАСцрипта.
                                            Ответить
                                        • Ну там 400к и 100к gzipped.

                                          не буду грузить сорок два мегабайта скриптов чтобы отрисовать простой список

                                          Я тоже так думал, когда велосипедил, но потом нужен ещё какой-то компонент, потом ещё один, итд.

                                          Просто когда я изучал «АнгуларЙС» этой либы ещё не было. А вот оказывается теперь компоненты из коробки.
                                          Ответить
                                      • А, понял, я думал это два разных «Ангуляра».

                                        Не, пошли они нахуй, я не буду грузить сорок два мегабайта скриптов чтобы отрисовать простой список.
                                        Ответить
                                    • Не понял.
                                      Там вроде первый нагуляр, как и в НГК.Пространстве

                                      Просто ещё пару js подключить и лолжно работать.
                                      script src=https://ajax.googleapis.com/ajax/libs/angularjs/1.8.0/angular.min.js/script
                                        script src=https://ajax.googleapis.com/ajax/libs/angularjs/1.8.0/angular-animate.min.js/script
                                        script src=https://ajax.googleapis.com/ajax/libs/angularjs/1.8.0/angular-route.min.js/script
                                        script src=https://ajax.googleapis.com/ajax/libs/angularjs/1.8.0/angular-aria.min.js/script
                                        script src=https://ajax.googleapis.com/ajax/libs/angularjs/1.8.0/angular-messages.min.js/script
                                        script src=https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js/script
                                      
                                        script src=angular-material.min.js/script
                                        script src=docs.js/script
                                        script src=docs-demo-scripts.js/script
                                      Ответить
                                  • Это другой «Ангуляр», материальный.
                                    Ответить
                                • Вот чё нашёл.

                                  https://material.angularjs.org/latest/demo/autocomplete

                                  Для первого ангуляра.

                                  Ебать, а я когда-то как лошара скильная сам писал директивы.
                                  Ответить
                              • Логику инженерный отдел спокойно сам запилить может, там делов на несколько десятков строк ЙАЖАсцрипта максимум. Инженерный отдел горит от вёрстки.
                                Ответить
                            • Г разве на нагуляре?
                              Ответить
                            • Г разве на нагуляре?
                              Ответить
                          • С главной Гугла?
                            Ответить
                          • С главной Гугла?
                            Ответить
                        • Инженерный отдел начал пилить прототип, вроде получается. Посмотрим, как дальше пойдёт.

                          На самом деле не пилить, а пиздить, кто в конце угадает, с какого сайта — тому нихуя.
                          Ответить
                      • Сегодня вечером попытаемся что-то наговнякать, но у нашего инженерного отдела от фронта очень сильно пригорает, трудно работать.
                        Ответить
                        • Сегодня вечером попытаемся что-то наговнякать, но у нашего инженерного отдела от фронта очень сильно пригорает, трудно работать.
                          Ответить
                      • Сегодня вечером попытаемся что-то наговнякать, но у нашего инженерного отдела от фронта очень сильно пригорает, трудно работать.
                        Ответить
                    • А автокомплит для пользователей в поиске скоро будет?
                      Ответить
                  • Распознавалка капчи вынесена в отдельный сервис, с пользователями и авторизацией, перекатный петух его дёргает.
                    Ответить
                    • Распознавалка капчи вынесена в отдельный сервис, с пользователями и авторизацией, перекатный петух его дёргает.
                      Ответить
                    • Распознавалка капчи вынесена в отдельный сервис, с пользователями и авторизацией, перекатный петух его дёргает.
                      Ответить
                • на гитхаб

                  Опасный инструмент так то, если в плохие руки попадёт. Но установка тензорфлоу - достаточный барьер, наверное.
                  Ответить
            • Пока просто перекатывает оффтопы длиннее 400?
              Ответить
          • >он не настолько умный
            Куриные мозги
            Ответить
        • А если продолжать писать в старый тред, он будет напоминать о перекате?
          Ответить
          • А если продолжать писать в старый тред, он будет напоминать о перекате?
            Ответить
      • Перекатный петух заработал. Сейчас инженерный отдел занимается публикацией перекатного петуха на удалённый сервер.
        Ответить
    • Вчера в 22:04:30 кто-то минуту дёргал «НГК» по ~100 запросов в секунду. Какой багор (((
      Ответить
      • > 100 запросов в секунду

        Вот, это вам не сраный вордпресс.
        Ответить
      • Вчера в 22:04:30 кто-то минуту дёргал «НГК» по ~100 запросов в секунду. Какой багор (((
        Ответить
    • Автокомплит запилен. Работающая модель была готова ещё ночью, но потом инженерный отдел ебанулся на отличненько и решил сделать всё по феншую, с управлением стрелочками и всем таким.

      Убедительная просьба (особенно к дяде ПИ) проверить, поскольку кодинг в состоянии «подолгу смотрит на знакомые предметы и не может понять, что это» не располагает к написанию безошибочного кода.

      https://github.com/gost-gk/ngk/commit/d2bbc802a1de8152e9545fa069d4557737027486
      Ответить
      • Благодарю.

        С т.з. пользователя всё работает. И это хорошо.

        >но потом инженерный отдел ебанулся на отличненько и решил сделать всё по феншую, с управлением стрелочками и всем таким
        Спасибо! Enter даже переносит фокус.
        Ответить
        • Благодарю.

          С т.з. пользователя всё работает. И это хорошо.

          но потом инженерный отдел ебанулся на отличненько и решил сделать всё по феншую, с управлением стрелочками и всем таким
          Спасибо! Enter даже переносит фокус.
          Ответить
          • Благодарю.

            С т.з. пользователя всё работает. И это хорошо.

            но потом инженерный отдел ебанулся на отличненько и решил сделать всё по феншую, с управлением стрелочками и всем таким
            Спасибо! Enter даже переносит фокус.
            Ответить
      • $scope.$on('$destroy', function() {
                infScroll.cancel();
                updateSuggestions.cancel();
                window.removeEventListener('scroll', infScrollListener);
                window.removeEventListener('resize', adjustAutocompletionListPosition);
            });

        Ахахаха. Типично идиоматичный gost.
        Даже в жсухе освобождает ресурсы.
        Ответить
        • $scope.$on(&#039;$destroy&#039;, function() {
                  infScroll.cancel();
                  updateSuggestions.cancel();
                  window.removeEventListener(&#039;scroll&#039;, infScrollListener);
                  window.removeEventListener(&#039;resize&#039;, adjustAutocompletionListPosition);
              });

          Ахахаха. Типично идиоматичный gost.
          Даже в жсухе освобождает ресурсы.
          Ответить
        • $scope.$on(&#039;$destroy&#039;, function() {
                  infScroll.cancel();
                  updateSuggestions.cancel();
                  window.removeEventListener(&#039;scroll&#039;, infScrollListener);
                  window.removeEventListener(&#039;resize&#039;, adjustAutocompletionListPosition);
              });

          Ахахаха. Типично идиоматичный gost.
          Даже в жсухе освобождает ресурсы.
          Ответить
      • case 'ArrowDown': скроллит вниз не только список, но и всю страницу. Выглядит гадко.
        Браузер: ФФ.


        let request = {
                    method: 'GET',
                    url: '/api/autocomplete/user/name/' + encodeURI(username),
                    params: {}
                };
        
                $http(request).then(function(response) {
                    handleNewSuggestions(username, response.data.map(function(user) { return user.name; }));
                });

        А мне нравится $resource.
        https://docs.angularjs.org/api/ngResource/service/$resource

        Если уж объявлять request отдельным объектом, я бы сделал его ресурсом.
        И там формат-стринги есть, чтобы не конкатенировать запрос и не пердолиться с encodeURI.

        Но это так, вкусовщина.
        Ответить
        • case &#039;ArrowDown&#039;: скроллит вниз не только список, но и всю страницу. Выглядит гадко.
          Браузер: ФФ.


          let request = {
                      method: &#039;GET&#039;,
                      url: &#039;/api/autocomplete/user/name/&#039; + encodeURI(username),
                      params: {}
                  };
          
                  $http(request).then(function(response) {
                      handleNewSuggestions(username, response.data.map(function(user) { return user.name; }));
                  });

          А мне нравится $resource.
          https://docs.angularjs.org/api/ngResource/service/$resource

          Если уж объявлять request отдельным объектом, я бы сделал его ресурсом.
          И там формат-стринги есть, чтобы не конкатенировать запрос и не пердолиться с encodeURI.

          Но это так, вкусовщина.
          Ответить
      • В keydownах напрашивается
        event.preventDefault();
        Ответить
        • Спасибо, добавил, теперь вроде как не скроллит.

          > А мне нравится $resource.
          Любопытно, в следующей итерации, скорее всего, заменим.

          Ещё чуть-чуть улучшений добавил, в частности, нормальный ng-repeat с track by comment.id, теперь рендеринг должен быть существенно быстрее (особенно добавление/обновление комментов).
          Ответить
          • Теперь хорошо, да.

            >скорее всего, заменим

            Работает — не трогай!
            Ресурс дико удобен когда на одной ссылке полный crud. И put, и delete, etc.
            Ответить
            • > Работает — не трогай!
              Подтверждаю.
              Ну, если понадобится — заменим.
              Ответить
              • Работает — не трогай!
                Подтверждаю.
                Ну, если понадобится — заменим.
                Ответить
            • Теперь хорошо, да.

              скорее всего, заменим

              Работает — не трогай!
              Ресурс дико удобен когда на одной ссылке полный crud. И put, и delete, etc.
              Ответить
            • Теперь хорошо, да.

              скорее всего, заменим

              Работает — не трогай!
              Ресурс дико удобен когда на одной ссылке полный crud. И put, и delete, etc.
              Ответить
          • Спасибо, добавил, теперь вроде как не скроллит.

            А мне нравится $resource.
            Любопытно, в следующей итерации, скорее всего, заменим.

            Ещё чуть-чуть улучшений добавил, в частности, нормальный ng-repeat с track by comment.id, теперь рендеринг должен быть существенно быстрее (особенно добавление/обновление комментов).
            Ответить
            • Спасибо, добавил, теперь вроде как не скроллит.

              А мне нравится $resource.
              Любопытно, в следующей итерации, скорее всего, заменим.

              Ещё чуть-чуть улучшений добавил, в частности, нормальный ng-repeat с track by comment.id, теперь рендеринг должен быть существенно быстрее (особенно добавление/обновление комментов).
              Ответить
              • Спасибо, добавил, теперь вроде как не скроллит.

                А мне нравится $resource.
                Любопытно, в следующей итерации, скорее всего, заменим.

                Ещё чуть-чуть улучшений добавил, в частности, нормальный ng-repeat с track by comment.id, теперь рендеринг должен быть существенно быстрее (особенно добавление/обновление комментов).
                Ответить
            • Спасибо, добавил, теперь вроде как не скроллит.

              А мне нравится $resource.
              Любопытно, в следующей итерации, скорее всего, заменим.

              Ещё чуть-чуть улучшений добавил, в частности, нормальный ng-repeat с track by comment.id, теперь рендеринг должен быть существенно быстрее (особенно добавление/обновление комментов).
              Ответить
            • Спасибо, добавил, теперь вроде как не скроллит.

              А мне нравится $resource.
              Любопытно, в следующей итерации, скорее всего, заменим.

              Ещё чуть-чуть улучшений добавил, в частности, нормальный ng-repeat с track by comment.id, теперь рендеринг должен быть существенно быстрее (особенно добавление/обновление комментов).
              Ответить
          • Спасибо, добавил, теперь вроде как не скроллит.

            А мне нравится $resource.
            Любопытно, в следующей итерации, скорее всего, заменим.

            Ещё чуть-чуть улучшений добавил, в частности, нормальный ng-repeat с track by comment.id, теперь рендеринг должен быть существенно быстрее (особенно добавление/обновление комментов).
            Ответить
        • В keydownах напрашивается
          event.preventDefault();
          Ответить
      • Автокомплит запилен. Работающая модель была готова ещё ночью, но потом инженерный отдел ебанулся на отличненько и решил сделать всё по феншую, с управлением стрелочками и всем таким.

        Убедительная просьба (особенно к дяде ПИ) проверить, поскольку кодинг в состоянии «подолгу смотрит на знакомые предметы и не может понять, что это» не располагает к написанию безошибочного кода.

        https://github.com/gost-gk/ngk/commit/d2bbc802a1de8152e9545fa069d4557737027486
        Ответить
    • показать все, что скрытоvanished
      Ответить
      • > То-есть где-то есть указатель с адресом региона, где-то есть указатель на него, итд, и в итоге в каком-то потоке в стеке есть указатель, c которого всё начинается.
        Очень вряд ли. Так можно попробовать найти владельца памяти, но кто её выделил — останется загадкой. В любом случае, искать уко-ко-козатели в дампе приложения сложнее «puts("Hello World!")» — задача для очень крутых хакеров с очень большим количеством свободного времени. Либо для каких-то очень хитрых утилит.

        > Как бы вы потрекали high memory usage на удаленном виндохосте?
        Я бы запилил кастомный аллокатор с тегами а-ля ядерный https://techcommunity.microsoft.com/t5/ask-the-performance-team/an-introduction-to-pool-tags/ba-p/372983, но я в этом деле не специалист. Возможно, для этого есть более подходящие специализированные решения, вроде упомянутого «UMDH».
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • > Разве что почитать эту память, и попытаться понять по её содержимому.
            Да, это наиболее просто (но и наименее надёжно). Если там в куче валяется дохуя «89 50 4e 47 0d 0a 1a 0a», к примеру, то это будет весьма полезное подсказкой.
            Ответить
            • показать все, что скрытоvanished
              Ответить
            • Разве что почитать эту память, и попытаться понять по её содержимому.
              Да, это наиболее просто (но и наименее надёжно). Если там в куче валяется дохуя «89 50 4e 47 0d 0a 1a 0a», к примеру, то это будет весьма полезное подсказкой.
              Ответить
          • > в куче всегда видны классы объектов

            В крестах тоже на самом деле. По таблице виртуальных методов очень легко узнать класс если символы есть. Но мелочь без виртуальных методов так не опознать.

            Кстати в студии есть heap profiler. По крайней мере на живом процессе, х.з. как там с дампами.
            Ответить
            • в куче всегда видны классы объектов

              В крестах тоже на самом деле. По таблице виртуальных методов очень легко узнать класс если символы есть. Но мелочь без виртуальных методов так не опознать.

              Кстати в студии есть heap profiler. По крайней мере на живом процессе, х.з. как там с дампами.
              Ответить
          • vanished
            Ответить
        • То-есть где-то есть указатель с адресом региона, где-то есть указатель на него, итд, и в итоге в каком-то потоке в стеке есть указатель, c которого всё начинается.
          Очень вряд ли. Так можно попробовать найти владельца памяти, но кто её выделил — останется загадкой. В любом случае, искать уко-ко-козатели в дампе приложения сложнее «puts(Hello World!)» — задача для очень крутых хакеров с очень большим количеством свободного времени. Либо для каких-то очень хитрых утилит.

          Как бы вы потрекали high memory usage на удаленном виндохосте?
          Я бы запилил кастомный аллокатор с тегами а-ля ядерный https://techcommunity.microsoft.com/t5/ask-the-performance-team/an-introduction-to-pool-tags/ba-p/372983, но я в этом деле не специалист. Возможно, для этого есть более подходящие специализированные решения, вроде упомянутого «UMDH».
          Ответить
      • Здравствуйте. Это форум десктоп разработчиков под винду?
        Ответить
      • vanished
        Ответить
      • vanished
        Ответить
    • Редирект с gcode-xp.space на gcode.space установлен.
      Ответить
    • Перекатный петух теперь регулярно проверяет оффтопы на ваниш (1 раз в час, перерыв между запросами — 5 секунд) и будет перекатывать, если последний оффтоп заванишен (да, сообщение о перекате отправится в ваниш). Нагрузки на ГК удалось избежать благодаря применению параметра «?format=ajax», который позволяет полностью избежать загрузки комментариев.
      Ответить
      • какой скилл
        Ответить
      • На https://index.gcode.space/ (UPD: напоминаю о существовании API https://index.gcode.space/api/index, если кому надо) показания ваниша актуализированы (кроме первых двух хрю больше ничего не исчезло).
        Ответить
        • На https://index.gcode.space/ (UPD: напоминаю о существовании API [color=blue]https://index.gcode.space/api/index</span>, если кому надо) показания ваниша актуализированы (кроме первых двух хрю больше ничего не исчезло).
          Ответить
      • Перекатный петух теперь регулярно проверяет оффтопы на ваниш (1 раз в час, перерыв между запросами — 5 секунд) и будет перекатывать, если последний оффтоп заванишен (да, сообщение о перекате отправится в ваниш). Нагрузки на ГК удалось избежать благодаря применению параметра «?format=ajax», который позволяет полностью избежать загрузки комментариев.
        Ответить
    • Домен gcode.space продлён. gcode-xp.space отправится в лучший мир 23-го сентября сего года.
      Ответить
      • Спасибо.
        Ответить
      • Как думаешь, Сёме удалось звести новую машину с десяткой или что-то пошло не так и он пытается зайти через XP?
        Ответить
        • Как думаешь, Сёме удалось звести новую машину с десяткой или что-то пошло не так и он пытается зайти через XP?
          Ответить
      • Домен gcode.space продлён. gcode-xp.space отправится в лучший мир 23-го сентября сего года.
        Ответить
    • показать все, что скрытоvanished
      Ответить
    • Добавили ссылку на индекс.
      Инженерный отдел несколько проебался: мало того, что пришлось выкатывать мелкий кусок от будущего коммита с синхронизацией настроек (БД уже мигрировали), так ещё и на проде внезапно оказались какие-то старые изменения, которых на локальной машине не было. Какой багор (((
      Ответить
      • > которых на локальной машине не было

        Именно поэтому я коммитил из одной точки - прямо с прода.

        Какой анскилл )))
        Ответить
        • Какой анскилл )))

          Сейчас у инженерного отдела исходники «НГК» автоматически заливаются по «FTP» «SFTP» на отдельный дев-инстанс сразу после сохранения, можно в лайв-режиме смотреть изменения (правда, надо «Development Mode» в «Cloudflare» включать). Потом, когда всё начинает работать, с локальной машины коммитим в «Гитхаб» и с прода пуллим. Почти гринбля!
          Ответить
          • Ну это не гринбля, это обычный стейджинг.
            Ответить
          • >и с прода пуллим
            фу таким быть

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

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

            Сейчас у инженерного отдела исходники «НГК» автоматически заливаются по «FTP» «SFTP» на отдельный дев-инстанс сразу после сохранения, можно в лайв-режиме смотреть изменения (правда, надо «Development Mode» в «Cloudflare» включать). Потом, когда всё начинает работать, с локальной машины коммитим в «Гитхаб» и с прода пуллим. Почти гринбля!
            Ответить
      • Добавили ссылку на индекс.
        Инженерный отдел несколько проебался: мало того, что пришлось выкатывать мелкий кусок от будущего коммита с синхронизацией настроек (БД уже мигрировали), так ещё и на проде внезапно оказались какие-то старые изменения, которых на локальной машине не было. Какой багор (((
        Ответить
    • Перекат заванишенных оффтопов временно приостановлен.
      Ответить
    • psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type integer: "1;"
      LINE 3: WHERE comments.comment_id = '1;' ORDER BY comments.posted DE...
                                          ^
                                          
      psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type integer: "1;--"
      LINE 3: WHERE comments.comment_id = '1;--' ORDER BY comments.posted ...
                                          ^
                                          
      psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type integer: "1';--"
      LINE 3: WHERE comments.comment_id = '1'';--' ORDER BY comments.poste...
                                          ^
                                          
      sqlalchemy.exc.DataError: (psycopg2.errors.InvalidTextRepresentation) invalid input syntax for type integer: "1';--"
      LINE 3: WHERE comments.comment_id = '1'';--' ORDER BY comments.poste...
                                          ^
                                          
      psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type integer: "1";--"
      LINE 3: WHERE comments.comment_id = '1";--' ORDER BY comments.posted...
                                          ^

      Уважаемые! Если вам нужен дамп базы «NGK» — скачайте его в разделе «дампы», не нужно засирать логи, пожалуйста.
      Ответить
      • Да это поди ботнет какой-нибудь типичные уязвимости сканит?

        Зачем нгк пытаться сломать, там же нет никакой персональной инфы.
        Ответить
        • айпишник проверьте, ну

          если там китай, то это тчоно не мы
          Ответить
          • айпишник проверьте, ну

            если там китай, то это тчоно не мы
            Ответить
            • айпишник проверьте, ну

              если там китай, то это тчоно не мы
              Ответить
          • айпишник проверьте, ну

            если там китай, то это тчоно не мы
            Ответить
        • Да это поди ботнет какой-нибудь типичные уязвимости сканит?

          Зачем нгк пытаться сломать, там же нет никакой персональной инфы.
          Ответить
      • Хрюкалку заело
        Ответить
      • Так не смотри логи и всё.
        Ответить
      • пожалуйста, скажи, что ты не суваешь говно из гет запроса прямо в алчеми. Если там нужно число, то ты же дешаешь int(), верно?
        Ответить
        • А в чём проблема? Postgres не sqlite, с типами вполне разбирается.
          Ответить
          • а зачем слать в базу заведомое говно?
            Кстати, ORM разве не должен это сам исправлять? Я в алчеми не очень, но кажется что джангоорм такого бы не позволил
            Ответить
            • Ну до психосвиньи2 дошли эти '1";--', значит ORM сам не поправил.
              Ответить
              • Вот я и удивился)

                в джанго бы так не получилось. Там тип отсекли бы сразу после GET, и в ORM пришел бы уже инт
                ну и ORM бы его проверил)

                А в таком вот решении, где говнецо идет сразу в базу, я чувствую тонкие нотки PHP.
                Ответить
                • Ну возможно я в модели недоспецифировал что-то, поэтому ORM пропускает. А с другой стороны в базе все эти констрейнты уже есть, зачем 2 раза проверять?
                  Ответить
                  • а во фляшке незя
                    @app.route('/<id:int>')
                    def my_view_func(id):
                        # ...
                    Ответить
                    • а во фляшке незя
                      @app.route(&#039;/id:int&#039;)
                      def my_view_func(id):
                          # ...
                      Ответить
                  • Ну возможно я в модели недоспецифировал что-то, поэтому ORM пропускает. А с другой стороны в базе все эти констрейнты уже есть, зачем 2 раза проверять?
                    Ответить
                • Дык оно в базу и не идёт, его драйвер нахуй посылает.

                  > @app.route('/<id:int>')
                  Можно, я в новых API так и делаю, но у /api/comments id через GET-параметр принимается, его, насколько я знаю, только ручками надо проверять.
                  Ответить
                  • >LINE 3: WHERE comments.comment_id
                    это точно драйвер, а не база?

                    ну в любом случае лучше бы это фиксть на уровне GET или ОРМ кму
                    Ответить
                    • Погуглил, действительно, это база плюётся (https://www.psycopg.org/docs/errors.html).

                      Ну и ладно, похуй.
                      Ответить
                      • нет, не опхуй
                        втыкни там int()
                        Ответить
                        • Ой, бля, это ещё ошибки обрабатывать, ответ какой-то посылать*… Нахуй, пусть лучше так остаётся.

                          * Там пользовательский ввод нигде не проверяется, в случае ошибки просто отдаётся стандартный фласковский 500.
                          Ответить
                          • 500 и запись в логи про Int() в 925 раз луше чем 500 и запись в логи про ошибку вбазе
                            имхо
                            Ответить
                            • 500 и запись в логи про Int() в 925 раз луше чем 500 и запись в логи про ошибку вбазе
                              имхо
                              Ответить
                          • Ой, бля, это ещё ошибки обрабатывать, ответ какой-то посылать*… Нахуй, пусть лучше так остаётся.

                            * Там пользовательский ввод нигде не проверяется, в случае ошибки просто отдаётся стандартный фласковский 500.
                            Ответить
                        • нет, не опхуй
                          втыкни там int()
                          Ответить
                      • Погуглил, действительно, это база плюётся (https://www.psycopg.org/docs/errors.html).

                        Ну и ладно, похуй.
                        Ответить
                        • Погуглил, действительно, это база плюётся (https://www.psycopg.org/docs/errors.html).

                          Ну и ладно, похуй.
                          Ответить
                      • Погуглил, действительно, это база плюётся (https://www.psycopg.org/docs/errors.html).

                        Ну и ладно, похуй.
                        Ответить
                    • LINE 3: WHERE comments.comment_id
                      это точно драйвер, а не база?

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

                    @app.route(&#039;/id:int&#039;)
                    Можно, я в новых API так и делаю, но у /api/comments id через GET-параметр принимается, его, насколько я знаю, только ручками надо проверять.
                    Ответить
                  • Дык оно в базу и не идёт, его драйвер нахуй посылает.

                    @app.route(&#039;/id:int&#039;)
                    Можно, я в новых API так и делаю, но у /api/comments id через GET-параметр принимается, его, насколько я знаю, только ручками надо проверять.
                    Ответить
                • Что значит отсекли?
                  Это повод вернуть сразу еггог 400, а не заниматься отсечением
                  Ответить
                  • это значит, что либо аргумент кастится в int, и дальше идет как int, либо пользователю возвращается ошибка, если аргумент в инт не кастится
                    Ответить
                    • По-моему вы сейчас об одном и том же.

                      Если там число, то сразу кастануть в int.
                      Если там мусор, то сразу вернуть 400.
                      Ответить
                      • В "PHP" для проверки на число есть замечательная функция "is_numeric". А что есть в том языке, на котором написан "сток"?
                        Ответить
                        • s.isnumeric(), видимо в "PHP" подсмотрели.
                          Ответить
                        • В PHP для проверки на число есть замечательная функция is_numeric. А что есть в том языке, на котором написан сток?
                          Ответить
                      • Мне показалось, что "42pitux" надо скастить в 42 и продолжить, это и есть "отсечь"

                        Но если мы об одном и том же, то ладно.
                        Ответить
                        • Ну джангу вроде не пхпшники писали, чтобы так "отсекать"...
                          Ответить
                          • > parseInt("42pitux")
                            < 42
                            какбуто мало языков, в которых легко отсекать по-другому
                            Ответить
                          • Казалось бы, причём здесь сишка…
                            Ответить
                          • >> Ну джангу вроде не пхпшники писали

                            Именно поэтому я за «PHP».
                            Ответить
                            • а в пыхокале есть что-то хотя-бы отдаленное напоминающее джангу или рельсы?
                              Ответить
                              • Если отдалённо, то любой современный фреймворк. Правда, «Конардо» считает, что они не нужны.
                                Ответить
                                • Как там с DRY?

                                  могу написать модель один раз, и получить для нее таблицу, форму и ORM с админкой?
                                  Ответить
                                  • Я этим не пользуюсь. Я просто пишу всё в одном файле и теку.
                                    Ответить
                                    • А файл с общими функциями?
                                      Ответить
                                      • спроси у ротоёба
                                        у него есть такой
                                        Ответить
                                        • Наверное ещё и кочующий из одного проекта в другой без изменений, потому что изменять что-то в нём боязно, из-за этого всё может поломаться.
                                          Ответить
                                          • > изменять боязно

                                            Работает - не трогай.
                                            Ответить
                                          • всегда использую файл funcii.php, и теку
                                            копирую его по фтп во все свои проекты с 2004-го года

                                            там уже несколько десятков тысяч строк кода
                                            Ответить
                                          • Наверное ещё и кочующий из одного проекта в другой без изменений, потому что изменять что-то в нём боязно, из-за этого всё может поломаться.
                                            Ответить
                                            • Наверное ещё и кочующий из одного проекта в другой без изменений, потому что изменять что-то в нём боязно, из-за этого всё может поломаться.
                                              Ответить
                                          • Наверное ещё и кочующий из одного проекта в другой без изменений, потому что изменять что-то в нём боязно, из-за этого всё может поломаться.
                                            Ответить
                                        • спроси у ротоёба
                                          у него есть такой
                                          Ответить
                                      • А файл с общими функциями?
                                        Ответить
                                    • Я этим не пользуюсь. Я просто пишу всё в одном файле и теку.
                                      Ответить
                                  • Как там с DRY?

                                    могу написать модель один раз, и получить для нее таблицу, форму и ORM с админкой?
                                    Ответить
                                • Если отдалённо, то любой современный фреймворк. Правда, «Конардо» считает, что они не нужны.
                                  Ответить
                              • Если и есть, то я не знаю такого. Именно поэтому я за «PHP».
                                Ответить
                                • Если и есть, то я не знаю такого. Именно поэтому я за «PHP».
                                  Ответить
                                • Если и есть, то я не знаю такого. Именно поэтому я за «PHP».
                                  Ответить
                              • а в пыхокале есть что-то хотя-бы отдаленное напоминающее джангу или рельсы?
                                Ответить
                                • а в пыхокале есть что-то хотя-бы отдаленное напоминающее джангу или рельсы?
                                  Ответить
                              • а в пыхокале есть что-то хотя-бы отдаленное напоминающее джангу или рельсы?
                                Ответить
                              • а в пыхокале есть что-то хотя-бы отдаленное напоминающее джангу или рельсы?
                                Ответить
                            • Ну джангу вроде не пхпшники писали

                              Именно поэтому я за «PHP».
                              Ответить
                            • Ну джангу вроде не пхпшники писали

                              Именно поэтому я за «PHP».
                              Ответить
                          • Ну джангу вроде не пхпшники писали, чтобы так отсекать...
                            Ответить
                            • Ну джангу вроде не пхпшники писали, чтобы так отсекать...
                              Ответить
                        • vanished
                          Ответить
                        • Мне показалось, что 42pitux надо скастить в 42 и продолжить, это и есть отсечь

                          Но если мы об одном и том же, то ладно.
                          Ответить
                          • Мне показалось, что 42pitux надо скастить в 42 и продолжить, это и есть отсечь

                            Но если мы об одном и том же, то ладно.
                            Ответить
                          • Мне показалось, что 42pitux надо скастить в 42 и продолжить, это и есть отсечь

                            Но если мы об одном и том же, то ладно.
                            Ответить
                            • Мне показалось, что 42pitux надо скастить в 42 и продолжить, это и есть отсечь

                              Но если мы об одном и том же, то ладно.
                              Ответить
                        • Мне показалось, что 42pitux надо скастить в 42 и продолжить, это и есть отсечь

                          Но если мы об одном и том же, то ладно.
                          Ответить
                          • Мне показалось, что 42pitux надо скастить в 42 и продолжить, это и есть отсечь

                            Но если мы об одном и том же, то ладно.
                            Ответить
                        • Мне показалось, что 42pitux надо скастить в 42 и продолжить, это и есть отсечь

                          Но если мы об одном и том же, то ладно.
                          Ответить
                      • По-моему вы сейчас об одном и том же.

                        Если там число, то сразу кастануть в int.
                        Если там мусор, то сразу вернуть 400.
                        Ответить
                        • По-моему вы сейчас об одном и том же.

                          Если там число, то сразу кастануть в int.
                          Если там мусор, то сразу вернуть 400.
                          Ответить
                      • По-моему вы сейчас об одном и том же.

                        Если там число, то сразу кастануть в int.
                        Если там мусор, то сразу вернуть 400.
                        Ответить
                        • По-моему вы сейчас об одном и том же.

                          Если там число, то сразу кастануть в int.
                          Если там мусор, то сразу вернуть 400.
                          Ответить
                    • это значит, что либо аргумент кастится в int, и дальше идет как int, либо пользователю возвращается ошибка, если аргумент в инт не кастится
                      Ответить
                  • Что значит отсекли?
                    Это повод вернуть сразу еггог 400, а не заниматься отсечением
                    Ответить
                • Вот я и удивился)

                  в джанго бы так не получилось. Там тип отсекли бы сразу после GET, и в ORM пришел бы уже инт
                  ну и ORM бы его проверил)

                  А в таком вот решении, где говнецо идет сразу в базу, я чувствую тонкие нотки PHP.
                  Ответить
                • Вот я и удивился)

                  в джанго бы так не получилось. Там тип отсекли бы сразу после GET, и в ORM пришел бы уже инт
                  ну и ORM бы его проверил)

                  А в таком вот решении, где говнецо идет сразу в базу, я чувствую тонкие нотки PHP.
                  Ответить
              • Ну до психосвиньи2 дошли эти &#039;1;--&#039;, значит ORM сам не поправил.
                Ответить
            • а зачем слать в базу заведомое говно?
              Кстати, ORM разве не должен это сам исправлять? Я в алчеми не очень, но кажется что джангоорм такого бы не позволил
              Ответить
          • А в чём проблема? Postgres не sqlite, с типами вполне разбирается.
            Ответить
        • пожалуйста, скажи, что ты не суваешь говно из гет запроса прямо в алчеми. Если там нужно число, то ты же дешаешь int(), верно?
          Ответить
      • >psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type integer: 1;
        LINE 3: WHERE comments.comment_id = &#039;1;&#039; ORDER BY comments.posted DE...
                                            ^
                                            
        psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type integer: 1;--
        LINE 3: WHERE comments.comment_id = &#039;1;--&#039; ORDER BY comments.posted ...
                                            ^
                                            
        psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type integer: 1&#039;;--
        LINE 3: WHERE comments.comment_id = &#039;1&#039;&#039;;--&#039; ORDER BY comments.poste...
                                            ^
                                            
        sqlalchemy.exc.DataError: (psycopg2.errors.InvalidTextRepresentation) invalid input syntax for type integer: 1&#039;;--
        LINE 3: WHERE comments.comment_id = &#039;1&#039;&#039;;--&#039; ORDER BY comments.poste...
                                            ^
                                            
        psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type integer: 1;--
        LINE 3: WHERE comments.comment_id = &#039;1;--&#039; ORDER BY comments.posted...
                                            ^

        Уважаемые! Если вам нужен дамп базы «NGK» — скачайте его в разделе «дампы», не нужно засирать логи, пожалуйста.
        Ответить
    • Дампы каждой страницы поста с ГК, которые гостовский «НГК» загружал на протяжении всей своей работы (с 25-го сентября 2019-го года). Внутри архива — по одному архиву на каждый день до апреля сего года и общий архив с остальными дампами.
      В распакованном виде — что-то около 20-25 гигабайт.

      https://www.dropbox.com/s/7yr0r22lfzd3tf6/dumps.rar?dl=0
      Ответить
      • Какая бигдата )))

        После дедупликации поди метров до 100 без архива ужмётся.
        Ответить
        • ой блять не напоминай
          сижу как раз разбираюсь в TSDB (графит, инфлюкс) и колоночными БД над ними (кликхаус, друид)
          чтобы какое-то собственное мнение составить
          Ответить
          • ой блять не напоминай
            сижу как раз разбираюсь в TSDB (графит, инфлюкс) и колоночными БД над ними (кликхаус, друид)
            чтобы какое-то собственное мнение составить
            Ответить
        • >После дедупликации
          после удаления постов про нигерийские хуйцы
          Ответить
          • Я думаю госту будет лень что-то чистить вилкой. Просто прогонит парсер на том что есть да засунет в табличку.
            Ответить
          • После дедупликации
            после удаления постов про нигерийские хуйцы
            Ответить
        • Какая бигдата )))

          После дедупликации поди метров до 100 без архива ужмётся.
          Ответить
      • У наших отделов тяжёлый период уже полтора месяцев каждый период был трудным, поэтому сторонние работы затягиваются. Приносим извинения за доставленные неудобства.
        Ответить
        • Фьюжн
          Ответить
        • У наших отделов тяжёлый период уже полтора месяцев каждый период был трудным, поэтому сторонние работы затягиваются. Приносим извинения за доставленные неудобства.
          Ответить
      • Дампы каждой страницы поста с ГК, которые гостовский «НГК» загружал на протяжении всей своей работы (с 25-го сентября 2019-го года). Внутри архива — по одному архиву на каждый день до апреля сего года и общий архив с остальными дампами.
        В распакованном виде — что-то около 20-25 гигабайт.

        https://www.dropbox.com/s/7yr0r22lfzd3tf6/dumps.rar?dl=0
        Ответить
    • Инженерный отдел сделал прототип БД и переписал под неё парсеры, сейчас парсит дампы для тестового отдела: https://i.imgur.com/1CqAfMU.png. На очереди:
      1) Допиливание напильником БД (включая индексы);
      2) Автоматизация парсеров (в идеале выкинем «sync_states», будем всё гонять по «redis» и течь);
      3) Перепиливание API под новую схему.
      Ответить
      • У тебя, наверно, свободного времени валом?.. Если да, то я тебе завидую.
        Ответить
      • Ускорили парсинг в ~70 раз: из-за слишком глобальных xpath-ов («.//element» — рекурсивный поиск всех элементов в нижележащих узлах) там получалося O(N^2), и на особенно крупных тредах всё вставало раком (1367 комментов парсились больше минуты).
        Ответить
        • >.//element
          нельзя так делать, это любой XML птиух знает.

          А что, вы еще не наладили нормальный экспорт без парсинга говна?
          Ответить
          • Как только Страйко сделает API с джейсонами — так сразу и наладим. А пока приходится городить говно:
            def _parse_comments(comments_node: lxml.etree._Element) -> List[ParsedComment]:
                comments: List[ParsedComment] = []
            
                comment_nodes: List[Tuple[Optional[int], Any]] = [(None, c) for c in comments_node.xpath('./li[@class="hcomment"]')]
                while len(comment_nodes) > 0:
                    parent_id, comment_node = comment_nodes.pop()
                    
                    comment_wrapper = comment_node.xpath('./div[@class="entry-comment-wrapper"]')[0]
                    comment_link = comment_wrapper.xpath('./p[@class="entry-info"]/a[@class="comment-link"]')[0]
                    m = re.search('govnokod\\.ru/(\d+)#comment(\d+)$', comment_link.get('href', ''))
                    if m is None:
                        raise ValueError('Invalid comment-link (no regex match)')
                    post_id = int(m.group(1))
                    comment_id = int(m.group(2))
                    comments.append(_parse_comment_node(comment_wrapper, post_id, comment_id, parent_id))
            
                    for node in comment_node.xpath('./ul/li[@class="hcomment"]'):
                        comment_nodes.append((comment_id, node))
            
                return comments
            Ответить
            • на вкус как земля, конечно

              не твой код, а сама задача
              Ответить
              • Подтверждаю. Я заебался пытаться давать осмысленные имена всем этим врапперам, нодам и улам.
                Ответить
                • Хорошо что разметка стабильна и десятилетиями не менялась.
                  Ответить
                  • Хорошо что разметка стабильна и десятилетиями не менялась.
                    Ответить
                • В начале нулевых глупые переусложнятели мечтали, что все сайты будут на XML, который будет преврашаться в UI посредством XSL.

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

                  Теперь кушают
                  Ответить
                  • В начале нулевых глупые переусложнятели мечтали, что все сайты будут на XML, который будет преврашаться в UI посредством XSL.

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

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

                не твой код, а сама задача
                Ответить
            • > 'govnokod\\.ru/(\d+)#comment(\d+)$'
              Какая-то плохая питушня вроде трусов и крестика. Тут бы либо так, либо так:
              r'govnokod\.ru/(\d+)#comment(\d+)$'
              'govnokod\\.ru/(\\d+)#comment(\\d+)$'
              Ответить
              • И правда питушня, хуй знает, почему она работала.
                Ответить
                • И правда питушня, хуй знает, почему она работала.
                  Ответить
                • И правда питушня, хуй знает, почему она работала.
                  Ответить
              • Откуда такая любовь к регуляркам? В роду были регулировщицы?

                https://www.youtube.com/watch?v=fsSbZpDBH8I
                Ответить
                • Откуда такая любовь к регуляркам? В роду были регулировщицы?

                  https://www.youtube.com/watch?v=fsSbZpDBH8I
                  Ответить
              • &#039;govnokod\\.ru/(\d+)#comment(\d+)$&#039;
                Какая-то плохая питушня вроде трусов и крестика. Тут бы либо так, либо так:
                r&#039;govnokod\.ru/(\d+)#comment(\d+)$&#039;
                &#039;govnokod\\.ru/(\\d+)#comment(\\d+)$&#039;
                Ответить
            • Обрати внимание на классы со странными названиями «hatom», «hentry». Это он пытался реализовать микроформат:

              http://microformats.org/wiki/hatom

              Есть готовые библиотеки для работы с микроформатами.

              На новых сайтах микроформаты уступили место «RDFa» (XHTML) и «микроданным» (HTML, атрибуты itemscope, itemtype, itemprop), но «Говнокод» застрял в 2008-м.

              https://en.wikipedia.org/wiki/RDFa

              https://en.wikipedia.org/wiki/Microdata_(HTML)
              Ответить
              • P.S. Да, попрошу не путать «microformats» с «microformats2». Могут и напутать. В «microformats» класс «hentry», а в «microformats2» класс «h-entry».

                Реальный пример пакета для «Питона»:
                https://pypi.org/project/hentry/
                Ответить
                • А кто их реально парсит? Гуглы да яндексы всякие чтобы в результатах красиво показать?
                  Ответить
                  • Так точно. У них даже в хелпе есть список поддерживаемых форматов.

                    «Яндекс», «Гугл», «Бинг» и даже менее известные поисковики выводят звёздочки (от одной до пяти) у результата поиска, если страница содержит коды разметки «Review».
                    Ответить
                    • Так точно. У них даже в хелпе есть список поддерживаемых форматов.

                      «Яндекс», «Гугл», «Бинг» и даже менее известные поисковики выводят звёздочки (от одной до пяти) у результата поиска, если страница содержит коды разметки «Review».
                      Ответить
                    • Так точно. У них даже в хелпе есть список поддерживаемых форматов.

                      «Яндекс», «Гугл», «Бинг» и даже менее известные поисковики выводят звёздочки (от одной до пяти) у результата поиска, если страница содержит коды разметки «Review».
                      Ответить
                  • Чуть не забыл. Кроме «microformats», «microformats 2.0», «RDFa», «microdata» есть ещё «LD-JSON» — это попытка перевести «RDFa» с языка «XML» на язык «JSON». И да, «Гугл» и «Яндекс» даже кое-что в этом формате вытягивают. Например, адрес компании.

                    P.S. То есть «JSON-LD»:
                    https://ru.wikipedia.org/wiki/JSON-LD
                    Ответить
                    • Чуть не забыл. Кроме «microformats», «microformats 2.0», «RDFa», «microdata» есть ещё «LD-JSON» — это попытка перевести «RDFa» с языка «XML» на язык «JSON». И да, «Гугл» и «Яндекс» даже кое-что в этом формате вытягивают. Например, адрес компании.

                      P.S. То есть «JSON-LD»:
                      https://ru.wikipedia.org/wiki/JSON-LD
                      Ответить
                  • А ещё на «Говнокоде» есть фейсбуковский «OpenGraph». Представлен единственным элементом:
                    <meta property="og:image" content="http://govnokod.ru/images/brand.gif" />
                    Ответить
                    • А как сделать опенсурсный сайт, кстати?
                      Ответить
                      • Убедиться, что .git попадает под раздачу.
                        Ответить
                        • Или .svn.

                          https://habr.com/ru/post/70330/
                          Ответить
                          • > Единый CSS для календарей яндекса собирается из десятка CSS средстами $make из консоли 0_0;
                            "gulp" древних! w(°o°)w
                            Ответить
                          • > P.S. Во избежании конфликтов все исходные коды, полученные за время исследования были распечатанны и сожжены.

                            Вот это да.

                            А лепрозорий правда существует? Что это за кал, даже ни одного скриншота не видел.
                            Ответить
                            • Х. з. Я видел несколько зеркал. Например, murmolka.com, но оно уже не работает.
                              Ответить
                              • Х. з. Я видел несколько зеркал. Например, murmolka.com, но оно уже не работает.
                                Ответить
                              • Х. з. Я видел несколько зеркал. Например, murmolka.com, но оно уже не работает.
                                Ответить
                            • Внезапно:

                              https://leprosorium.d3.ru
                              Ответить
                            • naposmotri.com тоже уже не работает.
                              Ответить
                            • P.S. Во избежании конфликтов все исходные коды, полученные за время исследования были распечатанны и сожжены.

                              Вот это да.

                              А лепрозорий правда существует? Что это за кал, даже ни одного скриншота не видел.
                              Ответить
                              • P.S. Во избежании конфликтов все исходные коды, полученные за время исследования были распечатанны и сожжены.

                                Вот это да.

                                А лепрозорий правда существует? Что это за кал, даже ни одного скриншота не видел.
                                Ответить
                              • P.S. Во избежании конфликтов все исходные коды, полученные за время исследования были распечатанны и сожжены.

                                Вот это да.

                                А лепрозорий правда существует? Что это за кал, даже ни одного скриншота не видел.
                                Ответить
                            • P.S. Во избежании конфликтов все исходные коды, полученные за время исследования были распечатанны и сожжены.

                              Вот это да.

                              А лепрозорий правда существует? Что это за кал, даже ни одного скриншота не видел.
                              Ответить
                              • P.S. Во избежании конфликтов все исходные коды, полученные за время исследования были распечатанны и сожжены.

                                Вот это да.

                                А лепрозорий правда существует? Что это за кал, даже ни одного скриншота не видел.
                                Ответить
                          • Или .svn.

                            https://habr.com/ru/post/70330/
                            Ответить
                        • Под раздачу в DC++
                          Ответить
                        • Убедиться, что .git попадает под раздачу.
                          Ответить
                      • Сделать исходники доступными из браузера (вроде в "Apache" так можно).
                        Ответить
                        • Знаю историю как питух пхпкод хранил в файле с расширением ``inc``, и подключал его в ``пхп``

                          Ему удалось сделать исходники доступными из браузера
                          Ответить
                          • Тоже вариант.
                            Ответить
                          • Знаю историю как питух пхпкод хранил в файле с расширением ``inc``, и подключал его в ``пхп``

                            Ему удалось сделать исходники доступными из браузера
                            Ответить
                            • Знаю историю как питух пхпкод хранил в файле с расширением ``inc``, и подключал его в ``пхп``

                              Ему удалось сделать исходники доступными из браузера
                              Ответить
                              • Знаю историю как питух пхпкод хранил в файле с расширением ``inc``, и подключал его в ``пхп``

                                Ему удалось сделать исходники доступными из браузера
                                Ответить
                              • Знаю историю как питух пхпкод хранил в файле с расширением ``inc``, и подключал его в ``пхп``

                                Ему удалось сделать исходники доступными из браузера
                                Ответить
                            • Знаю историю как питух пхпкод хранил в файле с расширением ``inc``, и подключал его в ``пхп``

                              Ему удалось сделать исходники доступными из браузера
                              Ответить
                          • Знаю историю как питух пхпкод хранил в файле с расширением ``inc``, и подключал его в ``пхп``

                            Ему удалось сделать исходники доступными из браузера
                            Ответить
                        • Раньше было много серверов, настроенных так, что при добавлении тильды к имени (например, index.php~ или guestbook.pl~) скрипт не исполнялся, а отдавался в сыром виде. Фреймворков с роутингом тогда не было.
                          Ответить
                          • Какой багор )))
                            Ответить
                          • А матильда в начале - это тоже из-за этого? http://site.govno/~/knigi/prophp.pdf или как-то так.
                            Ответить
                            • нет
                              это
                              https://httpd.apache.org/docs/2.4/mod/mod_userdir.html
                              Ответить
                            • А матильда в начале - это тоже из-за этого? http://site.govno/~/knigi/prophp.pdf или как-то так.
                              Ответить
                            • А матильда в начале - это тоже из-за этого? http://site.govno/~/knigi/prophp.pdf или как-то так.
                              Ответить
                            • А матильда в начале - это тоже из-за этого? http://site.govno/~/knigi/prophp.pdf или как-то так.
                              Ответить
                          • Раньше было много серверов, настроенных так, что при добавлении тильды к имени (например, index.php~ или guestbook.pl~) скрипт не исполнялся, а отдавался в сыром виде. Фреймворков с роутингом тогда не было.
                            Ответить
                          • Раньше было много серверов, настроенных так, что при добавлении тильды к имени (например, index.php~ или guestbook.pl~) скрипт не исполнялся, а отдавался в сыром виде. Фреймворков с роутингом тогда не было.
                            Ответить
                        • Сделать исходники доступными из браузера (вроде в Apache так можно).
                          Ответить
                          • Сделать исходники доступными из браузера (вроде в Apache так можно).
                            Ответить
                        • Сделать исходники доступными из браузера (вроде в Apache так можно).
                          Ответить
                      • А как сделать опенсурсный сайт, кстати?
                        Ответить
                    • А ещё на «Говнокоде» есть фейсбуковский «OpenGraph». Представлен единственным элементом:
                      meta property=og:image content=http://govnokod.ru/images/brand.gif /
                      Ответить
                      • А ещё на «Говнокоде» есть фейсбуковский «OpenGraph». Представлен единственным элементом:
                        meta property=og:image content=http://govnokod.ru/images/brand.gif /
                        Ответить
                  • А кто их реально парсит? Гуглы да яндексы всякие чтобы в результатах красиво показать?
                    Ответить
                • P.S. Да, попрошу не путать «microformats» с «microformats2». Могут и напутать. В «microformats» класс «hentry», а в «microformats2» класс «h-entry».

                  Реальный пример пакета для «Питона»:
                  https://pypi.org/project/hentry/
                  Ответить
              • Именно поэтому я за "Говнокод".
                Ответить
              • Обрати внимание на классы со странными названиями «hatom», «hentry». Это он пытался реализовать микроформат:

                http://microformats.org/wiki/hatom

                Есть готовые библиотеки для работы с микроформатами.

                На новых сайтах микроформаты уступили место «RDFa» (XHTML) и «микроданным» (HTML, атрибуты itemscope, itemtype, itemprop), но «Говнокод» застрял в 2008-м.

                https://en.wikipedia.org/wiki/RDFa

                https://en.wikipedia.org/wiki/Microdata_(HTML)
                Ответить
            • Как только Страйко сделает API с джейсонами — так сразу и наладим. А пока приходится городить говно:
              >def _parse_comments(comments_node: lxml.etree._Element) - List[ParsedComment]:
                  comments: List[ParsedComment] = []
              
                  comment_nodes: List[Tuple[Optional[int], Any]] = [(None, c) for c in comments_node.xpath(&#039;./li[@class=hcomment]&#039;)]
                  while len(comment_nodes)  0:
                      parent_id, comment_node = comment_nodes.pop()
                      
                      comment_wrapper = comment_node.xpath(&#039;./div[@class=entry-comment-wrapper]&#039;)[0]
                      comment_link = comment_wrapper.xpath(&#039;./p[@class=entry-info]/a[@class=comment-link]&#039;)[0]
                      m = re.search(&#039;govnokod\\.ru/(\d+)#comment(\d+)$&#039;, comment_link.get(&#039;href&#039;, &#039;&#039;))
                      if m is None:
                          raise ValueError(&#039;Invalid comment-link (no regex match)&#039;)
                      post_id = int(m.group(1))
                      comment_id = int(m.group(2))
                      comments.append(_parse_comment_node(comment_wrapper, post_id, comment_id, parent_id))
              
                      for node in comment_node.xpath(&#039;./ul/li[@class=hcomment]&#039;):
                          comment_nodes.append((comment_id, node))
              
                  return comments
              Ответить
              • Как только Страйко сделает API с джейсонами — так сразу и наладим. А пока приходится городить говно:
                >def _parse_comments(comments_node: lxml.etree._Element) - List[ParsedComment]:
                    comments: List[ParsedComment] = []
                
                    comment_nodes: List[Tuple[Optional[int], Any]] = [(None, c) for c in comments_node.xpath(&;#039;./li[@class=hcomment]&;#039;)]
                    while len(comment_nodes)  0:
                        parent_id, comment_node = comment_nodes.pop()
                        
                        comment_wrapper = comment_node.xpath(&;#039;./div[@class=entry-comment-wrapper]&;#039;)[0]
                        comment_link = comment_wrapper.xpath(&;#039;./p[@class=entry-info]/a[@class=comment-link]&;#039;)[0]
                        m = re.search(&;#039;govnokod\\.ru/(\d+)#comment(\d+)$&;#039;, comment_link.get(&;#039;href&;#039;, &;#039;&;#039;))
                        if m is None:
                            raise ValueError(&;#039;Invalid comment-link (no regex match)&;#039;)
                        post_id = int(m.group(1))
                        comment_id = int(m.group(2))
                        comments.append(_parse_comment_node(comment_wrapper, post_id, comment_id, parent_id))
                
                        for node in comment_node.xpath(&;#039;./ul/li[@class=hcomment]&;#039;):
                            comment_nodes.append((comment_id, node))
                
                    return comments
                Ответить
            • Как только Страйко сделает API с джейсонами — так сразу и наладим. А пока приходится городить говно:
              >def _parse_comments(comments_node: lxml.etree._Element) - List[ParsedComment]:
                  comments: List[ParsedComment] = []
              
                  comment_nodes: List[Tuple[Optional[int], Any]] = [(None, c) for c in comments_node.xpath(&#039;./li[@class=hcomment]&#039;)]
                  while len(comment_nodes)  0:
                      parent_id, comment_node = comment_nodes.pop()
                      
                      comment_wrapper = comment_node.xpath(&#039;./div[@class=entry-comment-wrapper]&#039;)[0]
                      comment_link = comment_wrapper.xpath(&#039;./p[@class=entry-info]/a[@class=comment-link]&#039;)[0]
                      m = re.search(&#039;govnokod\\.ru/(\d+)#comment(\d+)$&#039;, comment_link.get(&#039;href&#039;, &#039;&#039;))
                      if m is None:
                          raise ValueError(&#039;Invalid comment-link (no regex match)&#039;)
                      post_id = int(m.group(1))
                      comment_id = int(m.group(2))
                      comments.append(_parse_comment_node(comment_wrapper, post_id, comment_id, parent_id))
              
                      for node in comment_node.xpath(&#039;./ul/li[@class=hcomment]&#039;):
                          comment_nodes.append((comment_id, node))
              
                  return comments
              Ответить
            • Как только Страйко сделает API с джейсонами — так сразу и наладим. А пока приходится городить говно:
              >def _parse_comments(comments_node: lxml.etree._Element) - List[ParsedComment]:
                  comments: List[ParsedComment] = []
              
                  comment_nodes: List[Tuple[Optional[int], Any]] = [(None, c) for c in comments_node.xpath(&#039;./li[@class=hcomment]&#039;)]
                  while len(comment_nodes)  0:
                      parent_id, comment_node = comment_nodes.pop()
                      
                      comment_wrapper = comment_node.xpath(&#039;./div[@class=entry-comment-wrapper]&#039;)[0]
                      comment_link = comment_wrapper.xpath(&#039;./p[@class=entry-info]/a[@class=comment-link]&#039;)[0]
                      m = re.search(&#039;govnokod\\.ru/(\d+)#comment(\d+)$&#039;, comment_link.get(&#039;href&#039;, &#039;&#039;))
                      if m is None:
                          raise ValueError(&#039;Invalid comment-link (no regex match)&#039;)
                      post_id = int(m.group(1))
                      comment_id = int(m.group(2))
                      comments.append(_parse_comment_node(comment_wrapper, post_id, comment_id, parent_id))
              
                      for node in comment_node.xpath(&#039;./ul/li[@class=hcomment]&#039;):
                          comment_nodes.append((comment_id, node))
              
                  return comments
              Ответить
              • Как только Страйко сделает API с джейсонами — так сразу и наладим. А пока приходится городить говно:
                >def _parse_comments(comments_node: lxml.etree._Element) - List[ParsedComment]:
                    comments: List[ParsedComment] = []
                
                    comment_nodes: List[Tuple[Optional[int], Any]] = [(None, c) for c in comments_node.xpath(&;#039;./li[@class=hcomment]&;#039;)]
                    while len(comment_nodes)  0:
                        parent_id, comment_node = comment_nodes.pop()
                        
                        comment_wrapper = comment_node.xpath(&;#039;./div[@class=entry-comment-wrapper]&;#039;)[0]
                        comment_link = comment_wrapper.xpath(&;#039;./p[@class=entry-info]/a[@class=comment-link]&;#039;)[0]
                        m = re.search(&;#039;govnokod\\.ru/(\d+)#comment(\d+)$&;#039;, comment_link.get(&;#039;href&;#039;, &;#039;&;#039;))
                        if m is None:
                            raise ValueError(&;#039;Invalid comment-link (no regex match)&;#039;)
                        post_id = int(m.group(1))
                        comment_id = int(m.group(2))
                        comments.append(_parse_comment_node(comment_wrapper, post_id, comment_id, parent_id))
                
                        for node in comment_node.xpath(&;#039;./ul/li[@class=hcomment]&;#039;):
                            comment_nodes.append((comment_id, node))
                
                    return comments
                Ответить
              • Как только Страйко сделает API с джейсонами — так сразу и наладим. А пока приходится городить говно:
                >def _parse_comments(comments_node: lxml.etree._Element) - List[ParsedComment]:
                    comments: List[ParsedComment] = []
                
                    comment_nodes: List[Tuple[Optional[int], Any]] = [(None, c) for c in comments_node.xpath(&;#039;./li[@class=hcomment]&;#039;)]
                    while len(comment_nodes)  0:
                        parent_id, comment_node = comment_nodes.pop()
                        
                        comment_wrapper = comment_node.xpath(&;#039;./div[@class=entry-comment-wrapper]&;#039;)[0]
                        comment_link = comment_wrapper.xpath(&;#039;./p[@class=entry-info]/a[@class=comment-link]&;#039;)[0]
                        m = re.search(&;#039;govnokod\\.ru/(\d+)#comment(\d+)$&;#039;, comment_link.get(&;#039;href&;#039;, &;#039;&;#039;))
                        if m is None:
                            raise ValueError(&;#039;Invalid comment-link (no regex match)&;#039;)
                        post_id = int(m.group(1))
                        comment_id = int(m.group(2))
                        comments.append(_parse_comment_node(comment_wrapper, post_id, comment_id, parent_id))
                
                        for node in comment_node.xpath(&;#039;./ul/li[@class=hcomment]&;#039;):
                            comment_nodes.append((comment_id, node))
                
                    return comments
                Ответить
          • Подтверждаю.
            Ответить
          • .//element
            нельзя так делать, это любой XML птиух знает.

            А что, вы еще не наладили нормальный экспорт без парсинга говна?
            Ответить
        • Ускорили парсинг в ~70 раз: из-за слишком глобальных xpath-ов («.//element» — рекурсивный поиск всех элементов в нижележащих узлах) там получалося O(N^2), и на особенно крупных тредах всё вставало раком (1367 комментов парсились больше минуты).
          Ответить
      • Перепилили API, допилили индексы, остались полнотекстовые индексы (самое сложное) и парсеры.
        Ответить
        • Перепилили API, допилили индексы, остались полнотекстовые индексы (самое сложное) и парсеры.
          Ответить
          • Перепилили API, допилили индексы, остались полнотекстовые индексы (самое сложное) и парсеры.
            Ответить
            • Перепилили API, допилили индексы, остались полнотекстовые индексы (самое сложное) и парсеры.
              Ответить
      • Инженерный отдел сделал прототип БД и переписал под неё парсеры, сейчас парсит дампы для тестового отдела: https://i.imgur.com/1CqAfMU.png. На очереди:
        1) Допиливание напильником БД (включая индексы);
        2) Автоматизация парсеров (в идеале выкинем «sync_states», будем всё гонять по «redis» и течь);
        3) Перепиливание API под новую схему.
        Ответить
        • Инженерный отдел сделал прототип БД и переписал под неё парсеры, сейчас парсит дампы для тестового отдела: https://i.imgur.com/1CqAfMU.png. На очереди:
          1) Допиливание напильником БД (включая индексы);
          2) Автоматизация парсеров (в идеале выкинем «sync_states», будем всё гонять по «redis» и течь);
          3) Перепиливание API под новую схему.
          Ответить
    • Свинокур.

      Ну и, соответственно, свинокурник: пирог такой
      Ответить
      • А свинокурсник – это тот, с кем ты учишься в вузе и ходишь вместе в столовку.
        Ответить
        • А Свинокурск - город, где живёт макака.
          Минус за кормление уёбка въёбан.
          Ответить
        • А свинокурсник – это тот, с кем ты учишься в вузе и ходишь вместе в столовку.
          Ответить
        • А свинокурсник – это тот, с кем ты учишься в вузе и ходишь вместе в столовку.
          Ответить
          • А свинокурсник – это тот, с кем ты учишься в вузе и ходишь вместе в столовку.
            Ответить
      • Свинокур.

        Ну и, соответственно, свинокурник: пирог такой
        Ответить
    • Есть тут ма-те-ма-ти-ки?

      Допустим, я хочу уравнение окружности, которая лежит на сфере, при этом мне известна точка на сфере и радиус окружности, т.е. длина дуги от точки до границы окружности.

      Чтобы получить уравнение окружности на сфере, я пересекаю плоскость со сферой. Плоскость я строю через точку, которая лежит чуть ниже поверхности сферы, и вектор нормали, который исходит из центра сферы и входит в точку на сфере.

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

      Вопрос: я правильно мыслю? У меня получится таким образом получить уравнение окружности на сфере по координате её центра и радиусу?
      Ответить
      • Дайвинчик?
        Кстати, замля плоская, может это как-то можно использовать?
        Ответить
        • > Дайвинчик?

          Возможно..... А как ты угадал?

          > Кстати, замля плоская

          Ты просто низкий и тебе не видно, как она загогуливается у горизонта. Был бы как я — 163см минимум — тоже бы увидел!
          Ответить
          • Дайвинчик?

            Возможно..... А как ты угадал?

            Кстати, замля плоская

            Ты просто низкий и тебе не видно, как она загогуливается у горизонта. Был бы как я — 163см минимум — тоже бы увидел!
            Ответить
          • Дайвинчик?

            Возможно..... А как ты угадал?

            Кстати, замля плоская

            Ты просто низкий и тебе не видно, как она загогуливается у горизонта. Был бы как я — 163см минимум — тоже бы увидел!
            Ответить
        • Дайвинчик?
          Кстати, замля плоская, может это как-то можно использовать?
          Ответить
      • Иди в вуз там есть аналитическая геометрия
        Ответить
        • > аналитическая

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

          Питушня какая-то.
          Ответить
          • аналитическая

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

            Питушня какая-то.
            Ответить
        • Иди в вуз там есть аналитическая геометрия
          Ответить
      • XY-problem? Зачем тебе уравнение окружности?
        Ответить
        • Чтобы потом три такие окружности пересечь и найти прикол. Решать планарную задачу мне не хочется, это анскилл, да ещё и менее точно.
          Ответить
          • Хм, может тебе проще 3 сферы пересечь? Пробовал гуглить такое? 4 могут и не пересечься.
            Ответить
            • Какой багор )))

              И правда! Я об этом думал, но почему-то отбросил такую идею. Сейчас ещё разок погуглил – и поисковик мне показал статью про трилатерацию.

              Как раз туда можно ещё сферическую систему координат прикрутить, скорее всего.
              Ответить
              • Какой багор )))

                И правда! Я об этом думал, но почему-то отбросил такую идею. Сейчас ещё разок погуглил – и поисковик мне показал статью про трилатерацию.

                Как раз туда можно ещё сферическую систему координат прикрутить, скорее всего.
                Ответить
            • Хм, может тебе проще 3 сферы пересечь? Пробовал гуглить такое? 4 могут и не пересечься.
              Ответить
              • Хм, может тебе проще 3 сферы пересечь? Пробовал гуглить такое? 4 могут и не пересечься.
                Ответить
          • Чтобы потом три такие окружности пересечь и найти прикол. Решать планарную задачу мне не хочется, это анскилл, да ещё и менее точно.
            Ответить
            • Чтобы потом три такие окружности пересечь и найти прикол. Решать планарную задачу мне не хочется, это анскилл, да ещё и менее точно.
              Ответить
        • Вообще, с точками на сфере лучше работать в сферических координатах.

          Вангую, ты хочешь описать множество точек на определенном расстоянии от заданной. Подумай не как математик, а как программист.
          Перебирай "Зенит", а по нему вычисли какой должен быть "Азимут". (но это не точно, первое что пришло в голову).

          А ещё лучше - перебирай все адреса, и находи те, которые больше всего тебе подходят по расстояниям.
          Ответить
          • > Вообще, с точками на сфере лучше работать в сферических координатах.

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

            > Вангую, ты хочешь описать множество точек на определенном расстоянии от заданной.

            Три таких множества, чтобы найти их точку пересечения.

            > А ещё лучше - перебирай все адреса

            Придётся с картами интегрироваться и ябаться, а мне хочется просто поябаться. Плюс можно будет потом эту штуку ещё для чего-нибудь использовать.
            Ответить
            • > а мне хочется просто поябаться

              )))))))))
              Блядь, вот так вот! Чтобы поябаться бедные прогромисты должны решить системы нелинейных уравнений, и то не факт, что поябутся.
              Ответить
              • Что-то я ещё ничего не сделал, а уже наябался всласть!

                Кто бы мог подумать, что в самой важной — и к тому же заключительной — части моего плана, в нахождении пересечений кругов/сфер, придётся решать системы нелинейных алгебраических уравнений, для которых нет аналитических методов решения >:С

                У меня есть два вопроса к математикам:

                1. Почему вы ещё не изобрели аналитическое решение систем линейных алгебраических уравнений?

                2. Как вам такая идея ...
                (оформляю в псевдокоде)
                let A[3] = точка с координатами x, y, z.
                let B[3] = точка с координатами x, y, z.
                let C[3] = точка с координатами x, y, z.
                
                let D[3] = расстояния от точек до места прикола.
                
                let rds[3] = радиусы каждой из трёх сфер, описанных вокруг точек A, B, C.
                
                R = радиус планеты «The Mля».
                
                function dist(A, B):
                  // расстояние между точками A и B.
                endfn
                
                for a in 0..90:
                  for b in 0..180:
                    let X[3] // некоторая точка на сфере вокруг точки A.
                    X[0] = A[0] + R * sin(a) * cos(b) // x
                    X[1] = A[1] + R * sin(a) * cos(b) // y
                    X[2] = A[2] + R * cos(a) // z
                
                    if ( dist(X, B) == rds[1] AND dist(X, C) == rds[2] ):
                      echo "Нашли точку, теперь посчитаем и вернём ответ :)"
                      геtuгn result;


                Для перформанса можно перед тем как считать всё, что после X[0..3], проверить X на принадлежность плоскости замли.

                ... ?
                Ответить
                • > для которых нет аналитических методов решения

                  А в этом как раз отличие математика от инженера. Математик безуспешно ищет аналитическое решение, которого для 99.9% интересных задач не существует. А инженер юзает приближённые методы и течёт.
                  Ответить
                  • какая гидрогазодинамика ))) во всех смыслах
                    Ответить
                    • какая гидрогазодинамика ))) во всех смыслах
                      Ответить
                      • какая гидрогазодинамика ))) во всех смыслах
                        Ответить
                    • какая гидрогазодинамика ))) во всех смыслах
                      Ответить
                  • для которых нет аналитических методов решения

                    А в этом как раз отличие математика от инженера. Математик безуспешно ищет аналитическое решение, которого для 99.9% интересных задач не существует. А инженер юзает приближённые методы и течёт.
                    Ответить
                • Что-то я ещё ничего не сделал, а уже наябался всласть!

                  Кто бы мог подумать, что в самой важной — и к тому же заключительной — части моего плана, в нахождении пересечений кругов/сфер, придётся решать системы нелинейных алгебраических уравнений, для которых нет аналитических методов решения :С

                  У меня есть два вопроса к математикам:

                  1. Почему вы ещё не изобрели аналитическое решение систем линейных алгебраических уравнений?

                  2. Как вам такая идея ...
                  (оформляю в псевдокоде)
                  let A[3] = точка с координатами x, y, z.
                  let B[3] = точка с координатами x, y, z.
                  let C[3] = точка с координатами x, y, z.
                  
                  let D[3] = расстояния от точек до места прикола.
                  
                  let rds[3] = радиусы каждой из трёх сфер, описанных вокруг точек A, B, C.
                  
                  R = радиус планеты «The Mля».
                  
                  function dist(A, B):
                    // расстояние между точками A и B.
                  endfn
                  
                  for a in 0..90:
                    for b in 0..180:
                      let X[3] // некоторая точка на сфере вокруг точки A.
                      X[0] = A[0] + R * sin(a) * cos(b) // x
                      X[1] = A[1] + R * sin(a) * cos(b) // y
                      X[2] = A[2] + R * cos(a) // z
                  
                      if ( dist(X, B) == rds[1] AND dist(X, C) == rds[2] ):
                        echo Нашли точку, теперь посчитаем и вернём ответ :)
                        геtuгn result;


                  Для перформанса можно перед тем как считать всё, что после X[0..3], проверить X на принадлежность плоскости замли.

                  ... ?
                  Ответить
                  • Что-то я ещё ничего не сделал, а уже наябался всласть!

                    Кто бы мог подумать, что в самой важной — и к тому же заключительной — части моего плана, в нахождении пересечений кругов/сфер, придётся решать системы нелинейных алгебраических уравнений, для которых нет аналитических методов решения :С

                    У меня есть два вопроса к математикам:

                    1. Почему вы ещё не изобрели аналитическое решение систем линейных алгебраических уравнений?

                    2. Как вам такая идея ...
                    (оформляю в псевдокоде)
                    let A[3] = точка с координатами x, y, z.
                    let B[3] = точка с координатами x, y, z.
                    let C[3] = точка с координатами x, y, z.
                    
                    let D[3] = расстояния от точек до места прикола.
                    
                    let rds[3] = радиусы каждой из трёх сфер, описанных вокруг точек A, B, C.
                    
                    R = радиус планеты «The Mля».
                    
                    function dist(A, B):
                      // расстояние между точками A и B.
                    endfn
                    
                    for a in 0..90:
                      for b in 0..180:
                        let X[3] // некоторая точка на сфере вокруг точки A.
                        X[0] = A[0] + R * sin(a) * cos(b) // x
                        X[1] = A[1] + R * sin(a) * cos(b) // y
                        X[2] = A[2] + R * cos(a) // z
                    
                        if ( dist(X, B) == rds[1] AND dist(X, C) == rds[2] ):
                          echo Нашли точку, теперь посчитаем и вернём ответ :)
                          геtuгn result;


                    Для перформанса можно перед тем как считать всё, что после X[0..3], проверить X на принадлежность плоскости замли.

                    ... ?
                    Ответить
              • а мне хочется просто поябаться

                )))))))))
                Блядь, вот так вот! Чтобы поябаться бедные прогромисты должны решить системы нелинейных уравнений, и то не факт, что поябутся.
                Ответить
                • а мне хочется просто поябаться

                  )))))))))
                  Блядь, вот так вот! Чтобы поябаться бедные прогромисты должны решить системы нелинейных уравнений, и то не факт, что поябутся.
                  Ответить
            • Вообще, с точками на сфере лучше работать в сферических координатах.

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

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

              Три таких множества, чтобы найти их точку пересечения.

              А ещё лучше - перебирай все адреса

              Придётся с картами интегрироваться и ябаться, а мне хочется просто поябаться. Плюс можно будет потом эту штуку ещё для чего-нибудь использовать.
              Ответить
          • Вообще, с точками на сфере лучше работать в сферических координатах.

            Вангую, ты хочешь описать множество точек на определенном расстоянии от заданной. Подумай не как математик, а как программист.
            Перебирай Зенит, а по нему вычисли какой должен быть Азимут. (но это не точно, первое что пришло в голову).

            А ещё лучше - перебирай все адреса, и находи те, которые больше всего тебе подходят по расстояниям.
            Ответить
        • XY-problem? Зачем тебе уравнение окружности?
          Ответить
        • XY-problem? Зачем тебе уравнение окружности?
          Ответить
      • Есть тут ма-те-ма-ти-ки?

        Допустим, я хочу уравнение окружности, которая лежит на сфере, при этом мне известна точка на сфере и радиус окружности, т.е. длина дуги от точки до границы окружности.

        Чтобы получить уравнение окружности на сфере, я пересекаю плоскость со сферой. Плоскость я строю через точку, которая лежит чуть ниже поверхности сферы, и вектор нормали, который исходит из центра сферы и входит в точку на сфере.

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

        Вопрос: я правильно мыслю? У меня получится таким образом получить уравнение окружности на сфере по координате её центра и радиусу?
        Ответить
    • Волею судеб приходится ковырять Clojure. Это где к JVM прикрутили динамическую питуизацию и метушню, много метушни.
      :cas (try+
                  (let [[old new] (:value op)]
                    (assoc op :type (if (v/cas! conn "foo" old new)
                                      :ok
                                      :fail)))
                  (catch [:errorCode 100] ex
                    (assoc op :type :fail, :error :not-found)))))


      Какое unholy abomination )))
      Ответить
      • Красивые скобочки!
        Ответить
      • Выглядит как гомоиконное AST джавы.
        Ответить
        • Как ты попал в этот тред? Зашёл в оффтоп имени себя?
          Ответить
          • По ссылке на коммент выше, где try в clojure, емнип.
            Ответить
            • По ссылке на коммент выше, где try в clojure, емнип.
              Ответить
              • По ссылке на коммент выше, где try в clojure, емнип.
                Ответить
          • Как ты попал в этот тред? Зашёл в оффтоп имени себя?
            Ответить
        • Выглядит как гомоиконное AST джавы.
          Ответить
      • Волею судеб приходится ковырять Clojure. Это где к JVM прикрутили динамическую питуизацию и метушню, много метушни.
        :cas (try+
                    (let [[old new] (:value op)]
                      (assoc op :type (if (v/cas! conn foo old new)
                                        :ok
                                        :fail)))
                    (catch [:errorCode 100] ex
                      (assoc op :type :fail, :error :not-found)))))


        Какое unholy abomination )))
        Ответить
        • Волею судеб приходится ковырять Clojure. Это где к JVM прикрутили динамическую питуизацию и метушню, много метушни.
          :cas (try+
                      (let [[old new] (:value op)]
                        (assoc op :type (if (v/cas! conn foo old new)
                                          :ok
                                          :fail)))
                      (catch [:errorCode 100] ex
                        (assoc op :type :fail, :error :not-found)))))


          Какое unholy abomination )))
          Ответить
      • Волею судеб приходится ковырять Clojure. Это где к JVM прикрутили динамическую питуизацию и метушню, много метушни.
        :cas (try+
                    (let [[old new] (:value op)]
                      (assoc op :type (if (v/cas! conn foo old new)
                                        :ok
                                        :fail)))
                    (catch [:errorCode 100] ex
                      (assoc op :type :fail, :error :not-found)))))


        Какое unholy abomination )))
        Ответить
    • Полина, добавь фильтры по дате в «порыться в говне». Борманд делал, но потёр, пидор
      Ответить
      • Ну как, она добавила?
        Ответить
      • Полина, добавь фильтры по дате в «порыться в говне». Борманд делал, но потёр, пидор
        Ответить
        • Полина, добавь фильтры по дате в «порыться в говне». Борманд делал, но потёр, пидор
          Ответить
      • Полина, добавь фильтры по дате в «порыться в говне». Борманд делал, но потёр, пидор
        Ответить
    • Зачем борманд зафорсил на говнокод "ня"?
      Ответить
      • Ня, пока
        Ответить
      • Это Полиня зафорсила.
        Ответить
      • Ня ясня, почему питуш-ня раняше ня сталя источняком "ня".
        Ответить
        • Ня ясня, почему питуш-ня раняше ня сталя источняком ня.
          Ответить
          • Ня ясня, почему питуш-ня раняше ня сталя источняком ня.
            Ответить
        • Ня ясня, почему питуш-ня раняше ня сталя источняком ня.
          Ответить
      • Ну ты ещё скажи, что ня анимешные аватарки зафорсила (хотя это вроде так и есть ^_^)...
        Ответить
        • зоофорсила
          Ответить
        • Ну ты ещё скажи, что ня анимешные аватарки зафорсила (хотя это вроде так и есть ^_^)...
          Ответить
          • Ну ты ещё скажи, что ня анимешные аватарки зафорсила (хотя это вроде так и есть ^_^)...
            Ответить
        • Ну ты ещё скажи, что ня анимешные аватарки зафорсила (хотя это вроде так и есть ^_^)...
          Ответить
          • Ну ты ещё скажи, что ня анимешные аватарки зафорсила (хотя это вроде так и есть ^_^)...
            Ответить
      • Зачем борманд зафорсил на говнокод ня?
        Ответить
    • С днём сисадмина, коллеги!
      Ответить
    • Проведено обновление «NGK». Для корректной работы сбросьте кэши.
      Ответить
      • > сбросьте кэши

        Почистите кеш браузером.
        Ответить
      • а ченжлог?
        Ответить
        • Судя по исходникам там какой-то огромный апдейт про северную баню и мочераторов...
          Ответить
          • Судя по исходникам там какой-то огромный апдейт про северную баню и мочераторов...
            Ответить
        • - Обновлена версия SocketIO (из-за чего и необходимо сбрасывать кэш: старый клиент новый сервер не поддерживает). В новой версии, в частности, убраны кривые куки.
          - Добавлены serverside-баны. Пользователи могут подписываться на «источники» банов (они же «модераторы»), после чего сервер будет проводить фильтрацию комментариев от всех пользователей, «забаненных» в указанных источниках (точно так же, как раньше осуществлялась индивидуальная фильтрация).
          На данный момент существует только один источник (github:gost-gk:gk-denylist), в который автоматически подтягиваются учётные записи уёбков, перечисленные в https://github.com/gost-gk/gk-denylist/blob/master/denylist.hocon .

          Продолжается работа над интерфейсом для «модераторов», через который доверенные (пока что) лица смогут составлять свои списки уёбков.
          Ответить
          • В https://github.com/1024--/govnokod.ru-userscripts/blob/master/nosmegma.user.js список длинней.
            Некоторых питухов забанили, или не все перечислены?
            Ответить
            • Не всех перечислил.
              Смерджил уёбков оттуда, список на сервере обновился автоматически.
              Ответить
              • Не всех перечислил.
                Смерджил уёбков оттуда, список на сервере обновился автоматически.
                Ответить
                • Не всех перечислил.
                  Смерджил уёбков оттуда, список на сервере обновился автоматически.
                  Ответить
                • Не всех перечислил.
                  Смерджил уёбков оттуда, список на сервере обновился автоматически.
                  Ответить
              • Не всех перечислил.
                Смерджил уёбков оттуда, список на сервере обновился автоматически.
                Ответить
            • В https://github.com/1024--/govnokod.ru-userscripts/blob/master/nosmegma.user.js список длинней.
              Некоторых питухов забанили, или не все перечислены?
              Ответить
          • > denylist

            Какая политкорретность )))
            Ответить
          • > Добавлены serverside-баны. Пользователи могут подписываться на «источники» банов (они же «модераторы»)

            Джва года ждал автообновляемых списков уебков.

            Спасибо.
            Ответить
            • > автообновляемых списков уебков

              Да ещё и в реалтайме по вебсокету!
              Ответить
              • ещё не знает, что уёбок, а уже забанен
                Ответить
              • И чтоб с блокчейном и смузями
                Ответить
              • По вебхукам.
                На каждый пуш в репозиторий «Гитхаб» дёргает «НГК», «НГК» в ответ на это идёт за новой версией списка и обновляет свою базу.
                Ответить
                • А вот ещё такой реквест.

                  // quick and dirty filter agains guest spam
                  // it can reject normal links, but who cares...

                  Там колобок, который дёргается по одному комменту, а мне для advanced-эвристик спама нужно иметь весь массив сразу. Приходится пердолиться, сначала складывать в массив, а потом фильтровать.
                  Ответить