Aggressive House, M.D.

Продолжаю музыкальные эксперименты!

Очередной “продукт” был навеян во-первых просмотром доктора Хауса, а во-вторых необходимостью сменить рингтон на мобильнике :)

Это родившийся за 15 минут коротенький ремикс на песню Teardrop от Massive Attack (это именно то, что играет во вступительных титрах к Хаусу). Сделано, как обычно, наспех в Reason.


Скачать mp3 - Агрессивный доктор Хаус

Captcha - как искажать картинку?

Капчу видели все. В интернете тут и там предлагают ввести “буквы, изображенные на картинке”. В данной статье под капчей будут пониматься именно искаженные буковки. Хотя на самом деле за аббревиатурой скрывается куда более жестокий смысл: полностью автоматизированный публичный тест Тьюринга для различия компьютеров и людей (ПАПТТРКЛ, короче говоря).

Чтобы робот не смог распознать слово на картинке, применяют разные приемы. Один очень эффективный прием - это склейка букв (в этой статье рассматриваться не будет). Другой прием - это геометрическое искажение изображения. Про него-то я и хотел поговорить.
Читать далее »

Про сэмплирование, квантование, фильтры и интерполяцию

Я решил написать заметку со столь чудовищным названием после того, как на работе разгорелась нешуточная дискуссия про сглаживание изображений. Хотелось бы поведать миру, что я для себя усвоил в течение нескольких лет работы со звуком, изображениями и даже написания в 2005 работы по вейвлетному сжатию изображений.
Читать далее »

Все про песню “Ужасно интересно” - ноты, слова, минусовка, MIDI

Не смог найти в сети ноты песни из мультика “38 попугаев”. Пришлось снять самому. Вот что получилось:


Скачать: Минусовку (mp3), MIDI, слова

Теперь можно писать jQuery-код на C#

И это не шутка и не бред.

Сегодня я закончил достаточно трудоемкую задачу - доделал jQuery-враппер в Lexa.Jsm.CoreLibrary. О том, что такое Lexa.Jsm, можно узнать из этой статьи.

Заодно накидал несложный пример и поместил его в Misc/jQueryDemo. В процессе его билдежки из C#-ного исходника App.cs получается вот такой милый скрипт:

app.js

JSM.ensureNamespace('jQueryDemo');

var _ = jQueryDemo.App = {
};

_.DomReady = function() {
  $(document.body).css({ margin: 0, padding: 0 });
  var div = $('<div></div>').text('Hey, it\'s fun to write jQuery code in C# :)').css({ background: 'orange', font: '16pt Tahoma', padding: '8px 16px' }).fadeIn(400).appendTo(document.body);
  var button = $('<input>');
  button.attr('type', 'button').val('Click here to hide orange bar').one('click', function(e) { return div.slideUp('slow', function() {
    button.attr('disabled', true);
    window.alert('No more orange bars!');
  }) });
  document.body.appendChild(button.get(0));
}

_.Run = function() {
  $(jQueryDemo.App.DomReady);
}

_ = JSM.registerType;
delete _;

По крайней мере, таким он получается сегодня. Кто знает, чего я натворю в Jsm-компиляторе в будущем :)

Кстати, обертка для jQuery снабжена документацией, а значит jQuery-код писать теперь гораздо легче. Взгляните:

Редактирование исходника в Visual Studio 2008

Тут и intellisense, и подсказка по параметрам, и проверка синтаксиса и типов as you type, и Go to definition с Find all references. Писать приходится немножко больше, но происходит это теперь быстрее.

Еще есть несколько особенностей.

Во-первых, имеются некоторые названия, которых, строго говоря, в jQuery нету. Напрмер, jQuery.AjaxOptions или jQuery.AnimationOptions. Они облегчают написание кода и в то же время не создают дополнительного выхлопа, то есть компилируются в обычные JavaScript-объекты.

Во-вторых, вместо $(...) или $.each следует писать соответственно new jQuery(...) и jQuery.each, однако компилируется это в свои короткие аналоги.

В-третьих, в jQuery часто используется this внутри callback-функций. Совершенно понятно, что в C# никаких фокусов c this не бывает. Чтобы не потерять функционала, я ввел три дополнительных метода:

  • DomElement jQuery.thisElement()
  • T jQuery.thisObj<T>()
  • jQuery jQuery.thisWrapper()

Первые два компилируются в просто this, третий - в $(this). Правда, следует иметь в виду, что в анонимных функциях настоящий this при использовании этих методов употреблять нельзя - будет создано дополнительное замыкание, и this испортится.

Теперь думаю, может показать это Резигу?