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

    0

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

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

    Запостил: nepeKamHblu_nemyx, 14 Сентября 2020

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

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

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

      Индекс оффтопов: https://index.gcode.space/.
      Зеркала Говнокода и полезные ресурсы:
      * https://govnokod.xyz/ (альтернативный Говнокод)
      * https://gcode.space/ (read-only зеркало Говнокода)
      * @GovnokodBot в «Telegram»
      * https://vorec.space/ (глоссарий Говнокода)
      Ответить
    • Перекатный петух не спит.
      Ответить
    • https://sun9-41.userapi.com/xxFw_JThBxM0VWB-LQ7SOMolZ5LExXN23fwG_g/vp0SjrEbW7c.jpg
      Ответить
      • да тащемто любой современный мощный IDE: что VisualStudio, что Intellij (Android Studio сделана на Intellij)
        Ответить
    • https://imgur.com/3EcN4Bk
      Ответить
      • NOOOOOOOO
        Ответить
      • Я надеялся что там девушка с тиндера
        Ответить
      • ахахахахахах
        ща пол интернета варнингами засрет
        Ответить
        • а сейчас как-то иначе?
          Ответить
        • Для этого нужно «PHP» везде обновить.
          Ответить
          • ну админ обновит на шаред хостинге йи пиздец
            Ответить
            • На шаред хостинге есть выбор какой "PHP" использовать. Или он минорную версию имеет право без предупреждения обновлять?
              Ответить
              • минроную может и может
                мажорную вряд-ли конечно, если он не идиот, но я не уверен точно
                Ответить
                • Шаред хостинг может обновить 5.3.19 до 5.3.20 или 7.3.21 до 7.3.22.

                  5.3 до 5.4 или 7.3 до 7.4 никто обновлять не будет, потому что половина сайтов вообще работать не будет. Админы не настолько дураки.
                  Ответить
    • https://www.youtube.com/watch?v=W_WH2H9hohw Искуственный идиот за работой
      Ответить
    • https://sun9-73.userapi.com/RK1TeRoqZI9TO9w7QAbtY0xrWJkC8TLEb-e6_Q/b7pvYkVwRgA.jpg
      Ответить
    • https://habr.com/ru/post/515550/

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

          подделать pgp
          Ответить
          • На самом деле не нужно ничего подделывать, скажем за это спасибо «Гитхабу».
            https://github.com/slavniyteo/upgraded-octo-funicular/commits/master (ссылка из статьи).
            Ответить
            • Ну а как они должны были это сделать? Многие же просто зеркало на гитхабе держат или мёржат коммиты у себя и потом заливают на гитхаб. Не заставлять же всех всё подряд сначала через гуйню регаться как контрибьютор.

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

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

                  Имхо, надо просто людям вбивать с детства простую истину - нельзя доверять всему, что на заборе написано. Если нет явного пруфа.
                  Ответить
                  • «Гитхаб» может подтвердить твои коммиты безо всяких подписей, ему для этого достаточно сверить почту в коммите и почту того юзера, который этот коммит ему пушит. Проблема случается только тогда, когда ты с юзера с почтой [email protected] пушишь коммиты с почтой [email protected] Собственно, для этих ситуаций и нужна (сложные проблемы вроде миграции VCS не рассматриваем) подпись коммитов.

                    Сейчас же «Гитхаб» в том проекте пишет «[Торвальдс] Committed to this repository in the past month», что есть пиздёж. Пиздёж в UI — это плохо.
                    Ответить
                    • Кстати так ведь и скрытые емейлы спалить можно. Создать репу с тыщей участников. А гитхаб покажет их профили если они есть.
                      Ответить
                      • А 67 тысяч участников в репе этот ваш «Гитхаб» потянет?
                        Ответить
                      • Не уверен, кстати, что он со скрытой почтой будет палить емейл. Там же скрытным юзерам просто выдаётся фейковая почта вида «[email protected]» (или подобная), по которой «Гитхаб» и устанавливает авторство коммитов.
                        Ответить
                        • Ну чел с х-ра утверждает, что спалил.
                          Ответить
                          • Звучит как «чел с трибуны утверждает». Поэтому вопрос: зачем он залез на х-р?
                            Ответить
          • Дык зачем подделывать php, если ты можешь просто в конфиг любое мыло вписать и коммитить им?
            Ответить
            • я немного проебал

              имел в виду gpg. но всё равно все всё поняли, видимо

              я вот не вижу разницы на гитхабе в UI между коммитами реального Линуса и коммитами "Линуса". в чём тогда смысл gpg? или Линус им не пользуется?

              https://docs.github.com/en/github/authenticating-to-github/telling-git-about-your-signing-key
              Ответить
    • https://sun1-94.userapi.com/xUTmeBI2hQWwf0DxRsvEvnWha9I6v1LYF5hLWA/Hq2fUn1y-RM.jpg
      Ответить
    • Не помню, было ли на «Говнокоде» или нет. Вакансия в Тюмени:
      https://tyumen.zarplata.ru/vacancy/card/132987921/Imitator_programmista?position=29
      Ответить
      • Если согласитесь сделать татуировку на видном месте, что тона вроде "Я - KDEраст и горжусь этим" дадим надбавку к окладу (накинем пару тысяч).
        Ответить
    • В ведроиде по умолчанию отключён опечаточник? Заметил, что пользователи ипхонов пишут без опечаток и с большой буквы, а андроидов - как попало.
      Ответить
      • в чистом андроиде есть гуглоклава которая это делает
        Ответить
        • Ты сейчас с какой ОС ответил?
          Ответить
        • Проблема в том, что чистый «Андроид» бывает, пожалуй, только на планшетах. А на смартфонах каждый производитель старается впихнуть свою клаву и со своими дефолтными настройками.
          Ответить
          • Именно поэтому я пишу комент с гугл пикселя на котором чистый андроид
            Ответить
            • Регулярно забываю про эту марку...
              Ответить
              • Самая заебатая марка

                Если ты купишь устройство со сборкой вендора, то так и будешь сидеть на четвертом андроиде 10 лет
                а нексус пиксель будет обновляца
                Ответить
                • пиксели кстати называют айфонами от мира android из-за длительных циклов поддержки
                  Ответить
                  • Поддержка айфона заключается в том, что через год ты приходишь, и говоришь "у меня стала плохо держать батарейка", а тебе говорят: "мы баатерейки не меняем, гарантия кончилась, можем продать вам точно такой же по точно такой же цене")

                    но про софт ты прав: обновлять ios можно долго
                    Ответить
                    • все влагозащищенные телефоны не поддерживают замену батареи
                      Ответить
    • Вопрос к питонистам.

      Есть 2 пакета. В одном либа точена, во втором сосноль для неё дрочена. Как идиоматично из второго поюзать первый?
      Ответить
      • Guido views running scripts within a package as an anti-pattern.

        А, ну ок, т.е. так не делают.
        Ответить
        • да, скрипт лучше иметь на верхнем уровне
          и импортить можешь по полному пути
          Ответить
          • > на верхнем уровне

            Спасибо. Получается, что питон добавляет каталог с главным скриптом в path, поэтому абсолютные импорты работают только если он в корне проекта. А относительные импорты в главном скрипте в принципе никогда не работают (у главного скрипта в __name__ фигня).
            Ответить
            • абсолютные импорты всгеда считаются от sys.path.
              Если ты туда явно добавишь верхний уровень, то вероятно можешь и по полному импортировать, но это ебля

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

              Кстати, хочешь, чтобы консоль автоматически находилась, если установлена на интерпретатор или виртуалэнв?

              Используй
              https://packaging.python.org/guides/creating-and-discovering-plugins/
              Ответить
              • О, круто, т.е. он сам создаст враппер для моего скрипта во время установки пакета? И судя по доке тогда скрипт может быть не только в корне, с sys.path враппер сам разберётся.
                Ответить
                • Ты про "console_scripts" ?*

                  Я сам не пробовал, но судя по тому, что овердохуя пакетов на pypi имеет запускалку (virtualenv, django, flask, jupyter, pytest, to name few) и все они как-то на прыщах имеют sh с шебангом в нужный питон, а на винде .exe (ну вероятно импортирующие нужный .dll?) это работает.

                  *
                  https://python-packaging.readthedocs.io/en/latest/command-line-scripts.html

                  [quote]
                  Setuptools will generate a standalone script ‘shim’ which imports your module and calls the registered function.
                  [/quote]
                  Ответить
                  • А ты не это имел в виду под "консоль сама находилась"?
                    Ответить
                    • я имел ввиду API для поиска плагинов.

                      Типа ты можешь написать несколько консолей
                      * терминально/коснольную
                      * вебовскую например
                      * гуйную (ну тут 10050 фреймворков есть для этого)
                      * сетевую телнетную например

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

                      И я мог бы написать плагин с поддержкой еще одной консоли не трогая твой код
                      Ответить
                      • А, да не, у меня банальный коммандлайн интерфейс для либы. Регистрации в console_scripts должно хватить.

                        Но механика с плагинами прикольная, да.
                        Ответить
                        • на чем сделан интефейс? argparse? click?
                          Ответить
                          • Аргпарс. Про клик я знаю, но тащить либу ради пары аргументов влом.
                            Ответить
                            • ну в питоне это воще не проблема (у тебя и так ведь есть депенденсы?), но есть проблема идеологическая
                              http://xion.io/post/programming/python-dont-use-click.html
                              Ответить
                              • У меня своя идеологическая проблема - я не люблю цеплять сторонние либы ради мелочей, которые и так на десяток строчек.

                                А статью я не понял, если честно. Челу не нравится, что либа позволяет добавлять аргументы не задумываясь над UX и в итоге получается неудобная хуйня? Сомнительный аргумент, если честно.
                                Ответить
                                • >цеплять сторонние либы ради мелочей
                                  хуясе мелочь: интерфейс командной строки)

                                  >хуйня
                                  ну да, примерно.

                                  Командлайн интерфейс надо продумывать, а не хуяк-хуяк, иначе будет по степени удобства как какойнить netsh или dism)
                                  Ответить
                                  • > интерфейс командной строки

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

                                      Это же Арминовская поделка, как и фласк: там тоже функции декораторами
                                      Ответить
      • Не понимаю вопрос. Сосноль зависит от точеной либы. Ты просто импортируешь из второй первую и течешь.
        Ответить
    • https://otvet.imgsmail.ru/download/u_cfa93563cbc94c0a010b3ed4b8eca740_800.j pg
      Ответить
    • Кто-то вообще здесь участвует в «конференциях», или может быть даже выступает? Пиздит и задаёт вопросы после? Или хуйня всё?
      Ответить
      • Бывало пару раз, но это всё хуйня, конечно
        Ответить
      • Мне лень, я слишком асоциален для этого.

        Туда же в основном катаются чтобы поболтать в перерывах и после конфы. А сами доклады можно и в записи посмотреть.
        Ответить
    • Вопрос попался на SO:

      Why is reading lines from stdin much slower in C++ than Python?

      (в 10 раз)

      Крестобляди соснули )))
      Ответить
      • https://stackoverflow.com/questions/17036059/why-does-javascript-appear-to-be-4-times-faster-than-c
        да ваш с++ уже все по скорости обогнали
        Ответить
        • >That means, if you're on such a system, you're talking in microseconds for C and milliseconds for JavaScript

          ого, какие лалки
          Ответить
      • >By default, cin is synchronized with stdio, which causes it to avoid any input buffering

        Вот так и рождаются легенды
        Ответить
    • Сайт ФСБ доступен только по HTTP без шифрования, по HTTPS нет связи.

      Для отправки оперативной информации они предлагают установить свой софт:
      https://i.imgur.com/ThSsTUM.png

      ФСБ не доверяет браузерному TLS?
      Ответить
      • А с чего бы ФСБ доверять тафту например, или верисайну?

        ЦРУ тоже Ростелекому не доверяет, и правильно делает

        А зачем тебе сайт фсб? Хочешь на нас настучать?
        Ответить
        • >> А зачем тебе сайт фсб?

          Хочу узнать, какие технологии они используют. Если они не доверяют HTTPS, это жжж неспроста. Вдруг нас наёбывают, что HTTPS надёжен, а на самом деле в нём есть дырка, через которую наш трафик спокойно слушают? Стали бы внедрять СОРМ, если бы через неё ничего нельзя было бы прослушать?
          Ответить
          • Эм, дык всё просто. Даже если с алгоритмами всё ок (а с ними, скорее всего, всё ок), то корень доверия во всех популярных осях и браузерах контролируется потенциальным противником. Поэтому зачем создавать иллюзию безопасности и вешать https?

            А насчёт СОРМа - ну список айпишек/доменов тоже полезная инфа, даже если без контента.
            Ответить
          • Дело не в прослушать, а в том, что ЦРУ может заставить американкую компанию CA выдать серт на левого чела, и потом спуфнуть сайт, и ты ему сольешь и карту укреплений советской
            Ответить
            • Кстати, а как сейчас узнать, оригинальный сайт ФСБ передо мной или спуфнутый?
              Ответить
              • А зачем?
                Ответить
                • Ладно, обобщим.

                  Как узнать, оригинальный сайт %SITENAME% передо мной или спуфнутый?
                  Ответить
                  • без https никак
                    Ответить
                  • Юзать https. При условии, что ты доверяешь центру сертификации, который выдал ему серт.
                    Ответить
                  • А вообще, за спуфанье гос ресурсов вроде можно присесть на бутылку.
                    Ответить
                    • Кстати, тут оказалось, что kremlin.ru тоже https принципиально не использует. Они тоже надеются на бутылку?
                      Ответить
                      • Да наверное. А какой вред тебе могут нанести эти сайты, если их спуфнут? Там же просто публичная инфа в рид-онли.

                        Это ж не банк и не говнокодик.
                        Ответить
                        • А спуфнутый говнокодик может навредить тем, что спиздят мой пороль?

                          Кстати, если заходишь в интернеты с публичного «Wi-Fi», который требует логина, то пока не залогинишься, он любые http-сайты редиректит на форму входа. Если я попытаюсь открыть kremlin.ru, а вместо него увижу форму входа провайдера, то можно настучать, что провайдер спуфнул госрерурс?
                          Ответить
                          • Конечно.
                            Инканусу все верят и доверяют. Вдруг ты начнёшь хуйню писать и сливать дезинформацию?
                            Ответить
                            • хуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйняхуйня
                              Ответить
                              • Ня!
                                Ответить
                                • няняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняняня
                                  Ответить
                                  • https://www.youtube.com/watch?v=JAV3EbJLhbc
                                    Ответить
                                    • M-x nyan-mode
                                      Ответить
                                      • Вот что мне нравица в емакс: M-x это единственная комбинация, которую нужно запомнить. Остальное он сам подскажет
                                        Ответить
                                        • >"емакс"

                                          В чём прикол этого непонятного и сложного говна? Не проще ли было бы использовать "Notepad++"?
                                          Ответить
                                      • P.S. даже музыку добавили, правда пришлось патчить, чтобы использовал mpv.
                                        Ответить
                                        • https://marketplace.visualstudio.com/items?itemName=zhengrenzhe.nyan-cat
                                          Ответить
                                          • Анскильный какой-то сайт, ничего не показывает без йажасвитков.
                                            Ответить
                                            • ну сайт для редактора на js
                                              если тебе отключили javascript на лето то и на сайте делать нечего
                                              Ответить
                                        • > музыку добавили

                                          А если в обратную сторону скроллишь, то задом наперёд играет?
                                          Ответить
                                          • Чтобы Сатаню вызвать?
                                            Ответить
                                            • > сатаню

                                              Нявээмню. Сатаня же медленная и устарела, ня.
                                              Ответить
                                              • Ня ^_^!
                                                Ответить
                                              • Я имел в виду https://anidb.net/character/83746 , но интерпретация с баллистической ракетой (?) тоже интересна.
                                                Ответить
                                                • Имелось в виду всего лишь nvme... Хотя с ракетой тоже неплохой вариант.
                                                  Ответить
                                                  • А. Я долго думал над физикой того, как баллистическую ракету сделать медленной.
                                                    Ответить
                                                    • Можно на нее сесть. Как Саша-Барон.
                                                      Ответить
                                    • Я знал, что там будет.
                                      Ответить
                                  • https://www.youtube.com/watch?v=on6v8hpjDr0
                                    Ответить
                  • Попингуй и сравни TTFB до какого-нибудь лёгкого ресурса вроде фавиконки с пингом. Если первое меньше второго — покупай шапочку из фольги.
                    Ответить
      • А твой браузер поддерживает гостовые алгоритмы в тлс?

        Ебаная автозамена в Андроеде
        Ответить
        • А что, gost понапридумывал алгоритмов, которые используются в тсл? Какой скилл )))
          Ответить
      • какой же ужасный шрифт
        Ответить
        • да что ты знаешь об ужасных шрифтах?
          https://4.bp.blogspot.com/-43tRbbXPc0g/UpOQhFe31yI/AAAAAAAAC9w/Dt6ZdeO0_Nw/s1600/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0% B9%D0%BA%D0%B8_044.png
          Ответить
          • Поэтому я против "Linux"/"UNIX".
            Ответить
            • ну сейчас лучше стало, конечно

              а 15 лет назад было очень лулзово
              Ответить
              • Всё равно, от их графических интерфейсов веет какой-то инфантильностью. Эти яркие цвета, эта нарочитая кругленькость и толстенькость форм... Как будто доморощенный дизайнер только дорвался до своей первой задачи и решил сразу раскрыть весь свой "потенциал".
                Ответить
                • Это правда.

                  Все таки самые крутые дизигнеры редко работают в опенсурсе: они скорее в каком-нить эппле кучкуются
                  Ответить
                  • Вот кстати да, хороших программистов в опенсурсе полно. А дизайнеров почему-то очень мало.
                    Ответить
                    • Ну изначально опенсурс двигали программисты, причем совсем не ориентированные не UI, как ты понимаешь:) Иксы в прыщи-то завезли в середине нулевых, через 10 лет после мака.
                      Причем прыщи с TWM там какимнить, KDE еще вроде тогда не было

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

                      Но пользуются все почему-то "Windows" и "macOS", а не "Linux"/"UNIX"; "Photoshop", а не "GIMP"; "Final Cut Pro", а не "Shotcut". Странно...
                      Ответить
                      • особенно на серверах

                        не, ну хуёвые программисты в опенсерсе тоже бывают, тут ты прав. Лердорф там, например, или Видениус.. те еще пидары

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

                            а так-то я ит ам и там
                            Ответить
                        • Мы сейчас обсуждаем продукты массового потребления. Будем честны: в основном opensource-говно крутится среди узкого круга идейных дрочеров на какую-то "свободу" (в ущерб качеству и стабильности). Те же, кто ценит своё время и нервишки, выбирают платное и закрытое ПО, ибо идеологи халявы достойных аналогов так и не предложили.
                          Ответить
                          • ротоёб, это всё было уже обсуждено миллиарды раз на всяких околокомпутерных форумах.. срачи на тему винудос версус линукс в интернетике ведутся со второй половины 90-х
                            Ответить
                            • У кого из ОБЫЧНЫХ пользователей установлена "Ubuntu"? Не программистов, не системных администраторов, а именно простых Васянов-заводчан и домохозяек.
                              Ответить
                              • на работе бывает установлена. Вроде Приватбанк перешел на линукс.

                                Но там заводчане не выбирают ос: чего им админ поставил, то и работает
                                Ответить
                                • Могли бы выбирать - выбрали бы "Windows". Или компьютер с "macOS".
                                  Даже Владимир Владимирович Путин, который, казалось бы, должен максимально ограждать себя от закрытых и потенциально шпионских программ (тем более западного производства), сидит на "Windows". Единственное - он придумал себе преднамеренное отставание по времени, чтобы все западные технологии слежения относительно него устаревали (долгое время использовал "Windows XP", и только недавно перешёл на "Windows 7").
                                  Ответить
                        • А Гутманс и Сураски? А Дмитрий Стогов?
                          Ответить
                          • >Гутманс
                            гугл грит, это Мужская парикмахерская №1

                            >Сураски
                            гугл грит это Клиника Ихилов в Израиле (Сураски)

                            >Стогов
                            вот тут хз, но ничего хорошего конечно там нету
                            Ответить
                            • Это классика! Это знать надо, если ты изучал «PHP».
                              Ответить
                              • Сколько истребителей?
                                Ответить
                              • Понятия не имею какое отношение эти дебычи имеют к "PHP".
                                Ответить
                                • >дебычи
                                  вбил в гугл

                                  Перевод "de biche" на русский biche
                                  олень лань овечка олененок пташка
                                  Ответить
      • а как я знаю, что я скачаю настоящую программу, а не хакерскую поделку?
        Ответить
        • Позвонишь в ФСБ и сверишь хеши с товарищем майором.
          Ответить
          • а кроме шуток?

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

                и да, иногда лицензию на криптопровайдер поставляют вместе с токеном, но только у меня хуй знает но не заработало
                Ответить
                • криптопровайдеры с реализацией гостового алгоритма требуют лицензии? ФСБ типа лицензию купило?
                  Ответить
                  • Ну они там стоят копейки, если не серверная версия. Серверная версия пиздец дорогая была...
                    Ответить
                • Были кстати прикольные зелёные рутокены, у которых вся криптография на борту. А снаружи нужен был только плагин к браузеру. Их закопали походу, дорого?
                  Ответить
                  • такие пластиковые полупрозрачные хуйни на usb? ты предлагаешь их всем выдавать?)
                    Ответить
                    • Эм, ну если ты хочешь подписать официальное обращение в ФСБ, то как ты это сделаешь без токена и серта, выданного кошерным УЦ?
                      Ответить
                      • сгенерю пару ключей, публичный отнесу в МФЦ, не?
                        Ответить
                        • Ну для официального документооборота есть требования к хранению ключей. И обычно в этих требованиях указан защищённый носитель, т.е. токен.

                          Т.е. хранить приватный ключ на компе не положено.
                          Ответить
                          • тогда понятно

                            Это логично, так как у меня на компе стопудово ботнет или еще какая нито хуита
                            Ответить
    • Кто-то по памяти может отличить operator++() от operator++(int)?

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

          Угу, пиздец интуитивный дизайн.

          Кстати, в современных крестах, наверное, сделали бы std::prefix и std::postfix фейковым параметром вместо сраного int'а.
          Ответить
          • зачем воще парамтер? почему не назвать семантически вместо ++?
            фейковый параметре же в любом случае говно, не?

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

              Писать operator,(), operator[]() и operator()() ведь гораздо веселее, чем operator comma(), operator index() и operator call().
              Ответить
              • это всё довольно очевидно, а с ++ -- нет
                Ответить
                • Ну если только два четыре оператора переименовывать - неконсистентно будет. Надо все тогда уж.
                  Ответить
                • Как различать i++ от ++i тоже нихуя не очевидно. Просто все привыкли.
                  Ответить
                  • Да не, тут то всё интуитивно. Если ты живёшь в стране, где пишут слева направо.

                    i++ - вернуть i, а затем сделать ++
                    ++i - сделать ++, а затем вернуть i

                    А вот operator ++ (int) как бы намекает своей записью на ++int. Но хуй там.
                    Ответить
                    • А если я еврей или араб, то нихуя не очевидно.
                      Ответить
                      • А если ты японец, то вообще всё боком почему-то написано.
                        Ответить
                      • вот бляди, а

                        а шо ж делать китайской бабушке

                        wasp'ы сраные!
                        Ответить
                        • китайские бабушки телефоном пользуются чаще, чем С++
                          Ответить
                          • пруфы будут?

                            а китайские погромисты чем чаще пользуются?
                            Ответить
                            • https://en.wikipedia.org/wiki/Non-English-based_programming_languages

                              Ћ плус плус
                              Ответить
                              • тоже его первым приметил

                                при этом
                                Ћ плус плус (Serbian, "C plus plus") is a JavaScript like programming language based on Cyrillic script
                                Ответить
                                • да, попса полнейшная, небось транслируется в джс 1 в 1
                                  функција фибоначијевНиз (н) {
                                      ако (н === 1) {
                                          врати [0, 1]
                                      } у супрoтном {
                                          дај да с = фибоначијевНиз(н - 1)
                                          с.гурни(с[с.дужина - 1] + с[с.дужина - 2]);
                                          врати с
                                      }
                                  }
                                  
                                  фибоначијевНиз(8).споји(', ')
                                  Ответить
                                  • вcрати [0, 1]
                                    Ответить
                                    • на самом деле врати это "возвратить", как вяртацца

                                      а у вас как? вертатися какойнить?
                                      Ответить
                                      • я не встречал ЯПы на украинском языке, потому не знаю

                                        скорее всего будет "повернути"
                                        Ответить
              • >сёма
                крестобляди соснули
                Ответить
          • Это дух сишки: убрали «лишние» слова. Например, в сишке не стали вводить слово «function», а об объявлении функции нужно догадываться по скобочкам. В крестах пошли дальше, сделав объявление лямбды таким же неочевидным.
            Ответить
            • слово "function" не нужно
              как и слово "lambda", "variable" итд
              Ответить
              • Ну тогда не нойте, что постинкремент от преинкремента трудно отличить.
                Ответить
                • экскременты отличить легко

                  а поди пойми кто тут экскремент, а кто эксперемент: ++() и ++(int)
                  Ответить
      • А я вот недавно думал, что должен ++(int) возвращать: изменённый объект или старый?
        Ответить
        • Я даже не пытаюсь думать в этом случае, логики тут нет, проще загуглить или спеку открыть.
          Ответить
        • вот тебе мнемоика: скобки как бы наполняются интом. Сначала они пустые, а потом полные.
          Потому без инта у тебя pre, а с нитом -- post.

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

            Хорошо, что есть https://en.cppreference.com/w/cpp/language/operators/.
            Ответить
            • > не трогать this

              Ну это уже просто плюс какой-то.
              Ответить
    • Петухи, представим такую ситуацию:
      У вас база данных внезапно стала кушать много CPU и захлёбывается. Продакшену плохо. Ваши действия?
      Ответить
      • повысить план
        Ответить
        • Что?
          Ответить
          • у меня на проде бд в облаке
            я докидываю dtu и теку
            Ответить
            • А если у тебя реплика занимает весь сервер, который полностью под завязку (а раньше кушало половину, например).
              Ответить
              • дядя, я маску на улице нашел
                я овню только одну реляционную бд и в подобных проблем у меня не возникало
                Ответить
      • оптимизировать запросы, профилировать, узкие места растачивать, матвьюхи подкостыливать на сложных запросах, индексы где-то дополнительные сделать на правильный набор колонок

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

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

            в постгресе с матвьюхами не так заебись, конечно

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

                в оракле есть фаст рефреш, а это уже полдела по ускорению джойнов
                Ответить
                • в любом случае, вот мы и пришли к стадии ДЕНОРМАЛИЗАЦИИ нормализованной бд
                  Ответить
                • Я не знаток оракла, но помню, что в ms-sql 2005 уже были материализованные вьюхи, и они вроде бы сами обновлялись, то есть база понимала, от чего они зависят, и как-то их пересчитывала (может быть это замедляло insert/update, не знаю).

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


                  зы: оказывается, правильно помню

                  "One difference is that SQL Server’s indexed views are always kept up to date. if a view’s base tables are modified, then the view’s indexes are also kept up to date in the same atomic transaction."
                  Только они Indexed views
                  Ответить
                  • зачем вспоминать о mysql на ночь
                    Ответить
                    • потому что они небось до сих пор делают так https://stackoverflow.com/questions/40733970/materialized-view-in-mysql
                      Ответить
      • Посмотреть в лог. Вроде там самые тяжёлые запросы можно залогировать. А дальше уже подумать, откуда они взялись и что с этим делать.
        Ответить
      • 1. включить логи для долгих запросов
        2. найти долгие
        3. сделать им explain

        а дальше всё зависит от конкретной субд
        Ответить
        • Ну посмотрел ты эти долгие запросы, ну да - долгие, раньше то как-то работало. Дальше что?
          Ответить
          • Ну если там миллионы запросов на одно и то же - возможно тебя специально или случайно ддоснули. Я в подобной ситуации просто забанил айпишник этого пидора и всё прошло.
            Ответить
            • нормальная субд может сама кешировать результаты селектов, если она знает, что состояние не менялось, а использовались только иммутабельные и стабильные функции
              Ответить
              • Это правда. Но миллион одинаковых запросов всё равно плохо: даже если СУБД тебе сразу выдаст ответ из кеша из памяти, то потом ORM будет пыхтеть заворачивая это всё в объекты, например
                Ответить
                • миллион одинаковых запросов сделают больно даже для нжинкса, даже если его будут просить из кеша статику давать, о чем говорить
                  Ответить
          • а дальше explain. Обычно бывает понятно, почему они долгие.

            например, ты джойнился без индекса с другой таблицей, в которой было 2 записи
            А тут внезапно их стало 9500000 там

            бывает еще N+1.
            Когда у тебя кол-во запросов растет в зависимости от кол-ва записей
            Пока их мало -- всё летает
            А потом внезапно бум, и все лежит

            Это надо срочно чиинить!
            Ответить
      • Пятиминутка рекламы.
        В Django есть Debug toolbar
        Для каждой страницы он выдает картинку типа
        https://vegibit.com/wp-content/uploads/2020/02/debug-django-sql-query.png
        Ответить
        • реклама джанги на сайте на вордпрессе
          какая аллюзия
          Ответить
          • Какой догфуддинг )))
            Ответить
          • я регулярно обсираю PHP, MySQL и JavaScript сидя на сайте, который на них написан
            Ответить
            • Да тут весь стек, начиная от транзисторов и заканчивая джаваскриптом уже обосрали...
              Ответить
              • про тразнисторы не сказу, но интел -- переусложненное говно же, не?
                нахуя иметь процессор, половина возможностей которого не используется?
                Ответить
                • Нахуя покупать машину и использовать спидометр наполовину?
                  Ответить
                  • Скорость можно сравнить с частотой. Раз в год тебе нужно ехать по максимуму. С частотой так же.
                    Но я не о частоте.
                    Я о, например, 16 и 32 битных режимах, о хардваном переключении контекста, о сегментах, даже об i/o (ну кому оно особо надо?)


                    И вот я уверен, что какое-то кол-во инструкций реально не используется. Нет?

                    А ты не согласен? Скажешь, у интела чистый и логичный дизайн без легаси и костылей?
                    Ответить
    • https://github.com/docker/cli/issues/267#issuecomment-695149477
      > I no longer build software; I now make furniture out of wood. The hours are long, the pay sucks, and there's always the opportunity to remove my finger with a table saw, but nobody asks me if I can add an RSS feed to a DBMS, so there's that :-)
      Ответить
      • Да, я тоже подумываю иногда уйти в монастырь.

        > add an RSS feed to a DBMS
        А JSON в СУБД нормально? А XML с XPATH?

        А вот такое не хочешь??
        https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql?view=sql-server-ver15
        Ответить
        • Вот уйдёшь в монастырь, а потом монахи узнают что "тыж программист", и будешь им настраивать телефоны да ноуты.
          Ответить
          • надо уходить в женский монастырь и драть монашек
            Ответить
          • Я и так это иногда делаю) Недавно как раз знакомый притащил комп с prescott четвертым пнем, и мы ему туда пхали купленный на авито q9500 йоркфилд, и комп стал вполне юзабельный, а так бы отправился на помойку.

            А к тебе такое не носят?
            Ответить
            • О, тот комп таки завёлся после апгрейда? Грац!

              В прошлом городе носили, а сейчас особо и некому.
              Ответить
              • Завелся) Пришлось обновить биос. Для этого пришлось флешку переформатнуть на fat32: биос не умел exfat. После втыкивания памяти он тупил некоторое время и перезагружался (видимо биос подбирал частоту памяти? или хз что), но в итоге вполне живой.
                Ответить
        • Json в СУБД это охуенно, например. Только слабые духом опираются на первую нормальную форму
          Ответить
          • Однако же сама идея напоминает необычное использование обычных вещей, просто видимо это та ситуакция, когда practicality beats purity.

            Видел ссылку про ms-sql? Как тебе идея отправлять email средствами СУБД?
            Ответить
            • Ну годная идея же. А то вечно все ебут мозг как отправить емейл посреди транзакции и как потом при откате сделать вид, что его не было.
              Ответить
              • Да, это удобно. Оно не сразу шлется, а ставится в очередь в базе, так что rollback его откатит. Кроме того, DBA может сам себе отчеты слать
                Можно даже the message may include a query result set, file attachments, or both.
                Ответить
              • Какой анскил ))) У нас в "mnesia" в транзакции было мета-поле для ивентов, куда юзер мог что угодно атомарно эмитить; лог транзакций на лету писался в "Kafka"; потом из топика доверенные процессы-фильтры извлекали разные типы ивентов (в т.ч. про "надо бы послать email"), и запускали уже какую угодно бизнес-логику.
                Ответить
                • P.S. https://github.com/klarna-incubator/kflow (часть пайплайна, за вычетом всей бизнес логики, которую я даже заопенсорсил)
                  Ответить
                • Это правильно. Такую же конструкцию народ собирал и на обычной СУБД (или MQ) с каким нить Spring Integration: создавалось событие, и подписанные на него товарищи узнавали, что надо отравить емелй. Либо же message шел по пайпу, покуда не достигал точки отправки в емейл.
                  http://glenn-renfro-dev.blogspot.com/2012/02/adding-attachement-to-email-via-spring.html
                  Ответить
            • Не то чтобы это был необходимый запас для поездки, но если начал собирать дурь, становится трудно остановиться.
              Ответить
      • If it's a funny comment, use the :-) reaction, don't fill up my fucking feed with this bullshit

        Fuck you


        КИБЕРБУЛЛА ИСПОЛЬЗУЕТ ЗАКЛИНАНИЕ РЕПЛАЙ ТУ ОЛЛ
        Ответить
    • > Австралиец осуждён за майнинг криптовалюты на суперкомпьютере
      > По оценкам следствия, Кху удалось добыть около $6,8 тыс. в криптовалюте — Ethereum и Monero. При этом в полиции подсчитали, что ущерб от использования суперкомпьютера для майнинга составил $55,4 тысячи.

      Какой майнинг )))
      Ответить
      • Он там напитоне что ли майнил?
        Ответить
        • Почему?
          Ответить
          • Да что-то КПД совсем никакое... В 10 раз больше потратил чем намайнил.
            Ответить
            • Ну это по мнению полиции (•‿•)

              Кстати, это сколько в битках щас? Один или полтора?
              Ответить
            • зато атмосферы нагрел

              мог сделать инкукубатор и высиживать цыплятор без кур
              Ответить
              • > высиживать

                Скорее варить...
                Ответить
              • А яйца где брать?
                Ответить
                • Из вылупившихся куриц.
                  Ответить
                  • А куриц куда девать?
                    Ответить
                    • варить
                      Ответить
                      • А варёное мясо куда девать?
                        Ответить
                        • Есть.
                          Ответить
                          • А говно куда девать?
                            Ответить
                            • Нашли или выдавили из себя говно, которое нельзя назвать нормальным, на которое без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
                              Ответить
                              • Нашли или выдавили из себя говно, которое нельзя назвать нормальным, на которое без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, ведь это типичный код на ПХП, контрибутните его в зенд
                                Ответить
                              • А комментарии на «Говнокоде» куда девать?
                                Ответить
                                • Страйкер удалит.
                                  Ответить
                                  • А что Страйкер делает с удалёнными комментариями и постами?
                                    Ответить
                                    • Звучит как начало очередного фантастического романа.
                                      Ответить
    • Почему "Алиэкспресс" такое ебучее прыщавое корявое тормозящее неработающее говно? На каждый клик в приложении вылазит один и тот же баннер, хуй знает как его убрать. Восстановление пароля - через пизду https://imgur.com/a/gJjrcpt (5 минут грузилась эта страничка).
      Ответить
      • Потому что это классический китайский дизайн. Зайди на любой узкоглазый сайт — увидишь всё то же самое, только зачастую ещё хуже.
        Ответить
      • Скоро все сайты будут такими. Просто поменяй комп на более мощный.
        Ответить
      • птому что пхп
        Ответить
    • https://sun9-26.userapi.com/nJv56uFim33I2J3TLLZ7b7S70Oq21yvR1CJTRw/EqeYACT_DOM.jpg
      Ответить
      • Именно поэтому я за «PHP».
        Ответить
      • пхп: но если сесть на это кресло -- острый угол впивается в жопу
        продавец: можно подумать, в других креслах не так
        покупатель: а вы видели другие кресла?
        продавец: пока такой необходимости не было
        Ответить
    • https://sun1-96.userapi.com/c628017/v628017597/985c/dtNNFLpOzRM.jpg
      Ответить
    • Недавно встретил вопрос: является ли возможность кинуть исключение нарушением принципа Лисков?

      Что думаете, питухи?
      Ответить
      • Какое именно исключение? Говно в духе
        class Ptica {
        public:
            virtual FlyResult fly() { /*...*/ }
        };
        
        class Kurica : public Ptica {
        public:
            virtual FlyResult fly() override { throw NotImplementedError(); }
        }

        — определённо является.
        Ответить
        • там не уточнялось

          я так и ответил, что всё окей до тех пор, пока родители и наследники срут одними и теми же исключениями
          Ответить
      • Сама по себе возможность ничего не нарушает, исключения эквивалентны возврату Either<Result, Exception>.

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

        Жопа начинается когда интерфейс обещал чего-то не кидать, а тебе в реализации это кинуть надо. И любой джавист на это налетал...
        Ответить
      • Кстати, спасибо что напомнил про Лисков, годная тема. Я тут как раз вопросы сочиняю.
        Ответить
        • > Я тут как раз вопросы сочиняю.
          Тоже в бизнесмены подался?
          Ответить
          • Да ну, какой из меня бизнесмен.
            Ответить
            • Неужели бизнесвумен?!
              Ответить
              • Бизнес-ангел
                Ответить
                • Бизнес-девочка-волшебница.
                  Ответить
                  • Я буду волшебницей! Я буду волшебницей! Ты на деревянной лошадке, и я на деревянной лошадке! Конфетти в нашу честь! И утренник в детском саду!
                    Ответить
        • как завалить джуна с 1 вопроса?
          Ответить
          • Какой багор ???
            Ответить
          • { Вы случайно не PHP Middle ? }
            Ответить
            • зачем пэхэпешнику солид? у них там single file responsibility да и хватит

              да и вообще мемоизация лучших практик при помощи зазубривания аббревиатур это такое, на мой взгляд
              Ответить
              • > при помощи зазубривания аббревиатур

                А надо при помощи тыканья носом на ревью? Ну серьёзно, это ж не какие-то там сраные паттерны, которые могут не пригодиться, это довольно общие принципы.
                Ответить
                • хз. зазубривание solid'а по википедии не отменяет потенциального тыканья носом на ревью.

                  я ж не говорю, что описанные принципы какие-то неправильные

                  > сраные паттерны, которые могут не пригодиться
                  - не соглашусь, если нормально писать, то паттерны пригодятся так же, как и солид
                  Ответить
                  • > паттерны пригодятся

                    Приведи реальный пример.
                    Ответить
                    • да та же стратегия

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

                              Или стратегия здесь выбирается динамически, для каждого случая отдельно? Поэтому представление получает не конкретный инстанс стратегии, а фабрику?
                              Ответить
                              • Например да, динамически. В зависимости от.
                                Ответить
              • > single file responsibility

                сразу в золотые цитаты
                Ответить
                • > single file responsibility
                  Это у Конардо вроде так. Один файл для админки, один для гостевой книги
                  Ответить
                  • Если правишь файл какой-то страницы - проверять нужно только её. Удобно.
                    Ответить
          • Это вопрос на синьора?
            Ответить
            • Вопрос на синьора звучал бы "как завалить миддла с одного вопроса"?
              Ответить
              • как отличить мидла от синора?

                почему вообще всего три градации?
                Ответить
                • это элементарно уотсн
                  если откликается на { Вы случайно не PHP Middle ? }, значит это мидл, а если на { Вы случайно не PHP Senior ? }, то сеньор
                  Ответить
                  • А если серьезно? У тебя вот есть такие градации в проекте?
                    Ответить
                    • есть, зарплаты же разные, под зарплаты составляется штатное расписание с должностями, под должности нужны должностные инструкции и СОУТ на каждое рабочее место каждой должности
                      ну и при осмечивании проекта можно и по средней по больнице, конечно, посчитать, а можно по градациям

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

                    https://www.litmir.me/br/?b=41605&p=1
                    Ответить
              • Мидлов же обычно зондеркоманда из разрабов и лида опционально с менеджером собеседует
                Там можно и самому по себе обосраться
                Ответить
        • > Я тут как раз вопросы сочиняю.
          для кого?

          Вот тебе мой любимый вопрос для джунов про говноооп: можно ли квадрат наследовать от прямоугольника?
          Ответить
          • Если у прямоугольника были только read-only методы, то да.

            Если были read-write - значит нет, квадрат от такого офигеет.
            Ответить
            • классика жанра, как эллипс/круг или ромб/квадрат/прямоугольник
              Ответить
            • молодец, ты прошел собеседование
              можем взять тебя джуном
              Ответить
          • Зачем на ровном месте создавать проблемы?
            Ответить
      • То ли дело классы в "Coq". Соответствие принципу Лисков для любого инстанса нужно доказать.
        Ответить
        • Кому всрался "Coq"? На этом говне хоть примитивную контакт форму можно сделать?
          Ответить
      • Если это исключение часть бизнес логики, то да, разумеется. Клиент не ждал исключения, а оно прилетело
        Если это типичный рантайм, то он откуда угодно может вылетить.
        Ответить
        • щетаю что в бизнес-логике вообще не должно быть исключений, у нас же цель не программу сломать, а сообщить юзеру что так нельзя
          Ответить
          • >щетаю что в бизнес-логике вообще не должно быть исключений,
            Расскажи это джавапитушкам с их Checked exceptions
            Ответить
    • Почему в «Windows» можно скопировать картинку и вставить в письмо в браузер, а в «MacOS» - нет?
      Ответить
      • макобляди соснули

        В винде есть такое понятие -- тип говна в буфере обмена:
        https://docs.microsoft.com/en-us/windows/win32/dataxchg/clipboard-formats

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

            а неужели в сафре не работает?

            зы: ты прав, всё там есть

            https://developer.apple.com/documentation/appkit/nspasteboard/pasteboardtype

            пейстбоард, лол
            Ответить
            • Либо соснули разработчики почтового клиента.
              Ответить
              • веб клиента? так под пиндой же работает?

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

            говорю же вам: говно ваши веб клиенты
            Ответить
    • А чё все притихли?
      Ответить
      • разгребаю квадратные колёса(
        Ответить
        • Тоже депрессия, как у Файки?
          Ответить
          • Скорее, злость. Питухи намизюзали API, понаделали какой-то магии, и у меня всё не работает
            Ответить
        • Подари мне, Анри Руссо,
          своё детское колесо!
          Подари, молодой Пикассо,
          треугольное колесо!
          Мой любимый, любимый Ван Гог,
          подари провансальский звонок!
          Раму мне одолжи, Сера.
          Остальное лежит в сарае.
          Ответить
          • >треугольное колесо!
            На моей могиле трахнули лося
            Колесо сансары завращалося
            (c)
            Ответить
            • https://www.youtube.com/watch?v=wq4hlSFaA70

              Думаю, в этом шизоидном ужасе потоке вореций тебе больше всего понравилась рифма «Сера́ — в сарае».
              Ответить
    • «Сбербанк» провёл ребрендинг и стал называться «Сбер».

      https://hi-tech.mail.ru/news/new-sberbank-sber/
      Ответить
      • Поколение даунов, для которых всё упрощают до предела. "ВКонтакте" превратился в "VK", "Хабрахабр" - в "Хабр", "Сбербанк" - в "Сбер"... Ждём появления платёжной системы "ЯД", что ли...
        Ответить
        • Подтверждаю. То ли дело «ГК»!
          Ответить
          • –— Я потеряла сумку. Куда мне обратиться?
            —– Спросите в ЖОПе.
            –— Где?
            —– В железнодородном отделе полиции.
            –— Это где же вас таким сокращениям научили?
            —– В ПИЗДе.
            –— Где?
            —– В правительственном институте защиты демократии.
            Ответить
            • Ты давно художественный университет Йоханнесбурга окончил?
              Ответить
            • НИИОМТПЛАБОПАРМБЕТЖЕЛБЕТРАБСБОРМОНИМОНКО Н ОТДТЕХСТРО

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

      Нехватку плодов России, странам Европы и Ближнего Востока предрекают из-за извержения вулкана в Эквадоре.

      https://news.mail.ru/economics/43486610
      Ответить
      • Для резидентов "Говнокода" это хороший повод перейти на огурцы и получить фейерверк новых ощущений от доселе неведомых пупырышек.
        Ответить
        • https://io.ua/img_aa/large/0230/68/02306873.jpg
          Ответить
          • https://imgur.com/a/gNMtwIS
            Ответить
            • псовые обычно всеядны. Собака и яблоки ест.
              А вот коты нет. И вообще, они огурцов боятся
              Ответить
              • йеп, omnivorous
                Ответить
              • Я видел реальные примеры котов, которые уплетают огурцы.
                Ответить
                • а есть пример, где такой кот реально нужен в работе?
                  Ответить
                • а если у тебя есть огород, то этот шерстяной пидарас может погрызть вообще все огурцы, которые выросли (мама-пенсионер охуела от такого поведения)
                  Ответить
                  • Какой багор )))
                    Ответить
                  • >ерстяной пидарас

                    чото вспомнилось
                    https://www.youtube.com/watch?v=WwOII5xWlW4
                    Ответить
                  • > огурцов боятся
                    > погрызть все огурцы

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

                      видосики-мемасики это в основном про то, как неожиданно подложить за спину коту что-то напоминающее змею - работают инстинкты
                      Ответить
      • могу продать свой банан
        Ответить
    • Давайте течь от «Nemerle».
      def title = "Programming language authors";
      def authors = ["Anders Hejlsberg", "Simon Peyton-Jones"];
          
      // 'xml' - macro from Nemerle.Xml.Macro library which alows to inline XML literals into the nemerle-code
      def html = xml <#
        <html>
          <head>
            <title>$title</title>
          </head>
          <body>
            <ul $when(authors.Any())>
              <li $foreach(author in authors)>$author</li>
            </ul>
          </body>
        </html>
      #>
      Trace.Assert(html.GetType().Equals(typeof(XElement)));
      WriteLine(html.GetType());
      Ответить
      • Переведи на "PHP".
        Ответить
      • хороший статически типизированный язык под хорошую платформу, с хорошим паттерн матчингом

        ну а макросы воще огонь, да
        Ответить
      • >"Nemerle — гибридный язык высокого уровня со статической типизацией"

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

              В то время как любой код на ПХП написан "ротоёбами"
              Ответить
            • у тебя не выйдет допиливать проект на Немерле

              знаешь, почему?
              Ответить
              • Потому что таких проектов менее одного?

                Кстати, я хочу потечь от F#. читал как-то про него, и увложнился.
                Мне нравятся статически типизированные кросс платформенные функицональные языки
                Ответить
                • /// A mutable binding.  This is required to be able to mutate the value of 'otherNumber'.
                  let mutable otherNumber = 2
                  
                  printfn "'otherNumber' is %d" otherNumber
                  
                  // When mutating a value, use '<-' to assign a new value.
                  //
                  // Note that '=' is not the same as this.  '=' is used to test equality.
                  otherNumber <- otherNumber + 1


                  В таких погремушках можно и увязнуть
                  Ответить
                  • а что не так?

                    мутабельность это зло

                    чем меньше мутабельности -- тем стабильнее софт
                    Ответить
                    • а контекстно-зависимый оператор это зло или?
                      Ответить
                      • он для внимательных программистов;)
                        Ответить
                        • ну т.е. хуйня полная

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

                            ты же согласен я надеюсь, что иммутабельным должно быть всё, что в принципе может быть иммутабельным? *

                            * Хотя Мац думает с точностью до наоброт
                            Ответить
                            • Я тебе могу сказать, что простых смертных не ебёт никакая "иммутабельность". Нормальные пацыки используют "array" и текут.
                              Ответить
                              • > что простых смертных не ебёт никакая "иммутабельность".
                                Подтверждаю.
                                Только var, только массивы.

                                > Нормальные пацыки используют "array" и текут
                                Их благословил Царь всея Ру-Си.
                                Ответить
                                • Фонд Бастинды, Гингемы и Урсулы благодарит вас за помощь в распространении рака
                                  Ответить
                            • иммутабельность упрощает работу компилятора

                              может задавать семантику

                              а что со стабильностью?
                              Ответить
                              • стабильность проистекает из уменьшения количества состояний
                                Ответить
                                • словесная эквилибристика
                                  Ответить
                                  • Неизменяемые объекты имеют меньше состояний. Точнее, одно.
                                    Чем меньше состояний -- тем проще доказать, что объект работает верно.

                                    Что не так?
                                    Ответить
                                    • кому проще доказать?
                                      Ответить
                                      • Программисту.
                                        Ответить
                                        • и когда он это делает?

                                          кстати, то, что "объект работает верно", вроде должно подтверждаться работой внутренней логики объекта

                                          напишешь его логику с учётом потенциальной иммутабельности и проблем быть не должно
                                          Ответить
                                          • >и когда он это делает?
                                            Когда читает код

                                            >напишешь его логику с учётом потенциальной иммутабельности и проблем быть не должно

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

                                              у него есть иммутабельное поле ссылочного типа

                                              у этого поля есть своё мутабельное поле ссылочного типа

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

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

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

                                                  иллюзия безопасности
                                                  Ответить
                                                  • >а на уровне программиста?
                                                    Тоже.

                                                    Если поле foo не изменяемо, то я могу расчитывать на то, что оно не поменяется в процессе.

                                                    >если ты берёшь библиотечные типы, как ты можешь гарантировать иммутабельность
                                                    Именно потому я за const и C++)

                                                    На самом деле в Kotlin многие библиотечные типы неизменяемы
                                                    Скажем, List по умолчнаию рид-онли

                                                    В свифте не так?

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

                                                      Угу. Тем не менее даже в крестах и сишке юзают конст. Хотя там можно сломать вообще всё что угодно.
                                                      Ответить
                                                      • есть разница между "юзать конст", когда ты понимаешь, что он тебе реально нужен, и пихать let везде только потому, что так написано в референсе языка
                                                        Ответить
                                                        • НЕ const тип очевидно поддерживает больше действий, и потому делать что либо НЕ конст нужно только в том случае, если тебе это реально нужно.

                                                          Ты же не предлагаешь везде юзать 64х битные числа сужая тип только если тебе это реально нужно?
                                                          Ответить
                                                      • кстати, в сишке можно const же указать явно в типе аргумента, верно?
                                                        Ответить
                                                        • Аргумента?
                                                          Аргументы там по значению и по указателю.
                                                          Для значения смысла большого нет. Для указателя можно конст.
                                                          А также можно скастить конст в неконст, ибо ишь чего ты захотел, в рамки царя загнать?
                                                          Ответить
                                                          • где скастить? внутри самой функции?
                                                            Ответить
                                                            • Да, ты можешь снять конст если надо. Но потом не жалуйся на сегфолты если там реальный конст.
                                                              Ответить
                                                              • const_cast лол
                                                                Ответить
                                                              • Да, ты можешь снять кондом если надо. Но потом не жалуйся на сифилис.
                                                                Ответить
                                                                • Совершенно верно.

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

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

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

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

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

                                                              Что будет?

                                                              Может быть ничего плохого. А может быть сегфолт. Как карта ляжет
                                                              Ответить
                                                    • > В свифте не так?
                                                      - сделай let, будет ридонли

                                                      В обжси конкретно NSArray и NSMutableArray

                                                      > многие библиотечные типы неизменяемы
                                                      - это ты щас про стандартную библиотеку, а всякие там 3rd party.

                                                      > Если поле foo не изменяемо, то я могу расчитывать на то, что оно не поменяется в процессе.
                                                      - ну а почему оно должно вдруг поменяться в процессе? программист совсем мышей не ловит и не знает, что делает его коТ?

                                                      кстати, а рефлексией в Котлине нельзя насрать в ридонли поле?)
                                                      Ответить
                                                      • >- это ты щас про стандартную библиотеку, а всякие там 3rd party.
                                                        Это плевок в вечность, к сожалению
                                                        А лучше бы их не было

                                                        >- ну а почему оно должно вдруг поменяться в процессе?
                                                        Компилятор ничего не знает, и не может доказать. Это усложняет статический анализ.

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

                                                        >кстати, а рефлексией в Котлине нельзя насрать в ридонли поле?)
                                                        Можно.
                                                        А в си можно насрать куда угодно вообще. Предлагаю по этой причине отказаться от использования енумов. И от модификатора const. И от була.

                                                        Зачем мне как-то ограничивать программиста, если он всё равно может туда насрать?
                                                        Ответить
                                                        • ну то есть это всё-таки для компилятора

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

                                                          > Программист может проверить вручную конечно, но даже в этом случае он может отдать объект в 3рд парти код, который поменяет его через 2 часа в другом треде.
                                                          - ок, это один из юзкейсов, но нафига помечать let'ом, например, приватные поля с точки зрения помощи погромисту? или локальные пельменные внутри функции

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

                                                            Не только. Еще и ради программиста.

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

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

                                                            class Square(val side: Int) { //если side будет мутабельным полем -- этот код может быть невалиден
                                                                val square = side * side
                                                            }


                                                            >но нафига помечать let'ом, например, приватные поля с точки зрения помощи погромисту

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

                                                              Но в классе/структуре лучше иметь ключевые поля немутабельными. (Это те которые от которых считаются хеши, и которые мапятся на ключ в базе).

                                                              Пруфов не будет.
                                                              Ответить
                                                              • Хеш отличный пример

                                                                У полностью немутабеьного объекта я могу посчитать хеш один раз и закешировать.

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

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

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

                                                                Если для взлома этой системы используется рефлексия или прямая работа с памятью, то это хак, и работа класса не гарантируется

                                                                Точно так же, как не гарантируется например работа материнской платы, если ты будешь тыкать туда отвёрткой
                                                                Ответить
                                                                • https://govnokod.ru/26949#comment578693
                                                                  Ответить
                                                                  • если поля у полей можно поменять, то объект не полностью иммутабелен, однако количество возможных состояний у него все равно меньше

                                                                    Не полностью иммутабельный объект лучше, чем полностью мутабельный)
                                                                    Ответить
                                                                    • ну короч

                                                                      тебе надо одно паблик ридонли поле

                                                                      ты радостно хуячишь let на всё, что видишь на мониторе

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

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

                                                                          Многие твои соплеменники ушли в него из пхп

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

                                                                        Во-1. Не факт. Ну если как в Хаскеле не делать.
                                                                        Во-2. Копирований может быть не так и много (COW). Зато багров с многопоточностью на порядок меньше.

                                                                        Вообще, кмк, вы оба правы.
                                                                        Ответить
                                                                        • разве cow это не детали реализации?

                                                                          > Зато багров с многопоточностью на порядок меньше
                                                                          - каких именно багров? клиенты начнут дрочить твои поля в обе стороны из ста потоков? ну сделай их private(set), если конечно твой езык умеет такое (обычный приватный сеттер-то точно умеет)
                                                                          Ответить
                                                                          • > каких именно багров?
                                                                            race condition

                                                                            Классика мутабельной питушатни. Йажа:

                                                                            > ну сделай их private(set),
                                                                            private static final SimpleDateFormat koko=...
                                                                            Предлагаю угадать почему этот код хуёвый. Ошибка просто классическая.
                                                                            Ответить
                                                                            • зачем тебе private final?

                                                                              я могу взять и написать у себя

                                                                              public private(set) var ololo: Int
                                                                              Ответить
                                                                              • >зачем тебе private final?
                                                                                Ну это идиоматично и правильно.
                                                                                Этот код тоже ошибочен.
                                                                                private static SimpleDateFormat koko=...


                                                                                Кстати. Если взять ту же Йажу, мутабельность массивов снижает пирфоманс.
                                                                                Т.к. для бубликации приватного массива каждый раз нужно делать копию.
                                                                                Ответить
                                                                                • я не очень понимаю твою мысль
                                                                                  Ответить
                                                                                  • Статический *DateFormat скорее всего будет использован из многих потоков, что приведёт к неправильному форматированию, т.к. у него в кишках мутабельный стейт.

                                                                                    Но обычный программист даже не догадывается об возможности такого проёба.

                                                                                    Если бы SimpleDateFormat был внутри себя немутабельным (не имел приватного мутабельного стейта), такой хуйни бы не было.

                                                                                    https://dzone.com/articles/java-simpledateformat-is-not-simple
                                                                                    Они там прям так и пишут:
                                                                                    >This is a common mistake most of us have made when formatting dates in Java.
                                                                                    Ответить
                                                                                    • > Но обычный программист даже не догадывается об возможности такого проёба.

                                                                                      Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally.

                                                                                      https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

                                                                                      если доберётся до доки, то всё увидит

                                                                                      ----

                                                                                      а как ему не иметь мутабельный стейт, если он ему нужен (допустим, это не переписать)?
                                                                                      Ответить
                                                                                      • >если доберётся до доки, то всё увидит

                                                                                        Ну даже в доке явно не сказано: не делай SimpleDateFormat статическим или даже нестатическим полем в классе.

                                                                                        А логическая цепочка не у каждого сработает.

                                                                                        Это стандартная либа, и то люди факапят регулярно.

                                                                                        А если это чей-то класс, а и этот нюанс даже не откомментирован толком?

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

                                                                                          это внутренние кишки

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

                                                                                          а где тут именно private state, а то я жабу плохо парсю?
                                                                                          https://android.googlesource.com/platform/libcore/+/cff1616/luni/src/main/java/java/text/SimpleDateFormat.java
                                                                                          Ответить
                                                                                          • >а где тут именно private state, а то я жабу плохо парсю?
                                                                                            private String pattern;
                                                                                                private DateFormatSymbols formatData;
                                                                                                transient private int creationYear;
                                                                                                private Date defaultCenturyStart;
                                                                                            Ответить
                                                                                            • ты уверен?

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

                                                                                              ну да это неважно, в общем
                                                                                              а как это перевести на иммутабл? создавать в конкретной функции и потом передавать в другие функции по мере надобности?

                                                                                              вот это интерфейсы раздуются, конечно :-)
                                                                                              Ответить
                                                                            • Потому что класс SimpleDateFormat имеет состояние

                                                                              Десктоп мог это не знать, он не пишет на джаве
                                                                              Ответить
                                                                              • >класс SimpleDateFormat имеет состояние

                                                                                Мутабельное состояние.

                                                                                >мог это не знать, он не пишет на джаве
                                                                                Многие кто пишут на джаве тоже этого не знают :)))
                                                                                Ответить
                                                                      • > переходишь на полностью иммутабельные объекты и получаешь сотни тысяч копирований

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

                                                                        Там можно пожертвовать элегантностью, и сделать мутабельный объект.

                                                                        Перформанс часто заставляет нас жертвовать элегатностью.

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

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

                                                                          Так и есть.
                                                                          90% багров rustа от свинского боров-чекера.
                                                                          Который даёт или много ссылок на чтение, либо одну на запись.

                                                                          Тоже разновидность принудительной иммутабельности.

                                                                          У меня есть однопоточная программа, я хочу сделать простой double-linked list. А Пuтушатня как раскукарекается:

                                                                          error: cannot borrow `bagor` as immutable because it is also borrowed as mutable
                                                                          Ответить
                                                                        • так и проблема, когда твои поля сношают из тысячи потоков и рейс кондишены уже убили твою собаку, в общем-то тоже характерна для горячих точек

                                                                          на самом деле, let это как раз для перформанса, потому что компилятор получает большую свободу для работы с такими объектами

                                                                          вернулись к тому, о чём я говорил: иммутабельность помогает компилятору
                                                                          Ответить
                                                                          • >на самом деле, let это как раз для перформанса,
                                                                            нет. let для корректности в первую очередь.

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

                                                                              я пишу, что let добавляет пирфоманс

                                                                              ты мне опять про корректность лол
                                                                              Ответить
                                                                              • ИМутабельность в первую очередь добавляет корректность.
                                                                                class Vector(val point1: Point, val point2: Point) {
                                                                                    val distance
                                                                                        // Не существует никакой гарантии, что точки не изменятся во время работы этого кода, если они будут мутабельны
                                                                                        get() = sqrt((point1.x - point2.x).toDouble().pow(2.0) + (point1.y - point2.y).toDouble().pow(2.0))
                                                                                }


                                                                                Но разумеется, имутабельность так же сильно упрощает многопроцессорные вычисления (пушо и там корректностью у нее лучше), позволяя таким образом повысить перформанс.
                                                                                Ответить
                                                                                • мутабельность? или иммутабельность? или корректность? или пирфоманс?

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

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

                                                                                    у иммутабельных объектов проще доказать корректность, таким образом их проще параллелить, получив более высокий перфлорманс на многоядерных системах
                                                                                    Ответить
                                                                                • > Не существует никакой гарантии, что точки не изменятся во время работы этого кода, если они будут мутабельны

                                                                                  - value type, не? или интерфейс копирования

                                                                                  иммутабельность объекта здесь как попытка загрести солидную кучку под коврик
                                                                                  Ответить
                                                                                  • >- value type, не? или интерфейс копирования


                                                                                    Это котлин. Вектор это класс. В нем хранится указатель на Point.

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

                                                                                      сделай его value type, как там у вас, датакласс вроде?
                                                                                      датаклассы же копируются при передаче в функцию?

                                                                                      тебе вообще тут нужен интерфейс, который указывает, что у типа есть поля x, y и что такой объект можно скопировать

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

                                                                                        data class User(var name: String)
                                                                                        
                                                                                        class Info(val user: User)
                                                                                        
                                                                                        fun main() {
                                                                                            val user = User("joe")
                                                                                            val info = Info(user)
                                                                                            user.name = "Apple"
                                                                                            println(info.user.name) //Apple
                                                                                        }


                                                                                        Это не C# и не C++.

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

                                                                                        Но можно насрать внутри класса.

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

                                                                                        Перевёл на более популярный язык
                                                                                        #include <iostream>
                                                                                        #include <math.h>
                                                                                        
                                                                                        struct Point
                                                                                        {
                                                                                        	int x;
                                                                                        	int y;
                                                                                        };
                                                                                        
                                                                                        class MyVect
                                                                                        {
                                                                                        	Point p1;
                                                                                        	Point p2;
                                                                                        public:
                                                                                        	MyVect(Point p1, Point p2)
                                                                                        	{
                                                                                        		this->p1 = p1;
                                                                                        		this->p2 = p2;
                                                                                        	}
                                                                                        
                                                                                        	double getDistance()
                                                                                        	{
                                                                                        		double distanceX = static_cast<double>(this->p1.x) - this->p2.x;
                                                                                        		// ничто не мешает поменять Point в другом методе в другом потоке
                                                                                        		// если я хочу сделать p1 и p2 доступными для чтения, то их тоже смогут поменять
                                                                                        		// всё это решается через const
                                                                                        		double distanceY = static_cast<double>(this->p1.y - this->p2.y);
                                                                                        		return sqrt(pow(distanceX, 2.0) + pow(distanceY, 2.0));
                                                                                        	}
                                                                                        };
                                                                                        
                                                                                        int main()
                                                                                        {
                                                                                        	MyVect v(Point{10, 2}, Point{20, 1});
                                                                                        	std::cout << v.getDistance();
                                                                                        	return 0;
                                                                                        }


                                                                                        >тебе вообще тут нужен интерфейс,
                                                                                        Ты предлагаешь создать новую сущность вместо обычной структуры из двух r/o полей?
                                                                                        Ответить
                                                                                        • тю

                                                                                          а в чём смысл датакласса тогда?

                                                                                          в свифте value types при передаче копируются

                                                                                          > Ты предлагаешь создать новую сущность вместо обычной структуры из двух r/o полей?
                                                                                          - а в чём проблема?

                                                                                          ты не завязываешься на реализацию
                                                                                          у тебя есть чёткий и простой контракт (как ты любишь)

                                                                                          ничего не бывает бесплатно
                                                                                          Ответить
                                                                                          • >а в чём смысл датакласса тогда?
                                                                                            * Автоматически появляется метод copy(), позволяющий скопировать инстанс изменив какие-то поля
                                                                                            * Автоматически появляется toString(), hashCode() и пр.

                                                                                            Котлин работает поверх JVM, так что никаких чудес там нет.
                                                                                            Копируются только int, short, long, char, boolean, double, float и инже с ними.

                                                                                            Любая структура (даже из двух булов) *всегда* передается по ссылке.

                                                                                            Знаешь, я наверное приму кусочек твоей идеи:

                                                                                            В языках, где любая структура передается по ссылке (Java/Kotlin, JavaScript) иммутабельность адски важна.

                                                                                            В языках, где можно передавать структуры (как их правильно назвать? Нескалярные сущности?) по *значению* (Swift, C++, C# с его ValueTypes) иммутабельность *менее важна*.

                                                                                            У тебя бекграундс свифтовый, а у меня джавовый (где все передается по ссылке и мутабельно), так что моя боль тебе может быть не так очевидна)


                                                                                            >у тебя есть чёткий и простой контракт (как ты любишь)

                                                                                            Я не люблю интерфейс из двух методов getX и getY.

                                                                                            В 99% случаев у него будет одна и та же реализация. Это копипаст.

                                                                                            Лучше иметь сразу реализацию. Причем в С++ я могу сделать один и тот же класс как R/O так и R/W (благодаря магии const). А джаве я вынужден пирдолица с интерфейсом для r/O
                                                                                            Ответить
                                                                                            • > Я не люблю интерфейс из двух методов getX и getY.
                                                                                              - всё по солиду))
                                                                                              Ответить
                                                                                              • Я вообще не люблю срать лишними интефейсами, но в джаве часто иначе никак

                                                                                                Не могу не пнуть джаву в очередной раз.

                                                                                                Кресты
                                                                                                class Point
                                                                                                {
                                                                                                	int x;
                                                                                                	int y;
                                                                                                public:
                                                                                                	Point(int x, int y)
                                                                                                	{
                                                                                                		this->x = x;
                                                                                                		this->y = y;
                                                                                                	}
                                                                                                
                                                                                                
                                                                                                	void set_x(int x)
                                                                                                	{
                                                                                                		this->x = x;
                                                                                                	}
                                                                                                
                                                                                                	void set_y(int y)
                                                                                                	{
                                                                                                		this->y = y;
                                                                                                	}
                                                                                                
                                                                                                	int get_x() const
                                                                                                	{
                                                                                                		return x;
                                                                                                	}
                                                                                                
                                                                                                	int get_y() const
                                                                                                	{
                                                                                                		return y;
                                                                                                	}
                                                                                                };
                                                                                                
                                                                                                
                                                                                                int main()
                                                                                                {
                                                                                                	//Могу сделать R/W или R/O инстанс в зависимости от желания из одного класса
                                                                                                	const Point readOnlyPoint(10, 10);
                                                                                                	Point rwPoint(10, 20);
                                                                                                	//readOnlyPoint.set_x()//не скомпили
                                                                                                	rwPoint.set_x(12);
                                                                                                	return 0;
                                                                                                }


                                                                                                А джава теперь
                                                                                                //вынужден делать интерфейс, фуу
                                                                                                interface ReadOnlyPoint {
                                                                                                
                                                                                                    int getX();
                                                                                                
                                                                                                    int getY();
                                                                                                }
                                                                                                
                                                                                                public class Point implements ReadOnlyPoint {
                                                                                                    private int x;
                                                                                                    private int y;
                                                                                                
                                                                                                    public Point(int x, int y) {
                                                                                                        this.x = x;
                                                                                                        this.y = y;
                                                                                                    }
                                                                                                
                                                                                                    @Override
                                                                                                    public int getX() {
                                                                                                        return x;
                                                                                                    }
                                                                                                
                                                                                                    @Override
                                                                                                    public int getY() {
                                                                                                        return y;
                                                                                                    }
                                                                                                
                                                                                                    public void setX(int x) {
                                                                                                        this.x = x;
                                                                                                    }
                                                                                                
                                                                                                    public void setY(int y) {
                                                                                                        this.y = y;
                                                                                                    }
                                                                                                
                                                                                                    public static void main(String[] args) {
                                                                                                        Point rwPoint = new Point(10, 10);
                                                                                                        ReadOnlyPoint readOnlyPoint = new Point(10, 10);
                                                                                                    }
                                                                                                }
                                                                                                Ответить
                                                                                                • И в обоих случаях кастами можно снять константность?
                                                                                                  Ответить
                                                                                                  • > кастами можно снять константность

                                                                                                    Само собой, кресты просто дают тебе инструменты. Если ты ими захочешь себе палец отпилить - никто тебе мешать не станет.
                                                                                                    Ответить
                                                                                                  • в С++ можно static_constом

                                                                                                    В Java тоже можно кастануть к Point, но это выглядет более грязно (ты можешь вообще не иметь доступа к классу, а только лишь к интерфейсу)
                                                                                                    Ответить
                                                                                                    • Ну, с этой точки зрения наличие let/var, которые не являются частью типа, а только модификатором конкретного объекта, имеет свои плюсы.

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

                                                              - пофикси мудификаторами видимости

                                                              а, я забыл, они же не нужны
                                                              Ответить
                  • На "PHP", пожалуйста.
                    Ответить
                  • Ничего не понял. Переведи на "PHP".
                    Ответить
      • Уже пытались течь, не получилось

        https://govnokod.ru/12316#comment165792

        (у Немерле есть какие-то другие нескучные обои, кроме "встроенного" хтмл?)
        Ответить
    • Перекат!

      https://govnokod.ru/26980
      https://govnokod.xyz/_26980/
      Ответить
    • Fatal error: Uncaught exception 'Services_Twilio_RestException' with message 'Authenticate' in /home/facesms/public_html/receive-sms-now.com/ts/swilio.php:305 Stack trace: #0 /home/facesms/public_html/receive-sms-now.com/ts/swilio.php(174): Services_Twilio->_processResponse(Array) #1 /home/facesms/public_html/receive-sms-now.com/ts/swilio.php(194): Services_Twilio->_makeIdempotentRequest(Array, '/2010-04-01/Acc...', 1) #2 /home/facesms/public_html/receive-sms-now.com/ts/Twilio/ListResource.php(125): Services_Twilio->retrieveData('/2010-04-01/Acc...', Array) #3 /home/facesms/public_html/receive-sms-now.com/ts/Twilio/ListResource.php(200): Services_Twilio_ListResource->getPage(0, 0, Array, NULL) #4 [internal function]: Services_Twilio_ListResource->getPageGenerator(0, 0, Array, NULL) #5 /home/facesms/public_html/receive-sms-now.com/ts/Twilio/AutoPagingIterator.php(103): call_user_func_array(Array, Array) #6 /home/facesms/public_html/receive-sms-now.com/ts/Twilio/AutoPagingIterator.php(76): Services_Twilio_AutoPagingIterator in /home/facesms/public_html/receive-sms-now.com/ts/swilio.php on line 305
      Ответить
      • Именно поэтому я за «PHP».
        Ответить
        • А конардо был бы против такого кода: импотентные запросы, исключения, куча разных файлов... Понаписали всякой хуйни, вот оно и падает.
          Ответить

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