1. JavaScript / Говнокод #14207

    +148

    1. 1
    $('#navi').before('<audio autoplay src="http://driverjs.webservis.ru/income.wav"></audio>');

    Я, конечно, понимаю, что это нифига не форум программистов. Но все-таки, может найдется X-перт, который скажет мне, какого хера этот код работает, только если я предварительно зайду на адрес звука и нажму плей? Т.е. без кэшированного звука воспроизведения нет. Opera/Chrome/Firefox.

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

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

    • Попробуй использовать аттрибут: preload="auto". Ну или autobuffer в опере.
      Ответить
      • Блин, поддержка видео и музыки в html5 напоминает мне басню о лебеде, раке и щуке.

        https://developer.mozilla.org/en-US/docs/HTML/Supported_media_formats
        Там табличка есть, под названием Browser compatibility. И в ней нету ни одного (!) аудио/видео формата, который бы игрался через html5 всеми браузерами без установки дополнительной херни.

        С такими горе-стандартизаторами флеш не умрет никогда ;) Потому что замены ему тупо нет.
        Ответить
        • Ответить
        • И при этом как минимум Firefox даже Accept с допустимыми форматами не отправляет. Приходится обязательно перебирать на клиенте.
          Ответить
          • Firefox - новый IE? И с TLS они застыли на 1.0, когда уже 1.3 есть.
            Ответить
        • По поводу стандартов связаных с HTML5, я таки не поленился посмотреть, что же именно изменилось в ж.скрипте. (Уже сам по себе факт, что никто никогда таки не озадачисля тем, чтобы составить список изменений сам по себе настораживает.)
          Как оказалось, изменений то было:

          добавили
          Array.isArray(),
          Array.prototype.reduceRight(),
          Object.defineProperty(),
          Object.defineProperties(),
          Object.create(),
          Object.freeze(),
          Object.getOwnPropertyDescriptor(),
          Object.getOwnPropertyNames(),
          Object.getPrototypeOf(),
          Object.isExtensible(),
          Object.isFrozen(),
          Object.isSealed(),
          Object.keys(),
          Object.preventExtensions()

          Кроме этого, некоторые конструкции будут выдавать ошибки в "строгом" режиме (но большинство этого не заметит, т.как редко с ними сталкивалось.)

          И все, этим стандарт ограничивается. Это, блин, за 10 лет, комитет по стандартизации столько напридумывал. (Этот стандарт был принят в 2009, а последняя поправка к предыдущему была принята в 1999.) Просто колосальную работу проделали.
          Ответить
          • > И все, этим стандарт ограничивается.
            А может это и к лучшему? Ну не повторять же историю крестов, где это потом еще 5 лет пытаются реализовать в компиляторах, и до сих пор не все нововведения поддерживаются. HTML (даже 5) и JS и без этого как минное поле...
            Ответить
            • > ко ко ко
              Что тебе в истории крестов не нравится? Ты её просто не осилил. Плохая память на даты.
              Ответить
            • Ну в ж.скрипте есть много известных проблем, известных не только пользователям, но и авторам стандарта:
              - отсутствие даже самой минимальной модульности.
              - абсолютно невменяемая система типов.
              - отстуствие любых инструментов по сокращению бойлерплейта.
              - фактически отсутствующая стандартная библиотека (то, что есть, это совсем мизер по сравнению с любым другим языком).
              - идиотские элементы синтаксиса, которые в ж.скрипте абсолютно не нужны (типа специальных операторов для манипулирования битами в машинном слове, void оператор, который используется всегда не по назначению.

              Вместо этого получили полную херню. Никому не нужны все эти Object.something функции, т.как не решают они проблему, которую призваны решить (т.е. модульность). А Array.isArray - вообще насмешка над здравым смыслом: типа с одной стороны признали, что родная система типов - говно, но решили исправить ее только для одного исключительного типа.
              Ответить
              • > void оператор, который используется всегда не по назначению
                В каких случаях его следует/не следует использовать?
                Скажем,
                "javascript:void f()"
                if (!success) return void f();
                void f() || g();
                Ответить
                • И ничего из этого репертуара не нужно (кстати сказать в четвертой редакции Экмскрипта void таки выбросили).
                  Не нужно потому, что в языке есть уже лучшие средства для выражения того же.
                  javascript:void f() = javascript:f(),undefined
                  if (!success) return void f(); = if (!success) { f(); return; }
                  void f() || g(); = f(), g();

                  Кроме всег прочего, ни одну из этих конструкций никогда не нужно использовать. Всегда есть более вменяемый путь описать то же самое. Псевдопротокол javascript упразнен давным давно. return void f() - это атавизм из Си, вызваный к жизни уебищным синтаксисом обоих языков, он только создает исключение в семантике языка, там, где это нахер не нужно. Аналогично, нахер не нужно использовать конструкцию, которая семантически описывает зависимост следующего действия от предыдущего в ситуации, когда мы уверены, что такой зависимости нет.
                  Ответить
              • Да вы что?!! Как же без битовых операций-то жить-то?
                Ответить
                • Никто не говорит жить без битовых операций. Читайте внимательнее: речь об уникальном синтаксисе для их описания.
                  Т.е. нет абсолютно никакой необходимости для того, чтобы создавать исключение из правил, где синтаксически верным описанием вызова функции является "имя-функции ( список-аргументов )" в виде "аргумент имя-функции" или "аргумент имя-функции аргумент" и т.д.
                  Т.е. нахер не уперлось a ^ b, когда это же можно было описать как xor(a, b), более того, это позволило бы ж.скриптерам передавать функцию xor в другую функцию, например. Уменьшило бы количество правил необходимых для написания ж.скрипт парсера, ну или оставило бы значек ^ для других, более полезных вещей. Например, можно было бы позаимствовать семантику из Смолтока, где этот значек используется вместо new, ну или придумать что-нибудь более полезное.
                  Ответить
                  • istem, хоть и спорит, а VLIW прав.
                    Ответить
                    • wvxʌʍ
                      Ответить
                      • палим дром
                        Ответить
                      • \/\/\/X\/\/\/ - регулярка, находящая ///X///
                        Ответить
                        • Кстати, раз нужную тему упомянули: а есть редактор, нормально показывающий регекспы, т.е. убирающий все бекслеши и подсвечивающий эксейпленный текст другим оформлением?
                          Ответить
                          • > убирающий все бекслеши
                            Очень маловероятно. Разве что какой-нибудь внешний конструктор регулярок.

                            Просто в большинстве языков (кроме жс и перла?) регулярка неотличима от обычной строки. Поэтому на автомате подсветить ее невозможно.
                            Ответить
                            • >внешний конструктор регулярок.
                              Что-то такое, специализированный редактор регулярок. Есть такое?
                              Ответить
              • Уже можно юзать dart, google включила нативную поддержку в chrome. Ну и если верить этому
                http://www.youtube.com/watch?v=K4uKvU_aQXY дарт по быстрей будет.
                Ответить
                • Да это очень нерадикальные изменения. Я по поводу Дарта совсем никакого энтузиазма не испытываю. Чуваки немножко больше скопировали из Явы, какие-то проблемы как-то решили, какие-то не смогли. Но синтаксис стал еще хуже, и никаких инструментов по его управлению нет и в проекте. Особенно умиляют попытки выдать за новшества какие-то идеи 30-40-летней давности. При чем, судя по всему, для авторов языка эти идеи действительно вновинку (поэтому они вновь идут по граблям, по которым уже другие давно прошли).
                  Короче, чуваки привыкли писать на Яве, и ее им сильно не хватало, вот они и запилили "улучшенную" Яву, как смогли.
                  Ответить
                  • Я сколько знаю ява для веба это GWT. А Дарт это все таки попытка сделать js более приятным.
                    Ответить
                    • Нет, GWT это просто Ява. А Дарт написан аматорами любителями Явы. Я такого говна в жизни много перевидал. В одно время было очень модно в больших компаниях изобретать свои "улучшеные" версии, например, ПХП, или ХТМЛя. И везде это мотивировалось тем, что какой-то мудак не осилив оригинальные языки, решил их улучшить.
                      Например, тот же Самсунг разработали "улучшенный" ХТМЛ для встраиваемых систем (использовался до последнего времени на их телевизорах). К этому улучшенному ХТМЛю прилагался скриптовый язык, в котором было собрано все самое лучше из Луа, Сисярпа и горячечного воображения его создателей. Валла - самый большой израильский новостной интернет-концерн тоже, даже по сей день пользуются каким-то проприетарным говном, которое они называют Ди-скрипт (подобие ПХП). Еще в одной кноторе - Брейнпоп довелось познакомистыся с безымянным языком типа ПХП написаным каким-то уебаном 10 лет назад потому, что ему ПХП не понравился.

                      Из более современного и популярного говна: Гремлин язык запросов, или, вообще феноменальное убожество: Цифер - язык запросов написаный в Нео4дже какими-то фантастическими ебланами.

                      Дарт - мало чем в этом смысле отличается. Он написан людьми без минимального понимания задачь и механизмов. Но проблема усугубляется еще и тем, что прототип - тоже феноменальное говно, и на этом фоне все что угодно покажется чудом.
                      Ответить
                      • > без минимального понимания задачь и механизмов
                        Дарт писали люди которые писали двиг js для хрома это v8 я так думаю они знают и задачи и механизмы.
                        Ответить
                        • Так это не имеет отношения к языку. Язык, это на 90% лингвистика, семантика, прагматика, типография, соционика, и только в небольшй степени реализация.
                          Ответить
          • А, да, забыл, JSON тоже часть стандарта.
            Ответить
        • Это адоб подмазал нужных людей.
          Ответить
          • ХЗ. Микрософт тоже свой медиасервер продает, за примерно такие же деньги. Я так думаю, что ситуация по-сложнее будет. Но хуже всего то, что кто-то не поддерживает Ворбис видео (оно ж бесплатное / свободное / бери нехочу). Вот тот, кто его не поддерживает, тот явно играет на руку каким-нибудь буржуям, которые хотят бабла на этом срубить.
            Ответить
            • > от тот, кто его не поддерживает, тот явно играет на руку каким-нибудь буржуям, которые хотят бабла на этом срубить.
              Майкрософт играет на руку сам себе? Ну в общем то логично ;)

              Ну а вообще у теоры качество похуже, чем у аш264 на том же битрейте, если я ничего не путаю.
              Ответить
              • Ну да, Микрософт жеж заботится о своих пользователях как никто другой. Для них только все самое лучшее, без компромисов.
                Ответить
        • Неправда. Opus всех (mp3,aac,ogg) порвёт. Я уже об энтом гойворил.
          Вот с видео действительно мутно - Theora (древнее гогно на основе VP3. самое свободное), VP8 (псевдосвободный от гугля. ждем-с патентных войн), H264 (самое лучшее по уровню сжатия и поддержке устройствами. 10 лет. highly patented)
          А на подходе Daala, VP9 и Hevc...
          Ответить
          • Всё эволюция старых.
            Theora=>Daala (Xiph, Mozilla), VP8=>VP9 (Google убого плагиатит H264 и HEVC) и H264=>Hevc (сборище злых корпораций).
            Причём сейчас самый патентованный из них и самый технологичный. MPEG всегда были лидерами. On2 - плагиатчики. А Xiph не хватает людей и бабла.
            Ответить
    • http://www.w3.org/TR/2010/WD-html-markup-20101019/audio.html
      http://pastebin.com/GjCqrJYr
      Ответить
    • preload="auto" не помогает.
      Несколько форматов через <source> тоже.
      Ответить
    • С разными доменами может проблема быть. Ради интереса попробуй подставить аудио со своего домена (должны совпадать и протокол, и порт). Если заработает - копай в сторону cors.
      Альзо, какой еблан назвал домен webservis.ru?
      Ответить
    • Потому что надо делать так:
      var audio = document.createElement('audio');
      audio.autoplay = true;
      audio.preload = 'auto';
      audio.src = 'http://driverjs.webservis.ru/income.wav';
      document.body.appendChild(audio);
      Ответить
    • ko ro ko ko ko
      Ответить
    • Кстати, проблема оказалась в хостинге и Mime-тайпах.
      Ответить
    • HarryademiPM
      Ответить

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