четверг, 21 апреля 2011 г.

is your html_safe?

Is it only me here who thinks that adding rails_xss was rather сruel changing to rails 2.3.6? Moving to new version becomes into a little guided tour to discomfort. Maybe html_safe and raw helpers can cope with problem, but not always. Xml builder (and this means that rss and atom builders too) for some reason escapes html without checking on its safeness. Searching google doesn't provide me with the answer what to do, so I found out two possible solutions. The first is to rewrite all xml builder files into erb templates, but this can take time. Another solution is to create initializer with simple code:
class String
def html_safe?
true
end
end

Anyway it is only temporal solution if you want to move to rails 3.

воскресенье, 10 апреля 2011 г.

Ruby view on a private ownership

Ruby has its own point of view on how private methods should work. The 'private' keyword (actually it is an method in ruby) is only recommendation for other programmers and there are plenty of methods to access it. The first way is to call method through 'send' method or using 'instance_eval()'. The other situation is when private methods are accessed during calling them from other instance of the same class (it is shown here https://gist.github.com/646672).

пятница, 8 апреля 2011 г.

javascript dates features

If you are working with dates within javascript just take for notice two features. First is that numbers of months start with zero in the world of javasvript. And the second one and my favourite is that standard converter 'parseInt' sometimes behaves little wierd with strings which begins with zero. Take for example parseInt('08') and it will return zero. Obiviously it is so because such strings are considered to be in octal numeral system, but anyway be ware of such things if you store date in format like 09/04/11.
By the way function eval('08') still returns eight, but I don't think that it is good maner to use it.

среда, 5 мая 2010 г.

Matlab.cpp

Цель работы или аналитический обзор.
Сегодня задался вопросом «как запустить из Matlab функцию, реализованную в C++». Оказывается такая возможность у Matlab есть начиная с 7ой версии. Механизм называется Mex. Идея в том, что компилируя с-код, Matlab получает бинарный файл с разрешением mex. Для его работы необходимо, чтобы на машине был установлен c++ компилятор, в списке таких компиляторов фигурируют Visual C++ разных поколений, Lcc (встроен в Matlab) и Intel C++. А вот mingw для Windows почему-то нет. Файл .mex интерпретируется матлабом как функция.
Следует отметить, что Matlab так же позволяет работать со своими модулями из С++, запускать его внутренние функции, выполнять m-скрипты и вообще что угодно. Для этого достаточно создать объект класса Engine с помощью функции engOpen и внимательно читать документацию. Основные пользовательские функции engPutVariable, engEvalString, mxCreateDoubleMatrix. Интересно, что при создании переменной с++ программой, эта переменная отображается и в графической среде Matlab.
Хейдер «mex.h». Основной тип данных mxArray. Методы манипуляции его данными mxGet(Set)Data и mxGetPr. Второй возвращает указатель на массив данных, при изменении которого меняются значения массива матлаба. При работе с первым следует использовать указатели на данные, инициализированные с помощью mxCalloc.
Ход работы.
Мой интерес заключался в добавлении к Matlab функции, которая смогла бы считывать разделители (маркеры и регионы) из wav файлов. Как эти метки хранятся в wav файле – отдельная тема. Я уже писал, как это делается.
Сначала нужно было настроить mex для работы с нужным компилятором. Для этого я воспользовался командой mex –setup. Ответив на несколько ненавязчивых вопросов, получим предупреждение о том, что mex файл не будет работать на компьютере, на котором нет VS. В принципе, логичнее в качестве компилятора для mex использовать Lcc, но он слишком урезан и я не стал сражаться с ошибками, которые он выдавал.
Изначально у меня была программа для считывания разделителей на с++ с использованием Qt. Я реализовал файл read_wav_markers.cpp, в котором переопределил функцию mexFunction, которая запускается при вызове функции из матлаб. Затем написал батник build_mex_file.bat для облегчения компиляции. Результат выложил на github.

четверг, 21 января 2010 г.

Battlefield report. firefox riots against svg. Inkscape supply svg with ammunitions.

"Диплом Интернет-Университета Информационных Технологий: Масштабируемая векторная графика (Scalable Vector Graphics)"



Получил-таки. )
Вот недавно расстроило восприятие svg у Firefox. Оно какое-то нездоровое. Firefox не любит слово из трех букв и слово это видимо svg. Проблемы начали возникать при попытке отобразить документ с обычными эффектами Blend (не воспринимается значение «BackgroundImage» для атрибута in). Во всех других цивилизованных браузерах (Opera, Chrome, IE) отображается однозначно и корректно. Из-за этого не работает добрая половина эффектов, так же глюки возникают при вставке растровой картинки с помощью feImage.
Нет, я говорю не про швейцарский нож, это все про InkscapeХорошие новости в том, что я открыл существование дотягивающего на подозрения в идеальности svg редактора. Многофункциональный, легкий, блестящий. Для меня этот пакет стал особенным и любимым по следующим причинам:
- работа с текстом документа, простое добавление интерактивности
- простая работа с размером документа (viewBox)
- грамотно сделанные быстрые клавиши
- громадный функционал расположен так, что искать ничего не приходиться
- гипотетическая возможность написания сценариев, написанных на Perl, Python и Ruby
- далее следует список в парсек длиною
Кстати, Бендера из предыдущего я нарисовал в inkscape. (На руки для ускорения рисования наложены патерны и поэтому они похожи на куски тельняшки)
Программа еще находится в разработке в версии 0.46, но уже просто ошеломляет возможностями. Коммерческие пакеты вроде Altova или Scetsa и рядом не стоят. Inkscape в полной мере можно выставлять против CorelDraw и Illustrator. Единственный козырь, который есть у последних, это трассировка и поддержка кучи коммерческих форматов autodesk и adobe.

