Обновить
108
Кирилл Коншин@dfuse

Principal Software Developer

40
Подписчики
Отправить сообщение
Буквально позавчера при посещении публичной страницы Win7 запросил админские права для файла update_flash_player.exe, который, конечно же, оказался вирусней. Что-то там не чисто…
Ужас…

Иногда поражаюсь, что в хроме есть передовые фичи и нет некоторых абсолютно очевидных и банальных. По поводу тех же закладок я уже кажется говорил когда-то: в диспетчере Ctrl+A и Del и привет всем закладкам без подтверждения, а также без отмены.
Кто последний — тот и папа
По-моему почти все пункты применимы к программе City Guide, это феерический кошмар в плане интерфейса. Особенно «поля» из пробок до самого горизонта, от которых все начинает дико тормозить, а также прозрачные кнопки, которых вообще не видно в процессе езды.

Маршрут оранжевым на желтом фоне, вроде бы, исправили в бете под Android — можно самому выбирать.

К чести Ситигида можно заметить, что пробочный сервис у них самый адекватный для Питера. Тот же Navitel врет совершенно безбожно.
Было бы интересно ввести подобный алгоритм подсчета средневзвешенной кармы и сравнить ее с той, что есть сейчас, а потом на основе показателей сделать вывод, насколько посчитанная соотносится с выставленной.
Я как-то разочаровался во всей этой купонной теме, когда среди предложений 100% занимает всякая муть типа фотосессий, танцклассов, косметических процедур и еда в мажорных ресторанах. Раньше там хотя бы иногда проскакивали всякие движняки типа парашютов, багги по пересеченке, гидроциклов, зорбов и прочего, сейчас как ни зайду — ничего интересного нет. А на самом групон.ру еще RSS отключился пару месяцев назад.
На всякий случай уточню, что каждому модулю принадлежит ровно один observable-объект, который скрыт и с которым напрямую общается только модуль, все остальное взаимодействие идет с модулем через методы, которые он предоставляет.
Мы похоже друг друга не поняли. Какие именно модули и какие именно проверки? Все проверки идут прямо в модуле, в функциях, открытых наружу. Контроль данных в слушателях нарушает логику — слушателю должны быть переданы заведомо корректные данные. Или мы говорим о разных вещах?

В идеале, по описанной схеме, все триггеры будут выглядеть как obj.doSomething(); — либо вообще без параметров, либо с каким-то минимальным набором, который будет в этом самом методе проверен и отдан слушателям. Таким образом компонент сам внутри себя знает, что передать и как нормализовать данные. И ситуация obj.trigger('event', 'rubbish'); вообще не появится. Бинд при этом может быть какой угодно — obj.onSomething(function(var1, var2) { … }); как раз таки потому, что сам триггер спрятан.
Частично решить проблему генерации событий недоверенным кодом можно привязав observable объект к нашему объекту как «private» поле, выдав наружу интерфейс вида:
var observable = new Observable();
this.onReady = function(callback){
    observable.bind('ready', callback);
};


В нужном месте внутри объекта вызывается
observable.trigger('ready', {…});

Таким образом препятствуется возможность триггерить некоторые события извне.

Можно разрешить вызовы некоторых событий извне, опять же через интерфейс, который может дополнительно заведовать, что надо передать обязательно и что можно получить у вызывающей стороны
this.doSomething = function(var1, var2) {
    observable.trigger('something', {var1: var1, var2: var2, urgentDefault: 'blabla'});
};


Конечно, это плодит некоторое количество писанины, которую можно и нужно оптимизировать.
На Acer Liquid тормоза дичайшие, ничего сделать невозможно в буквальном смысле.
Yii + Zend

Yii — когда надо быстро и без заморочек
Zend — когда надо гибко, плюс довольно часто использую его по-частям, а не всем фреймворком целиком, например, Zend_Mail
В скрипте крона есть как минимум модель и контроллер. Как иначе Вы собираетесь запрашивать действия модели? Плюс можно дампить некие вещи в консоль, вот и view появляется, а многие хостинги к тому же поддерживают отправку этого вывода на почту.
Если вы не нашли здесь какую-то музыку, но она у вас есть — просто загрузите ее!

Вы пиратьте, а мы тихонько теперь на этом наваримся ;)
Битбоксить одно удовольствие goo.gl/5yXTd ;)
Текущая реализация из статьи уже на HTML+CSS+JS? Ограничение одно — фон определенного цвета вокруг waveform'ы. Плеер — HTML5 с деградацией во Flash, если тег Audio не поддерживается. Или я что-то не так понял?
Амплитудный спектр Вам тут слабо поможет — правильно Вам человек пишет, для анализа качества больше подойдет матан и теория сигналов, с преобразованием Фурье, которое так хотели выше, с частотными спектрами, и подавлением определенных частот, а также всякие хитрые фазовые методы. Для сравнения лучше использовать не waveform, а соотношение сигнал-помеха, а также динамический диапазон сигнала, т.к. это все расчитывается и на выходе есть вполне значимые цифры, которые можно сравнить, в отличие от визуального созерцания картинок.

P.S. А ведь года два назад я еще что-то помнил из институтского курса… Инженер, блин, акустик… :(
Это не ошибка, имхо, а необходимость. Конечно правильнее будет встроить в HTML код тег <audio> и уже вокруг него навернуть «красоту», но это вызовет сложности с IE, для которого по-прежнему надо вставлять флешку.

Я проверил, по-идее, ничто не должно мешать взамен неотрендеренного тега поставить свою обертку, т.к. IE8 по преженму смог дотянуться до атрибутов, т.е. все необходимые данные у него будут.
Даже в текущей реализации используются пропуски фреймов (в коде константа DETAIL), дабы не перегружать процессор. От этого падает детализация, но это не так страшно, все равно спектр чисто «для справки».
Текущая реализация позволяет растягивать плеер под размер контейнера, если задать ширину в процентах, а не в пикселях (см. обновленный код примера). При этом тянуться будет все, включая waveform.

Drag-drop я отключил.

Информация

В рейтинге
Не участвует
Откуда
San Francisco, California, США
Дата рождения
Зарегистрирован
Активность