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

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

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

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

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

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

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

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

                                  См. ниже.

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

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

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

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

                        На самом деле не пилить, а пиздить, кто в конце угадает, с какого сайта — тому нихуя.
                        Ответить
                        • надеюсь, с 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-пакета.
                                                    Ответить
          • >он не настолько умный
            Куриные мозги
            Ответить
    • Вчера в 22:04:30 кто-то минуту дёргал «НГК» по ~100 запросов в секунду. Какой багор (((
      Ответить
      • > 100 запросов в секунду

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

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

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

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

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

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

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

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

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

            Работает — не трогай!
            Ресурс дико удобен когда на одной ссылке полный crud. И put, и delete, etc.
            Ответить
            • > Работает — не трогай!
              Подтверждаю.
              Ну, если понадобится — заменим.
              Ответить
    • Питухи, такой вопрос: нативное приложение под винду у пользователя заняло много памяти (воркингсет или что, пока не известно)
      Пользователь снял дамп ("User Mini Dump File with Full Memory").

      ``!vadump`` в windbg честно показывает все регионы памяти.

      Реально ли найти ссылки на эту память? То-есть где-то есть указатель с адресом региона, где-то есть указатель на него, итд, и в итоге в каком-то потоке в стеке есть указатель, c которого всё начинается.
      Это задача для какой-нить Иды или Оли?

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

      Помогут-ли тут символы программы? Кажется, что тоже нет?

      WinDBG советует запустить программу под "UMDH", он умеет captures and analyzes the heap memory allocations for a process, и потом сообщить мне, кто наалоцировал говна.
      Если есть символы, то я же смогу по идее получить вообще нормальный стек?

      Как бы вы потрекали high memory usage на удаленном виндохосте?
      Ответить
      • > То-есть где-то есть указатель с адресом региона, где-то есть указатель на него, итд, и в итоге в каком-то потоке в стеке есть указатель, 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».
        Ответить
        • Пнятнко. В ощем, как я и думал: толку от такого дампа как от козла молока.
          Разве что почитать эту память, и попытаться понять по её содержимому. Такой вот метод кротика из одной чешской сказки.

          Да, я тоже подумал про таги и пулы, но если есть UMDH, то видимо правильнее взять его.


          Хорошо быть жабоёбом. У нас в куче всегда видны классы объектов, и это помогает часто понять.
          Ответить
          • > Разве что почитать эту память, и попытаться понять по её содержимому.
            Да, это наиболее просто (но и наименее надёжно). Если там в куче валяется дохуя «89 50 4e 47 0d 0a 1a 0a», к примеру, то это будет весьма полезное подсказкой.
            Ответить
            • А потом можно их вытащить оттуда, и устроить выставку:)
              Кстати, неплохой способ прокачаться в скриптовании дебагера
              Ответить
          • > в куче всегда видны классы объектов

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

            Кстати в студии есть heap profiler. По крайней мере на живом процессе, х.з. как там с дампами.
            Ответить
      • Здравствуйте. Это форум десктоп разработчиков под винду?
        Ответить
        • Как видишь -- да.

          Гост ответил быстрее, чем мне бы на rsdn.ru ответили
          Ответить
    • Редирект с gcode-xp.space на gcode.space установлен.
      Ответить
    • Перекатный петух теперь регулярно проверяет оффтопы на ваниш (1 раз в час, перерыв между запросами — 5 секунд) и будет перекатывать, если последний оффтоп заванишен (да, сообщение о перекате отправится в ваниш). Нагрузки на ГК удалось избежать благодаря применению параметра «?format=ajax», который позволяет полностью избежать загрузки комментариев.
      Ответить
      • какой скилл
        Ответить
      • На https://index.gcode.space/ (UPD: напоминаю о существовании API https://index.gcode.space/api/index, если кому надо) показания ваниша актуализированы (кроме первых двух хрю больше ничего не исчезло).
        Ответить
    • Домен gcode.space продлён. gcode-xp.space отправится в лучший мир 23-го сентября сего года.
      Ответить
      • Спасибо.
        Ответить
      • Как думаешь, Сёме удалось звести новую машину с десяткой или что-то пошло не так и он пытается зайти через XP?
        Ответить
    • АДМИН СМОТРИТ ДОМ-2
      Ответить
    • Добавили ссылку на индекс.
      Инженерный отдел несколько проебался: мало того, что пришлось выкатывать мелкий кусок от будущего коммита с синхронизацией настроек (БД уже мигрировали), так ещё и на проде внезапно оказались какие-то старые изменения, которых на локальной машине не было. Какой багор (((
      Ответить
      • > которых на локальной машине не было

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

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

          Сейчас у инженерного отдела исходники «НГК» автоматически заливаются по «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('/<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 и запись в логи про ошибку вбазе
                            имхо
                            Ответить
                • Что значит отсекли?
                  Это повод вернуть сразу еггог 400, а не заниматься отсечением
                  Ответить
                  • это значит, что либо аргумент кастится в int, и дальше идет как int, либо пользователю возвращается ошибка, если аргумент в инт не кастится
                    Ответить
                    • По-моему вы сейчас об одном и том же.

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

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

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

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

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

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

                                            там уже несколько десятков тысяч строк кода
                                            Ответить
                              • Если и есть, то я не знаю такого. Именно поэтому я за «PHP».
                                Ответить
                        • 42pitux не скастится в int, будет ошибка, и джанго покажет старницу с ошибкой.
                          Ответить

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