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

    −1

    1. 1
    2. 2
    Рак
    https://twitter.com/thelarkinn/status/1006746626617008128

    С этим миром явно что-то не так.

    Запостил: roskomgovno, 13 Июня 2018

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

    • В хуе есть массив из 2 указателей на яйцы?
      Ответить
      • Конечно.
        Вот если бы в хуе было два яйца - это было бы неправильно. А так - яйца где-то отдельно, но хуй знает, какие яйца ему принадлежат.
        Ну в данном случае фигня какая-то, разыменовал мусор и сидит довольный.
        Ответить
        • > мусор
          Обычно там NULL
          Ответить
          • В дебажной сборке какое-нибудь 0xCCCCCCCC там будет.
            Ответить
        • > сидит довольный
          Я каждый день с утра разыменовываю мусор, и потом хожу весь день довольный.
          Ответить
          • > разыменовываю мусор
            > хожу довольный
            Эксплойты пишешь?
            Ответить
            • С утра спросонья такое не получится (у меня утро наступает где-то после полудня)
              Ответить
            • Кстати, как они дырки находят? Эксплоетопейсатели эти.
              Ответить
              • код читают
                Ответить
                • мышынный?
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                  • мушиный

                    Еще можно усиленно пихать в API всякий мусор и смотреть как он себя поведет, но лучше читать код.

                    На самом деле в _хорошем_ коде не должно быть явных буфероверфлоу: функции или явно требуют выделить память за них, либо явно передать им размер нужной памяти. Всякие говнофункции типа *str* тоже часто депрекейтнуты, а страницы со стеком, с кодом и с кучей разедены так что выполнить произвольный код в куче все равно так просто не получится

                    Но говноеды умеют в gadgets aka return oriented programming, : когда делают jmp в заранее известное место (можешь вику читнуть)

                    Для боротьбы с говноедами современные ОС используют ALSR загружая каждый раз в разное место, а openbsd релинкит в случайном порядке ядро и юзерленд, а больше так делает никто
                    Ответить
                    • ОпенБздуны конечно круты, но бля, как так можно:

                      17 января 2014 года проект оказался под угрозой закрытия из-за того, что у Тео де Раадта, использующего для OpenBSD огромный «зоопарк железа» у себя дома, накопилась значительная задолженность за электроэнергию, эквивалентная 20 000$, в связи с чем он опубликовал письмо с просьбой о помощи.
                      Ответить
                      • Тео скандалист потому что: он посрался примерно со всеми, его за это из NetBSD и выгнали.

                        Когда-то openbsd давала денег DARPA, но потом пришел пездец: Тео говорит что они обиделись на его антивоенные высказывания по поводу Ирака.

                        Даже у фрибзди куча спонсоров, а у openbsd мало совсем: кстати, больше всего бабла им давал Яндекс)
                        Ответить
            • Подхожу к менту, и говорю: "теперь ты никто, и звать тебя никак".
              Ответить
      • показать все, что скрытоvanished
        Ответить
        • Было бы здорово если бы в этот ГК запостил свою паскальную программку какой-нибудь невинный школьник...
          Ответить
        • Не здорово, в жысе, вроде, нет пуказателей.
          Ответить
          • Строго говоря есть указатели (или ссылки): объекты же хранятся где-то в куче, а у тебя на них указатель.
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • Совершенно безопасный язык0
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • А в асме и форте даже кастовать не надо.
                    Ответить
                  • var foo = 42;
                    foo(); //сам дурак

                    а если ссылка то

                    var foo = new Foo();
                    foo();

                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • чтобы у школоты все сломалось?
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • POKE и PEEK использовались никогда кроме когда надо было напрямую иметь дело с API доса, бивиса и железа: регистрами и памятью (bios data area например)

                            Был такой "справочник программиста PC" человека по имени Джордейн:
                            охуенная книга, в которой описывалась как программировать буквально всё железо PC, например как с помощью таймера и писиспикера сделать звук.

                            Так вот там многие программы давались в двух вариантах: в асемблере и в барсике (ибо барсик был частью base system доса, qbasic вроде).

                            Мне от этик пиков и поков хотелось скорее в masm и там делать MOV и OUT.

                            Некоторые, кстати, так писались на микикомпах типа спектурума потому что basic был в прошивке
                            Ответить
                          • >Даже в Бейсике, который учили в школе, были операции POKE, PEEK и CALL ABSOLUTE.
                            +
                            В школе не учили. Но мы сами учились :)
                            Ответить
    • констреинты констреинты , где вы мои констреинты
      и каскадный онделит
      Ответить
      • Страйкер:
        Это мы не проходили
        Это нам не задавали
        Тарам-пам-пам!
        Тарам-пам-пам!
        Ответить
      • показать все, что скрытоvanished
        Ответить
        • Ну и хули забивать базу комментами, которые никто не увидит.
          Ответить
        • можно взять иннодб, сдедать у комента внешний ключ на говнокод и сделать on cascade=delete.

          Ваш КО
          Ответить
          • в схеме БД популярного продукта Redmine даже в 2018 году вообще отсутствуют внешние ключи, потому что нахуй идите, слишком сложно и wontfix
            http://www.redmine.org/boards/1/topics/15943
            и если это так сложно для пиздоглазых, то что уж говорить о говноедах
            Ответить
            • >>пиздоглазых
              Ruby?
              >>говноедах
              PHP?


              Кстати, Django умеет внешние ключи, uniq и not null. Больше, правда, никакие констреинты не умеет, но и это уже хорошо.

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

                дякую тобi боже що я не рейлист
                Ответить
              • И всё это из-за myisam и sqlite?
                Ответить
                • джанго тоже умеет sqlite (не для продакшена разумеется а для разработки), там есть слой абстракции от СУБД и в том слое для sqlite отключены констреинты.

                  Так что DHH говна поел with no reason.

                  Правда, это было 8 лет назад. Может быть с тех пор рельсы чему-то научилмсь

                  ps: дока грит "Active Record only supports single column foreign keys"
                  Ответить
                  • но так ведь и у хейбейрнейта/жэпэы есть некие анальные проблемы с композитными ключами - они там как бы есть, но мои бек-жавапрофессионалы постоянно морщили носы и просили добавить суррогатный id для таблиц многое-ко-многим с атрибутами, например
                    Ответить
                    • Да, в ORMных системах иногда приходится заводить суррогатный ключ, бывают совсем смешные ситуации:

                      |PK|CountryCode|CountryName|
                      |1 |AND        |Andorra
                      |2 |BEL        | Belarus

                      так-то ежу понятно что PK тут CODE потому что он Unique и однозначно идентифицирует ряд, но некоторые ORM не хотят видеть ключем не INT например
                      Ответить
                • И они мне ещё дружно доказывали, что ORM — не говно. Шах и мат, аметисты.
                  Ответить
                  • ORM которые не умеют в foreign keys безусловно говно. Суррогатные ключи тоже требуют далеко не все.

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

                    В том же Django я могу описать модели типа:
                    class Pituh(models.Model):
                        name = models.CharField(max_length=200, unique=True)
                    
                    class Kurochka(models.Model)
                        eggs_per_day = models.Integer()
                        husband = models.ForeignKey(Pituh) # потому что полигамия у них у нас one to many


                    И получить автоматически веб-морду для создания птичьих семей, и возможность делать запросы типа
                    petja_pitushok = models.Kurochka.objects.filter(name="Rjaba").husband


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

                    Разумеется, если я захочу я могу сделать
                    kurochka = models.Kurochka.raw_sql("SELECT * from `kurochkas` where name like '%aba%' LIMIT 1")


                    и ORM замапит мне все поля, потому что моя задача только в том чтобы кортеж (или как правильно назвать ряд?) с курочкиными пропертями вернуть.

                    Могу пойти дальше, и получить результат запроса в виде dict и сам заполнить курочку:
                    models.Kurochka(husband=pituh)


                    Ничто, в общем, не мешает когда нужно взять в руки голый SQL, а унылый CRUD бойлерплейт и заполнение форм (а это 80% любого говносайта) сделает за меня Django и ORM.
                    Ответить
      • показать все, что скрытоvanished
        Ответить
    • Это теперь в документах хз откуда будут появлятся NaN и undefined?
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • показать все, что скрытоvanished
          Ответить
        • Там было:
          struct Hui
          {
              double length;
              Egg *eggs[2];
          }
          
          int main()
          {
              Hui huetz;
              auto egg = *huetz.eggs[1];
          }
          З.Ы. Блин, уже 1.3 гига снепшотов накопилось... Когда уже лапки дойдут до показа всей этой истории на NGK.
          Ответить
          • показать все, что скрытоvanished
            Ответить
          • только не Eggs а balls по английски.

            > Egg *eggs[2];
            Я бы написал так:
            Egg eggs[2];

            И пускай там два яца лежат внутри буя без всякой указательности
            Ответить
            • > без всякой указательности
              А как ты после этого будешь реализовывать castrate()?

              Имхо, всё это должно принадлежать чему-то более высокоуровневому (Body?) А если органам нужно знать друг о друге -- то передать через конструктор ссылку или weak_ptr.
              Ответить
              • castrate можно сделать прописав туда нуллы (ну или спец яйцо-null object (паттерн такой)).

                Имхо, массив указателей нужен в двух случаях:
                1) одно яйцо может принадлежать более чем одному человеку (паттерн приспособленец как раз): много указателей на одну сущность
                2) левое и правое яцо суть одно и тоже: указателя два, а яйцо одно.

                Можно еще было хранить там тупо указатель на null terminated массив яиц на случай если их будет три или одно, либо же хранить количество яиц отдельно (это безопаснее чем null term)

                С принадлежность согласен: тут явно не выполняется HAS-A, так что лучше отдать это body.

                А зачем weak? Чтобы не получилось reference cycle?
                Ответить
                • > 1, 2
                  Ну а как же полиморфизм (яйца могут быть разного типа)?

                  > Чтобы не получилось reference cycle?
                  Ну да.
                  Ответить
                  • А вот тут у меня дырка с основах плюсов: если они разного типа то я не могу сделать их массив, потому что каждая ячейка будет размера Egg, а если у Egg два наследника -- одно воловье, а второе от суриката, то воловье может и не влезть.

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

                      З.Ы. С указателем ещё и тестировать всё это можно будет по-отдельности.
                      Ответить
                • показать все, что скрытоvanished
                  Ответить
                • >null terminated массив яиц
                  struct Hui 
                  {
                      double length;
                      Egg *eggs[];
                  };
                  
                  ...
                  
                  Hui *newHui = (Hui *)malloc(sizeof(Hui) + sizeof(Egg *) * (eggsCount + 1));
                  Ответить
              • Надо так:
                struct genitals {
                    Dick dick;
                    struct {
                        int nballs;
                        Ball *balls;
                    } mudi;
                };
                Ответить
                • unsigned int только, у тебя не мож быть отрицательного количества ииц.
                  В 16ти битном режиме я бы сказал что нужен short, но на современных системах все равно выровняется

                  А Dick какого размера?
                  Я спрашиваю потому что если он очень большой то лучше хранить указатель: пусть у тебя член отдельно будет
                  Ответить
                  • > лучше хранить указатель
                    Таки да, надо *dick. Ведь член можно отделить (правда это не рекомендуется), его может не быть изначально, он может быть одновременно и на положенном месте и в чьей-нибудь руке, рту, анусе, кармане и т.д. Может быть даже в руке, что находится в анусе. Или, может лучше хранить id хуйца?

                    Говорят одно африканское племя нашло способ форкать хуи

                    Ну, и собсно сам:
                    typedef struct {
                        unsigned int length;
                        unsigned int width; // как толщина по-англицки?
                        enum {
                            // ...
                        } surfacetype; // гладкий, с пупырками, с шрамами от укуса собаки и пр.
                        enum {
                            // ...
                        } form; // форма: загнутый вверх, влево, вправо, вниз, змеевидный, спираль, и пр. Или, может лучше хранить 3D модель пипирки? Тогда width и length можно убрать.
                        //... что-нибудь ещё
                    } Dick;
                    Ответить
                  • показать все, что скрытоvanished
                    Ответить
          • показать все, что скрытоvanished
            Ответить
    • Здесь, на сайте только один рак - ты.
      Ответить
    • Помните закон им. основателя M$? «The speed of software halves every 18 months»

      Нужно же куда-то утилизировать лишнюю процессорную мощь!
      Молодцы, ребята, стараются.

      The Great Moore's Law Compensator (TGMLC), generally referred to as bloat, and also known as Wirth's law, is the principle that successive generations of computer software acquire enough bloat to offset the performance gains predicted by Moore's Law.

      In a 2008 article in InfoWorld, Randall C. Kennedy, formerly of Intel, introduces this term using successive versions of Microsoft Office between the year 2000 and 2007 as his premise. Despite the gains in computational performance during this time period according to Moore's law, Office 2007 performed the same task at half the speed on a prototypical year 2007 computer as compared to Office 2000 on a year 2000 computer.
      Ответить
    • показать все, что скрытоvanished
      Ответить

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