1. Куча / Говнокод #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, 15 Ноября 2020

    Комментарии (493) 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 (резервный чат)
      Ответить
    • Заебали со своими оффтопами. Они убили весь дух и смысл сайта. Хотите пиздеть о политике или обсасывать статейки с Хабра - уёбывайте в чат и не коптите здесь небо.
      Ответить
    • Немного стрит-арта в ленту:
      https://pbs.twimg.com/media/Em37nOBWEAA_Bg8.jpg
      Ответить
    • https://m.habr.com/ru/post/526848/

      Какая девушка-программист )))

      О, она же и автор https://m.habr.com/ru/post/470337/ который мы уже обсуждали. Или не обсуждали
      Ответить
      • Тут есть два варианта
        * Не работайте с мудаками
        * Если второй муж бьет вас по роже, то дело не в муже, а в роже

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


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

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


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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        ***

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

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

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

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

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

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

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

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

        Какая трудовая этика )))
        Ответить
        • Устроился бы к ней сжимателем кириллицы за меньший прайс?
          Ответить
        • Блядь, и вместо того, чтобы вбить в гугл «zip кириллица» и первой же, сука, ссылкой получить https://iu5bmstu.ru/index.php/Windows_-_Кириллица_в_именах_файлов_внутри_архива _ZIP, она начала выёбываться. Сразу видно опытную айтишни_цу.

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

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

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

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

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

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

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

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

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

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

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

      Наверное, что-то интересное. Но я не знаю пхп, а потому мне название статьи но о чем не говорит.
      Ответить
      • Слушай, ну PHPшник же верно нарисован
        http://jcup.ru/images/php/chinim-generaciyu-webp-v-php/bag-generacii-webp-v-php.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 рам

                        И это только чтобы хром нормально работал.
                        Ответить
                        • обычный сетап для разраба nowadays
                          Ответить
                          • Это вы у себя базу поднимаете, три виртуалки, или гиганские джава или .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% занято.

                                Широко жил партизан Боснюк!
                                Ответить
                                • Разница между 32 и 64 на десктопе сейчас в районе $100-150.
                                  Ответить
                                  • Офигеть цены на память упали, я 32 пару лет назад брал за цену по которой сейчас такие же 64.
                                    Ответить
                                    • Я две плашки брал 16 гигов в целом 8к стоило.
                                      Ответить
                                      • Вот месяц назад покупал 2×16 в ноут за 11тр, ddr-4 3200, so-dimm.

                                        Ваш днс совсем уже что-ли?
                                        Ответить
                                        • https://www.dns-shop.ru/product/76669dc3712f1b80/operativnaa-pamat-amd-radeon-r9-gamer-series-r9s416g3000u2s-16-gb/

                                          Ну джа, я пол года назад такую брал, до отрицательного роста рубля
                                          operativnaa-pamat
                                          Ответить
                                          • А, 2×16 стоило 8, Я сначала прочитал что 16 в целом стоило 8. Тогда ок
                                            Ответить
                              • да не, я не против локальной базы, я потому и спросил.
                                Ответить
                            • Сейчас работаю на service fabric'е, 16 уже некомфортно
                              Ответить
                      • > 64 рам

                        Блядь, опять обновляться, а я думал 32 хватит на пару лет хотя бы ;(
                        Ответить
                      • >> рязань

                        Эрзянь мастор.

                        https://youtu.be/FKEHCTzccrQ
                        Ответить
                    • А, ну если мы про игровые компуктеры, то да. Топ карточки по 1.5-2к баксiв
                      Ответить
          • несвежий какой у него зион
            Ответить
            • > несвежий

              Дык это лайвхак такой. Списанный зеон из датацентров и адаптированная под десктоп материнка. Стоит копейки по сравнению с аналогичным камнем.
              Ответить
              • я знаю, что на 775-й присловутый так пхали. Возможно, что ты и прав: кто-то спиздил списанный xeon, и продал на авито нашему герою
                Ответить
                • Главное потом так не собирать https://9gag.com/gag/aQdBLK2
                  Ответить
                  • Потому что правильно – вот так:

                    https://youtu.be/b85h_ujZ_vg
                    Ответить
                    • блядь, я чуть не заплакал

                      кстати, кто помнит этого чела?
                      https://www.youtube.com/watch?v=jGbuhssT9R8
                      (инью, можешь посмотреть кстати, там полезные советы)
                      Ответить
                      • Это только на словах так легко, а на деле:

                        https://memepedia.ru/wp-content/uploads/2020/03/devochka-sosochka-pochemu-odna-5.jpg
                        Ответить
                      • Хуйня, скрыл.
                        Какой совет я должен был подчерпнуть?
                        Ответить
                        • вероятно, у нас с тобой ч/ю разное
                          Ответить
                          • Наверное. Это видео и не серьезное, и не смешное.
                            Ответить
      • @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);
            }

        да ну ёбтвою мать
        Ответить
        • Да норм, я на паскакале и похуже говнокод с графикой писал в старые добрые времена.
          Ответить
          • разумеется) у меня "игры" на паскале тоже состояли из километрового кейса.
            Просто тут товарищ мануал написал
            http://jcup.ru/java/keylistener-swing-java
            Ответить
            • Видимо пхпшник, страдающий по яве. Группа https://vk.com/blogwithpepper , автор https://vk.com/saastudio
              Ответить
          • На паскале каждый может, ты в экселе сделай https://coub.com/view/2jrx31
            Ответить
        • > VK

          ВКонтакте?
          Ответить
          • VK везде
            https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
            https://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html#VK_1
            Ответить
            • vkCreateImage. Олимпиадники даже до 3д графики добрались.
              Ответить
    • https://pikabu.ru/story/nout_v_minus_20_po_tselsiyu_7836802

      Там у чувака греется ноут до 90° С, потому что он на нём гоняет какие-то скрипты... И поэтому он его хочет вынести на балкон, где -20° С )))
      Ответить
      • имхо, 90 это или у него что-то погнано (что оч странно на ноуте) или термопаста криво лежит или охлаждение сломалось или радиатор не плотно прилегает, хз

        хотя я не зна что унего за камень, может у кого-то это и рабочая температура
        Ответить
        • Вот ты не любишь пхп. Что бы ты предложил минимально изменить, чтобы полюбил?
          Ответить
          • В PHP или в себе?
            Ответить
            • Хороший вопрос!
              Пусть тогда будет 2 вопроса:
              1) В пхп
              2) В себе
              Ответить
            • Убей в себе ПХП
              Ответить
              • Или пхп убьет тебя?
                Ответить
                • Как-то приснился кошмар, что из под кровати вылез пхп и утащил в мир разработки веб интерфейсов для микроволновок.
                  Ответить
                  • >утащил в
                    Алгоритм вывода не занятых таймслотов с шагом по 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.
                      профит...»

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

                        В деда мороза ты тоже веришь?
                        Ответить
          • Ничего уже не исправить в пыхе, к сожалению. Господь, жги.
            Ответить
      • Конденсаты-конденсатики
        Ответить
    • А вот тут я за Юлю
      https://m.habr.com/ru/company/skyeng/blog/479568/comments/#comment_21043918

      А суслик зеленый еще, да и не существует его
      Ответить
    • Мне кажется, или есть какая-то связь между кодом 403 Forbidden и недавними выборами в США?
      Ответить
    • https://sun9-61.userapi.com/impf/7ekmcRygTXwBdtJTRwcmdGJw7RpbbZya20JqVA/I0FNtuAFddo.jpg
      Ответить
    • «Говнокод» разбанили. Доброе утро.
      Ответить
      • Доброе утро, gost!
        Ответить
      • Так гадко на душе от этого.
        Ответить
      • Доброе.

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

      Какой "10х инженер" )))
      Ответить
      • Дочитал до ⌘ и закрыл.
        Ответить
        • зря, зря
          там по 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 и дебагера и правда полезно
        Ответить
    • Петухи, а вы часто слышите свой голос в записи? Вас тоже бесит? Говорят, это нормально, так и должно быть.
      Ответить
      • да. Говорят что свой голос кости искажают

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

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

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

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

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

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

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

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

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

                > Кости искажают какой голос, в записи или реальный?
                Кости искажают реальный, поскольку обычно мы слышим наружные голоса через воздух, а внутренний - через воздух и через кости, но в воздухе он, по идее, должен сильно затухать.
                Ответить
                • Ну так почему слушать свой голос в записи - неправильно?
                  Ответить
                  • Х.з., мне норм. Хотя диктор из меня, конечно, хуёвый. Сбиваюсь постоянно.
                    Ответить
                    • Ответь сначала на изначальный вопрос. http://govnokod.ru/27115#comment595674
                      Ответить
                      • А, да. Я слышу нечасто. Говорю местами как ЛГБТшник из Москвы, противно растягивая некоторые гласные.
                        Ответить
                        • Точнее, бОльшую часть времени говорю как ЛГБТшник, а местами растягиваю гласные. Хотя сам слышу голос натурала, когда говорю.
                          Ответить
                          • Извини, я не буду гуглить реальные примеры говора ЛГБТшников.
                            Ответить
                      • Ну я на него и отвечаю, меня не бесил мой голос в записи. Бесила куча другой хуйни, но не голос.
                        Ответить
                        • Ну значит ты снимал, чтобы куда-то выложить, привык. А вот те, кто слышит не часто - охуевают.
                          Ответить
                          • Меня вот пиздец бесит, что я сбиваюсь и начинаю говорить эти ёбаные "ээ". В разговоре на это не обращаешь внимания, а в записи прям ухо режет.
                            Ответить
                            • С детства не любил «э-э-э», теперь вместо них получаются просто паузы в речи. Какой багор )))
                              Ответить
                              • Ну да, я иногда секунд на 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 по разному написать

              ну по идее можно, наверное
              Ответить
              • лин, прикольная задача для хакатона, например. Может, я ее хочу

                сюда нужно копать
                https://docs.oracle.com/javase/7/docs/technotes/guides/jvmti/index.html
                Ответить
          • > Оно где-то в 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:
              https://govnokod.ru/24655
              Ответить
              • Сокетам не нужен 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 создаётся где угодно.
            Ответить
            • вот эта? https://docs.microsoft.com/en-us/troubleshoot/windows/win32/descriptions-workings-ole-threading-models

              ну сталобыть я верно понял: если class 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!

                    Охуеть.
                    Ответить
                    • магия, хехех)

                      Охуенная же технология. Где питухам ссаным со своими рестами

                      Кстати, маршалинг упростили еще больше с 8.1: RoGetAgileReference
                      * https://devblogs.microsoft.com/oldnewthing/20151020-00/?p=91321
                      Ответить
            • Аж чем-то пахнуло несвежим. Введите этому пациенту дозу 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
        Ответить
    • Обновил телеграм на десктопе - теперь не могу писать говнокод боту. Охуеть.
      Ответить
      • Кстати, а куда делся Desktop?
        Ответить
      • Поэтому я против "Telegram"
        Ответить
        • Поэтому я за электронную почту. Там, к слову, тоже можно бота написать при желании. А 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'шными.
        Ответить
        • Ясно
          https://ru.wikipedia.org/wiki/UTF-8#Алгоритм_кодирования
          Ответить
        • А какой тип в плюсах хранит 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»?
      Ответить
      • 0 / false?
        Ответить
      • размером может? один какой длинее
        Ответить
        • Правильно! BOOL — 32 бита, BOOLEAN — 8. Запомнить очень просто: кто длиннее — тот короче.
          https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/51bbfbb1-08e2-4c13-a95e-1eaa7d310670
          Ответить
          • после DWORD64 и DWORD32 я уже ничему не удивляюсь))
            Ответить
          • И нахрена вот нужен 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'е сделали! Правда не регистры, а отдельную область памяти где каждый бит обычной оперативки видно как инт.
                      Ответить
          • http://joyreactor.cc/post/4580044
            Ответить
            • Бля, комментарии там делают мне больно.
              Ответить
              • А ты ждал программистов на 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?
                                        Ответить
                                        • Что такое «someRandomShit»?
                                          Ответить
                                          • когда-то там был массив из четырех байт, я туда чем-то насрал
                                            Ответить
                                            • Тогда, во-первых, нужно кастовать в «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, лол.
                              Ответить
                              • Да нет, я могу копировать представление любого типа побайтово. В том числе и по сети, я думаю, если там такая же прога. Так что для корректных значений это не UB.
                                Ответить
                                • Да, точно, буль же у нас POD или как его там в современных крестах зовут.
                                  Ответить
                                  • Ну вот кстати нюанс есть. Гарантирует ли конпелятор ABI для була. А то сегодня единичка в качестве тру, а завтра -1.

                                    Короче я в любом случае не стал бы юзать.
                                    Ответить
                              • А нсли объявить input как volatile?
                                Ответить
                                • Тогда см. пункт 2.

                                  != true оптимизнется в ==0 и дальше по коду что-нибудь разнесет.

                                  Не надо с этим шутить.
                                  Ответить
                            • Надо делать как жсушки:
                              bool input = !!parseShit();
                              Ответить
                              • Ну да, читать байт (не бул!) и делать на нем !! - норм вариант если по протоколу 0 и не 0.
                                Ответить
                    • Он же дальше пишет:
                      Нет, речь именно про взрыво опасную смесь була, мусора в нём значение которого
                      не тру и не фалз и влияния сильной оптимизации.

                      А потом петухи про оптимизацию начали подкукарекивать.

                      Это, блядь, не влияние сильной оптимизации! Это UB, это знать надо!!!
                      Ответить
                      • Так ведь хороший UB при выключенной оптимизиции ничего не ломает, а при включенной ломает каждый второй раз
                        Ответить
                      • Ну большинство UB'ов проявляет себя как раз при сильной оптимизации. В данном случае из-за оптимизации && в & и использования "истинных" (ненулевых) значений как единичек в формулах.
                        Ответить
                        • В том-то и дело, что код с UB — это пороховая бочка, которая взорваться может в любой момент.
                          Смерть водителя наступила из-за оптимизации удара головой о руль, но ведь причиной-то всё равно будет служить UB ДТП.
                          Ответить
                          • Конпелятор выкинул ремни и подушки т.к. при корректном вождении они всё равно не используются.
                            Ответить
                      • Звучит так, как будто чувак как-то раз зашёл на хабр в тред скриптухов, где они жаловались на Ц++, и запомнил фразы: «влияние сильной оптимизации», «бул не тру и не фолс», «мусор в переменной».
                        Ответить
                        • Классика жанра же.

                          Скриптушок один раз слышал от мужа сестры, что С++ это сложно, там течка памяти и "вляние сильной потимизации", и форсит это всюду и везде, а сам ничего кроме пхп и не знает
                          Ответить
    • https://pbs.twimg.com/media/EnLdDGMWMAMcFjp?format=png&name=900x900
      > Самое старое рабочее селфи (старая работа 2016й) vs селфи в офисе сегодня

      IT меняет людей.
      Ответить
      • ванишнул спойлер
        Ответить
        • Спасибо.
          Ответить
        • <тоже ванишнул за компанию>

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

                    А ты посмотрел картинку?

                    Если посмотрел, то:

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

        Что-то я передумал знакомиться с тян-программистками.
        Ответить
        • С рокершами лучше тоже не знакомиться. Группа «Удар» (в интернетах их фотку можно встретить с неправильной подписью «Вепри суицида»):
          https://tunnel.ru/media/images/2019-09/post/132034/432432.jpg
          Ответить
        • > Что-то я передумал знакомиться с тян-программистками...

          ... если можно самому стать тян-программисткой.
          Ответить
          • google: programming while crossdressing
            Ответить
            • «I would believe that an individual male programmer exists who is more comfortable wearing women’s clothing. And I would believe that when he’s more comfortable, he feels less distracted or irritated, and he’s able to concentrate better on his coding work. Therefore he produces code with fewer bugs»

              Так вот в чём секрет успеха!
              Ответить
            • https://i.imgur.com/cG6lTdS.jpeg

              Challenge accepted.
              Ответить
      • Типичный джаваскриптер.

        Сишников и ассемблерщиков IT так не меняет.

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

                https://stackoverflow.com/questions/3278077/difference-between-getattr-vs-getattribute
                Ответить
                • Это скучно. почитай про Eigenclass в Ruby, например
                  Ответить
                  • В питоне же тоже есть.
                    Ответить
                    • ты про метаклассы?
                      Ответить
                      • Ну Eigenclass -- это же просто деталь реализации статик методов?
                        Ответить
                        • Примерно так.
                          В руби всё объект. У объекта есть "class", который тоже обьъект.

                          Если ты добавишь метод в объект, то он только у этого объекта и будет.
                          Мы -- обезьяны -- называем это обезъяними заплатками.

                          Если ты добавишь метод в "class" объекта -- это будет обычный метод, который появится у всех инстансов. Но это будет инстанс метод, а не метод "класса"

                          Как добавить "статический" метод в класс?

                          У класса есть свой "class" это тоже объект специального анонгимного уникального класса, который и назхывают Айгенклассом класса. В него и добавляется "статический метод".
                          Ответить
                          • А, понял. У руби методы это не просто поля с callable в инстансе, а прям реально какая-то отдельная хреновина в классе?
                            Ответить
                            • Ну да, методы хранятся в классе.

                              Если метод хранится в конкретном инстансе -- это его личный метод
                              Если метод хранится в классе -- это метод всех его инстансов
                              Если метод хранится в айген классе класса, то это статический метод

                              Короче, метод всегда хранится у родаков: методы инстанса -- у класса, методы класса у его "родака" -- айгена
                              ----
                              Теперь предлагаю понять разницу между модулями, классами и миксинами
                              Ответить
                  • https://medium.com/rubycademy/understanding-the-eigenclass-in-less-than-5-minutes-dcb8ca223eb4

                    > In Ruby, a class is an object. Indeed, a class is literally an instance of the class Class.

                    Почти как в питоне.

                    > So, how a class makes the difference between class-level and object-level methods, variables & constants?
                    By using the eigenclass (a.k.a meta-class, shadow-class, singleton class, etc..).

                    Что за питушня такая... Непонятная. В питоне без ЕвгенКлассов всё нормально работает.

                    «To keep it simple — and related to this article — let’s assume that singleton methods are class methods.
                    But what if I tell you that a singleton method is also an instance method ?
                    Well, this makes sense as (almost) everything in Ruby is an object. What you commonly call a class method is, behind the scene, an instance method of the eigenclass.
                    By the way, the eigenclass is also referred as singleton class.
                    Ok.. But what exactly is the eigenclass?
                    Let’s access the eigenclass and inspect what it contains»

                    Блять. Какой-то поток психозы.

                    > The eigenclass tends to be pretty difficult to apprehend.

                    Тут я, пожалуй, соглашусь с мистером «Мехди Фарси», гордым французом и основателем «Руби кадемии».

                    > The eigenclass is an unnamed instance of the class Class attached to an object and which instance methods are used as singleton methods of the defined object.

                    Если бы он написал вот это в самом начале, то в статье можно было писать не про пять минут, а всего про одну.

                    Ладно, тут я соглашусь, руби повеселее питона будет )))
                    Ответить
                    • Поэтому я за `Coq'. В нём классы и инстансы тупо термы языка, генерирующие хинты для вывода типов, их можно куда угодно в переменной передать.
                      Ответить
                      • В питоне классы тоже можно в пельменной передать. Да и в руби наверное.
                        Ответить
                        • И то и другое — динамическая питушня, ещё бы там это нельзя было сделать.
                          Ответить
                        • Можно, конечно.

                          В руби еще и вызовы методов можно легко передавать, ведь вызов метода это просто сообщение (привет, смоллток)

                          Есть модуль Forwardable, делающий это вообще декларативно
                          require 'forwardable'
                          
                          class Petuhs
                            extend Forwardable
                            def_delegator :@petuhs, :[]
                          
                            def initialize
                              @petuhs = %w{koko kuku}
                            end
                          end
                          
                          petuhs = Petuhs.new
                          puts petuhs[0] #koko


                          Вызов [] мы форварднули в проперти @petuhs, которое просто массив строк (ну тут моя любимая %w, как qw в перле)
                          Ответить
                      • А я за PHP - там нет всего того мусора, что ты перечислил.
                        Ответить
                    • > руби повеселее питона будет

                      А чем веселее? Ну в питоне точно также есть инстанс класса Class type на каждый класс. Статики в нём и лежат.

                      З.Ы. И статьи об этой очевидной хуйне, я думаю, там тоже пишут.
                      Ответить
                      • Да всем веселее
                        https://ru.wikibooks.org/wiki/Ruby/%D0%94%D0%BB%D1%8F_%D1%84%D0%B0%D0%BD%D0%B0%D1%82%D0%BE%D0%B2#%D0%A8%D0%B8%D1%80%D1%8F%D0%B5%D0%B2%D1%81%D0%BA%D0%B8%D0%B9_.size


                        Ширяевский .size

                        Студент МЭТТ Ширяев Денис на одном из зачётов предложил использовать метод .size в качестве итератора. Он использовал его для подсчёта количества элементов массива, удовлетворяющих условию. По сути, он предложил укоротить связку ```.find_all{ … }.size```. Вот как будет выглядеть программа подсчёта количества чётных элементов массива:

                        array = [1, 2, 3, 4, 5, 6]
                        array.size{ |i| (i % 2).zero? }    #=> 3


                        Чтобы заставить работать данную программу, необходимо перед использованием метода .size переопределить его, написав следующий код, который будет реализовывать эту функциональность:

                        class Array
                            def size(&closure)
                                closure ? inject(0){ |count, elem| (yield elem) ? count + 1 : count } : length
                            end
                        end


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

          Да ладно, Lynn Conway вообще процы хуярил(а) в IBM.
          Ответить
          • А Sophie Wilson набор инструкций для ARM'а разрабатывал(а).
            Ответить
        • Ничей хуй не застрахован. Есть когорта трансов FPGA'щиков и железячников во главе с whitequark. Радиация из монитора она такая.
          Ответить
          • https://govnokod.ru/user/2984

            О как.
            Ответить
            • Ты там тоже поосторожней со всяким крестоговном :3
              https://cs10.pikabu.ru/images/big_size_comm/2020-04_2/158627199117788529.jpg
              Ответить
          • Эх, правы были представители старшего поколения, когда говорили, что от монитора только болезни.
            Ответить
            • Не сиди за монитором по 16 часов, девочкой станешь.
              Ответить
              • Можно вообще ничего специально не делать.
                https://youtu.be/NOpoyd-i6L4
                Ответить
                • Генетический код всё-таки какой-то пхпшник писал.
                  Ответить
                  • И был он бухой.
                    Ответить
                    • Там же ещё куски кода от червей и рыб используются на самых первых фазах загрузки. Хуяк-хуяк и в продакшен.
                      Ответить
                      • Работает - не трогай
                        Ответить
                      • Да это нормально, x64 тоже в реальном режиме грузится, как и человек грузится с жабрами и хвостом.

                        Хз, работает ли тут обратная совместимость: можно ли остаться с жабрами, например
                        Ответить
                        • > остаться с жабрами

                          Такие сбои скорее всего фатальные.

                          А вот хвост и ушки наверное можно отрастить если в нужный момент нужные градиенты какого-нибудь вещества будут.

                          Код обезьяньего хвоста всяко остался на память в бинаре. Хотя, с другой стороны, мог и испортиться, раз давно не юзали.
                          Ответить
                          • Скорее всего он и испортился. Но юзеры уже не прыгали по деревьям и забыли зарепортить регресс.
                            Ответить
                            • Занимательная говногенетика.
                              Ответить
                              • Жаль, что говноевгеникой нельзя заниматься.
                                Ответить
                          • Это все мифы. Жабры превращатся в миндалины, внутренее ухо и какую то железу. А хвоста в программе нет, это исходник костей ног. Даже если и вырастает на копчике, то не содержит мышц.
                            Ответить
                  • Эрлангист скорее. "Let it crash" (если генетические коды кого-то приведут к носкам для программирования, то популяция в целом всё равно выживет)
                    Ответить
                    • > Эрлангист скорее.

                      Мейби, всё-таки распределённая отказоустойчивая система, в которой триллионы простых нод общаются друг с другом.
                      Ответить
      • https://pikabu.ru/story/ya_i_moy_kod_7352388?cid=165996847

        > Так, блять. Я на тег "программист" подписался, и видеть вот это было неожиданно. Но раз уж я тут тот пошучу.
        > я бы не стал с тобой заниматься экстремальным программированием.
        частенько ли ты рефакторишь с другими парнями?
        > я так понимаю, любимый язык это питон.
        > И мне интересно познание какого языка тебя до этого довело?
        > Без обид, просто тупые шутки

        Какой багор )))
        Ответить
        • А я знаю ещё шутки про трансов, как раз для пикабу!

          1. Какую функцию транссексуалы-пхпшники используют в два раза чаще чем обычные пыхеры? die();

          2. Как определить, пол транса? Посадите его в опенспейс: если он начал кодить, то он кун, а если начала, то тян.

          3. Сколько трансов нужно, чтобы написать программу? Как минимум столько, сколько требует квота на трансов.

          4. Какой тип данных нужен, чтобы представить все возможные гендеры? Boolean.

          Ну это так, просто глупые шутки. Без обид, ладно?)
          Ответить
          • > Boolean

            BOOL из винапи вполне норм для этого. Через него иногда реально нон-бинари значения возвращаются (не TRUE и не FALSE).
            Ответить
            • Осталось лишь выиграть холивар какой пол трушный. У нас в коде им был женский.
              Ответить
    • vanished
      Ответить
      • Солнце скрылось за горою
        Затуманились речные перекаты

        Мы в школе (или даже в саду?) на уроке пения пели
        Ответить
        • А дорогою степною
          Шли домой с войны советские солдаты.
          Ответить
          • А мы с тобой, брат, из пехоты,
            А летом лучше, чем зимой.
            С войной покончили мы счеты,
            С войной покончили мы счеты,
            С войной покончили мы счеты, –
            Бери шинель, пошли домой!
            Ответить
        • > уроке пения

          Кстати, кому-нибудь реально пригодилось на практике?
          Ответить
          • Мне вообще мало чего пригодилось.

            До сих пор помню, как писал на уроке биологии: "кольраби -- ценная овощная культура"
            Зачем?
            Ответить
            • Никогда не знаешь что когда пригодицца
              Ответить
              • Дай реальный пример, когда тебе в работе пригодилось знание того, что кольраби -- ценная овощная культура
                Ответить
                • Ну вот вырастет у тебя в огороде какая-нибудь хреновина — и как ты узнаешь, сорняк это, или ценная овощная культура?
                  Ответить
                • Ещё не пригодилось. Я только 2 минуты назад это узнал.
                  Ответить
            • Кстати, где-нибудь их продают?
              Вкусная же штука (для тех, у кого осталось хоть несколько зубов или тёрка, у которой осталось хоть несколько зубов).
              Ответить
              • Ну вот в Азбуке Вкуса есть, но может быть и в пятерочке

                Вики пишет, что в кольраби больше витамина цэ, чем в лимоне
                Ответить
    • Перекат!

      https://govnokod.ru/27120
      https://govnokod.xyz/_27120/
      Ответить

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