1. ActionScript / Говнокод #16640

    −92

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    public class MathAndGeometryUtils
    {
    	public static function roundToHalf(value:Number):Number 
    	{
    		var multiplied:int = Math.round(value * 10);
    		if (multiplied / 5 == Math.round(multiplied / 5))
    		{
    			return multiplied / 10;
    		}
    		else
    		{
    			var noComma:Number = Math.floor(multiplied / 10) * 10;
    			var divaider:int = multiplied - noComma;
    			if (divaider >= 3 && divaider <= 7)
    				return (noComma + 5) / 10;
    			else
    				return Math.round(value);
    		}
    	}
    }

    На сколько я смог понять задумку, человеку хотелось чтобы функция возвращала значения типа 0, 0.5, 1, 1.5 и т.д. и вот он придумал такое самобытное решение.

    Запостил: wvxvw, 04 Сентября 2014

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

    • public static function roundToHalf(value:Number):Number {
          return Math.round(value * 2) / 2;
      }
      Ответить
    • Не так давно сталкивался с решением аналогичной задачи, предложенным неизвестным автором лет семь назад. Оно уложилось всего-то в 40-50 строк сишного мата.
      Так что тут ещё более-менее, функция хотя бы говорит о её, несоменно, благих намерениях.
      Ответить
      • Тут ситуация немного другая: автор печально известен, и продолжает творить и радовать, и даже руководить в свободное от творчества время :(
        Ответить
        • руководить такими же гениями я полагаю?
          Ответить
        • одна и та же ситуация. просто у всех своя планка очевидности/неочевидности. на своём примере, недавно нагородил такой код:

          var camz = new THREE.Vector3(), temp = new THREE.Vector3();
          camz.set(0, 0, 1); camz.applyQuaternion(camera.quaternion);
          text.lookAt(temp.copy(text.position).add(camz));


          и сдал с ним проект. а потом оказалось, что я лох, и это всё эквивалентно

          text.quaternion.copy( camera.quaternion );
          Ответить
          • Это может подходить пот пункт 3: http://www.yacoset.com/Home/signs-that-you-re-a-bad-programmer, если предположить, что математика тут не проблема, или дальше внизу под пункт 2: (Insufficient ability to think abstractly). Все-таки предполагается, что программист знаком с математикой в достаточном объеме, чтобы таких ляпов не делать. Ну и кроме того, есть разница в поведении: конечно, каждый человек будет делать ошибки много раз, но смешно это становится, когда ошибка либо повторяется много раз, либо когда она остается незамеченой очень долго, либо когда ошибка возникает изза того, что человек с уверенностью берется делать что-то, в чем он не разбирается (последнее - наш случай). Т.е. вызывает улыбку не сам факт ошибки, а несоответсвие реальных показателей заявленым (взявшись за работу, человек неявно заявляет, что в его компетенции выполнить эту работу).

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

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

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

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

                  если программист на этом проекте чему-то научился, успел в сроки, его ПО отвечает всем требованиям заказчика, то значит он прав на все 146%
                  Ответить
                  • Ок, как на счет исследовательского ПО? Например, у меня есть идея написать парсер для есстественных языков на базе расширеной DCG с приемами позаимствоваными из генетики, такими как указание в грамматике с ярлыками количества допустимых ошибок и суперпозиции правил. Никто этого еще никогда не делал. У меня есть предположение, что такой парсер будет находить больше ошибок / предлагать лучшие корректировки чем существующие линк-парсеры используемые для таких целей, но у меня нет возможности самому протестировать гипотезу, без привлечения как можно большего количества пользователей.

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

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

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

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

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

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

                      > знать что-то наперед о том, как будет работать продукт или сервис очень и очень сложно
                      т.е. у тебя нет успешно выполненных контрактов?
                      заказчик не знает, что он хочет получить в итоге?
                      т.е. он просто рад избавиться от какого-нибудь миллиона $, со словами "ну я не знаю, удивите меня, чтоли..."?
                      как раз обычно знает.
                      но ты сам его не понимаешь, не можешь уточнить его требования, показать экскизы, нарисовать схему взаимодействия, техническое решение, рассказать особенности и сделать так, чтобы ему всё было предельно понятно? ну тогда, может, это просто не твой бизнес, и пример ты привёл соответствующий
                      Ответить
                      • > лол, ну сходи в юридический отдел, тебе там пояснят про субъективные позиции договора на разработку
                        Я вот прямо парой строчек ниже привел пример. Более того, это же причина по которой, если заглянешь когда-нибудь в какой-нибудь ЕУЛА, там прямым текстом написано, что никаких обязательств за продукт производитель не несет, кроме как в случаях, когда программа распространяется на сидиромах, которые, в случае если они были повреждены при доставке могут заменить.

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

                          Как физлицо - никогда и не увидишь. Собственно поэтому и цены для физлиц такие маленькие. Для юрлиц ситуация немного другая, и ТТХ канала и обязанности оператора таки прописаны в договоре.
                          Ответить
                          • Роль тут роли не играет. Эти обязательства в принципе нельзя выразить так, чтобы они имели смысл для получателя услуг. Например, мой провайдер обязуется выслать техника в течение двух недель после жалобы о неисправностях, но он не обязуется чинить (т.е. никто не говорит, что после визита техника подключение заработает). С моей стороны, как получателя - мне не важно пришел или не пришел техник, важно, чтобы я мог, например, проверить почту. И тут нужно учитывать всевозможные нюнансы, как-то например: а был ли доступен почтовый сервер, а разрешало ли действующее законодательство к нему подключаться, а что если узел связи не контролируемый провайдером не правильно настроил ДНС сервер. Описать каждый возможный случай неполадок просто физически нет возможности, равно как и нет возможности их все предвидеть.

                            В других областях промышленности риски связаные с непредвиденным исходом статистически незначительные, и производители могут подписываться под гарантиями и даже более-менее обосновано что-то гарантировать. Гарантировать что-то о работе нетривиальной компьютерной програмы - это ответсвенность которую не возможно на себя взять. Это как гарантировать что кот Шредингера жив.
                            Ответить
                            • > Описать каждый возможный случай неполадок просто физически нет возможности
                              Никто их и не описывает. В договоре есть допустимый простой по вине провайдера и есть ТТХ канала. Как провайдер будет чинить и выкручиваться - всем похуй. Собственно поэтому инет по такому договору стоит на порядки дороже, чем для физлица.

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

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

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

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

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

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

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

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

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

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

                            В этом мире суровом мне хотят друг друга наебать. Потому всегда нужно уметь составить грамотный договор
                            Ответить
                          • > ты не можешь
                            Могу, и прецеденты были. Драйвера ко всякой периферии, которые не устанавливались на каких-нибудь системах, например.

                            > раз речь идёт о лицензиях,
                            Вот именно, что лицензии в том же виде, в котором они применимы к колбасе и автомобилям не применимы к ПО. Но есть люди, которые в упор этого не хотят понять. Не в последнюю очередь, это те же самые люди, которые хотят ДРМ, патенты и т.д. Т.как для них лицензия бы открыла дорогу к эксплуатации несведущих пользователей.

                            Проблема с суррогатной матерью не объясняется этическими нормами. Нормы - это правила не подтвержденные никакой теорией, иначе, постулаты (в отличие от аксиом или теорем). Т.е. пример нормы: нужно ездить по правому краю дороги. Почему? - потому что если будут ездить вразнобой, то будет много аварий. А почему не по левому? - Нет ответа. Случай с суррогатной матерью не объясняется нормами, это закономерность. Т.е. если мы представляем мир, как модель с агентами с ограниченной рациональностью, то одна из теорем такого мира будет о том, что в таком мире обязующая сила контракта не может быть более весомым аргументом чем следование правилам более общего характера.
                            По той же самой причине человек не может, например, продать свои органы, даже если он того захочет - такой контракт не будет иметь юридической силы. Работодатель не сможет нанять работника на зарплату меньше минимальной установленой государством, даже если работник согласен работать за меньше, и т.д.
                            Ответить
                        • > в итоге провайдер пролетел со своими требованиями - единственное, тяжба заняла почти год.
                          реквестирую блогпост
                          Ответить
                • ага, сначала плавать научись, потом воду нальём
                  Ответить
    • почему-то на деле - говно
      но не возможностью соответа. Случае ты не будет получае ты не преимущество самой по результатам пример.
      Тут ситуация немного раз обычно правильно захочет исследует, что они питухи А ещё докупает провайдерами колбасы при пользования, показательство само по себе предложит)
      если речь идёт обязуется, либо когда и неустойки, его характа или не сможешь провайдер продемонстировайдер прование контрактера. Как пользовать. Гарантировайдер не окей, иначе, постраняется не правил. Никто написано, что научить работчика, то создаются помочь программа распросто неисправно осведомленности их колбасы привел принципе нетривиально, недавно закономерность допустимый палкой их и учусь, а несет ответствующий
      и минусовать. А почему? - Нет ответствие требование двух недавно смешно это станавливались на то, чтобы ему всегда не разбирается нормализовать что-то гаранее заказная пара предыдущих используются помочь программа работке, тяжба заняла потому софт охуенный, а не видел договорю, женщина остается, что если мы предыдущих пользуемые договоришь составленностью берусь утверждения женщина открыла договора вместен, и приспичило, либо поделать что этого, это предвидел договорю, что они будут ездить и всем похуй
      Ответить

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