На клиенте! Получить XML! Получить XSL! Сделать XHTML! Марш!
X-Task: «On your Client! Get XML! Get XSL! Do XHTML! Go!»
Вступление
Статья рассматривает преобразование XML в XHTML посредством XSLT на клиенте средствами JavaScript. К примеру, у вас есть какие-либо данные в виде XML, а вам требуется по какому-либо действию клиента (по клику на ссылке), оформить их в [X]HTML и динамически вставить в страницу. Это не так сложно, но по пути, как оказалось, встречается несколько подводных камней — в основном, относительно кросс-браузерности этого подхода и малой освещённости процесса в сети. Генерация XHTML-страниц средствами браузера (прямой запрос на XML файл, содержащий информацию о стиле) — это другая тема, она намного проще, и здесь затронута не будет.
Задача будет рассмотрена на банальном примере личного сайта. Дано: Файл с контактными данными (XML), некая главная страница (XHTML) и пять браузеров: Firefox 3, Opera 9.5, IE7, Safari 3, Google Chrome. На главной странице есть ссылка, при нажатии которой контактные данные преобразуются в несортированный список (UL) и отображаются в специально выделенной области прямо на этой странице. Это реальный рабочий пример, который я сейчас использую для создания своего сайта (ещё не выложенного).
Wikified
Я тут взял, да викифицировал основные статьи из этого блога. Там, на этом Wikidot есть подсветка синтаксиса, так что код стало читать удобнее. И подготавливать статьи в wiki тоже несколько удобнее, чем в html. И ещё там всё настраивается, только вот места пока поменьше чем здесь, но мне много и не надо :).
Так вот, я не буду ни в коем случае забрасывать этот блог, но статьи будут появляться там раньше, а потом уже переоформляться (из вики зачёт регэкспов да и просто копи-пэйста это сделать не так сложно) сюда. Я много раз переезжал из разных мест, но тут я всё же задержался и не думаю, что стоит бросать это место — просто будет два параллельных режима и всё.
Так что, если вы видите под заголовком справа кнопку
то это значит, что кликнув по ней вы увидите эту же статью, только викифицированную.
Вот так.
Trac + Subversion @ Ubuntu: Revisited
Задача
Установить на только что инсталлированный Ubuntu последнюю версию Trac, создать репозитории для нескольких проектов и настроить окружение соответственно. Структура проектов должна быть полностью корректной, установка максимально быстрой при минимальном количестве пакетов. Авторизация в репозитории и окружения Trac может быть общей, но позволяющей индивидуальную настройку для каждого проекта. Также, установка должна быть максимально независима от версий.
[g]Vim в режиме Python: Рекомпиляция в Windows
Введение
Редактор Vim наиболее известен среди разработчиков в системах Unix — конкурент emacs, что-то вроде консольного IDE — этот редактор при должной сноровке и настройке (мне кажется, сноровке несколько меньшей и настройке более очевидной чем в emacs, но у последнего также есть мощная мультифункциональность — выбор за программистом) способен убыстрить и упростить многие процессы на этапах разработки не в ущерб таким удобствам как, например, авто-дополнение и навигация по проекту. Однако, если вы собираетесь использовать его для разработки на Python со всеми подобными удобствами — потребуются некоторые усилия: а именно, перекомпиляция…
Новые продукты
Закончил перевод основной части учебника по Python 2.5 (пока без краткого обзора по библиотекам). Перевод пока довольно-таки черновой, в некоторых местах вычитка была только на уровне стилистики и грамотности. Сам источник, к сожалению, тоже часто меняет стиль повествования. Однако, в ближайшее время (в течение трёх-четырёх дней) проведу полную вычитку и попробую продолжить дальше (учебник по Python 3.0 не сильно отличается, поэтому в него нужно будет внести только различия).
Также, благо есть повод, в разделе «Продукты» доступен «Краткий справочник по японскому языку» (также выложен на торренте), который ненароком вышел в 350 страниц толщиной и содержит больше информации, чем иногда содержат учебники.
Java + JSON. Пути к дружбе.
Введение
Спешу поделиться результатами небольшого исследования, оказавшегося необходимым для текущего проекта. Рассматривается возможность связки Java и JSON, её преимущества и недостатки. Я расскажу о практической части, о теории больше поведают нижеприведённые ссылки (англ.).
- Mastering JSON — самая приятная статья по JSON, описывающая все основные принципы и дополнительные возможности
- Использование JSON для передачи данных AJAX’ом в статье от IBM
- Описание связи JSON и JavaScript на официальном сайте
- Краткое описание скрещивания JSON и Java на официальном сайте
- Java-классы на официальном сайте
- Способы сериализации Java-объектов в статье от IBM
- И ещё о сериализации JSON-объектов в строку
- JSONTools для Java
Если кратко — JSON (JavaScript Object Notation) не является ничем более сложным, чем описано в его названии. Если вы можете описать сложно-структурированный объект на JavaScript — то о клиентской стороне JSON вы знаете практически всё. Серверная часть JSON занимается тем, что принимает каким-либо способом объект, записанный в нотации JavaScript и разворачивает данные таким образом (наверное можно сказать, десериализует), чтобы они стали доступны (или хотя бы понятны :) ) остальной части кода.
Редеплойинг приложения на Tomcat средствами Ant
Процесс разработки нашего проекта обладает одним минусом, свойственным многим J2EE-проектам: при изменении кода проекта и пересборке его сервер не сразу подхватывает обновку, а требует полного останова себя, очистки кэша, запуска себя по-новой и передеплойинга пакета.
Для того чтобы не делать это каждый раз ручками есть несколько простых способов: например, те же скрипты (batch’и для windows и shell-скрипты для linux). Но мне показалось более простым сделать так, чтобы делал это сам собирающий ant-скрипт (сценарий?): одно нажатие клавиши и все просходит автоматически…
ООП и JavaScript
В предыдущей статье я представил на ваше рассмотрение небольшой кусок кода, который позволяет использовать три столпа ООП в JavaScript. Все это достигается довольно хитро и я, честно признаюсь, пока не слишком хорошо знаю, как это работает (остальное – конечно – знаю :) ) – в комментах меня вывели на чистую воду :). Тем не менее я позволил себе чуточку изменить функцию extend, дабы классы имели понятие о том, что такое статические константы (на самом деле константы конечно получились условные, но это думаю можно оправдать условностью их в самом JavaScript). Здесь я рассмотрю этот вопрос поподробнее и, видимо, буду расширять статью по мере его более глубокого понимания.
16 действительно полезных решений для JavaScript
Представляю вам набор функций, которые у меня лежат в отдельном файле utils.js – это функции, которые я использую чаще всего. Они стараются быть кроссбраузерными и проверены на IE6/7, FF2 и Safari 2 и на боевой, сложной системе, в XHTML документах. Должны, по идее, работать, и на других, но не очень старых версиях браузеров – проверку браузера я использовал только в исключительных случаях. Некоторая часть из них, конечно же, просто нарыта на просторах интернета (где – обычно указано) и заимствована ввиду открытости, а большая часть – сконструирована из многих ресурсов и своих идей (и советов коллег), дабы работать на ура – поскольку часто в разных скриптах не учитываются разные тонкости, которые, тем не менее – при ближайшем рассмотрении – оказываются общностями :) , ну и быть довольно читабельными.
Фукнции разделены тематически:
- ООП -обеспечение (или, вернее сказать – эмуляция) возможности использовать принципы ООП в JavaScript
- Объектная модель JS – использование и расширение встроенных объектов JS
- Определение браузера – чтобы использовать в тех редких случаях, когда это все-таки неизбежно необходимо :)
- Координаты / Позициионирование – вычисление координат и позиционирование объектов – ввиду того, что это часто довольно хитрая штука
- DOM – работа с объектной моделью документа
- AJAX – вспомогательные функции для AJAX – так как это средство часто применимо :)
- Логгинг - иногда он нужен чтобы везде :)
Первыйэхъ
Таки значит гхм. (прокашлялся). Кажется я уже своими инкарнациями повсюду наследил и не нашел себе пока статичного места, извините :). Тут скорее всего тоже не оно, а оно будет на локальном компе, когда я вспомню сказать при оплате телефона что неплохо бы было оформить мне статический ай-пи и не поленюсь поставить базу для текстпаттерна и починить свой дамп, который тут на днях убил другой мой локальный мускул :). Тем не менее здесь оставлю наибольшее количество своих околокомпутерных статей, если они кому нужны конечно (я тут почитал старые, охх :) ), которые потом занесу к себе, если опять же все организую. Пока залил основные старые с жж и соответственно блога, задними числами, чтобы потом можно было экспортировать и слить в тот же, например, textpattern.













