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

    +1

    1. 1
    IT Оффтоп #57

    #29: https://govnokod.ru/26385 https://govnokod.xyz/_26385
    #30: https://govnokod.ru/26413 https://govnokod.xyz/_26413
    #31: https://govnokod.ru/26423 https://govnokod.xyz/_26423
    #32: https://govnokod.ru/26440 https://govnokod.xyz/_26440
    #33: https://govnokod.ru/26449 https://govnokod.xyz/_26449
    #34: https://govnokod.ru/26456 https://govnokod.xyz/_26456
    #35: https://govnokod.ru/26463 https://govnokod.xyz/_26463
    #36: https://govnokod.ru/26508 https://govnokod.xyz/_26508
    #37: https://govnokod.ru/26524 https://govnokod.xyz/_26524
    #38: https://govnokod.ru/26539 https://govnokod.xyz/_26539
    #39: https://govnokod.ru/26556 https://govnokod.xyz/_26556
    #40: https://govnokod.ru/26568 https://govnokod.xyz/_26568
    #41: https://govnokod.ru/26589 https://govnokod.xyz/_26589
    #42: https://govnokod.ru/26600 https://govnokod.xyz/_26600
    #43: https://govnokod.ru/26604 https://govnokod.xyz/_26604
    #44: https://govnokod.ru/26627 https://govnokod.xyz/_26627
    #45: https://govnokod.ru/26635 https://govnokod.xyz/_26635
    #46: (vanished) https://govnokod.xyz/_26646
    #46: (vanished) https://govnokod.xyz/_26654
    #47: https://govnokod.ru/26671 https://govnokod.xyz/_26671
    #48: https://govnokod.ru/26707 https://govnokod.xyz/_26707
    #49: https://govnokod.ru/26750 https://govnokod.xyz/_26750
    #49: https://govnokod.ru/26776 https://govnokod.xyz/_26776
    #50: https://govnokod.ru/26804 https://govnokod.xyz/_26804
    #51: https://govnokod.ru/26809 https://govnokod.xyz/_26809
    #52: https://govnokod.ru/26817 https://govnokod.xyz/_26817
    #53: https://govnokod.ru/26833 https://govnokod.xyz/_26833
    #54: https://govnokod.ru/26840 https://govnokod.xyz/_26840
    #55: https://govnokod.ru/26844 https://govnokod.xyz/_26844
    #56: https://govnokod.ru/26862 https://govnokod.xyz/_26862

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

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

    • Доброй ночи.

      Этот оффтоп сгенерирован автоматически.
      Индекс оффтопов: https://index.gcode.space/.
      Зеркала Говнокода и полезные ресурсы:
      * https://govnokod.xyz/
      * https://gcode.space/
      * @GovnokodBot в «Telegram»
      Ответить
    • Ну, вроде работает.
      Ответить
      • А если кто-то перекатит вручную, то петух это учтёт?
        Ответить
        • Нет, учитываются только оффтопы, находящиеся в мозгах перекатного петуха (все они выводятся в «индексе оффтопов»). Туда они попадают либо после автоматической публикации, либо после ручной правки мозгов оператором петуха.
          Ответить
          • gost, ты дампы базы на нгк чем делаешь? pg_dump?
            Ответить
            • Да, вся обвязка «NGK» есть на «Гитхабе».
              #!/bin/bash
              LOG_FILE="$(realpath db_dump.log)"
              dump_name="ngk_$(date '+%Y%m%d_%H%M%S')"
              echo "DB dump begin at $(date '+%Y-%m-%d %H:%M:%S'), dumping to $dump_name.zip..." >> $LOG_FILE
              
              pushd db_dumps >/dev/null
              pg_dump -F t ngk > "$dump_name.dump"
              zip -q -6 "$dump_name.zip" "$dump_name.dump"
              rm -f "$dump_name.dump"
              # Remove the old dumps
              ls -tp | grep -v '/$' | tail -n +4 | xargs -I {} rm -- {}
              popd >/dev/null
              
              echo "DB dump end at $(date '+%Y-%m-%d %H:%M:%S')." >> $LOG_FILE
              echo "" >> $LOG_FILE
              Ответить
              • ого, первый раз на моей памяти кто-то заюзал pushd и popd
                Ответить
                • Да она в прыщах не особо актуальна, имхо. Это больше для виндовых батников у которых окружение расшаренное.
                  Ответить
              • Блядь, только что заметил, что если в pwd нет папки db_dumps, то эта поебота молча удалит все (кроме трёх последних) файлы из текущей директории. Какой анскилл )))
                Ответить
                • > только что заметил

                  Заметил, когда уже удалило?
                  Ответить
                  • Какой багор )))

                    К щщастью нет, просто проснулся, проверил «НГК», вчитался в скрипт и всё понял.
                    Ответить
                    • У меня был скрипт который случайно удалял себя если обрабатывать было нечего. Был.

                      Ну в общем-то свою задачу он выполнил перед этим, заново не пришлось писать.
                      Ответить
                      • whte_rbt.obj
                        Ответить
                      • Это сообщение самоуничтожится через 4...3...2...

                        Мне кажется, ты его даже выкладывал
                        Ответить
                        • Я не мог его выложить. У меня не было бекапов. Хотя кусок по памяти - возможно.
                          Ответить
                    • Там был цикл по *.zip и basename от найденных файлов. Кто ж знал, что шелл оставляет маску как есть если ничего не нашёл.
                      Ответить
    • Схема БД перекатного петуха:
      class OfftopCategory(Base):
          __tablename__ = 'offtop_categories'
      
          id = Column(Integer, primary_key=True, autoincrement=True, index=True)
          name = Column(String, nullable=False)
          code = Column(String)
          # rww: dirty hack to shut up the type checker
          offtops: List['Offtop'] = relationship('Offtop', back_populates='category', uselist=True, order_by='asc(Offtop.index)')  # type: ignore
      
      
      class Offtop(Base):
          __tablename__ = 'offtops'
      
          id = Column(Integer, primary_key=True, autoincrement=True, index=True)
          post_id = Column(Integer, nullable=False, index=True)
          visible_num = Column(Integer, nullable=False)
          index = Column(Integer, nullable=False, index=True)
          category_id = Column(Integer, ForeignKey('offtop_categories.id'), nullable=False, index=True)
          category = relationship('OfftopCategory', back_populates='offtops')
          vanished = Column(Boolean, nullable=False, default=False)
          auto_offtop = Column(Boolean, nullable=False)
          welcome_comment_id = Column(Integer)  # 'Добрый день. Этот оффтоп был сгенерирован автоматически.'
          perekat_comment_id = Column(Integer)  # 'Перекат! https:// ...'
          comment_list_id = Column(Integer, nullable=True)
      
          PREVIOUS_OFFTOPS_LIMIT = 30  # Rough estimate to fit in 2000 characters
      
      
      class User(Base):
          __tablename__ = 'users'
      
          id = Column(Integer, primary_key=True, autoincrement=True)
          gk_id = Column(Integer, nullable=False, unique=True)
          username = Column(String, nullable=False, unique=True)
          password = Column(String, nullable=False)
          auth_cookie = Column(String)
          last_login = Column(Float)
      Ответить
      • Каждый час петух делает следующее:
        1. Для всех пользователей из users проверяет, не просрочена ли кука, если просрочена — обновляет. Последняя полученная кука используется для всех дальнейших операций.
        2. Получает количество комментариев в последних оффтопах из каждой категории:
        categories: List[OfftopCategory] = session.query(OfftopCategory).options(eagerload(OfftopCategory.offtops)).all()
        last_offtops = {cat.offtops[-1].post_id: cat.offtops[-1] for cat in categories if len(cat.offtops) > 0}
        last_offtops_info = ngk.get_posts_info(last_offtops.keys())

        3. Все переполненные оффтопы помещаются в отдельный список offtops_to_perekat:
        offtops_to_perekat: Iterable[Offtop] = [
            last_offtops[post_id]
            for post_id, info in last_offtops_info.posts.items()
            if info.comments_count >= config.OFFTOP_COMMENTS_LIMIT
        ]

        4. Для каждого оффтопа из offtops_to_perekat публикуется новый оффтоп и два комментария (перекатный и приветственный).
        Ответить
      • алхимия шоль?
        Ответить
    • показать все, что скрытоvanished
      Ответить
    • Доделал mvp

      Показывать боюс
      Ответить
      • Давай, заливай на «Гитхаб», а мы будем показывать пальцами и смеяться!
        Ответить
        • На гитхаб вряд ли

          А ссылка вот

          https://vorec.space

          Багрепорты приветствуются
          Ответить
          • WCyQg3ItPuHsptBI
            Ответить
            • Пошла жара!
              Ответить
              • Рекомендую обернуть запрос на «NGK» в "одинарные кавычки", потому что без них поиск идёт полнотекстовый и неточный. Также попрошу учесть, что поиск на «NGK» регистронезависимый, а то могут и не учесть.
                Ответить
              • Ещё рекомендации:
                1) Ограничить частоту ручных проверок (по нажатию кнопки) до одной раз в секунду, например;
                2) Выдавать пользователю access_token (который сейчас в куках), чтобы можно было аутентифицироваться без прохождения проверки по комментарию.
                Ответить
                • Да, для проверок надо будет где-то поставить лимит, правда, пока не сильно понимаю, в каком месте и как (по ип?)

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

                  А, кроме этого, в чём будет профит? Токен живёт неделю, часто перелогиниваться не нужно вроде
                  Ответить
                  • Лучше всего сделать тротлинг по IP, иначе скриптушок напишет скриптик, и будет тебя им ебать, а ты будешь ебать ГК, и будет грустно.
                    Ответить
                    • > а ты будешь ебать ГК
                      «NGK», а не «ГК», но не суть.
                      Ответить
                  • > в каком месте и как (по ип?)
                    По privateToken в /check, наверное. Записывать, когда с таким токеном последний раз проверяли, и если это было меньше, чем N секунд назад — отправлять 404.

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

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

                      Было бы круто такое фильтровать на уровне nginx, но я не знаю, можно ли.

                      > Нет, просто выдай его мне на руки, я смогу записать его себе в менеджер паролей
                      - так, ты его себе запишешь, а мне как надо делать? Типа будет отдельно получение токена и отдельно логин по паре юзернейм/токен?
                      Ответить
                      • Хм, думаю, лучше всего будет действительно по IP лимитировать (действительно, возможно даже через «nginx»). Так и ограничение будет, и боты не смогут засрать какого-нибудь пользователя, чтобы он не смог залогиниться.

                        > - так, ты его себе запишешь, а мне как надо делать? Типа будет отдельно получение токена и отдельно логин по паре юзернейм/токен?
                        Ну вот насколько я вижу, сейчас ты с /link выдаёшь publicTokenString и privateTokenString, а потом /check получает privateTokenString и проверяет, запощщен ли комментарий с соответствующим publicTokenString. Я предлагаю:
                        0) Сохранять результаты успешной проверки (чтобы уже проверенный privateTokenString не проверять);
                        1) После успешного логина напечатать пользователю его privateTokenString;
                        2) В дальнейшем на /#/login дать возможность ввести не ник, а сразу privateTokenString. После нажатия кнопки «Проверить» этот токен так же, как сейчас, отсылается на /check (минуя /link), в ответ пользователю ставится кука access_token.
                        3) Предусмотреть возможность удаления privateTokenString для случаев, когда его спиздили, например.
                        Ответить
                        • Тут нюанс в том, что privateTokenString генерируется однажды для конкретного запроса на /link, как и publicTokenString, то есть, он не реюзается. А private он только потому, что его не видно в UI :)))

                          И с пользователями они никак сейчас не связаны, только с запросами на линк юзернейма с гк
                          Ответить
                          • А, ну тогда можно добавить просто добавить в таблицу пользователей колонку «пароль» и не пердолиться.
                            Ответить
                            • Там есть пароль уже, я его случайным образом генерирую.

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

                          limit_req_zone $binary_remote_addr zone=voreclimit:10m rate=5/s;
                          
                          limit_req zone=voreclimit burst=5 nodelay;


                          Знатоки nginx, скажите, этого достаточно?
                          Ответить
              • Добавил IP твоего сервера в вайтлист «Cloudflare», если будешь менять — напиши на [email protected]. Без вайтлиста «Cloudflare» может начать капчу показывать или ещё как-нибудь чудить, хотя это и маловероятно.
                Ответить
          • fnGiMtgqzDcG0yil
            Ответить
          • IYAf1trmWKOlkNRw
            Ответить
          • Давай пока обосру сервер. Это же твоя VPSка?

            * ssh на 22 порту: заебут брутом
            * нет hsts preload
            * нет DNS CAA
            * TLS 1.0 и 1.1, старые шифры. В результате хуёвая оценка на SSLabs
            * нет http/2
            * нет заголовка для вечного кеша статики, хотя статика явно имеет хешевое имя
            * ошибка в JS консоли
            Ответить
            • Мне половину из того, что ты написал, придётся гуглить, но я учту, спасибо.

              > ошибка в JS консоли
              - это внутри axios вроде, пока не разбирался
              Ответить
          • > https://vorec.space/#/term/Питушня

            > Синоним "Хуйня"

            Не соглашусь
            Ответить
            • Так добавь определение
              Ответить
              • Есть идея добавить возможность указания синонимов
                Ответить
              • Кстати, gostinho, как и guest8, не смогут добавить определения, потому что это аккаунты, за которыми сидят много людей, а потому они в ЧС

                Я ж правильно помню?
                Ответить
                • gostinho за что?
                  Ответить
                • Всё верно.
                  Ответить
                • У всех *inho, ЕМНИП, пароль 123. Иньо поправит, если что не так.
                  Ответить
                • Вдогонку:
                  bopmand:123
                  vvkir:123
                  0_14sun:123
                  124_14sun:123
                  4_14sun:123
                  KPblM_HAIII:123
                  exception:carme
                  grammar-nazi:carme
                  kapmadpo4ep:carme
                  guestnho:321
                  nudop:1010
                  lev_glandau:123
                  kir_rik:govnokod
                  firefred:govnokod
                  vaceknt:govnokod.ru
                  OlegYch:govnokod.ru
                  6a9lhuct:1100
                  6bik:1100
                  AnalBoy:ololo
                  CnEPMOBOP:ololo
                  ggrr:qwerty
                  inkanus_gray:ihkanus
                  KAPABAH:1100
                  kohcojlbhblu_nemyx:nep
                  qpjli-oc:1100
                  romocekcyajluct:gomo
                  Sers:123
                  SharpRazor:qwerty
                  zhigolo:zhigala
                  cmepmop:str
                  Ответить
                  • это всё твои псевдонимы? да? да?!
                    Ответить
                    • Неа. См. http://govnokod.ru/25583.

                      Да, я люблю заботливо схоронять в отдельный текстовый файлик всякую ненужную питушню.
                      Ответить
                    • Какой камин аут )))
                      Ответить
                • По-моему лучше пока убрать ЧС и действовать по обстановке. Насрут - удалишь и внесёшь.
                  Ответить
                  • Ну, кстати, или так, да. Не то чтобы на ГК было так сложно зарегать новую файку…
                    Ответить
                    • Вот именно.
                      Ответить
                    • Ну можно кстати стаж файки проверять. Типа если зареган меньше месяца и нет комментов - иди нахуй.
                      Ответить
                      • Не чтобы на ГК было так сложно заранее нарегать тысячу-другую фаек…
                        Ответить
                        • Если заранее не нарегал - влом будет месяц ждать.
                          Ответить
                  • У меня руки пока не дошли сделать админку.

                    Думаю, как запилю, так и уберу.

                    С раковых аккаунтов пока всё равно никто не сидит
                    Ответить
                    • > У меня руки пока не дошли сделать админку.
                      Действуй по методу Страйко: DELETE FROM records WHERE records.user_name = 'nacpaJl';
                      Ответить
                      • Хорошо, что ef вроде сам везде добавляет on delete cascade )

                        Кстати, прямые ссылки работают, можно использовать в разговоре
                        https://vorec.space/#/term/Скриптушня

                        В ссылках в названиях также могут содержаться пробелы, пока не определил степень потенциального багра, чтобы решить, переделывать или нет
                        Ответить
                        • Плюсик въебать всегда можно вместо пробела. Даже если руками писать.
                          Ответить
                          • У меня плюсик сейчас работать не будет (
                            Ответить
          • Какой-то багор с пейджером, при 20 записях (а это одна полная страница) показывает две страницы.

            Что-то перемудрил.
            Ответить
            • Ошибка на 1?)
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Петрухин Алексей Владимирович, тел. 24-81-08. Позвоните, расскажете, как результаты. Спросите его о хвостиках в массивах...

                  https://www.gamedev.ru/flame/forum/?id=122958
                  Ответить
                  • Ничего не понял, переведи на «ГК».

                    Где основные срачи про эти хвостики проходили?
                    Ответить
                    • Короче, если тебе нужен массив на N, ты делаешь массив на N+1, чтобы если ты случайно объебался, то ничего бы не сломалось.
                      Ответить
                      • Да это я понял, мне хочется срачей почитать. Тема, которую CHayT кинул, слишком остывшая. Видимо, к тому времени уже нахрюкались все.
                        Ответить
                        • А ты напиши там что-нить, и тема запустица.

                          Например: "ну строки сишные мы же терминируем нулом, почему не терминировать им массив?"

                          Кстати, в субъективной сишечке (если я не путаю) NSArray терминировался нилом.. но это не точно
                          Ответить
                          • По этому я за Нил
                            Ответить
                            • По берегу Нила
                              Шли три крокодила:
                              Данила, Пахом и Федот.
                              Ответить
                          • Ну хвостики - это хорошая тема. Можно даже пирфоманс поднять убрав лишние проверки.
                            Ответить
                          • >>> Тема в архиве.
                            :-(.

                            > почему не терминировать им массив?
                            Кстати, динамический массив, терминированный нулевым значением — это довольно-таки распространённая ебола в «WinAPI». Реальный пример:
                            typedef struct _FILE_DIRECTORY_INFORMATION {
                              ULONG         NextEntryOffset;
                              ULONG         FileIndex;
                              LARGE_INTEGER CreationTime;
                              LARGE_INTEGER LastAccessTime;
                              LARGE_INTEGER LastWriteTime;
                              LARGE_INTEGER ChangeTime;
                              LARGE_INTEGER EndOfFile;
                              LARGE_INTEGER AllocationSize;
                              ULONG         FileAttributes;
                              ULONG         FileNameLength;
                              WCHAR         FileName[1];
                            } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;

                            В конце этой структурки приделывается строка длины FileNameLength, а &FileName[0] служит указателем на её начало.

                            UPD: Тьфу, задумался, перепутал, это не то. Реальный реальный пример забыл.
                            Ответить
                          • dave
                            Каждый раз выделяя память массиву мы должны пожертвовать немного
                            места для духов, чтобы они не гневались и не ломали программу.
                            Ответить
                          • QByteArray всегда* к внутреннему преставлению добавляет нолик на случай, если мы захотим взять сишную строку.

                            *если не подсунуть свои данные в fromRawData
                            Ответить
              • Угу, арифметику надо повторять, обратно в третий класс
                Ответить
          • Словарик
            http://govnokod.ru/26478
            Ответить
          • >https://vorec.space

            Нужно было отдельным тредом сделать тему.

            А то я заебался искать.

            Добавьте пужулуйста статью про Глето́ны:
            https://govnokod.ru/17843#comment268335
            Ответить
            • Красота.

              Щас добавим

              А ты сам чего не?)
              Ответить
            • https://vorec.space/#/term?v=Глетоны
              Ответить
              • zgohK3ZmV56b13Hf
                Ответить
                • а зачем ты добавляешь ссылки отдельным определением?

                  там же можно оставить ссылку на пример
                  Ответить
                  • В пример я хуйню сделал а отредачить не получается. По этому хуйнул в определение
                    Ответить
                    • ок

                      я запишу фича-реквест: редактирование примеров)
                      Ответить
    • показать все, что скрытоvanished
      Ответить
    • О релокации и об удалёнке:
      https://pbs.twimg.com/media/EgWdQJfWsAAhuAf.jpg
      Ответить
    • О сложностях работы с устройствами ввода:
      https://pbs.twimg.com/media/EglPIABWsAcwq_o.jpg
      Ответить
    • А о чём этот сайт?
      Ответить
    • Нажал «Ctrl+Y» в «Идее», она меня спросила, что я имею в виду: «Redo» или «Delete line». Вот это заебись охуенно, одобряю!
      Ответить
      • небось плагин и ли кимап стоит какой-нить типа emacs? Так то из коробки это реду вроде
        Ответить
    • Купил я себе беспроводную клавиатуру и заметил что после простоя первое нажатие клавиши не регистрируется, зато раскладку клавиатуры на ноутбуке имеет точно такую же
      А за какие клавиатуры вы? Мембранные/механические? проводные/беспроводные?
      Ответить
      • ну естественно она в слип уходит. у меня беспроводной комплект от rapoo третий год, краска начала стираться, а в остальном очень мжвячне.

        http://www.rapoo.com/product/461
        Ответить
        • Ебать, я себе тоже rapoo купил, но попроще
          Ответить
        • > в слип уходит

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

          Ленивые китайцы прошивку писали, вот и теряет нажатия.
          Ответить
          • а у тебя беспроводная клавиатура? Какую бы ты купил?
            Ответить
            • > беспроводная клавиатура

              Зачем? Зачем? Только провода, только хардкор. Я даже беспроводные наушники выбирал чтобы с проводом работать могли.

              > какую бы ты купил

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

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

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

                      Только проверь, что у тебя на компе баланс не сбитый нигде. А то вдруг случайно крутанул регулятор. Ну и тестить лучше не на музыке а на специальном семпле для настройки.

                      З.Ы. Ни разу такого не видел, на самом деле.
                      Ответить
      • Лол блдя я тоже позавчера купил клаву, такую:
        https://www.dns-shop.ru/product/28e1dc31f1c63330/klaviatura-a4tech-bloody-b820r/

        до этого стояла какая-то китайская sven за 300р
        Ответить
    • Блядь, для недавнего срача установил свежую «Идею» и начал копаться в «Котлине»… Теперь не могу остановиться. Дока у «Коко» охуенная.
      Ответить
    • https://pbs.twimg.com/media/EgvMuXTXYAAd7pr?format=jpg&name=medium
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Я рисовал лабиринты.
        Ответить
        • Я рисовал уровни типа как в принце персии, и еще такие игры, где надо кубик кидать и ходить
          Ответить
          • { Вы случайно не middle game developer ? }
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • фу блять, опять эта ма-те-ма-ти-ка
                Ответить
              • Подтверждаю. И хотя физика для меня довольно близка, от 3D-графики начинает болеть голова: постоянные прыжки из одной СК в другую (в особо тяжёлых случаях — из декартовой в полярную, из полярной в цилиндрическую, из цилиндрической обратно в декартову и всё на одной строке рассуждений) дезориентируют и утомляют.
                Ответить
                • Переход из полярной в декартову — фигня. Есть ещё углы поворота (Эйлера), описывающие произвольное вращение тела в 3D (у ракетчиков и у самолётчиков эти углы называются углом крена, углом тангажа и углом рыскания). А в нелинейной механике твёрдого деформируемого тела всё считают в деформированных косоугольных координатах, там ещё приходится переходить от материальных координат к неподвижным и обратно (см. подходы Эйлера и Лагранжа).
                  Ответить
                  • > углы эйлера

                    Забыл как страшный сон когда разобрался с кватернионами. Эти углы очень неудобно кобенировать.
                    Ответить
                    • > углы эйлера
                      Блядь, синус на косинус на минус свинус на косинус плюс косинус на синус на косинус на свинус…
                      Ответить
                      • Именно поэтому я за кватернионы.

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

                А на самом деле будешь пилить UI, обвес вокруг готового двигла да скрипты для NPC.

                З.Ы. Или вообще хуйню под фейсбук да мобилы.
                Ответить
      • my dick / your dick
        Ответить
      • Помню, когда был мелким пиздюком (лет четыре-пять, кажется), развлекался тем, что переписывал старые газеты. И вот что из этого теперь получилось…
        Ответить
        • из тебя получился бы хороший джава энтерпрайз программист
          Ответить
      • Я карты из марио в тетрадку зарисовывал.
        Ответить
    • https://habr.com/post/517228/
      > Минкомсвязь предложила обязать дата-центры передавать данные о своих мощностях в Роскомнадзор
      > Минкомсвязь планирует обязать операторов центров обработки данных (ЦОД) предоставлять в Роскомнадзор текущую техническую информацию об эксплуатируемых системах, включая количестве стойко-мест, параметрах электроснабжения, уровня загрузки коммутационного оборудования, доступные и используемые вычислительные мощности, параметры систем хранения данных (СХД), виды предоставляемых услуг и тарифов.

      > le1ic
      > Вам же наднесь обещали второй пакет мер поддержки IT бизнеса. Получите, распишитесь )
      Ответить
    • Блядь, кто вообще придумал эту поеботу с «AppData»? %AppData%\..\Local, %AppData%\..\LocalLow, %AppData%\..\Roaming… Говно.
      Ответить
      • Кто придумал недобраузеры ставить не в «Program Files», а в %AppData%\..\Local?
        Ответить
        • Это чтобы лучше слышать тебя браузер могла поставить даже домохозяйка без административного аккаунта. Но да, говнище ёбанное.
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • В том, что если ты не админ на данной тачке, то нахуй тебе что-то ставить?
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Ну если ты ему доверяешь проги ставить, то зачем ты ему ограниченную учётку сделал?
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • > Что такое "проги ставить"?

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

                        Серьзно, что бы ты предложил в ситуации с ребенком.
                        Допустим, у меня стоят все обновления и антивирь, и большинство вирусов мне не страшно (меня никто не хочет сломать спецаиально итд).

                        И есть ребенок/гость/хуйзнаеткто.
                        Я не могу давать ему админские права, иначе он случайно сломает систему или зайдет в мою учетку (или прочитает оттуда файлы).

                        Однако, я не хочу каждые 15 минут бегать к нему, когда он захочет запустить очередную игру.

                        Кажется, что установка говна в домашнюю папку -- самое верное решение, да еще и удобное тем, что я могу потом ёбнуть профиль вместе со всем говном

                        Что не так?
                        Ответить
                        • > плохие новости, чувак
                          Именно. И да, именно поэтому я за «SRP» и «AppLocker».

                          > Я не могу давать ему админские права, иначе он случайно сломает систему или зайдет в мою учетку (или прочитает оттуда файлы).
                          У меня для тебя тоже плохие новости: если ребёнок/гость/хуйзнаеткто может запускать на твоей системе произвольные исполняемые файлы — у него по факту уже есть максимальные права. 0day «local privileges escalation» на винде появляются чуть ли не каждый месяц. Свежачок, например: https://www.helpnetsecurity.com/2020/08/07/zero-days-windows-print-spooler/. Но это бы не было так печально, если бы не тот факт, что практически каждая установленная программа повышает риски таких уязвимостей в разы. Примечателен пример «Стима», который несколько месяцев (!) отказывался патчить повышение до NT AUTHORITY\SYSTEM: https://habr.com/post/462479/.
                          Так что увы, де-факто любой виндовый аккаунт равен локальному администратору.
                          Ответить
                          • Я же написал
                            >меня никто не хочет сломать спецаиально итд

                            Если у меня на компе захочет посидеть J Random Hacker, то я ему виртуалку подниму, и за свой комп не пущу.

                            В прыщеядре тоже бывают дыры, но никто не говорит же "давайте всем рута, потому что даже не рут всё равно сломает"
                            Ответить
                            • А ты так уверен, что очередной XXXGovnoCryptXXX не попытается в автоматическом режиме проэксплуатировать какое-нибудь подобное говно?
                              Ответить
                              • откуда у меня GovnoCrypt дома?:)

                                Есть разные случаи"безопасности".
                                В одном случае мы доверяем ОС, и считаем, что она не ломается, потому что пользуется ею ребенок, она не торчит в наружную сеть, итд.

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

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

                                Во втором случае вообще нужно делать отдельный инстанс ОС.
                                Я бы хакера не пустил по ssh под обычным пользователем даже на openbsd.

                                Но я говорю про первый случай
                                Ответить
                                • > откуда у меня GovnoCrypt дома?:)
                                  А у тебя все дети приучены не брать конфетку у чужих людей скачивать приложения исключительно из Надёжных Источников и никогда не попадают на говнодорвеи по запросам «скачать дока2 бесплатно»?

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

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

                                    Они его сксачают, запустят, и оно сломает винду через " дыру в сервисах, коих тысячи"
                                    Ответить
                                    • > Они его сксачают, запустят
                                      И получат красивое окошко «обратитесь к администратору», потому что из «Загрузок» ничего запускать нельзя.

                                      Ну да, это потребует от тебя дополнительной работы. Но если (абстрактному) тебе важны данные на общей пеке — это, как ни печально, необходимое зло.

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

                                        А могу обечпечить на B+ не разрешив ему запускать ничего, кроме спец белого списка

                                        А могу обеспечить "A" собрав отдельный комп внутри отдельного VLAN без доступа к локалке
                                        Ответить
                                        • > отдельного VLAN без доступа к локалке

                                          Кстати многие роутеры сейчас умеют в гостевой wifi, поэтому с этим проблем особо нет, любая домохозяйка справится. Ну и физический порт тоже можно закинуть в эту гостевую сеть вроде.
                                          Ответить
                                        • > отдельный комп внутри отдельного VLAN без доступа к локалке
                                          Именно поэтому я за «Air Gap».

                                          Так вот, если ты будешь настраивать на «B» — у тебя всё будет заебись. А вот если тебе понадобится обеспечивать «B+» — программы, пишущие себя в аппдату, будут тебе активно и сильно мешать. И это хуёво.
                                          Ответить
                            • > "давайте всем рута, потому что даже не рут всё равно сломает"
                              А я и не предлагал всем раздавать админа. Наоборот: если тебя действительно волнует безопасность ПК — стоит грамотно настроить «SRP» и «AppLocker».

                              Ну а всякое говно, которое ставится в аппдаты, этому активно мешает. И это хуёво*.

                              * Попрошу заметить, что «SRP» и «AppLocker» — это больше корпоративные инструменты, поэтому не надо писать, что, мол, они нинужны.
                              Ответить
                              • Так я начал с того, что давать пользоватлю ставить себе говно в домашнюю папку без админских прав это ХОРОШО


                                Это не понижает безопасность (потому что он всё равно может запустить говно с рабочего стола)
                                Ответить
                                • Нет. Это понижает безопасность потому, что ставящееся в аппдаты говно мешает правильно настраивать «SRP» там, где это нужно. Поэтому это хуёво.
                                  Ответить
                                  • >настраивать «SRP»
                                    Напоминаю, что речь о домашнем компе.

                                    Если мы запрещаем вообще запуск любых .exe кроме тех, что уже стоят в "program files", куда записи нету, то тогда конечно пользователю не надо давать никаких прав на установку.

                                    Но обычно это не так. Обычно у него есть права запустить kitty.scr.exe с рабочего стола. А значит позволив ему установить что-то в AppData мы не делаем хуже
                                    Ответить
                                    • > А значит позволив ему установить что-то в AppData мы не делаем хуже
                                      Я тебе про архитектуру — ты мне про конкретного пользователя.

                                      Вот у меня свой комп есть, я на нём единственный пользователь и творю что хочу. У меня все права есть. Следует ли из этого, что управление правами нинужно вообще?
                                      Ответить
                                      • >Я тебе про архитектуру — ты мне про конкретного пользователя.
                                        Я не очень понял эту фразу.

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

                                        И на винде я бы тоже не сидел под админом, если бы там было нормальное sudo
                                        Ответить
                                        • > sudo

                                          Эм, кстати а в чём вообще суть этого фетиша с "sudo команда" на каждый чих? Бесполезные буковки и вбивания пароля, имхо.

                                          Либо сидишь под юзером либо sudo su под админа.
                                          Ответить
                                          • во-первых пароль запоминается, его не нужно каждый раз вводить
                                            во-вторых можно в одном терминале su
                                            и наконец есть мерзкий pkxec

                                            На пинде этого нет
                                            Если ты не админ, то ты вынужден будешь перелогиниваться, или юзать пиздопротивный runas
                                            Ответить
                                            • Дык ты сиди под админом с uac. Без физического доступа uac не обойти вроде. По сути то же sudo, можно даже запрос пароля включить если тебе мало просто кнопки "ок".
                                              Ответить
                                              • uac это мерзкий кастыль, сделанный ровно потому, что все вынуждены были сидеть под админом

                                                а вынуждены они были потому что половина программ срала в "program files", и еще потому, что не было нормального sudo.

                                                Ну вот я сижу под юзером, и захотелось мне обновить драйвер. Или поменять IP. И пиздец: мне проще залогиниться второй раз, чем ебстись с runas
                                                Ответить
                                                • А что там ебстись то? Тыкай в инф или что там у тебя, uac спросит пароль админа (по сути su). То же самое со сменой ip через гуйню. Сосноль с правами админа тоже запускается в пару кликов и ввод пароля.
                                                  Ответить
                                                  • показать все, что скрытоvanished
                                                    Ответить
                                                    • > uacа у тебя не будет

                                                      Проверял?
                                                      Ответить
                                                      • Проверил тебе в HKEY_LOCAL_MACHINE\Software\WOW6432Node, проверь
                                                        Ответить
                                                    • Ну вот специально для тебя ребутнулся в винду и создал ограниченного юзера.

                                                      Run as administrator на cmd и т.п. спрашивает пароль админской учетки и потом всё прекрасно работает. Свойства сети менять тоже можно без проблем, если админский пароль знаешь.
                                                      Ответить
                                                • Даже если ты залогинился админом, в «Windows» при включенном «UAC» этого может оказаться мало. Может понадобиться запустить «cmd» с повышенными («elevated») правами, например.
                                                  Ответить
                                                  • Господи, "запуск от имени админа" это же и есть элевейшен.

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

                                                    И все кнопки в панели управления вроде точно так же работают.
                                                    Ответить
                                                    • Ох уж этот «Майкрософт» и его фирменный перевод…
                                                      Ответить
                                                    • Я так понимаю, свинья хочет сказать, что некоторые программы/скрипты могут не явно требовать elevated прав (в манифесте или через «runas»), а просто отказываться запускаться в неэлевированном окружении. Например, если ты натравишь CreateProcess() из не-elevated приложения на исполняемый файл с «level="highestAvailable"», то получишь ERROR_ELEVATION_REQUIRED.
                                                      Ответить
                                                      • Ну highestAvailable это всё-таки какой-то извращённый софт, который частично может работать под юзером. Типа окошек в панели управления, где можно посмотреть но нельзя поменять. Такие проги обычно умеют uac по ходу работы пинать когда он им реально понадобится.
                                                        Ответить
                                          • Я где-то слышал, что это чтобы ты всегда видел, что вводимая команда опасна и может применить к тебе патч Бармина (не то чтобы лайт-версия патча Бармина на ~ была так уж менее эффективной…). На сколько это помогает — судить не берусь.
                                            Ответить
                                            • Кто-то реально читает команду потому что sudo мешает её исполнить сразу? Да и кеш пароля всю эту пользу обесценивает.

                                              Это как сообщения в mc/far, которые никто не читает и на автомате жмёт энтер.
                                              Ответить
                                              • > Кто-то реально читает команду потому что sudo мешает её исполнить сразу?
                                                Не, типа ты видишь (или, ещё лучше, вручную вводишь) впереди команды слово «sudo» и понимаешь, что дальше будет опасно. Ну типа как значок «Не влезай, убьёт».

                                                > Это как сообщения в mc/far, которые никто не читает и на автомате жмёт энтер.
                                                Эх, вспоминаю, как я не прочитал сообщения «apt» и остался на системе с удалённым libc6…
                                                Ответить
                                                • > видишь

                                                  У меня в рутовом профиле был красный mc и красный root в приглашении ко вводу. Вот их я реально видел.
                                                  Ответить
                                                  • Ладно, похуй.

                                                    Ну я за что купил — за то продаю. Сам-то я под рутом обычно сижу :-).
                                                    Ответить
                                                    • Не ну я под рутом сижу только если реально надо. Но с sudo в каждой сраной команде я никогда не пердолюсь.
                                                      Ответить
                                                      • Подтверждаю. Когда перешёл на «публичные ключи» — вообще перестал пароли вводить, держу в «WinSCP» две вкладки: рута и обычного юзера, когда надо что-то поадминить — подключаюсь к первой, когда просто логи проверить — ко второй.
                                                        Ответить
                                                • ну так пользовался бы дальше семеркой, в чем проблема?
                                                  Ответить
                        • Да забей, это просто режим параноика.

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

                          Я бы просто отдельный комп собрал ему. И пусть сам его чинит, если какое-нибудь говно скачает. Все права есть.
                          Ответить
                          • Да, отдельный инстанс ОС это более безопасно, но мы говорим про общую ОС.
                            Ответить
                    • «Поставить» подразумевает засирание реестра всяким говном.

                      Существуют «портативные программы», которые не срут в реестр.
                      Ответить
                      • так в современных виндах у меня есть своя веточка реестра, и я туда сру
                        мне не нужны для этого админские права
                        Ответить
            • > В чем гавнище?
              1. В неконсистентности. Одна параша стоит в «Program Files», другая — в «Program Files (x86)», третья — в «%AppData%», четвёртая — в «%AppData%\..\Local».
              2. В безопасности: в общем и целом, исполняемые файлы в папках, в которые юзер может записывать данные, — говнище. Я не так давно в обсуждении «SRP» за это пояснял.
              Ответить
              • > В неконсистентности.
                Прыщи очень неконсистенты: одни настройки баша лежат в /etc/profile, другие в ~/.bash_profile

                >исполняемые файлы в папках, в которые юзер может записывать данные, — говнище
                А как ты предлагаешь ставить программы?
                Звать админа каждый раз?
                Ответить
                • > Прыщи очень неконсистенты: одни настройки баша лежат в /etc/profile, другие в ~/.bash_profile
                  Ну и чо, теперь надо брать всё говно из прыщей? Прыщавое говно не становится неговном просто потому, что так сделали в прыщах.

                  > А как ты предлагаешь ставить программы?
                  > Звать админа каждый раз?
                  В каком сценарии? У меня вот личный комп есть, я сам себе админ.
                  Ответить
                  • >Ну и чо, теперь надо брать всё говно из прыщей?
                    То есть наличие домашней папки ты считаешь говном?

                    >В каком сценарии?
                    Я жеж описал же: есть семейный комп, на него заходят гости и дети, например.
                    Ответить
                    • > То есть наличие домашней папки ты считаешь говном?
                      Домашней папки, в которой находятся исключительно конфиги и неисполняемые данные? Конечно нет.

                      > Я жеж описал же: есть семейный комп, на него заходят гости и дети, например.
                      Тогда нужно смотреть, какие на этом компе есть данные и насколько они ценны. Если там только игры да кинцо — я бы всё оставил как есть, с антивирусом и стандартными пользовательскими аккаунтами без ограничений.
                      А вот если в твоём акке лежат условные (!) ключи для доступа к прод-серверу «Гугла», то в таком случае я бы рекомендовал грамотно настроенный «SRP» и запрет на запуск любых скачанных исполняемых файлов.
                      Ответить
                      • Окей, берем вариант с кинцом (я бы не стал серьезные секреты харнить на компе, к которому у всех доступ есть).

                        И вот ты предлагаешь
                        >с антивирусом и стандартными пользовательскими аккаунтами без ограничений.
                        То есть ровно то, с чего мы начали: ребенок или гость сидит под пользователем, ставит себе игры в домашнюю папку, и не может сломать мой аккаунт

                        Если ко мне в гости придет хакер, то он взломает эту систему конечно, но они ко мне не ходят
                        Ответить
                        • В такой ситуации у тебя всегда будет ненулевой шанс того, что очередной скачанный ребёнком красивая-картинка.jpeg.exe таки окажется достаточно умён для того, чтобы проэксплуатировать очередной зиродэй и наебнуть тебе всю систему. Или там у гостя окажется флешка с хитрым червиём.
                          Конечно, если ты рагулярно делаешь бэкапы на изолированную систему и не хранишь на общем ПК важных данных, то на этот шанс можно спокойно забить.
                          Ответить
              • /lib
                /lib/i386-linux-gnu
                /lib/x86_64-linux-gnu
                /lib32
                /lib64
                /libx32
                /usr/lib
                /usr/lib/i386-linux-gnu
                /usr/lib/x86_64-linux-gnu
                /usr/lib32
                /usr/libx32
                Ответить
      • Ну local/roaming это остатки идеи о юзерах, которые садятся за рандомную тачку и там работают.
        Ответить
        • Я бы даже сказал «ошмётки».

          Меня просто заебало постоянно искать, куда очередное говно положило свои говноконфиги и говноданные: в «Local», в «Roaming», в «Документы», в «%userprofile%», в «ProgramData», в «Program Files» (привет, «Steam»!) или ещё куда-нибудь. Ёбанная неконсистентность.
          Ответить
          • Теоретически ещё можно срать прямо в реестр вместо файловой системы.
            Ответить
            • Майкрософт не одобряет. Они по-моему уже с 95-й винды рекомендуют в реестр сильно не срать.
              Ответить
              • > рекомендуют в реестр сильно не срать.
                https://i.imgur.com/ul3r3Ap.jpg
                Ответить
              • показать все, что скрытоvanished
                Ответить
              • >> Они по-моему уже с 95-й винды рекомендуют в реестр сильно не срать.

                А когда они в него рекомендовали срать? В «Windows 3.x» в реестре был единственный корень (HKEY_CLASSES_ROOT; начиная с 95 и NT, у него есть псевдоним HKEY_LOCAL_MACHINE\Classes). Этот куст хранил только обработку расширений файлов оболочкой и регистрацию OLE, туда особо не посрёшь. Программы тогда хранили свои настройки в лучшем случае в ini-файлах.

                Возможность срать рандомными данными появилась как раз в 95.
                Ответить
        • показать все, что скрытоvanished
          Ответить
          • Это всё потому что проги криво написаны и не в тот каталог сохраняют.
            Ответить
          • Это чтобы от работы отмазываться? Типа я простаиваю, потому что у меня профиль копируется?
            Ответить
            • Во многих говноконторках бывает так, что планктон включил комп с утра, и ушел пить кофе, пока он грузится.
              Ответить
    • class Trie {
          private val prefixes: MutableMap<Char, Trie> = LinkedHashMap()
          private var elementExists = false
      
          private fun createTrieFor(c: Char): Trie =
              this.prefixes.getOrElse(c, {
                  val newTrie = Trie()
                  this.prefixes[c] = newTrie
                  return newTrie  // Именно поэтому я за «return this.prefixes[c] = Trie()»
              })
      
          private fun findTrie(str: String): Trie? {
              var curTrie: Trie? = this
              str.forEach { curTrie = curTrie?.prefixes?.get(it) ?: [email protected] null }
              return curTrie
          }
      
          fun add(str: String) {
              var curTrie = this
              str.forEach { curTrie = curTrie.createTrieFor(it) }
              curTrie.elementExists = true
          }
      
          fun contains(str: String) =
              this.findTrie(str)?.elementExists ?: false
      
          fun delete(str: String) {
              this.findTrie(str)?.elementExists = false
          }
      }
      
      fun main() {
          val trie = Trie()
          trie.add("Hello")
          trie.add("World")
          println(trie.contains("Hello"))     // true
          trie.delete("World")
          println(trie.contains("World"))     // false
          trie.delete("non-existent")
          println(trie.contains("GoodBye"))   // false
          println(trie.contains(""))          // false
          trie.add("World")
          println(trie.contains("World"))     // true
      }

      Начал кукарекать. Ко-ко-котухи, поясните за идиоматичность, пожалуйста.
      Ответить
      • Автомат?
        Ответить
      • показать все, что скрытоvanished
        Ответить
        • Спасибо, getOrPut() почему-то не заметил и долго удивлялся отсутствию аналога «std::map::try_emplace».

          > тут, как мне кажется, императивщина понятнее функциональщины, но это не точно
          Пожалуй, да. Я изначально там обычный цикл с «break» и написал, но в add() очень уж красиво получилось впилить forEach, решил последовать старому совету про то, что когда в руке молоток, всё вокруг кажется гвоздями.

          > и что нулл сейфити работает
          Угу, смарткасты мне понравились (их ещё «Идея» зелёненьким подсвечивает, круто).
          Ответить
    • https://sun9-29.userapi.com/crffTnEBfY8bcsE7xhymzpnVYdtHR66odgl-pg/bhAA_wK9Kek.jpg
      Ответить
      • Именно поэтому я против «фреймворков».
        Ответить
      • это жаба и сраный эпигон её пых

        Кстати, "реально нужный код" скорее всего выглядит так

        public interface AbstractManagerFactoryAdapterProvider<T, R> {
            T getAbstractFactoryForManager(R manager);
        }
        Ответить
    • > Два больших питона пробили потолок на кухне у австралийца
      > Житель Брисбена вернулся домой и заметил огромную дыру в потолке. Практически сразу он обнаружил и виновников разрухи: на полу свернулись два ромбических австралийских питона, сообщает CNN.
      Ответить
      • Доброе утро.
        Ответить
        • Zdarowka. А у меня супер тайфун майсак
          Ответить
          • Ты из Японии?
            Ответить
            • Нет. Но он меня тоже касается.
              https://www.newsvl.ru/vlad/2020/09/02/192736/
              Завтра ветер сам перевернет календарь
              Ответить
    • https://habr.com/ru/news/t/468743/#comment_20670507
      Ответить
    • Пишут, что женщин выдумал Карл Линней
      https://pbs.twimg.com/media/Eg2tQ15WAAMY-Er?format=png&name=900x900

      Мне это не очень понятно: а до него одни мужики только были?

      Пиздец там содомия наверное цвела, хорошо что я тогда не жил еще
      Ответить
    • Что-то проверка ваниша иногда на случайных оффтопах Connection aborted выкидывает.

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

        Напиши мне в #1
        Ответить
      • Ну и похуй. Ты же на 404 проверяешь?
        Ответить
        • Нет, не похуй… А вдруг из-за меня ГК ляжет?

          Да, проверяю.
          def check_vanished(session: requests.Session, post_id: int) -> VanishCheckResult:
              try:
                  r = session.get(f'http://govnokod.ru/{post_id}', params={'format': 'ajax'}, timeout=config.HTTP_TIMEOUT)
              except requests.RequestException:
                  L.exception(f'Exception while checking {post_id}:')
                  return VanishCheckResult.CANNOT_CHECK
              if r.status_code == 200:
                  return VanishCheckResult.NOT_VANISHED
              elif r.status_code == 404:
                  return VanishCheckResult.VANISHED
              else:
                  return VanishCheckResult.CANNOT_CHECK  # 500, etc
          Ответить
          • Зачем тебе столько кода?
            def check_vanished(session, post_id):
                try:
                    r = session.get(f'http://govnokod.ru/{post_id}', params={'format': 'ajax'}, timeout=config.HTTP_TIMEOUT)
                    return r.status_code == 404
                except:
                    L.exception(f'Exception while checking {post_id}:')
                    return False
            Ответить
            • Привычка возвращать подробные ошибки.
              Ответить
      • Ладно, похуй, грузить оффтопы буду раз в 15 секунд, а целиком на ваниш проверять раз в 4 часа. Не то чтобы оффтопы ванишились так часто…
        Ответить
        • Нет, не похуй. Что мы будем 4 часа делать? Хрюкать?
          Ответить
        • Проверять часто имеет смысл только последний оффтоп (от которого зависит перекатывать ли). Остальные можно реже.
          Ответить
          • Точно, спасибо. Завтра перепишем.
            Ответить
    • Блядь, какое же это ваше «Systemd» говно. Беру ман: https://www.freedesktop.org/software/systemd/man/systemd-analyze.html#; читаю:
      Example 11. Show leap days in the near future
      
      $ systemd-analyze calendar --iterations=5 '*-2-29 0:0:0'
        Original form: *-2-29 0:0:0
      Normalized form: *-02-29 00:00:00
          Next elapse: Sat 2020-02-29 00:00:00 UTC
             From now: 11 months 15 days left
             Iter. #2: Thu 2024-02-29 00:00:00 UTC
             From now: 4 years 11 months left
             Iter. #3: Tue 2028-02-29 00:00:00 UTC
             From now: 8 years 11 months left
             Iter. #4: Sun 2032-02-29 00:00:00 UTC
             From now: 12 years 11 months left
             Iter. #5: Fri 2036-02-29 00:00:00 UTC
             From now: 16 years 11 months left

      Проверяю:
      [email protected]:~# systemd-analyze calendar --iterations=5 '*-2-29 0:0:0'
      systemd-analyze: unrecognized option '--iterations=5'


      Охуеть, блядь.
      Ответить
      • так другая версия же небось.

        софт нужно выпускать каждые 2 недели, и менять его итерфейс без обратной совместимости
        Добро пожаловать в 2020, чувак

        Зачем тебе аналлайз? Медленно грузица?

        Именно по этому я за последователюную загрузку как сами знаете где
        Ответить
      • Хм, а почему оно раз в 4 года срабатывает? Звезда же вместо года, должно каждый...
        Ответить
    • https://sun9-60.userapi.com/EayNXFjUmfza-Z1ELPMNNJ2eVz7eOBuENzey1A/pOWkEZK2eUE.jpg
      Ответить
    • https://habr.com/ru/company/postuf/blog/517214/
      Ответить
      • #ДуровДно
        Ответить
      • показать все, что скрытоvanished
        Ответить
      • И сиди потом на бутылке, подбирай пароль на скрытые аккаунты, которых у тебя нет. Тут та же проблема, что с трукриптом. Всё это работает только в цивилизованных странах.
        Ответить
        • Тебя будут пытать с бутылкой в жопе, чтобы ты ввёл пароль на скрытый акк, которого нет.

          Ой, я тоже самое написал.
          Ответить
          • Не, меня будут пытать, чтобы я показал телеграм. Которого у меня нет.
            Ответить
            • Если менты увидят мой смартфон, то всё, что они смогут добыть — это вкладку браузера, в которой на «Говнокоде» залогинен какой-то петух. Они даже не смогут поставить «Телеграм», чтобы заставить меня вводить пароль, потому что я снёс «Google Play» к хуям.
              Ответить
              • Но отпиздят они тебя всё равно
                Ответить
                • С этим примерно как гопники с вопросом: «Закурить не найдётся?» Вне зависимости от наличия у тебя курева, если заходят отпиздить, повод найдут.
                  Ответить
              • > потому что я снёс «Google Play» к хуям.
                Во, уважаю, братишка!
                Ответить
        • Именно.

          Кстати, редкие проблески разума в комментариях малолетние дебилы адепты «Диджитал Резистанс» (это которые копротивлялись блокировке «Телеги» путём пускания из окон бумажных самолётиков) нещадно минусуют:
          zenkov –6
          > А будет вынужден, потому что его пытают, его шантажируют, на него давят.
          
          Если у вас ценная информация, не храните её на смартфоне и не знайте наизусть (в полной мере).
          Всё остальное это игры в шпионов и баловство. Ну и пользоваться проприетарным сервисом беглого
          российского нувориша получающего средства от российской и арабской олигархии, такой себе вариант
          для хранения данных из-за которых вас могут пытать. Максимум подходит договориться где бить мусоров,
          да и то опыт гонконгский показывает, что ну так се, если мусор внутри ячейки.
          Ответить
          • Выход на "митинги" без чёткого представления, что ты там будешь делать и как будешь спасать свою жопу или жопу товарищей в случае чего, в принципе есть игра в шпионов.

            Какие "революции", такие и "революционеры"
            Ответить
            • > игра в шпионов
              Игра в «бутылочку».

              https://ru.wikipedia.org/wiki/Бутылочка
              >>> «Буты́лочка» — игра для преимущественно подростковой или молодёжной компании.
              Ответить
              • Да, на фотке прям преимущественно подростковая или молодёжная компания изображена.
                Ответить
                • Я такое целовать не буду!
                  Ответить
                  • Даже после бутылочки-другой?
                    Ответить
                    • Хорошая причина отказаться от употребления бутылочек в общем-то
                      Ответить
                      • Кстати, а что будет если бутылочка на мужика укажет?
                        Ответить
                        • Не знаю.

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

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

                          >>> на которого укажет горлышко бутылки (или ближайшее лицо противоположного пола)
                          Ответить
          • > не знайте наизусть

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

        Все эти попытки добавить в «Телегу» пятое колесо второе дно выглядят как приделывание нанотинановой дужки к старому китайскому сторублёвому навесному замку.
        Ответить
      • Ага, на клиенте дополнительные учётки будут замаскированы, а Дуров сольёт всю инфу на стороне сервера.
        Ответить
    • #ifdef __CUDACC__
      _NODISCARD _To _Bit_cast(const _From& _Val) noexcept {
          _To _To_obj; // assumes default-init
          _CSTD memcpy(_STD addressof(_To_obj), _STD addressof(_Val), sizeof(_To));
          return _To_obj;
      }
      #else // ^^^ workaround ^^^ / vvv no workaround vvv
      _NODISCARD constexpr _To _Bit_cast(const _From& _Val) noexcept {
          return __builtin_bit_cast(_To, _Val);
      }
      #endif // ^^^ no workaround ^^^

      ^^^ туда ^^^ / vvv сюда vvv
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • >>> Obtains the actual address of the object or function arg, even in presence of overloaded operator&
          Гы-гы.
          Ответить
          • Надо теперь добавить перегрузку которая оверлоадит даже addressof.

            И std::real_address_of чтобы ее обойти.
            Ответить
            • Напомнило «МТС» с его «АОН», «АнтиАОН», «СуперАОН»…
              Ответить
            • в платных версиях компилятора можно сделать такой оператор, который нельзя обойти

              но в обычных версиях нет
              Ответить
          • постой

            крестобляди дали переопределить оператор взятия заще адреса, но потом сделали спец оператор, который всё равно берет адрес, даже если оператор взятия адреса переопределен?

            Стесняюсь спросить, а каков юзкейс переопределения взятья адреса?
            Ответить
            • ДСЛи пилить, наверное. Какой-нибудь пул объектов, перегруженный амперсанд у которых возвращает ID/номер/серию паспорта.
              Ответить
              • ну и звездочку тоже тогда перегрузить? чтобы вместо адреса был номер ячейки в массиве-пуле?

                Думаю я, что надо быть крутым чуваком, что ты такая чудесная абстракция не протекла
                Ответить
                • > ну и звездочку тоже тогда перегрузить? чтобы вместо адреса был номер ячейки в массиве-пуле?
                  Ога. Какой-нибудь
                  class PoolIndex { ... pool; ... index; ... operator*(); };
                  ...
                  class PoolItem { PoolIndex operator&(); };
                  Ответить
                • Ещё можно точку перегрузить и -> перегрузить так, чтобы a->b не было эквивалентно (*a).b
                  Ответить
              • Можно брейнфак запилить на операторах. Как раз вроде унарных хватает.

                & * - ~ ! -- + ++ --
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Ну да, можно. Вон в бусте деление как конкатенацию для путей юзают.
                    Ответить
                    • ужас)
                      Хотя так-то кресты же начали с того, что сдвиг стали юзать как пхание в стрим
                      Ответить
                      • Ну красиво же: home / dir / filename
                        Ответить
                        • А это вообще шикарно:
                          http://govnokod.ru/11549
                          http://govnokod.ru/18440
                          Ответить
                        • ну такое)

                          Я против тупорогих ослоёбов из жабы, где вообще ничего не переопределено (кроме плюса у строки), но я не очень верю в DSLи тоже: чтобы пользовать DSL из языка, нужно оч хорошо знать язык, на котором он написан. Иначе будешь тупить
                          Ответить
                        • > красиво же: home / dir / filename

                          Однозначно лучше операторов сдвига для cin / cout.
                          Ответить
                          • Подтверждаю. Сдвиги для cin/cout — это классический пример того, как какую-то функциональность ввели просто потому, что это было круто, точно так же, как и std::vector<bool>. О том, что на практике это окажется говном несусветным, никто не подумал.
                            Ответить
                            • std::cout << 2 << 3; // какой багор )))
                              Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • Результат ожидаемый, но заставляет немного напрячь головной мозг:
                                  https://ideone.com/sQbVcy

                                  Спойлер: 23 будет.
                                  Ответить
                              • Сишный оператор сдвига сам по себе опасен.

                                Я предпочитаю его в скобки брать. Хватит с меня багров с проёбом приоритетов.

                                К тому же там любезно разложены разные UB.

                                Это тот случай когда простые shr/shl лучше ебаных значков.
                                Ответить
                          • > Однозначно лучше операторов сдвига

                            Это да. Самое противное поведение там для uint8_t аля unsigned char.
                            uint16_t a;
                            uint8_t b;
                            
                            std::cout << a; // это число
                            std::cout << b; // а это мусор
                            Ответить
                            • А что выведет? Символ по UNSKILL-коду?
                              Ответить
                              • Да, символ, по аналогии с char.
                                Ответить
                                • >uint8_t
                                  Подло. С char как-то ждёшь подвоха, а uint8_t совсем подло.
                                  Ответить
                                  • А всё потому что аналог хаскелевого newtype сразу не завезли. Чтобы получался новый тип, а не просто алиас для старого как в typedef/using.
                                    Ответить
                                    • Так это же подляна.

                                      Какое отношение имеет восьмибитный беззнаковый октет uint8_t к минимально адресуемой единице памяти?

                                      Которая может быть и не октетом.

                                      Зачем тогда весь цирк с CHAR_BIT и UCHAR_MAX?
                                      Ответить
                                      • Ну сейчас в крестах можно enum class юзать чтобы сделать свой числовой тип. У него по-умолчанию не будет операторов. И ты сможешь всё настроить сам.

                                        byte из нового стандарта так и запилен, насколько я помню.

                                        Но багры со старыми типами уже никогда не исправить.
                                        Ответить
                                        • enum class похож на паскалевские перечисления: они тоже в число не кастятся и операторов у них нет. К сожалению, в оригинальном «Паскале» не было перегрузки операторов (но в «FPC» уже можно перегрузить), поэтому пользовались перечислениями в особых случаях.
                                          Ответить
                                • Вот в «Паскале» всё сделали правильно: там тип byte — это число, тип char — это символ, преобразования между byte и char нужно выполнять явно (вызывая соответствующие функции).

                                  А в «Си» решили смешать две точки. Зачем? Зачем?
                                  Ответить
                                  • Да. Сишный char и его signed/unsigned версии это злобный ужас.

                                    Даже без этих крестобагров, которые во многом логичное следствие сишных проёбов.
                                    Ответить
                                    • Причём в крестах их три. Независимо от положения переключателя про знаковость чара.
                                      Ответить
                            • показать все, что скрытоvanished
                              Ответить
                              • Потому что «C++», как и «Си», очень хорошо соответствуют духу английского языка. Нужно просто запомнить, что «Sean» читается как «Шон» и не думать об этом.
                                Ответить
                              • Потому что uint8_t это алиас для unsigned char, для него невозможно сделать отдельную перегрузку. А все 3 версии char'а они решили вывести как символ.
                                Ответить
                                • А на «PDP-10», где char девятибитовый (т. е. нонет, а не октет)?

                                  А на DSP, где char может быть 16- или 32-битным?
                                  Ответить
                                  • А на них просто не будет uint8_t. Будет только 18-битный uint_least8_t.
                                    Ответить
                                    • Как всё сложно. Именно поэтому я за «PHP».
                                      Ответить
                                • >Потому что uint8_t это алиас для unsigned char.

                                  Сукапиздецблять.
                                  Именно поэтому я за «printf» и «putchar».
                                  Ответить
                                  • Т. е. сначала хотели сделать по-нормальному, введя uint8_t, int8_t и т. п. Потом с нуля переписывать ядро конпелятора никто не захотел, сделали по-быстрому хуяк-хуяк-в-продакшн, установив алиасы. А потом синюю изоленту и скотч в виде алиасов решили узаконить в стандарте.

                                    Так?
                                    Ответить
                                    • Сначала были ебучие char, short, int, long и long long с implementation-defined длиной.

                                      Потом до чуваков дошло, что в мире уже давным-давно все протоколы с октетами и все байты восьмибитные и каждая либа и прога всё равно дефайнит себе u8 и u16 для удобства.

                                      Вот они и добавили в стандарт uint8_t, uint16_t и т.п. Но не вводить же новые типы, хуйнули их алиасами на старые. А для платформ, где типов такой длины вообще нет или они тормозят, оставили uint_fast8_t и uint_least8_t.
                                      Ответить
                                      • а майки уже успели наплодить много своих хороших типов к тому моменту
                                        Ответить
                                        • Не, все эти DWORD'ы точно такие же алиасы, как и uint32_t. Это не новые типы.
                                          Ответить
                                          • это деталь реализации же)

                                            я имел ввиду, что вот я пишу под пинду

                                            у меня есть int
                                            а есть int32_t
                                            а есть DWORD
                                            и это лулзлово
                                            Ответить
                                            • > деталь реализации

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

                                                Это скомпилируется, но будет идеологически неверно

                                                или верно? или можно считать, что int32 это всегда всегда DWORD?

                                                >отдельные перегрузки функций
                                                в няшной вроде бы и нет перегрузок как таковых
                                                Ответить
                  • Что значит реальный плюс? У твоего типа изначально нет никаких плюсов, ты их добавляешь, а не заменяешь. А для стандартных они не перегружаются.
                    Ответить
                    • Ну вот я добавил плюс. А так же плюсплюс. Я хочу такой оператор, который вызовет "a = a+1" при "a++", даже если я перезагрузил ++.

                      Почему нет такого оператора, если для взятия адреса он есть?
                      Ответить
                      • Консистентность - это не про кресты. Что-то генерится само при определенных условиях. Где-то можно попросить = default. Где-то только руками.
                        Ответить
                        • да, я помню правило 3/5/0 вроде, как раз про "руками" и "консистентность"
                          Ответить
                • Готово!
                  http://govnokod.ru/26910
                  Ответить
              • Кстати я сегодня впервые узнал, что унарный плюс тоже перегружается.
                Ответить
                • C++ это такой язык, в котором программист с семнадцатилетним (или сколько там у тебя?) опытом писания на С++ может сказать: "Кстати я сегодня впервые узнал"
                  Ответить
        • > КУДА
          https://i.imgur.com/6kx2jGL.png
          Ответить
    • rm -f * может неправильно работать, если попадутся файлы, имена которых содержат пробелы. Нужно так: rm -f '*'

      Прыщебляди соснули.
      Ответить
      • А ещё поскольку дикие карты разворачивает оболочка, можно выйти за лимит длины строки. Поэтому нужно так:
        for pituh in *; do rm -f '$pituh'; done
        Ответить
        • find / -name * -delete
          Ответить
        • https://pastebin.com/7CDHG6p6
          ЧЯДНТ?

          кстати, поставил центос8 потестить в вагрант
          iptables там есть, в режиме компат с nftables
          а вот докер-це хуй там плавал, ничего не пересобрали для восьмерки
          Ответить
          • >ничего не пересобрали для восьмерки
            Это фирменная фича центности: из коробки там есть только то, что делает RH. А RH делает очень мало чего.
            Все остальное делают добровольцы, а их мало, и они ленивые

            Я месяца два ждал пока они opendkim соберут под восьмерку, помню
            Ответить
            • да нет
              они там пустили слух, что мы работаем только с iptables, а в рх8 другой питух, никто докер переписывать не будет, поэтому ждите ебилдов

              как я понимаю, ебилды давно в центос завезли в виде возможности управлять нфтаблес через старый интерфейс иптаблес
              ну или они с иптаблес работали прямо сишным апи (модуля) ядра, и оно, конечно, пошло по пизде, и тогда они правы, что до сих пор докер соснулей для рх8/центос8
              Ответить
            • > opendkim
              несколько лет назад натрахался с почтовиком
              заебался
              постфикс должен сдохнуть
              жду когда поттеринг сделает новый почтовик и встроит его в системд
              Ответить
              • алиасы пайпы файлы sql-запросы dovecot семь стейджей а че вам не нравится-то?!?!??!
                Ответить
                • По сранению с сендмайловским трешем в конфигах это все фигня
                  Ответить
                  • Ещё прикольно, когда нужно раздать почтовые ящики, да так, чтобы клиенты могли пользоваться своими ящиками через SMTP и IMAP/POP3, и нужно, чтобы у «Постфикса» и у «Голубятни» была общая база ящиков, а на машине старая версия того и другого, поэтому методы из нового хелпа не работают.
                    Ответить
                    • И, конечно, на все вопросы типа "а давайте мы это засунем в БД, чтобы не срать в фс" в интернете сплошное неудомение "а нахуя это вам?!"
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • в ту же файловую систему, в обход нее или вообще по сети на другой хост. а не в папки виртуальных юзеров, которые существуют только для почтовика и не должны чем-либо напоминать настоящих пользователей на хосте
                          Ответить
                          • Файловую систему точно так же можно прикрутить по сети.
                            Реальных пользователей иметь так же не обязательно.

                            Зачем хранить почту в базе? Зачем вообще реляционная база, если ты не собираешься делать джойны и селекты по условиям?
                            Ответить
                            • чтобы ее целиком энкриптить
                              чтобы легко искать по каким-то специфическим запросам
                              чтобы легко удалять письма старше Х
                              Ответить
                              • >чтобы ее целиком энкриптить
                                Что мешает энкриптить файловую систему?

                                >чтобы легко искать по каким-то специфическим запросам
                                Каким например?

                                >чтобы легко удалять письма старше Х
                                Странный запрос (в imap вроде бы такой команды нет), но вполне реализуемый в Maildir, если уметь пользоваться командой find
                                Ответить
                                • Что мешает хранить обычные данные не в базе, а в жсон-файлах, например?

                                  > Каким например?

                                  full-text / fuzzy

                                  > но вполне реализуемый в Maildir, если уметь пользоваться командой find

                                  буханка и троллейбус
                                  Ответить
                                  • > Что мешает хранить обычные данные не в базе, а в жсон-файлах, например?

                                    Я мешаю. Тем что следующего мудака, который подобное реализует, найду и покараю своим волшебным жезлом во имя луны.
                                    Ответить
                                  • >Что мешает хранить обычные данные не в базе, а в жсон-файлах, например?
                                    1. отсутствтие транзакционности
                                    2. отсутствие слежения за консистентностью
                                    3. отсутвие индексов, оптимизирующих поиск
                                    4. отсутвие поддержки запросов
                                    5. огромный оверхед для хранения (json текстовый формат с кучей мусора)

                                    >full-text / fuzzy
                                    grep более лучший full-text. А fuzzy база всё равно делает не очень хорошо.
                                    Если реально хочется делать fuzzy по письмам (что странно, так как такого API в IMAP нет) то наверное лучше брать какой-нить
                                    Elasticsearch / Solr /. Sphinx

                                    >буханка и троллейбус
                                    Ты про твой же собственный запрос "легко удалять письма старше Х"?
                                    Ну ок
                                    Ответить
                                    • > 1. отсутствтие транзакционности
                                      > 2. отсутствие слежения за консистентностью
                                      > 3. отсутвие индексов, оптимизирующих поиск
                                      > 4. отсутвие поддержки запросов
                                      > 5. огромный оверхед для хранения (json текстовый формат с кучей мусора)

                                      вот ты и написал зачем тут нужна база

                                      > то наверное лучше брать какой-нить Elasticsearch / Solr /. Sphinx
                                      мы и не говорили какое именно хранилище мы берем. а эластиком я по работе занимаюсь. так-то!

                                      > Ты про твой же собственный запрос "легко удалять письма старше Х"?

                                      нет, буханка и троллейбус - это когда требование Х выполняется через Y только по причине личной привязанности к Y
                                      Ответить
                                      • >вот ты и написал зачем тут нужна база
                                        ни один из этих пунктов не актуален для почтового сервера

                                        > 1. отсутствтие транзакционности
                                        не существует задачи "создать письмо B только если создалось письмо A"

                                        > 2. отсутствие слежения за консистентностью
                                        не существует задачи "письмо A должно иметь как минимум два письма B"

                                        > 3. отсутвие индексов, оптимизирующих поиск
                                        не существует задачи "выбрать все письма от пупкина" потому что ее нет в протоколах почты, хотя такая задача могла бы быть, да

                                        > 4. отсутвие поддержки запросов
                                        не существует задачи "выбрать все письма по запросу" потому что ее нет в протоколах почты, хотя такая задача могла бы быть, да

                                        И того, смысл имеют только пункты 3 и 4, и их легко реализовать Elasticsearch / Solr /. Sphinx

                                        >мы и не говорили какое именно хранилище мы берем.
                                        Elasticsearch / Solr /. Sphinx это не хранилища. Индекс делается поверх существующего хранилища

                                        > это когда требование Х выполняется через Y только по причине личной привязанности к Y

                                        То есть когда люди хранят в mysql письма, фотографии и файлы настроек по причине личной привязанности к субд.
                                        СУБД лучше чем файловая система. Чем лучше? Чем файловая система
                                        Ответить
                                        • > не существует задачи "создать письмо B только если создалось письмо A"
                                          > 2. отсутствие слежения за консистентностью

                                          существует задача "письмо А не может быть записано наполовину". это А в эйсиде.
                                          существует задача "письмо должно быть записано всеми мультипартами"

                                          > не существует задачи "выбрать все письма от пупкина" потому что ее нет в протоколах почты, хотя такая задача могла бы быть, да

                                          выше мы уже говорили про полнотекст

                                          > Elasticsearch / Solr /. Sphinx это не хранилища. Индекс делается поверх существующего хранилища
                                          чего блят? elasticsearch это поисковый движок, который можно настроить на хранение только индекса, но этого никто никогда не делает, solr туда же. это Lucene является стендэлон-библиотекой, которую вертишь как хочешь.
                                          Ответить
                                          • >существует задача "письмо А не может быть записано наполовину".
                                            С этой задачей отлично справляется MTA с файловой системой. Он не имеет права сообщать о принятии письма, покуда он не сохранил его в надежное место. А когда он его сохранил и сделал fsync, то оно уже не потеряется (кроме случаев хардварного сбоя, но он не спасет и субд).

                                            >существует задача "письмо должно быть записано всеми мультипартами"
                                            Мультипартами чего?

                                            >выше мы уже говорили про полнотекст
                                            И я уже выше сказал, что устанавливать субд ради полнотекстового поиска -- не правильно. Для этого есть специальные инструменты.
                                            Кроме того, задачи полнотекстового поиска на сервере почты не существует так как ее нету в протоколе IMAP, но если уж ее делать, то явно не через базу.

                                            > но этого никто никогда не делает,
                                            ну да
                                            https://stackoverflow.com/questions/29841348/how-reliable-is-elasticsearch-as-a-primary-datastore-against-factors-like-write
                                            https://stackoverflow.com/questions/4258593/using-solr-search-index-as-a-database-is-this-wrong
                                            Ответить
                                            • как твои ссылки связаны с "_source": {enabled: false}?
                                              ты несешь хуйню про эластиксерч, я говорю тебе, что это явная хуйня, ты начинаешь кидаться какими-то ссылками, где ни разу не сказано, что "эластиксерч краулит какую-то другую хранилку"
                                              Ответить
                                              • Он о том, что эластик не юзают как primary storage. Ну разве что какие-нибудь логи в него закинуть, которые не жалко проебать.
                                                Ответить
                                                • его не юзают как праймари сторедж не из-за проблем с надежностью - вспомните монгу - а потому что структуру документа надо переебать так, чтчо на исходные данные он уже не похож

                                                  давайте вы не будете рассказывать о том, с чем не имели дело
                                                  Ответить
                                              • показать все, что скрытоvanished
                                                Ответить
                                                • > попробуй их прочитать

                                                  > чего блят? elasticsearch это поисковый движок, который можно настроить на хранение только индекса, но этого никто никогда не делает

                                                  ну ребят, ну вы чего

                                                  > если нужна надёжность. А в случае с почтой она нужна.

                                                  вы там топите за хуевое складирование файлов прямо на фс без всяких wal, и говорите что эластик ненадежен?

                                                  предлагаете в лучшем случае однонодовую рсубд, и эластик опять ненадежен?

                                                  давайте вы мне докажете, что классический мастер-слейв отработает лучше временного моргания мастера в эластике, тогда и поговорим.
                                                  поговорим о том, что в эластике могут расходиться версии одного документа, а меил с одним и теи же айди вы никогда не переписываете
                                                  Ответить
                                                  • показать все, что скрытоvanished
                                                    Ответить
                                                    • > elasticsearch это поисковый движок, который можно настроить на хранение только индекса [без хранения исходника документа], но этого никто никогда не делает
                                                      Ответить
                                                    • > Напоминаю, что мы говорим о хранении писем в почтовом ящике почтового сервера с доступом по IMAP.

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

                                grep, юникс-вей во все поля.
                                Ответить
                            • > Зачем вообще реляционная база

                              Ну базы не только реляционные бывают. А файлуху использовать для таких целей — очень, очень плохая идея. Реплицировать/бэкапить кучу мелких файлов — это страдание. На прошлой работе кто-то этого не знал, и нам как-то пришлось срочно 8TB мелкой файлушни из DC в AWS перетаскивать. Это был анекдот тот ещё: rsync тупо список файлов строил бы неделю, пришлось делать dd + nc через VPN, лол.
                              Ответить
                              • Объектную базу использовать еще более странно, ведь у нас объекты не образуют какой-то там граф, не? У нас просто куча писем в папке

                                А разве база умеет более лучше делать diff, чем rsync? Базу можно конечно целиком переписать, но и файлы можно
                                Ответить
                                • Базе не нужно делать дифф, базе нужно делать репликацию и бэкап
                                  Ответить
                                  • если речь идет о потоковой репликации то ок, а бекап точно так же делается у фс
                                    Ответить
                                    • если у меня одна партиция под /var, то мне всю ее бэкапить одним снепшотом ради писем?
                                      Ответить
                                      • Ну сделай отдельную. LVM же у всех сейчас, проблем с ресайзами и созданием патрициев больше нету, не?
                                        Ответить
                                        • И всё ради закрывания очей перед возможностью использования централизованного хранилища
                                          Ответить
                                          • Всё ради соблюдения традиций. Вдруг твой локальный юзер захочет почитать свою почту локальным клиентом через терминал?
                                            Ответить
                                            • Кстати: posfix и sendmail передают локальную почту локал деливери агенту. Ты можешь написать свой агент, и ловко сохранять почту в Oracle. Никто тебе не мешает.
                                              Ответить
                                          • З.Ы. Хочешь базу - ставь MS Exchange. Там вроде база.
                                            Ответить
                                            • да, там Jet (bluejet или как-то так). Но там не только почта, там овердохуя всего. И кстати реплики из коробки.

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

                                      Нихуя.

                                      Горячий бекап базы всгеда имеет консистентное состояние - все письма целые, все индексы актуальные. Либо письмо есть либо его нет.

                                      Горячий бекап файлухи - это хуйня с полубитыми файлами.
                                      Ответить
                                      • показать все, что скрытоvanished
                                        Ответить
                                        • > консистенты

                                          Что будет, если у меня файл открыт на запись в момент снепшота и я половину уже перетёр?

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

                                              Пруф? Особенно про LVM. Про правильно настроенный ZFS я готов поверить на слово.
                                              Ответить
                                            • > Если ты не закрыл файл, то вероятно у тебя будет старая версия.

                                              нет

                                              > LVM snapshots консистенты

                                              нет

                                              Короче, с нормальной базой у тебя будет write-ahead лог, репликация, пирфоманс и снапшоты. С файлами — закорапченные данные, отсутствие fault-tolerance и геморрой. (Если что, в K. я пилил движок БД, и один из легаси бекендов был на файлах, и это был пиздец)
                                              Ответить
                                          • ext для мелких файлов — это чтоб наверняка?
                                            Ответить
                                            • > это чтоб наверняка

                                              Ну да. Придёт троян удалять файлы и задумается на месяц-другой. А там его уже и задетектят.
                                              Ответить
                                        • > индексы в Maildir

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

                                          И эти индексы придётся резетить после восстановления бекапа. Ибо они не идут в одной транзакции с записью файла в майлдир.
                                          Ответить
                                        • > LVM snapshots консистенты

                                          Консистентны с точки зрения чего?
                                          Ответить
                                          • показать все, что скрытоvanished
                                            Ответить
                                            • > низкоуровневая консистентность

                                              Дык у zfs она точно такая же, хоть и чуть лучше. Если нет поддержки со стороны софта. А для почтовиков из говна и палок она вряд ли есть.

                                              Внутри одного файла может всё и норм будет, но два разных файла сами в транзакцию не объединятся. Будешь индексы перестраивать как в ёбаном фокспро.
                                              Ответить
                              • Оффтоп: не хочешь доказать, что существует прога на брейнфаке, которая выводит "hello, world"?
                                Ответить
                                • Доказать что такая прога существует — легко (но лень, может потом). Написать универсальный интерпретатор, который любую программу выполняет — в теории можно, но геморно.
                                  Ответить
                                  • Ну хотя да, плюса и точки достаточно. Доказываем, что с помощью плюса можно получить любой символ. И юзаем это для построения фразы.
                                    Ответить
                          • Ну так исторически сложилось, что почтовик доставляет письма для локальных юзеров майнфрейма.
                            Ответить
              • показать все, что скрытоvanished
                Ответить
                • а что там у тебя не заработало без дбас?
                  Ответить
                  • А что там работает без дбас?
                    Ответить
                    • Мы системд даже в докере поднимали, там много что работает без дбас
                      Ответить
                      • The usage of D-Bus is steadily expanding beyond the initial scope of desktop environments to cover an increasing amount of system services. For instance, NetworkManager network daemon, BlueZ bluetooth stack and Pulseaudio sound server use D-Bus to provide part or all of its services. systemd uses the D-Bus wire protocol for communication between systemctl and systemd, and is also promoting traditional system daemons to D-Bus services, such as logind.[25] Another heavy user of D-Bus is Polkit, whose policy authority daemon is implemented as a service connected to the system bus
                        Ответить
                      • не понимаю. переведите на «hardbass».
                        Ответить
                      • > системд в докере

                        Просто как супервизор для нескольких сервисов в одном контейнере?
                        Ответить
                        • моя использовать такую хуйню на работе https://github.com/phusion/baseimage-docker
                          правда сильно пропатченную

                          Там не systemd конечно, но супервизор какой-то есть (без него будет pid 1 problem: некому похоронить будет зомби).

                          У нас толстый контейнер, потому что там gunicorn, nginx и cron одновременно (еще был syslog). Такой багор ваще
                          Ответить
                        • Да. Ибо докер сам по себе - Айн Анвендунг, Айн Фюгрер
                          Ответить
                          • А systemctl работает в таком режиме? Или только весь контейнер глушить?
                            Ответить
                            • Системд? Его и контролирует докер. А системктл нахуя изнутри контейнера запускать?
                              Ответить
                              • Х.з., вдруг для отладки конкретный сервис ребутнуть захочется?
                                Ответить
                                • exec -ti
                                  ps aux
                                  kill -9 <pid>

                                  А в юнитфайле написать, что рестартить, если гуф
                                  Ответить
                  • так в systemd везде dbus же
                    systemctl разве не через него сервер ищет?
                    И PulseAudio вроде, и pkexec
                    Ответить
        • там вроде с IFS еще ебаться надо
          Ответить
    • показать все, что скрытоvanished
      Ответить
    • Перекат!

      https://govnokod.ru/26916
      https://govnokod.xyz/_26916/
      Ответить

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