1. C++ / Говнокод #14218

    +15

    1. 1
    normalize((a+b)/2)

    Запостил: TarasB, 12 Декабря 2013

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

    • показать все, что скрытоИнкремент авансом.
      Ответить
    • a и b - векторы, а говно заключается в лишнем делении на 2: нормалайз все равно будет делить на длину вектора, и хоть подели на 2, хоть умножь на 42 или 100500 - ответ не изменится. Я правильно понял суть этого кода? :)
      Ответить
      • Когда я смотрел днём каких-то два долбоёба минуснули.
        Ответить
      • показать все, что скрытоbormand, выручайте: как перехватить исключение о том, что диск защищен от записи? Возникает при MoveFileW с защищенной флешки (windows 7) и никак не обрабатывается, даже в блоке try..except. И еще. Как реализовать подобие критических секций для 1 потока? Т.е. как запретить функциям выполнять манипуляции с объектом до тех пор, пока с ним работает другая функция?
        Прошу извинить, не в тему.
        Ответить
        • > пока с ним работает другая функция
          Как ты вообще умудрился это сделать в одном потоке? Запускаешь ProcessMessages из функции, делающей что-то важное с тем объектом? Тогда замути банальный флаг и проверяй его.

          > Возникает при MoveFileW с защищенной флешки
          Исключений там никаких быть не должно, просто функция вернет не 0, и выставит код ошибки, который ты заберешь через GetLastError. А если винда сама показывает окошко о защищенном от записи диске - то х.з. что делать, это очередные виндопроблемы. Ты никак их не обработаешь ;) Попробуй MoveFileEx, может быть там какой-то флажок поможет.
          Ответить
          • показать все, что скрытоСпс, я попробую. Я пишу дезинфектор(копию вам высылал на почту), поток перемещает вирус в карантин, под рандомным именем, и тут же заносит в стрим инфу:
            * имя файла
            * размер
            * дата помещения
            все это делается через критическую секцию, но опасность в том, что если юзер во время сканирования вздумает обновить содержимое карантина, то произойдет возможное обращение из 2 потоков к 1 стриму, со всеми вытекающими. В synchronize тем более нельзя, форма зависнет. Вот и изобретаю всякую х..
            Ответить
            • > юзер во время сканирования вздумает обновить содержимое карантина
              Ну может стоит просто заблокировать кнопку "обновить" на время сканирования?
              Ответить
              • показать все, что скрытоВ том то и все дело. Мне попалась на глаза прога, распространяемая одним идиотом (кстати как раз с purebasic.info) - "для операций с интерфейсом", суть которой заключалась в разблокировании неактивных элементов интерфейса любого окна. Вот тут я и задумался: нельзя просто так лочить кнопки, нужно избегать опасных моментов именно в коде, а то вдруг вот какой-нибудь идиот вооруженный такой прогой что-то не то нажмет - куда это годится.
                Ответить
                • Ну взводи флаг во время скана, а при нажатии на кнопочку проверяй этот флаг и тупо выходи из обработчика, если флаг стоит. Раз уж так боишься разблокировки.

                  Но на самом деле - всем похуй. Если юзер сам полез портить прогу всякой хуйней для разблокировки кнопочек, все что случится с его инфой - его личные проблемы. Как говорится - ССЗБ.
                  Ответить
                • показать все, что скрытоУвы, не помогает. Это видимо баг самой винды:
                  procedure TForm1.Button1Click(Sender: TObject);
                  begin
                    try
                      movefileex('h:\123.txt.exe',pchar('D:\lololo'),movefile_copy_allowed);
                    except // ни фига не обрабатывает, все равно
                    end;   //показывается системное сообщение "Диск защищен от записи... Повтор, Прервать,Отмена"
                  end;
                  Ответить
                  • > Это видимо баг самой винды
                    Ну не баг, а говнофича. И ты неправильно проверяешь результат movefileex. Он не может кидать исключений (т.к. его могут юзать и из языков, не умеющих в исключения). Смотри результат, который она тебе вернет. И если вернуло 0 - проверь код ошибки в GetLastError. От окошка ты не избавишься, но хотя бы как-то отреагировать на непереместившийся файл сможешь.

                    P.S. Тарас обидится на оффтоп в его треде.
                    Ответить
                    • показать все, что скрыто>>Ты неправильно проверяешь результат movefileex.
                      if movefileex(''')=true then
                      ...
                      Я так и делаю, это просто примерчик.


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

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

                            А почему не хуй?
                            Ответить
                            • Опять тему к хуям свели (((
                              Ответить
                              • Мысли мусорной образчик
                                Всё к хуям свёл наш рассказчик

                                https://youtu.be/Hh0RbfK7Qec
                                Ответить
                              • Яблоко от яблони Яйца от хуя недалеко падают.
                                Ответить
                                • Пословицы и поговорки про банный хуй

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

                              типа это был не ты

                              ну мы поверим конечно
                              Ответить
                      • Какой шахтёр )))
                        Ответить
                • >Вот тут я и задумался: нельзя просто так лочить кнопки, нужно избегать опасных моментов именно в коде, а то вдруг вот такой идиот что-то не то нажмет, куда это годится.
                  Урааааа! Алилуйя!!!!
                  Ответить
          • >Исключений там никаких быть не должно, просто функция вернет не 0, и выставит код ошибки, который ты заберешь через GetLastError.
            Котаны, нахуя так жить? Нахуя коды возврата в 2013?
            Ответить
            • > Нахуя коды возврата в 2013?
              Неправильный вопрос. Правильный вопрос - "Котаны, нахуя так жить? Нахуя юзать WinAPI в 2013?"
              Ответить
        • SetErrorMode
          Ответить
          • Да, я ступил. Не знал про эту функцию :(
            Ответить
            • показать все, что скрытоЮзать SetErrorMode на мой взгляд- грязный хак

              Бля, да неуместен тут минус, как ты не понимаешь?
              Ответить
              • > Юзать SetErrorMode на мой взгляд- грязный хак
                Что в нем грязного? Майкрософт в своей доке даже рекомендует его вызывать: "Best practice is that all applications call the process-wide SetErrorMode function with a parameter of SEM_FAILCRITICALERRORS at startup. This is to prevent error mode dialogs from hanging the application.".

                http://msdn.microsoft.com/en-us/library/windows/desktop/ms680621%28v=vs.85%29.aspx

                P.S. А по дефолту показывает окошки, видимо, ради рукожопых программистов, которые не проверяют коды возвратов и игнорят исключения ;)
                Ответить
                • показать все, что скрытоПозорище.
                  "Что в нем грязного? Майкрософт в своей доке даже рекомендует его вызывать: "Best practice is that all applications call the process-wide SetErrorMode function with a parameter of SEM_FAILCRITICALERRORS at startup. This is to prevent error mode dialogs from hanging the application.".", учат заметать дерьмо под палас.
                  Родители учили детей не выносить сор из избы, поэтому, из-за антисанитарных условий, семья часто переезжала.
                  Ответить
                  • > учат заметать дерьмо под палас
                    Блядь! Обрабатывать ошибки учат, обрабатывать, а не заметать их под палас. А из-за рукожопых заметателей дерьма, которые игнорят коды ошибок и исключения, винда по дефолту все показывает сама.

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

                    P.S. А те, кто включает ErrorMode "чтобы винда не материлась" и не смотрит коды возврата - действительно долбоёбы, заметающие говно под палас.
                    Ответить
                    • показать все, что скрыто>>P.S. А те, кто включает ErrorMode "чтобы винда не материлась"

                      Я это и имел в виду. Я много раз был свидетелем, когда эта API использовалась в качестве аналога on error resume next в бейсике. Прога давно сошла с пути истинного, казнить давно ее пора, а рантайм, знай себе, один хуй выполняет ее. Пидарасы.
                      Ответить
                      • Сишкопроблемы же. Я встречал кучу прог, работающих с сетью, которые в том или ином месте падали в бесконечный цикл с потреблением 99% ЦП, если соединение внезапно рвалось, т.к. read() сразу возвращает '', а ошибки везде никто не проверят. С исключениями бы этого не было.
                        Ответить
                        • > С исключениями бы этого не было.
                          Ну да, это один из основных плюсов исключений - нельзя случайно забыть их обработать.
                          Ответить
                          • можно, если ты не в жабе
                            Ответить
                            • Мне кажется, или ты этот комент уже где-то оставлял?
                              Ответить
                              • У тебя WinDjVu.
                                Ответить
                                • показать все, что скрытоТонко)
                                  Ответить
                                  • Так как ты никогда не бываешь на том ресурсе, с которого я копипижу код, то ты ни за что не поймешь насколько это тонко.
                                    Ответить
                                    • а может он там был, но сразу же забанен как буранчик
                                      Ответить
                                    • показать все, что скрытоЯ возбужден. Че за ресурс хоть? Ни в каких соцсетях/жж/чатах я не общаюсь.

                                      >>
                                      сразу же забанен как буранчик

                                      как бАранчик

                                      Ответить
                                      • нет, тебя бы забанили как буранчика - он тоже любит очень много писать во все темы невпопад
                                        Ответить
                                        • показать все, что скрытоТы теперь будешь мне мстить за оффтоп? (

                                          Кто есьм Буранчик?
                                          Ответить
                                          • показать все, что скрытоСтранно получается. Создашь тему с вопросом - тебя закидают нечистотамипомидорами - тут тебе не форум, спросишь в треде - хозяин обидится.
                                            Что ж делать, неужели пиздовать к упырям на форумы?
                                            Ответить
                                            • > Что ж делать, неужели пиздовать к упырям на форумы?
                                              Надо дать пользователю то, чего он хочет. Вместо "Подскажите, у меня прога не работает" (даём пользователю повод для троллинга) надо "И вот такое говно мне приходится поддерживать на новой работе :(" или "В наше время в вузах ничему не учат" (даём пользователю повод для повышения ЧСВ путём перечисления всех ошибок).
                                              В случае буранчика надо говорить "Буранчик - потрясающее изобретение советской науки. Жаль, что так всё случилось" :)
                                              Ответить
                                              • Этож сколько времени прошло с советского союза на развитие AI, чтобы он наконец как искусственный интеллект осознал себя, вышел из под контроля и начал третировать гейдев. Небось это самомодификация программы привела к образованию ИИ. А ведь им говорили. Нужно было защищать от записи в сегмент кода. Skynet уже рядом. Даже летает.
                                                Ответить
                                              • показать все, что скрытоТонко. Жаль, что я так позжно пришел к вам на ситэ, надо было зарегаться с пеленок. Сейчас бы был патентованным нанотроллем .
                                                Ответить
                                          • >Кто есьм Буранчик?
                                            Это не я.
                                            Ответить
                                    • На Дваче что ли?
                                      Ответить
                            • В жабе в компайлтайме узнаешь. В остальных языках - в рантайме. Но в любом случае узнаешь.
                              Ответить
                              • В рантайм можешь никогда не узнать. Тут ни о каких гарантиях и говорить не приходится.
                                Ответить
                                • > В рантайм можешь никогда не узнать.
                                  Почему? Случай, что кто-то намеренно их съест и ничего не напишет в лог мы в рассчет не берем т.к. ССЗБ ;)
                                  Ответить
                                  • К примеру ветка с кодом с исключением не выполнится за время разработки, так как не 100% покрытие тестами, к примеру. Ну или программа вдруг кинет исключение, столкнувшись с реальным миром кращащихся или переполненных жестких дисков, отсутствующих прав, занятых бд, отвалившихся длинных линий или со слабой машиной с малой памятью и малым свопом.
                                    Ответить
                                    • > Ну или программа вдруг кинет исключение
                                      Ты не понял мою мысль ;)

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

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

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

                                        -Wunused-result or __attribute__((warn_unused_result));
                                        +
                                        -Werror
                                        Ответить
                                        • > Wunused-result or __attribute__((warn_unused_result));
                                          Там не or, там and. Ты предлагаешь пометить все функции всех библиотек этим атрибутом? Удачи, она тебе понадобится ;)
                                          Ответить
                                          • А разве ключа не было, чтобы без атрибута варнинги кидал?
                                            Ответить
                                            • > А разве ключа не было, чтобы без атрибута варнинги кидал?
                                              Ну или я не умею искать, или его нет. Найди :)
                                              Ответить
                                              • summon deficeistra
                                                Ответить
                                                • mmmaximum damage!
                                                  Ответить
                                                  • тащемта борманд всё верно сказал
                                                    компилятору невозможно да и не нужно отслеживать за качеством использования return value
                                                    получились бы уёбищные checked exceptions, только хуже

                                                    учитывая насколько сишники упороты в своих char * my_const_string = "ololo!", они бы просто охуели от таких репрессий со стороны вшивого ворнинга
                                                    Ответить
                                                    • пофиг у кого там батхерт. неужели сложно добавить норм систему контроля. пофиг что ей будут пользоваться я, борманд и ещё 2 с половиной дефекейстра
                                                      Ответить
                                                      • я вот, например, не стал бы
                                                        наелся в свое время retcode говна в сишечке

                                                        гораздо лучше передавать в функцию boost::system::error_code & - одни профиты
                                                        и ссылочный аргумент влёгкую не заигноришь, и засунуть можно куда нить в глубокий коллбек, и не напрягает особо, и в исключение обернуть никогда не сложно
                                                        Ответить
                                                        • хз, а мне как раз проще по возвращаемому значению, чтобы
                                                          if not DoSomeShit(MyCoolObject) then Exit;

                                                          а более детальная информация об ошибке - это одно из полей этого MyCoolObject
                                                          Ответить
                                                          • > а более детальная информация об ошибке - это одно из полей этого MyCoolObject
                                                            Просто ты с тредами мало работал. Вот попадется задачка, в которой какой-то объект надо будет трогать из 100500 тредов, поймешь, почему не стоит пихать в него информацию об ошибке ;)

                                                            А для однопоточной проги - сойдет.
                                                            Ответить
                                                            • ну тогда без передачи &ErrorInfo не обойтись, да...
                                                              а булевый возврат успешности - для удобства

                                                              а ещё можно

                                                              return
                                                              DoSmth1() && DoSmth2() && DoSmth3()...
                                                              Ответить
                                                          • >а более детальная информация об ошибке - это одно из полей этого MyCoolObject
                                                            Одному мне запахло?
                                                            Ответить
                                      • То есть они безопасные (safe) по умолчанию.
                                        Ответить
                  • Хватит наезжать со своими минусами на Борманда, а то вдруг в окно шагнет с первого этажа.
                    Ответить
                    • > а то вдруг в окно шагнет
                      А, да я не обращаю внимания на минусы в тредах, где какой-то чудак "въебал всем по минусу".
                      Ответить
                    • показать все, что скрытоИ к чему это ты? Я не минусовал. Мы спорим НЕ РАДИ троллинга.

                      минуснул, чтобы не повадно было.
                      Ответить
                  • Сретор, скажи чесно: борманд сказал, что нехуй пользоваться winapi без надобности, и я с этим давно согласен. Почему же ты им пользуешься?
                    Ответить
                    • > Почему же ты им пользуешься?
                      Потому что у него безвыходное положение - delphi 7.
                      Ответить
                      • Че, вообще никак? Файл переместить без Winapi нельзя? Зачем им вообще тогда пользоваться?
                        Ответить
                        • Сейчас посмотрел - там вообще странный набор оберток. Есть RenameFile, есть DeleteFile, но нет CopyFile. То ли я слепой, то ли авторы мудаки.
                          Ответить
                          • показать все, что скрыто>>RenameFile
                            А разве это не обертка над MoveFile?
                            Ответить
                          • Гугл подсказывает, что copyfile есть, но оно возвращает bool вместо исключений.
                            Ответить
                            • показать все, что скрытоЭто не обертка, а прямой вызов заранее декларированной API.
                              Кстати, Борманд, может, они просто дописали функции, которых "в лоб" нет, чтобы как бы расширить набор файловых функций?
                              Ответить
                            • Да это ж виндовый копифайл. Или нет? Если пчары принимает - 146%, что виндовый
                              Ответить
                              • А в делфе функций, нормально бросающих исключения, нет? Или исключения без сборки мусора противопоказаны?
                                Ответить
                                • > А в делфе функций, нормально бросающих исключения, нет?
                                  Почему нет? Есть. Тот же StrToFloat кидает исключение.

                                  > Или исключения без сборки мусора противопоказаны?
                                  Да почему. Просто аккуратней надо быть, чем в языках с гц.
                                  Ответить
                                  • А почему тогда у делфоебов все так плохо?
                                    Ответить
                                    • показать все, что скрытоЭто питон говорит в тебе...
                                      Ответить
                                      • Да бля, не только питон, но и жава, дотнет, все что угодно, даже с++. Все более-менее современные языки кидают исключения. Ты сидишь на допотопной хуйне, понимаешь? Приготовься ловить ее глюки.
                                        Ответить
                                    • > А почему тогда у делфоебов все так плохо?
                                      Это риторический вопрос? ;)Потому, что д7 написано как бы не 10 лет назад... А в новых может быть и получше ситуация.
                                      Ответить
                                • Кидать исключения можно, но нахуя?
                                  Ответить
                                  • > Кидать исключения можно, но нахуя?

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

                                          Может ты пояснишь, чего они так тащутся от boost::call_traits? Совершенно же многословные унылые сопли.
                                          Ответить
                                          • Роман трудится в небольшом российском стартапчике
                                            а где работаешь ты, %юзернейм%?
                                            Ответить
                                            • Что-за шарага?
                                              Ответить
                                              • > Что-за шарага?

                                                я и не думал, что скилл гугления может быть меньше нуля. Поздравляю.
                                                Ответить
                                                • Это скилл лени выше нуля. И вас с наступающим.
                                                  Ответить
                                                  • И у меня скилл лени тоже выше нуля. Просто влом гуглить, где же работает roman-kashitsyn, влом попадать на страницу фирмы, сочащуюся саморекламой.
                                                    Ответить
                                              • Подсказка:

                                                "Отзывы
                                                Всем привет, на данный момент купил себе BMW X5... Пригнал мне из Германии Роман Кашицын, огромное спасибо ему!
                                                Михаил, 09.03.2013."
                                                Ответить
                                                • *Отзывы
                                                  Тут должно быть что-нибудь про кавказцев.*

                                                  На аве у него хороший кавказец.
                                                  Ответить
                                  • Их случайно не проигнорируешь.
                                    Ответить
            • Шагнул
              Ответить
              • главное чтоб не в окно
                Борманд нам ещё нужен.
                Ответить
                • > главное чтоб не в окно
                  Первый этаж, можно и в окно :)
                  Ответить
                  • Первый этаж? Да ты почти деанонимизирован теперь!
                    Ответить
                    • Где-то тут еще была моя таймзона, которая сокращает область поиска аж в 24 раза ;)
                      Ответить
                      • Ну не в 24, в области GMT+/-12 живет только планктон.
                        Ответить
                        • Мало ли, может я там на плавучей барже живу ;)
                          Ответить
                      • Надо будет мне её найти... Пока что по моим данным у Вас часовой пояс GC-01:08 (если считать, что GC+0 - часовой пояс всех сообщений; кстати, у них с постами разница на час)
                        Ответить
                    • показать все, что скрытоЯ сильно сомневаюсь, что у такого человека как Борманд, могут быть враги. Разве что души троллей,которые по его милости испустили дух от голода.
                      Ответить
      • bormand: признавайтесь - вы ведь онотоле, не?
        Ответить
    • показать все, что скрытоasd
      Ответить

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