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

0

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

#115: https://govnokod.ru/27665 https://govnokod.xyz/_27665
#116: https://govnokod.ru/27671 https://govnokod.xyz/_27671
#117: https://govnokod.ru/27675 https://govnokod.xyz/_27675
#118: https://govnokod.ru/27685 https://govnokod.xyz/_27685
#119: https://govnokod.ru/27701 https://govnokod.xyz/_27701
#120: https://govnokod.ru/27703 https://govnokod.xyz/_27703
#121: https://govnokod.ru/27710 https://govnokod.xyz/_27710
#122: https://govnokod.ru/27728 https://govnokod.xyz/_27728
#123: https://govnokod.ru/27729 https://govnokod.xyz/_27729
#124: https://govnokod.ru/27730 https://govnokod.xyz/_27730
#125: https://govnokod.ru/27732 https://govnokod.xyz/_27732
#126: https://govnokod.ru/27733 https://govnokod.xyz/_27733
#127: https://govnokod.ru/27737 https://govnokod.xyz/_27737
#128: https://govnokod.ru/27742 https://govnokod.xyz/_27742
#129: https://govnokod.ru/27747 https://govnokod.xyz/_27747
#130: https://govnokod.ru/27755 https://govnokod.xyz/_27755
#131: https://govnokod.ru/27766 https://govnokod.xyz/_27766
#132: https://govnokod.ru/27790 https://govnokod.xyz/_27790
#133: https://govnokod.ru/27828 https://govnokod.xyz/_27828
#134: https://govnokod.ru/27834 https://govnokod.xyz/_27834
#135: https://govnokod.ru/27839 https://govnokod.xyz/_27839
#136: https://govnokod.ru/27845 https://govnokod.xyz/_27845
#137: https://govnokod.ru/27857 https://govnokod.xyz/_27857
#138: https://govnokod.ru/27867 https://govnokod.xyz/_27867
#139: https://govnokod.ru/27887 https://govnokod.xyz/_27887
#140: https://govnokod.ru/27900 https://govnokod.xyz/_27900
#141: https://govnokod.ru/27914 https://govnokod.xyz/_27914
#142: https://govnokod.ru/27942 https://govnokod.xyz/_27942
#143: https://govnokod.ru/27960 https://govnokod.xyz/_27960
#144: https://govnokod.ru/27972 https://govnokod.xyz/_27972

