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

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    IT Оффтоп #47
    
    
    #1: https://govnokod.ru/18142 https://govnokod.xyz/_18142
    #2: https://govnokod.ru/18378 https://govnokod.xyz/_18378
    #3: https://govnokod.ru/19667 https://govnokod.xyz/_19667
    #4: https://govnokod.ru/21160 https://govnokod.xyz/_21160
    #5: https://govnokod.ru/21772 https://govnokod.xyz/_21772
    #6: (vanished) https://govnokod.xyz/_24063
    #7: https://govnokod.ru/24538 https://govnokod.xyz/_24538
    #8: (vanished) https://govnokod.xyz/_24815
    #9: https://govnokod.ru/24867 https://govnokod.xyz/_24867
    #10: https://govnokod.ru/25328 https://govnokod.xyz/_25328	
    #11: (vanished) https://govnokod.xyz/_25436
    #12: (vanished) https://govnokod.xyz/_25471
    #13: (vanished) https://govnokod.xyz/_25590
    #14: https://govnokod.ru/25684 https://govnokod.xyz/_25684
    #15: https://govnokod.ru/25694 https://govnokod.xyz/_25694

    #16: https://govnokod.ru/25725 https://govnokod.xyz/_25725
    #17: https://govnokod.ru/25731 https://govnokod.xyz/_25731
    #18: https://govnokod.ru/25762 https://govnokod.xyz/_25762
    #19: https://govnokod.ru/25767 https://govnokod.xyz/_25767
    #20: https://govnokod.ru/25776 https://govnokod.xyz/_25776
    #21: https://govnokod.ru/25798 https://govnokod.xyz/_25798
    #22: https://govnokod.ru/25811 https://govnokod.xyz/_25811
    #23: https://govnokod.ru/25863 https://govnokod.xyz/_25863
    #24: https://govnokod.ru/25941 https://govnokod.xyz/_25941
    #25: https://govnokod.ru/26026 https://govnokod.xyz/_26026
    #26: https://govnokod.ru/26050 https://govnokod.xyz/_26050
    #27: https://govnokod.ru/26340 https://govnokod.xyz/_26340
    #28: https://govnokod.ru/26372 https://govnokod.xyz/_26372
    #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

    Запостил: bagrinho, 19 Мая 2020

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

    • Добрый день!
      Ответить
      • Добрый вечер
        Ответить
        • Привет с большого бодуна.
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • А Нягани не было?
              Ответить
              • Алипханов Батырхан Умарович — российский спортсмен, двукратный победитель первенства мира по универсальному бою (2013—2014) победитель первенств России по разным видам спорта (рукопашный бой, универсальный бой, самбо).

                И команда Кефир

                Очень многие шутки созданы на игре слов и каламбурах: в частности, в первой игре в Высшей Лиге КВН 2010 года звучало:
                — Моня, ты где баян взял?
                — Забрал у Юрия Лозы.
                — Правильно, на фига Лозе баян.
                Ответить
            • Рига и Волгоград, Тында и Ашхабад.
              Ответить
              • Московский байт
                Или нибл
                как-то так там было
                Ответить
                • Октет.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • «Квартет» — латинское слово, «тетрада» — греческое.

                      «Шестнадцать» по-латыни будет «седецим»:
                      https://en.wiktionary.org/wiki/sedecim

                      По-гречески будет «декаэкси»:
                      https://en.wiktionary.org/wiki/δεκαέξι

                      Значит, седецимет или декаэксада.
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • Погуглил слово «декаэксада» — ни одного сайта на русском в результатах, везде только «δεκαεξάδα» на греческих сайтах.

                          Мы будем первыми, кто внедрит этот термин в русском.

                          P.S. Даже «декагексада», «decahexada», «decaexada» не гуглятся.
                          Ответить
                          • А не эксадекада? Неспроста же hexadecimal.
                            Ответить
                            • Тоже пока не гуглится. Скоро все результаты поиска редких числительных будут вести на «Говнокод».

                              Действительно, есть же термины duodecimal, tredecimal, tetradecimal, pentadecimal.
                              Ответить
                    • Интересно, что в новогреческом «шесть» будет «экси», в латыни «шесть» будет «секс» (да, именно так).

                      Откуда тогда взяли «хекс»? Из древнегреческого?
                      Ответить
                • Кстати, помнишь NIBBLES.BAS?

                  Игрушка рисовала змейку псевдографикой. Разрешение по вертикали было в два раза больше, чем количество строк, потому что игрушка использовала символы ▀ и ▄.
                  Ответить
          • показать все, что скрытоvanished
            Ответить
    • ахаха
      https://twitter.com/mayaposch/status/1262782546213036034

      самка макаки не знает, что такое вывод типов.
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • >нам четверть века рассказывала как пиздато жить без статической типизации, как это гибко и мощно
            >а теперь серит в штаны завозя pep-484 в питона и пиля тайпскрипт.

            Дно днищенское.
            В то время как статически типизированные языки научились выводить типы сами, избавляя программиста от нужны их писать.
            Скриптухи опять решили сделать всё наоборот:
            def greeting(name: str) -> str:
                return 'Hello ' + name
            
            from typing import Callable
            
            def feeder(get_next_item: Callable[[], str]) -> None:
                # Body
            
            def async_query(on_success: Callable[[int], None],
                            on_error: Callable[[int, Exception], None]) -> None:
                # Body

            https://www.python.org/dev/peps/pep-0483/
            https://www.python.org/dev/peps/pep-0484/


            Ответить
            • Нет, ну чем эти все Callable, Exception, Iterable, LinkedList, Optional отличаются от явы?
              Разве что нет фигурных операторных скобок и женерики квадратные.

              T = TypeVar('T')
              
              class LinkedList(Sized, Generic[T]):
                  ...
              
              K = TypeVar('K')
              V = TypeVar('V')
              
              class MyMapping(Iterable[Tuple[K, V]],
                              Container[Tuple[K, V]],
                              Generic[K, V]):
              
              class MyIterable(Iterable):  # Same as Iterable[Any]
              Ответить
              • > Нет, ну чем эти все Callable, Exception, Iterable, LinkedList отличаются от явы?
                Необязательностью. Можно писать, можно не писать, можно только в критических местах писать. Можно даже игнорировать и передавать что-нибудь другое, всё равно в рантайме проверок нет.
                Ответить
                • Вот это годно:
                  Union[t1, t2, ...]. Types that are subtype of at least one of t1 etc. are subtypes of this.
                  
                      Unions whose components are all subtypes of t1 etc. are subtypes of this. Example: Union[int, str] is a subtype of Union[int, float, str].

                  А тут пока слабенько:
                  We might add:
                      Intersection[t1, t2, ...]. Types that are subtype of each of t1, etc are subtypes of this. (Compare to Union, which has at least one instead of each in its definition.)
                          The order of the arguments doesn't matter. Nested intersections are flattened, e.g. Intersection[int, Intersection[float, str]] == Intersection[int, float, str].
                  Ответить
                • Сколько не выделяй памяти, сколько не хитри с аппликатурой, а Москва таки не резиновая.
                  Ответить
            • Ну ты слишком сурово к этому относишься. Крестам, вон, сколько лет понадобилось, чтобы автовывод добавить? Больше двух десятков? Вот и в «Python»/«TS», глядишь, через N годиков завезут. Им же приходится с нуля это всё придумывать!
              Ответить
              • Так понятно, что идеальный язык должен выглядеть как скриптуха, но статически отлавливать ошибки.

                >глядишь, через N годиков завезут
                Смеюсь:
                If type hints become successful we may well decide to add new syntax in the future
                to declare the type for variables, for example var age: int = 42.

                Зачем? Зачем?
                Тут люди десяток лет боролись чтоб никогда НЕ ПИСАТЬ этот int. А они его завозят.

                Я о том, что скриптухе проще. Она выглядит гораздо ближе к идеалу.
                Делайте автовывод типов и проверки, НЕ МЕНЯЯ язык.
                Ответить
                • > declare the type for variables
                  Дык оно уже есть и работает.
                  Ответить
                  • var нету.
                    Я же говорю, все языки идут к старому-доброму яваскрипту (ещё первым его версиям).
                    Ответить
                    • В «ECMAScript 4» была добавлена статическая типизация. Именно так:
                      var age: int = 42

                      Реализовано было только в экспериментальных сборках некоторых веб-браузеров. Не выжило, в ES5 этот синтаксис отменили.

                      Выжило в «ActionScript». Но «ActionScript» уже сам полутруп, потому что с «Флеша» все уходят.
                      Ответить
                      • Идеальный язык, как по мне, должен быть похожим на бейсик и жс. Иметь при этом примерно такой вид:
                        a = 42;
                        С одним существенным отличием.
                        a по умолчанию константа. То есть внутри это интепретируется так:
                        const a:int = 42;
                        А ещё лучше конечно так int[42:42]
                        Если хочешь переменную — пиши var.
                        Ответить
            • Потому, что все языки идут к одному суперязыку, где будут все возможные фичи.
              Я уже давно говорил, что надо делать одну платформу, а под неё 100500 языков, которые различаютсся только синтаксисом. Чтоб такую питушню вроде явности указания типов и вывода только флажком коньпелятора менять. Тогда сразу реализовать суперязык и ничего заново не делать.
              Ответить
              • >Потому, что все языки идут к одному суперязыку
                И это яваскрипт.

                >Я уже давно говорил, что надо делать одну платформу
                А я уже давно говорил, что в какой-то момент некое универсальное подмножество js можно будет свободно скомпилировать в любом статическом языке от C#, Java заканчивая С++ (#define var auto).
                Ответить
              • >Потому, что все языки идут к одному суперязыку
                И это LLVM с десятками фронтендов с возможностью генерить ARM, x86, x86-64, PowerPC, MIPS, SPARC, RISC-V и вроде как даже web asm.
                Ответить
            • > В то время как статически типизированные языки научились выводить типы сами

              - иронично, что именно сегодня я снова встретился с "The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions"
              Ответить
        • >https://github.com/JetBrains/intellij-community/blob/master/platform/util/src/com/intellij/openapi/util/Disposer.java

          Ахахаха. Им что Disposable было малость?

          >https://github.com/JetBrains/intellij-community/blob/master/platform/util/src/com/intellij/openapi/Disposable.java
          https://govnokod.ru/26439#comment528166
          Ответить
          • Гэцухи такие смешные. Так героически бороться с гц — это надо иметь сильную волю и железные нервы!
            Ответить
      • >что и граф ссылок надо строить вручную.
        >завёз все эти use / with / Closeable.
        А раньше анскильные сектанты и прочая гц-мразь постоянна говорила что malloc/free это сложно дохуя.

        Вместо этого нам предлагают вполне "простой" идиоматичный код:
        Resource r=null;
        try{
            r =  initPituz();
            r.doSomething();
        }catch(PituzException pe){
          ...
        }finally{
           try { r.close() ;}catch(Exception unused) {}
        }


        >Если еще один сраный питуз начнет вам рассказывать, что "гарбич каллектор это круто"
        Просто отбросы сектантские.
        Ответить
      • показать все, что скрытоvanished
        Ответить
      • > в отличие от счетчика сцылок тут можно три раза сделать register, и за это ничего не будет.
        > throws com.intellij.util.IncorrectOperationExce ption If child has been registered with parent before;

        ??

        > retain/release в ObjC помните?
        - retain/release имеет к gc косвенное отношение.
        Ответить
        • А, гест8 наверное про то, что не будет потенциальных утечек.
          Ответить
        • Но со счётчиком ссылок ты тупо не можешь лишний раз позвать декремент. Потому что в нормальных реализациях он юзеру недоступен. И такой проблемы вообще нет.
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • В нормальных реализациях, где ты его юзаешь только в извращённых ситуациях. А не где его руками на каждый чих звать надо как в сишке.
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Да. Там конечно тоже можно явно отстегнуть или пристегнуть объект. Но это очень редко юзается на практике и все такие места легко найти и прочитать. А с самим счётчиком вообще ничего не сделать.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • > умный указатель сам дёргает постоянно

                      Ну не хочешь дёргать инкремент лишний раз - перемещай или свопай указатель вместо копирования. На возврате из функции это автоматом работает.
                      Ответить
                    • Да, с ARC не только release нельзя позвать руками, но и retain :)

                      Я, правда, всё равно не понял, как это, когда увеличить руками можно, а уменьшить нельзя.
                      Ответить
    • Пригорело с вимоблядей.
      https://stackoverflow.com/questions/1620018/copy-all-the-lines-to-clipboard

      Ни один сука ответ не сработал.
      Ответить
    • http://okante.narod.ru/D/
      Ответить
      • Посему можно вывести ещё одно достоинство женственности в языках программирования: возведения процесса компиляции в ранг акта. Общеизвестно, что программист всегда хочет компилировать, однако не всегда может сделать это успешно (например он не написал ещё исходный код). Компилятор же всегда может скомпилировать, при условии готовности программиста. Отсюда и злоупотребления, описанные в предыдущем параграфе. Женственный компилятор уж конечно будет компилировать не только когда может (может то он всегда), но тогда и только тогда, когда хочет.


        http://okante.narod.ru/D/lwmn.html
        Ответить
      • § 1. Описание проблемы

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

        Иногда программисты пишут 0xBAADF00D или 0xDEADFEAD. Но это в шутку, к тому же английских букв не хватает. Поэтому нужна более лучшая система.

        Также, изучая языки программирования, я заметил, что в некоторых из них есть некие константы. Тo есть когда слово ассоциируют с каким-нибудь числом. Я подумал, что это чвляется избыточностью и придумал лучшее решение.

        § 2. Решение проблемы

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

        Итак вот разработанная система:

        Основание системы: 43

        http://okante.narod.ru/D/kb/kb000002.html
        Ответить
      • Для классификации языков программирования применяется понятие уровень. Если этот уровень высок, то по идее программист должен расходовать меньше времени на процесс программирования. В языке высокого уровня программист работает с более высокими категориями, поэтому меньше нажимает кнопок чем программист языка низкого уровня. Идея сама по себе хороша. Она, по идее, позволяет избежать таких стресстовых болезней как артрит.

        [...]

        Оказывается для того, чтобы программировать на высокоуровневом языке необходимо очень много его учить. А программист для этого не приспособлен. Он хорошо считает и вообще любит математику, и, как правило, не любит учить. Это ведет к следующему извращению — извращению иерархической лестницы. Программист программирующий программы (homo programis) уже никому не нужен, а нужен программист выучивший и знающий язык высокого уровня (homo kakus). Поэтому программист учащий становится выше программиста программирующего. Воникает диссонанс, а от диссонанса усталость (причем у обоих). Усталость ведет к стрессу.

        http://okante.narod.ru/D/high.html

        homo makakus
        Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Лучше по 8 пальцев отрастить. Там надо-то пару участков в ДНК поправить.
        Ответить
    • показать все, что скрытоvanished
      Ответить
      • А надо? Обычно по разъёму и так понятно. А если у тебя xp и дров на xhci нету, то эти порты обычно тупо не работают*.

        * кроме некоторых материнок, где разрабы упоролись и костыль для любителей некрофилии запилили
        Ответить
    • показать все, что скрытоvanished
      Ответить
    • https://habr.com/ru/post/503366/
      >>> Почему тире становится вопросом? Или проблемы с кодированием данных на SQL
      >>> Загружается товар с таким названием «ABM3C‐25‐D4Y‐T».
      >>> Получаем в списке после загрузки «ABM3C?25?D4Y?T».
      >>> По привычке проверила параметры сортировки у самой базы данных, всё хорошо — Cyrillic_General_CI_AS, как и рекомендовано при установке.
      >>> Ответ разработчика сначала сильно удивил: «Надо использовать тип данных Nvarchar, а у Вас видимо используется Varchar». Запись ведется в поле с типом данных nvarchar (ставится по умолчанию при создании поля в конфигураторе).
      >>> Получила совет — перед первой одинарной кавычкой поставить N.

      Шёл 2020-й год, люди продолжали ебаться с кодировками…
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Настройка через пельменную окружения. А в «autoexec.bat» и в «config.sys» ничего добавлять не нужно?
        Ответить
    • показать все, что скрытоvanished
      Ответить
    • У вас бывает, что когда ПМ спрашивает оценку на исправление баги, то отвечаете: исправить - 4-6 часов, подмандить - 30 мин?
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Ну х.з., у меня копропротивная версия 10-ки дома всегда вежливо спрашивает перед перезагрузкой и ждет сколько потребуется (хоть 3 дня). Но если у компа включено питание, то может включиться ночью и обновиться, похерив спящий режим (обычно это на работе так, вероятно так админ настроил).
        Ответить
      • показать все, что скрытоvanished
        Ответить
      • Люто, бешено плюсую. Парень с ботами, сделай этому комментарию +1000.
        Похоже, винда сделана для апдейтов. Но не только. Если апдейты выключить, винда всё равно начинает что-то ресурсозатратное делать, когда пользователь отходит от компьютера.
        Ответить
      • Самая жопа с ноутбуками — у них в меню «BIOS/UEFI Setup» часто нет доступа к таймерам. А Винда, сука такая, заводит эти таймеры, чтобы в четыре часа ночи проверить обновления или выполнить какие-нибудь сервисные операции, даже если в планировщике нет ни одного задания. Были случаи, когда у людей ноутбуки перегревались в закрытой сумке из-за того, что включались в неподходящее время.

        Есть ли способ отключения этих таймеров? Винда как-то умеет их включать, значит, программный доступ к ним есть. Или единственный надёжный способ — это выдёргивать стационарный комп из розетки, а у ноутбука выдёргивать аккумулятор?
        Ответить
        • Их в планировщике задач вроде видно. Что-то в духе "пробуждать пеку для выполнения задачи".
          Ответить
          • Нет. Я удалил все задачи у планировщика, потом остановил и запретил службу «Schedule» (Start=4). В схеме питания тоже запретил пробуждать. Всё равно пробуждается. Команда «powercfg -lastwake» выдаёт причину последнего пробуждения «[0] 0» (или типа того).

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

              У меня была абсолютно такая же проблема — комп просыпался в три-четыре утра. Вызывалась она действительно задачей из планировщика (кажется, что-то из «Microsoft/Windows/UpdateOrchestrator»). Что характерно, после удаления эта задача возвращалась на место как другими задачами (что-то связанное с «восстановлением службы обновлений» или какой-то такой хуйнёй), так и службой (опять же, что-то связанное с восстановлением).
              Ответить
              • Точно, и скрытые задачи удалил, и все job-файлы в C:\Windows\Tasks грохнул, и после всего даже службу планировщика остановил, и автоматический поиск обновлений отключил, и в схеме питания всё поотключал.

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

                    Это не через задачи работает. Какой-то процесс взводит аппаратные таймеры и, вероятно, что-то добавляет в однократный автозапуск (типа RunOnce).

                    Я не знаю, как поймать виновника, потому что не знаю, какой драйвер может взводить аппаратные таймеры и через какие функции API это делается.

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

                      И вот ещё: https://docs.microsoft.com/en-us/windows/win32/power/system-wake-up-events.
                      Ответить
          • показать все, что скрытоvanished
            Ответить
        • показать все, что скрытоvanished
          Ответить
      • Напомню баян:
        https://twitter.com/virocracy/status/1076000118468423680
        Ответить
    • показать все, что скрытоvanished
      Ответить
      • Какой багор )))
        Ответить
      • Интересно. Покажи сам код.
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • >import sun.nio.ch.DirectBuffer;
            Продолжая использовать классы из пакета sun ты рискуешь налажать, опять сделав непортабельный код. Поскольку существуют реализации jvm отличные от sunовской.

            https://stackoverflow.com/questions/49446181/pyspark-nosuchmethoderror-sun-nio-ch-directbuffer-cleaner-when-inserting-data-i
            Ответить
        • показать все, что скрытоvanished
          Ответить
          • > быстрее

            Насколько? Или ты не замерял и просто преждевременно оптимизируешь.
            Ответить
            • Разумеется. Я в это дерьмо не от хорошей жизни полез.

              https://pastebin.com/MW0FSECK

              Direct: 4867
              Streams: 8593
              Byte arrays: 8747
              Ответить
            • показать все, что скрытоvanished
              Ответить
              • Нихера себе.
                Век живи — век учись.
                >The default is big endian even on little endian systems.
                >Can you try ByteOrder.nativeOrder() as this should be faster for you.
                https://stackoverflow.com/questions/19265835/bytebuffer-putlong-2x-faster-with-non-native-byteorder
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • > c интом джава видимо лучше работает
                    Полагаю, это потому что у них там стек четырёхбатовый, а long'и просто эмулируются запихиванием джвух четырёхбатных кусков.
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • Да нет, JIT должен справиться. В джавке стек строго типизированный, нельзя что попало и когда попало с него снимать. Поэтому превратить этот стек обратно в переменные труда не составляет. И в реальности после jit'а он вообще не обязан существовать, что-то может и в регистрах оказаться.
                        Ответить
                  • >Разница около 20%
                    >Трудно назвать это большой разницей

                    Чтоааа??? Да Царь за такую разницу в пирфомансе просто придушит.
                    А штеуд берёт за разницу в 15-20% по частоте (4 vs 5 ггц) лишние полсотни долларов.
                    Ответить
            • Нет, судя по тому что его использует куча крупных проектов (http://govnokod.ru/26671#comment549731) игра таки стоит свеч.

              Я сам смутно помню, что когда игрался с memory mapped io, там были какие-то приколы с этими буферами из-за чего пирфоманс проседал в 1.5-2х.
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Эээ, а массив байт то почему тормозит, на него же byte order никак не влияет? Ладно я понимаю там лонгов или интов...
                  Ответить
                • Интересно.
                  Помню что нашёл наиболее быстрое решение, и забил.
                  Но там какая-то загадочная питушня, когда было три версии кода.
                  И одна работала быстрее чем ByteArrays в 1.5 раза, а вторая в 2 раза быстрее ByteArrays.
                  Ответить
          • >* в 11й джаве я должен сказать ``--add-exports java.base/jdk.internal.ref=ALL-UNNAMED`` (потому что нет доступа к этому пакету или модулю

            Питушня 11ой явы. Точнее 9ой.
            У всех такие проблемы, т.к. в 9ой они распилили стандартную либу на кучу кусков (https://openjdk.java.net/projects/jigsaw/). И заодно похерили обратную совместимость (я об этом писал).

            >import sun.nio.ch.DirectBuffer;
            Пакеты из sun.* не рекомендуется использовать, они их скоро выкинут/переместят. Либо уже переместили, и ты на это наступил.
            Ответить
          • Как все грустно в джаве. То ли дело D:
            import std.stdio, std.mmfile, std.random, std.typecons;
            
            void fillWithRandom(ulong size, string path)
            {
                try
                {
                    auto f = scoped!MmFile(path, MmFile.Mode.readWriteNew, size, null);
                    
                    for(ulong i = 0; i < size; i++)
                    {
                        f[i] = cast(ubyte)uniform(0, 255);
                    }
                    
                    writeln("Fill file '" ~ path ~"'");
                }
                catch(std.file.FileException e)
                {
                    writeln("Error filling file '" ~ path ~"'");
                }
            }
            
            void main()
            {
                fillWithRandom(1024*1024*5, "test1.dat");
                fillWithRandom(1024*1024*5, "test1.dat");
            }

            Но да, ГЦ напрягает после плюсов.
            Ответить
      • Всё. Я понял.

        Ты хочешь использовать проприетарный Cleaner из пакета sun.

        Который является недокументированными кишками явы.
        Равно как и известный sun.misc.Unsafe, позволяющий выстрелить себе в ногу не хуже сишки прямую работу с указателями.

        То есть используешь вендор-онли-вещи, и при этом хочешь иметь портируемый код.

        Утверждается что для каждой фичи из sun.* существует адекватная замена. Раньше компилятор явы честно писал ворнинг что пакеты из sun.* использовать не нужно. Их МОГУТ выпилить или поменять.

        Как я понял в 11ой они перенесли Cleaner из sun.* в jdk.* чтобы вынести полезный класс в jdk.* где его можно спокойно использовать.
        Ответить
        • Как я понял в 9ой они вынесли полезные api из кишок sun в стандартную либу.

          https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8132928
          https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8148117

          Removing the open issue referring to sun.misc.Cleaner.

          sun.misc.Cleaner was previously listed as a critical internal API, but on further investigation has been removed, for the following reasons: 1) its primary use in the JDK is within NIO direct buffers to release native memory. The base module cannot have a dependency on jdk.unsupported so will need to be updated to use an alternative cleaner, 2) the usage of Cleaner outside the JDK, as determined by corpus analysis, has largely been observed to hack into private fields of the internal NIO direct buffer classes to explicitly release native memory. As stated in 1), the type of the cleaner used by NIO direct buffers will have to change. Given this, and the fact that JDK 9 has a new general purposed cleaner API, java.lang.ref.Cleaner, the value of keep sun.misc.Cleaner is questionable. See JDK-8148117 for further details.

          Ну и правильно сделали.
          Ответить
        • Мы точно знаем куча софта использует sun.misc.Cleaner

          А теперь давайте его СЛОМАЕМ! Азаза.

          Uses of sun.nio.ch.DirectBuffer.*
          
          The following methods can be replaced via reflection, however, using an API (even an internal one) is nicer.
          
          sun.nio.ch.DirectBuffer.address() to get the address of a ByteBuffer
          sun.nio.ch.DirectBuffer.cleaner() to release memory deterministically.
          
          In low GC systems, by design, you cannot assume that the GC will run often or regularly.  
          Ideally, the system should run for 24 hours to a week between minor GCs. If you are producing < 700 KB/s of garbage this is possible. 
          In such an environment, with the bulk of your data off-heap, you need to be able to clean up these resources directly
          
          
          Examples of projects/products using sun.nio.ch.DirectBuffer
          
          Chronicle Bytes
          Apache Spark
          Kryo
          Cassandra
          
          Uses of sun.misc.Cleaner
          sun.misc.Cleaner is used to handle cleanup of memory allocated via Unsafe
          
          There is no alternative using reflection or JNI. 
          In some cases reflection is used to get the Cleaner from ByteBuffer, in some cases, a cast to sun.nio.ch.DirectBuffer is used and in some cases, 
          Cleaners are created directly.
          Examples of projects/products using sun.misc.Cleaner
          
          Chronicle Bytes - NativeBytesStore
          Netbeans
          Quartet FS (Probably)
          Netty and IntelliJ
          JDBM
          Apache Lucene
          Kryo
          VoltDB
          cleakka
          SAP (Probably)
          jMonkeyEngine
          fqueue
          imageio-ext
          exs-aion-emu
          Aeron
          Agrona
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Да, я почитал за багор и понял что это пиздец.

              >Настало врремя узнать, что буфер замапленного файла нельзя флашнуть. Он сам флашнется, когда его заколлектят.

              Вместо того чтобы в новой яве для начала починить хуёвое апи, или сделать новое, хорошее с autoflush.
              Они СОЗНАТЕЛЬНО переместили класс, СОЗНАТЕЛЬНО же ломая с десяток крупных известных проектов. И сотни, тысячи неизвестных.
              Ответить
          • > Ideally, the system should run for 24 hours to a week between minor GCs.
            > with the bulk of your data off-heap

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

              >sun.nio.ch.DirectBuffer.cleaner() to release memory deterministically.
              Эти люди годами, десятилетиями говорили зачем вам malloc/free, зачем ручное управление памятью?
              Ответить
              • > Эти люди годами, десятилетиями говорили зачем вам malloc/free, зачем ручное управление памятью?
                А это фундаментальная проблема гэцухов. Они взяли один из ресурсов — память — и наговнякали систему, позволяющую им управлять. Но, поскольку у гэцухов, как и у всех питухов, мозг очень маленький, простой факт того, что память — это всего лишь один из множества видов ресурсов, в их мозги не влез. В результате гэцухи решили (прямо скажем, хуёво решили) проблему управления памятью… совершенно забив на всё остальное. Вот и приходится им городить тупые костыли, от одного вида которых крестобояре начинают ржать.

                А всё потому, что единообразные задачи нужно решать единообразным способом. Управление памятью — это всего лишь частный случай управления ресурсами. Крестобояре это поняли гавным-гавно и сделали божественный «RAII», для которого нет никакой разницы, какой ресурс освобождать: память, файлы, сокеты, хэндлы или чёрта из ступы. Всем этим «RAII» может эффективно, просто, безопасно и детерминировано управлять.

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

                    > счётчик ссылок
                    std::shared_ptr

                    > слабая ссылка
                    std::weak_ptr

                    > слабые ссылки проверялись

                    Они проверяются. Более того, ты обязан их залочить в сильную ссылку перед использованием чтобы объект не сдох пока ты с ним работаешь. И если ты забудешь это сделать - код просто не скомпилится.
                    Ответить
                    • Но это длинная питушня. Нужна какая-то директива using common_sense;, при которой все эти *, &, && заменялись на std::unique_ptr, std::shared_ptr, std::weak_ptr. Аналогично, анскильные * и [] чтоб означали std::vector и std::array. В других языках std::map встроено в язык, а в C++ придумывают пидоротрические шаблонные лямбды и функции Бесселя.

                      Иначе это провал, ведь для написания нормального кода надо писать std::боль_ше std::бес_полезных std::сим_волов, а для написания ненадёжного говна - один символ.
                      Ответить
                  • Если крестухи на словах кукарекают про RAII, то по факту встретится достаточное количество проектов, где без чтения кода не поймёшь, кто владеет объектом. Также неясно, какие объекты какое время тебе надо удалять. А если пишешь свою реализацию абстрактушни - должен знать не только методы родителей, но и порядок удалений, который принят у пользователей твоего кода, которые находятся вне твоего пакета!

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

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

                      Да потому что нормально всё это стало работать относительно недавно. Раньше из смартпоинтеров был только убогий std::auto_ptr. Вот народ и писал как умел. А инерция и совместимость ещё лет на 10 переход затянут.
                      Ответить
                    • >где без чтения кода не поймёшь, кто владеет объектом.

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

                      У яблока во время ручного reference counting были четкие правила (да и сейчас наверное остались на для кода на НЕОБЪЕКТНОЙ сишечке):
                      https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html

                      В системах на няшной обычно тоже есть правила кто делает malloc и когда он делает free.

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

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

                        > "понимать граф объектов в памяти" это такая пиздец нерешаемая задача для хорошего программиста
                        А зачем это надо понимать, если как-то можно автоматизировать?
                        Вспомним операторы в JS. Заучить таблицу 6*6 для каждого оператора - простая задача для хорошего программиста. Но потом оказывается, что кванты пердолинга накапливаются в большую БНОПНю с [object Object] и undefined.

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

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

                        Так почему бы не отдать рутину компилятору? Со статической типизацией сделали ровно это, хотя цари могут на память знать все объекты в JS.
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • В D давно есть структура-обертка RefCounted и в этом направлении активно движутся, добавляя поддержку для файлов, сокетов, своих структур. Т.о. есть тот самый переключатель.
                            Ответить
                          • > Это крайне плохо автоматизируется для любого проекта сложнее веб-магазина по продаже шоколадных печений.
                            Ну веб-магазин по продаже шоколадных печений - это уже достаточно большой проект. Это уровень eBay.
                            Большинство проектов поменьше будут, язык с GC с ними справится.

                            Не стоит возводить в абсолют. Если GC начинает тормозить на 1% проектов, то не стоит называть GC анскильным говном. Остаётся ещё 99%, с которыми он нормально работает.

                            Это как с проблемой постанова на питушне Питуринга. Кто-то считает, что она нерешаема, и начинает ныть. А кто-то просто ставит лимит на питушение, и у него всё работает.

                            > Вообще, было бы удобно иметь галочку
                            Да.
                            Ответить
                            • Если бы eBay продавал ТОЛЬКО шоколадные печенья, то он не был бы eBay.

                              А магазины размером с eBay уже достаточно тяжелые (и долгоживущие) чтобы начать думать про память.
                              Ответить
                              • В книге по хаскелю вообще магазин по продаже машин времени в качестве примера делают.
                                Ответить
                              • > ТОЛЬКО шоколадные печенья
                                Я понимаю, если один вид, который можно захардкодить.
                                А если несколько видов, то это уже не сильно отличается от питушни, которая торгует чем угодно.
                                Разве что количество клиентов влияет. Если их немного, оптимизировать дорого. Если много - не оптимизировать дорого.
                                Ответить
                    • > Также неясно, какие объекты какое время тебе надо удалять. А если пишешь свою реализацию абстрактушни - должен знать не только методы родителей, но и порядок удалений, который принят у пользователей твоего кода, которые находятся вне твоего пакета!
                      Чего? В том-то и прелесть «RAII»: тебе не надо заботиться ни о каком порядке удаления, он строго определён в стандарте. Объект, созданный первым, удаляется последним — всё, больше ничего знать не надо.
                      Ответить
                      • > Объект, созданный первым, удаляется последним — всё, больше ничего знать не надо.
                        Питушня, справедливая только для питушни, которая по значению.

                        Пример 1: функция каррирования или любая питушня с замыканием
                        let curry = f => x => y => f(x, y);

                        Питушне из замыкания (f и x) нужно искусственно продлевать жизнь. И, в отличие от JS/Haskell с GC, в C++ делать это надо явно, иначе UB. В языке с GC и замыканиями всё и так работает.

                        Пример 2: ненужная фабрика с контекстом
                        object_t* create(id_t id) {
                          factory_t f;
                          return f.create(id);
                        }

                        Если объект, который создала фабрика, ссылается на неё (ради какого-то контекста), RAII питух укококошит фабрику, и объект будет зашкварен.
                        В случае языка с GC контекст будет оставаться с объектом столько, сколько он ему будет нужен.

                        Вишенка на торте: благодаря инкапсуляции ссылка на factory_t у decltype(factory_t().create(id)) будет в приватном питухе. То есть она будет деталью реализации, которая скрыта от пользователя, но существенна для написания кода.
                        А значит вся эта хрень нарушает и так хрупкого питуха инкапсуляции.
                        Ответить
                        • > любая питушня с замыканием

                          Захватывай shared/weak и всё будет норм. В boost::asio на таком захвате всё основано. Обработали ивент, объект больше никому не нужен, тут же его и убили. Либо он подписался на следующее событие и за счёт этой подписки остаётся в живых.

                          > объект ссылается на фабрику

                          Дык он через shared ссылается. Т.е. если фабрика кому-то ещё нужна - она выживет. Если нет - ну и хуй с ней, пусть убивает, он последний юзер.

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

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

                            В то время, когда с GC это ноль проблем и ноль усилий.

                            А в случае с C++, чтобы избежать такой питушни, надо все указатели заранее менять на умные. Только тогда код будет расширяем как расширяем код на питушне с GC.
                            Ответить
                            • > все указатели менять на умные

                              Именно так. После этого обычные указатели начинают смотреться как нечто инородное и сразу бросаются в глаза.

                              Я за пять лет по-моему ни разу не поюзал new. А delete вообще забыл как выглядит. Как на собеседованиях про них рассказывать - х.з.
                              Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • Ещё есть «placement new», который конструирует объект на заранее выделенном куске памяти, и «new(std::nothrow)», который в случае невозможности выделения развращает nullptr, а не кидает исключение. Существует ещё, кстати, довольно распространённый багор, когда питузы проверяют результат обычного «new» на nullptr — и тем самым проёбываются.
                                  Ответить
                        • показать все, что скрытоvanished
                          Ответить
                        • Ну, собственно, Борманд всё написал: во всех примерах проблемы не из-за «RAII», а из-за сырых указателей, которые говно. И в примере с фабрикой — ещё из-за системы памяти (выделения на стеке) конкретно в крестах.
                          Ответить
                  • >Это надо для каждой питушни аккуратно определять, как она умирает и что с собой уносит.
                    В крупном проекте на джаве -- тоже.

                    Если ты не будешь думать по памяти ("потому что ГЦ разберется") то потом твоя программа съест всю память, упадет в ООМ, и ты будешь дампы читать.

                    Мантра "программисту не нужно думать про память -- про нее думает ГЦ" НЕ работает для больших, долгоживующих проектов.

                    Это как с ORM, например.
                    ORM хорошо, можно не знать SQL, но как только у тебя что-то сложнее персонального блога, так сразу оказывается, что SQL знать нужно.

                    Я в коде видел много слабых ссылок для всяких кешей ровно потому, что программисты вынуждены думать про память
                    Ответить
                    • То есть думать о памяти нужно только тогда, когда GC уже не справляется должным образом, а не в каждом конкретном случае работы с памятью.
                      Так и происходит в остальных отраслях. Автоматизируют всё, что можно автоматизировать, а выходящую за рамки питушню делают руками за большие деньги.
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                      • https://habr.com/ru/company/ruvds/blog/503312/
                        Производительность — это ключ к успеху веб-приложения.
                        Поэтому разработчикам нужно знать о том, как возникают утечки
                        памяти, и о том, как с ними бороться.
                        
                        Эти знания особенно важны в том случае, когда приложение, которым
                        занимается разработчик, достигает определённого размера. Если уделять
                        утечкам памяти недостаточно внимания, то всё может закончиться тем,
                        что разработчик, в итоге, попадёт в «команду по устранению утечек памяти»
                        (мне доводилось входить в состав такой команды).

                        >>> Как вызвать утечку памяти в Angular-приложении?

                        Гыгыгы.
                        Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • Очередной systemd-bagor.

      В общем решил я попробовать systemd в MX Linux, благо всё переключение сводится к выбору пункта меню в grub.

      Система действительно стала грузиться заметно быстрее: вместо 20 секунд, теперь всё происходит за 10. Из которых в кернеле 6 (systemd-analyze time).

      Правда пришлось отключить
      systemctl mask NetworkManager-wait-online.service

      C ним было 14 секунд (systemd-analyze critical-chain).

      А вот и первый багор. Сломался dns в openvpn.
      Симптомы такие: подключается, первые пару минут всё работает. А потом, хуяк: host not found.
      https://askubuntu.com/questions/1032476/ubuntu-18-04-no-dns-resolution-when-connected-to-openvpn
      БЛЯДЬ, НУ ВОТ КАК-ТО. ДЖЕДЯТЬ ЛЕТ ВСЕМ МИРОМ ДЕЛАЛИ СИСТЕМД. ПЕРЕСАДИЛИ НА НЕЁ ВСЕ ОСНОВНЫЕ ДИСТРЫ. И ВОТ ТАКОЕ.
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • openvpn → systemd-vpnd
          Ответить
          • БЛЯДЬ, какие-то шкрипты, обёртки для абасракций.
            Ubuntu 18.04 uses systemd-resolved, so all you have to do is install the openvpn helper script for systemd-resolved via
            
            sudo apt install openvpn-systemd-resolved
            Я вот не понимаю, неужели нельзя просто сделать паралельный бут, не ломая и не переписывая при этом половину системы (системные пути, dnsы).
            Ответить
            • Кстати, а почему эти скрипты по-умолчанию не встали? Вроде же логично их автоматом накатить если у тебя ставится openvpn и systemd-resolved.
              Ответить
              • >Вроде же логично их автоматом накатить если у тебя ставится openvpn и systemd-resolved.

                Логично.
                Но это же убунта. Охуенный дистр с пакетным менеджером и зависимостями, собранный профи.

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

                Прошло полтора года с момента выхода дистра, и... НИХУЯ НЕ РАБОТАЕТ.

                Unfortunately this didn’t work for a vpn which is using tcp, sites outside vpn are not resolved, hence I started using client.pritunl.com/#install found useful – Saisurya Kattamuri Oct 2 '19 at 16:31
                Ответить
                • > полгода

                  Это хуйня. Торбраузер и эклипс больше года мёртвые валялись. Походу у ШаттлВрота бабло закончилось и на десктоп они забили.
                  Ответить
                  • >Торбраузер и эклипс больше года мёртвые валялись
                    Пиздец.

                    Хотя помню мне знакомый жаловался: поставил я твой линукс(убунту) поставил из маркета нетбингс/эклипс, а они не работают.

                    > полгода
                    Полтора же.
                    Oct 2 '19 at 16:31
                    18.04 вышла в апреле 2018.

                    > ШаттлВрота бабло закончилось и на десктоп они забили
                    Да они всю жизнь ложили на свои баги. Чинили только то что само чинилось простым обновлением кернела и библиотек.

                    Там просто анскилябры работают. Ни разу не видел, чтобы какой-то каноникл-убунтоид-бой комитил фикс в ядро.
                    Ответить
            • показать все, что скрытоvanished
              Ответить
              • Забавно что 95% людей тупо вобьют команды в консоль и выполнят от рута неизвестный скрипт, который они даже не читали.

                Причём ссылка ведь не на хеш комита, а на мастер.

                sudo wget https://raw.githubusercontent.com/jonathanio/update-systemd-resolved/master/update-systemd-resolved
                Ответ-то заплюсовали. А завтра автор запушит в мастер rm -rf. И чо тогда?
                Ответить
        • >systemd-resolved всё сломал

          Да.
          Эти 10 секунд экономии на буте явно не стоят дальнейшего прожигания жизни ЧАСАМИ.
          Почему нужно устраивать еблю с баграми systemd и гуглением стековерфловочки.
          Ответить
          • я буквально 2 недели назад поебался с днс в опенвпн на фоне нетворк-менеджера и системд-резолвед!
            решил проблему

            там косяк, если недописать в хвост конфига клиента опенвпна одну строчку, то хуево работает
            строчка вот такая
            dhcp-option DOMAIN-ROUTE ~.


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

            поэтому в конфигурации в /etc/NetworkManager/system-connections/<yourvpnname>.nmconnection в секции [ipv4] надо добавить руками опцию
            dns-search=~.;


            а ещё лучше сразу дохуя опций, чтобы наверняка:
            dns=<vpn dns ip>;
            dns-search=~.;
            ignore-auto-dns=true
            method=auto
            never-default=true


            тогда будет щястье - системд-резолвд начинает понимать в днс, пришедший через впн, и выставлять ему приоритет повыше, чем, например, днс от вафли
            Ответить
        • А как вам советы уровня «качай говно с интернетов @ запускай от рута»:
          https://askubuntu.com/a/1036725
          sudo wget https://raw.githubusercontent.com/jonathanio/update-systemd-resolved/master/update-systemd-resolved -P /etc/openvpn/scripts/
          sudo chmod +x /etc/openvpn/scripts/update-systemd-resolved


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

            Всегда так делаю. Только сначала пытаюсь запустить на «Ideone».
            Ответить
            • Вот так когда-нибудь нечаянно положишь ideone, а у меня ведь в тамошне учётке много говна схоронено.
              Ответить
          • На правах офтопика:
            https://govnokod.ru/25839
            Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • А мне 3д принтер пришёл - ща тестирую его печать
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • «Я в гэмблинг сходил, мне не понравилось. Через пару месяцев сбежал. Плюсы: хорошо платят. Минусы: для кармы вроде не очень хорошо, подводные камни: примеры с https://govnokod.ru выглядят как best practices :) но как справедливо заметили - все от компании зависит.»

      Взято отсюда:
      https://twitter.com/dkorobtsov/status/1264863957359230977
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • Де перекат?
      https://youtu.be/6c9Rf1FPTzY
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Какой багор )))

        У меня кнопка «Загрузить» переадресовывает на https://visualstudio.microsoft.com/ru/downloads/ , а там «Visual C++ Build Tools» спрятаны в какую-то жопу под кат, но найти можно.

        Листаем почти до конца, в секции «Все файлы для скачивания» разворачиваем кат «Инструменты для Visual Studio 2019». Там самая последняя ссылка:
        https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16

        Она приводит к скачиванию онлайн-установщика:
        https://download.visualstudio.microsoft.com/download/pr/0fed0c12-ccd3-4767-b151-a616aaf99d86/360c496b69ec34805b9bd5afb5eaeb08b726be48f730c3bb557bf41ead9700d4/vs_BuildTools.exe
        Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить