XUL. Overlay прикидывается панелью.
Октябрь 18, 2008
Очень часто на форумах спрашивают как сделать overlay в виде панели браузера, но таковой не являющейся. (Firebug, к примеру).
<?xml version="1.0"?>
<overlay
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:html="http://www.w3.org/1999/xhtml"
id="myNewOverlay">
<vbox id="appcontent">
<vbox id="myNewContent" insertbefore="content">
<hbox>
<html:div>my panel</html:div>
</hbox>
</vbox>
</vbox>
</overlay>
Для того, чтобы vbox#myNewContent отобразился снизу надо поменять insertbefore на insertafter.
XUL. Мост между привилегерованным и непривилегерованным кодом
Октябрь 17, 2008
Для того, чтобы сделать мост между привилегерованным и непривилегерованным кодом можно воспользоваться XPCNativeWrapper‘ом.
К примеру вот так:
var bridgeProvider = {
context: window,
init: function() {
var self = this;
var appcontent = document.getElementById("appcontent");
var loadHandler = function(aEvent) {
var doc = aEvent.originalTarget.wrappedJSObject;
var docWrap = new XPCNativeWrapper(aEvent.originalTarget).wrappedJSObject;
if (doc instanceof HTMLDocument) {
// doc — документ на который мы вешаемся. Можно проверить location.host.
docWrap['myPlugin'] = self;
}
}
if (appcontent) {
// Ждем когда загрузится документ и прокидываем наш интерфейс.
appcontent.addEventListener(”load”, loadHandler, true);
}
}
};
window.addEventListener(”load”, function() {
// Инициализируем бридж.
bridgeProvider.init();
}, false);
Safari vs WebKit Nightly build
Июнь 6, 2008
Несколько дней назад была опубликована новость о новом интерпретаторе JavaScript’a в WebKit —SquirellFish.
Только что сравнил скорость выполнения JavaScript’а в обоих браузерах.
Результаты поразили: работа с 3D в 2 раза быстрее, рекурсия — в 5 раз, математические операции — в 3 раза. В целом почти в два раза быстрее. Сравнивать с Firefox и Opera смысла не вижу — все и так понятно.
PS. Судя по бранчу WWDC-2008-branch в репозитарии WebKit’a и коммитам туда от *@apple.com — на WWDC покажут новую версию Safari.
PPS. SunSpider 0.9
for-each и if в XSLT
Июнь 4, 2008
Каждому XSLT-разработчику в начале его карьеры говорили, что for-each и if — это «дорого». В плане производительности. И начинающий девелопер начинал думать перед тем как написать одну из этих конструкций.
OpenSource проект
Май 27, 2008
Вся идея проекта крутится вокруг того, чтобы предоставить людям возможность обмениваться данными о своем местоположении, узнавать кто из вашего окружения находится рядом с вами и находить новых случайных знакомых.
Изюминка в том, что все это ориентировано не на он-лайн общение, как многие сервисы предоставляющие схожую функциональность, а на офф-лайн.
Месяц назад я начал писать это на Python/Django.
Моих знаний хватило на то, чтобы написать основную часть проекта. Но дальше дело не пошло — не было времени, пропал энтузиазм…
Сегодня в голову пришла хорошая мысль: «А почему бы не предложить разработку этого приложения комьюнити?».
Со своей стороны могу предложить площадку, знания html/css/javascript/xslt и немного python/django.
Также у меня есть сервер, где я могу разместить SVN, lighttpd, python/django, mysql/pgsql, trac.
В данный момент уже написан прототип приложения. Надо привести код в порядок, переехать на django.newforms, прикрутить Google Maps API, поправить дизайн, написать нотификаторы. Вообщем навести порядок.
Обсуждать предлагаю здесь. Или в почте/джаббере.
Что нового в XSLT/XPath 2.0
Май 25, 2008
Что нового в XSLT/XPath 2.0? Почему я выбираю его для повседневной работы?
xsl:next-match
Май 24, 2008
Пока ехал домой — читал спецификацию XSL2. Наткнулся на интересный элемент xsl:next-match.
A template rule that is being used to override another template rule can use the xsl:apply-imports or xsl:next-match instruction to invoke the overridden template rule. The xsl:apply-imports instruction only considers template rules in imported stylesheet modules; the xsl:next-match instruction considers all other template rules of lower import precedence and/or priority. Both instructions will invoke the built-in template rule for the node if no other template rule is found.
Что это нам дает? Все просто:
<xsl:template match="node[position() != 1]” priority=”2″>
<xsl:text>,</xsl:text>
<xsl:next-match/>
</xsl:template>
<xsl:template match=”node”>
<xsl:value-of select=”@myattr”/>
</xsl:template>
Данный прием позволяет избавиться от дублирования (только шаблон со стандартным приоритетом содержит логику представления данных), повысить читаемость кода и немного увеличивает производительность[1].
[1] — время компиляции шаблона с использованием next-match уменьшилось на 40% (с 486ms до 355ms). Скорость выполнения осталась на том же уровне (220ms).
Сортировка массива словарей (py2.4+)
Май 24, 2008
Хороший способ сортировать списки словарей по какому-либо ключу.
from operator import itemgetter
sortedList = sorted(unsortedList, key=itemgetter('mycustomkey'))
5 инструментов…
Май 23, 2008
…, которые я использую для работы в домашних условиях.
- Apple MacBook — прекрасный компьютер для дома.
- TextMate — это лучший (на мой взгляд) редактор чего бы то ни было под MacOS X.
- iTunes — стабильный и удобный плеер. Хранит и воспроизводит всю мою музыку, видео, подкасты и синхронизирует их с iPod’ом.
- Mail.app — это вообще гениальный продукт от Apple и верх юзабилити. Встроенный RSS-ридер, интеграция с iCal и адресной книгой, смарт-ящики, удобные правила сортировки.
- iCal/Address Book/iSync — позволяют мне планировать свою жизнь и помогают синхронизировать мои данные с гаджетами.
5 инструментов…
Май 21, 2008
…, которые я использую для работы на работе.
- ubuntu — лучший выбор, если в вашей компании на серверах разработки используется *nix.
- Terminal — позволяет делать все. Начиная от чтения логов, заканчивая ведением todo-листов и чтением почты.
- vim — лучший редактор (imho). Любые типы файлов, автокомплит, дерево проектов, редактирование нескольких файлов (как табы, так и сплит). Самое главное достоинство — установлен почти на всех разработческих серверах. Можно запускать по ssh.
- Firefox2 — лучший браузер для windows/linux. Тут ничего говорить не надо.
- Firebug — самый полезный плагин к Firefox’у для веб-разработчика. DOM-инспектор, JavaScript-дебаггер, логгер сетевых действий, просмотр и редактирование стилей на ходу.