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

0

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

#58: https://govnokod.ru/26916 https://govnokod.xyz/_26916
#59: https://govnokod.ru/26934 https://govnokod.xyz/_26934
#60: https://govnokod.ru/26949 https://govnokod.xyz/_26949
#61: https://govnokod.ru/26980 https://govnokod.xyz/_26980
#62: https://govnokod.ru/26999 https://govnokod.xyz/_26999
#63: https://govnokod.ru/27004 https://govnokod.xyz/_27004
#64: https://govnokod.ru/27020 https://govnokod.xyz/_27020
#65: https://govnokod.ru/27027 https://govnokod.xyz/_27027
#66: https://govnokod.ru/27040 https://govnokod.xyz/_27040
#67: https://govnokod.ru/27049 https://govnokod.xyz/_27049
#68: https://govnokod.ru/27061 https://govnokod.xyz/_27061
#69: https://govnokod.ru/27071 https://govnokod.xyz/_27071
#70: https://govnokod.ru/27097 https://govnokod.xyz/_27097
#71: https://govnokod.ru/27115 https://govnokod.xyz/_27115
#72: https://govnokod.ru/27120 https://govnokod.xyz/_27120
#73: https://govnokod.ru/27136 https://govnokod.xyz/_27136
#74: https://govnokod.ru/27160 https://govnokod.xyz/_27160
#75: https://govnokod.ru/27166 https://govnokod.xyz/_27166
#76: https://govnokod.ru/27168 https://govnokod.xyz/_27168
#77: https://govnokod.ru/27186 https://govnokod.xyz/_27186
#78: https://govnokod.ru/27219 https://govnokod.xyz/_27219
#79: https://govnokod.ru/27254 https://govnokod.xyz/_27254
#80: https://govnokod.ru/27270 https://govnokod.xyz/_27270
#81: https://govnokod.ru/27280 https://govnokod.xyz/_27280
#82: https://govnokod.ru/27284 https://govnokod.xyz/_27284
#83: https://govnokod.ru/27296 https://govnokod.xyz/_27296
#84: https://govnokod.ru/27336 https://govnokod.xyz/_27336
#85: https://govnokod.ru/27381 https://govnokod.xyz/_27381
#86: https://govnokod.ru/27405 https://govnokod.xyz/_27405
#87: https://govnokod.ru/27429 https://govnokod.xyz/_27429

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

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

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

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

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

    Примечание: автоматические перекаты в настоящее время осуществляются только с аккаунта nepeKamHblu_nemyx.
    Остерегайтесь подделок. Берегите себя и своих близких. Кок!
    Ответить
  • Капец, так быстро предыдущий оффтоп перекатился! Интересно, как так получилось?
    Ответить
    • У меня в mnesia нет никакого `postgis', поэтому я за `mnesia'.
      Ответить
    • Ну лучше ли использовать базу данных в оьлаке? Нахуя что-то самому админить?
      Ответить
      • Дороговасто будет для всяких петпроджектов, например.
        И проблематично для внутресетевых сервисов.

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

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

            В AWS я поставил галочку, и база автоматически разлилась на другие авэлебилити зоны (в другие дата центры)
            Кнопочку нажал, и она обновлиась.
            Другую нажал, и туда добавилось 64 гига памяти или еще 8 ядер.

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

            Это всё не работает конечно, если ты гугл. А если ты небольшой интерпрайз на 300 питухов, то это рабоатет заебись.

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

              ms-sql тоже от 10$/mo но там вроде еще за сервер и лицензию платить надо

              так что клауд для пет-проекта тоже заебсиь
              Ответить
              • >10$/mo

                у меня в два раза дешевле стоит VPSка на которой я могу захостить хоть десять проектов, лол
                Ответить
                  • 2 ГБ RAM
                    20 ГБ NVMe
                    2 виртуальных CPU

                    За 13 долларов в мес можно взять
                    4 ГБ RAM
                    40 ГБ NVMe
                    4 виртуальных CPU

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

                      И я не иканус тебе.
                      Ответить
                      • Ура, Сёма вернулся!

                        > Нахуй нужен пет-проджект, если он не приносит и не будет приносить ни цента прибыли?

                        Петпроект нужен, чтобы засунуть его в CV, и тем самым увеличить шанс устроиться в неротоёбскую контору с неротоёбскими зарплатами.
                        Ответить
                        • Если не принесло денег, то должно хотя бы пользу. Что полезного сделал, например, ты?
                          Ответить
                        • А у меня куча всего есть, что в CV я никогда не суну.
                          Это либо не доделано (разумеется, начать новый петпроект интереснее, чем доделать старый) либо не имеет прямого отношения к моей деятельности (ну это как если бы ты игрушку под андроид написал)

                          Это плохо?
                          Ответить
                • Кстати, вопрос к знатокам: насколько вообще хорошо nosql базу сделать основным источником информации?
                  Как у нее с репликацией и бекапом?
                  Ответить
                  • помнишь как просто было загружать из foxpro на chat.ru?
                    с nosql стало еще удобнее

                    ну ладно, не foxpro, а paradox
                    Ответить
                    • я помню, что на чат ру не было чатов, и это меня печалило
                      приходилось ходить на zerkalo.com
                      Ответить
                    • > foxpro

                      А ведь лиса и была nosql базой... Можно было бегать по табличкам, явно юзать индексы.
                      Ответить
                      • ки-валуе базы вообще были популярны одно время: dbf в 1С (и вроде и лиса в него могла), все эти слиппи кэт берклидб и прочие хеш базы
                        Ответить
                  • мне говорили что лучше всегда использовать sql если можно

                    а если нельзя то есть куча разных nosql которые решают разные проблемы и надо решать в зависимости от того что именно не вывозит sql
                    Ответить
                    • Ну потому что ты один фиг криво-косо переизобретёшь обычную СУБД когда захочется джойнов и транзакций...
                      Ответить
                      • А как у Nosql с хранением деревьев?

                        У реляционки так се
                        Ответить
                        • Х.з., мне вообще не нравится термин NoSQL.

                          Фича же не в том, что там SQL нету (заебись, учить не надо!), а скорее в нереляционности.
                          Ответить
                          • А в чём плюсы-то?

                            В реляционках могут отпугивать две вещи:
                            * нужно делать схему
                            * трудно хранить деревья
                            (второй пункт вытекает из первого видимо)

                            Вообще таблица далеко не всегда лучший способ представления данных.

                            Именно потому появились все эти NoSQL?

                            (Мнезия Снаута это отдельная история, там СУБД, как я понял, практически интегрирована с языком, и это круто)
                            Ответить
                            • Ну да, основные фичи традиционной РСУБД - схема, ACID и реляционность.

                              Если ты уверен что тебе что-то из этого нинужно и оно только портит пирфоманс - добро пожаловать в мир NoSQL.
                              Ответить
                              • Ну ACID мне наверное нужен, если это не ридонли копия для построения отчётов (тут я, конечно, за кубы, или за всякие клабхаусы как минимум)

                                Если мне ничего этого не нужно, то может мне проще в памяти построить граф объектов, сделать всякие коллекции с указателями на них, и пусть всё так работает?

                                Ну сериализнуть его как-то на диск, и вот
                                Ответить
                                • > наверное нужен

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

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

                            да, и дерево - это таблица с ухом
                            Ответить
                            • mysql вроде бы умеют даже самые примитивные формы жизни типа phpидоров

                              Причем суют они её везде, начиная от хранения там конфигов и до картинок

                              вот пример сущенго пидорства и праздник пыхоблядства
                              http://api.docs.umi-cms.ru/spravochnik_po_klassam_yadra_umicms/baza_dannyh/

                              >ухо
                              pardon me?

                              Я знаю только один способ хранения деревяшки в SQL без N+1 запросов на выбор поддерева: Это хранение через LEFT+RIGHT (nested set model или как оно по уму) но там двигать его ОЧЕ тяжело
                              Ответить
                        • Приведи реальный пример деревьев, которые нужно хранить.
                          Ответить
                            • Кто в зрдавом уме будет хранить комментарии в базе как-то иначе, чем (comment_id, parent_id)?
                              Ответить
                              • > (comment_id, parent_id)
                                Выбери все комментарии к посту, которые ня находятся в ветках, начатых пользователем с user_id = 67780.
                                Ответить
                                • А нахуя такое может понадобится?
                                  Ответить
                                  • Чтобы скрыть как сами комментарии спамеров, так и ответы ня них. Предполагается, что в ветке, нячатой спамером, ничего продуктивняго ня будет.
                                    Ответить
                                    • В каком смысле скрыть? Когда отрисовываешь дерево, проверяешь, что комментарий не находится в черном списке. Если находится - нахуй всю ветку.
                                      Черный список берешь отдельным селектом, если он не большой (а он не большой).
                                      Ответить
                                      • есть комментарий 282

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

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

                                        Следующее: в стоке есть отдельный комментарий (commanet_id, parent_id, user_id). Нядо определить, няходится ли он в ветке, нячатой пользователей с id = 67780.
                                        Ответить
                                        • > Поздравляю, всю логику ты выняс в приложение.
                                          Я настоящий ротоёб, да?

                                          > Следующее: в стоке есть отдельный комментарий (commanet_id, parent_id, user_id). Нядо определить, няходится ли он в ветке, нячатой пользователей с id = 67780

                                          Задача сложная. И вообще, заключене «ответил в ветке уёбка = надо скрыть» - такое себе. А ты как решать будешь?
                                          Ответить
                                          • Есть способ хранения дерева в РСУБД который называется Nested set model.

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

                                            Слева от корня у тебя 1 (потому что ты с него начал) и справа -- самое большое число (потому что ты туда пришел в самом конце).

                                            Вот так

                                            https://docs.mongodb.com/manual/images/data-model-example-nested-set.bakedsvg.svg

                                            Это позволяет одним запросом получить всех потмков какого-то узла, и одним же запросом проверить, является ли узел N потомком узла M.

                                            Все, у кого левое число БОЛЬШЕ твоего левого числа, а правое МЕНЬШЕ твоего правого числа есть твои потомки (дети, внуки, правнуки итд). Одно простое условие.

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

                                            Проблема в том, что обновлять такую структуру трудно.

                                            Добавление узла может потребовать пересчета всего дерева.

                                            Иногда можно хранить данные с parent_id, а по ним строить рид-онли базу с nested set model, чтобы ускорять поиск например
                                            Ответить
                                            • Реальный пример задачи так никто и не привел, только надуманные со скрытием «отвечающих отвечающим уёбкам».
                                              Ответить
                                              • Я тебе привел пример с магазином.
                                                Найти все товары в определенной категории. Это реальный пример.
                                                Ответить
                                                • Давай разберем на примере.
                                                  Есть товар «резиновый хуй». Какие у него категории?
                                                  Игрушки для взрослых -> фаллоимитаторы
                                                  Храним связи в отдельной таблице «резиновый хуй» <-> «фаллоимитаторы», «резиновый хуй» <-> «Игрушки для взрослых».
                                                  Не исключаю, что товар может быть листом нескольких веток категорий.
                                                  Также могут быть теги: «Товары для женщин». Тоже храним такую связь.

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

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

                                                      А какая мне разница верхний или не верхний уровень категории?
                                                      У меня же есть связь «резиновый хуй» <-> «Игрушки для взрослых».
                                                      Ответить
                                                  • То есть если у тебя есть дерево глубиной
                                                    3, то ты будешь хранить 3 записи для каждого узла, а как ты будешь хранить само дерево, чтобы не получилась денормализованная хрень?
                                                    Ответить
                                                    • А ты предлагаешь хранить только категорию-лист?
                                                      Ответить
                                                      • В nested set model ты одинаково хранишь и узлы и ветви. Тебе не нужно вообще эти понятия разделять
                                                        Ответить
                                              • Реальный пример: нарисовать дерево комментов произвольной вложенности если известно что они подаются пагинацией и один запрос на пост не отдаст все комменты. Разумеется без n+1 заппосов
                                                Ответить
                                    • > Предполагается, что в ветке, нячатой спамером, ничего продуктивняго ня будет
                                      Это говнокод, тут спокойно бывает так:
                                      — Спам — "Уёбок" — "Не отвечай уёбку" — "Да он сам уёбок, поэтому и отвечает" — Дискуссия о том, позволительно ли одному уёбку отвечать другому — предположение о том, что это один и тот же уёбок — дискуссия о позволительности ответа самому себу — приход к конценсусу, что уёбку позволительно отвечать уёбкам, не являющимися им самим — спор об идентификации уёбков, переходящий в спор об понятии личности и самоосознании — обсуждение трансгуманизма, последствиях возможности копирования сознания и моральных и этических проблемах врзникающих при обнаружении серьёзных психических отклонении у одной из копий — предположения о возможном механизме автоматических бекапов сознания и откатов с сохранением памяти.
                                      Ответить
                                      • Совершенно верно. А после этого что-нибудь про Coq и C++ может появиться.
                                        Ответить
                                      • волноваться о том, что в инторнете кто-то отвечает ротоёбку - нарушает как минимум 2 нормальные формы и является типичным Thinking in PHP, что соответствует ведению грязным пальцем по @ROWID в Server Manager'е с целью отыскать нужную яичейку и поправить там значение
                                        как раз для такого придумали spreadshit-образные nosql хренилища без струткурирования строк
                                        Ответить
                              • 1. найди мне все комменты со словом "жопа" в одной ветке
                                2. скрой ветку целиком
                                Ответить
                  • Слишком общий вопрос. NoSQL баз под тридцатник, и у всех них кардинально разные фичи.
                    Ответить
                    • Я не по наслышке знаю один финтеховский юникорн, где использовалась угадайте что. С репликацией и бекапом там всё было прекрасно (вывод мастер-ноды на мейнтенанс делался (при желании) бесцеремонным kill -9), но репликация была чисто кастомная, лол.
                      Ответить
                      • P.P.S. Профит от этой фигни был в следующем:
                        1) Чтобы Снаут мог вдоволь наиграться с рафтушнёй
                        2) Бизнес-логика и язык запросов на одном языке программирования
                        3) Крайне низкая latency, т.к. бизнес код крайне близок к данным, можно сказать дышит на них

                        Но под NoSQL сейчас обычно понимают питушню типа MongoDB (которая web scale), и ни одного пункта из списка она не выполняет. Соответственно, и особого профита от них нет, проще взять постгрю и не мучиться.
                        Ответить
                            • Я правильно понял что в ерланге есть ets и dets которые просто nosql бд а mnesia и эта переработанная штука это обертка?
                              Ответить
                              • С сильной натяжкой — да. Обе эти штуки могут использоваться как storage backend (хотя dets использовать не стоит — отвалится жопа).
                                Ответить
                                  • > mnesia используется где-то кроме ерланга

                                    А как? 🙂
                                    Ответить
                                    • Я хочу узнать, есть ли у нее какие-то фичи кроме эрланга из-за которых ее юзают
                                      Ответить
                                  • > mnesia используется где-то кроме ерланга?

                                    Конечно. Elixir ещё ^___~
                                    Ответить
                              • > просто nosql бд

                                Да уж, вот и пришли времена, когда просто хеш-табличку и дисковую хеш-табличку стали называть Базой Данных...
                                Ответить
                              • > есть ets и dets которые просто nosql бд

                                Пропустил эту часть. Как Борманд отметила, это тупые хэш-таблички, а не БД. Мнезия поверх них (и не только их, она поддерживает кастомные бэкенды) накручивает ACID, репликацию, снепшоты, ивенты, и т.д.
                                Ответить
  • SMART overall-health self-assesment test result: FAILED!
    Drive failure expected in less than 24 hours. SAVE ALL DATA.

    Вот и пришла пизда HDD'шнику из прошлого десятилетия...
    Ответить
    • Ну хоть честно предупредил
      А какие параметры упали? Это электроника дохнет, или сервометки стёрлись?)
      Ответить
      • > Ну хоть честно предупредил

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

        Reallocated sector count кончился, ничего криминального.
        Ответить
        • Это какая-то обвязочка гуйная вокруг smartmontools?
          Кстати бесит, что в пинде этого из коробки до сих пор нету
          Ответить
      • 60кб всего не прочиталось из терабайта. Неплохо.
        Ответить
          • Сам диск говорит, что где-то 300 unrecoverable read errors. Но, видимо, это старые бэды и он их уже куда-то ремапнул.

            З.Ы. Пофиг, сделаю из него светодиодные часы какие-нибудь.
            Ответить
  • Хакеры, которые атаковали американскую компанию Colonial Pipeline, могли получить от своих жертв за последнее время почти 90 млн. долларов выкупа. Как утверждают эксперты по кибербезопасности компании Elliptic, деньги обычно перечислялись в криптовалюте. Средний размер выкупа составил почти $2 млн. Выкуп Colonial Pipeline — 75 биткойнов, что по курсу 8 мая равнялось около $5 млн

    Вот что бывает, когда сэкономил на нормальных админах
    Ответить
    • > сэкономил на нормальных админах

      Причём там хакеры извинились за атаку, типа они просто заработать хотели а не оставить америку без топлива.
      Ответить
      • А написано как они поломали?

        Не удивлюсь, если там какой-нить роутер наружу торчал админским портом с известной уязвимостью, как это обычно бывает
        Ответить
  • — Не помню, чтобы утечка памяти входила в класс ошибок, которые Rust обещал отлавливать.
    — Эмм, а владение в Rust'е разве не об этом?
    — Нет. Была даже эпичная история с утечкой, вызванной библиотечным кодом, не помеченным unsafe, вследствие чего комитет сделал вывод, что утечка не является критичным с точки зрения безопасности состоянием, и даже убрал ансейф с метода явной утечки mem::forget.


    Как после такого вообще можно рассматривать «Ржавчину» как серьёзный язык? :/
    Ответить
    • Владение и боров-чекер решают ещё несколько более опасных проблем -- use after free, протухшие итераторы, частично гонки между тредами. Утечка на их фоне действительно смотрится белой и пушистой.

      Но да, почему они за меня решают что мне критично с точки зрения безопасности, а что нет? Утечка -- это потенциальный denial of service, всё-таки.
      Ответить
    • > Я конечно понимаю, что интересно свою сборку арча собирать, а потом сюда выкладывать скрины, ну а толку то по факту ?

      Ого, а я и не знал, что я – админ!
      Ответить
      • >> собрать Арч
        >> Я - Одмен
        Это как играть в конструктор Лего и считать себя высококлассным инженером.
        Ответить
        • Согласен. Или как архитектором. «Arch» от слова «Architecture» же.
          Ответить
      • > сборку арча

        Но... он же бинарный. Это как сборкой убунты хвастаться, имхо.

        Ладно бы там LFS какой-нибудь.
        Ответить
        • Нужно уметь диски размечать, монтировать и форматировать, это то ещё админство!
          Ответить
          • Чувакам было лень написать нормальный инсталлятор и они объявили это дистрибом для илитки?

            > уметь

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

              Нормальный – это как в бубунту?

              > Вбить заклинания из хендбука много ума не надо

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

                И чем GPT от MBR отличается? 😉

                > какие штучки вынести на отдельные партиции

                LVM уже научился поднимать или по-прежнему кипятишь?
                Ответить
                • > И чем GPT от MBR отличается

                  Один старый, другой новый, и какой-то из них уже не нужен. Что-то мне подсказывает, что не нужный – MBR. А ещё это какой-то Master Boot, т.е. хозяйский сапог. Очень по-расистски!

                  > LVM

                  Для этого нужно генту устанавливать.
                  Ответить
                  • > генту

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

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

                    Алсо, в GPT в жопе диска копия GPT на случай пиздеца.

                    >LVM

                    Ващет в убунту и центоси/федоре их предлагают по умолчанию
                    Ответить
                    • > убунту

                      Убунта вроде только на зашифрованном диске LVM предлагает по-умолчанию, потому что иначе придётся к каждому тому пароль вбивать... А так они все в одной коробке.

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

                            А про софтварный рейд есть разные мнения. Кто-то считает, что лучше купить нормальный хардварный (не интеловское rapid storage, который на самом деле софтварный) а нормальную карту со встроенным процом и кешем, и не упираться потом с CPU.

                            Но могут возникнуть отсосы при переносе на другой контроллер.
                            Формально в конце диска должна содержаться конфигурация рейда, к которому он принадлежит (стандарт называется "SNIA Common RAID Disk Data Format Specification"), но на деле не редки случаи отсоса при переносе на контроллер другого производителя


                            Кстати, говноксрпит установки убунты называется Ubiquity

                            Что за дебилньная привычка переиспользовать имена?
                            У RH он anaconda (как питоновский дистр) у Ubuntu он Ubiquity как бюджетные wifi решения с софтварным контролёром
                            Ответить
                            • > не интеловское rapid storage

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

                              > не упираться потом с CPU

                              А в чём там упирание то, просто вдвое больше трафика до дисков (если запись на зеркало)... Ты же не собираешься строить RAID-5, я надеюсь?

                              От железного RAID'а, имхо, только гемор. Ну если это не какая-нибудь автономная полка.
                              Ответить
                              • >А в чём там упирание то
                                В зеркале-единичке -- ни в чем

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

                                Пятёрка в чистом виде идет нахуй, но вот 50 встречается в реальности вполне себе часто. А где число "5" -- там чексумма, а значит CPU.

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

                                Вот и изъебываются.

                                Алсо, у контроллеров может быть свой кеш (как память, так и и ssd кеш -- неплохо ускоряет hddшки), к кешу идет своя батарейка (получается "write back"), контроллеры в фоновом режиме умеют проверять здоровье дисков (считывая блоки) итд.

                                Но у меня нет strong opinion на счет этого всего.

                                > автономная полка.
                                В полке ОБЫЧНО нет контроллера рейда. Там SAS контроллер и может быть экспандер. Она по SAS подключается к контроллеру.

                                Но наверное есть и полки со встроенным контроллером
                                Ответить
              • > какие штучки вынести на отдельные партиции

                Х.з., я вообще не разбиваю... У меня только минимальный набор из root, swap и esp. Это ж не сервак какой-нибудь, чтобы на годы вперёд обдумывать куда логи срать, а куда базы положить.
                Ответить
      • вообще-то про это целый сайт есть!
        там не гнушаются выкладывать скрины не только своей сборки, но и дефолта с дефолтнейшими обоями, и ничо
        Ответить
        • > гну-шаются

          Вот, хоть кто-то не забывает добавить gnu когда пишет о linux!
          Ответить
          • Сёма: Линукс говно
            Столлман: тебе не стыдно?
            Сёма: извини пожалуйста. GNU/Linux -- говно
            Ответить
    • >Куда расти сисадминам?


      Либо в глубокую экспертизу (например в "DBA -- бог Оракла" или "JNCIE -- бог Юнипера") или в руководство (например в "Офисный админ СанСаныч -- коммандир сорока девяти эникеев в семнадцати бранчах компании по всей России")

      Можно еще стать девопсом, но там свои тонкости
      Ответить
  • Почему getch возвращает int, а не char? Чтобы иметь местечко для EOF?
    Ответить
  • Если спрос на видеокарты такой неебический, то почему производители не увеличат производство?
    Ответить
      • > Александр, были бы у них видеокарты не писали бы тут 😀 а так больше делать нечего вот и следят смартфонов когда видеокарты перестанут майнить

        Да, всё так, подтверждаю.
        Ответить
    • это не так работает
      если ты услышишь из телевизора блеющий голосок хуйла велящий есть в 2 раза больше говядины, то на твоей лопате добавка появится только через 4 года
      развертывание дополнительного производства готовых к работе плат с АЗИКами займет не меньше 2-3 лет
      Ответить
    • по рашкованским понятиям вол - государственный, суровые спермяки могут найти двушечку
      Ответить
    • Да давно уже понятно, что государство – это как 25-ти летний старикан-извращенец, который подходит к 18-ти летним молодым девушкам со словами: «Йо, скинь мне аську на пейджер, потусим на дискаче в клубешнике под тектоник, йоу сэкси бейби!» — в надежде на женское внимание, которое ему, конечно же, не светит.

      Именно так и выглядят все эти заигрывания правительственного динозавтра с молодыми вещами типа компьютеров, программ, криптографических деняг и тому подобного.
      Ответить
      • >двадцати пяти
        > старикан
        🙂
        Ответить
        • Думаю что от айтишного образа жизни можно развалиться не 25 так точно в 30
          Ответить
          • Современные айтишнки бывают иногда крепкие: ЗОЖ, бег, йога, вот это всё.

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

              и как же зож, бег и ха-ха-ха ЙОБА помогут в достижении крепости?))
              Ответить
              • ну чтобы стать некрепким, нужно неправильно питаца и мало двигаться, не?

                А бегуны обычно боль-мень стройные, и не курят
                Ответить
                • > бегуны
                  > не курят

                  - ну, во-первых, это не 100%, во-вторых, многие бегуны любят бегать вдоль загазованных проспектов, так шо лучше бы они курили

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

                  > компьютерщик из 90-х в свитере и толстых очках, который 18 часов курит за компьютером
                  - это типичная одминка, а не погромист
                  Ответить
                  • >ну, во-первых, это не 100%
                    ну чаще всего так. Всё таки дыхалка не резиновая

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

                    >с убитыми к тридцати годам коленями
                    это правда! Но сейчас есть спец школы бега, где учат бегать правильно, правильно выбирать обувь, итд.
                    И вроде бы нельзя бегать, если ты оче жирный (точно убьешь колени)

                    >- это типичная одминка, а не погромист
                    в 90-е грань между ними была тоньше
                    Ответить
                    • > нельзя бегать, если ты оче жирный (точно убьешь колени)
                      курилка 22: чтобы не быть жырным надо бегать
                      Ответить
                  • >> компьютерщик из 90-х в свитере и толстых очках, который 18 часов курит за компьютером
                    Типичные программисты выглядят как бомжи, ой хипсторы.
                    Ответить
  • https://habr.com/ru/company/mailru/news/t/558260/
    > Исследование: треть рекрутеров мечтает о «переводчике» для общения с ИТ-специалистами

    > Каких инструментов не хватает рекрутерам для качественного и быстрого подбора IT-специалистов
    > 39% Автоматизированный инструмент для оценки навыков кандидатов

    Няверное, кандидатам тоже ня хватает автоматизированного инструмента, который бы делал их работу за них <( ̄︶ ̄)>.
    Ответить
    • Имхо, рекрутеры должны фильтровать людей по ключ словам, и далее показывать их будущему начальнику

      Оценить айтишника может другой айтишник. Зачем требовать это от рекрутера?

      Это как требовать от тетеньки в регистратуре поликлиники чтобы она поставила диагноз, или от приемщика техники в сервис-центре чтобы он сказал какой чип у ноутбука поменять нужно
      Ответить
      • А зачем тогда 44% рекрутеров хотят инструмент "для проверки hard skills кандидатов в онлайн-режиме"?
        Ответить
        • Всмыле формочка с вопросами "в какой строчке тут UB"?
          Отличная идея же)
          Ответить
        • Потому что, скорее всего, у рекрутёров в KPI "процент принятых на работу из всех предложеных".
          Ответить
          • Но это же ня нормальня. Если рекрутер — это тётенька в регистратуре, то такой KPI — это "процент вылеченных от зарегистрированных ня приём".
            Ответить
            • Это как раз нормально. KPI не для менеджеров обычно устанавливают люди, не знакомые со спецификой работы, для которой устанавливают показатели, не способные к критическому мышлению и не одарённые интеллектом.

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

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

                В физматшколах обычно нету тех, кто не трезвел весь год
                Ответить
                • У нас были. Чел умудрялся совмещать бухло и математику, на олимпиады даже катался... Х.з. правда чем это потом закончилось.
                  Ответить
                  • ничоси) Я думал только в кино показывают гениальных хакеров, которые ломают любую сеть за 3 минуты, при этом курят траву, перемещаются по городу на мотоцикле, стреляют из всех видов оружия и спят со всеми встречными тян
                    Ответить
                • > ей похуй же.
                  От этого зависит бюджет, закупка нового оборудования, зарплаты и возможность повышения квалификации. Отказать госучреждение не может, так как у каждого уёбка есть право на образование.

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

                  В итоге школа в неблагополучном районе получает хуй вместо финансирования → посидев пару лет на голом окладе без квалификационной категории хорошие педагоги уходят работать менеджерами по продажам, разочаровавшись в обучении (потому что места в элитных школах заняты _отличными_ педагогами) → их места занимают алкаши/троечники из педвузов, которых выгнали из менеджеров → школа скатывается ещё сильнее → вместо образования получается хуй → дети, которым было не похуй на школу, но не было возможности посещать другую, понимают, что им нихуя не светит → всё пошло по кругу.
                  Ответить
  • [quote]
    PHP с каждой версией все больше усложняется.
    В своё время многие начинали осваивать разработку с него из-за низкого порога входа. Написал echo 123 и вот результат твоих трудов в интернете.

    Я думаю Go занял это место.
    [/quote]
    https://habr.com/ru/company/mailru/blog/551240/ (хуёвые вербзоные корутины завезли в пых)
    Ответить
    • "Они исполняются параллельно, но обрабатываются исключительно самой runtime-средой, а передаются напрямую в процессор"

      ЯНИХУЯНЕПОНЯЛ.жпг

      Они хотя бы читали свои высеры. Тут по-моему даже ворд пожалуется, что предложение не согласовано.
      Ответить
      • там НЕ пропущено

        в оригинале

        These seem to run in parallel but are ultimately handled by the runtime itself rather than by pushing it directly to the CPU

        Но это всё равно хуевая фраза, потому что любой код выполняется на CPU, даже корутины
        Ответить
      • там НЕ пропущено

        в оригинале

        These seem to run in parallel but are ultimately handled by the runtime itself rather than by pushing it directly to the CPU

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

          Т.е. шедулятся эти корутины в самом рантайме PHP, а не в ядре ОС.
          Ответить
          • ну да, люди выдумали кооперативную многозадачность целиком в юзерспейсе, и радуются:)

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

        хотя врядли они используют ворд, прошли добрые времена когда врод со всеми фичами встраивался в прямо в почтовый клиент
        Ответить
  • Питухи, которые пиздят в данный момент на говнокоде, вы пинаете хуи на работе?
    Ответить
        • Отключить PCH и заинклудить побольше бустятинки.
          Ответить
        • Отключить PCH и заинклудить побольше бустятинки.
          Ответить
          • Если конпеляция кончается раньше конца рабочего дня, можно заодно поставить пересобираться сам буст.
            Ответить
            • Лучше ноду жс пересобрать, а то буст может успеть собраться...
              Ответить
              • Советую собрать хромиум или OpenJDK.
                Лучше делать это под винду, тогда четыре часа компиляции покажутся совсем небольшим отрезком по сравнению со временем, которое вы потратите на настройку окружения
                Ответить
      • После прихода инспектора хуета явная началась. Раньше эти видосы хоть как-то были похожи на реальные.
        Ответить
      • --Алло, это SMM студия "зе сошиал нетворк промоушен диджитал солюшенс"?
        --Да
        --А почему шепотом?!
        --Я на алгебре
        Ответить
      • --Алло, это SMM студия "зе сошиал нетворк промоушен диджитал солюшенс"?
        --Да
        --А почему шепотом?!
        --Я на алгебре
        Ответить
      • Ждём, пока JVM после запуска перестанет лагать.

        Кстати, я видел ноут у человека, у которого куча всяких приложений в автозапуске, преимущественно связанных с ЙАЖОЙ. У него ноут несколько минут загружался )))
        Ответить
        • Это нормально.

          Настоящий ноут должен иметь HDD 5400 с парой бедблоков, а в автозагрузке должен быть антивирус, скайп, офис, и обновляльщих хрома

          Если ноут грузится менее пяти минут, то это не ноут
          Ответить
      • Ждём, пока JVM после запуска перестанет лагать.

        Кстати, я видел ноут у человека, у которого куча всяких приложений в автозапуске, преимущественно связанных с ЙАЖОЙ. У него ноут несколько минут загружался )))
        Ответить
        • Это нормально.

          Настоящий ноут должен иметь HDD 5400 с парой бедблоков, а в автозагрузке должен быть антивирус, скайп, офис, и обновляльщих хрома

          Если ноут грузится менее пяти минут, то это не ноут
          Ответить
          • > Если ноут грузится менее пяти минут, то это не ноут...

            ... а ультрабук.
            Ответить
  • техписателям платят постранично

    This page intentionally left blank
    Ответить
  • Давайте ругать пхп-моего-админа.
    Ответить
  • А ваш "Coq" умеет доказывать, что ∫u dv = uv - ∫v du?
    Ответить
      • Полина доказывает, а потом и наказывает математику своим массивным Coq, у математики аж палки погнулись и покосились от такого жёсткого вывода!

        #shemale #lolicon #anime #genderintrigue #reality #coq #massivecoq
        Ответить
        • >shemale

          бялдь, откуда вы это говно тянете-то? Неужели вы на это смотрите?
          Ответить
        • >shemale

          бялдь, откуда вы это говно тянете-то? Неужели вы на это смотрите?
          Ответить
          • А ещё я знаю «бимбо-унитаз». Не лично, просто читал.
            Ответить
          • А ещё я знаю «бимбо-унитаз». Не лично, просто читал.
            Ответить
          • Совсем не обязательно писать на пхп, чтобы знать про real_escape_string...
            Ответить
          • Этот тег отлично описывает реальный мир. Испытываешь надежду, куда-то стремишься, добиваешься, а потом раз — а там хуй.
            Ответить
            • А реально можно не понять по внешности, поведению, голосу, что там хуй?
              Ответить
              • Не думаю. Если всё норм с внешностью и поведением, то там, скорее всего, уже нихуя.

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

            но в чём говно? просто потому что?

            и в жопу тоже нельзя ебаццо, МАКАКА запретил?
            Ответить
            • >и в жопу тоже нельзя ебаццо, МАКАКА запретил?

              Ладно, тебе разрешаю
              Ответить
                • Это вроде всегда так работает. Если что-то разрешили, то оно уже не так интересно, как запрещённое.
                  Ответить
      • Ты хоть зняешь что такое Якобиан?
        Ответить
    • >А ваш "Coq" умеет доказывать, что ∫u dv = uv - ∫v du?
      А на вашем "Coq" можно сделать веб-сайт? А телеграм бота?
      Нет?
      А нахуй он тогда нужен?
      Ответить
      • > веб сайт

        Ну вообще можно... Можно потом даже формально доказать, что в твоём фреймворке нет ошибок экранирования, XSS и прочего.
        Ответить
  • https://m.habr.com/ru/post/537600/

    Job — шаблон проектирования для новичков и опытных Go программистов

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


    Многообещающее начало, не так ли? )))
    Ответить
    • Коммент порадовал:

      Все вот эти вот ваши паттерны проектирования оставьте там, откуда вы пришли в Go, они тут не нужны.
      Ответить
    • Паттерн джоб это корутина?


      Го всегда идет по ручку с ПХП
      Как чип и дейл

      >Это не си, без понимания SOLID

      Люди, никогда не писавшие на си, почему-то думают, что там говнокод.
      Особенно смешно слышать это от ПХПшников
      Ответить
      • Многие сишники вполне следуют духу SOLID... ООП для этого нинужно.
        Ответить
        • Верно

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

          Пыхер, никогда в жизни в глаза сишки не видавший, почему-то уверен, что там нет SOLID
          Ответить
        • Верно

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

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

          Причем ООП в ПХП тоже своеобразное, как мы помним
          Ответить
          • какой может быть SOLID в языке без интерфейсов и наследования?
            Ответить
            • Лол, да это же просто общие принципы хорошего проектирования...

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

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

                "можно обобщить" это типа "натянуть сову на глобус"? ну ок
                Ответить
                • > о каком SOLIDе в сишке речь

                  Ну вот смотри...

                  S -- функция или хедер должны отвечать за что-то одно, не вали всё в одну кучу.
                  O -- для новых фич добавь новую функцию или хедер, не ломай существующие.
                  L -- соблюдай контракты.
                  I -- лучше сделать несколько простых функций/хедеров, разбитых по юзкейсам, чем один навороченный для всех кейсов одновременно.
                  D -- не завязывайся на конкретные библиотеки, завязывайся на их хедера.

                  Натянуто на глобус, да? Эмуляция ООП, да?
                  Ответить
                  • да, натянуто на глобус

                    вообще-то должен был навести на мысль тот факт, что изначально SOLID, как ты правильно заметил, сформулирован в терминах ООП, а не в терминах сишки

                    > L -- соблюдай контракты.
                    - орлы? Лисков не про контракты

                    > D -- не завязывайся на конкретные библиотеки, завязывайся на их хедера.
                    - хедера, которые могут меняться от версии к версии?

                    Тут, в общем, надо определиться: или солид в сишке это фантазия, или он настолько очевиден без специальной формулировки, что непонятно, зачем его придумали отдельно

                    Что тебе больше нравится?
                    Ответить
                    • > Лисков не про контракты
                      А про что же тогда принцип, постулирующий няобходимость дочерним объектам соблюдать контракт родительского?

                      > хедера, которые могут меняться от версии к версии?
                      А интерфейсы в Java от версии к версии някогда ня меняются?
                      Буквально няделю нязад я писала нябольшую программу, использующую библиотеку Pcap. Ня винде есть две основных её реализации: WinPcap (устаревшая) и npcap, ня GNU/Linux — стандартная libpcap. При этом в коде я просто сделала "#include <pcap/pcap.h>" и спокойно нячала использовать определённые в нём методы функции:
                      struct pcap_t *handle = pcap_create(ifaceName, errbuf);
                      pcap_set_timeout(handle, ...);
                      pcap_activate(handle);
                      pcap_loop(handle, ...);

                      И мне совершенно ня важно, какая имення реализация pcap реализует pcap.h, код прекрасня работает ня любой системе. Это — в чистейшем виде dependency inversion.

                      > или он настолько очевиден без специальной формулировки, что непонятно, зачем его придумали отдельно
                      Имення так. Большинство принципов и прочих паттернов становятся весьма очевидны после того, как их прочитать. Задним умом все крепки.
                      Ответить
                    • > Лисков не про контракты

                      Орли? 😉

                      Объект-потомок обязан выполнить все контракты, заданные объектом-предком. А использующий их код обязан вызывать только то, что описано в контракте объекта-предка. Иначе подстановка не сработает, увы.

                      Именно поэтому я всегда читаю этот принцип как "соблюдай контракты, сука".

                      > хедера, которые могут меняться от версии к версии

                      Ну уж постабильнее, чем в этих ваших питонах... Сишники букву O неплохо соблюдают, сломать существующий код -- это табу для большинства.

                      > фантазия

                      Х.з., мне довелось поработать сишным проектом, где юзалось DI во время сборки. Да, там "интерфейсы" и "реализации" лежали в отдельных папочках. И по конфигу подключались в зависимости от платформы и т.п. И тестировать удобно и пирфоманс норм.

                      Но это редкость, конечно.
                      Ответить
                      • > описано в контракте объекта-предка
                        - и что же является этим контрактом? Документация? Очень метафизичненько

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

                        > поработать сишным проектом, где юзалось DI во время сборки
                        - снова же упираемся в то, что в рантайме это не сработает (или я ошибаюсь?)

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

                        с другой стороны, какая разница, как это называть, если оно работает?
                        Ответить
                        • > и что же является этим контрактом? Документация?

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

                          > в рантайме это не сработает

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

                            > всегда меняют реализации прямо в рантайме
                            - кроме варианта "менять" есть ещё "иметь несколько одновременно"
                            Ответить
                            • > контракты, за несоблюдение которых компилятор не убивает твою собаку, не стоят бумаги, на которой они написаны
                              Я, конячно, тоже за принцип "скомпилировалось — знячит, корректно", но заэнфорсить в компайл-тайме LSP нявозможня.
                              interface Animal {
                                  fun make_sound()
                                  fun fly()
                              }
                              
                              class Sparrow : Animal {
                                  override fun make_sound() = println("Чык-чырык!")
                                  override fun fly() = println("Воробей полетел!")
                              }
                              
                              class Cat : Animal {
                                  override fun make_sound() = println("Ня-я-я~")
                                  override fun fly() = throw NotImplementedError("Ня умею летать... (╥﹏╥)")
                              }

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

                                  Присоединяяйтесь к Axis Order Coq (╯✧▽✧)╯
                                  Ответить
                                • Контракт класса — это то, как объекты этого класса должны себя вести по замыслу его автора, ня более того. Как имення этот замысел выражен (в документации, в комментариях, прямо в коде) — совершення няважно.
                                  Ответить
                                  • если контракт нельзя заэнфорсить хотя бы частично, то грош ему цена

                                    задача в данном случае не реализуемая, я согласен. но дела для меня это не меняет

                                    именно поэтому собственно давно разочаровался в динамушне
                                    Ответить
                                    • Так ведь единственная часть контракта, которую энфорсят компиляторы мейнстримных язычков — это нязвания и типы методов. На поведение этих методов компиляторам глубоко плевать. Если у ме-ня класс-потомок из переопределённого метода кидает NotSupported/NotImplemented — это грубое нярушение LSP, одняко никакой компилятор проверить это ня в состоянии.
                                      Ответить
                                      • > никакой компилятор проверить это ня в состоянии

                                        А как же noexcept(true)?!

                                        З.Ы. Хотя там тогда просто молча выйдут.
                                        Ответить
                                        • Да, в язычках с checked exceptions можня что-то придумать (и то потомок-нярушитель может просто в лог ворнинг няписать).

                                          А крестовый компилятор да, noexcept ня энфорсит. Получила исключение в noexcept-методе — сама дура.
                                          Ответить
                                      • я не очень понимаю, с каким моим утверждением ты споришь

                                        соответствие сигнатуры метода можно проверить в компалтайме

                                        соответствие поведения с документацией нельзя, с этим никто не спорит

                                        но языки, в которых реализован хотя бы первый пункт, лучше тех, в которых не реализовано вообще ничего

                                        > NotSupported/NotImplemented — это грубое нярушение LSP
                                        - наличие в стандартной библиотеке NotSupported/NotImplemented это нарушение чего?
                                        Ответить
                                        • Я утверждаю, что компилятор ня может полноценно энфорсить LSP. В лучшем случае он может только проверить сигнятуры, но это даже ня половина LSP.

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

                                            > Наличие переопределённых методов, которые безусловно бросают NotSupported — это практически стопроцентное нярушение LSP
                                            - даже если это написано в документации?

                                            А где ещё может использоваться NotImplemented? Зачем авторы языков его переизобретают?

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

                                              > - даже если это написано в документации?
                                              В документации дочернего класса? Конячно.
                                              По определеняю, класс-няследник должен уметь всё, что умеет класс-предок, и, возможня, нямножко больше. Если класс-предок умеет fly(), а класс-няследник fly() ня умеет (выкидывает NotSupported) — это грубое нярушение LSP.

                                              > А где ещё может использоваться NotImplemented? Зачем авторы языков его переизобретают?
                                              NotImplemented — чтобы выкидывать из методов, которые ещё не разработаны (но будут в будущем). А NotSupported — чтобы использовать в случаях, когда программисту лень нятягивать базовый ООП ня сову. В Kotlin, кстати, нят никакого NotSupported, и это правильня.
                                              Ответить
                                              • > твоё утверждение
                                                - я не считаю документацию контрактом, вот и всё. (это не значит, что я против документации)

                                                > NotImplemented — чтобы выкидывать из методов, которые ещё не разработаны (но будут в будущем)
                                                - выглядит, как костыль. я за пределами оверрайдов NotImplemented никогда и не встречал, наверное
                                                Ответить
                                                • Тогда что такое контракт в твоём пони-мании?

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

                                                    например, MAKAKA does not implement GOST: bormand.cs: 114

                                                    ну или хотя бы рантаймовые контракты, как в D или в Рэкете
                                                    Ответить
                                                    • [1/2]
                                                      Тогда из твоего пони-мания контракта полностью исключается поведение.
                                                      Возьмём нядавний пример:
                                                      open class Rectangle(var h: Double, var w: Double) {
                                                          fun area() = h * w
                                                      
                                                          open fun stretchH(factor: Double) {
                                                              this.h *= factor
                                                          }
                                                      
                                                          open fun stretchW(factor: Double) {
                                                              this.w *= factor
                                                          }
                                                      }

                                                      Далее от класса Rectangle я няследую, няпример, классы "Текстура" и класс "Окно".

                                                      Пусть теперь я хочу няписать функцию, которая будет растягивать исходную текстуру так, чтобы она целиком помещалась в окно. При этом завязываться ня конкретные Texture и Window я ня буду (буковка D). Пишем:
                                                      fun stretchToFit(source: Rectangle, dest: Rectangle) {
                                                          val hFactor = dest.h / source.h
                                                          val wFactor = dest.w / source.w
                                                      
                                                          source.stretchH(hFactor)
                                                          source.stretchW(wFactor)
                                                      }


                                                      Получилась хорошая, обобщённая функция, при помощи которой я могу и текстуру под окно растянуть, и окно под текстуру, и хоть чёрта лысого (если он прямоугольный).
                                                      Ответить
                                                    • [2/2]
                                                      Одняко работа этой функции целиком зависит от LSP. Что произойдёт, если класс текстуры будет уметь растягиваться только по степеням двойки?
                                                      fun nearestPowerOfTwo(x: Double): Double =
                                                          if (x >= 1.0) {
                                                              2.0.pow(floor(log2(x)) + 1)
                                                          } else {
                                                              1.0 / nearestPowerOfTwo(1.0 / x)
                                                          }
                                                      
                                                      class Texture(h: Double, w: Double) : Rectangle(h, w) {
                                                          override fun stretchH(factor: Double) {
                                                              super.stretchH(nearestPowerOfTwo(factor))
                                                          }
                                                      
                                                          override fun stretchW(factor: Double) {
                                                              super.stretchW(nearestPowerOfTwo(factor))
                                                          }
                                                      }

                                                      Правильня: если такой объект попадёт в функцию stretchToFit() — она выдаст совершенно ня то, на что рассчитывал программист.
                                                      Произошло это из-за того, что автор функции stretchToFit() воспользовался неявным контрактом: он посчитал, что метод Rectangle.stretchH(x) обязан растянуть прямоугольник ровно в x раз.
                                                      В зависимости от того, что имели в виду авторы этих сущностей (Rectangle, Texture, stretchToFit()), нярушение LSP может быть в разных местах:
                                                      1) Если по замыслу автора Rectangle stretchH()/stretchW() обязаны растягивать прямоугольник точня, то LSP нярушил автор Texture.
                                                      2) Если по замыслу автора Rectangle stretchH()/stretchW() обязаны растягивать прямоугольник так, как посчитает нужным потомок (няпример, по степеням двойки), то LSP нярушил автор stretchToFit(): он создал функцию, которая ня может корректня работать со всеми потомками Rectangle.
                                                      3) Возможня и такое, что LSP нарушил пользователь функции stretchToFit(), а сама она обязывается растянуть source всего лишь в няиболее близкий к dest прямоугольник.

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

                                есть нарушение принципа буквы I
                                Ответить
                              • > Здесь ня лицо классическое нярушение LSP.

                                В первую очередь, здесь ня лицо классическое нярушение "I" из SOLID -- попытка впихнуть невпихуемое в один интерфейс Animal. Отсюда и все грабли.
                                Ответить
                                • Если оригинально Animal — класс, разработанный для симуляции какого-нибудь авиария, где в принципе всё летает, то с интерфейсом всё нормально, непонятно, кто решил его переиспользовать не по назначению.
                                  Ответить
                                  • Поэтому я за ECS (Entity Component System).
                                    P.S. Эта парадигма на самом деле показывает, насколько ООП ущербен. Казалось бы, уж где, а в гейдеве наследовать танчики от машинок точно было бы идеально.
                                    Но нет, оказалось, что и здесь проще его выкинуть.
                                    Ответить
                                    • запахло дождём юнити

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

                                      По нему ползёт букашка, а сам танчик ползёт на врага.

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

                                      Я даже видел CMS с такой идеологией (еще за долго до того, как появился этот термин): там из коробки было понятие "страница", а каждый плагин привязывал к ней свою метадату и как-то обрабатывал.

                                      Зато для мелких игр (где танчик сам себя умеет и рисовать, и стрелять) ООП в самыйраз
                                      Ответить
                                    • ECS взлетел, потому что с одним и тем же танчиком может происходить слишком много всего.

                                      По нему ползёт букашка, а сам танчик ползёт на врага.

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

                                      Я даже видел CMS с такой идеологией (еще за долго до того, как появился этот термин): там из коробки было понятие "страница", а каждый плагин привязывал к ней свою метадату и как-то обрабатывал.

                                      Зато для мелких игр (где танчик сам себя умеет и рисовать, и стрелять) ООП в самыйраз
                                      Ответить
                                      • Он взлетел ещё и потому, что он тупо быстрее. И данные локальнее лежат, и один и тот же код для них выполняется.
                                        Ответить
                                        • Ну про быстрее это скорее к Data-Oriented:

                                          https://gamesfromwithin.com/data-oriented-design

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

                                          а ООП предлагает распологать данные совсем не так)
                                          Ответить
                                          • поясните для колхозников, по ссылке мне ходить лень

                                            что такое удобно располагать данные и почему ООП их так не располагает?
                                            Ответить
                                            • Попробую на пальцах (но лучше почитать, конечно)

                                              У танчика есть координаты на экране, модель, повреждение, скорость, еще 100500 параметров.

                                              ООП предлагает сделать тебе класс, и всех их сложить туда.

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

                                              В Data-Driven подходе у тебя будет структура, в которой будут массивы моделей, массивы повреждений итд.

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

                                              Это позволит тебе не прыгать через лишние данные, а значит не забивать кеш процессора говном, не обманывать префетчер итд.

                                              Иными словами ООП это массивы структур
                                              А DOD это структура массивов.

                                              Как-то так вижу
                                              Ответить
                                            • > что такое удобно располагать данные

                                              Данные должны лежать в царском массиве, потому что последовательный доступ к памяти — круто.

                                              > и почему ООП их так не располагает?

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

                                              Данные должны лежать в царском массиве, потому что последовательный доступ к памяти — круто.

                                              > и почему ООП их так не располагает?

                                              Потому что инстансы класса нельзя скласть в царский массив, коду приходится ходить по ссылкам, и это не ня.
                                              Ответить
                                          • О том и речь. ECS (у него много ипостасей, юнитивская не всеми считается каноном) по совместительству является data oriented, ну или его проще сделать таковым, в то время как OOP — невозможно.
                                            Ответить
                                    • 99% примеров наследования "на пальцах" — примеры, где наследование нахуй не нужно. Вообще, глубокая иерархия — частый признак того, что в коде говно. Достаточно посмотреть на iostreams.
                                      В гейдеве для достаточно какой-нибудь Entity для рендеринга, от него Doodad для всяких кусков ландшафта и Unit для интерактивных объектов, всё остальное достигается настройкой соответствующих объектов.
                                      Ответить
                                      • >обще, глубокая иерархия — частый признак того, что в коде говно

                                        наследование вообще очень опасная штука. Наследовать интерфесы (pure virtual классы) хорошо и правильно.

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

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

                                            -- Как называется жительница Алабамы, которая бегает быстрее брата и отца?
                                            --Девственница
                                            Ответить
                                • Согласня, ня очень няглядный пример. Можня привести классический ООП-похоронный:
                                  open class Rectangle(private var h: Double, private var w: Double) {
                                      fun area() = h * w
                                  
                                      open fun stretchH(factor: Double) {
                                          this.h *= factor
                                      }
                                  
                                      open fun stretchW(factor: Double) {
                                          this.w *= factor
                                      }
                                  }
                                  
                                  class Square(side: Double) : Rectangle(side, side) {
                                      override fun stretchH(factor: Double) {
                                          throw NotImplementedError()
                                      }
                                  
                                      override fun stretchW(factor: Double) {
                                          throw NotImplementedError()
                                      }
                                  }

                                  https://en.wikipedia.org/wiki/Circle–ellipse_problem
                                  Ответить
                            • > иметь несколько одновременно

                              Одновременно уже только через эмуляцию ООП рантайм полиморфизм, да.
                              Ответить
            • S: Single responsibility principle. Один модуль отвечает за одну задачу. Драйвер видеокарты не шлёт емейлов.

              O: Open/Closed: Я могу добавлять новые файловые системы в Linux описывая их на "си", ничего внутри ядра не трогая

              L: LSP: Я могу передать в функцию, ожидающую указатель на callback, любой подходящий callback, функция ничего не заметит

              I: ISP: У меня много хедеровских файлов, каждый для своей задачи.

              D: DIP: Разумеется, хороший код зависит от контрактов, а не от конкретных реализаций. Могу собраться с libc, а могу с мюслями
              Ответить
    • [quote]
      Фиксированное число горутин обработчиков, читаюших канал задач, будут качественно лучше и быстрее, чем одна задача — одна горутина.
      [/quote]

      2022: рекомендуется использовать пул горутин
      2023: рекомендуется не споздавать горутины врручную, а пользоваться экзекутором, котоый управляет пулом
      2024: кокорутины это как корутины, но более легкие.
      Ответить
    • [quote]
      Фиксированное число горутин обработчиков, читаюших канал задач, будут качественно лучше и быстрее, чем одна задача — одна горутина.
      [/quote]

      2022: рекомендуется использовать пул горутин
      2023: рекомендуется не споздавать горутины врручную, а пользоваться экзекутором, котоый управляет пулом
      2024: кокорутины это как корутины, но более легкие.
      Ответить
      • То ли дело эрланг. Там как сделали изначально 1 задача = 1 "процесс", так и живут. Никто не изобретает новые корутины, пулы и экзекуторы насколько я понимаю.
        Ответить
        • Пулы таки изобретают, чтобы системные ресурсы или какие-нибудь соединения с постгрёй экономнее использовать. Но бизнес логика строго разбита на отдельные процессы, как правило, да.
          Ответить
        • Любители корутин уже потихоньку тяготеют к акторам

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

          Это называется channel в котлине, например

          Так что скоро они изобретут эрланг
          Ответить