среда, 20 января 2010 г.

"высокие технологии любят svg"


"Высокие технологии любят svg." - так сказал Брэд Нунберг (Brad Neuberg) на презентации svg web library (на рисунке слева - моя интерпретация этой фразы). Этот javascript фреймворк появился относительно недавно при поддержке Google. Перед проектом стоит грандиозная цель - стать javascript библиотекой для динамической графики, которая будет работать на 95% браузеров. Основой для этой библиотеки стало svg. В принципе, это еще один шаг Google в битве против flash.
Чаще всего, для демонстрации возможности библиотеки приводится пример галереи картинок, где размеры изображений и их позицию можно менять, перетаскивая их за края. Для того чтобы увидеть фреймворк в действии можно зайти на страничку звездного атласа.
Интересной особенностью работы является возможность вставлять svg код прямо в страницу сайта или вынесение во внешний объект, описанный в теге <object>.
Примечательно то, что ребята из google дают каждому релизу библиотеки название монстра из настольной D&D. Последний релиз носит звание желатинового куба (по описанию - хладнокровный убийца, незнающий жалости).
Смущает факт, что для отрисовки в браузерах, которые не поддерживают svg все же будет используется flash. Для реализации этой возможности организовано клиент-серверное взаимодействие и как следствие фрейворк работает только с платформами на которых есть php, jsp или asp.
Для тех, кто привык к работе с jQuery и Prototype будет непереносимым разочарованием то, что все функции этих библиотек бессильны при работе svg элементами. Происходит это из-за того, что svg элементы не наследуются от стандартных элементов документа, для их создания используется специальный объект SVGDocument (тоже самое касается и остальных библиотек для работы с svg). Единственно возможные функции это громоздкие getElementById и т.д.
Я продолжаю доделывать редактор нот в Raphael.

вторник, 17 ноября 2009 г.

save..

в голову пришла мысль, а что если просто для забавы ради написать плагин ну хоть для ff, который при входе на сайт мчс добавлял бы рядом с функцией "save as" функцию "save my as..".