Архив категории «Без рубрики»

  • XSL Tracer

    Я, наконец-то, более-менее довёл до ума свой новый проект, которым хочу поделиться с народом.

    Проект называется XSL Tracer. Его задача заключается в том, чтобы ответить на простой вопрос: откуда после XSL-трансформации пришёл тот или иной элемент? Как это работает можно увидеть на демо-странице. Там отображается результат XSL-преобразования — обычный HTML-документ. Кликнув по любому элементу можно получить подробную информацию о нём:

    • XSL: шаблон, где выводится элемент.
    • Context: контекстный XML (на который сработал матч, в случае xsl:apply-templates). Сам элемент выводится урезанным (только 10 внутренних тэгов), чтобы в случае, если это будет корневой элемент, браузер не умер в муках (да и толку от полной структуры никакого).
    • Source: место в шаблоне, где непосредственно генерируется выбранный элемент. Очень удобно в случае, если делаете сopy-of результатирующей структуры (в примере это html-код, заданный внтутри переменной).
    • Call stack: стэк вызовов apply-template/call-template/apply-imports, через который дошли до вызова текущего шаблона
    • Inner calls: список внутренних вызовов шаблонов, которые по каким-то причинам нельзя отобразить (по крайней мере пока) в документе. Например, вызов шаблонов, выдающих атрибуты для выбранного элемента, или его текстовое содержимое. Список отображается под Call stack, и только в том случае, если такие вызовы есть.

    Демка нормально работает в Safari/Firefox/Chrome, Opera жутко тормозит на больших документах, а в IE даже не открывал.

    Везде, где это возможно, выводится xpath к выбранному элементу, который можно скопировать одним кликом, имена файлов и номер строки, чтобы можно было легко найти нужный шаблон в редакторе.

    Как это работает

    Проект состоит из двух частей: бэкэнд и фронтэнд.

    На бэкэнде используется Saxon 6.5 (пока эта версия, так как в 9.2 лично у меня вылезло куча проблем с EXSLT). У него есть встроенный механизм трассировки, который по умолчанию генерирует результат в виде XML (такой файл на реальных проектах вырастает до нескольких мегабайт). Я написал свой трассировочный класс, который выводит данные в более компактном и лёгком JSON-формате, а также дополнительные данные вроде списка используемых в трансформации XSL и XML (подключённых через document()) документов. А также он делает дополнительные штуки вроде резолвинга result-tree фрагментов при вызове xsl:copy-of.

    Этот трассировщик генерирует JSON-документ и результатирующий документ (то есть результат предобразования) и собирает их в одном HTML-файле, который можно открывать в браузере.

    Дальше за работу берётся фронтэнд, который связывает трассировочные данные с результатом трансформа и обеспечивает всю работу интерфейса.

    Как запускать

    1. Должна быть установлена Java (версия особо не важна).
    2. Скачиваем Saxon 6.5
    3. Скачиваем трэйсер
    4. Генерируем трассировку вот такой командой в консоли:

    java -classpath /path/to/tracer.jar:/path/to/saxon.jar ru.imobilco.XSLTracer -to /path/to/trace-result.html /path/to/input.xml /path/to/template.xsl

    В случае успешной работы трэйсера сгенерируется файл trace-result.html, который можно сразу открывать в браузере (CSS и JS берутся с моего сервера). Если возникла ошибка во время трансформа, то файл будет сгенерирован, но вместо документа увидите нормальное сообщение об ошибке. В случае ошибки работы Java, увидите сообщение в консоли.

    Надо помнить, что Saxon очень чувствителен ко всяким всяким отхождениям от спецификации, поэтому то, что работало в Xalan/libxsl/где-то ещё может не сработать в Saxon. Но исправления, как правило, довольно мелкие и незначительные.

    Онлайн-версия

    Мой коллега Лёха Баранов написал сервлет, который позволяет запускать через веб, передавая ссылки на XML и XSL файлы. Для него был заведён специальный проект xmltools.ru. Работает просто: указываете ссылки на файлы и, если нужно, данные для http-авторизации. Далее сам трансформ находит все зависимые файлы, скачивает их и делает трансформ.

    Но с онлайн-версией не так всё просто. В частности, когда результат отдаётся фронтэнду, он тоже начинает скачивать внешние файлы через аякс. И, как вы уже, наверно, догадались, включается ограничение Same-Origin Policy, которое не позволяет загружать данные с другого домена. Вариантов решения два: либо вы свой сервер настраиваете на cross-domain ajax, либо используете xmltools.ru как сервис, запрашивая трансформ через какой-нибудь php/python/ruby скрипт, отдавая результат трассировки со своего домена.

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

    Метки: , , ,
  • Ищу помощника

    Мне в компанию очень нужен помощник или помощница.

    UPD: ваканся закрыта, но скоро мне ещё понадобятся сотрудники. Если интересно — пишите.

    Исходные данные

    Есть проект Аймобилко, где я являюсь техдиректором и лицом, всячески заинтересованным в повышении количества продаж и качества предоставляемых услуг. Сайт написан на Java (этим занимается отдельный человек), использует связку XML/XSL для генерации результата. На сайте много JS-скриптов (исходники весят около 1,5 МБ, без учёта подпроектов).

    Моя основная цель — сделать удобный проект для продажи цифрового контента. Именно поэтому там нет мудацкой регистрации с капчей или обязательным подтверждением по электронной почте, а любую покупку можно совершить буквально в два клика без регистрации. Это как бы намекает, что мы не перекладываем программерские проблемы (вроде большого количества «левых» регистраций) на пользователя, а сами их успешно решаем, но на это требуется больше времени и сил.

    В работе используются инструменты по следующим ключевым словам: Eclipse, Ant, XSL, XML, HTML, CSS, JavaScript, Python, SVN, Redmine, Mylyn.

    Что требуется

    Нужен человек на полный рабочий день, который будет верстать новые и дорабатывать старые макеты, делать из них XSL-шаблоны и прикручивать к сайту. Знание XSL очень желательно, но не обязательно; если надо — научу. Это минимум.

    В дальнейшем нужно будет стать властелином длинных скриптов, обслуживающих ключевые компоненты проекта: авторизация, регистрация, покупка, корзина. Все они учитывают десятки вариантов поведения пользователя и реакции на них сервера, причём делают это с приятными анимациями.

    Что делать

    Если вам интересна эта вакансия, напишите мне на serge.che@gmail.com письмо с кратким рассказом о себе, а также 3—4 ссылки на свои самые интересные работы. Хочу сразу предупредить, что:

    • меня тянет блевать от словосочетаний вроде «валидная семантичная вёрстка», «пора переходить на html5» и прочих задротских умопомешательств;
    • за слова «это сделать невозможно» буду сразу бить по башке;
    • я до сих пор поддерживаю IE6 на необходимом минимуме: главное, чтобы всё работало и выглядело прилично, но можно без тенюшек и скруглённых уголков;
    • нужен человек, который будет участвовать в жизни проекта, а не делать работу за зарплату (которая по результатам собеседования).

    Офис находится в районе м. Павелецкая.

    Метки:
  • Конференция 404

    Попросили поучаствовать в онлайн конференции 404. Если есть, что спросить — самое время.

  • Приемная

    В последнее время в моем блоге в различных постах все чаще и чаще начинают появляться вопросы «не по теме». Так как ответы на подобные вопросы могут заинтересовать многих, я открыл специальный раздел «Приемная» (смотрите меню справа) — туда можно задавать вопросы по интересующей теме и получать ответы от меня и других читателей, можно подписаться на RSS по отдельной тематике. Сразу хочу отметить, что совсем уж простые вопросы и вопросы вроде «я начинающий кодер, посоветуйте литературу» будут игнорироваться и удаляться: ответы дадут Яндекс и Гугл и специализированные по таким делам ресурсы вроде ru_webdev или ХабраХабр.

    Очень хочется получать действительно интересные вопросы, чтобы давать на них не менее интересные ответы.

  • Кат или не кат?

    Так и не нашел работающего плагина для создания опросов на WordPress, поэтому просто хочу спросить у читателей: стоит ли отправлять статьи под кат? С одной стороны, лично мне удобно открыть страницу, найти интересную информацию и тут же прочитать ее, без лишних кликов. С другой стороны, посты у меня получаются слишком уж большие и главная выглядит как здоровенная простыня, на которой границы постов не заметны.

    RSS, естественно, это не касается.

    UPD: Чтобы ответить на вопрос «нужен кат или нет?» надо, в первую очередь, понять, в чем проблема не-ката. Сейчас основная сложность в том, что статьи большие и относительно сложно добраться до начала очередного поста, просто прокручивая страницу. С объемом страницы проблем нет: сейчас в gzip-е она весит 17 КБ, загружается постепенно, так как все на блоках.

    Как мне подсказывает самизнаетекто, выходом может стать оглавление страницы. Пожалуй, так и сделаю: вверху страницы справа добавлю список постов с количеством каментов и переход вперед/назад по страницам.

  • Zen Coding v0.3

    Большое обновление Zen Coding.

    Общее

    • Парсер аббревиатур теперь учитывает тэги: <div>p>span разворачивается в <div><p><span></span></p>.
    • Внесены в настройки все сокращения, описанные в Wiki (спасибо Николаю за детальный багрепорт).
    • Добавлен полноценный плагин для TextMate.
    • Добавлен полноценный плагин для Coda.

    Aptana

    • Добавлены команды «Перейти к следующей/предыдущей точке редактирования» (Next/Previous Edit Point: Alt+[ и Alt+] соответственно). Пока что точками редактирования является позиция между "" и ><. Таким образом очень удобно перемещаться между пустыми атрибутами и тэгами.
    • Добавлена команда «Обрамить тэгом» (Wrap In Tag: Alt+W). Обрамляется либо выделение, если оно есть, либо вся строка. Не забудьте включить в аптане опцию Modify pair tag (Aptana → Editors → HTML → Typing).
    • Добавлена команда «Форматировать выделение с помощью Showdown» (Format Selection With Showdown: Alt+F). Преобразует обычный текст в HTML-разметку. Сам скрипт Showdown подвергся небольшим изменениям: абзацы разделяются не двумя переносами строк, а одним, менее жесткие правила для обрамления ссылкой электронных адресов, добавлены отступы для элементов списка. То есть формат входящего текста больше похож на то, что копируется и вставляется из ворда.
    • Добавлена поддержка редактора XSL из проекта Eclipse WTP (с XML редактором почему-то не хочет работать). В settings.js для него появились отдельные правила.
    • Добавлена возможность разворачивать аббревиатуры по клавише Tab. Для этого в файле Expand Abbreviation.js в самом первом комментарии значение ключа Key нужно заменить на Tab и переменной use_tab поставить значение true. Нужно помнить, что в этом случае все нажания клавиши Tab будут обрабатываться скриптом, поэтому некоторые вещи (типа перемещение между плэйсхолдерами) перестанут работать.

    TextMate

    Бандл для TextMate теперь больше похож на полноценный Zen Coding плагин. Работает в HTML, CSS, XML и XSL режимах. Пока в работе добавление собственных сниппетов через интерфейс Bundle Editor. Тоже есть возможность раскрывать аббревиатуры по клавише Tab (сейчас по ⌘+E), однако в этом случае перестанут работать сниипеты из других бандлов.

    Coda

    Наконец-то разработчики этого редактора мне ответили. В общем, заявленная «полная поддержка бандлов из TextMate» даже близко не похожа на правду. Мой коллега Дима «Хобот» Яковлев (за что ему огромное спасибо) написал прослойку между Coda и PyZenCoding на Objective-C. Аббревиатуры разворачиваются по ⌃+E, пока нельзя менять это сочетание. Большая просьба ко всем пользователям этого редактора хорошенько протестировать плагин и написать мне о всех выявленных багах.

    Вроде ничего не забыл :) Скачать плагины можно с сайта проекта на Google Code. Следите за обновлениями.

    UPD: Zen Coding теперь входит в состав сахара TEA для редактора Espresso (разворачивается по ⌃+. [точка]).

  • Aptana Zen Coding Demo

    По мотивам Zen Coding Concept.


    Видео-демонстрация