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

0

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

#43: https://govnokod.ru/26604 https://govnokod.xyz/_26604
#44: https://govnokod.ru/26627 https://govnokod.xyz/_26627
#45: https://govnokod.ru/26635 https://govnokod.xyz/_26635
#46: (vanished) https://govnokod.xyz/_26646
#46: (vanished) https://govnokod.xyz/_26654
#47: https://govnokod.ru/26671 https://govnokod.xyz/_26671
#48: https://govnokod.ru/26707 https://govnokod.xyz/_26707
#49: https://govnokod.ru/26750 https://govnokod.xyz/_26750
#49: https://govnokod.ru/26776 https://govnokod.xyz/_26776
#50: https://govnokod.ru/26804 https://govnokod.xyz/_26804
#51: https://govnokod.ru/26809 https://govnokod.xyz/_26809
#52: https://govnokod.ru/26817 https://govnokod.xyz/_26817
#53: https://govnokod.ru/26833 https://govnokod.xyz/_26833
#54: https://govnokod.ru/26840 https://govnokod.xyz/_26840
#55: https://govnokod.ru/26844 https://govnokod.xyz/_26844
#56: https://govnokod.ru/26862 https://govnokod.xyz/_26862
#57: https://govnokod.ru/26890 https://govnokod.xyz/_26890
#58: https://govnokod.ru/26916 https://govnokod.xyz/_26916
#59: https://govnokod.ru/26934 https://govnokod.xyz/_26934
#60: https://govnokod.ru/26949 https://govnokod.xyz/_26949
#61: https://govnokod.ru/26980 https://govnokod.xyz/_26980
#62: https://govnokod.ru/26999 https://govnokod.xyz/_26999
#63: https://govnokod.ru/27004 https://govnokod.xyz/_27004
#64: https://govnokod.ru/27020 https://govnokod.xyz/_27020
#65: https://govnokod.ru/27027 https://govnokod.xyz/_27027
#66: https://govnokod.ru/27040 https://govnokod.xyz/_27040
#67: https://govnokod.ru/27049 https://govnokod.xyz/_27049
#68: https://govnokod.ru/27061 https://govnokod.xyz/_27061
#69: https://govnokod.ru/27071 https://govnokod.xyz/_27071
#70: https://govnokod.ru/27097 https://govnokod.xyz/_27097

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

