Куча говна / Говнокод #26838 Ссылка на оригинал

0

  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 nepeKamHblu_nemyx, (Updated )

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

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

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

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

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

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

                                См. ниже.

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

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

                                  Просто ещё пару 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;
                                            Ответить
                                              • Просто подумайте сколько раз js-макаки писали такие бессмертные строки за 20 с лишним лет.
                                                function ebid(id){return document.getElementById(id);}
                                                Резиг вообще целый jquery для этого написал.
                                                Ответить
  • Вчера в 22:04:30 кто-то минуту дёргал «НГК» по ~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.

      Но это так, вкусовщина.
      Ответить
      • Спасибо, добавил, теперь вроде как не скроллит.

        > А мне нравится $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. По крайней мере на живом процессе, х.з. как там с дампами.
          Ответить
    • Здравствуйте. Это форум десктоп разработчиков под винду?
      Ответить
  • Редирект с gcode-xp.space на gcode.space установлен.
    Ответить
  • Перекатный петух теперь регулярно проверяет оффтопы на ваниш (1 раз в час, перерыв между запросами — 5 секунд) и будет перекатывать, если последний оффтоп заванишен (да, сообщение о перекате отправится в ваниш). Нагрузки на ГК удалось избежать благодаря применению параметра «?format=ajax», который позволяет полностью избежать загрузки комментариев.
    Ответить
  • Домен gcode.space продлён. gcode-xp.space отправится в лучший мир 23-го сентября сего года.
    Ответить
    • Как думаешь, Сёме удалось звести новую машину с десяткой или что-то пошло не так и он пытается зайти через XP?
      Ответить
  • Добавили ссылку на индекс.
    Инженерный отдел несколько проебался: мало того, что пришлось выкатывать мелкий кусок от будущего коммита с синхронизацией настроек (БД уже мигрировали), так ещё и на проде внезапно оказались какие-то старые изменения, которых на локальной машине не было. Какой багор (((
    Ответить
    • > которых на локальной машине не было

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

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

        Сейчас у инженерного отдела исходники «НГК» автоматически заливаются по «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>')
                Можно, я в новых API так и делаю, но у /api/comments id через GET-параметр принимается, его, насколько я знаю, только ручками надо проверять.
                Ответить
                • >LINE 3: WHERE comments.comment_id
                  это точно драйвер, а не база?

                  ну в любом случае лучше бы это фиксть на уровне GET или ОРМ кму
                  Ответить
                      • Ой, бля, это ещё ошибки обрабатывать, ответ какой-то посылать*… Нахуй, пусть лучше так остаётся.

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

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

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

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

      После дедупликации поди метров до 100 без архива ужмётся.
      Ответить
      • ой блять не напоминай
        сижу как раз разбираюсь в TSDB (графит, инфлюкс) и колоночными БД над ними (кликхаус, друид)
        чтобы какое-то собственное мнение составить
        Ответить
      • >После дедупликации
        после удаления постов про нигерийские хуйцы
        Ответить
    • У наших отделов тяжёлый период уже полтора месяцев каждый период был трудным, поэтому сторонние работы затягиваются. Приносим извинения за доставленные неудобства.
      Ответить
  • Инженерный отдел сделал прототип БД и переписал под неё парсеры, сейчас парсит дампы для тестового отдела: 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.

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

                Теперь кушают
                Ответить
          • > 'govnokod\\.ru/(\d+)#comment(\d+)$'
            Какая-то плохая питушня вроде трусов и крестика. Тут бы либо так, либо так:
            r'govnokod\.ru/(\d+)#comment(\d+)$'
            'govnokod\\.ru/(\\d+)#comment(\\d+)$'
            Ответить
          • Обрати внимание на классы со странными названиями «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, допилили индексы, остались полнотекстовые индексы (самое сложное) и парсеры.
      Ответить
  • Свинокур.

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

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

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

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

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

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

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

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

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

        Питушня какая-то.
        Ответить
    • XY-problem? Зачем тебе уравнение окружности?
      Ответить
      • Чтобы потом три такие окружности пересечь и найти прикол. Решать планарную задачу мне не хочется, это анскилл, да ещё и менее точно.
        Ответить
        • Хм, может тебе проще 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% интересных задач не существует. А инженер юзает приближённые методы и течёт.
                Ответить
  • Волею судеб приходится ковырять 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 .

        Продолжается работа над интерфейсом для «модераторов», через который доверенные (пока что) лица смогут составлять свои списки уёбков.
        Ответить
          • Не всех перечислил.
            Смерджил уёбков оттуда, список на сервере обновился автоматически.
            Ответить
        • > Добавлены serverside-баны. Пользователи могут подписываться на «источники» банов (они же «модераторы»)

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

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

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

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

                Там колобок, который дёргается по одному комменту, а мне для advanced-эвристик спама нужно иметь весь массив сразу. Приходится пердолиться, сначала складывать в массив, а потом фильтровать.
                Ответить
          • Это как «JSON» (ЕМНИП, любой «JSON» является валидным «HOCON»), только с комментариями и другими плюшками.
            Ответить
        • > работа над интерфейсом для «модераторов», через который доверенные (пока что) лица смогут составлять свои списки уёбков
          Можно сделать доверенных девелоперами в gk-denylist и разрешить срать в свою ветку. Скажем, bormand занимает ветку bormand или bormandt.
          Ответить
          • Вручную коммитить -- как-то слишком много работы.

            Лучше что-нибудь в духе передачи локального списка на сервер, чтобы в один клик распространялось. Тем более он туда один фиг передаётся.
            Ответить
            • > Лучше что-нибудь в духе передачи локального списка на сервер, чтобы в один клик распространялось. Тем более он туда один фиг передаётся.
              API для этого уже есть, осталось прикрутить интерфейс.
              Штука с «Гитом» сделана в качестве времянки.
              Ответить
            • Я и позабыл, что это фан-проект, с которым весело повозиться.
              Мой вариант - для случая, когда хочется достичь функциональности минимумом кода.
              Ответить
              • Ну вот тебе хочется собирать список уёбков, а потом идти коммитить его на гитхаб?

                Это пиздец непрактично.
                Ответить
                • Я (1024--) так уже сделал.

                  Я не против удобных интерфейсов, я только за. Но как пользователь.
                  А как программист я бы по умолчанию сделал пердольную питушню с консолечкой, а в новых версиях бы упрощал UI/UX.

                  Кстати, скрипту для навигации в этом году исполнилось 7 лет, а я так и не добавил нормальные поля ввода настроек, которые просил Сёма.
                  Первый коммит: https://github.com/1024--/govnokod.ru-userscripts/commit/fe4c9c16b93921af6f2c9164d50f5cd22ef7329a#diff-3251f343ece2739495513f439366ba904941dd48814b89044ca7806e288dae4b
                  Потому, что один раз настроил и забыл. Делать форму для одноразовой питушни очень лень.
                  Ответить
                  • Ну тут реализация отправки не выглядит особо сложной: получить список да вставить в базу. С аутентификацией разве что будут заморочки, возможно.
                    Ответить
                    • Я же говорю — на бэке всё готово. Можно хоть сейчас слать запрос на /api/mod/ban/8086,100500 — только предварительно нужно сгенерировать подпись приватным ключом, публичная пара к которому лежит в базе.
                      Ответить
                      • А зачем интерфейс? Чисто для указания ключа?

                        Отправка же автоматическая будет, сразу после клика в крестик?
                        Ответить
                        • > Чисто для указания ключа?
                          Для указания ключа и создания подписи.

                          > Отправка же автоматическая будет, сразу после клика в крестик?
                          Скорее всего. Над разбаном нужно будет подумать отдельно: придётся делать отдельную табличку «мои серверные баны», в которой можно будет ими управлять.
                          Ответить
                          • А зачем разделять серверные и локальные? Просто сливать локальный список на сервер при любом изменении (и бан через крестик и разбан через уже существующий интерфейс).

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

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

                                Может просто переключатель "фильтрованное / не фильтрованное"? Чтобы и списки и подписки не трогать, если хочется отключить.
                                Ответить
                              • > генерации подписи

                                Можно начать просто с уникального токена. У тебя один фиг https. Раздать токены "доверенным" не особо сложно.
                                Ответить
                              • > в генерации подписи, инженерный отдел занимается этим вопросов
                                Не слишком ли сложно?

                                По-моему и так всё заебись.
                                Ответить
                              • А списки будут суммироваться?

                                Ну, скажем, кто-то из авторов сказал "ня, пока" и выпилился с ГК на несколько месяцев, как это обычно бывает. У него был хороший список, а у молодых и активных есть свежие багры, но старых нет.
                                Ответить
                                • Конечно. Можно задавать произвольное количество списков, фильтроваться будут все пользователи из них (возможно, в будущем подумаем над белыми списками).
                                  Ответить
                    • Я бы сделал простую страницу со вводом ника (допустим, 1024--) и сохранением его в localStorage.
                      На странице бы отображался этот умный JSON с питухами из localStorages.irnoredUsers в textarea (на нём focus) и ссылка вида https://github.com/gost-gk/gk-denylist/edit/1024--/denylist.hocon.

                      Всё, открываешь страницу с забаненными питухами, делаешь Ctrl+A, Ctrl+C, клик по ссылке, Ctrl+A, Ctrl+V, клик по кнопке сохранения.

                      И не пердолиться с API и authушнёй, только добавить загрузку с ГХ.
                      Ответить
        • В древнем «Palemoon» комментарии на главной отображаются, а в древнем «Хроме» — нет. // не холивар
          Ответить
        • > доверенные (пока что)

          Какой тлен и безысходность )))

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

                P.S. Я Настенька!
                Ответить
                  • Нет. Даже с IP из другой /24 получил, но всё равно закрыто.
                    Хотя, судя по петуху, МТС/16 не забанена целиком.
                    Ответить
                    • Ну видимо ты со своей дос-атакой загрузкой комментов засветился в логах и попал под руку как подозрительно часто встречающийся айпишник...

                      У тебя же там скрипт походу без задержек ебашит?
                      Ответить
                      • У меня с задержками. Я секунду-две ставил, когда качал.
                        Но всё равно запросов наверно вышло больше, чем у доктора Смегмы. Он вроде бы просто раз в 6 минут сток засирал.
                        Ответить
                    • Наши с тобой айпишники равны с точностью до /16. Поэтому скорее всего он ёбнул её. Он что, не посмотрел, что это МТС?
                      Ответить
                      • А петух нас разыграл? Почему у него работает?
                        Ответить
                        • Я не успеваю читать весь говнокод. Где он писал?
                          Ответить
                            • Написал тоже виистрайкеру. Может тебе он не верит, а мне поверит, т.к. по моей просьбе он забанил по ip, а значит я вряд ли уёбок.
                              Ответить
                              • Т.е. получается ты себя забанил по айпи?

                                Какой багор )))
                                Ответить
                              • Может, наоборот. Читает он письмо, а там какой-то няк мтсный просит забанить честного доктора Смегму. И забанил няка мтсного.

                                > тебе он не верит
                                А я вообще номерной, кто мне поверит.
                                Ответить
                                • Да он поди полез в лог проверить, и действительно нашёл там стертора, а рядом в соседних строчках увидел запросы от 1024--. Вот и хуйнул всю сетку недолго думая. Вроде всё сходится.
                                  Ответить
                                  • Много GETов: DDOS.

                                    Вот Persecutor Senator накрыл всё кодло: и срунов и дыдосеров.
                                    Ответить
                                    • > Много GETов: DDOS

                                      Тем более сайт действительно лагал как говно. Возможно доктор его тоже ддосил за компанию.
                                      Ответить
                                      • Так блядь. Может сайт лагал из-за 1023, а не Стертора? Теперь понятно почему меня зацепило. Только у меня ещё и рабочий IP зацепило.
                                        Ответить
                                  • Я номерной 1024--. От своей мирской учётки Страйкеру не писал.
                                    Ответить
              • Я для интиреса по пробавала по добрать не каторые логины [a-z0-9\+\-]+@<дамены из csv>. пахоже на mailcatch надо генирировать вареции нападодобие реальных слов вида "аба", "абаба", "баба", "ббаба", "абба" и тп
                падбор [a-z]+@mailcatch пирспективен
                падбор <вареция>@mailcatch пирспективен и оптемален но я не реализавала
                падбор [a-z0-9\+\-]+@<харошая почта> менее пирспективен но позволел вылавить трех олдфагов с кароткой почтой

                результаты от правила
                Ответить
                • Спасибо. У хороших почт, кстати, разные регулярки.

                  У «Яндекса» может быть [a-z0-9\.\-]+ (знак подчёркивания не используется). Дальше может идти плюсик и довольно произвольный набор символов (какие точно разрешены, я не знаю).

                  У «Mail.ru» в логине знак подчёркивания разрешён, т. е. регулярка будет [a-z0-9\.\-_]+ . Дальше тоже может идти плюсик и произвольная строка.

                  У «Рамблера» такие же ограничения, как у «Mail.ru». И у hotmail.com/live.com/outlook.com такие же.

                  У «Гмейла» я не встречал ни минуса, ни знака подчёркивания, зато точки там в юзернейме можно ставить произвольно.

                  У «Yahoo» вроде минусы не разрешены, потому что они там зарезервированы для псевдонимов, а точку и знак подчёркивания использовать можно.
                  Ответить
                  • > точки там в юзернейме можно ставить произвольно

                    – некоторые Васи Пупкины регаются в сервисах с почтой vasya.pupkin@gmail.com, просто потому что. а потом другой Вася Пупкин с почтой vasyapupkin@gmail.com охуевает
                    Ответить
                      • Ну да

                        В том-то и дело, что некоторые люди тупо вбивают своё ФИО в качестве почты, даже если у них этой почты никогда и не было

                        Бляди малограмотные
                        Ответить
                        • Я побрутил профили в «Граватаре». Куча народа там неправильно заполнила поля. В «Граватаре» в форме для редактирования профиля стоит плейсхолдер «Идентификатор...» (в русской версии, английский вариант не помню, причём вставлен не через свойство placeholder из HTML5, а костыльный на скриптах). Так вот некоторым удалось вписать свои данные поверх плейсхолдера, примерно вот так:
                          Идентvasya.pupkin@gmail.comификатор...
                          Ответить
                  • Перепесала свой пруфоф концепт скрипт на сишку стало быстрее. вореции переспиктивные стоит азаботица напесанием генерации например паставить лемиты на количества согласных и гласных падряд точка минус буква вай збрасывают щетчик

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

                      Пусть имеются классы символов t по N(t) символов в каждом.

                      Тогда размер алфавита будет (sum(t) N(t)), для n символов существует Kobe0 последовательностей:
                      Kobe0(n) = (sum(t) N(t)) ^ n


                      Определим слово как последовательность символов, где не существует L(t)+1 символов класса t подряд. Насколько таких слов меньше, чем всех последовательностей?

                      Будем искать коэффициенты Кобе, корекурсивно добавляя новые символы. Будем рассматривать совокупность состояний (t, r) - "слово заканчивается последовательностью из r символов класса t".

                      Для слова из одной буквы имеются только последовательности длины 1 для символов каждого класса.
                      Символ класса t можно взять N(t) способами. Число кобенаций для состояний (t, r=1):
                      K(1, t, 1) = N(t)

                      В слове из одной буквы не существует последовательностей символов длины 2 и более, т.е. состояния (t, r>1) дают нулевой вклад:
                      K(1, t, r) = 0, 1 < r <= L(t)


                      При добавлении символа есть две ситуации.
                      1. Добавляем символ из другого класса t<>t0. Получили на конце слова последовательность из одного символа нового класса для всех случаев. Все состояния (t0<>t, r) старого слова дают вклад в состояния (t, r=1) нового слова:
                      K(n+1, t, 1) = sum(t0<>t, r) ( N(t) * K(n, t0, r) )

                      2. Добавляем символ из того же класса. Для последовательностей из r<L(t) символов получаются последовательности r+1 символов. Последовательноси r=L(t) символов при добавлении символа того же класса производят некорректное слово и не учитываются:
                      K(n+1, t, r) = N(t) * K(n, t, r-1), 1 < r <= L(t)


                      Количество кобенаций есть сумма количеств кобенаций каждого состояния:
                      Kobe1(n) = sum(t,r) K(n, t, r)


                      На практике полезен относительный первый коэффициент Кобе
                      Kobe1%(n) = Kobe1(n) / Kobe0(n) * 100
                      Ответить
                      • Практические примеры:
                        L(vowels)     = 2
                        L(consonants) = 2
                        L(symbols)    = 0
                        L(digits)     = 0
                        
                         n  Kobe0(n)  Kobe1(n)  Kobe1%(n)
                        ---------------------------------
                         1  2.60e+01  2.60e+01  100.0000
                         2  6.76e+02  6.76e+02  100.0000
                         3  1.76e+04  8.19e+03   46.5976
                         4  4.57e+05  1.64e+05   35.8903
                         5  1.19e+07  2.99e+06   25.1829
                         6  3.09e+08  4.70e+07   15.2251
                         7  8.03e+09  8.52e+08   10.6104
                         8  2.09e+11  1.49e+10    7.1423
                         9  5.43e+12  2.51e+11    4.6205
                        10  1.41e+14  4.41e+12    3.1248
                        11  3.67e+15  7.65e+13    2.0830
                        12  9.54e+16  1.31e+15    1.3753
                        13  2.48e+18  2.28e+16    0.9204
                        14  6.45e+19  3.95e+17    0.6126
                        15  1.68e+21  6.82e+18    0.4068
                        
                        L(vowels)     = 2
                        L(consonants) = 3
                        L(symbols)    = 0
                        L(digits)     = 0
                        
                         n  Kobe0(n)  Kobe1(n)  Kobe1%(n)
                        ---------------------------------
                         1  2.60e+01  2.60e+01  100.0000
                         2  6.76e+02  6.76e+02  100.0000
                         3  1.76e+04  1.75e+04   99.2888
                         4  4.57e+05  2.57e+05   56.1561
                         5  1.19e+07  5.63e+06   47.3974
                         6  3.09e+08  1.19e+08   38.6387
                         7  8.03e+09  2.45e+09   30.4894
                         8  2.09e+11  4.67e+10   22.3435
                         9  5.43e+12  9.65e+11   17.7779
                        10  1.41e+14  1.97e+13   13.9773
                        11  3.67e+15  3.97e+14   10.8099
                        12  9.54e+16  7.95e+15    8.3296
                        13  2.48e+18  1.62e+17    6.5158
                        14  6.45e+19  3.27e+18    5.0728
                        15  1.68e+21  6.60e+19    3.9344
                        Ответить
                            • Вовпал Ваббит (такође познат и као „ВВ“) је брза интернетска интерактивна библиотека и програм система за машинско учење отвореног кода развијени првобитно на Иахоо! -



                              Репозиторијум гитхуб.цом/ ВовпалВаббит/ вовпал_ваббит Написано у Ц ++ Оперативни систем Линук, мацОС, Мицрософт Виндовс

                              https://sr.lbicph.com/154800-vowpal-wabbit-XWYTSY

                              Мацос
                              Ответить
                      • Если добавить числа и символы, частая смена классов сильно повысит коэффициенты Кобе:
                        L(vowels)     = 2
                        L(consonants) = 2
                        L(symbols)    = 1
                        L(digits)     = infinity
                        
                         n  Kobe0(n)  Kobe1(n)  Kobe1%(n)
                        ---------------------------------
                         1  4.00e+01  4.00e+01  100.0000
                         2  1.60e+03  1.58e+03   99.0000
                         3  6.40e+04  5.34e+04   83.4344
                         4  2.56e+06  1.93e+06   75.4901
                         5  1.02e+08  6.95e+07   67.8481
                         6  4.10e+09  2.47e+09   60.3823
                         7  1.64e+11  8.86e+10   54.0646
                         8  6.55e+12  3.17e+12   48.3509
                         9  2.62e+14  1.13e+14   43.2180
                        10  1.05e+16  4.05e+15   38.6485
                        11  4.19e+17  1.45e+17   34.5573
                        12  1.68e+19  5.18e+18   30.8987
                        13  6.71e+20  1.85e+20   27.6283
                        14  2.68e+22  6.63e+21   24.7037
                        15  1.07e+24  2.37e+23   22.0888
                        
                        L(vowels)     = 2
                        L(consonants) = 3
                        L(symbols)    = 1
                        L(digits)     = infinity
                        
                         n  Kobe0(n)  Kobe1(n)  Kobe1%(n)
                        ---------------------------------
                         1  4.00e+01  4.00e+01  100.0000
                         2  1.60e+03  1.58e+03   99.0000
                         3  6.40e+04  6.27e+04   97.9047
                         4  2.56e+06  2.28e+06   89.2369
                         5  1.02e+08  8.66e+07   84.5703
                         6  4.10e+09  3.28e+09   80.0669
                         7  1.64e+11  1.24e+11   75.6616
                         8  6.55e+12  4.68e+12   71.3421
                         9  2.62e+14  1.77e+14   67.3821
                        10  1.05e+16  6.67e+15   63.6306
                        11  4.19e+17  2.52e+17   60.0805
                        12  1.68e+19  9.52e+18   56.7263
                        13  6.71e+20  3.59e+20   53.5629
                        14  2.68e+22  1.36e+22   50.5751
                        15  1.07e+24  5.13e+23   47.7538
                        Ответить
            • Пулл-реквестом публичного ключа в репу и ручной проверкой на адекватность? Тогда и интерфейсы никакие не нужны.

              З.Ы. Хотя приватный ключ всё-равно куда-то втыкать надо.
              Ответить
    • 1) Какой анскилл. Гост, от тебя не ожидал. Добавляй к статике параметр ?v=123. Не хочу искать как на айфоне кеш сбрасывать.
      2) А что не с Полины? Обратно пол решил сменить? С возвращением, рад, что ты одумался.
      3) Учётку gost правда забанил П. Сракер?
      Ответить
      • > Какой анскилл. Гост, от тебя не ожидал. Добавляй к статике параметр ?v=123. Не хочу искать как на айфоне кеш сбрасывать.

        Айфонопроблемы. Рука привычно долбит Ctrl+R, даже не пришлось кеш чистить.

        Говночую вопросы 2 и 3.
        Ответить
        • > Хз-хз. Рука привычно долбит Ctrl+R, даже не пришлось кеш чистить.
          ИТушок детектед.

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

        А по-моему было весело.
        Ответить
            • полов от этого больше не становится

              а можно было бы как у Лема
              Ответить
                  • это типа как купить "именной" номер или четырёхзнак в аське

                    эксгибиционизм
                    Ответить
              • Почему 16 типов, почему не 12 или не 19, что это за херня вообще? Похоже что это из серии говнотестиков типа "какой я персонаж из аниме Наруто", но с претензией на научность.
                Ответить
                  • Тут сложнее.

                    1 цикл Луны примерно 30 дней.

                    1 цикл вокруг Солнца примерно 12 циклов Луны.

                    Соответственно древние пришли к мысли поделить небо на 12 сегментов.

                    Также 12-ричная система чрезвычайно удобна для расчётов, из-за большого числа делителей базы.

                    12 = 2*6 = 4*3 = 2*2*3

                    И она до сих пор широко используется (футы, дюймы, время, типографские пункты).
                    Ответить
                    • В солнечном годе 12...13 лунных.

                      Календарь христианских праздников с «високосными» годами: для подгонки под солнечный цикл количество лунных циклов меняют, поэтому Пасха отъезжает то вперёд по гражданскому календарю, то назад.

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

                        Потому и придумали нулябрь 13е созвездие «Змееносец».
                        Ответить
                      • Причём число 12 фигурирует почти во всех мифологиях: 12 олимпийских богов, у Иосифа 12 братьев, 12 колен Израиля, у Христа 12 учеников. В Коране тоже есть упоминания.

                        И естественно самое древнее: это вавилонская 60ричная система

                        Гораздо более сложный вопрос: почему в неделе именно 7 дней.

                        Тут такого однозначного ответа нет.
                        Ответить
                        • > почему в неделе именно 7 дней

                          Религиозная абстракция?
                          Ответить
                          • > Религиозная абстракция?
                            Нет, там тоже были вполне прямые астрономические аналогии.

                            Причём как и с числом 12 ещё дохристианскиедоиудейские, пришедшие из Месопотамии.

                            7 видимых небесных тел, например.

                            Так каждому дню недели соотвествует небесный объект.

                            У нас это стёрлось. Но следы остались в романских языках:

                            Sun-day — Sun
                            Monday — Moon
                            ...
                            Saturn-day — Saturn
                            Ответить
                            • Ага, а Thursday вдруг внезапно в честь Тора:)

                              У немцев суббота вообще круто называется, причем в двух местах по разному. Иканус такие темы любит, и сейчас нам расскажет

                              Да, иканус?
                              Ответить
                          • На самом деле там никакой религией не пахнет, у всех констант и делителей очень рациональные корни.

                            Вореантнее всего сказочки про сотворение в 7 дней написали позднейшие авторы.

                            И если разобраться, то ма-тем-ати-ки из Вавилона сделали всё очень продуманно. На века.

                            Вместо недель конечно можно было сделать декады из 10 дней, как это сделали после Великой Французской Революции.

                            Но даже французы, при всём новаторстве и революционном угаре не стали менять число месяцев.
                            Ответить
                            • > число месяцев

                              Ну месяц, день и год сложно поменять, их всё-таки видно невооружённым глазом.
                              Ответить
                              • А вот 24 часа в сутках, это последствие деления внутридневного солнечного пути на 12 кусков.

                                Сделали по аналогии с месяцами.

                                Видимо это поздейший говнодел. Какие-то лалки просто копипастили не думая.

                                Потому что тут логики нет. Солнечный путь меняется от времени года.

                                Возможно в ихних Иудеях и Египтах ближе к экватору это не так заметно, но всё же.

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

                                  100 часов сильно дохуя, 5 маловато, возьмём 24. А хули, красивое число и делится много на что.
                                  Ответить
                                  • > часы -- это просто какие-то достаточно удобные производные от суток

                                    Нет. Там логика тоже есть.

                                    Солнце в течение года перемещается по 12 условным зонам (знаки зодиака).

                                    Вот внутри дня тоже решили сделать 12 секторов. Один сектор назвали «часом».

                                    И 360 градусов тоже понятно откуда взялось: 360 дней это почти полный оборот вокруг оси.

                                    360 удобнее для расчётов чем 365.25, т.к. там просто дикое количество всяких делителей.

                                    Там почти у каждой константы есть логичное астрономическое объяснение.
                                    Ответить
                        • > 12 олимпийских богов

                          похоже, натягивание совы на глобус

                          Вместе с тем, состав «двенадцати» не был каноническим в древнегреческой теологии. В зависимости от местных культов состав двенадцатичленного пантеона менялся. В частности, таких богов в разное время насчитывалось как двенадцать, так и тринадцать, и четырнадцать.
                          Ответить
                          • > двенадцатичленного
                            > менялся

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

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

                          Еврей спрашивает раввина:

                          - Ребе, я приехал на Крайний Север! Что делать, тут полярный день! Весь день светло,а иногда даже светит солнце! Скажите, как же мне в таких условиях соблюдать Шаббат? Как определить, когда зажигать свечи?

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

                          - Значит на Крайнем Севере?

                          Еврей с готовностью: Да!

                          - Значит полярный день?

                          Еврей с радостью : Ага!

                          Раввин: Нормальному еврею ТАМ делать НЕЧЕГО!
                          Ответить
      • - Обсуждали пару лет назад. Для этого надо добавлять этап сборки статики, а инженерному отделу лень возиться в говне. В скором времени планируется переезд на другой сервер, скорее всего, вместе с этим сделаем версионирование статики.
        - Да.
        Ответить
          • Не знаю. Попробовал ему написать, но получил только одну отписку.
            Ответить
            • Что именно отписал?

              А на второй да какой ответ?
              Ответить
        • Гост, а ты больше не полина?

          > добавлять этап сборки статики,
          А в чем проблема?
          Ответить
      • > Добавляй к статике параметр ?v=123
        Забыл вчера добавить, что проблему кэшированного index.html это не решит.
        Ответить
          • Давно 100/100 по производительности в «Lighthouse» получал?
            Ответить
              • Больше всего в современном вебе меня бесят медленные, тормозящие и долго загружающиеся сайты. Именно поэтому «NGK» разрабатывается так, чтобы быть максимально быстрым и не тупить по пять секунд, когда я открываю его на своём телефоне.
                Ответить
                  • > You can also use Lighthouse CI to prevent regressions on your sites.
                    Удобно: лагнул CI — запускай пайплайн заново!
                    Ответить
                  • > google
                    > So today our goal is to make sure we measure, optimize, monitor our sites speeds like a pros

                    > optimize, monitor our sites speeds
                    > gmail
                    Ответить
                    • > Тянка норм
                      Согласен. Они несут какую-то женерик-питушню.

                      А в реальности чтобы сделать сайты быстрее гуглу нужно выпилить все шпионские, собирающие приватную инфу скрипты.

                      Просто отключить нахуй все свои анал-итики, метрики, адсенсы, 1e100.net.

                      Ещё бы дропнуть огромные бессмысленные картинки из статей, а каждой заедушной уёб-обезьяне в жопу банану.
                      Ответить
                      • Кстати, когда отправил метрики-адсенсы в топку локалхоста, некоторые сайты отзывчивее стали.
                        Ответить
                    • https://www.linkedin.com/in/egsweeny/

                      сначала училась на Graphic Design, Film and Sound Engineering

                      потом Bachelor of Commerce, Business Management; Middle Eastern Foreign Policy Focus; Pre-Law

                      закончилось всё Computer Science and Engineering

                      и на дуде грец

                      это я завидую, да?

                      p.s. по ходу пьесы ещё Assisted in patent drafting, application, and maintenance of two successfully filed patents for a novel internal combustion engine valve.
                      Ответить
  • Синдром отодвигания ворот

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

    на ГК популярно
    Ответить
  • Инженерный отдел завершил разработку предварительной версии интерфейса и интеграции списков фильтрации, см. https://gcode.space/#!/settings.
    Краткое описание интерфейса (сверху вниз):
    1. Источники серверных банов: это список существующих «модераторов» с их ID (напротив флажка) и публичным ключом (ниже ID).
    Пользователь может выбрать любое количество источников (в том числе и ни одного); отфильтрованы будут комментаторы, состоящие хотя бы в одном из списков.

    2. Блок управления локальными ключами со следующими полями:
    2.1 ID: Произвольный текстовый ID, который будет отображаться в списке источников серверных банов.
    2.2 Приватный ключ: приватный ключ, которым будет производиться подпись. Показывать никому нельзя.
    2.3 Публичный ключ: публичный ключ, который будет отображаться в списке источников серверных банов и использоваться для проверки подписи.

    3. Кнопки управления локальными ключами:
    3.1 Сохранить ключи: перезаписывает текущий локальный приватный ключ тем, который введён в поле. Отменить это действие никак нельзя.
    3.2 Сгенерировать ключи: генерация случайной ключевой пары. Чтобы сохранить её — необходимо нажать на кнопку «Сохранить ключи».
    3.3 Вернуть локальные ключи: сброс изменений в полях ключей и возврат тех, которые были сохранены.

    4. Настройка синхронизации:
    4.1 Синхронизировать серверный список с локальным: каждая операция блокировки/разблокировки комментатора будет отправлять на сервер соответствующую команду. Если серверный список изначально не соответствует локальному, то лишние записи _не_ будут удалены.
    4.2 Строгая синхронизация: каждая операция блокировки/разблокировки отправляет на сервер полное состояние локального списка заблокированных пользователей, к которому приводится серверный список. Любые лишние записи удаляются.

    5. Ручное управление списком.
    Ответить
    • Замечания, пожелания, отзывы приветствуются.
      Ответить
        • Согласен. Нужна кнопка «сделать заебись». Какие в жопу ключи???
          Ответить
          • Там есть галочка «Сделать синхронизацию».
            Для простых посетителей там нужно просто выбрать подходящие списки. Ключи нужны тем, кто хочет списки заполнять.
            Ответить
      • minor: при ховере на пункт "Строгая синхронизация" курсор бы менять на стрелку с вопросиком
        Ответить
        • Сложные слова какие-то, наверное, на фронтендерском.
          Провентилируем этот вопросик.
          Ответить
      • В разделе "кого куда синхронизировать" хорошо бы использовать стрелочки и пояснение, что куда отправится. Референс - интерфейс FreeCommander
        https://freecommander.com/fchelpxe/en/Synchronize.html

        Или около кнопки нарисовать схему действия кнопки:
        +--- клиент ----+
        |нет на сервере |-------> сервер
        |есть на сервере|
        +---------------+
        
        +--- клиент ----+
        |нет на сервере |--------> сервер
        |есть на сервере|-forced-> сервер
        +---------------+
        
        +--- клиент ----+        +--- сервер ----+
        |нет на сервере |------->|               |
        |есть на сервере|        |есть на сервере|
        |               |<-------|нет на клиенте |
        +---------------+        +---------------+
        
        +--- клиент ----+
        |нет на сервере |->нах*й   +--- сервер ----+
        |есть на сервере|          |есть на сервере|
        |               |<---------|нет на клиенте |
        +---------------+          +---------------+
        
        +--- клиент ----+
        |нет на сервере |->нах*й   +--- сервер ----+
        |есть на сервере|<-forced--|есть на сервере|
        |               |<---------|нет на клиенте |
        +---------------+          +---------------+
        
        +--- клиент ----+          +--- сервер ----+
        |нет на сервере |--------->|               |
        |есть на сервере|--forced->|есть на сервере|
        |               |   нах*й<-|нет на клиенте |
        +---------------+          +---------------+
        Ответить
        • -----------------------------------
              Клиент                  Сервер
              A                       A
              B                       C
          
          Клиент банит D:
              Нестрогая синхронизация
              A                       A
              B                       C
              D --------------------> D
          
              Строгая синхронизация
              A -|                    A
              B ---[A, B, D]--------> B
              D -|                    D
              
          -----------------------------------
              Клиент                  Сервер
              A                       A
              B                       C
          
          Клиент разбанивает A:
              Нестрогая синхронизация
                ----[unban A]-------> 
              B                       C
              
          
              Строгая синхронизация
              B -------[b]----------> B
              
          -----------------------------------
              Клиент                  Сервер
              A                       A
              B                       C
          
          Клиент разбанивает всех:
              Нестрогая синхронизация
               ----[unban A, B]-----> C
              
          
              Строгая синхронизация
               ---------[ ]--------->
          Ответить
        • Или вот можно три переключателя на чекбоксах, которые генерируют нужную кобенастеньку:
          +----- клиент -----+                   +---- сервер -----+
          |только на клиенте | [->]  [пох] [нах] |                 |
          |есть и на сервере | [->]  [пох]  [<-] |есть и на клиенте|
          |                  | [нах] [пох]  [<-] |только на сервере|
          +------------------+                   +-----------------+


          Как-то так в HTML:
          <table>
            <tr>
              <th>клиент</th>
              <th> </th>
              <th>сервер</th>
            </tr>
            <tr>
              <td>только на клиенте</td>
              <td>
                <label><input type="checkbox" name="client" value="toserver" /> →</label>
                <label><input type="checkbox" name="client" checked value="donothing" /> пох</label>
                <label><input type="checkbox" name="client" value="remove" /> нах</label>
              </td>
              <td> </td>
            </tr>
            <tr>
              <td>есть и на сервере</td>
              <td>
                <label><input type="checkbox" name="both" value="toserver" /> →</label>
                <label><input type="checkbox" name="both" checked value="donothing" /> пох</label>
                <label><input type="checkbox" name="both" value="toclient" /> ←</label>
              </td>
              <td>есть и на клиенте</td>
            </tr>
            <tr>
              <td> </td>
              <td>
                <label><input type="checkbox" name="server" value="remove" /> нах</label>
                <label><input type="checkbox" name="server" checked value="donothing" /> пох</label>
                <label><input type="checkbox" name="server" value="toclient" /> ←</label>
              </td>
              <td>только на сервере</td>
            </tr>
          </table>

          Можно ещё добавить кнопки, который включают чекбоксы по столбцам:
          только левые - сделать как на клиенте, только правые - сделать как на сервере, только средние - ничего не делать.
          Ответить
          • Загружать список с сервера в список локальный не планируется вообще, поскольку это избыточно.
            Ответить