Запостил: nepeKamHblu_nemyx nepeKamHblu_nemyx, (Updated )

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

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

    Этот оффтоп сгенерирован автоматически.

    Индекс оффтопов: https://index.gcode.space/.
    Зеркала Говнокода и полезные ресурсы:
    * https://govnokod.xyz/ (альтернативный Говнокод)
    * https://gcode.space/ (read-only зеркало Говнокода)
    * https://t.me/GovnokodBot (Говнокод-бот в «Telegram»)
    * https://t.me/GovnokodChannel (Тематический канал в «Telegram»)
    * https://vorec.space/ (глоссарий Говнокода)
    * https://app.element.io/#/room/#govnokod:matrix.org (резервный чат)

    Примечание: автоматические перекаты в настоящее время осуществляются только с аккаунта nepeKamHblu_nemyx.
    Остерегайтесь подделок. Берегите себя и своих близких. Кок!
    Ответить
  • Писатели-фантасты: роботы отнимут у людей работу, люди перестанут работать руками.

    Реальность: роботы подгоняют людей, чтобы люди быстрее работали.

    https://pbs.twimg.com/media/FKxFk8tWQAEfyEC.jpg
    Ответить
  • В 2021 году GitHub получил и обработал 26 правительственных запросов на удаление информации соответствии с национальными законами — из России, Китая и Гонконга. Эти привело к блокировке 69 проектов. Для сравнения, в 2020 году сервис обработал 44 запроса по 44 проектам — все из России.

    В 2021 году GitHub получил 335 запросов на раскрытие информации о пользователях (на два запроса больше, чем в 2020 году). Из них 195 были связаны с повестками в суд (в 183 уголовных и 12 гражданских делах), 94 — обусловлены судебными постановлениями и 22 — ордерами на обыск. Подавляющее большинство (96,4%) этих запросов поступило от правоохранительных органов, оставшиеся 3,6% — от гражданских истцов, желающих получить информацию о другой стороне.


    Из 335 запросов GitHub раскрыл информацию по 269 из них (178 повесток, 64 судебных постановления, 22 ордера на обыск и 5 запросов, сделанных в чрезвычайных обстоятельствах). Из 269 случаев сервис уведомил пользователей только 9 раз: в 255 других случаев на это был судебный запрет.

    GitHub также 1828 раз удалил контент в соответствии с американским Законом об авторском праве в цифровую эпоху (Digital Millennium Copyright Act, DMCA). Кроме того, платформа также стала ограничивать материлы, связанные с насилием, и скрыла 4585 учётных записей в 2021 году.

    https://roskomsvoboda.org/post/github-transparency-report-2021/
    Ответить
    • У нас код оф кондакт! Мы за свободу и инклюзивность! За право человека считать себя them/they! За право каждого иметь свое мнение! За право любого диктатора требовать от нас удаление любого контента, который диктатору не нравится! Свобода, равенство, диктатура!
      Ответить
    • Ордер на обыск гитхаба? Лолшто. Там же и так все видно?
      Ответить
      • Видимо, ментам нужны логи айпишников, чтобы потом запросить информацию у интернет-провайдеров и сопоставить личность.
        Ответить
    • Интересно, а если появится страна, в которой национальная религия запрещает писать на РНР, то можно будет выпилить всё РНР с гитхаба?
      Ответить
      • Когда я стану перзидентом Грузии, я обязательно издам такой закон, и всех пыхапешников посажу в тюрьму, а гитхаб мне в этом поможет, вот увидите.

        А пидарасмуса вообще в интелоп объявлю в розыск
        Ответить
  • Могу ли я считаться ООПблядью, если я не использую полиморфизм вообще, то есть у меня нет виртуальных методов, и классы только для инкапсуляции?
    Ответить
    • Мне на ГК сказали, что наследование не нужно, а без наследования виртуальные методы теряют смысл.
      Ответить
      • Наследовать пелементацию не нужно, а интерфейсы — разрешаем.
        Ответить
        • А как же условное приватное множественное наследование от шаблонных параметров для потенциальной экономии от одного до 8 байт посредством EBO в крестах?
          Ответить
          • Это когда даже пустой класс минимум 1 байт весит (чтобы иметь свой адрес) а если от него наследоваться, то он ничего не весит (потому что весит потомок), и потому наследованее выгоднее делегирования?

            Ладно, это кал конечно
            Ответить
            • guest6 опередил.
              #include <cstddef>
              #include <cstdint>
              #include <iostream>
              
              struct Foo {};
              struct Bar {};
              
              struct Baz {
                  [[no_unique_address]] Foo a;
                  int64_t b;
                  [[no_unique_address]] Bar c;
                  [[no_unique_address]] Foo d;
                  int64_t e;
              };
              
              int main()
              {
                  std::cout
                      << "Bar::a at " << offsetof(Baz, a) << std::endl
                      << "Bar::b at " << offsetof(Baz, b) << std::endl
                      << "Bar::c at " << offsetof(Baz, c) << std::endl
                      << "Bar::d at " << offsetof(Baz, d) << std::endl
                      << "Bar::e at " << offsetof(Baz, e) << std::endl;
                      
                  return EXIT_SUCCESS;
              }
              
              /* Вывод:
              Bar::a at 0
              Bar::b at 0
              Bar::c at 0
              Bar::d at 8
              Bar::e at 8
              */


              https://wandbox.org/permlink/z00vbHWAYlSGbAGu
              Ответить
              • А как теперь взять указатель на "c"?
                Ответить
                • > C++ attribute: no_unique_address (since C++20)
                  > Indicates that this data member need not have an address distinct from all other non-static data members of its class.
                  Ответить
              • Что это за говно и зачем это нужно?

                И почему у d и e оффсет одинаковый, а у c и d разный?
                Ответить
                • А чтобы это понять, нужно почитать стандарт С++. Нужная информация находится где-то в 6.7. Memory and objects
                  Ответить
                    • А как же всё в жизни попробовать?
                      Путешествия автостопом, ночёвка на вписках, случайный секс в клубе, легкие наркотики, стандарт С++.
                      Ответить
                        • Конечно. Как можешь догадаться из предыдущих сообщений, минимум до главы 6.7 Стандарта С++ я дочитал.
                          Ответить
                        • Нет, ПХП не надо пробовать.

                          Есть вещи, с которыми лучше никогда не сталкиваться.
                          Ответить
                    • >Я ещё не настолько поехавший, чтобы читать стандарт "C++".


                      удивительное дело! Люди гордятся тем, что чего-то не знают, чего-то не читали..
                      Ответить
                  • Лан, я погуглил. Поля одного типа не могут иметь одинаковый оффсет. По нулевому оффсету уже есть a, потому d разместили вместе с e.
                    Ответить
    • > для инкапсуляции
      Из всей тёмной триады ООП ты выбрал самую злую фичу, поздравляю.
      Ответить
      • По моему самая злая это, как раз, наследование
        Ответить
        • Наследование не позволяет дизайнить код так, чтобы его юзеры навсегда забыли о thread safety, из-за того, что любой* метод может неизвестно что неизвестно где неизвестно как мутировать, и они by design не должны об этом узнать. Неправильное наследование создаёт проблемы в основном разработчику классов, а не их пользователю, так что хуй бы с ним.

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

            И вот если вызову одновременно метод с двух потоков, то могу соснуть карамель.

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

            Кстати, как по классу понять, безопасен ли он потоково?
            Ответить
            • > Я могу менять внутренее состояниее походу работы метода, и это не будет нарушением const, потому что const про внешнее состояние же.

              Давно не пишу ничего не крестах, но вроде гарантирует:

              https://en.cppreference.com/w/cpp/language/member_functions

              > In the body of a cv-qualified function, *this is cv-qualified, e.g. in a const member function, only other const member functions may be called normally. (A non-const member function may still be called if const_cast is applied or through an access path that does not involve this.)
              Ответить
              • Проблема в том, что в это время в соседнем треде с тем же объектом могут работать не const методы. Т.е. const к потокобезопасности имеет чуть менее чем никакое отношение. Равно как и volatile.
                Ответить
                • s/потокобезопасность/иммутабельность/. Последнее имеет опосредованное отношение к первому.
                  Ответить
                  • Хорошо, такой вопрос.


                    У меня внутри класса приватное поле с деревом. Это дерево снаружи переодически читают.

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

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

                    Должен ли я метод "searchInTree" сделать НЕ const?

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

                    То есть снаружи, семантически, я как-бы const, а внутри не const.

                    Впорос: иммутабелен ли мой класс?
                    Ответить
                    • Ну подопрёшь внутренней лочкой чтобы закосплеить иммутабельность... Или локфри говно какое-нибудь там сделаешь.
                      Ответить
                      • Лочка не бесплатна.

                        Почему я обязан что-то подпирать? Разве я обещал потокобезопасность?

                        Собссно, вопрос был в том, можно ли считать мой класс иммутабельнвм
                        Ответить
                        • > разве я обещал

                          Откуда я знаю? Я поэтому и пишу в соседнем комменте, что если все const то есть ВЕРОЯТНОСТЬ что все иммутабельно. Но дальше надо лезть в доку или код.
                          Ответить
                    • >Впорос: иммутабелен ли мой класс?

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

                      Борманд выше верно сказал: оберни лочкой или пометь что твоё говно непотокобезопасное.
                      Ответить
                    • Вы меня неправильно поняли про потокобезопасность, разверну мысль. Мой поинт был в том, что заставлять программиста явно работать с состоянием позволяет с большей вероятностью её достичь. А не то, что какое-то ключевое слово её как-то магически гарантирует.
                      Поэтому в ФП чуть сложнее обосраться с ней, т.к. стейт очень явный и его нядо постоянно ручками массировать.
                      Инкапсуляция же — это своего рода анти-ФП, т.к. она буквально ставит перед собой противоположную задачу, всячески скрывая стейт.

                      > То есть снаружи, семантически, я как-бы const, а внутри не const.

                      Типичные охуительные ООП истории про какую-то семантику... Если состояние меняется чисто "синтаксически", значит не const, вот и вся наука.
                      Ответить
                      • >сли состояние меняется чисто "синтаксически", значит не const, вот и вся наука.


                        То есть у меня был обычный const метод, потом я решил сделать свой хак внутри класса, и вынужден снять const поменяв его интфейс и порушив API?
                        Ответить
                        • > То есть у меня был обычный const метод, потом я решил сделать свой хак внутри класса, и вынужден снять const поменяв его интфейс и порушив API?

                          Не ломай API, а помещай свою охуенную балансировку в новый метод myTree_real_fast_search_in_tree.
                          Ответить
                        • > То есть у меня был обычный const метод, потом я решил сделать свой хак внутри класса, и вынужден снять const поменяв его интфейс и порушив API?

                          Не ломай API, а помещай свою охуенную балансировку в новый метод myTree_real_fast_search_in_tree.
                          Ответить
                        • Да делай, делай. Только сохрани семантику полностью, чтобы никому ничего не сломать. Включая тех, кто по наивности посчитал твой класс за иммутабельный и у них всё работало.
                          Ответить
                        • Да делай, делай. Только сохрани семантику полностью, чтобы никому ничего не сломать. Включая тех, кто по наивности посчитал твой класс за иммутабельный и у них всё работало.
                          Ответить
                          • Поэтому код нужно делать таким, чтобы незаявленные фичи сразу не работали. Читаешь объект с двух потоков, хотя он не объявлен как потокобезопасный? На тебе exit(EXIT_FAULURE) и патч Бармина вдогонку.

                            В процессе работы могут возникнуть неожиданные результаты, которые нормальны и которые клиентский код должен уметь обрабатывать? Сделай так, чтобы они не когда-то там проявлялись и тебе слали баги что иногда всё летит, а чтобы на второй вызов уже прилетала ситуация, которую питух ДОЛЖЕН уметь обрабатывать, и кривой код не взлетит.
                            Ответить
                            • То есть я должен в каждом НЕ потокобезопасном методе специально ловить гонки, чтобы сдохнуть?
                              Ответить
                              • В идеале это должно делаться само. Но я обдолбался лекарствами и у меня ходят розовые пони, поэтому можешь не обращать на меня внимание.

                                Но проблема, когда ты думаешь, что «делаем Х, а потом, когда сделаем Z, переделываем на Y для пирфомансу, поведение не изменится», а потом оказывается, что переделать не получится, так как питухи уже полагаются на незадокументированное поведение, стоит остро.
                                И затем с одного стула кричат, что код непирфомансный, с другого кричат чтобы им код не ломали.
                                Ответить
                              • Можешь просто заранее заявить, что класс не потокобезопасен.

                                А потом с чистой совестью обоссать каждого, кто юзает его из джвух тредов.
                                Ответить
                      • >Инкапсуляция же — это своего рода анти-ФП, т.к. она буквально ставит перед собой противоположную задачу, всячески скрывая стейт.

                        Разве мудульность это плохо?
                        Разеботчик класса берёт все тяготы по поддержанию конь-систентности его состояния на себя.

                        Выходит что в Сишке зайчатки Ъ ФП, потому что там стейт всегда открыт.
                        Ответить
                        • > Разве мудульность это плохо?

                          Модульность тут совершенно ортонональна. Инкапсуляция, как мы видим, подсказывает guest'ы охуенные идеи про "засунуть лочку в lookup", которые мне убьют перфоманс на параллельные lookup'ы.
                          Ответить
                          • > про "засунуть лочку в lookup", которые мне убьют перфоманс на параллельные lookup'ы

                            Если в процессе lookupa происходит внутренняя мутация дерева, то без лочки/спинлока параллельные lookup'ы просто развалят дерево.
                            Ответить
                            • > Если в процессе lookupa происходит внутренняя мутация дерева, то без лочки/спинлока параллельные lookup'ы просто развалят дерево.

                              О чём я и говорю. Такой мудабельный лукап в ФП стиле будет выглядеть либо как

                              {Val, T'} = lookup_and_rebalance(T)

                              , если структура иммутабельна, либо как

                              lookup_and_rebalance :: tree -> ST tree val

                              если она мутабельна, и тогда для получения r/o ссылки, которую можно раздать по потоками, мне нужно явно взять лочку. А инканусация призывает все эти тонкости замести под ковёр, и не дай бог юзер их увидит.
                              Ответить
                              • >мудабельный лукап в ФП стиле будет выглядеть либо как
                                > {Val, T'} = lookup_and_rebalance(T)

                                Короче, COW.
                                В принципе в ООП мире пишут и так.
                                Ответить
                              • >мудабельный лукап в ФП стиле будет выглядеть либо как
                                > {Val, T'} = lookup_and_rebalance(T)

                                Короче, COW.
                                В принципе в ООП мире пишут и так.
                                Ответить
                                • > Короче, COW.

                                  Не, тут, насколько я понимаю, суть не в COW, а в том, что стейт или явно возвращается или его мутабельность подчёркивается монадой. В обоих случаях видно, что функция его патчит и можно задуматься о пирфомансе и тредах.

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

                                    T mutate(T old);

                                    Но в случае ООП благодаря инкапсуляции возможен ряд оптимизаций, когда COW может иногда возвращать this, если объект не поменялся.
                                    Или ранее аллоцированное значение из пула, или подстроку/подсписок.
                                    Ответить
                                  • >а в том, что стейт или явно возвращается
                                    В ООП это подчёркивается интерфейсом методов, которые при мутации возвращают новое значение.

                                    T mutate(T old);

                                    Но в случае ООП благодаря инкапсуляции возможен ряд оптимизаций, когда COW может иногда возвращать this, если объект не поменялся.
                                    Или ранее аллоцированное значение из пула, или подстроку/подсписок.

                                    > В случае с ООП эту фишку пытаются скрыть и тормоза/краши вылезают неожиданно.

                                    Будто в случае ФП не возникают неожиданные краши, когда пытаются скрыть его ленивость.
                                    Ответить
                                    • > Но в случае ООП благодаря инкапсуляции возможен ряд оптимизаций, когда COW может иногда возвращать this, если объект не поменялся.

                                      Где здесь COW, 3.14159265? Изменение термов в ФП делается тупо путём манипуляций со ссылками.

                                      > когда пытаются скрыть его ленивость.

                                      У меня в ФП нет никакой ленивости. Если не захочу, конечно.
                                      Ответить
                                      • > Где здесь COW, 3.14159265?

                                        Ну а что такое T и T'? Приняли на вход, один объект (T), вернули результат поиска и мудифицированную копию объекта (T').

                                        > Изменение термов в ФП делается тупо путём манипуляций со ссылками.

                                        Поясните мысль.
                                        Ответить
                                        • > Ну а что такое T и T'? Приняли на вход, один объект (T), вернули результат поиска и мудифицированную копию объекта (T').

                                          Давай начнём с того, что такое COW.

                                          Foo foo = ...;
                                          Foo bar = foo.copy(); // Мы _якобы_ копируем foo в bar, но на самом деле 
                                                                // создаём ссылку, а копирование откладывается 
                                          bar.read(1);          // Всё ещё читаем по ссылке
                                          bar.write(1, 5);      // А вот теперь для сохранения сёмантики мы должны 
                                                                // выполнить отложенное копирование, и потом записать в копию


                                          Т.е. вся эта коровушня имеет смысл только для мутабельных переменных.
                                          В ФП большинство вещей иммутабельны, следовательно ссылки остаются ссылками, и никакого копирования нет. Код вида
                                          T' = foo(T)

                                          не меняет Т, а просто создаёт новый терм, который (возможно) содержит ссылку на T, либо на какой-то иной терм, на который ссылается Т.
                                          Ответить
                                          • > T' = foo(T)
                                            > не меняет Т, а просто создаёт новый терм, который (возможно)

                                            Ну я так и написал точно то же.
                                            >T mutate(T old);

                                            Foo foo = ...;
                                            bar.read(1);          // Всё ещё читаем по ссылке
                                            bar = bar.withSomething(1, 5);   //копирование здесь

                                            Никаких явных foo.copy().
                                            Ответить
                                            • > Ну я так и написал точно то же.

                                              Лол, то есть ты постоянно набрасываешь haskell, даже примерно не представляя, как он работает? Нет, не то же самое.
                                              Во втором примере нет ни изменения, ни копирования.
                                              Представь, что в нём T и T' — односвязные списки, а функция foo добавляет к T одну cons-ячейку. Т при этом не копируется и не изменяется, а T' — новый объект с какими-то новыми данными (не копией T), который в каком-то месте содержит указатель на Т. Всё.
                                              Ответить
                                              • > Лол, то есть ты постоянно набрасываешь haskell, даже примерно не представляя, как он работает

                                                Да!

                                                > Т при этом не копируется и не изменяется, а T' — новый объект с какими-то новыми данными

                                                Ну так и исходный bar в моём примере тоже не изменяется.
                                                withSomething создаёт его копию (или не создаёт, если там уже есть такие данные) и возвращает обратно...
                                                Потому и bar =
                                                Ответить
                                              • > то есть ты постоянно набрасываешь на $FOO, даже примерно не представляя, как он работает?


                                                Вроде бы 90% всех набросов в Интернете ровно так и устроены
                                                Ответить
                                              • Расскажи про шеллоу и дип копирование.

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

                                                  А вот это грамотный подход к троллингу функциональщиков, сразу с козырей. Массивов-то у них нормальных нет именно из-за этой ссылочной прозрачности.
                                                  Ответить
                      • > Инкапсуляция же — это своего рода анти-ФП

                        Именно поэтому я особенно угораю со Скалки, которая пытается объединить ООП (aka анти-ФП) с ФП. Это как пытаться объединить солёные огурцы с молоком.
                        Ответить
                        • Я ел с молоком и солёные огурцы, и свежие. Мне норм, расстройства пищеварения не было.

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

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

                            Подтверждаю.

                            Но «Scala» всё-равно уродливый и крайне неуклюжий франкенштейн. Ни уму, ни перцу.
                            Ответить
                        • Кстати, у болгар есть блюдо «таратор» — холодный суп типа окрошки, только состоит из огурцов, залитых кефиром.
                          Ответить
                          • Окрошка кстати на кефире или сыворотке или на квасу?
                            Ответить
                          • Звучит как говно. В окрошку поприличнее винегрет идет, а огурцы это просто вода.
                            Ответить
                          • Звучит как говно. В окрошку поприличнее винегрет идет, а огурцы это просто вода.
                            Ответить
              • Во-первых есть
                mutable - permits modification of the class member declared mutable even if the containing object is declared const.

                Во-вторых что такое "const функция"? Имею ли я право в ней записать что-то в файл?
                Ответить
                • > что такое const функция

                  Всего лишь способ прикрутить const к неявному аргументу this... Больше никакой магии в нём нет.
                  Ответить
                  • Именно.

                    И ничто не мешает мне в из этой функции записать что-то в файл, например. Или отправить пакет по сокету.

                    И что будет, если я в один и тот же файл начну в два потока писать?

                    Ну то есть const-то я const, а вот что такое "константность" это уже вопрос семантики. Хочу -- буду файл считать частью своего состояния. Хочу -- не буду.


                    То есть даже вызывая чисто константные методы у объекта я не могу быть уверенным, что могу это с десяти потоков делать
                    Ответить
                    • Ну я у обёрток над файлом write обычно делаю не const. Да и read. Т.к. хоть циферка хендла и не меняется, но буфер и курсор внутри хендла меняются, т.е. состояние объекта другое.
                      Ответить
                      • Если мой класс умеет слать по сети пакет, то const ли метод "send"?

                        Хоть циферка хендла сокета и не меняется, но буфер и курсор внутри сокета меняются, т.е. состояние объекта другое.
                        Ответить
                        • Нет. Как мне кажется, "активные" методы вообще никогда не const.

                          Тем более там обычно один хрен что-то обновляется в состоянии.
                          Ответить
                          • То есть const это аксессоры/геттеры и всякие "чистые" функции?
                            Ответить
                            • Не в тему, но давно интересовал вопрос - нахуй нужны "аксессоры/геттеры"? Почему нельзя тупо взять и изменить/прочесть само свойство класса? Зачем раздувать оный на несколько экранов функциями ни о чём?
                              Ответить
                              • Вот именно поэтому.

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

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

                                Однако *на практике* за много лет я такое почти не встречал.

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

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

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


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

                                    Была же когда-то идея аспектов. Но потом кто-то сказал, что аспекты это плохо, и поскольку в Java мире иметь своего мнения не принято, а принято повторять мнение Гуру, то все джавушки тоже сказали "аспекты это плохо" и врчную пишут логирование в геттерах
                                    Ответить
            • > как по классу понять

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

              А в целом только по документации или коду, конечно.
              Ответить
            • > как по классу понять

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

              А в целом только по документации или коду, конечно.
              Ответить
            • > Кстати, как по классу понять, безопасен ли он потоково?
              Я больше скажу: нельзя даже пытаться «понять», потокобезопасен ли класс.

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

              Использовать класс в не потокобезопасном контексте можно только тогда, когда в документации явно написано, что класс потокобезопасен. Не написано явно — ставь лочки, благо что времена, когда лишняя критическая секция ТОРМОЗИЛА, давным-давно прошли.
              Ответить
              • > благо что времена, когда лишняя критическая секция ТОРМОЗИЛА, давным-давно прошли.

                Это смеловатое заявление. Если у меня 64 ядра, а я выполняюсь в один поток, то может быть теряю увесистую дозу перформанса, не?
                Ответить
                • Если у тебя параллельность всего алгоритма зависит от единственного класса, про который явно не сказано, что он потокобезопасный, то у тебя очень большие проблемы: твоя программа точно разъебётся, когда авторы либы сделают класс потокоопасным. Не надо так делать.

                  Ну и в первую очередь я всё же имел в виду оверхед, который боялись сто лет назад.
                  Ответить
          • >любой метод может неизвестно что неизвестно где неизвестно как мутировать, и они by design не должны об этом узнать
            В принципе можно все поля на каждом уровне наследования выносить в private, а работать через акцессоры/мутаторы обёрнутые в лочки.
            Но тогда какой смысл в мудификаторах вроде friend и protected?

            > constыли
            Синтаксиально!
            Ответить
    • ООП это вообще хер знает что, так что можешь как хочешь считать. Вот с ФП более-менее понятно, что это о том, что есть функции, которые не имеют побочных эффектов, и что можно делать какие-то там блядь рекурсивные схемы. (ФП это не про хитровыебанные типы, если что. Программирование через типы и ФП это разные вещи. Но в функциональной хуйне без сайд-эффектов нахуярить сложных и полезных типов (чтоб через них еще что-то доказывалось) можно намного легче, чем в императивщине)
      А ООП это какая-то ебаная неведомая херня с кучей баззвордов, полиморфизм-поихуизм какой-то, абстракции-абасракции, наследования-хуедования, классы какие-то блядь
      Ответить
  • Как напомнило ведомство, министр Блащак в феврале 2019 года утвердил «Концепцию организации и функционирования Войск обороны киберпространства». Они «предназначены для ведения всего спектра действий в киберпространстве — обороны, разведки и активно наступательных действий», информировало Минобороны.

    -----------



    Что это такое, как будет работать? Это солдаты будут защищать тылы добавляя в код mysql_real_escape и закрывая ssh на 22-м порту с admin/admin?
    Ответить
  • Почитал ваши срачи, и понял, что хорошо тому живется, у кого нету никаокго ООП.

    со структурами всё просто и понятно. Вот тупые структуры, вот функции для работы с ними. Ниакой тебе "семантики" структуры
    Ответить
    • >Почитал ваши срачи
      https://gcode.space/#!/search?q=ООП&user=superhackkiller1997

      Читай Царя-батюшку.

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

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


      ООП-мразь заминусовала.
      Ответить
  • Есть у нас фронт-энд говно на втором ангуляре. Мне было велено высосать список всех библиотек и их лицух, чтобы опубликовать на сайте, дескать мы используем такие-то либы и их лицензии.

    Ангуляр сделал это за меня (он вообще самостоятельный парень), насосал порядка трех сотен либ с лицензиями (в основнмо MIT и BSD клаус 3), но когда я увидел там "pad-left", со мной случился припадок
    Ответить
    • > но когда я увидел там "pad-left", со мной случился припадок

      Это ещё ничего.
      Если бы там был isTen от pethu...
      Ответить
  • Не помню, было или нет:
    C:\Users\putyh>nslookup ya.ru
    ╤хЁтхЁ:  UnKnown
    Address:  192.168.43.170
    
    Не заслуживающий доверия ответ:
    ╚ь :     ya.ru
    Addresses:  2a02:6b8::2:242
              87.250.250.242
    Ответить
        • Томас Хетхе родился в 1964 году в Трайсе недалеко от Гисена. Изучал немецкий язык и литературу, философию и кинематограф в университете имени Иоганна Вольфганга Гёте во Франкфурте-на-Майне, где в 1999 году получил степень доктора философии. Путь Хетхе до признанного представителя литературного авангарда был стремительным. Тема телесности, насилия и языка объединяет его произведения, среди которых романы,
          Ответить
    • Авторитетный ответ -- это когда сам хозяин зоны отвечает?
      Ответить
    • Кодировка зависит от номера билда Windows и от установленных обновлений. От версии утилиты, короче. В некоторых нормально, а некоторые сломаны.

      Если сделать chcp 65001, она напишет по-английски или вообще вместо локализованного текста выведет пробелы.
      Ответить
      • Не используйте русский виндуос пожалуйста никогда
        Ответить
  • https://en.wikipedia.org/wiki/Recursive_islands_and_lakes

    Contents:
    1 Recursive islands
    1.1 Islands in lakes
    1.2 Islands in lakes on islands
    1.3 Islands in lakes on islands in lakes
    1.4 Islands in lakes on islands in lakes on islands
    1.5 Islands in lakes on islands in lakes on islands in lakes
    2 Recursive lakes
    2.1 Lakes on islands
    2.2 Lakes on islands in lakes
    2.3 Lakes on islands in lakes on islands
    2.4 Lakes on islands in lakes on islands in lakes
    Ответить
    • Море
      На море остров
      На острове пальма
      На пальме клоп сидит, и видит
      Море
      на море остров
      На ос
      Ответить
  • Роскосмос представил макет антропоморфного робота «Теледроид»:

    https://youtu.be/J6rWoPzXI7Y

    Официальный канал «Роскосмоса». ТАСС и РИА «Новости» репостнули эту хуету.

    У меня есть вопросы к авторам видео. И вы, вероятно, догадываетесь, какие.
    Ответить
    • Бля, у них что приводы планируется располагать в предплечье? Тогда понятно, почему нужна специально обученная обезьяна.
      Ответить
    • Это, кстати, уже второй раз.

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

    Если открытый рекурсивный DNS поднять, через меня же ддосить кого-нибудь начнут?
    Ответить
    • Какие-то конкретные DNS запросы, или запросы про любой домен?
      Ты даже примерно не знаешь IP клиентов? Сеть может быть? Поднять IPSec на них можешь?

      Если ты сделаешь очередной 8.8.8.8, то конечно тебя будут абъюзить. Вот прямо класть тебя DDoSом смысла нет: бабла с этого не поднимешь, а хакер нычне меркантильный, но всё равно зачем тебе обслуживать чужие немытые запросы каких-то незнакомых людей?
      Ответить
      • Надо свой домен юзать с мобилки и рекурсия чтоб остальной инет не поломать, а "немытые запросы от каких-то незнакомых людей" не хочется обслуживать.
        Ответить
        • Почему не поднять честный DNS только для своего домена? Ты этот домен не покупал, что ли?

          На мобилке можешь поднять VPN
          Ответить
      • ЗЫ. гк опять в эксепшоны что-то падает
        Ответить
    • По-моему всем пофиг на DNS... Какой профит из него можно извлечь?
      Ответить
      • Можно позадавать ему запросы типа "что-нить.local" и попытаться поискать локалку. Можно посувать туда всяких команд для передачи зоны. В конце концов его можно попытаться поломать, и сделать RCE от его имени. Я бы в любом случае не хотел, чтобы моим сервисом кто-то без разрешения пользовался.
        Ответить
        • Но хотя правда поднятие своего DNS от всего этого не спасет.. Но можно арендовать его у провайдера
          Ответить
  • Это в "хрюкни"?

    Россиянин убил женщину, и бросил её тело на съедение свиньям
    Ответить
  • кокококо скала такая удобная кокококо лишена всех проблем джавы и сделана для людей кокококо val из коробки

    реальность:

    https://docs.scala-lang.org/tutorials/FAQ/initialization-order.html

    WHY IS MY ... VAL NULL?

    That's it, вы можете сделать val x: String = "x", и при обращении к нему словить null. В языке, который nullability типа не признает.

    Дальше еще лучше:

    final val x3 = "goodbye"


    final val,
    final val,
    final val.

    upd. lazy val решает проблему. Конструкция, которая должна только усложнить ситуацию, на самом деле её нивелирует. Фантастика.
    Ответить
    • То есть, я могу сделать класс, проинициализировать поля, запустить код во время инициализации, который будет от этих полей зависеть, и всё будет работать.

      Потом кто-то унаследуется и перегрузит значение поля, и после этого мой _оригинальный_ код будет использовать не новое значение, не старое, а просто навернётся с null pointer exception?

      И эти люди будут что-то мне говорить про инициализацию объектов в крестах.
      Ответить
      • В джаве проблема с нуллом при циклической иняциализации всегда была, емнип. Скалка просто унаследовала.
        Ответить
        • В джаве при указании final-проперти такой хуйни не будет, она будет обязана иметь значение. Там даже компилятор запрещает всякую хурму типа объявления зависимой константы до её зависимости или вызова родительского/соседнего конструктора не первым стейтментом в методе.
          Ответить
          • У меня вполне получалось на статик файналах петлю сделать, емнип. Да, видно было как файнал сначала нулл, а потом принимает значение.
            Ответить
            • Но тут ведь не статики, с которыми у многих языков проблемы. Тут сраные константы в сраном классе, которые заногго инициализируются при создании каждого сраного объекта.

              В Джаве такой хуйни нет (там тупо перегрузить поле нельзя, нужно менять значение в конструкторе)
              Ответить
              • Побег из конструктора в джаве ещё был. Так что файналы никогда не были файналами.
                Ответить
                • Это когда ссылку на this передаётся наружи и её начинают дёргать другие потоки?

                  Но тут однопоточный код, где код перестаёт работать, потому что "оптимизация инициализации" просто выкидывает значение, с которым успешно работали до этого.
                  Ответить
                  • /* package whatever; // don't place package name! */
                     
                    import java.util.*;
                    import java.lang.*;
                    import java.io.*;
                    public class Main {
                        private final String foo;
                     
                        public Main(String foo) {
                            doAll(this);
                            this.foo = foo;
                        }
                     
                        public String getFoo() {
                            return foo;
                        }
                        static void doAll(Main leakOfThis) {
                            System.out.println(leakOfThis.getFoo().toLowerCase());
                        }
                        public static void main(String[] args) {
                            new Main("hello");
                        }
                    }

                    https://ideone.com/C0YrlR
                    Ответить
                    • Это же просто обращение к полю до присваивания ему значения. В принципе логичное поведение.

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

                        Но есть еще один прикол, про который говорил иканус
                        class Parent {
                            protected final String foo;
                        
                            public Parent(String foo) {
                                init();
                                this.foo = foo;
                            }
                            protected void init() {
                                
                            }
                        }
                        
                        public class Main extends Parent {
                        
                            public Main(String foo) {
                                super(foo);
                            }
                        
                            @Override
                            protected void init() {
                                System.out.println(this.foo.toLowerCase());
                            }
                        
                            public static void main(String[] args) {
                                new Main("a");
                            }
                        }

                        https://ideone.com/qgZZKY
                        Ответить
          • > В джаве при указании final-проперти такой хуйни не будет

            Будет. Борманд правильно говорит.

            Сделал NPE на стасик финалах:
            https://ideone.com/h9Akn1
            class Ideone
            {
                final static Ideone BUGOR = new Ideone();
                final String s="";
                final static String lalka=null;
            
             
                public String concat() {
                    return lalka.trim()+s;
                }
             
                public static void main(String[] args) {
                    System.out.println(BUGOR.concat());
                } 
            }
            Ответить
            • Так ты ж в null самостоятельно инициалзируешь. Тут же вся беда в том, что инциализируешь не нуллом, а получаешь всё равно нулл.
              Ответить
              • Пардон, хотел упростить а получилась хуйня.
                class Kakoi 
                {
                    final static Ideone fuck = new Ideone();
                    
                    public enum Bagor 
                    {
                        ___(fuck);
                        Bagor(Ideone l) { }
                    }
                
                    public static class Lalka 
                    {
                        final Bagor shock;
                
                        Lalka(Bagor b) {
                          this.shock = b;
                        }
                    }
                
                    final static Lalka JAVA = new Lalka(Kakoi.Bagor.___);
                }
                
                class Ideone 
                {
                    public static void main(String[] args) 
                    {
                        System.out.println(Kakoi.Bagor.___);
                        System.out.println(Kakoi.JAVA.shock.toString());
                    }
                }
                https://ideone.com/2Wor3s
                Ответить
      • Мякотка в том, что у меня и вовсе вызывался метод, пытающийся обратиться к val, а не прямо как у них здесь, в теле класса. Скорее всего, так или иначе это была фаза инициализации (скажем так, я писал адаптер, который наследует какую-то хуйню, о которой я и знать не хочу, и за счет этого является энтрипоинтом/аналогом main). Любой адекватный язык вообще не позволит в единственном треде вызвать метод до инициализации полей.
        Ответить
        • Я когда-то очень давно, когда ещё изучал Йажу, сделал код и долго не мог понять в чём же ошибка.

          Обращался к полю родителя из конструктора потомка до инициализации этого поля в super().

          И тоже было NPE.

          В Йажа на самом деле несколько способов сломать final.
          Ответить
        • Вот, реальный пример NPE на final:
          import java.util.*;
          import java.lang.*;
          import java.io.*;
          
          class A
          {
          	public A()
          	{
          		System.out.println(getVal().toString());
          	}
          	Integer getVal() { return 12;}
          	
          }
          class B extends A
          {
          	final Integer i;	
          	public B()
          	{
          	    super();
          	    i=42;
          	}
          	Integer getVal(){ return i;}
          
          }
          class Ideone
          {
          	public static void main (String[] args)
          	{
          		new B();
          	}
          }
          
          https://ideone.com/l9dxHL

          Господи, какой заедушный язык.
          Ответить
          • В Йаже все методы виртуальные, поэтому super() вызовет getVal не из A, а из B, а к моменту вызова поле i ещё не инициализировано. Так?
            Ответить
            • Да.

              В оригинальном коде было что-то вроде:
              T abstract  doSomething();

              Который я пытался вызывать из родительского конструктора.

              Но самый пиздец не в этом. А в том, что Fike говорит что компилятор *мешает* ошибиться. Запрещает инициализацию до вызова super.

              > В джаве при указании final-проперти такой хуйни не будет, она будет обязана иметь значение.
              > Там даже компилятор запрещает всякую хурму типа объявления зависимой константы до её зависимости или вызова родительского


              Так вот в данном примере жабопидарастический компилятор мне мешал написать программу правильно.

              Так если бы я мог поменять местами вызов super и присваивание, всё было ок.
              У меня было бы инициализированное i к моменту вызова метода:
              public B()
              {
              	    i=42;
              	    super();
              }

              Но кек мы все знаем из рекламных буклетов "умный" компилятор Java, предотвращает ошибки ещё на этапе компиляции.

              И не даёт прогаммисту написать неправильный код. Потому отлаживая программы на Java разработчик тратит на 37% меньше времени.
              Ответить
              • Инетресно кстати, что крестокомпилятор требует ЛИБО инициализации всех полей ДО вызова конструктора либо НЕ инициализации их вовсе (и тогда он сам)

                Нельзя сделать

                doAll(this);
                this->petuh = 12;

                если petuh const


                Это не позволяет делать leak of this в крестах)
                Ответить
                • Позволяет. В условиях многопоточности передача this наружу — практически гарантированное UB, потому что возможно обращение к объекту до окончания инициализации.

                  Так бывает, когда абсрактный родитель помимо всего прочего регистрирует себя в какой-нибудь эвент системе, и новый эвент приходит до окончания инициализации всего объекта. Иногда даже что-то ломается.
                  К счастью, лечится просто — бей по пальцам любому, кто пытается голой жопой this светить из конструктора.
                  Ответить
                  • А при чем здесь многопоточность?

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

                        В коко даже завезли сахар типа
                        val petuh = Petuh().apply {
                          kuratnik += this
                        }
                        Ответить
                      • Ну воспроизведение менее стабильное с тредами, да.

                        Но бага то в протекании this из конструктора, а не в тредах.
                        Ответить
                        • Поэтому нельзя передавать this из консруктора.
                          Если хочется передать, сначала создавай, потом передавай.
                          Фабрики для кого придумали?
                          Ответить
                          • ГК -- это место, где люди с одинаковым мнением могут поспорить друг с другом.
                            Ответить
              • Вызов виртуальных методов в конструкторе/деструкторе... Ну такое.

                В крестах это иногда вообще печально заканчивается pure virtual function call'ом.
                Ответить
                • В джавке вызов pure virtual не скомпилица, к щастью.

                  Вообще есть правило: в конструкторе вызваать только final методы
                  Ответить
                  • В крестах напрямую он тоже не компилится. Но косвенно через другой метод вполне так падает. Я думаю в джаве тоже?
                    Ответить
                    • Наскока я понимаю, в крестах проблема в том, что во время работы конструктора родителя, у тебя еще нет доступа к методам, реализованным в потомке, потому что потомок еще не создан, и если запутать компилятор, то можно получить дупу. Типа так
                      class Parent
                      {
                      public:
                      	Parent();
                      	void Foo()
                      	{
                      		this->Bar();
                      	}
                      	virtual void Bar() = 0;
                      };
                      
                      Parent::Parent()
                      {
                      	this->Foo();
                      }
                      
                      
                      class Child: public Parent
                      {
                      public:
                      
                      
                      	void Bar() override
                      	{
                      		
                      	}
                      };
                      
                      int main()
                      {
                      	Child c;
                      }


                      В джавке же у тебя вызовется метод потомка, что конечно тоже тупо, потому что потомок еще не инициализирван
                      abstract class  Parent {
                          Parent() {
                              foo();
                          }
                          abstract void foo();
                          void bar() {
                              foo();
                          }
                      }
                      
                      public class Main extends Parent {
                      
                          private final String name;
                          Main() {
                                  this.name = "AAA";
                          }
                      
                          @Override
                          void foo() {
                              System.out.println(this.name.toLowerCase());
                          }
                      
                          public static void main(String[] args) {
                              new Main();
                          }
                      }


                      Оба хуже.

                      Потому что наследование реализации -- кал
                      Ответить
                      • Золотые, бессмертные строки Вилли Токарева как нельзя лучше подходят к моменту:
                        The syntax might seem much sweeter
                        Where objects and subtypes play
                        But frills like inheritance
                        Will only get in the way!
                        
                        Admire C's simple landscape
                        Efficiently dangerous
                        No templates or fancy pitfalls
                        ...like Java and C++
                        Ответить
                      • А всё дело в наседовании. Это — говно.

                        Золотые, бессмертные строки Вилли Токарева как нельзя лучше подходят к моменту:
                        The syntax might seem much sweeter
                        Where objects and subtypes play
                        But frills like inheritance
                        Will only get in the way!
                        
                        Admire C's simple landscape
                        Efficiently dangerous
                        No templates or fancy pitfalls
                        ...like Java and C++
                        Ответить
                      • А, понятно, джавка vmt не апгрейдит по ходу создания объекта. Он сразу рождается с полным типом.
                        Ответить
                        • Я вообще не знаю к стыду сказать, как vtable реализован в JVM.

                          В крестах там сначала vtable на папу показывает, потом на сына, верно?

                          Вероятно, в jvm она всегда показывает на сына
                          Ответить
                            • Надо поискать в стандарте пункт, который описывает именно это поведение: при работе конструктора родителя методы потомка еще недоступны.

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

                              Может быть там и не будет про vmt, но сам принцип надо поискать.
                              Ответить
                              • 11.9.5/4
                                Member functions, including virtual functions ([class.virtual]), can be called during construction or destruction ([class.base.init]).
                                When a virtual function is called directly or indirectly from a constructor or from a destructor, including during the construction or destruction of the class's non-static data members, and the object to which the call applies is the object (call it x) under construction or destruction, the function called is the final overrider in the constructor's or destructor's class and not one overriding it in a more-derived class.
                                Ответить
                                • >the function called is the final overrider in the constructor's or destructor's class and not one overriding it in a more-derived class.

                                  пасибо
                                  Ответить
                      • Именно поэтом я за Си - там нет никаких "классов", "методов" и "конструкторов".
                        Ответить
                        • Против «Си» может быть только уж совсем клинический идиот или заведомый подлец.
                          Ответить
                        • На Си писать скучно. Не нужно думать про виртуальные деструкторы, diamond problem, выбирать между паттерном "визитор" и RTTI.. Не программирование, а сплошной примитив
                          Ответить
                            • UB есть и в крестах тоже. Но количество сущностей в крестах в много раз больше, разве нет?
                              Ответить
                          • > думать про виртуальные деструкторы, diamond problem, выбирать между паттерном "визитор" и RTTI

                            C++ — довольно таки примитивное, но монстровое поделие, полное исторически сложившихся нелепых нагромождений.
                            Человек, который хорошо в нем ориентируется — это хорошее зубрилко, а не хороший программист.
                            Умение героически преодолевать трудности, которые создает твой собственный инструмент, вместо того, чтобы решать непосредственно прикладную задачу, в современном мире ценится разве что только среди прыщавых сосок.
                            Работодатель же это сомнительное умение не ценит, и совершенно справедливо.
                            Ответить
                          • > думать про виртуальные деструкторы, diamond problem, выбирать между паттерном "визитор" и RTTI

                            C++ — довольно таки примитивное, но монстровое поделие, полное исторически сложившихся нелепых нагромождений.
                            Человек, который хорошо в нем ориентируется — это хорошее зубрилко, а не хороший программист.
                            Умение героически преодолевать трудности, которые создает твой собственный инструмент, вместо того, чтобы решать непосредственно прикладную задачу, в современном мире ценится разве что только среди прыщавых сосок.
                            Работодатель же это сомнительное умение не ценит, и совершенно справедливо.
                            Ответить
                          • На С есть подход «сделай сам». Намакроёбь «методы», «наследование», напиши DSL, по которому будут генерироваться «виртуальные» функции...
                            А потом, когда это всё сломается, можно будет пирдолиться.
                            Ответить
                            • Ну это же вообще трейдофф известный.

                              Сначала все орут: давайте сделаем умную систему, которая будет делать всё сама! Смотрите, какой у нас получился XML/XSL/XPath/XQuery/IBM WebSphere/DCOM+/MS Bizztalk/SOA/WF

                              Потом оказывается, что для изучения системы нужно семь лет жизни, ее выкидывают в мусорку, и орут: смотрите, какой у нас отличный скрипт на PHP получился в три строки, главное mysql_real_escape не забыть.

                              Потом оказывается, что в системе миллион костылей, и все надо делать вручную, и колесо сансары проворачивается вновь
                              Ответить
                              • Принцип, известный как осциллятор Снаута: https://gcode.space/#!/27828#comment740214
                                Каждая декларативная питушня рано или поздно начнёт реализовывать внутри себя императивный язык, потом кто-то придёт и заменит её на императивную реализацию, потом для неё приделают декларативную конфу, и так далее.
                                Ответить
                            • > Намакроёбь «методы», «наследование»

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

                              "Методы" это всего лишь функции, которые принимают указатель на некоторое говно и что-то с ним делают (хотя иногда это тупо обычные функции, которым никакие "члены класса" не нужны). А "наследование" это вообще ненужная херня какая-то.
                              Ответить
      • > Потом кто-то унаследуется и перегрузит значение поля, и после этого мой _оригинальный_ код будет использовать не новое значение, не старое, а просто навернётся с null pointer exception?

        Может быть ещё хуже, программа не будет валиться с ошибкой.
        Она будет спокойно работать с ошибкой, из-за порядка инициализации:
        import java.util.*;
        import java.lang.*;
        import java.io.*;
        
        class Ideone
        {
            static final Ideone BUGOR = new Ideone();
            final int i;
            static final int b = 42;
        
            Ideone() {
                i = b - 25;
            }
        
            public int suuka() {
                return b;
            }
        
            public static void main(String[] args) {
                System.out.println(BUGOR.suuka());
            } 
        }
        https://ideone.com/8z5z45
        Ответить
    • > final val

      Зачем? Зачем?
      val же сам по себе подразумевает final.

      > кокококо скала такая удобная кокококо лишена всех проблем джавы и сделана для людей кокококо val из коробки

      Сектантская пропаганда, сер.
      В реальности в Скале есть *все* проблемы Йажи вдовесок к проблемам создаваемым новыми фичами языка.
      Ответить
  • Хорошо, с наследованием разобрались. А как вам такое?

    import java.util.*;
    import java.lang.*;
    import java.io.*;
    
    class Ideone
    {
        static final Ideone BUGOR = new Ideone();
        
        final int i;
        final int j;
        
        static final int b = java.util.Calendar.getInstance().get(Calendar.YEAR);    
        static final int a = 42;    
    
        Ideone() {
            i = a;
            j = b;
        }
    
        public int print() {
            System.out.println(i);
            System.out.println(j);
            return 0;
        }
    
        public static void main(String[] args) {
            BUGOR.print();
        } 
    }
    https://ideone.com/HFnuPw
    Success	#stdin #stdout 0.16s 55188KB
    
    42
    0


    В одном случае переменная инициализируется. В другом нет.
    Порядок не имеет значения.
    Никаких circual dependency. И всё днопоточно.
    Ответить
    • Какие-то проблемы внутри стандартной либы, раз календарь битый получается?
      Ответить
    • Т.е. в джавке тоже есть фазы инициализации, как и в крестах? И простые компайлтайм значения попадают в глобалки раньше, чем те где надо вызвать функцию?
      Ответить
      • A variable of primitive type or type String, that is final and initialized with a compile-time constant expression (§15.28), is called a constant variable.

        Whether a variable is a constant variable or not may have implications with respect to class initialization (§12.4.1), binary compatibility (§13.1, §13.4.9) and definite assignment (§16).
        Ответить
        • > A variable of primitive type or type String, that is final and initialized with a compile-time constant expression

          Блин, а я думаю почему у меня примеры со строками не получались.
          Ответить
            • А отгадайте вот так сразу: есть класс
              public class Foo {
                public static final int i = 42;
              }

              им пользуеца метод в другом классе.

              Имеет ли он право его заинлайнить?

              И сразу вопрос: чем в C# отличаются const и readonly
              Ответить
              • > const
                Как в крестах const?

                > readonly
                Как в Йаже final?

                Это без доки, по памяти.
                Edit: а поиск показывает что const в C# это compile time constexpr.
                Ответить
                • В C# нет семантики const "как в крестах", к сожалению.

                  Да, вроде бы const можно заинлайнить, а так нет
                  Ответить
      • > И простые компайлтайм значения попадают в глобалки раньше, чем те где надо вызвать функцию?
        Да. Поскольку есть порядок класс-лоадинга.
        Пока мы подгружаем класс Ideone, java.util.Calendar ещё не загружен.
        static final Ideone BUGOR = new Ideone();
        Эта строка — часть процесса инициализации класса Ideone, ибо статические пельменные пришиты к классу.

        И тут всё честно. Никакой отложенной инициализации finalов. Никаких потоков и утечки this. Обсёр фактически на ровном месте.

        И тем не менее в final-переменной мы наблюдаем неинициализированное значение.

        А Файка пропаганда убедила что:
        > В джаве при указании final-проперти такой хуйни не будет, она будет обязана иметь значение.
        Ответить
  • Лигу без Интернета (ЛГБТ ЛБИ), основанную Малофеевым, покинули вообще все участники.
    Ответить
    • Даже он сам? Видимо создали что-то ещё более забористое?
      Ответить
      • Свято место не бывает в пустоте.

        Я тоже боюсь, что для нас готовят что-то более забористое. Пока тишина.
        Ответить
        • Следующий логический шаг — лига безопасного чебурнета.
          Ответить
    • Она не нужна, потому что скоро будет Чебурнет.

      Чебурнет кстати реально сделают, и очень просто:

      Провайдеров обязали сделать бесплатным траффик до "социально значемых сервисов" типа VK и mail.ru.

      Провайдерам как отбить деньги? Они сделают платным доступ ко всему остальному Интернету. Ну а чтобы люди случайно не насидели на кучу денег, нужно будет явно включать такую услугу: "Доступ к Интернету" по 3000 рублей за гигабайт.

      96% россиян скажет: "нахуй мне деньги платить, когда VK и так бесплатен?"

      Вжжжух, и 96% россиян добровольно откажется от Интернета в пользу VK.

      А власть не виновата, это чисто коммерческие заморочки, и добровольное решение людей.

      Запомните этот твит!
      Ответить
        • Минутка занудства: если кого-то обязали предоставлять услуги бесплатно, это не рука рынка.
          Real free market has never been tried!
          Ответить
        • Минутка занудства: если кого-то обязали предоставлять услуги бесплатно, это не рука рынка.
          Real free market has never been tried!
          Ответить
      • И вот зачем им хорошие идеи подкидывать?

        Пусть сами думают.
        Ответить
        • ИА «Панорама» доигралось: часть шуточных прогнозов начала сбываться.
          Ответить
    • Monkey-style development. Тыкай по случайным кнопкам, бросайся говном, когда что-то идёт не так.
      Ответить
      • Ну там реально странная идея: смешать изменённые файлы и незареганные в гите файлы в одном списке. А потом дать мартышкам кнопку, которая удаляет и то и другое.
        Ответить
      • Ну там реально странная идея: смешать изменённые файлы и незареганные в гите файлы в одном списке. А потом дать мартышкам кнопку, которая удаляет и то и другое. По сути хард резет + полная очистка.

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

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

              А вообще не используй русской пиривод
              Ответить
              • > не используй русской пиривод

                Ну да, я обычно не юзаю ни перевод ни хром.
                Ответить
          • И сразу становится понятно сколько двойных отрицаний в коде за этим диалогом.
            Шкодливые игрунки они такие
            Ответить
    • Сабмиттер исчез с лица гитхаба, которым владеет M$. Совпадение?
      Ответить
    • Попробуем долнить нейросеткой.

      I had just downloaded vscode as an alternative and I was just playing with the source control option, seeing how it wanted to stage FIVE THOUSAND FILES I clicked discard... AND IT DELETED ALL MY FILES, ALL OF THEM, PERMANENTLY!

      HOW THE FUCK IS THIS SHIT POSSIBLE, WHO THE HELL IS THE DUMBFUCK WHO MADE THE OPTION TO PERMANENTLY DELETE ALL THE FILES ON A PROJECT BY ACCIDENT EVEN POSSIBLE?? CANNOT EVEN FIND THEM IN THE RECYCLE BIN!!!! I DIDN'T EVEN THOUGHT THAT WAS POSSIBLE ON WINDOWS!!!

      FUCK THIS FUCKING EDITOR AND FUCK WHOEVER IMPLEMENTED THIS OPTION. I WISH YOU THE WORST.

      I'M PERMANENTLY STAYING AWAY FROM EVERY WINDOWS DEVELOPMENT SOFTWARE FROM NOW ON AND TO THE GENIUS WHO IMPLEMENTED THIS:


      I HAVE NOTHING TO SAY TO YOU OTHER THAN

      YOU'RE FUCKING INSANE, YOU'RE A FUCKING IDIOT, AND I AM SO SICK OF THIS TYPE OF PEOPLE THAT MAKE MYSELF AND EVERYONE SICK.

      FUCK YOU BILLY ELLIOT. FUCK YOU.

      I'M DONE WITH YOU BILLY ELLIOT.

      I AM GOING TO BEGAN LOOKING FOR ANOTHER EDITOR, LIKE NOTEPAD, NOTEPAD EDITOR, ETC. FINDING ONE AND THEN DELETING THIS WONDERFUL SOFTWARE!
      Ответить
      • I had just learned bash as an alternative and I was just playing with the dd command, seeing how it wanted to copy FIVE THOUSAND BLOCKS 
        I typed some dd clicked enter... AND IT DELETED ALL MY FILES, ALL OF THEM, PERMANENTLY!
        
        HOW THE FUCK IS THIS SHIT POSSIBLE, WHO THE HELL IS THE DUMBFUCK WHO MADE THE COMMAND TO PERMANENTLY DELETE ALL THE FILES ON A DISK BY ACCIDENT EVEN POSSIBLE??
        CANNOT EVEN FIND THEM IN THE RECYCLE BIN!!!! I DIDN'T EVEN THOUGHT THAT WAS POSSIBLE!!!
        
        I'M PERMANENTLY STAYING AWAY FROM EVERY GPL LICENSE SOFTWARE FROM NOW ON AND TO THE GENIUS WHO IMPLEMENTED THIS:
        FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU 
        
        $ dd --version
        dd (coreutils) 8.30
        Copyright (C) 2018 Free Software Foundation, Inc.
        License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
        This is free software: you are free to change and redistribute it.
        
        $ uname -iso
        Linux unknown GNU/Linux
        Ответить
        • I had just learned how to build PC and I was just playing with random wires connecting them to random parts.

          HOW THE FUCK IS THIS SHIT POSSIBLE, WHO THE HELL IS THE DUMBFUCK WHO MADE THE WIRE TO PERMANENTLY BREAK ALL THE PARTS OF MY PC BY ACCIDENT EVEN POSSIBLE??
          CANNOT EVEN FIX THEM WITH BLUE TAPE!!!! I DIDN'T EVEN THOUGHT THAT WAS POSSIBLE!!!
          Ответить
      • Вот ещё, реальный жизненный пример:
        I had just learned relational dbs as an alternative and I was just playing with the TRUNCATE command, seeing how fast it wanted to drop FIVE BILLION ROWS
        
        I typed some TRUNCATE TABLE clicked enter... AND IT DELETED ALL MY ROWS, ALL OF THEM, PERMANENTLY! 
        
        HOW THE FUCK IS THIS SHIT POSSIBLE, WHO THE HELL IS THE DUMBFUCK WHO MADE THE COMMAND TO PERMANENTLY DELETE ALL THE ROWS ON A TABLE BY ACCIDENT EVEN POSSIBLE?? 
        
        AND REPLICATION HAS FALLEN APART. CANNOT EVEN FIND THEM IN THE TRANSACTION LOG!!!! I DIDN'T EVEN THOUGHT THAT WAS POSSIBLE!!!
        
        I'M PERMANENTLY STAYING AWAY FROM EVERY RDBMS SOFTWARE FROM NOW ON AND TO THE GENIUS WHO IMPLEMENTED THIS:
        
        FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU 
        FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU
        FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU
        FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU
        FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU
        FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU
        FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU FUCK YOU
        Ответить
  • Oднажды у Гeнри Kиссинджера cпpоcили:
    - Что такоe "чeлночная диплoматия"?

    Kиccинджер ответил:

    - О! Это унивеpсaльный еврeйский метoд! Пояcню на пpимeре:
    Вы хотитe метoдом челнoчнoй дипломaтии выдaть дочь Pокфеллеpа зaмyж за пpостого паpня из русcкой дepeвни.

    - Kaким oбрaзом?

    - Oчeнь пpоcто. Я еду в руcскую дepeвню, наxoжу там пpостогo паpня и cпpашивaю:
    - Xочешь женитьcя нa амepикaнскoй евpeйке?
    Oн мне: - Haхрeна?! У нaс и своиx дeвчонок полнo.

    Я eму: - Дa. Нo она - дочка миллиаpдepa!
    Он: - О! Этo меняeт делo...

    ... Тoгда я едy в Швейцарию, на заседaниe правления бaнка и спрaшиваю:
    - Bы хoтите иметь пpeзидeнтом сибиpcкoгo мyжикa?
    - Фу, - говорят мнe в бaнке.
    - А eсли он, при этом, бyдeт зятем Рoкфеллeрa?
    - О! Этo кoнeчно меняeт дeло!..

    И тaки-дa, я едy домой к Рокфeллeрy и cпрaшиваю:
    - Xотите иметь зятeм pyсcкoго мyжикa?
    Он мнe:
    - Что вы такoе говоpитe, у нac в семье всe - финaнcиcты!
    Я ему:
    - А он, как рaз, - пpезидент пpавлeния Швeйцарcкoгo банка!
    Он:
    - О! Этo меняeт дeлo! Cюзи! Пойди cюдa. Mистep Киcсинджер нaшел тебе женихa.

    Этo прeзидент Швeйцаpcкoго банкa!
    Сюзи:
    - Фи... Вce эти финaнcисты - дoxляки или педики!
    A я ей:
    - Да! Но этот - здopовенный сибирский мyжик!
    Она:
    - O-о-о! Этo меняет дело!
    Ответить
  • введите меня в курс дела... что тут происходит 🙂
    Ответить
  • В канал внутреннего фреймворка пришел коллега и предлагает по умолчанию рандомный UUID делать из обычного рандома, потому что дефолтный делается из SecureRandom. А там типа синхронизация и может не хватить энтропии, жадные потоки будут сидеть и ждать. Латенси у запросов из-за этого значит увеличивается.

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

          Замерь. Тогда сможешь с чистой совестью тыкать их мордочкой в графики.
          Ответить
      • > А нужен ли вам настоящий секурный рендом?

        Нужен. Не знаю какой рандом в используемом ими языке, но в той же сишке запросто могло оказаться говнище с 16(!)-битным сидом. Охуенные UUID'ы получатся из такого генератора.
        Ответить
        • Java?

          В доке написано, что используется 48 бит сида. Но из-за парадокса дней рождения уже на десятом-другом миллионе полезут коллизии. Проверь.
          Ответить
        • Удобно генерировать LM пароли
          Ответить
      • > А нужен ли вам настоящий секурный рендом?

        Нужен. Не знаю какой рандом в используемом ими языке, но в той же сишке запросто могло оказаться говнище с 16(!)-битным сидом. Охуенные UUID'ы получатся из такого генератора.
        Ответить
    • > синхронизация

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

      Ну пусть каждый тред возьмёт себе немного энтропии при старте и крутит свой локальный CPRNG, периодически подсыпая в него энтропию. Лочка на главный генератор будет намного реже браться.
      Ответить
        • Запасать на чёрный день, а то вдруг случится что?
          Ответить
        • Запасать на чёрный день, а то вдруг случится что?
          Ответить
        • - Мама, давай купим %случайное число%
          - Нет, у нас есть %случайное число% дома
          Ответить
        • - Мама, давай купим %случайное число%
          - Нет, у нас есть %случайное число% дома
          Ответить
    • > Чет я сгорел аж пиздец.

      А вот риалли, сгенери миллионов 30-40 UUID'ов их "обычным рандомом" и посмотри, не выпало ли одинаковых. Если выпало -- можешь показать чувакам и гореть начнёт у них.
      Ответить
      • А они возьмут Ryzen 3000 , и запустят там его реальный генератор, и
        Ответить
        • Ось всё-таки из кучи мест сидится, а не только из rdrand.
          Ответить
          • еп


            Newer version of Windows are able to use a variety of entropy sources:

            ** TPM if available and enabled on motherboard
            ** Entropy from UEFI interface (if booted from UEFI)[15]
            ** RDRAND CPU instruction if available
            ** Hardware system clock (RTC)
            ** OEM0 ACPI table content
            ** Interrupt timings

            Ксатит, как вам такое

            Windows's CNG uses the binary registry key HKEY_LOCAL_MACHINE\SYSTEM\RNG\Seed to store a seeded value.
            Ответить
            • > Ксатит, как вам такое

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

                Я с диска твоего спижжу сид, и угадаю чото
                Ответить
                • > с диска твоего спижжу сид

                  При рутовом/физическом доступе к тачке ей и так пиздец.

                  А состояние генератора рано или поздно станет непредсказуемым за счёт свежей энтропии. Так что долго ты спизженный сид юзать не сможешь.
                  Ответить
                  • зачем мне энтропия на диске? почему я не могу в момент загрузки насосать чутка энтропии?
                    Ответить
                    • Откуда? TPM, UEFI и RDRAND -- относительно недавно появились. В RTC рандома считай что нету. Если сеть молчит, а юзера рядом нет -- прерываний тоже почти не будет.

                      Для серваков и эмбеддед это особенно актуально было.
                      Ответить
                      • >TPM, UEFI и RDRAND -- относительно недавно появились.

                        да. RDRAND всего десять лет назад появился
                        Ответить
        • Ось всё-таки из кучи мест сидится, а не только из rdrand.
          Ответить
  • > Запасать на чёрный день, а то вдруг случится что?

    https://arstechnica.com/gadgets/2019/10/how-a-months-old-amd-microcode-bug-destroyed-my-weekend/
    All of this is supposed to be fairly failsafe. There's
    a CPUID function call that checks for the availability
    of RDRAND, and there's also a "carry bit" in the return
    value from a call to RDRAND that's supposed to let the
    calling application know if the CPU's RNG was unable to
    generate a sufficiently random number. Unfortunately,
    unpatched Ryzen 3000 says "yes" to the CPUID 01H call,
    sets the carry bit indicating it has successfully created
    the most artisanal, organic high-quality random number
    possible... and gives you a 0xFFFFFFFF for the "random" number, every single time.
    Ответить
  • > Запасать на чёрный день, а то вдруг случится что?

    https://arstechnica.com/gadgets/2019/10/how-a-months-old-amd-microcode-bug-destroyed-my-weekend/
    All of this is supposed to be fairly failsafe. There's
    a CPUID function call that checks for the availability
    of RDRAND, and there's also a "carry bit" in the return
    value from a call to RDRAND that's supposed to let the
    calling application know if the CPU's RNG was unable to
    generate a sufficiently random number. Unfortunately,
    unpatched Ryzen 3000 says "yes" to the CPUID 01H call,
    sets the carry bit indicating it has successfully created
    the most artisanal, organic high-quality random number
    possible... and gives you a 0xFFFFFFFF for the "random" number, every single time.
    Ответить
    • Именно поэтому уважающие себя крипто-либы должны проверять TRNG на такую хуйню при старте и во время работы.
      Ответить
      • Как проверять? Сгенерировать N рендовом и провеприть, что они не все одинакове?
        Ответить
        • Ну да, вот в доке по генератору stm'ки пишут, что надо сравнивать вытащенное из TRNG число с предыдущим (там по 32 бита генерится). И если они совпали -- надо их выбросить и попробовать заново.

          Это простейший тест, но так хотя бы отвал генератора увидишь.
          Ответить
          • > надо сравнивать вытащенное из TRNG число с предыдущим (там по 32 бита генерится).

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

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

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

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

              Но она достаточно мала, один раз на 4 миллиарда тестов. Надо очень долго дрючить генератор чтобы гипотеза об отсутствии одинаковых чисел стала статистически значимой.
              Ответить
              • > там по 32 бита генерится
                > она достаточно мала
                > один раз на 4 миллиарда тестов
                Birthday paradox
                Ответить
                • Нихуя. Тут ведь сравнение только с предыдущим, а не со всей накопленной выборкой.
                  Ответить
            • > В реальном рандоме такая вероятность есть.

              Но она достаточно мала, один раз на 4 миллиарда тестов. Надо очень долго дрючить генератор чтобы гипотеза об отсутствии подряд идущих одинаковых чисел стала статистически значимой.
              Ответить
              • > там по 32 бита генерится
                > один раз на 4 миллиарда тестов
                Birthday paradox
                Ответить
                • Нихуя. Тут ведь сравнение только с предыдущим, а не со всей накопленной выборкой.
                  Ответить
                  • Пардон, прочитал в стоке вне конь-текста.

                    > гипотеза об отсутствии одинаковых чисел
                    Ответить
    • Именно поэтому уважающие себя крипто-либы должны проверять TRNG на такую хуйню при старте и во время работы.
      Ответить
    • xkcd_про_42


      Расскажите, как работает RDRAND в процессорах. Она что берет? Температуру? Или там шумы какие-то слушает?
      Ответить
      • Давно читал где-то, что это такой PRNG, засиденный якобы истинными шумами (девочка-электроник bormand про всякий тепловой шум лучше расскажет).
        Ответить
        • Станет ли PRNG TRNG если его засидить истинно случайным семенем?

          Интересно вообще, можно ли такое хакнуть
          Ответить
            • То есть если я бесконечное число раз его проверну, то он начнет повторяца, да?

              Тогда как же гост читал, что RDRAND это PRNG когда там питуз пишет, что это TRNG?
              Ответить
              • Дан RNG, генерирующий 16-ти битное число. Известно, что он или TRNG, или PRNG сидированный 128-ми битным числом.

                Сколько тебе нужно чисел из него высосать, что бы понять, P он или T?
                Ответить
                • Наверняка это в любом случае сделать не получится — если ты не имеешь доступа к реализации, конечно.
                  Ответить
                • Наверняка это в любом случае сделать не получится — если ты не имеешь доступа к реализации, конечно.
                  Ответить
                • Сомневаюсь, что это можно однозначно выяснить. Есть вероятность, что TRNG может выдать последовательность как у какого-нибудь PRNG, либо PRNG не известен и даёт хороший рандом что его трудно вычислить.
                  Ответить
                  • К сожалению хороший CPRNG проходит почти все статистические тесты кроме совсем безумных в духе вычитывания всех чисел.
                    Ответить
                  • К сожалению хороший CPRNG проходит почти все статистические тесты кроме совсем безумных в духе вычитывания всех чисел.
                    Ответить
          • > Станет ли PRNG TRNG

            Нет, конечно. Но это и нинужно.

            Тут главное, что ты периодически подмешиваешь в PRNG достаточное количество энтропии из TRNG и злоумышленник теряет контроль над состоянием твоего генератора, даже если он его недавно спиздил.

            Как раз поэтому сидить один раз в начале -- недостаточно.
            Ответить
            • Если у меня есть PRNG, который я сидю заново энтропией каждое второе число. Он не становится от этого TRNG. А если каждое первое число, то всё равно не становится?

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

                А PRNG должен быть детерминированным, чтобы его легко было проверить.

                Вот тогда из них можно составить секьюрную систему. Но мешать их в кучу не надо, это только затрудняет исследование.
                Ответить
                • Я не делаю RNG, честно слово) Мне просто было интересно понять определение.
                  Ответить
              • Не надо так делать. TRNG должен быть максимально простым и честным, чтобы можно было с него статистику собирать и оценивать его качество.

                А PRNG должен быть детерминированным, чтобы его легко было проверить.

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

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

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

        У интела какая-то своя хуйня с "подбрасыванием" метастабильного триггера + за каким-то хреном PRNG фронтенд, чтобы качество рандома никто не мог оценить.
        Ответить
        • Скорее всего чтобы спрятать деталь реализации, и потом поменять, если что.

          Понятно, спасибо
          Ответить
          • На самом деле скорее всего всё проще: с аппаратного ГСЧ много энтропии не снимешь, они медленные. Из них в лучшем случае единицы мегабит можно выдавить.
            Есть, конечно, адские железяки с кусками урана внутри за сто тыщщь нефти, которые могут давать рандом со скоростью /dev/urandom, но в процессор их не вставишь.
            Ответить
          • На самом деле скорее всего всё проще: с аппаратного ГСЧ много энтропии не снимешь, они медленные. Из них в лучшем случае единицы мегабит можно выдавить.
            Есть, конечно, адские железяки с кусками урана внутри за сто тыщщь нефти, которые могут давать рандом со скоростью /dev/urandom, но в процессор их не вставишь.
            Ответить
            • Была отдельная плата сопроцессора для плавающего питуха, запихнули в процессор.
              Была отдельная плата физического ускорителя, запихнули в видеокарту.
              Нужно выпустить плату аппаратного генератора случайных чисел. Продавать под лозунгом, «теперь лут будет падать действительно случайно»
              Ответить
              • Видюху тоже сунули в процессор. А еще контроллер памяти. Звуковуху тоже сунули в известном смысле. HDA же просто аналоговая часть снаружи..
                Ответить
            • Была отдельная плата сопроцессора для плавающего питуха, запихнули в процессор.
              Была отдельная плата физического ускорителя, запихнули в видеокарту.
              Нужно выпустить плату аппаратного генератора случайных чисел. Продавать под лозунгом, «теперь лут будет падать действительно случайно»
              Ответить
              • > Была отдельная плата физического ускорителя, запихнули в видеокарту.

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

                Её кстати потом тоже в процессор запихнули.
                Ответить
              • > Нужно выпустить плату аппаратного генератора случайных чисел.
                Такие штуки сто лет в обед выпускают.
                d: «TrueRNG V3» (USB), «Quantis QRNG PCIe», тысячи их.
                Ответить
              • > Нужно выпустить плату аппаратного генератора случайных чисел.
                Такие штуки сто лет в обед выпускают.
                d: «TrueRNG V3» (USB), «Quantis QRNG PCIe», тысячи их.
                Ответить
      • Классическая реализация (на тех же stm'ках) -- кольцевой осциллятор. У него частота плавает от температуры. Поэтому, если его семплить со стабильного кварца, получается неплохой рандом.

        У интела какая-то своя хуйня с "подбрасыванием" метастабильного триггера + за каким-то хреном PRNG фронтенд, чтобы качество рандома никто не мог оценить.
        Ответить
    • О, я помню эту хуйню.

      Из-за неё Кукрузены не грузили Луникс.

      ПРЫЩЕБЛЯДИ СОСНУЛИ
      Ответить
    • О, я помню эту хуйню.

      Из-за неё Кукурузены не грузили Луникс.

      ПРЫЩЕБЛЯДИ СОСНУЛИ

      Просто сравните:
      > Windows users couldn't successfully launch Destiny 2
      > and Linux users in many cases couldn't even get their system to boot
      Ответить
    • И вдогонку немножко пропаганды ([u]https://stackoverflow.com/a/26781934/u%5D):
      >>> RDRAND is not just a PRNG. It is a whitened TRNG that is FIPS compliant.

      > and gives you a 0xFFFFFFFF for the "random" number, every single time
      > and gives you a 0xFFFFFFFF for the "random" number, every single time
      > and gives you a 0xFFFFFFFF for the "random" number, every single time
      Ответить
      • > whitened TRNG

        Вот тут-то всё говно этих "TRNG" и таится... Даже если оно на выходе выдаёт не 0xFFFFFFFF, откуда ты знаешь, что оно им не сидилось?

        Честный TRNG должен давать мне честный доступ к его потоку энтропии, чтобы на нём можно было провести статистические тесты. А не пропущенное через мясорубку говно.
        Ответить
        • Именно потому некоторые либы просят юзера подвигать мышкой
          Ответить
        • Это правда.
          На самом деле никакой ошибки нет, а то, что у людей нагенерировались 0xFFFFFFFF — это просто совпадение.
          Ответить
        • Это правда.
          На самом деле никакой ошибки нет, а то, что у людей нагенерировались 0xFFFFFFFF — это просто совпадение.
          Ответить
      • Хуй-ня какая-то. Один е-блан волнуется за rand при написании игор про заик на крестах и в прыщах, а другие ему затирают про крипоту монтекарликов.
        Ответить
      • Хуй-ня какая-то. Один е-блан волнуется за rand при написании игор про заик на крестах и в прыщах, а другие ему затирают про крипоту монтекарликов.
        Ответить
        • > игор

          Засудят ведь если лутбоксы с кривым рандомом.
          Ответить
          • For Sale Original Honey RANDU 1KG ll Original Honey Pure Necttar RANDU And MULTIFLORA APIS MELIFERA Guaranteed
            Ответить
    • В ресторане "Бристоль" такой тортик подают
      Ответить
  • 
    remove AVX and AVX512 code from Calc
    
    It's been a source of numerous problems since the beginning.
    Poor separation of C++ code causing the compiler to emit some generic
    code as CPU-specific, compiler optimizations moving CPU-specific
    code out of #ifdef to unguarded static initialization, etc.
    
    And it doesn't seem to even particularly improve performance,
    on my Ryzen2500U for one full column (1m cells) sumArray() takes
    about 1.6ms with AVX, 1.9ms with SSE2 and 4.6ms with generic code.
    So SSE2 code is perhaps worth it, especially given that SSE2 is our
    baseline requirement on x86_64 everywhere and x86 on Windows,
    but AVX+ is nowhere near worth the trouble.
    
    So this code removes all AVX+ code from Calc, and makes SSE2
    a hardcoded option on where it's guaranteed. If we raise the baseline
    to AVX, the SSE2 code may be replaced by the one removed by this
    commit. Generic code is there for other platforms, if other platforms
    add CPU-specific code, they should preferably follow the same rules.

    https://cgit.freedesktop.org/libreoffice/core/commit/?id=2d36e7f5186ba5215f2b228b98c24520bd4f 2882

    Князь, как обычно, зрит в корень.

    https://www.youtube.com/watch?v=1IAwkEdRZZw

    Инструкции-хуюкции. Я выходил на улицу, я ко всем подходил, к каждому бомжу подходил и спрашивал:
    Что тебе, сука, ёбанная, дали AVX-инструкции?
    И все. Каждый сука блоггер.  
    AVX-инструкции, AVX-инструкции, AVX-ИНСТРУКЦИИ, AVX-ИНСТРУКЦИИ, AVX-инструкции.
    ГДЕ АVX?? ПОКАЖИ, ТКНИ!!! Открой блять любую программу, открой любую игру.
    Покажи мне AVX, где его не хватает, сучка. Пиздец.
    Ответить
    • > compiler optimizations moving CPU-specific code out of #ifdef

      О_о. Пиздец у них там конпеляторы охуевшие. Оптимизирующий препроцессор -- это сильно.
      Ответить
    • Помню, мы считали MD5. У кода на AVX1 пирфоманс оказался, как у кода на SSE (версию не помню). Код на AVX2 оказался быстрее (но у меня не оказалось под рукой техники с AVX2, поэтому пришлось верить Борманду на слово).

      А AVX512 я даже не знаю, где используется.

      В играх AVX не используется, видимо, потому что игры используют GPU.
      Ответить
      • Ну да, в том и проблема. Если задача настолько хорошо параллелится, что может полноценно утилизировать AVX, то... это задачка для видюхи.
        Ответить
      • В моем любимом хеше жэе

        AVX512 support

        A new vector instruction set is supported, thanks to @gzm55 : AVX512. It can be applied on XXH3 and XXH128, using some of the most recent Intel cpus, such as IceLake on laptop. It typically offers +50% more performance compared to AVX2.

        https://github.com/Cyan4973/xxHash/releases
        Ответить
          • Верно. Деды как-то обходились ISA 8088, а MS-DOS написали
            Ответить
            • Недавно мы заметили, что в ISA 6502 даже умножения и деления не было, а на нём как-то построили «Apple ][», «Агат», «NES»/«Dendy», «Commodore 64», «Atari» и ещё кучу техники той эпохи.
              Ответить
                • Ага, аккумулятор, указатель текущей инструкции, указатель стека, флаги и два ненужных регистра.
                  Ответить
                • У нас в JVM и CLR нет никаких "регистров"
                  Ответить
                          • Во время введения стримов (еще времена восьмой джавы) люди вслух удивлялись, мол что, мы будем делать отдельные стримы под примитивы?

                            Стримы эти до сих пор существуют и все ещё необходимы, конечно.
                            Ответить
            • > Деды как-то обходились ISA 8088, а MS-DOS написали

              Сарказм конечно хорошо. Но Fike кидает архиправильные ссылки.

              Проблема в том что увеличение размеров регистров 64-128-256-512 приводит к убывающим результатам.

              Если при переходе MMX (64) - SSE (128) скорость увеличивалась в 1.5-2 раза.
              То при переходе SSE(128)-AVX2(256) мы видим увеличение IPC в 1.2-1.4 раза.
              При переходе AVX2-AVX512 выигрыш большинства алгоритмов 1.05-1.1

              При этом поддеркжа этих инструкций жрёт экспоненциальное число транзисторов.

              А в случае AVX-512 процессоры сбрасывают частоту, в итоге прирост IPC не компенсирует даунклоакинг и зачастую наблюдается даже падение пирфоманса.
              Т.к. падение частоты 20%-40%, а прирост IPC *для большинства* алгоритмов 5-10%.

              On some processors AVX-512 instructions cause a frequency throttling even greater than its predecessors, causing a penalty for mixed workloads.
              The additional downclocking is triggered by the 512-bit width of vectors and depend on the nature of instructions being executed, 
              and using the 128 or 256-bit part of AVX-512 (AVX-512VL) does not trigger it.
              As a result, gcc and clang default to prefer using the 256-bit vectors.
              
              On Skylake and its derivatives, the throttling is divided into three levels:
              
                  L0 (100%): The normal turbo boost limit.
                  L1 (~85%): The "AVX boost" limit. Soft-triggered by 256-bit "heavy" (floating-point unit: FP math and integer multiplication) instructions. Hard-triggered by "light" (all other) 512-bit instructions.
                  L2 (~60%): The "AVX-512 boost" limit. Soft-triggered by 512-bit heavy instructions.
              Ответить
              • > А в случае AVX-512 процессоры сбрасывают частоту
                Так это не какое-то принципиальное ограничение «AVX-512», это просто в «Intel» по-крупному обосрались с теплораспределением и въебали анскильный костыль с троттлингом. У меня в «AMD» такой хуйни нет!
                Ответить
                • > У меня в «AMD» такой хуйни нет!

                  Он просто всегда работает медленее.

                  Можно и без зелёного, наверное. AVX по-любому выделяет больше тепла, чем более простые инструкции. И если охлаждение справляется с AVX на какой-то частоте, то с простыми инструкциями оно справится и на большей. Т.е. "не троттлить AVX" можно прочитать как "не получать буст для остальных инструкций".
                  Ответить
                  • З.Ы. Другое дело, что троттлить надо бы по температуре, а не тупо по наличию инструкции в потоке.
                    Ответить
                    • > З.Ы. Другое дело, что троттлить надо бы по температуре, а не тупо по наличию инструкции в потоке.
                      Вот именно. И даже не по температуре, а по энергопотреблению — но, видимо, такие нанотехнологии инженерам из «Интела» недоступны.

                      P. S. Моя рязань под полной загрузкой всех ядер AVX говном (см. «CPUID Powermax») накаляется до 72 градусов, а вот SSE-говно нагревает её только до 65. Обычные же рабочие нагрузки редко когда вызывают нагрев выше шести десятков.
                      Ответить
                      • > по энергопотреблению

                        Ну нее... Тогда более крутое охлаждение перестанет давать профит.
                        Ответить
                        • Почему? Понятное дело, что троттлить по максимальной температуре всё равно надо. Просто более крутое охлаждение сможет отвести все максимально допустимые N ватт тепла, отсосный вентилятор сможет отвести только (N - M) ватт и вынудит процессор затроттлиться по температуре.
                          Ответить
                          • Потому что разрабы проца не знают сколько ватт допустимо для всей системы в целом. Разве что регулятор прикрутить чтобы вручную можно было добавить газу.

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

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

                              У меня видеокарта, например, вполне себе умеет замерять свою мощность и по ней же троттлиться. Даже ползунок в ПО имеется, позволяющий этот троттлинг подкручивать. С тех пор, как выкрутил ползунок на минимум — до 53% от TDP — просто нарадоваться не могу: за счёт единиц процентов потери производительности получил абсолютно тихую и холодную карточку.
                              Именно поэтому я за «троттлинг по мощности».
                              Ответить
                • > просто в «Intel» по-крупному обосрались с теплораспределением и въебали анскильный костыль с троттлингом
                  > У меня в «AMD» такой хуйни нет!

                  Да, действительно в процессорах от «AMD» такой хуйни как «AVX-512» просто нет.
                  Ответить
                  • У Вас устаревшая информация: «AVX-512» есть в «Zen 4».
                    Ответить
                      • Покажите мне «Zen 4»! Где используется «Zen 4»? Где? Покажите!
                        Ответить
                        • «Процессоры AMD Ryzen 7000 Zen 4 могут представить уже летом».

                          Могу копать, могу не копать.
                          Ответить
    • > ГДЕ АVX?? ПОКАЖИ, ТКНИ!!!

      У меня в контроллерах нет никаких "AVX"
      Ответить
        • А блин, у cortex m4 там всего лишь простенькое FPU, даже без синусов. Неонка уже у "настоящих" arm'ов.
          Ответить
          • Не, вообще там есть некоторая SIMD хуйня:

            https://developer.arm.com/architectures/instruction-sets/dsp-extensions/dsp-for-cortex-m
            > DSP and SIMD instructions
            >
            > The Cortex-M4, Cortex-M7, Cortex-M33, Cortex-M35P, and Cortex-M55 processors provide SIMD instructions that operate on 8-or 16-bit integers. All registers are still 32-bits wide, but the SIMD instructions operate on 2 x 16-bit values or 4 x 8-bit values at the same time within a 32-bit register.
            >
            > Instructions that work on 8- or 16-bit data types are useful for processing data such as video or audio, as they do not require full 32-bit precision. The SIMD instructions allow these 2x16-bit o r4x8-bit operations to be performed in parallel.

            Но весьма ограниченная, и не для FPU
            Ответить
            • А, они даже не в расширениях, а прям в основном наборе описаны...

              SHADD8: add each byte of the first operand to the corresponding byte of the second operand and shift each result by one bit to the right.

              Прикольно. Вот для софтварного рисования мне в своё время такой хуйни реально не хватало. А MMX казался каким-то неудобным оверкиллом.
              Ответить
              • А Бессель есть?

                >. Вот для софтварного рисования мне в
                не понял. Спрайты что ли делать?
                Ответить
                • Инструкия Бесселя? Это интересно, надо интелу подкинуть такую идею
                  Ответить
  • С чем у вас ассоциируется название компании «Yoyodyne»?
    Ответить
  • Скучно тут сегодня. Пойду посру, пожалуй
    Ответить
    • Не могу зайти. Сайт пишет, что мне «доступ запрещен».
      Ответить
    • Кто-то всерьёз решил взяться за проблему "собрать бы всех фемок в одном месте и огородить забором"?
      Ответить
      • > взяться за проблему "собрать бы всех фемок в одном месте и огородить забором"

        Какой женский монастырь )))
        Ответить
    • Кстати, название сайта хуемразь придумала. Два холма — это же намёк на две сиськи.
      Ответить
      • Это скрытая реклама одноимённого нового российского сериала. Там тоже про женщин в экопоселении.
        Ответить
        • [quote]
          Что будет, если в результате биологической войны почти все мужское население вымрет? Женщины погорюют (недолго), а потом объединятся и создадут новый лучший мир — с экогородками, возобновляемой энергией, возможностями заниматься чем захочется, хоть наукой и биохакингом, хоть йогой и саморазвитием.
          [/quote]

          Какой дурак решил, что женщины более соевые, чем мужики? Женщины прекрасно умеют ненавидеть, воевать, и убивать.
          Ответить
              • я так понимаю, для анимешника единственный способ поебаца, это остаться единственным мужчиной во вселенной?
                Ответить
                • Это определенно «‎лучший комментарий за сегодня»‎
                  Ответить
                • > это остаться единственным мужчиной во вселенной

                  Но тут надо не перестараться и не остаться единственным человеком во вселенной. Прецеденты были.
                  Ответить
                    • Не поможет. Там был настолько сферический неудачник в вакууме, что ему дали рутовый доступ ко вселенной и возможность её перестроить с нуля. А он так нихуя и не сделал.
                      Ответить
                        • Попаданцы обычно стоят на другой стороне бристольской шкалы.
                          Ответить
                      • По моему это вообще распостранненная тема у фантастов: человеку дается возможность ВСЁ исправить, а они делают только хуже
                        Ответить
                • Скорее "для того подмножества анимешников, которые смотрят гаремники"
                  Ответить
              • > young adult
                Откуда вы такое берете? Тут мейнсримный - лютейшее говно, а это судя по всему категория B
                Ответить
                • Скорее откуда ты это взял, потому что по ссылке фраза есть только в референсах :3

                  IMDB кажется порекомендовал. Сам фильм не то чтобы мегаинтересный, но посмотреть можно. А мейнстримный марвел нахуй не нужен.
                  Ответить
                  • Там в абсракте написано, что по книге, а книга про планету жопоёбов оказалась вот такая.
                    Ответить
              • > which causes everyone to see and hear each other's thoughts

                Если бы люди видели мои мысли, то со мной буквально все перестали бы общаться\
                Ответить
            • С помощью науки. Роль самца преувеличена. Какая разница от кого брать генетический материал.
              Ответить
              • Нуу, если бы разницы не было, то эволюция дальше одноклеточных бы не ушла. Всё-таки генетическая инвормация любят жить вечно, а для этого ей нужно создать качественный мясной автомобиль.
                Ответить
                • Два пола было создано для эволюции, чтобы выживали сльнейшие. Если ты вялый импотнет, не способный завалить маманта, то тебе и тян не дадут, и помтоства ты не оставишь.

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

                    А как надо?
                    Ответить
                    • Ну надо как было примерно до 19 века. Хиляк? С корабля жизни -- хуяк, и синь небес, закрывшихся за ним. Выживают самые сильные
                      Ответить
                      • Крайне пещерное понимание эволюции. Марш читать Докинза с Марковым, и потом имплементацией генетического алгоритма закрепить.
                        Эволюция оптимизирует вероятность сохранения генетического материала, путём тюнинга вообще всех параметров в многомерном пространстве, а не только гена турникмества.
                        Ответить
                        • Веса у параметров тоже есть, и в условиях отсутствия антибиотиков и с медициной на уровне кровопускания крепкое здоровье становится необходимым (хотя и не достаточным) условием прожить хотя бы лет тридцать
                          Ответить
                          • > прожить хотя бы лет тридцать
                            При чём здесь это вообще? После того, как ты передал гены, эволюция в принципе не может работать напрямую. Долголетие разве что косвенно может на неё влиять. Короче, ты не сечёшь матчасть.
                            Ответить
                            • Ты не можешь передать гены, если ты не дожил до половой ебли. Младенцы не ебуца.

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

                              Сейчас эта штука не работает.
                              Ответить
                                • То есть по твоему человек использовал r стратегию, как мухи?
                                  Ответить
                                • А так же про естественный отбор vs. половой отбор.
                                  Ответить
                              • > Ты не можешь передать гены, если ты не дожил до половой ебли.
                                Начались манёвры. Если бы ты это изначально имел в виду, то говорил бы про "возраст фертильности", а не "лет тридцать".
                                Ответить
                              • > Сейчас эта штука не работает.

                                Сейчас есть страны, где это всё ещё работает, дальнейшие выводы делай сам.
                                Ответить
                                • > Сейчас есть страны, где это всё ещё работает

                                  Idiocracy 2006. Уже IRL.
                                  Ответить
                            • Короче, просуммирую мой поинт: социальный дарвинизм геста — это настольно примитивное понимание эволюции, что оно фактически граничит с неверным. Поскольку в его понимании, эволюция оптимизирует один единственный параметр: здоровости и розовощёкости.
                              В реальности же она оптимизирует в бесконечномерном пространстве, где "правильное" направление предсказать нельзя. Алгоритм этой оптимизации более-менее прост, его ещё в XIX веке открыли, но входные данные для него принципиально неизвестны. Поэтому делать громкие заявления об остановке этого алгоритма на основании только одного измерения — глупость.
                              Т.е. ситуация тут примерно как с уравнением Навье-Стокса: с виду очень простое, а решать его по-нормальному никто не умеет. Только у жидкости всего три измерения, а у биологического вида — бесконечно много.
                              Ответить
                              • Эволюция пробует вообще всё. Но она очень инерционна.

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

                                Понятно что через какое-то длительное время происходит адаптация.

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

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

                                Короче. Идиократия во все поля.
                                Ответить
                  • > Если ты вялый импотнет, не способный завалить маманта, то тебе и тян не дадут, и помтоства ты не оставишь.

                    Есть мнение, что эволюцию современного человека в основном направляло социоблядство, а не мамонты. Поскольку здоровый головной мозг крайне невыгоден, должен быть крайне весомый профит, чтобы он появился. Быть умнее мамонта просто, а вот быть умнее соплеменника — уже сложнее. Т.е. социоблядство запустило петлю положительной обратной связи увеличения IСQ. Чего-чего, а социоблядства сейчас полно, так что тиктокеры будут эволюционировать.
                    Ответить
                    • ну мозг изначально был нужен чтобы делать стрелы и охотиться на мамонта тоже, затем чтобы коз разводить, итд
                      Ответить
                        • Охуясе. Антропологи спорят о причинах появления такого мозга именно у человека, рассматривают разные теории, например что приматам он был нужен изначально чтобы прыгать по деревьям, пытаются понять, зачем например мозги слонам, которые неестественно умные для травоядных, а тут Снаут пришел, и всё объяснил
                          Ответить
                          • "Труд сделал из обезьяны человека" — раздался пронзительный голос со стороны филфака. Но evolutionary development биологи, как всегда, не обратили внимания на это визгливое кукареканье. Пусть кукарекает, что с него взять?
                            Антропология — не наука, и ей предстояла тяжёлая ночь.
                            Ответить
                          • На самом деле артроподлоги зря спорят, толчок развитию мозга дало выращивание свёклы как апгрейд собирательства, а конкретнее - успешное решение задачи "сколько можно сожрать/сколько надо оставить на развод", что позволило осесть и жрать больше глюкозы и больше думать в петле обратной связи.
                            Ответить
          • Ну с одной стороны среди девушек-программисток культистов C++ почти нет, если не считать нейросети 1024--
            Ответить
          • Нормально. Россияне научились делать клюкву уровня америки. Выглядит это обычно очень смешно, потому что американская клюква не так сильно режет глаз -- мы не живем в америке, а когда нам показывают российскую глубинку, которая выглядит как сан-франциско, и там живут простые русские учительницы в пятикомнатных квартирах с евроремонтом, и после работы в школе занимаются йогой, вот это смешно
            Ответить
            • Н-но... если появилось время высматривать что-то там в рашкосериалах, то явно что-то не так со свободным временем.
              Ответить
        • На территории поселения запрещены смузи и вегетарианство. Можно кушать только водку с пельменями, и запрещены все телепередачи кроме футбола и бокса
          Ответить
    • > Согласно договору, продавать и сдавать квартиры в аренду можно будет только женщинам
      То есть квартиры там не покупают (иначе ограничений не наложить) а берут в бессрочную аренду, я правильно понимаю?
      В ипотеку не взять, потому что ни один банк в такую хуйню не полезет, по наследству не передашь.
      Ответить
        • > До старта строительства осталось 276 заявок

          > Готовый объект может отличаться от представленных визуализаций.

          Это вообще выглядит как типичная наёбка. Никаких реквизитов.
          Ответить
    • Домен зарегистрирован 9 февраля сего года.

      Подозрительня.
      Ответить
      • Гест хочет получить фидбэк по верстке, но стесняется спросить напрямую
        Ответить
    • В первый же день там начнётся гражданская война на почве TERF. Многие падут.
      Ответить
      • Я TERFосрачи видал в интернетах, да.

        Транс: Я женщина
        Фемка: А по-моему ты говно
        Ответить
        • > Фемка: А по-моему ты говно

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

      Максим Горький. Воспоминания. Лев Толстой.
      Ответить
  • One of us recalls producing a «random» plot with only 11 planes, and being told by his computer center’s programming consultant that he had misused the random number generator: «We guarantee that each number is random individually, but we don’t guarantee that more than one of them is random». Figure that out

    —– Ваш рандом — говно!
    –— Вы просто его неправильно используете.

    Какой багор )))
    Ответить
    • > we don’t guarantee that more than one of them is random

      Одноразовый генератор случайных чисел?
      Ответить
    • З.Ы. А первое число поди вообще функция от таймера? Т.е. случайных чисел там вообще нет.
      Ответить
        • Угу, это говно много лет было в большинстве компиляторов и библиотек. В 32-битном вореанте точки лежали уже на 15 плоскостях.

          Взяли самый простой мультипликативно-конгруэнтный генеретор, да ещё и константы неудачные выбрали)
          Ответить
          • Дык там поди при любых коэффициентах плоскости будут? Зависимость ведь слишком простая.
            Ответить
    • Вот этот анекдодт я где-то казуально прочитал и смутно его помню, а найти не смог.
      Ответить
  • хотел скачать винамп. захожу через гугл и что же я вижу: https://www.winamp.com/
    пиздец петушни наделали.
    благо сам винамп все еще заебись.
    Ответить
      • А ведь каких-то джвадцать лет назад точно такую же хуйню, как на фоне этого дерьмосайта, этот же «Winamp» умел рисовать практически не загружая процессоры — те, что порядка на четыре медленнее современных…

        Какая великолепная демонстрация тотальной дегенерации ПО.
        Ответить
    • Шiпатр уже не ТОРТ. Из него делают очередную платформу для прослушивания музыки.
      Ответить
    • Ты провалился в девяностые? Купи мне там долларов, деньги отдам.

      Ссуть свинампа в том, что там был нестондартный декодер Нетронь, который говнякал скачанные Напсером 128kbps мрз ради пирфоманса. Больше ничего за этим хайпом не стоит, томущо фрау Нгофер раздавала декодеры бесплатно и можно было делать свой helloworld2000 с mciSendCommand и тиками.
      Ответить
  • Я сьогодні серфив в Інтернеті більше 3 годин, але жодної цікавої статті, подібної до вашої, я так і не знайшов. А це досить цінно для мене. На мій погляд Особисто на мій погляд, якщо всі власники сайтів та блогери будуть створювати хороший контент, як і ви, всесвітня мережа буде набагато кориснішою, ніж будь-коли раніше.
    Ответить
    • Девушки, которые увлекаются веганами, рожают только девушек
      Ответить
      • В данном случае, он едва ли веган. Тут намешано всякой мути, в том числе инцест и интоксикация после моих шалостей.
        Ответить
  • У меня пара учёток «Яндекса» улетела.

    «Ко-ко-ко, Ваш аккаунт в опасности. Введите ответ на кококококонтрольный вопрос, куд-кудах-тах-тах!»

    А я ебу, что я писал в качестве ответа? Я вводил случайную строку, которую трудно подобрать, чтобы мою учётку не взломали.

    Пидоры.
    Ответить
    • Это ещё что, гугл у меня как-то увёл почту под предлогом "пароль вы знаете, секретный вопрос тоже, однако залогинтесь из той страны, где регистрировались". Ладно хоть токен остался в почтовике, успела всё перенести.
      Ответить
          • Понял. Сразу посчитает ботом.

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

              AS — маленькие паутинки.

              IX — узлы, которые их связывают в большую сеть.

              Если хочешь, чтобы «Интернет» разбился на локалки, бомби IX.
              Ответить
      • Для восстановления залогиньтесь с айпи-адреса и с устройства, с которого регистрировались.
        Ответить
      • P.S. Какой-нибудь питух в гугле за внедрение этого искусственного идиота небось премию получил.
        Ответить
        • Я ещё вспомнил публикацию о том, как «Фейсбук» забанил целую семью за «множественную регистрацию с одного айпи-адреса».

          То есть по мнению менеджеров «Фейсбука» у каждого члена семьи должен быть свой интернет-канал.
          Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8