Очень часто на форумах спрашивают как сделать 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.

Для того, чтобы сделать мост между привилегерованным и непривилегерованным кодом можно воспользоваться 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);

Несколько дней назад была опубликована новость о новом интерпретаторе JavaScript’a в WebKit —SquirellFish.

Только что сравнил скорость выполнения JavaScript’а в обоих браузерах.
Результаты поразили: работа с 3D в 2 раза быстрее, рекурсия — в 5 раз, математические операции — в 3 раза. В целом почти в два раза быстрее. Сравнивать с Firefox и Opera смысла не вижу — все и так понятно.

Safari vs WebKit (pdf)

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? Почему я выбираю его для повседневной работы?

Далее »

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).

Хороший способ сортировать списки словарей по какому-либо ключу.

from operator import itemgetter
sortedList = sorted(unsortedList, key=itemgetter('mycustomkey'))

…, которые я использую для работы в домашних условиях.

  1. Apple MacBook — прекрасный компьютер для дома.
  2. TextMate — это лучший (на мой взгляд) редактор чего бы то ни было под MacOS X.
  3. iTunes — стабильный и удобный плеер. Хранит и воспроизводит всю мою музыку, видео, подкасты и синхронизирует их с iPod’ом.
  4. Mail.app — это вообще гениальный продукт от Apple и верх юзабилити. Встроенный RSS-ридер, интеграция с iCal и адресной книгой, смарт-ящики, удобные правила сортировки.
  5. iCal/Address Book/iSync — позволяют мне планировать свою жизнь и помогают синхронизировать мои данные с гаджетами.

…, которые я использую для работы на работе.

  1. ubuntu — лучший выбор, если в вашей компании на серверах разработки используется *nix.
  2. Terminal — позволяет делать все. Начиная от чтения логов, заканчивая ведением todo-листов и чтением почты.
  3. vim — лучший редактор (imho). Любые типы файлов, автокомплит, дерево проектов, редактирование нескольких файлов (как табы, так и сплит). Самое главное достоинство — установлен почти на всех разработческих серверах. Можно запускать по ssh.
  4. Firefox2 — лучший браузер для windows/linux. Тут ничего говорить не надо.
  5. Firebug — самый полезный плагин к Firefox’у для веб-разработчика. DOM-инспектор, JavaScript-дебаггер, логгер сетевых действий, просмотр и редактирование стилей на ходу.