Комментарии (494) 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 (резервный чат)
    Ответить
  • Заебали со своими оффтопами. Они убили весь дух и смысл сайта. Хотите пиздеть о политике или обсасывать статейки с Хабра - уёбывайте в чат и не коптите здесь небо.
    Ответить
    • Тут есть два варианта
      * Не работайте с мудаками
      * Если второй муж бьет вас по роже, то дело не в муже, а в роже

      Причем оба варианта могут быть одновременно.


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

          Если ты видишь нытика, которому насрало в штаны жадное хуёвое начальство, проклятые капиталисты, и бессердечные менеджеры не оценили его огромный вклад в продукт, и так было несколько раз, то скорее всего перед нами анскил:/


          Хотя вот тут пиздец обоюдный


          Тут я стала замечать подозрительное отсутствие новых задачи в Jira. К тому же, от меня попросили zip архив сайта, над которым я работаю. Я не смогла сжать проект из-за кириллицы в названиях папок и спросила у ПМ, зачем он им, если можно скачать код с repository? Пм ответил, что выходит новый разработчик и он пока не получил доступов.


          Какой ротоёб ))
          Ответить
    • >>> 6 октября 2019 Как я проработала 3 месяца в Я.Маркете и уволилась
      >>> сегодня в 13:48 Я потратила 60к на юристов, но меня все равно уволили

      Какой багор )))
      Ответить
      • А!
        > На первой работе меня заставили написать по собственному.
        > В другую компанию требовался опыт работы на VueJS.
        > Ровно в 18 мне позвонил ПМ и начальник, в звонке также была начальница отдела рекрутинга и куратор от аутстаффера. Босс объявил мне, что
        >> Слишком много багов, плохие отзывы от коллег, слишком много вопросов бизнесу

        То есть её уже как минимум три раза увольняли!
        Ответить
        • Занятно. Я теперь думаю, переходить ли по тем ссылками и читать этот треш и угар целиком, либо же прочитать всё на ГК, ведь всё равно разберут на лулзовые цитаты.

          P.S. и накормят ими генератор психозы.
          Ответить
          • Сходи, а то получится "голос у шаляпина говно, мне рабинович напел"
            нужно знать оргинал
            Ответить
            • Читаю статью...

              > начальник мог сделать фотографию нас распивающих
              > нормально работать из дома или приходить к 12, если было устное согласие от начальства.
              > 1-2 дня работать из дома
              > уволят за прогул
              Что за питушня? Звучит как подстава со стороны конторы.
              Ну или она накосячила, и подвернувшиеся фото использовали как формальную причину, а если бы от неё была польза, можно было работать хоть с 12 до 14 и при этом бухать.

              > Теперь отслеживать время начала работы стали по статусу в чате. Если он желтый, то тебя нет, а если зеленый, то ты на работе.
              > Нужно было подключаться к удаленному рабочему столу через RDP, потом вводить магические цифры из Mobile Pass. И повторять так каждые полчаса.
              Это уже совсем питушня. Я ещё понимаю, посещаемость онлайн занятий отмечать по наличию в зуме/гугломите/голосовом чате дискорда, но смотреть по чатику пердолить работников раз в полчаса - это зашквар.

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

              > Я поняла, что я ввязалась в какую-то войну, где с меня будут требовать объяснительные за опоздания на каждые полчаса
              > Что меня просто уволят за опоздания даже без 1 оклада.
              Ну тут сразу валить надо. Специалисту дешевле устроиться и получать зарплату, чем тратить время и деньги на лотерею с юристами против целой компании.
              Ответить
                • Фиг меня знает. Поэтому и писал, что если задеаноните, то пишите письма, иначе связь с ГК прервётся.
                  Ответить
              • Неясно, почему там у них не было испытательного срока, и насколько автор искажает правду.
                Может, к ней каждый день подходили и напоминали о возможном увольнении.
                Ответить
          • Да, лучше пробегись по оригиналам. Ну и в комментах там полно лулзов и внезапных разоблачений.
            Ответить
        • «Я опять испытала легкий шок. Много вопросов бизнесу? Я считала плюсом тот факт, что выполняла роль аналитика на проекте, декомпозировала задачи и указывала на проблемные места»

          — Сколько времени вам понадобится, чтобы вот тут немного сдвинуть текст вправо?

          — Ну, давайте проанализируем поставленную задачу, чтобы я могла провести структурную декомпозицию и разбить её на конкретные подзадачи. Кроме того, с точки зрения бизнеса, это будет плохим решением в долгосрочной перспективе, потому что вы – проблемное место в этом бизнесе, только не обижайтесь. А теперь, кстати, я иду выпивать и есть осетинские пироги с тимлидом, чао-какао (';
          Ответить
      • > потратила 60к на юристов

        Так хотелось ещё немного поработать с мудаками?)
        Ответить
        • З.Ы. Или мудаками она их начала считать уже после увольнения?
          Ответить
          • То есть ты подаешь в суд на людей, но мудаками ты их несчитаешь?
            Ответить
            • > подаёшь в суд

              А можно было просто уйти в декрет. И хуй кто уволит.
              Ответить
                • Но они ели осетинские пироги и не обращали на неё внимания.
                  Ответить
                  • Ели бабьи пироги, смузи запивали.
                    О чем баба говорит, они не понимали!
                    Ответить
    • «Все началось с того, что я люблю ходить по конференциям и частенько хожу на них в Яндекс, Mail.ru и другие крупные компании».

      Шлюха! Кстати, она ещё и в зашкварные крупные компании ходит.

      «Но не все так радужно. Не успела я проработать и месяц, как Сбер объявил о прекращении финансирования Bringly, проект оказался убыточным»

      Какое занятное стечение обстоятельств )))

      ***

      «Это была стандартная аутсорс-фирма. Я сидела в полном шоке, я проработала в небольшой компании из 5 человек год. Мы отмечали дни рождения с пиццей, колой и алкогольными напитками. Тогда я еще не знала, что начальник мог сделать фотографию нас распивающих прямо в офисе и уволить по статье. В фирме насаждалась дружно-семейная атмосфера с анекдотами про евреев (начальник был еврей)»

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

      «На свой день рождения я заказала кучу пицц и осетинских пирогов в офис»

      Блять. Чем дальше читаю тем мне смешнее и хуёвее.
      Ответить
        • Может быть, она та самая мифическая дама, которая сидит на говнокоде?
          Ответить
      • Я им и осетинских пирогов, и анекдоты их глупые слушала, а они, пидары, всё равно уволили
        Ответить
          • осетинский пирог, кстати, Заебись
            Особенно с мясом

            В нем тесто тонкое, а мяса дохуя
            Ответить
              • а что, и такие бывают?)

                я только с сыром и с мясом знаю
                Ответить
            • Советую к употреблению «курник», только там всё наоборот касательно теста и мяса.
              Ответить
              • Советую к употреблению «пирожок» из маленького лотка на границе города. Получаешь кусок белой буклки размером с кулак, и в ней, например, одну вишню. Или кусочек курицы размером с ноготь
                Ответить
                • Или кусочек ногтя размером с кусочек курицы размером с ноготь.
                  Ответить
                • Зашли [мы с другом] в один из ларьков купить лук — тот крупный, ровный, который привозили тогда корейцы.
                  Приятная, добрая, пожилая продавщица:
                  - Цы уæ хъæуы, лæппутæ?
                  Валерик: Иу, æртæ килæйы нын хъæдындзтæ абар.
                  Продавщица: Уый уын мæ бар.
                  Валерик: Сæ дзæбæхтæ нын авзар, больницæмæ нæ хъæуынц...
                  Продавщица: Хорз, хорз, мæ къонатæ.
                  И давай отбирать. Через минуту останавливается, потом медленно оборачивавется и с удивлëнным видом:
                  Кæææдæææм уæææ хъæææуынц?!
                  Ответить
                  • Переведи на «русский». Ну или хотя бы на «PHP».
                    Ответить
                    • Могу перевести на «собачий».

                      Зашли [мы с другом] в один из ларьков купить лук — тот крупный, ровный, который привозили тогда корейцы.
                      Приятная, добрая, пожилая продавщица:
                      - Гав ав гав-гав, гав-гав-гав?
                      Валерик: Ав, ав-гав гав-гав-гав гав гав-гав-гав ав-ав.
                      Продавщица: Ав ав гав гав.
                      Валерик: Гав гав-гав-гав гав ав-гав, больница-гав гав гав-гав...
                      Продавщица: Гав, гав, гав гав-гав-гав.
                      И давай отбирать. Через минуту останавливается, потом медленно оборачивавется и с удивлëнным видом:
                      Гааав-гааав ааав гааав-гав?!
                      Ответить
          • А осетинский пирог это как американский пирог, но про стертора?
            Ответить
        • «Я им и осетинских пирогов, и вореции их глупые слушал, а они, пидары, всё равно в уёбков записали» © стретор
          Ответить
    • >Я не смогла сжать проект из-за кириллицы в названиях папок

      >Да я и сама могла нанять кого-то за меньший прайс на мою работу, если бы не Mobile Pass.

      Какая трудовая этика )))
      Ответить
    • Очередное обсуждение тупой херни с хабра? Вас еще не заебало?
      Ответить
      • Лучше тупая херня с хабра, чем камерунские хуи.
        Ответить
      • Предложи интересную тему

        Заверни чонить лоулевелного
        Ответить
      • Если бы мы обсуждали тут только микроконтроллеры, то они бы тебя так же заебали рано или поздно)

        Ну, если ты, конечно, не дальнобойщик из Германии, который после работы играет в Truck Simulator.
        Ответить
    • Я, конечно, читала про разбивание лица на кодревью, но не знала, что такое бывает. Потом подключился другой прогер и указал мне на этот ресурс.

      З.Ы. Нет, не на этот, к сожалению.
      Ответить
    • Востребованный программист с +30 заявками от рекрутеров на линкендине*.

      * организации, запрещённой на территории РФ.
      Ответить
      • Какой потенциал! На тридцать статей про внезапные увольнения хватит!
        Ответить
      • Рекрутеры мне тоже регулярно пишут, не реже нигерийских принцев.

        Иногда пишут с адреса krupnaja_companija2020@gmail.com и приглашают в крупную международную компанию, правда не всегда говорят, в какую именно
        Ответить
        • > gmail.com
          Ого, наверное, серьёзная компания.

          Заметил, что у многих госучреждений в моём Дальнезалупинске контактные адреса выглядят как «gosrosrogakopyta_dalnezalupinsk228@mail .ru». Интересно, как к этому законы относятся.
          Ответить
          • > как к этому законы относятся

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

            Намекни им, я думаю они поддержут твою инициативу.
            Ответить
            • Технически конечно нахуй не нужно никаких выделенных серверов для запожинсков, а нужно ``kon-kolodez.lipetsk.gov.ru``
              Пачку серверов можно расположить в нужных регионах (их хватит десятка на страну).
              Ответить
    • [quote]
      Надо с точки зрения фронтендера излить свою боль и пожаловаться, что у вот у бэкендеров можно с C# .net core перейти на Java Spring, а у нас нос воротят, если ты работал с React Native и не знаешь Styled Components, которые используются в веб версии React.
      [/quote]
      лол
      Ответить
  • Схлестнулись два величайших программиста: Юля и Филип Лайвкодер

    Филип открыл для себя, что динамическая типизация менее ценна, чем статическая
    Юля не согласна:

    JS был создан таким, какой он есть и никаким иначе. Нужно использовать его фичи с умом. Да, мне было удобнее писать на C# или Java благодаря типам, интерфейсам, абстрактным классам. Но это не значит, что в любом проекте нужно городить огород из TS/Flow поверх JS.

    https://habr.com/en/post/500926/
    Ответить
    • > JS был создан таким, какой он есть и никаким иначе.

      Юлю надо познакомить с Ротоёбычем, я думаю они найдут общий язык.
      Ответить
    • Я думал хабру некуда дальше скатываться, но открыл первый раз за год и неслабо удивился.
      Ответить
    • "Король разработки". Судя по числу комментов, холивар разгорелся.
      Ответить
      • у него все статьи такие

        весь путь его взросления описан
        Ответить
    • 1987 комментов, пипец!

      Это целых пять IT-оффтопов. Как жаль, что мне, простому смертному, не судьба это почитать.
      Ответить
    • https://habr.com/en/company/vdsina/blog/525738/

      Человек несколько абзацев посвящает тому, как со своими огромными яйцами отказался от префикса I в имени интерфейса. Дурка ебать.

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


      каков багор...
      Ответить
    • "Что такое вообще «традиционно ориентированный язык»?"
      "как вы вообще выясняете ориентацию программистов на Haskell или C++?"
      "Нанимают сишников-системщиков и заставляют их монадки моноидировать."
      "В языке «ться» и «тся» не различаются,..."

      Походу там пиздец-оффтоп мощнее местного.
      Ответить
      • > Что такое вообще «традиционно ориентированный язык»

        Всё кроме свифта и объективного си.
        Ответить
          • Ну это погрешность, а яблочные языки -- бай дизайн нетрадиционные.
            Ответить
            • Действительно, ObjC очень необычен со своей идеей посылки сообщения (как в сматлоке) и в возможностью послать сообщене нилу, а уж синтаксис у него и вовсе огонь
              Ответить
    • > "%s был создан таким, какой он есть и никаким иначе"

      Вот да, если б он был создан каким-то не таким, каким он создан, то он ведь тоже был создан таким, каким он есть, правда ведь? Т.е. что-то, созданное каким-то - оно создано так, как оно создано, и никак иначе. Какая глубокая мысль!
      Ответить
      • strcat() был создан таким, какой он есть и никаким иначе.
        Ответить
  • Это -- тайпскрипт
    type DeepMerge< A, B > =
        (A|B) extends {} ?
            & Partial< Omit< A, keyof B > >
            & Partial< Omit< B, keyof A > >
            & (A|B)
            & { [ key in keyof (A|B) ]: DeepMerge< A[key], B[key] > }
        : (A|B)


    Он легко читаемый, удобный и современный.
    А С++ старый, сложный, и нечитаемый.
    Не перепутай, анон
    Ответить
      • после работы смогу заняться, так сходу н получится
        Ответить
          • забыл(( я глянул краем глаза, там делается новы тип из объединения а и б, но все поля опциональны, так что поля могут быть и от А и от Б.
            И это делается вглубину рекурсией, так что если в А у тебя есть поле типа C, а в B есть поле типа D, то получается и их пересечение тоже.
            Ответить
  • Здравствуйте! Это форум анимешников? Как пропатчить «KDE» под меня?
    Ответить
      • Патчить бинарные пакеты на опенсурсной оси -- это сурово.
        Ответить
        • Имеется ввиду конечно же не дифф в формате patch Ларри Уолла, а обычный pkg upgrade: он накатит новую версию, примерно как installpkg в Слаке.
          Ответить
  • Блядь, "Application was halted by an exception" и правда 200 ОК.

    Какой анскилл )))
    Ответить
  • http://jcup.ru

    Какой сайт )))

    Под IE лучше не заходить, кстати.

    «Не все версии PHP одинаково полезны, некоторые генерируют невалидные WEBP изображения. История (с хорошим финалом) о том, как я чуть не отказался от использования WEBP на этом блоге. На примере показываем, в разработке не существует безвыходных ситуаций»

    Наверное, что-то интересное. Но я не знаю пхп, а потому мне название статьи но о чем не говорит.
    Ответить
    • http://jcup.ru/java/vzlom-parolya-metodom-brutforsa

      какой хакер ))

      во-первых mysql, торчащий наружу с аунтенифмикацией по паролю это сразу кал

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

      в-троетьих пять букв в пароле это пиздец

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

      и
      >несколько потоков.
      тебе тут не сильно помогуть
      Ответить
      • >На моем компьютере, на базе камня Xeon X3450, перебор миллиарда комбинаций занимает в среднем 10 сек 🙂


        Еще один свидетель секты /hw/зион.
        Ответить
        • Я сейчас загуглил сколько стоят процы и охуел, за intel core i-9 просят около 40 тысяч рублёв, а за i-3 – около 13-ти тысяч. Много, блин (((

          Собрать охуенный комп, это, получается, пипец дорого, я думал намного дешевле...
          Ответить
            • https://m.iguides.ru/qa/5547/

              «Сборкой ПК не увлекаюсь, так что просто поделюсь с вами ссылочками на инфу, найденную в сети»

              Смотрите, это же я отвечаю на вопросы гуеста про C++!

              Ладно, давайте посмотрим что там по ссылкам.

              «Итак, если вы собираетесь купить компьютер за 25 тысяч, то намерения у вас уже серьезные»

              Статью писали, видимо, для syomы.

              «Начнем. Компьютер за 25000 рублей не будет существенно отличаться от того, что я рекомендовал в предыдущей статье, где верхней планкой было только 15 тысяч»

              Ладно похуй, не такие уж и дорогие эти ваши игровые ПК.
              Ответить
              • Да ладно, думаю на рязани 3600 уложишься в штуку. Тем более баксик под 80, а не 60.
                Ответить
                • нет, $2000 более адекватная оценка
                  и это за 1 видеокарту из верхнего сегмента, без сли всяких
                  Ответить
                  • в целом, ит депендз что называть охуенным
                    если чуть лучше чем печатная машинка, то и $1000

                    но если 7-9 рязань, 64 рам, 1+ТБ не всратый ссд, не всратый кулер, не всратый корпус, не всратый БП, ну и похуй какая видеокарта (не играть же на компе в самом деле), то уже дороже, и это без периферии притом
                    Ответить
                    • >64 рам

                      И это только чтобы хром нормально работал.
                      Ответить
                        • Это вы у себя базу поднимаете, три виртуалки, или гиганские джава или .net проекты открываете?
                          Ответить
                          • С виртуалками память очень быстро отлетает, кстати. Не давать же ей 2 гига и ждать пока просвопуется. Ну и со всякими эмуляторами для андроидов тоже.

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

                            Ну и IDE с браузерами, да.
                            Ответить
                            • ну 8 гигов на компиляцию С++ с шаблонами
                              4 гига CLionу или Студии с решарпером
                              16 гигов виртуалке
                              а еще?
                              Ответить
                              • Дык ты комп не на год берёшь, остальное на амортизацию. Требования же на месте не стоят.

                                З.Ы. Ну и как кеш. Файлов то дохуя, чем больше оперативки -- тем быстрее всякие grep'ы да git'ы. Хотя с nvme это уже не так актуально.
                                Ответить
                          • А чё такого базу в докере и у себя поднять? Мне сразу на сервере через ci её тестить? Тогда можно и на мечах сражаться, типа компилинг.

                            Несколько интелий идей, браузер, а также фигма, камунда, ПОЧТОВЫЙ КЛИЕНТ на электроне - хуяк хуяк, и вот уже не кажется, что в системе 2% занято.

                            Раньше 32 покупал разрабам, а сейчас 32 уже не оч.
                            Ответить
                            • У меня 8 гб рам, компилировать прошивки под контроллеры вполне достаточно, а 100500 говноиде и всякую парашу на электроне я не запускаю
                              Ответить
                              • > 8гб рам
                                > прошивки под контроллеры

                                Не стыдно тебе? Деды на форте в 64кб могли упихать прошивку телескопа, ui для неё и конпелятор с редактором.
                                Ответить
                                • Не, это понятно, компилировать паршивки можно и на 256 мегабайтах рам, а 8 гиг это более чем дофига для таких задач, разве что какие-то говноIDE на жабе могут что-то отжирать (а не сама компиляция). У меня до этого было вообще 4 гиг на этом компе, но браузер слишком часто залазил в своп если много вкладок открывать, и пришлось расширить до 8 через Б/У оперативку с помойки.
                                  Ответить
                            • > Несколько интелий идей, браузер, а также фигма, камунда, ПОЧТОВЫЙ КЛИЕНТ на электроне - хуяк хуяк, и вот уже не кажется, что в системе 2% занято.

                              Широко жил партизан Боснюк!
                              Ответить
                            • да не, я не против локальной базы, я потому и спросил.
                              Ответить
                          • Сейчас работаю на service fabric'е, 16 уже некомфортно
                            Ответить
                    • > 64 рам

                      Блядь, опять обновляться, а я думал 32 хватит на пару лет хотя бы ;(
                      Ответить
                  • А, ну если мы про игровые компуктеры, то да. Топ карточки по 1.5-2к баксiв
                    Ответить
    • @Override
          public void keyPressed(KeyEvent e) {
              if (e.getKeyCode()==KeyEvent.VK_LEFT) isLeft = true;
              if (e.getKeyCode()==KeyEvent.VK_RIGHT) isRight = true;
              if (e.getKeyCode()==KeyEvent.VK_UP) isUp = true;
              if (e.getKeyCode()==KeyEvent.VK_DOWN) isDown = true;
          }
       
          @Override
          public void keyReleased(KeyEvent e) {
              if (e.getKeyCode()==KeyEvent.VK_LEFT) isLeft = false;
              if (e.getKeyCode()==KeyEvent.VK_RIGHT) isRight = false;
              if (e.getKeyCode()==KeyEvent.VK_UP) isUp = false;
              if (e.getKeyCode()==KeyEvent.VK_DOWN) isDown = false;
          }
       @Override
          public void paint(Graphics gr) {
              Graphics2D g2d = (Graphics2D)gr;
              int r = random.nextInt(256);
              int g = random.nextInt(256);
              int b = random.nextInt(256);
              g2d.setColor(new Color(r,g,b));
              g2d.setStroke(new BasicStroke(4f));
              g2d.drawOval(x-25, y-25, 50, 50);
          }

      да ну ёбтвою мать
      Ответить
    • имхо, 90 это или у него что-то погнано (что оч странно на ноуте) или термопаста криво лежит или охлаждение сломалось или радиатор не плотно прилегает, хз

      хотя я не зна что унего за камень, может у кого-то это и рабочая температура
      Ответить
      • Вот ты не любишь пхп. Что бы ты предложил минимально изменить, чтобы полюбил?
        Ответить
              • Как-то приснился кошмар, что из под кровати вылез пхп и утащил в мир разработки веб интерфейсов для микроволновок.
                Ответить
                • >утащил в
                  Алгоритм вывода не занятых таймслотов с шагом по 30 минут
                  // определить сколько слотов занимает процедура
                  $timeneed = $servicetime / $timestep;
                  echo ("Услуга занимает: ");
                  echo ($timeneed);
                  echo (" слота, или ");
                  echo ($servicetime);
                  echo (" минут<br/>");
                  // определяем рабочее время (часы)
                  $hourstart = 8;
                  $hoursend = 20;

                  https://phpclub.ru/talk/threads/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0-%D0%BD%D0%B5-%D0%B7%D0%B0%D0%BD%D1%8F%D1%82%D1%8B%D1%85-%D1%82%D0%B0%D0%B9%D0%BC%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2-%D1%81-%D1%88%D0%B0%D0%B3%D0%BE%D0%BC-%D0%BF%D0%BE-30-%D0%BC%D0%B8%D0%BD%D1%83%D1%82.87165/
                  Ответить
                  • «Решай задачу по шагам.
                    Каждый получасовой интервал определяется 1 значением - временем начала.
                    Напиши функцию isBusy, которая будет определять - является ли этот получасовой интервал занятым.
                    Пробежись в цикле по всем получасовым интервалам от начала рабочего дня до окончания.
                    Если интервал свободен - увеличивай счетчик свободных на 1. Если счетчик =3 - выводи интервал (3 последних), и уменьшай счетчик на 1.
                    Если интервал занят - сбрасывай счетчик на 0.
                    профит...»

                    А потом рабочий день станет на пять минут короче и придётся всё переписывать (т.е. все охуеют).
                    Ответить
                    • > А потом рабочий день станет на пять минут короче

                      В деда мороза ты тоже веришь?
                      Ответить
        • Ничего уже не исправить в пыхе, к сожалению. Господь, жги.
          Ответить
  • Мне кажется, или есть какая-то связь между кодом 403 Forbidden и недавними выборами в США?
    Ответить
  • «Говнокод» разбанили. Доброе утро.
    Ответить
    • Доброе.

      Как-то икарус кидал сайт, где в урле зашит исходный код страницы.
      Такое сайт могут заблокировать, если я буду срать ссылками «гаш, мет, вторчермет»?
      Ответить
      • В первую очередь следует уяснить, что товарищу майору глубоко похуй на все эти технические детали. Глубина его похуизма сравнима разве что с глубиной Марианской впадины.
        Если товарищ майор (на самом деле, конечно, не майор, а тётенька предпенсионного возраста, которая за миску каши сидит на откровенно паршивой работе — несколько лет назад видел статейку про «экспертов» «Роскомнадзора») заходит со своей рабочей ПЭВМ по ссылке и видит там вторчермет — он эту ссылку отправляет в Реестр (предварительно отослав уведомление куда-то в направлении хостера сайта). Всё.
        И вот потом, после отправки письма счастья, уже ты сам будешь объяснять товарищу майору (или суду), где у тебя там что зашито и почему твой сайт, на котором вторчермет (нотариально заверенный скриншот прилагается), на самом деле законов не нарушает. Если он не нарушает.
        Ответить
  • Среди моря синяго лежит латырь-камень; идут по морю много корабельщиков, у того камня останавливаются; они берут много с него снадобья, посылают по всему свету белому. Потому Латырь-море морям отец, Потому Латырь-камень каменям отец!
    Ответить
    • Под восточной стороной есть окиан-синее-море, на том окияне на синем море лежит бело-латырь-камень, на том бело-латыре-камне стоит святая золотая церковь, во той золотой церкви стоит свят золот престол, на том злате престоле сидит сам Господь Исус Христос, Михаил-архангел, Гавриил-архангел…
      Ответить
      • зря, зря
        там по lldb тоже учебник

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

          > там по lldb тоже учебник
          Про lldb там нихуя нет по-сути, просто написали что какие-то хоткеи есть.
          Ответить
          • откуда в вас этот снобизм? Кроме микроконтроллеров есть и другие виды деятельности, например разработка приложений под ios, и уменье быстро жмыкать на кнопочки в xcode и дебажиться в ллдб тм очень даже в тему.

            Конечно, лучше бы он написал про скриптование lldb, или про работу с instruments (это гуй обертка вокруг dtrace, довольно мощная), но и и так статья может оказаться полезна яблопрогеру
            Ответить
      • ⌘ это какая-то макоебская хуйня. 10x инженер обязательно должен пользоваться сраным огрызком?

        Вообще эту хуйню я давно еще видел, когда справочник ПДД читал, такой знак в Украине есть в правилах. http://pdd.ua/33/6.24/
        https://ilenta.com/news/misc/misc_8458.html и как раз оттуда он и был подсмотрен. Но макоебы наверняка подумают, что это наоборот кто-то у Apple спиздих эту хуйню с завитушками и втулил знак. Типа "ууу смотрите, эта хуета с завитушками прямо как на клавиатуре у меня в макпуке!!! Всё у эппл сплагиатили!"
        Ответить
    • >копировать/вставить/удалить).
      самая полезная функия для инженера

      нос праведливости ради: знать шорткаты и хотки IDE и дебагера и правда полезно
      Ответить
  • Петухи, а вы часто слышите свой голос в записи? Вас тоже бесит? Говорят, это нормально, так и должно быть.
    Ответить
    • да. Говорят что свой голос кости искажают

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

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

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

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

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

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

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

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

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

              > Кости искажают какой голос, в записи или реальный?
              Кости искажают реальный, поскольку обычно мы слышим наружные голоса через воздух, а внутренний - через воздух и через кости, но в воздухе он, по идее, должен сильно затухать.
              Ответить
              • Ну так почему слушать свой голос в записи - неправильно?
                Ответить
                • Х.з., мне норм. Хотя диктор из меня, конечно, хуёвый. Сбиваюсь постоянно.
                  Ответить
                    • А, да. Я слышу нечасто. Говорю местами как ЛГБТшник из Москвы, противно растягивая некоторые гласные.
                      Ответить
                      • Точнее, бОльшую часть времени говорю как ЛГБТшник, а местами растягиваю гласные. Хотя сам слышу голос натурала, когда говорю.
                        Ответить
                        • Извини, я не буду гуглить реальные примеры говора ЛГБТшников.
                          Ответить
                    • Ну я на него и отвечаю, меня не бесил мой голос в записи. Бесила куча другой хуйни, но не голос.
                      Ответить
                      • Ну значит ты снимал, чтобы куда-то выложить, привык. А вот те, кто слышит не часто - охуевают.
                        Ответить
                        • Меня вот пиздец бесит, что я сбиваюсь и начинаю говорить эти ёбаные "ээ". В разговоре на это не обращаешь внимания, а в записи прям ухо режет.
                          Ответить
                          • С детства не любил «э-э-э», теперь вместо них получаются просто паузы в речи. Какой багор )))
                            Ответить
                            • Ну да, я иногда секунд на 5 зависаю, пытаясь выкарабкаться из причастного оборота. Какой real-time )))
                              Ответить
                          • ну типа... эээ.. ну это... как его... что ты сказал, то, что тебя бесит ээ... а чего такого-то?
                            Ответить
                • Не совсем неправильно. Но потому, что мозг натренировался слушать голос по-другому, он может неадекватно реагировать на прослушивание правильным образом.
                  Я считаю, слушать можно, но судить о прослушанном без подготовки - не всегда правильно.
                  Ответить
        • Кстати да. Упомянул про растягивание и пришла мысль.

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

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

    Один питух в джаваговне через JNA устанавливает multi threading model для COM, а другой на том же самом треде из JNI делает single thread apartment, получает от винды залупу RPC_E_CHANGED_MODE, забивает на это, и при попытке CoCreateInstance получает E_NOINTERFACE, и роняет всю JVM нахуй.

    windgb не понимает жабьего стека разумеется, и потому при бряке на CoInitializeEx показывает просто пачку каких-то jna1231324234.dll (их высирает джава для JNA).

    Приходится анфризить остальные джаватреды и делать jstack.

    Интересно, реально написать windbg extentsion, чтобы смотреть и на джавастек тоже?

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

      У тредов есть имя?! З.Ы. А, в десятке добавили.

      > windbg extension

      Я думаю да, в конце-концов это просто ковыряние в памяти. Но там поди придётся как-то у джита выяснить структуру фреймов? Х.з. как там стек у джавы устроен.
      Ответить
      • >в десяте
        да, именно
        https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-setthreaddescription

        джавка свое имя треда (оно там со времен царя гороха есть) туда пхает.
        Оно где-то в TEB лежит, думаю. Причем хз есть ли оно на уровне ядра или в Win32API. Скорее второе.

        >ковыряние в памяти
        ну да, но нужно ведь понимать формат.

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

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

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

            причем для x64 и x32 по разному написать

            ну по идее можно, наверное
            Ответить
        • > Оно где-то в TEB лежит, думаю. Причем хз есть ли оно на уровне ядра или в Win32API. Скорее второе.
          Оно пихается системным вызовом
          NtSetInformationThread(thread_handle, 0x26, unicode_string_ptr, unicode_string_len);
          , где unicode_string_ptr — это уко-ко-козатель на https://docs.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-_unicode_string (см. RtlInitUnicodeStringEx()), а достаётся — системным же вызовом
          NtQueryInformationThread(thread_handle, 0x26, return_ptr, return_ptr_len, out_return_len);

          return_ptr — это память под UNICODE_STRING (выделять саму строку не нужно), out_return_len — опциональный уко-ко-козатель на выходной аргумент-размер записанных данных.
          Ответить
          • значит, сетаки в ядре, спасибо
            Ответить
          • зы: блядь, он же не документированно

            официально можно тока
            ThreadPriority, ThreadBasePriority, ThreadPagePriority, or ThreadPowerThrottlingState,
            а 0x26 нельзя

            как ты вообще это нашел? ходил дебагером за вызовом SetThreadDescription?
            Ответить
            • > ходил дебагером за вызовом SetThreadDescription?
              Подтверждаю. У меня для таких целей под рукой лежит простенький hello world, на котором можно по-быстрому ставить вычислительные эксперименты.
              Вот код SetThreadDescription(): https://i.imgur.com/BxIZymG.png.

              Я ещё для проверки вызвал SetInformation/QueryInformation прямо из дебаггера (Ctrl+* на начало функции и вручную поправить регистры; не забыть выровнять rsp): работает нормально.
              Ответить
              • кокококой хакер

                так ведь после следующего обновления хуйню могут и сломать же, интерфейс ядра не обязан быть стабильным
                Ответить
                • Ну, на практике эти инфо_классы не меняют. Плюс, они скорее полудокументированы: ЕМНИП, где-то в ntddk.h этот класс таки перечислен.

                  Ну и в любом случае, всегда можно использовать вполне документированную пару SetThreadDescription()/GetThreadDescription().
                  Ответить
    • > делает single thread apartment

      Кстати, я из-за этого свои чистые треды создавал для работы с COM. Потому что хуй знает, что там вызывающий код накрутит.
      Ответить
      • к сожалению, там вся тусня идет на event dispatch thread, на котором жабий гуй месседжи обрабатывает и рисуется

        если уносить в другой тред, то придется много чего синронизировать

        я лучше завтра у питузов узнаю, зачем им вообще мультитред
        Ответить
        • Потому что STA -- ёбаный костыль для легаси кода и не работает без виндового диспетчера событий? Вроде в STA вызовы не прилетают из других тредов если не дёргать GetMessage.

          З.Ы. Ну хотя у тебя event dispatch thread, в нём норм должно работать.
          Ответить
          • Примерно)
            STA это означает "я потоконебезопасный, пожалуйста синхронизируй все вызовы меня". Ну и вызовы тебя из других тредов или процессов прилетают через виндомесседжи
            Ответить
        • > COM creates a hidden window associated with each STA.

          Неспроста эта ось называется windows )))
          Ответить
            • Сокетам не нужен hwnd. Функция из того треда нужна чтобы ты мог юзать сокеты и окна в одном потоке.
              Ответить
              • Приведи реальный пример, когда тебе по работе было нужно юзать сокеты и окна в одном потоке.
                Ответить
                • Эм, ну на сишке напрямую я такого не писал... Но в qt и делфи я делал однопоточную хуйню с окнами и сокетами.
                  Ответить
            • Это ебаный костыль чтобы ждать события в сокете и при этом крутить месседж луп, видимо.

              но вообще неблокирующие сокеты ненужны же, есть completion ports
              Ответить
          • какой IPC ))
            А потом ты запускаешь spy++, а у тебя 100500 каких-то левых окон)

            Но вообще COM просто оче древнее говно, времен примерно второй половины 90-х, отсюда и тяжкое наследие
            Ответить
      • Кстати, я же верно понимаю, что если у сервер inproc, и threading model=Both (кстати, как это посмотреть без хождения в реестр и ручного листания oleview?), то при создании объекта на STA мне вообще никуда маршеровать через Stream не надо будет, то есть я просто дергаю методы интерфейс, и теку, а если захочу из другого потока, то ``CoMarshalInterThreadInterfaceInStream` `?
        Ответить
        • Там была хорошая табличка, но я не могу её нагуглить... Но вроде как-то так:

          - Каждый STA тред имеет свои апартаменты.
          - Все MTA треды живут в одних общих апартаментах.
          - Между апартаментами интерфейс можно передать только через Stream, иначе UB.

          - none (древнее говнище, которое не знает о тредах) создаётся только в главном (первом) STA, если ты создаёшь его из другого треда, то автоматом получаешь прокси.
          - apartment создаётся только на STA тредах, если ты создаёшь его из MTA треда, то он создаётся на главном STA и ты получешь прокси.
          - free создаётся только на MTA тредах, если ты создаёшь его из STA, то он создаётся на MTA пуле и ты получаешь прокси.
          - both создаётся где угодно.
          Ответить
            • > создаю его где угодно, и теку

              Ну да, создаёшь где угодно, но юзать можешь только в пределах апартаментов, в которых он был создан. Иначе надо явно прокидывать через Stream чтобы он в прокси завернулся.
              Ответить
              • угу, если у меня есть соседний тред со своим STA или MTA тред (один из пула), то я должен интерфейс ``CoMarshalInterThreadInterfaceInStream ``днуть туда.
                Ответить
                • Кстати, а если я из apartment объекта возвращаю интерфейс в MTA тред, то этот интерфейс тоже автоматом завернётся в прокси? Хотя наверное да, между процессами эта магия же работает.
                  Ответить
                  • Если MTA тред работает с твоим апартмент объектом, то он же и так работает с прокси? Думаю, прокси умный.
                    Ответить
                • For example, if you marshal a proxy back to the originating thread, then when you unmarshal, you get a direct pointer again!

                  Охуеть.
                  Ответить
          • Аж чем-то пахнуло несвежим. Введите этому пациенту дозу OTP design principles для детоксикации.
            Ответить
    • Кстати, давайте течь от JNA
      package org.example;
      
      import com.sun.jna.Native;
      
      public final class Kernel32 {
          private Kernel32() {
          }
      
          static {
              Native.register("kernel32");
          }
      
          public static final Kernel32 INSTANCE = new Kernel32();
      
          native int GetCurrentThreadId();
      }


      На прыщах, разумеется, точно также можно делать.
      Почти как ctypes и P/Invoke
      Ответить
  • Обновил телеграм на десктопе - теперь не могу писать говнокод боту. Охуеть.
    Ответить
      • Поэтому я за электронную почту. Там, к слову, тоже можно бота написать при желании. А Telegram развращает - теперь все мыслят чатиками, каналами и стикерами.
        Ответить
  • Такой вопрос:

    Вот ASCII и UTF-8 - совместимые кодировки, все коды символов в ASCII совпадают с UTF-8.
    Но если для нас целевая кодировка UTF-8, то без конвертации мы ведь всё равно не правильно интерпретируем ASCII-строку?
    Ведь UTF-8 - двубайтная, а ASCII - однобайтная.
    То есть, мы пихнули ASCII строку в std::string, и теперь читаем её как UTF-8, мы ведь будем считывать двубайтно. (хотя и UTF-8 надо хранить в wstring)
    В чем подвох?
    Ответить
    • В UTF-8 символы кодепоинты не джвумя байтами кодируются, они переменной длины, от 1 до 6 байт. И первые 128 кодируются одним байтом, так что они на 100% совместимы с ascii'шными.
      Ответить
      • А какой тип в плюсах хранит 6-байтную строку?
        Ответить
        • В крестах обычно юзают utf-8 в std::string или utf-16 в "строке" из char16_t. Ну или их аналоги из Qt или ICU если реально надо строки а не массивы символов.

          А строки с полностью декодированными кодепоинтами (из char32_t) редко кто юзает. Я ни разу не видел.
          Ответить
          • Так если у меня есть 6-байтный символ, то я могу распидорасить случайно строку на половине. Или просто забивают болт на такое?
            Ответить
            • Мы сидим на сайте, который от трёхбайтных символов падает в Application was halted by an exception. Какая уж тут глубокая поддержка новейших стандартов Юникода…
              Ответить
            • Всмысле распидорасить?

              Самый длинный юникодный символ, емнип, 3 байта. И он кодируется как 6 байт в utf-8 или 4 байта в utf-16.

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

              > Я ни разу не видел
              полагаю, в азии 32 битные чары это норма жизни
              Ответить
              • > Я ни разу не видел

                Я про работу со строками, состоящими из char32_t (ну или wchar_t на линуксе). std::basic_string<char32_t>, в общем.

                Сами то символы в utf-8 или utf-16 прекрасно кодируются.
                Ответить
    • Если первый символ младше 127, УТФ считает его однобайтовым
      Если старше -- то это начала двубайтовой последоватльности

      Все английские буквы и цифры в ASCII младше 127 (ASCII 7-ми битный так-то), так что они трактуются UTF правильно

      А вот если ты возьмешь восьмибитную кордировку (cp866, koi8r, cp1251) то русские буквы сломаются
      Ответить
      • > двухбайтовой

        Почему двухбайтовой то? Многобайтовой же. Ну и все остальные символы тоже больше 127, не только первый.
        Ответить
        • ну да, много, но я когда писал, думал про русское
          Ответить
          • Хм, я почему-то думал, что русские по 3. Но они по 2.
            Ответить
  • Кто с трёх раз отгадает, чем в «WinAPI» «BOOL» отличается от «BOOLEAN»?
    Ответить
        • И нахрена вот нужен 32-битный логический тип?
          typedef int BOOL, *PBOOL, *LPBOOL;

          Да еще и знаковый?
          Ответить
          • Традиция же. В сишке все переменные по дефолту были int (хотя откуда мне знать, я никогда не писал на чистой сишке). Да и выравнивание под 2 или 4 байта в зависимости от платформы всегда пригодится.
            Ответить
          • На самом деле нинужен скорее восьмибитный. Просто потому, что «WinAPI» проектировалось и используется в основном на x86/IA64 с соглашением о вызовах «stdcall». То есть в функции эти буль-були передаются либо в виде одного регистра (32/64 бита), либо слова на стеке (аналогично, 32/64 бита). Более того, четырёхбайтный буль — это ещё и страховка от тупизны компилятора: однобайтную переменную он может положить по невыровненному адресу и получить просадку производительности, а вот четырёхбайтные обязаны быть выровнены по границе слова.

            Большое количество локальных булевых переменных или какие-то крупные массивы буль-булей, когда лишние байтики могут напрячь память — это слишком экзотические кейсы, но, видимо, под них и сделали «BOOLEAN».
            Ответить
            • массивы буль-булей же всегда делают через битовые операции?

              я вообще не могу себе представить, чтоб сишнек по другому сделал)
              Ответить
              • > массивы буль-булей же всегда делают через битовые операции?
                Разве что поехавшие, вроде тех, кто std::vector<bool> делал. Ну или когда нужен не просто массив, а набор связанных флагов.

                Битовые буль-були тормозят. В современном мире в общем случае экономить ими память — маразм.
                Ответить
                • почему тормозят? Я пшел по смещению и сделал OR с иммедейтом и jnzнулся например. Или нельзя ор с иммидейтом делать? Или быстрее сравнить?

                  >экономить память
                  ну если у тебя выбор между 4 байта и 1 байт то да, наверное не имеет смысла, а если их стопицот?
                  Ответить
                  • > Или нельзя ор с иммидейтом делать?
                    Откуда ты возьмёшь иммидейт?

                    Более того, для получения значения тебе придётся ещё сильнее ебаться с масками и сдвигами. Как, например, ты передашь значение пятого флага в функцию?

                    > а если их стопицот?
                    И даже если стопицот — тоже не имеет. И даже если миллион — всё равно не имеет. Причём скорее не по соображениям производительности, а просто потому, что ебаться с масками и сдвигами на уровне языка — крайне сомнительное удовольствие, при неосторожном обращении приводящее к баграм и говну (см. std::vector<bool>).
                    Ответить
                    • >Откуда ты возьмёшь иммидейт?
                      захардкожу?

                      Поднял флажок, проверь
                      or        BYTE PTR [12+rsp], 4


                      >Как, например, ты передашь значение пятого флага в функцию?
                      ок, не передеам, придется копировать

                      Поднять, опустить и проверить флаг достаточно просто. А вот вынуть его сдвигом уже сложнее, это да
                      Ответить
                • зы: я проверил

                  что тормозит, мне вот н е понятно
                  //си
                  foo[8] = foo[8] | 0x4;
                  //асм
                  or        BYTE PTR [12+rsp], 4  
                  
                  //си
                  foo[8] & 0x4
                  
                  //асм
                  movzx     eax, BYTE PTR [12+rsp]               
                  and       eax, 4
                  Ответить
                  • У вектора булей ещё индекс надо распидорасить на номер байта и оффсет в нём. Ну и сдвинуть. Поэтому вектор булей медленнее чем вектор байтов (если он не настолько гигантский, что попирает собой кеш).
                    Ответить
                    • я видимо анскильный, но я не понимаю зачем двигать, если пользователь явно передал нужный флаг, например 0x10

                      ДВигать нужно чтобы высосать в отдельную переменную (например, я хочу пятый флаг вытащить в переменную BOOLEAN)
                      Ответить
                      • > если пользователь явно передал нужный флаг, например 0x10
                        Передал во время компиляции?

                        Вот примерно это будет выглядеть в реальности (не тестировал, если что):
                        #include <cstdint>
                        #include <cstdio>
                        #include <climits>
                        
                        void print_message_if_flag_is_set_1(uint64_t *flags, size_t flag_index, const char *message)
                        {
                            if (flags[flag_index / (sizeof(uint64_t) * CHAR_BIT)] & (1ull << (flag_index % (sizeof(uint64_t) * CHAR_BIT)))) {
                                puts(message);
                            }
                        }
                        
                        void print_message_if_flag_is_set_2(uint64_t *flags, size_t flag_index, const char *message)
                        {
                            if (flags[flag_index]) {
                                puts(message);
                            }
                        }

                        print_message_if_flag_is_set_1(unsigned long*, unsigned long, char const*):
                                mov     rax, rsi
                                shr     rax, 6
                                mov     rax, QWORD PTR [rdi+rax*8]
                                bt      rax, rsi
                                jc      .L4
                                ret
                        .L4:
                                mov     rdi, rdx
                                jmp     puts
                        print_message_if_flag_is_set_2(unsigned long*, unsigned long, char const*):
                                cmp     QWORD PTR [rdi+rsi*8], 0
                                jne     .L7
                                ret
                        .L7:
                                mov     rdi, rdx
                                jmp     puts

                        https://gcc.godbolt.org/z/sse5xE

                        Разница очевидна.
                        Ответить
                        • >Передал во время компиляции?
                          ну да

                          hiebye_jazyki |= PHP_LANG;


                          Если ты в рантайме хочешь выбрать поле, то тут конечно всё хуже
                          Ответить
                          • > hiebye_jazyki |= PHP_LANG
                            Это только если твой массив целиком влезает в один инт. В противном случае тебе ещё нужно дополнительно получить индекс ячейки, в которой лежит нужный тебе флаг. А когда добавляется рантайм — всё вообще летит в пизду, см. мой реальный пример.
                            Ответить
                            • >получить адрес
                              ну так
                              hiebye_jazyki[100500] |= PHP_LANG


                              адрес же считается в каком-нить LEA тупо base+sizeof(element)*num_of_elements, не?

                              А вот с рантаймом жопа, а вы с бормандом очевдино про него и говорили

                              Но я думал про битовые поля как про такие SETы из паскаля, когда пользователь всегда явно в компиляции указваает какой флаг задрать
                              Ответить
                              • > 100500
                                Откуда ты получил это число? У тебя его нет, у тебя есть только задача — установить флаг номер 3216000 в истинное значение. Чтобы это сделать, тебе нужно сначала узнать, в каком по счёту инте этот флаг лежит, и уже потом вычислять значение маски:
                                [    flags[0]   ][    flags[1]   ][    flags[2]   ][    flags[3]   ]
                                |-|-|-|-|-|-|-|-||-|-|-|-|-|-|-|-||-|-|-|-|-|-|-|-||-|-|-|-|-|-|-|-|
                                |0|0|0|1|0|0|0|1||0|0|0|1|0|0|0|1||0|0|0|1|0|0|0|1||0|0|0|1|0|0|0|1|
                                |-|-|-|-|-|-|-|-||-|-|-|-|-|-|-|-||-|-|-|-|-|-|-|-||-|-|-|-|-|-|-|-|
                                   ^                  ^                                   ^
                                 bit 1              bit 10                              bit 27
                                Ответить
                      • А ещё попрошу обратить внимание на очень простое, понятное и поддерживаемое выражение «flags[flag_index / (sizeof(uint64_t) * CHAR_BIT)] & (1ull << (flag_index % (sizeof(uint64_t) * CHAR_BIT)))». И да, я до сих пор не уверен, что оно работает как задумывалось.
                        Ответить
                        • построй таблицу истинности (или аналог) и проверь каждое значение
                          Ответить
                          • Мне лень вставать за ручкой с листочком :-(.
                            Ответить
                  • зы: какой компилятор оптимизатор )))

                    конечно, если иф немного поменять, то убдет понятнее
                    mov       dl, BYTE PTR [12+rsp]                         #7.7
                            test      dl, 4
                    Ответить
            • > невыровненному

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

                  То ли я еще не проснулся... То ли ты про какую-то архитектуру, которая только словами читает. Ну не вижу я других кейсов когда инт быстрее байта.
                  Ответить
                  • Да, я действительно застрял в прошлом.
                    >>> Read and write operations to the DDR4 SDRAM are burst oriented. It starts at a selected location (as specified by the user provided address), and continues for a burst length of eight or a ‘chopped’ burst of four.
                    Ответить
                    • имхо:
                      Из DDR читает префетчер (точнее DRAM контроллер по его указке) в кешлайны, из кешлайнов читает процессор.
                      Бёрстами память читает уже очень давно, и еще 286-й умел читать из памяти по два байта. Это не мешало ему считать один байт (просто второй выкидывался на помойку).

                      или ты об изменении одного байта?
                      Ответить
                    • Да даже в прошлом это никогда не было проблемой...

                      С восьмибитной шиной инт читался несколько циклов.

                      А если у памяти 16 или 32 битная шина, то там есть дополнительные сигналы под bytemask чтобы не делать read-modify-write ради записи байта.

                      Т.е. в целом обращение к байту быстрее чем к инту. В худшем случае такое же.
                      Ответить
                      • А можно ли бул расшаривать между потоками без всяких мьютексов? Он же вроде за одну операцию читается. Или будут сюрпризы?
                        Ответить
                        • Чистый bool в C++ — нельзя. Зато std::atomic<bool> — можно.
                          Ответить
                          • почему нельзя? разве чтение байта (и даже 32 бит) не атомарно?

                            Или там проблема в том, что всё переупорядочица?
                            Так тогда "одну операцию" тут не причем
                            Ответить
                            • Потому что это UB по Стандарту, мы не так давно это обсуждали: https://govnokod.ru/26983. Замени там int на bool — будет то же самое.
                              Ответить
                              • Я просто не знаю кто по стандарту атомарен
                                Например в джаве int и bool атомарны, а long нет.
                                В С++ бул не атомарен? а char?
                                Ответить
                                • Никто не атомарен, всё дозволено. Атомарность — это, потенциально, лишние расходы, в философии крестов же нельзя платить за то, что не используешь.

                                  Стандарт гарантирует только наличие специализаций std::atomic для char, signed char, unsigned char, short, unsigned short, int, unsigned int, long, unsigned long, long long, unsigned long long, char16_t, char32_t, wchar_t и всех типов из <cstdint>.
                                  Ответить
                                  • понятно. Необычно) Трудно представить себе архитектуру, в которой запись байта не атомарна
                                    Ответить
                                    • > Трудно представить себе архитектуру, в которой запись байта не атомарна

                                      Легко, 16 или 32-битная шина до памяти без линий byte select. Запись байта будет read-modify-write операцией.

                                      З.Ы. Хотя я какую-то хуйню пишу.
                                      Ответить
                                      • не понял, где не атомарность

                                        Если я записал байт 0xCA вместо байта 0x00, то там или 0 или CA. Там не может быть DD ни в какой момент, нет?
                                        Ответить
                                        • Атомик обращения к байту должны лочить шину на время RMW в такой архитектуре. Иначе этот байт нормально запишется, а соседние упидорасит.

                                          Блин, дичь какая-то. Зачем я этот пример придумал...
                                          Ответить
                                          • на соседние мне опхуй

                                            разумаеется, если я пишу байт, процессор пишет инт, то я расхуячу соседей

                                            Если у меня два потока пишут в соседние байты, то там мясо получаетчя, лол

                                            теперь я понял, почему даже байт не атомарен без лочка шины



                                            как это сделано в джавке, интересно
                                            Ответить
                                            • > на соседние мне опхуй

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

                                              На нормальных процах всё-таки есть byte select, поэтому они просто пишут в оперативку байт и текут (лишние линии данных в этот момент игнорятся).
                                              Ответить
                                              • я за 8088, там таких проблем нет
                                                и выравнивание не нужно
                                                и вообще всю книжку Криса про оптимизацию доступа к апамяти можно выкинуть
                                                Ответить
                                      • Давай лучше придумаем рахитектуру, в которой у каждого бата будет соответствующий бит чётности, проверяющийся при каждом чтении (память сломалась — падаем).

                                        UPD: «ECC DDR» не предлагать, так не интересно.
                                        Ответить
                          • Вроде годами без atomic работало. А может просто косяки случаются редко, и пользователи не успевают заскринить/воспроизвести )))
                            Ответить
                            • Есть два вида багров:

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

                              Bool не подвержен скорее всего этой проблеме, так как слишком мал, и его чтение атмарно.

                              2. Переупорядочивание компилятором или процессором. Если поток1 писнул в B1 а потом B2, то поток2 может увидеть B2, а B1 не увидеть.

                              Тут bool ничуть не лучше любого другого типа. Нужно делать синхроназиацию. На уровне CPU это делают заборы (фенсы)
                              На уровне компилятора -- volatile.

                              Но есть и более высокоуровневые примитивы конечно, и у ОС и в стандартных либах языков и в самих языках
                              Ответить
                              • > На уровне компилятора -- volatile.

                                Только в студии.

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

                                  Если B1 и B2 у меня оба волатильные, то разве компилятор не гарантирует мне что запись в B1 будет видна к моменту, когда станет видна B2?
                                  Ответить
                                  • По стандарту - не гарантирует т.к. volatile не имеет вообще никакого отношения к тредам. Он про прерывания и железо -- порядок операций с точки зрения текущего треда.

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

                                      * НЕ писать в B2 до B1, потому что запись имеет сайд эффект
                                      * значит, он пишет в B1 прежде, чем в B2.

                                      Разумеется, есть проблема с тем, что B2 может флашнуться раньше, а B1 может застрять в буферах

                                      Но это уже проблема уровня CPU, которую нужно решать заборами або флашами.

                                      А вот переупорядочивание записи компилятором я отключил

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

                                        Для этих переменных и их зависимостей по данным - да.

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

                                        З.Ы. Ну и да, волатайл - преждевременная пессимизация.
                                        Ответить
                                        • ну вот, я о том и грил, что для синхронизации нужно решить ДВЕ проблемы: уровня компилятора (волатайл) и уровня процессора (заборы и флаши и вот это всё)

                                          Ну или взять высокооуровневый притив, и не ебсти мозгу.
                                          Ответить
                                          • Ну собственно std::atomic решает обе. Там внутри правильный барьер и для проца и для конпелятора.
                                            Ответить
                                          • А вообще, один из кошерных конпеляторных барьеров на gcc -- это asm volatile с "memory" в списке задетой хуйни. Конпелятор через него зассыт что-то двигать.

                                            З.Ы. Но в атомиках конпеляторные барьеры более тонкие и оптимальные.
                                            Ответить
                            • > годами без atomic работало
                              В этом и есть коварство UB: работает годами, а потом феерично выстреливает. Или не выстреливает — как повезёт.
                              Ответить
                        • Без volatile - точно нет. Есть реальные примеры, когда конпелятор перестаёт читать этот бул.

                          С volatile - ну такое, как какой-нибудь флажок остановки на популярных архитектурах обычно работает. Гарантий нету, само собой. В особенности на состояние остальных переменных, если ты их собрался читать после установки флажка.
                          Ответить
                          • > Есть реальные примеры, когда конпелятор перестаёт читать этот бул.
                            Реальный пример: https://gcc.godbolt.org/z/hnzh41.
                            bool flag = false;
                            
                            void f1()
                            {
                                while (!flag)
                                {
                                    // Ждём
                                }
                                
                                if (flag == true) {  // Просто для наглядности
                                    puts("Flag is set!");
                                }
                            }
                            
                            void f2()
                            {
                                using namespace std::chrono_literals;
                                std::this_thread::sleep_for(1s);
                                flag = true;
                            }
                            
                            int main()
                            {
                                std::thread thr1(f1);
                                std::thread thr2(f2);
                                
                                thr1.join();
                                thr2.join();
                                
                                return EXIT_SUCCESS;
                            }

                            Функция f1() скомпилировалась (полностью в соответствии со Стандартом) в:
                            f1():
                                    mov     edi, OFFSET FLAT:.LC0
                                    jmp     puts
                            Ответить
                            • А вот «clang» её скомпилировал чуть по-другому, но не менее смешно:
                              f1():                                 # @f1()
                                      cmp     byte ptr [rip + flag], 0
                                      je      .LBB0_1
                                      mov     edi, offset .L.str
                                      jmp     puts                            # TAILCALL
                              .LBB0_1:                                # =>This Inner Loop Header: Depth=1
                                      jmp     .LBB0_1

                              Если флаг изначально не установлен — функция просто уходит в бесконечный цикл.
                              Ответить
                • загрузит в регистр al
                  /color

                  зря не сделали битовые регистры в x86, какой анскил
                  Ответить
                  • А в STM'ках на ARM'е сделали! Правда не регистры, а отдельную область памяти где каждый бит обычной оперативки видно как инт.
                    Ответить
          • Бля, комментарии там делают мне больно.
            Ответить
            • А ты ждал программистов на joyreactor?
              Ответить
            • «Eй богу, как-будто на хабру написал, а не на джой.
              Придрались просто ко всему.
              Можно же просто посмеяться типа "хаха, оказывается и ещё хуже бывает" и остаться с хорошим настроением, а не "доказывать_что_в_интернете_ктото_непрпа в"жпг»

              А по моему всё по делу. Правда комментарии там убого оформляют.
              Ответить
              • Нет, содержимое большинства комментариев там — полнейшая ахинея.
                Ответить
                • Как вот это?

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

                  Страшно жить в мире, когда физический сбой в процессоре превращает true в false и всё ломается (((

                  Именно поэтому я против наклеек с магнитами на блоке питания.
                  Ответить
                  • Это не ахинея как раз. Если в твой бул пролез мусор, то логике пизда.

                    true && true == false можно получить, и я видел такой баг на практике.
                    Ответить
                    • неинициализированный бул, true == false, да;)
                      Ответить
                    • Это всё из-за «#define true 1» и «if (flag == true) {...», где flag был 1, а стал 2...

                      А что делать, чтобы мусор не пролез?

                      Имхо, если читаешь что-то в бул, неплохо бы сделать статик каст, чтобы и -1, и 0, и 100500 оно превратило в true/false.

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

                        А ты не можешь, логике уже пизда.

                        Именно поэтому крестовый бул нельзя юзать во внешних структурах данных.
                        Ответить
                        • а инт можно юзать? Чем неинициализированный инт лучше мусорного була?
                          Ответить
                          • Неинициализированный инт -- UB.

                            А вот инт с мусором из файла или сокета -- нет (ну по крайней мере на всех практических архитектурах у него нет невалидных значений). А бул -- да.
                            Ответить
                            • хм:) Верно ли следующее утверждение:
                              Любое сочетание бит валидно для int, но не для bool

                              Есть ли еще типы, в которых валидно не любое сочетание?

                              Я удивлен, так как мне казалось, что любое сочетание валидно только для char/std::byte, а для int МОЖЕТ БЫТЬ не валидно, и это всё равно УБ
                              Ответить
                              • Ну в теории в инте вроде могут быть невалидные. На практике таких платформ нет. В uint'е их точно нет даже по стандарту.

                                И не путай невалидное с неинициализированным.

                                З.Ы. а так - бул, флоат, енум. Вон от флоата тачка в стену въехала.
                                Ответить
                                • Теория.. практика.. вы же сами говорите, что надо делать по стандарту.

                                  Считать рендомное говно в int это UB или ID?

                                  >не путай
                                  А разве проблема неинициализированного не в том, что он именно что невалиден внутри?

                                  Или какие-то компиляторы могут вообще физически не иметь доступ к той памяти, которую они не писали?
                                  Ответить
                                  • Невалидное UB только если оно реально невалидное. Т.е. я могу допустим байтики проверить, crc какое-нибудь посчитать.

                                    С неинициализированным это не работает. Например конпелятор может выкинуть код т.к. ну не будет же корректный код crc'шить неинициализированную память.
                                    Ответить
                                    • int a;
                                      a++; //уб и можно выкинуть
                                      
                                      int b = reinterpeter_cast<int>(someRandomShit); //не выкинут, но является ли это UB?
                                      Ответить
                                        • когда-то там был массив из четырех байт, я туда чем-то насрал
                                          Ответить
                                          • Тогда, во-первых, нужно кастовать в «int *» (не забыв проверить, что рандомное говно правильно выровнено, тоже недавно обсуждали), а во-вторых, кажется, это не является UB. Смотрим (выделение моё):

                                            The object representation of an object of type T is the sequence of N unsigned char objects taken up by the
                                            object of type T, where N equals sizeof(T). The value representation of an object of type T is the set of bits
                                            that participate in representing a value of type T. Bits in the object representation that are not part of the
                                            value representation are padding bits.

                                            § 6.8/4 [basic.types], N4842

                                            There are five standard signed integer types : “signed char”, “short int”, “int”, “long int”, and “long
                                            long int”. [...] The range of representable values for a signed integer type
                                            is −2^(N−1) to 2^(N−1) − 1 (inclusive), where N is called the width of the type. [...]

                                            § 6.8.1/1 [basic.fundamental], N4842

                                            The width of each signed integer type shall not be less than the values specified in Table 10. The value
                                            representation of a signed or unsigned integer type comprises N bits, where N is the respective width. Each
                                            set of values for any padding bits (6.8) in the object representation are alternative representations of the value
                                            specified by the value representation. [Note: Padding bits have unspecified value, but do not cause traps. See
                                            also ISO C 6.2.6.2. —end note] [Note: The signed and unsigned integer types satisfy the constraints given
                                            in ISO C 5.2.4.2.1. —end note] [...]

                                            § 6.8.1/4 [basic.fundamental], N4842

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

                                    Вообще говоря да. Были же процы с тегированной памятью, сразу словишь сегфолт о том, что эту память не писали.
                                    Ответить
                          • Т.е. ты можешь проверить что инт пришел от 0 до 10. Но ты не можешь проверить что бул пришел true или false. Во-первых конпелятор эту проверку выкинет, во-вторых даже если не выкинет, то там будет !=0 вместо !=1 пирфоманса ради.
                            Ответить
                        • А в чем проблема сделать вот так во время чтения злосчастного бинарного протокола с ошибкой?

                          bool input = parseShit();
                          assert((input != true)&(input != false) & "cyka blyaaa");
                          Ответить
                          • Во-первых конпелятор эту проверку выкинет т.к. в буле не может быть других значений кроме true и false.

                            Во вторых даже если он ее не выкинет, он ее упростит и через неё пролезут кривые значения (например 4 вместо 1). А в других местах он будет на 146% уверен, что там 0 или 1.
                            Ответить
                          • parseShit вернет тебе такие число

                            01111101b

                            и на архитектуре FOO input будет не равен ни тру, ни фолс
                            Ответить
                          • > (input != true)&(input != false)
                            Проблема в том, что компилятор попросту выкинет это условие и будет совершенно прав.

                            Если parseShit() возвращает int, то тут будет всё правильно и никаких UB не возникнет (int неявно преобразуется в bool, Стандарт это разрешает), а если parseShit() читает что-то из сети, пишет считанное в память, занимаемую переменной типа bool, а потом её возвращает, то… это, ЕМНИП, в любом случае получается UB, лол.
                            Ответить