<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Hacking &amp; Security</title>
		<link>http://hackandsecure.do.am/</link>
		<description>Блог</description>
		<lastBuildDate>Tue, 14 Dec 2010 09:00:57 GMT</lastBuildDate>
		<generator>uCoz Web-Service</generator>
		<atom:link href="https://hackandsecure.do.am/blog/rss" rel="self" type="application/rss+xml" />
		
		<item>
			<title>Шарик, отвечающий на вопросы</title>
			<description>&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px; &quot;&gt;Не знаю в какой блог засунуть. Видимо, «я пиарюсь» подходит больше остальных.&lt;br&gt;&lt;br&gt;Сегодня я решал один&amp;nbsp;&lt;s&gt;важный&lt;/s&gt;&amp;nbsp;вопрос и переклинило меня, что непр...</description>
			<content:encoded>&lt;span style=&quot;font-family: Verdana, sans-serif; font-size: 13px; line-height: 20px; &quot;&gt;Не знаю в какой блог засунуть. Видимо, «я пиарюсь» подходит больше остальных.&lt;br&gt;&lt;br&gt;Сегодня я решал один&amp;nbsp;&lt;s&gt;важный&lt;/s&gt;&amp;nbsp;вопрос и переклинило меня, что непременно нужно воспользоваться шариком, отвечающим на вопросы (как в фильме «трасса 60»).&lt;br&gt;&lt;a href=&quot;http://www.ecm7.ru/8ball/&quot; style=&quot;color: rgb(109, 163, 189); &quot;&gt;&lt;img src=&quot;http://habreffect.ru/files/4a5/1719dc16c/8ball.jpg&quot; alt=&quot;Шарик, отвечающий на вопросы&quot; align=&quot;center&quot; style=&quot;border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; display: block; margin-top: 0px !important; margin-right: auto !important; margin-bottom: 0px !important; margin-left: auto !important; max-width: 100%; vertical-align: bottom; &quot;&gt;&lt;/a&gt;&lt;br&gt;Гугл нормальных online-шариков не нашел: либо предлагают купить материальный шарик, либо online, но этот шарик страшно выглядит и/или с хитрой логикой (например, нужно ввести текст вопроса, который проходит валидацию).&lt;br&gt;&lt;br&gt;Собственно, примерно за час написал свой шарик. Нужно просто кликнуть по нему и получишь ответ.&lt;br&gt;&lt;br&gt;Возможно, кому-то такой шарик покажется чуть приятнее остальных.&lt;br&gt;&lt;br&gt;&lt;i&gt;http://www.ecm7.ru/8ball/&lt;/i&gt;&lt;br&gt;&lt;br&gt;UPD:&lt;br&gt;Шарик переехал на собственный домен:&amp;nbsp;&lt;a href=&quot;http://www.8-ball.ru/&quot; style=&quot;color: rgb(109, 163, 189); &quot;&gt;www.8-ball.ru&lt;/a&gt;.&lt;br&gt;Старая ссылка тоже работает и перенаправляет на новое место.&lt;/span&gt;</content:encoded>
			<link>https://hackandsecure.do.am/blog/sharik_otvechajushhij_na_voprosy/2010-12-14-19</link>
			<category>Лог</category>
			<dc:creator>sepos</dc:creator>
			<guid>https://hackandsecure.do.am/blog/sharik_otvechajushhij_na_voprosy/2010-12-14-19</guid>
			<pubDate>Tue, 14 Dec 2010 09:00:57 GMT</pubDate>
		</item>
		<item>
			<title>Mail.ru изнутри: фотоэкскурсия по офису интернет-холдинга</title>
			<description>&lt;span style=&quot;font-family: &apos;Helvetica neue&apos;, Helvetica, Arial, Verdana, sans-serif; font-size: 12px; border-collapse: collapse; line-height: 18px; &quot;&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Нельзя не заметить, как энергично и с нарастающим...</description>
			<content:encoded>&lt;span style=&quot;font-family: &apos;Helvetica neue&apos;, Helvetica, Arial, Verdana, sans-serif; font-size: 12px; border-collapse: collapse; line-height: 18px; &quot;&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Нельзя не заметить, как энергично и с нарастающим ускорением развивается последнее время интернет-холдинг Mail.ru. Разрастаясь все больше, он увеличивает посещаемость своих площадок, их доходность, поглощает успешные компании и команды, нанимает новых, заметных на рынке специалистов. Такая агрессивная стратегия развития вызывает уважение у одних и опасение у других. Куда несется эта, ведомая командой энергичных молодых менеджеров, компания?&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;В эти дни на горизонте компании — очередной волнительный и этапный момент в жизни. Уже этой осенью Mail.ru Group планирует разместить до 25 % своих акций на Лондонской фондовой бирже.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Я более или менее близко знаком с несколькими сотрудниками «Мэйла», но раньше мы встречались исключительно на нейтральных территориях. Стало любопытно посмотреть на то, как выглядит компания изнутри, так сказать, «в разрезе». Списавшись с пресс-службой, я договорился об экскурсии по офису.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;В 11 утра этого понедельника мы прибыли на Ленинградский проспект к бизнес-центру «Авион», где располагается московский офис Mail.ru&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8601.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Компания занимает изрядную часть здания — четвертый, пятый, шестой этажи, а также часть минус первого и третьего. Сразу при входе в бизнес-центр стоит толстый намек на то, кто здесь главный арендатор:&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8609.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Мы поднялись на пятый этаж, где отрекомендовались на ресепшн:&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8611.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Вскоре к нам пришла руководитель пресс-службы компании Валерия Коммисарова:&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8618.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/76216_1703963195940_1143780751_1963800_2834904_n.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;И мы прошли в одну из комнат отдыха, где принялись обсуждать план нашей экскурсии:&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8630.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Комнаты отдыха, подобные той, в которой мы оказались, есть на каждом этаже. Помимо автоматов с напитками здесь также имеются платежный терминал, массажное кресло, гитарный усилитель с гитарой (по вечерам, говорят, тут играют)...&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8638.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/74447_1703963915958_1143780751_1963805_30477_n.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;...и пара телевизионных панелей. По словам местных обитателей, порой тут оказывается одновременно до нескольких десятков человек — любителей посмотреть важный футбольный или хоккейный матч в компании коллег:&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8646.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Здесь же проголодавшиеся сотрудники могут перехватить что-нибудь съестное. Комплексные обеды «Мэйл» не практикует, но чем перекусить найдется всегда: бесплатный чай, кофе, молоко, йогурты, бутерброды, салаты, булочки есть почти всегда.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Кстати, в той комнате, что мы были, кроме прочего, есть мини-библиотека:&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8653.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Как объяснила Валерия, сотрудники Mail.ru могут заказать любую профессиональную литературу, и она будет куплена за счет компании.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Закончив обсуждение, мы двинулись на осмотр офиса.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;***&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Узнаваемой особенностью всех помещений компании являются вот такие «перфорированные» стенки опен-спейсов:&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8686.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/36146_1703966756029_1143780751_1963827_1310246_n.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;из которых порой вырастают длинные коридоры:&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8755.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Еще одна особенность — фотопринты ладоней сотрудников, которые развешаны почти везде:&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8663.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;К слову, у кадровиков, ответственных за процедуру «снятия отпечатков», есть намерение собрать отпечатки всех когда-либо работавших здесь специалистов.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;***&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Был план зайти в кабинет генерального директора Mail.ru Дмитрия Гришина. Но хозяин оказался в отъезде, а связаться с ним, чтобы получить разрешение на фотографирование кабинета, не удалось. Пришлось довольствоваться фотографией натюрморта: «ресепшн перед кабинетом Гришина с задумчивой девушкой и яблоками»:&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8677.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;После этого мы направились гулять по этажам и офисам. Сами офисы не были чем-то уникальными. Это более или менее обычные «опен-спейсы». Какие-то небольшие — на 5−15 человек:&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8684.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8712.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Какие-то — на пару-тройку сотен сотрудников:&lt;br&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8738.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;br&gt;Кстати, всего в офисе на Ленинградском постоянно работает больше тысячи человек. Самое многочисленное подразделение — бывшая компания «Аструм Онлайн», ныне ставшая частью «Мэйла». Именно у них, как мне показалось, самые большие рабочие пространства...&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_87311.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;...и самая изобретательная фантазия:&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8747.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8751.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Пройдя офисы хорошо известных в онлайне «Работа@mail.ru», «Мой мир@mail.ru», «Игры@mail.ru» и других подразделений, мы дошли до игровой комнаты. Там были пуфики, бильярд, настольный футбол:&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8715.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;и теннисный стол:&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8716.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Неподалеку находилась душевая. Удобно для тех, что приезжает в офис на велосипеде.&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;***&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Завершая экскурсию, мы заглянули в серверную, которая обеспечивает работу всего офиса. В полутьме мигали сотни огоньков и было весьма прохладно:&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8765.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8767.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/148342_1703970756129_1143780751_1963859_6166913_n.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/150088_1703971396145_1143780751_1963865_5335120_n.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/76370_1703971116138_1143780751_1963862_262264_n.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Возвращаясь за вещами, которые оставили в кабинете пресс-службы, мы заглянули в вотчину «Видео@mail.ru». Там, как и в других помещениях, кипела работа:&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;center&gt;&lt;img src=&quot;http://ss.lg.ua/sites/default/files/IMG_8771.jpg&quot; style=&quot;border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; &quot;&gt;&lt;/center&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;***&lt;/p&gt;&lt;p style=&quot;margin-top: 0.4em; margin-bottom: 0.8em; &quot;&gt;Общее впечатление, которое сложилось после сорокаминутной прогулки по офису Mail.ru, — особой уникальностью он, быть может, не отличается. Рискну предположить, что руководство компании слишком прагматично для того, чтобы организовывать детские сады для домашних животных, строить свои рестораны экзотической кухни или занимать ценные помещения под комнаты релакса, как это модно делать у отдельных хай-тек компаний Силиконовой долины. Но атмосфера в целом и дух витающий в воздухе, без преувеличения, очень позитивные и по-хорошему рабочие.&lt;/p&gt;&lt;/span&gt;</content:encoded>
			<link>https://hackandsecure.do.am/blog/mail_ru_iznutri_fotoehkskursija_po_ofisu_internet_kholdinga/2010-11-20-18</link>
			<category>Лог</category>
			<dc:creator>sepos</dc:creator>
			<guid>https://hackandsecure.do.am/blog/mail_ru_iznutri_fotoehkskursija_po_ofisu_internet_kholdinga/2010-11-20-18</guid>
			<pubDate>Sat, 20 Nov 2010 20:28:53 GMT</pubDate>
		</item>
		<item>
			<title>Атака MBR-червя или все новое — хорошо забытое старое</title>
			<description>В последнее время в Интернете получил массовое распространение ранее
неизвестный червь — Win32/Zimuse, нацеленный на повреждение главной
загрузочной записи MBR (&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D0%B7%D...</description>
			<content:encoded>В последнее время в Интернете получил массовое распространение ранее
неизвестный червь — Win32/Zimuse, нацеленный на повреждение главной
загрузочной записи MBR (&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C&quot;&gt;Master Boot Record&lt;/a&gt;) на жестком диске. &lt;br&gt;
Примечательно то, что данная угроза изначально была в шутку создана для
заражения одного небольшого сообщества словацких байкеров. Возможно,
это были происки конкурирующего с ними мотоклуба. Однако сегодня червь
уже вышел из-под контроля его авторов и активно распространяется по
всему миру. При этом 90% всех инфицированных пользователей сначала
находились на территории Словакии. Но теперь по количеству заражений
лидируют также США, Таиланд и Испания, с небольшим отставанием Италия,
Чехия и другие европейские страны.&lt;a name=&quot;habracut&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
Win32/Zimuse повреждает главную загрузочную запись MBR на всех
обнаруженных им жестких дисках. Это делает недоступными для
пользователя все данные, находящиеся на жестком диске. &lt;br&gt;
&lt;br&gt;
&lt;img src=&quot;http://img-fotki.yandex.ru/get/3810/koala59.0/0_27dec_b5726cb3_XL.jpg&quot; alt=&quot;image&quot;&gt;&lt;br&gt;
&lt;br&gt;
&lt;img src=&quot;http://img-fotki.yandex.ru/get/3814/koala59.0/0_27deb_10ff1cde_XL.jpg&quot; alt=&quot;image&quot;&gt;&lt;br&gt;
&lt;br&gt;
Червь распространяется двумя способами: в виде приложения на вполне
легальных веб-ресурсах, которое имитирует поведение
самораспаковывающегося zip-архива или в виде программы IQ-теста, а
также на сменных USB-носителях. Именно второй способ повлиял на быстрый
рост его распространения.&lt;br&gt;
&lt;br&gt;
&lt;img src=&quot;http://img-fotki.yandex.ru/get/3807/koala59.0/0_27df0_99cf1de0_XL.jpg&quot; alt=&quot;image&quot;&gt;&lt;br&gt;
&lt;br&gt;
После запуска программ IQ-тест пользователи могут наблюдать текстовое
послание на чешском языке, что еще раз подтверждает происходение этого
червя из Восточной Европы.&lt;br&gt;
&lt;br&gt;
&lt;img src=&quot;http://img-fotki.yandex.ru/get/3911/koala59.0/0_27de9_c1f700d4_XL.jpg&quot; alt=&quot;image&quot;&gt;&lt;br&gt;
&lt;br&gt;
На сегодняшний день червь известен в двух вариантах — &lt;a href=&quot;http://translate.googleusercontent.com/translate_c?hl=ru&amp;amp;ie=UTF-8&amp;amp;sl=en&amp;amp;tl=ru&amp;amp;u=http://www.eset.eu/encyclopaedia/win32-zimuse-a-trojan-startpage-g-generic-1729691-threat-sysvenfakp-based-maximus&amp;amp;prev=_t&amp;amp;rurl=translate.google.com&amp;amp;twu=1&amp;amp;usg=ALkJrhgBNJze5RXaj7kKSvMZA-dP56WxXg&quot;&gt;Win32/Zimuse.A&lt;/a&gt; и &lt;a href=&quot;http://translate.googleusercontent.com/translate_c?hl=ru&amp;amp;ie=UTF-8&amp;amp;sl=en&amp;amp;tl=ru&amp;amp;u=http://www.eset.eu/encyclopaedia/win32-zimuse-b&amp;amp;prev=_t&amp;amp;rurl=translate.google.com&amp;amp;twu=1&amp;amp;usg=ALkJrhiUA4C9sjMuv8dW1qMGX49L-74_Ug&quot;&gt;Win32/Zimuse.B&lt;/a&gt;.
Они отличаются методом распространения и временем активации. Варианту
«А» необходимо 10 дней до начала распространения через USB-устройства,
второму — лишь 7 дней с момента заражения. &lt;br&gt;
Подобного рода инцидент уже был ранее известен с вирусом &lt;a href=&quot;http://www.eset.eu/buxus/generate_page.php?page_id=3246&amp;amp;lng=en&quot;&gt;OneHalf&lt;/a&gt;,
который наделал много шума в середине девяностых. В то время многие
антивирусные программы были бессильны перед данной угрозой. OneHalf
заражал MBR и шифровал пользовательские данные. Многие варианты лечения
этого вируса приводили к повреждению загрузочного сектора и потере
данных. В процессе расследования и поиска авторов OneHalf большинство
фактов указывало на то, что его распространение началось именно в
Словакии и, вероятнее всего, автор был тоже оттуда. &lt;br&gt;
&lt;br&gt;
Пользователи антивирусных продуктов ESET NOD32 Antivirus и ESET NOD32
Smart Security защищены от угрозы Win32/Zimuse, а для всех остальных
компания ESET разработала специальную утилиту, которая позволяет
избавиться от червя &lt;a href=&quot;http://translate.googleusercontent.com/translate_c?hl=ru&amp;amp;ie=UTF-8&amp;amp;sl=en&amp;amp;tl=ru&amp;amp;u=http://www.eset.eu/download/ezimuse-remover&amp;amp;prev=_t&amp;amp;rurl=translate.google.com&amp;amp;twu=1&amp;amp;usg=ALkJrhi3oTgWKyhrz9ZdXSFzKdSX0E3F1Q&quot;&gt;Zimuse Removal Tool&lt;/a&gt;.</content:encoded>
			<link>https://hackandsecure.do.am/blog/ataka_mbr_chervja_ili_vse_novoe_khorosho_zabytoe_staroe/2010-08-26-17</link>
			<category>Лог</category>
			<dc:creator>sepos</dc:creator>
			<guid>https://hackandsecure.do.am/blog/ataka_mbr_chervja_ili_vse_novoe_khorosho_zabytoe_staroe/2010-08-26-17</guid>
			<pubDate>Thu, 26 Aug 2010 08:28:39 GMT</pubDate>
		</item>
		<item>
			<title>Пишем StarCraft-бота на F#</title>
			<description>В день когда было объявлено о соревновании я яростно взялся за создание
бота для StarCraft на языке F#. F# отлично работает в таких областях
как AI, асинхронное программирование и всякие замечательные штуки.
Однако, я не стал писать об этом проекте р...</description>
			<content:encoded>В день когда было объявлено о соревновании я яростно взялся за создание
бота для StarCraft на языке F#. F# отлично работает в таких областях
как AI, асинхронное программирование и всякие замечательные штуки.
Однако, я не стал писать об этом проекте раньше по этическим причинам.
Дело в том что API, используемое для взаимодействия с Broodwar &lt;b&gt;напрямую нарушает лицензионное соглашение StarCraft&lt;/b&gt;.
Подумайте об этом — предоставлять API для программного доступа к
продукту может быть опасно. Разработка ботов идёт рука об руку со
взломом, эксплоитами и испорченным играм для нормальных игроков. Хотя
мои мотивы в модификации StarCraft ограничиваются написанием ботов для
собственного использования, я абсолютно уважаю желание Blizzard
предотвратить реверс-инжиниринг их программ.&lt;br&gt;
&lt;br&gt;
Итак, как представитель Microsoft и человек уважающий лицензионные
соглашения, я не особенно распропространялся о своём проекте. Так было
пока юридический отдел Blizzard официально не разрешил проведение
упомянутого соревнования. Разрешите представить Вам моего
StarCraft-бота на F# (который, на самом деле, просто порт &lt;a href=&quot;http://eis.ucsc.edu/StarCraftRemote&quot;&gt;Java Proxy Bot&lt;/a&gt;).&lt;br&gt;
&lt;a name=&quot;habracut&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;h3&gt;Настройка необходимых программ&lt;/h3&gt;&lt;br&gt;
&lt;h4&gt;1. Купите и установите StarCraft&lt;/h4&gt;&lt;br&gt;
Первое, что следует сделать — купить и установить StarCraft и расширение BroodWar. Их можно раздобыть за $15 в &lt;a href=&quot;http://us.blizzard.com/store/details.xml?rhtml=y&amp;amp;id=110000124&quot;&gt;онлайн-магазине Blizzard&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
Обязательно установите StarCraft в легко доступную папку вроде
«E:&amp;#92;StarCraft». Иначе копирование файлов бота в Program Files
(доступную только администратору) будет очень непростым делом.&lt;br&gt;
&lt;br&gt;
&lt;h4&gt;2. Скачайте и установите Chaos Launcher&lt;/h4&gt;&lt;br&gt;
&lt;a href=&quot;http://www.teamliquid.net/forum/viewmessage.php?topic_id=65196&quot;&gt;Chaos Launcher&lt;/a&gt;
— инструмент, управляющий загрузкой и запуском StarCraft. Т.к.
оригинальная игра вышла в 1998, мы не станем винить её за то что она не
может нормально работать в оконном режиме. Но для разработки бота это
очень важный вопрос.&lt;br&gt;
&lt;br&gt;
Для начала, распакуйте файл в папку, например &quot;E:&amp;#92;StarCraft&amp;#92;Chaos
Launcher&amp;#92;”. Потом, чтобы проверить всё просто запустите
ChaosLauncher.exe. Отметьте «W-Mode plugin» и нажмите Start. Теперь Вы
можете играть в StarCraft в оконном режиме!&lt;br&gt;
&lt;br&gt;
&lt;img src=&quot;http://blogs.msdn.com/blogfiles/chrsmith/WindowsLiveWriter/StarCraftBotinFPartI_11F60/image_thumb_1.png&quot; title=&quot;StarCraft в оконном режиме&quot;&gt;&lt;br&gt;
&lt;br&gt;
&lt;h4&gt;3. Установите BWAPI&lt;/h4&gt;&lt;br&gt;
&lt;a href=&quot;http://code.google.com/p/bwapi/wiki/BWAPIDevelopment&quot;&gt;BWAPI&lt;/a&gt; это открытое API для взаимодействия со StarCraft: BroodWar, и именно это API мы будем использовать в нашем боте.Скачайте &lt;a href=&quot;http://code.google.com/p/bwapi/downloads/list&quot;&gt;BWAPI_Beta_2.6.1.zip&lt;/a&gt;
и распакуйте его в папку, например &quot;E:&amp;#92;StarCraft&amp;#92;BWLAPI_Beta_2.6.1&amp;#92;”.
Заметьте, что Вам ещё необходимо пройти регистрацию. В файле Readme
перечислены следующие шаги:&lt;br&gt;
&lt;br&gt;
&lt;ol&gt;&lt;li&gt;Скопируйте содержимое папки ChaosLauncher в директорию, куда Вы установили Chaos Launcher (&quot;E:&amp;#92;StarCraft&amp;#92;Chaos Launcher&quot;&amp;#92;”)&lt;/li&gt;&lt;li&gt;Скопируйте содержимое папки StarCraft в Вашу папку StarCraft (&quot;E:&amp;#92;StarCraft&amp;#92;”)&lt;/li&gt;&lt;li&gt;Скопируйте содержимое папки Windows в ваш системный каталог (&quot;C:&amp;#92;Windows&amp;#92;”)&lt;/li&gt;&lt;/ol&gt;&lt;br&gt;
&lt;br&gt;
&lt;h3&gt;Представляю StarCraftBot 9K&lt;/h3&gt;&lt;br&gt;
&lt;br&gt;
Теперь все необходимые инструменты на месте, но написание бота для
программы, расширений к которой вообще не планировалось, будет
непростым делом. StarCraft Bot 9K имеет следующую архитектуру (которая,
в свою очередь, повторяет архитектуру Java ProxyBot, доступного на
сайте AIIDE).&lt;br&gt;
&lt;br&gt;
&lt;img src=&quot;http://blogs.msdn.com/blogfiles/chrsmith/WindowsLiveWriter/StarCraftBotinFPartI_11F60/image_thumb_2.png&quot; title=&quot;Архитектура BWAPI&quot;&gt;&lt;br&gt;
&lt;br&gt;
&lt;ol&gt;&lt;li&gt;Вы используете Chaos Launcher для запуска StarCraft&lt;/li&gt;&lt;li&gt;Когда начинается игра, код BWAPI исполняется каждый игровой ход&lt;/li&gt;&lt;li&gt;В каждый ход StarCraftConnector (С++) передаёт всю публично доступную информацию из игры.&lt;/li&gt;&lt;li&gt;Клиент StarCraftBot9K (C#) слушает эти события&lt;/li&gt;&lt;li&gt;И наконец сам StarCraftBot9K (F#) отвечает за принятие решений в игре.&lt;/li&gt;&lt;/ol&gt;&lt;br&gt;
&lt;br&gt;
&lt;h4&gt;4. Скачайте StarCraftBot9K&lt;/h4&gt;&lt;br&gt;
&lt;br&gt;
В самом конце этого поста указан zip-файл со всеми исходными кодами.
Скачайте его и распакуйте в папку, например &quot;E:&amp;#92;StarCraftBot9K&amp;#92;”.&lt;br&gt;
&lt;br&gt;
&lt;h4&gt;5. Установите StarCraftConnector&lt;/h4&gt;&lt;br&gt;
&lt;br&gt;
При сборке StarCraftBot9K одним из получившихся файлов будет
StarCraftConnector.dll — библиотека на C++, построенная поверх BWAPI,
которая отсылает сообщения о состоянии игры в сокет. После этого
приложение на C# слушает этот сокет и по мере надобности отправляет
сообщения игре StarCraft.&lt;br&gt;
&lt;br&gt;
Чтобы «установить» StarCraftConnector скопиркйте его в
&quot;E:&amp;#92;StarCraft&amp;#92;bwapi-data&amp;#92;AI&amp;#92;”. Эту папку Вы должны были скопировать
когда устанавливали BWAPI.&lt;br&gt;
&lt;br&gt;
После этого откройте &quot;E:&amp;#92;StarCraft&amp;#92;bwapi-data&amp;#92;bwapi.ini” и установите
поле ai_dll в значение &quot;bwapi-data&amp;#92;AI&amp;#92;StarCraftConnector.dll”.&lt;br&gt;
&lt;br&gt;
&lt;img src=&quot;http://blogs.msdn.com/blogfiles/chrsmith/WindowsLiveWriter/StarCraftBotinFPartI_11F60/image8_thumb.png&quot; title=&quot;Редактирование конфига BWAPI&quot;&gt;&lt;br&gt;
&lt;br&gt;
&lt;h4&gt;6. Запустите StarCraftBot9K&lt;/h4&gt;&lt;br&gt;
&lt;br&gt;
Наконец, Вы готовы к запуску StarCraftBot9K! Просто запустите
приложение. Оно начнёт слушать сокет пока StarCraftConnector не начнёт
отправку данных.&lt;br&gt;
&lt;br&gt;
&lt;img src=&quot;http://blogs.msdn.com/blogfiles/chrsmith/WindowsLiveWriter/StarCraftBotinFPartI_11F60/image_thumb_8.png&quot; title=&quot;StarCraftBot9K, ожидающий запуска StarCraft&quot;&gt;&lt;br&gt;
&lt;br&gt;
&lt;h4&gt;7. Запустите StarCraft&lt;/h4&gt;&lt;br&gt;
&lt;br&gt;
Теперь снова запустите Chaos Launcher, в этот раз включив модуль &quot;BWAPI
Injector”. Заметьте, запускать его нужно от имени администратора.&lt;br&gt;
&lt;br&gt;
&lt;img src=&quot;http://blogs.msdn.com/blogfiles/chrsmith/WindowsLiveWriter/StarCraftBotinFPartI_11F60/image_thumb_4.png&quot; title=&quot;Настройки Chaos Launcher&quot;&gt;&lt;br&gt;
&lt;br&gt;
Когда запустится StarCraft всё будет выглядеть как обычно, BWAPI и StarCraftConnector включаются только при начале Custom Game.&lt;br&gt;
&lt;br&gt;
&lt;img src=&quot;http://blogs.msdn.com/blogfiles/chrsmith/WindowsLiveWriter/StarCraftBotinFPartI_11F60/image_thumb_6.png&quot;&gt;&lt;br&gt;
&lt;br&gt;
&lt;h4&gt;8. Передайте управление StarCraftBot 9K&lt;/h4&gt;&lt;br&gt;
&lt;br&gt;
Когда начнётся игра Вы должны увидеть что то наподобие этого. Это
отображение внутреннего состояния игры StarCraft в простом
WinForms-приложении. Сюда ещё придётся добавить много дополнительных
компонент — например объектную модель для отправки правильных команд
StarCraft&apos;у.&lt;br&gt;
&lt;br&gt;
&lt;img src=&quot;http://blogs.msdn.com/blogfiles/chrsmith/WindowsLiveWriter/StarCraftBotinFPartI_11F60/image_thumb_9.png&quot; title=&quot;Карта StarCraft в представлении бота&quot;&gt;&lt;br&gt;
&lt;br&gt;
Когда вы отметите галочку &quot;Economy AI Module”, асинхронный поток F#
запустится и подключится к StarCraft, начав строительство Вашей базовой
экономики (строительство SCV, Дронов или Зондов и отправка их к
руднику.)&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;/// Модуль AI для управления экономикой. Постройка дронов, веспен-гейзеры и прочее&lt;br&gt;let private getEconomyAI (mediator : GameMediator) =&lt;br&gt; async {&lt;br&gt;&lt;br&gt; while true do&lt;br&gt;&lt;br&gt; let currentState = mediator.CurrentGameState&lt;br&gt;&lt;br&gt; // Строить рабочих на все имеющиеся ресурсы&lt;br&gt; if currentState.SupplyUsed &lt; currentState.SupplyTotal &amp;amp;&amp;amp;&lt;br&gt; currentState.Minerals &amp;gt;= 50 &amp;amp;&amp;amp;&lt;br&gt; currentState.CanProduce.[ int (getWorkerType(g_GameMetadata.PlayerRace)) ] then&lt;br&gt;&lt;br&gt; // БАГ: рабочий строится в первом попавшемся командном центре, это может быть не лучшим решением&lt;br&gt; // В идеале у нас должна быть абстракция более высокого уровня &quot;база&quot; со статусом &quot;активная&quot; или &quot;мало ресурсов&quot;&lt;br&gt; let cmdCenter =&lt;br&gt; currentState.Units&lt;br&gt; |&amp;gt; Seq.filter (fun unit -&amp;gt; unit.Player = g_GameMetadata.PlayerID)&lt;br&gt; |&amp;gt; Seq.tryFind (fun unit -&amp;gt; isCommandCenter (enum&lt;UnitID&amp;gt; unit.TypeID))&lt;br&gt;&lt;br&gt; if Option.isSome cmdCenter then&lt;br&gt; let cmdCenterID = cmdCenter |&amp;gt; Option.get |&amp;gt; (fun unit -&amp;gt; unit.ID)&lt;br&gt; let cmd = TrainUnit(cmdCenterID, int (getWorkerType(g_GameMetadata.PlayerRace)))&lt;br&gt; mediator.SendCommand(cmd)&lt;br&gt;&lt;br&gt; // Посылаем незанятых рабочих к ближайшему минеральному полю&lt;br&gt; for scunit in currentState.Units do&lt;br&gt; // Если юнит наш, это рабочий и он ничего не делает,&lt;br&gt; // отправить его к ближайшему полю минералов&lt;br&gt; if scunit.Player = mediator.GameMetadata.PlayerID &amp;amp;&amp;amp;&lt;br&gt; isWorker scunit &amp;amp;&amp;amp;&lt;br&gt; scunit.OrderID = int (UnitOrder.PlayerGuard) then&lt;br&gt;&lt;br&gt; let orderID = scunit.OrderID&lt;br&gt;&lt;br&gt; let scunitLoc = { X = scunit.XPos; Y = scunit.YPos }&lt;br&gt;&lt;br&gt; let mineralPatches =&lt;br&gt; currentState.Units&lt;br&gt; |&amp;gt; Seq.filter(fun unit -&amp;gt; unit.TypeID = int UnitID.MineralField)&lt;br&gt; |&amp;gt; Seq.map(fun minPatch -&amp;gt; let patchLoc = { X = minPatch.XPos; Y = minPatch.YPos }&lt;br&gt; scunitLoc.FlyingDistanceTo(patchLoc), minPatch)&lt;br&gt; |&amp;gt; Seq.sortBy(fun (dist, minPatch) -&amp;gt; dist)&lt;br&gt;&lt;br&gt; if mineralPatches &lt;&amp;gt; Seq.empty then&lt;br&gt; let targetMinPatch = mineralPatches |&amp;gt; Seq.head |&amp;gt; snd&lt;br&gt; let cmd = RightClickUnit(scunit.ID, targetMinPatch.ID)&lt;br&gt; mediator.SendCommand(cmd)&lt;br&gt;&lt;br&gt; // Спим и проверяем позже. Если этот агент будет отменён, здесь мы жто увидим&lt;br&gt; do! Async.Sleep(100)&lt;br&gt; }&lt;br&gt;&lt;/pre&gt;&lt;br&gt;
&lt;br&gt;
Пока что AI не представляет из себя ничего особенного. Но асинхронная
модель F#, reactive framework и события первого порядка позволяют
создать очень мощную и элегантную модель на основе асинхронных событий,
происходящих в игре.&lt;br&gt;
&lt;br&gt;
К примеру, мы приказываем юниту вроде Голиафа атаковать противника. При
этом может случиться множество вещей! Голиаф может убить другого юнита,
тот юнит может убежать, Голиаф может погибнуть и так далее. И результат
Вашего действия Вы узнаете только спустя несколько секунд. Асинхронные
процессы в F# позволяют очень эффективно оборачивать такие асинхронные
действия.&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;let! result = tryEngage enemyUnit&lt;br&gt;&lt;br&gt;match result with&lt;br&gt;| MarineWasKilled -&amp;gt; printfn &quot;Sad.&quot;&lt;br&gt;| UnitWasKilled -&amp;gt; printfn &quot;Horray! Now go find a medic to heal&quot;&lt;br&gt;| UnitRanAway -&amp;gt; printfn &quot;Should you chase? Maybe...&quot;&lt;br&gt;&lt;/pre&gt;&lt;br&gt;
&lt;br&gt;
Функция tryEngage может быть просто объединением нескольких событий
(marine.OnKilled, unit.OnKilled и новое событие когда юнит отбегает
слишком далеко). Может быть пока эту концепцию сложновато понять. Я
постараюсь написать новый пост об этом позже.&lt;br&gt;
Я прикрепил исходный код. Хотя возможно ему и требуется дополнительная
полировка, всё должно быть довольно понятно. Заметьте, что эта статья
идёт не с одним, а сразу с двумя предупреждениями!&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;Все образцы кода предоставляются «КАК ЕСТЬ» без каких либо
гарантий, явных либо подразумеваемых. Никаких гарантий что код подойдёт
для того, для чего Вы его планируете использовать. Другими словами,
если использование BWAPI приведёт к Вашему бану на Battle.net или
повредит Вашей системе, не ожидайте от меня сострадания.&lt;/blockquote&gt;&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;Как видите, здесь очень много взаимодействующих частей. Я
рад предоставить некоторую техническую поддержку, но если Вы
отклолнитесь от указанной процедуры не ожидайте что я буду знать почему
&lt;случайная штука&amp;gt; не работает или как устроен StarCraft изнутри.&lt;/blockquote&gt;&lt;br&gt;
&lt;br&gt;
&lt;img src=&quot;http://blogs.msdn.com/blogfiles/chrsmith/WindowsLiveWriter/StarCraftBotinFPartI_11F60/image_thumb_10.png&quot;&gt;&lt;br&gt;
&lt;br&gt;
&lt;h3&gt;Дополнительные материалы:&lt;/h3&gt;&lt;br&gt;
&lt;a href=&quot;http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Components-PostAttachments/00-09-98-09-78/StarCraftBot9K-_2D00_-2010_2D00_03_2D00_18.zip&quot;&gt;Исходный код бота&lt;/a&gt;</content:encoded>
			<link>https://hackandsecure.do.am/blog/pishem_starcraft_bota_na_f/2010-08-25-16</link>
			<category>Лог</category>
			<dc:creator>sepos</dc:creator>
			<guid>https://hackandsecure.do.am/blog/pishem_starcraft_bota_na_f/2010-08-25-16</guid>
			<pubDate>Wed, 25 Aug 2010 05:31:22 GMT</pubDate>
		</item>
		<item>
			<title>Программируем для PSP: Часть I, настройка компилятора</title>
			<description>Давайте условимся сразу: я следую паттерну &quot;изучение обучением&quot;, т.е.
учу, одновременно изучая, обгоняя читателей на 2-3 &quot;шага&quot; вперед.
Однако это не значит, что я ничего не знаю и все, что говорю - обычные
копипасты: я стараюсь разобраться в теме, п...</description>
			<content:encoded>Давайте условимся сразу: я следую паттерну &quot;изучение обучением&quot;, т.е.
учу, одновременно изучая, обгоняя читателей на 2-3 &quot;шага&quot; вперед.
Однако это не значит, что я ничего не знаю и все, что говорю - обычные
копипасты: я стараюсь разобраться в теме, прежде чем писать о ней.
Поэтому смело задавайте вопросы, этим вы принесете пользу и себе, и
мне: на вопросы, ответ на которые я не знаю, я буду его искать,
осозновать и рассказывать вам.&lt;br&gt;
&lt;br&gt;
Итак, в этом топике будет небольшой рассказ о том, как скомпилировать и
запустить первую программу на своей приставке. Сразу предупреждение:
статья мегатехнического плана, почти все содержание касается
утомительной, но быстрой настройки компилятора, а в результате вы
получите лишь банальный &quot;Hello World&quot;. Однако без нее никак.&lt;br&gt;
&lt;a name=&quot;habracut&quot;&gt;&lt;/a&gt;&lt;br&gt;
Будем предполагать как данность, что у вас есть приставка Sony PSP,
перепрошитая до последней версии - 3.90 M33-3 (так называемая custom
firmware, неофициальная прошивка). О том, как перепрошиваться, уже &lt;a href=&quot;http://pspfaqs.ru/&quot;&gt;рассказывали многие&lt;/a&gt;,
и останавливаться на этом я не буду. Так же будем считать, что в кирпич
ваш вставлена флешка, на которой есть хотя бы 50кб свободного места, и
вы имеете к ним доступ (например, через саму PSP).&lt;br&gt;
&lt;br&gt;
Скажу сразу: я почти уверен, что ничего плохого с вашей приставкой не
случится, если вы будете достаточно аккуратны, но никаких гарантий
дать, к сожалению, не могу.&lt;br&gt;
&lt;br&gt;
Используемый язык программирования — Си, я буду использовать бесплатную IDE &lt;a href=&quot;http://www.codeblocks.org/&quot;&gt;Code::Blocks&lt;/a&gt;
под Windows XP. Пользователи других компиляторов или ОС могут
попробовать настроить IDE сами, благо, настройки у всех похожи; я же
использовал то, для чего нашел мануал ;)&lt;br&gt;
&lt;br&gt;
Для начала, скачаем набор компиляторов, линкеров и библиотек для PSP под названием &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=114505&amp;amp;package_id=157350&quot;&gt;DevKitPSP&lt;/a&gt;. Распакуйте его куда-нибудь, я его распаковал в корень диска E: (теперь у меня есть папка E:&amp;#92;devkitpsp&amp;#92;).&lt;br&gt;
&lt;br&gt;
Теперь откройте Code::Blocks. В меню выберите Settings→Compiler and
Debugger, как Selected Compiler в открывшемся окошке выберите GNU GCC
(он должен стоять по умолчанию), скопируйте его, назвав, например,
DevKitPSP, и настройте его:&lt;br&gt;
&lt;br&gt;
Вкладка Search Directories→Compiler (удалите все, что там есть, и нажимайте Add для добавления каждого из путей):&lt;br&gt;
&lt;blockquote&gt; E:&amp;#92;devkitPSP&amp;#92;include&lt;br&gt;
 E:&amp;#92;devkitPSP&amp;#92;psp&amp;#92;include&lt;br&gt;
 E:&amp;#92;devkitPSP&amp;#92;psp&amp;#92;sdk&amp;#92;include&lt;br&gt;
&lt;/blockquote&gt;Linker:&lt;br&gt;
&lt;blockquote&gt; E:&amp;#92;devkitPSP&amp;#92;lib&lt;br&gt;
 E:&amp;#92;devkitPSP&amp;#92;psp&amp;#92;lib&lt;br&gt;
 E:&amp;#92;devkitPSP&amp;#92;psp&amp;#92;sdk&amp;#92;lib&lt;/blockquote&gt;&lt;br&gt;
&lt;br&gt;
Вкладка Toolchain Executables:&lt;br&gt;
&lt;blockquote&gt;Compiler&apos;s installation directory: E:&amp;#92;devkitPSP . Там есть примечание, что в этой папке должна быть подпапка bin, проверьте.&lt;br&gt;
C-compiler: psp-gcc.exe&lt;br&gt;
C++-compiler: psp-g++.exe&lt;br&gt;
Linker for dynamic libs: psp-g++.exe&lt;br&gt;
Linker for static libs: psp-ar.exe&lt;br&gt;
Еще три поля я оставил пустыми.&lt;br&gt;
&lt;/blockquote&gt;&lt;br&gt;
&lt;br&gt;
Теперь можно жать OK, и переходить к созданию нового проекта
(File→New→Project..., слева в окошке жмем Projects и выбираем Empty).
Заполняем Project Title (не играет роли, пусть будет PSPHelloWorld), не
забываем поставить папку для сохранения проекта (я вон в первый раз
забыл, и получил кучу глюков и ошибок); компилятор, разумеется, ставим
свежесозданный нами.&lt;br&gt;
&lt;br&gt;
Наш проект девственно пуст, создаем фаил (File→New→File..., на название
наплевать, я выбрал main.c) — не забудьте в мастере создания фаила
выбрать как язык Си и поставить галочки &quot;Add to current project&quot;,
&quot;Debug&quot; и &quot;Release&quot; (почему они не стоят по умолчанию?).&lt;br&gt;
&lt;br&gt;
В созданный фаил копируем &lt;a href=&quot;http://text20.ru/353&quot;&gt;код&lt;/a&gt;
(ключ доступа - хабрахабр). Я бы сюда закинул, если бы не хабрапарсер.
Код писал не я, кстати: опыта пока-что маловато, хотя я вполне понимаю,
что там происходит и как - в любом случае, в этом топике я
останавливаться на этом не буду.&lt;br&gt;
&lt;br&gt;
Теперь последние штрихи к настройке. Мы уже настроили то, с помощью
чего будем компилировать, но не настроили, как и что у нас должно
выходить. Поэтому жмем правой кнопкой на название проекта справа,
выбираем Properties, а там — Build targets. &lt;strong&gt;Снимаем&lt;/strong&gt;
галочку &quot;Auto-generate filename extension&quot;, и правим в Output filename
расширение &quot;exe&quot; на &quot;elf&quot;. Выполняем тоже самое для конфигурации
Release, жмем Ok.&lt;br&gt;
&lt;br&gt;
Жмем правой кнопкой на название проекта опять, выбираем Build Options
и, на вкладке Linker Options, вписываем в Other linker options:&lt;br&gt;
&lt;blockquote&gt;&lt;br&gt; -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk
-lpsplibc -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility
-lpspuser -lpspkernel&lt;/blockquote&gt;. Повторяем для Release.&lt;br&gt;
&lt;br&gt;
Вроде всё (надеюсь, это последняя статья скучного технического плана).
Теперь собираем проект (Build→Build или знакомое всем Ctrl-F9) — если
вдруг появились ошибки, то думаем, что же сделали не так, а потом
спрашиваем в комментариях (может, я забыл чего).&lt;br&gt;
&lt;br&gt;
Чтобы не настраивать потом заново, стоит сохранить проект как шаблон (File→Save Project as user-template...).&lt;br&gt;
&lt;br&gt;
Итак, у нас есть elf-фаил нашей программы. Перед тем, как закидывать
его на PSP, надо преобразовать его в EBOOT.PBP (название придумал не я,
честно). Для этого у меня стоит такой bat-ник:&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;&quot;E:&amp;#92;devkitPSP&amp;#92;bin&amp;#92;mksfo.exe&quot; %1/bin/Debug/%1 %1/bin/Debug/%1.sfo&lt;br&gt;
&quot;E:&amp;#92;devkitPSP&amp;#92;bin&amp;#92;psp-fixup-imports.exe&quot; %1/bin/Debug/%1.elf&lt;br&gt;
&quot;E:&amp;#92;devkitPSP&amp;#92;bin&amp;#92;psp-strip.exe&quot; %1/bin/Debug/%1.elf -o %1/bin/Debug/stripped.elf&lt;br&gt;
&quot;E:&amp;#92;devkitPSP&amp;#92;bin&amp;#92;pack-pbp.exe&quot; %1/bin/Debug/EBOOT.PBP
%1/bin/Debug/%1.sfo NULL NULL NULL NULL NULL %1/bin/Debug/stripped.elf
NULL&lt;/blockquote&gt;&lt;br&gt;
&lt;br&gt;
Он располагается у меня в директории pspprj, в которой я создаю по
папке для каждого проекта. Используется он так: make_eboot.bat
HelloWorld . Если у вас другая организация папок, или вы просто хотите
его переписать или запускать каждую программу вручную — просто
запускайте по строчке, не забывая заменять %1 на названия или пути к
фаилам. В результате у вас получится фаил EBOOT.PBP, его надо будет
закинуть в папку /PSP/GAME150/HelloWorld (или другое название)/, а все
остальное можно спокойно удалить. Теперь проверяйте (выход — по кнопке
Home).&lt;br&gt;
&lt;br&gt;
Как &quot;домашнее задание&quot; — сделайте так, чтобы все &quot;хелловорлды&quot; были с новой строки. До встречи!&lt;br&gt;
&lt;br&gt;
P.S. Вырезал весь &quot;юмор&quot;, который сначала вписывал. Всегда самого
раздражали тупые шутки в такого рода постах, а в том, что мои шутки не
тупы, я быть уверен не могу :)</content:encoded>
			<link>https://hackandsecure.do.am/blog/programmiruem_dlja_psp_chast_i_nastrojka_kompiljatora/2010-08-24-15</link>
			<category>Лог</category>
			<dc:creator>sepos</dc:creator>
			<guid>https://hackandsecure.do.am/blog/programmiruem_dlja_psp_chast_i_nastrojka_kompiljatora/2010-08-24-15</guid>
			<pubDate>Tue, 24 Aug 2010 08:34:22 GMT</pubDate>
		</item>
		<item>
			<title>Проблема глобального переопределения new/delete в C++/CLI</title>
			<description>Как известно, C++ позволяет глобально переопределять операторы new и
delete. Обычно такое переопределение используется для диагностики,
поиска утечек памяти и более эффективного распределения памяти.&lt;br&gt;
&lt;br&gt;
Все это мы используем в нашем крупном про...</description>
			<content:encoded>Как известно, C++ позволяет глобально переопределять операторы new и
delete. Обычно такое переопределение используется для диагностики,
поиска утечек памяти и более эффективного распределения памяти.&lt;br&gt;
&lt;br&gt;
Все это мы используем в нашем крупном проекте. Однако у нас есть часть,
написанная на C#, которая с помощью C++/CLI взаимодействует с основной
частью на C++. И вот тут появились проблемы. У нас получались утечки
памяти там, где их быть ну никак не могло.&lt;br&gt;
&lt;a name=&quot;habracut&quot;&gt;&lt;/a&gt;&lt;br&gt;
Все сводилось к тому, что вызывался наш new, но delete был crt’шный.&lt;br&gt;
Чтобы разобраться с проблемой, я создал тестовый solution, где
смоделировал ситуацию. Для простоты переопределенные функции выглядят
так:&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;void&lt;/font&gt;* __cdecl &lt;font color=&quot;#0000ff&quot;&gt;operator&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;new&lt;/font&gt;( size_t size )&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;printf(&lt;font color=&quot;#a31515&quot;&gt;&quot;New&amp;#92;n&quot;&lt;/font&gt;);&lt;br&gt;
&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;return&lt;/font&gt; malloc(size);&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;void&lt;/font&gt; __cdecl &lt;font color=&quot;#0000ff&quot;&gt;operator&lt;/font&gt; delete( &lt;font color=&quot;#0000ff&quot;&gt;void&lt;/font&gt; *p )&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;printf(&lt;font color=&quot;#a31515&quot;&gt;&quot;Delete&amp;#92;n&quot;&lt;/font&gt;);&lt;br&gt;
&amp;nbsp;free(p);&lt;br&gt;
}&lt;br&gt;
&lt;/font&gt;&lt;br&gt;
&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
Значит, мы должны получить одинаковое количество New и Delete в выводе, равное количеству пар new/delete.&lt;br&gt;
&lt;br&gt;
Вот код, который вызывает new/delete:&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#008000&quot;&gt;//managed.h&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;namespace&lt;/font&gt; Managed &lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;class&lt;/font&gt; ManagedClass&lt;br&gt;
&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;ManagedClass()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NativeClass* cl = &lt;font color=&quot;#0000ff&quot;&gt;new&lt;/font&gt; NativeClass();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete cl;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;int&lt;/font&gt;* a = &lt;font color=&quot;#0000ff&quot;&gt;new&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;int&lt;/font&gt;();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete a;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;};&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;font color=&quot;#008000&quot;&gt;//native.cpp&lt;/font&gt;&lt;br&gt;
NativeClass::NativeClass()&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;int&lt;/font&gt;* a = &lt;font color=&quot;#0000ff&quot;&gt;new&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;int&lt;/font&gt;();&lt;br&gt;
&amp;nbsp;delete a;&lt;br&gt;
}&lt;br&gt;
&lt;/font&gt;&lt;br&gt;
&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
Из C# мы создаем ManagedClass так:&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;void&lt;/font&gt; Main( &lt;font color=&quot;#0000ff&quot;&gt;string&lt;/font&gt;[] args )&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;ManagedClass cl = &lt;font color=&quot;#0000ff&quot;&gt;new&lt;/font&gt; ManagedClass();&lt;br&gt;
}&lt;br&gt;
&lt;/font&gt;&lt;br&gt;
&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
Еще есть класс Foo, который лежит в отдельном файле basic.h, причем он
никак не используется в этих классах. Просто его определение помещается
в Precompiled Header.&lt;br&gt;
Этот &quot;плохой” класс не несет функциональности, однако одно наличие его
приводит к очень странному результату. Если комментируешь конструктор
копирования класса, то все работает отлично:&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;#pragma&lt;/font&gt; once&lt;br&gt;
&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;class&lt;/font&gt; Foo&lt;br&gt;
{&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;Foo() {}&lt;br&gt;
&amp;nbsp;&lt;font color=&quot;#008000&quot;&gt;//Foo( const Foo&amp;amp; ) {}&lt;/font&gt;&lt;br&gt;
&amp;nbsp;Foo&amp;amp; &lt;font color=&quot;#0000ff&quot;&gt;operator&lt;/font&gt; = ( &lt;font color=&quot;#0000ff&quot;&gt;const&lt;/font&gt; Foo&amp;amp; ) { &lt;font color=&quot;#0000ff&quot;&gt;return&lt;/font&gt; *&lt;font color=&quot;#0000ff&quot;&gt;this&lt;/font&gt;; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;virtual&lt;/font&gt; ~Foo() {}&lt;br&gt;
};&lt;br&gt;
&lt;/font&gt;&lt;br&gt;
&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
Вывод:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;New&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;New&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;Delete&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;Delete&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;New&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;Delete&lt;br&gt;
&lt;br&gt;
3 new – 3 delete. Все хорошо.&lt;br&gt;
&lt;br&gt;
Если же конструктор копирования не закомментирован, то не всем нашим new соответствует наш delete:&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;#pragma&lt;/font&gt; once&lt;br&gt;
&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;class&lt;/font&gt; Foo&lt;br&gt;
{&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;Foo() {}&lt;br&gt;
&amp;nbsp;Foo( &lt;font color=&quot;#0000ff&quot;&gt;const&lt;/font&gt; Foo&amp;amp; ) {}&lt;br&gt;
&amp;nbsp;Foo&amp;amp; &lt;font color=&quot;#0000ff&quot;&gt;operator&lt;/font&gt; = ( &lt;font color=&quot;#0000ff&quot;&gt;const&lt;/font&gt; Foo&amp;amp; ) { &lt;font color=&quot;#0000ff&quot;&gt;return&lt;/font&gt; *&lt;font color=&quot;#0000ff&quot;&gt;this&lt;/font&gt;; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;virtual&lt;/font&gt; ~Foo() {}&lt;br&gt;
};&lt;br&gt;
&lt;/font&gt;&lt;br&gt;
&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
Вывод:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;New&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;New&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;Delete&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;New&lt;br&gt;
&lt;br&gt;
3 new – 1 delete. Все плохо.&lt;br&gt;
&lt;br&gt;
Итог: мы имеем ошибку выбора функции удаления, которая зависит от &quot;положения луны”. Самое время начать гуглить.&lt;br&gt;
&lt;br&gt;
В ходе поисков был найден документ, предположительно описывающий нашу проблему:&lt;br&gt;
&lt;a href=&quot;http://support.microsoft.com/kb/122675&quot;&gt;http://support.microsoft.com/kb/122675.&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
К сожалению, после детального прочтения документа, выясняется, что наш
случай отличается от рассмотренного. Более того, в pure-C++ проекте
такого поведения не наблюдается. Проблема в C++/CLI.&lt;br&gt;
&lt;br&gt;
Продолжим наши исследования. Если деструктор сделать не виртуальным, то опять все работает, как надо:&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;#pragma&lt;/font&gt; once&lt;br&gt;
&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;class&lt;/font&gt; Foo&lt;br&gt;
{&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;:&lt;br&gt;
&amp;nbsp;Foo() {}&lt;br&gt;
&amp;nbsp;Foo( &lt;font color=&quot;#0000ff&quot;&gt;const&lt;/font&gt; Foo&amp;amp; ) {}&lt;br&gt;
&amp;nbsp;Foo&amp;amp; &lt;font color=&quot;#0000ff&quot;&gt;operator&lt;/font&gt; = ( &lt;font color=&quot;#0000ff&quot;&gt;const&lt;/font&gt; Foo&amp;amp; ) { &lt;font color=&quot;#0000ff&quot;&gt;return&lt;/font&gt; *&lt;font color=&quot;#0000ff&quot;&gt;this&lt;/font&gt;; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp;~Foo() {}&lt;br&gt;
};&lt;br&gt;
&lt;/font&gt;&lt;br&gt;
&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
Вывод:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;New&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;New&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;Delete&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;Delete&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;New&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;Delete&lt;br&gt;
&lt;br&gt;
Стоит заметить, что этот класс никак не используется в нашей программе. Просто само его наличие приводит к багу.&lt;br&gt;
Т.к. баг проявляется только в C++/CLI, то попробуем пометить этот класс как unmanaged:&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;#pragma&lt;/font&gt; managed(push,off)&lt;br&gt;
#include &lt;font color=&quot;#a31515&quot;&gt;&quot;../System/basic.h&quot;&lt;/font&gt; &lt;font color=&quot;#008000&quot;&gt;// h файл с &quot;плохим” классом Foo&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;#pragma&lt;/font&gt; managed(pop)&lt;br&gt;
&lt;/font&gt;&lt;br&gt;
&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
Вывод:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;New&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;New&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;Delete&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;Delete&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;New&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;Delete&lt;br&gt;
&lt;br&gt;
Получилось! Однако, это не решение проблемы. Будем копать дальше.&lt;br&gt;
&lt;br&gt;
Может быть проблема в Precompiled Headers? Однако если basic.h из
Stdafx.h, но вставить его в любой другой *.h файл, который попадает в
проект, то проблема повторится.&lt;br&gt;
&lt;br&gt;
Посмотрим более подробно, что делает linker. Для этого включим режим вывода дополнительной информации у linker’а:&lt;br&gt;
&lt;img src=&quot;http://ipicture.ru/uploads/100714/gT7jcFSBDv.png&quot; alt=&quot;image&quot;&gt;&lt;br&gt;
&lt;br&gt;
Ого! Он нашел delete в MSVCRTD.lib, вот почему delete используется не наш:&lt;br&gt;
&lt;img src=&quot;http://ipicture.ru/uploads/100715/zyFoWG7kIN.png&quot; alt=&quot;image&quot;&gt;&lt;br&gt;
&lt;br&gt;
В случае же, когда мы делаем деструктор не виртуальным или комментируем конструктор копирования, получаем такой выход linker’а:&lt;br&gt;
&lt;img src=&quot;http://ipicture.ru/uploads/100715/8e2RUPfVt3.png&quot; alt=&quot;image&quot;&gt;&lt;br&gt;
&lt;br&gt;
Более того, если оставить конструктор копирования, сделать деструктор
не виртуальным, но добавить виртуальную функцию, опять delete начинает
глючить.&lt;br&gt;
&lt;br&gt;
Хотя исследования были в Debug сборке, но и в Release наблюдается то же самое поведение.&lt;br&gt;
&lt;br&gt;
К сожалению, данную проблему пока не удалось решить, что приводит к невозможности простого поиска утечек памяти в проекте.&lt;br&gt;
&lt;br&gt;
В итоге имеем, что при наличии класса, у которого есть виртуальная
таблица и конструктор копирования (причем этот класс компилируется в
managed), linker линкует стандартный delete, хотя у нас и есть
переопределенный delete в dll.&lt;br&gt;
&lt;br&gt;
PS. Кому интересно самостоятельно поработать с простейшим тестовым
solution с проблемой и, возможно, помочь советом, могут скачать его вот
здесь: &lt;a href=&quot;https://mysvn.ru/Lof/NewDeleteProblem&quot;&gt;https://mysvn.ru/Lof/NewDeleteProblem&lt;/a&gt;</content:encoded>
			<link>https://hackandsecure.do.am/blog/problema_globalnogo_pereopredelenija_new_delete_v_c_cli/2010-08-23-14</link>
			<category>Лог</category>
			<dc:creator>sepos</dc:creator>
			<guid>https://hackandsecure.do.am/blog/problema_globalnogo_pereopredelenija_new_delete_v_c_cli/2010-08-23-14</guid>
			<pubDate>Mon, 23 Aug 2010 13:27:19 GMT</pubDate>
		</item>
		<item>
			<title>Преобразование FB2 в XHTML с сохранением вложенных рисунков</title>
			<description>Возникла у меня небольшая необходимость преобразовать книги в формате FB в xhtml. &lt;br&gt;
Ну ясное дело я полез на &lt;a href=&quot;http://www.gribuser.ru/xml/fictionbook/2.0/xsl/export/&quot;&gt;www.gribuser.ru/xml/fictionbook/2.0/xsl/export/&lt;/a&gt; где и взял файл&lt;br&gt;
&lt;...</description>
			<content:encoded>Возникла у меня небольшая необходимость преобразовать книги в формате FB в xhtml. &lt;br&gt;
Ну ясное дело я полез на &lt;a href=&quot;http://www.gribuser.ru/xml/fictionbook/2.0/xsl/export/&quot;&gt;www.gribuser.ru/xml/fictionbook/2.0/xsl/export/&lt;/a&gt; где и взял файл&lt;br&gt;
&lt;a href=&quot;http://www.gribuser.ru/xml/fictionbook/2.0/xsl/export/FB2_2_xhtml.xsl&quot;&gt; FB2_2_xhtml.xsl&lt;/a&gt; (заодно захватил &lt;a href=&quot;http://www.gribuser.ru/xml/fictionbook/2.0/xsl/export/FB2_2_txt.xsl&quot;&gt;FB2_2_txt.xsl&lt;/a&gt; мало ли в текстовом виде понадобится книжку получить )&lt;br&gt;
Попробовал сконвертировать книжку, и заметил маленькую проблемку, рисунки то пропали. :(&lt;br&gt;
В принципе рисунки не главное в книжке, но все равно немного обидно. Поэтому полезем разбираться в чем проблема.&lt;br&gt;
&lt;a name=&quot;habracut&quot;&gt;&lt;/a&gt;&lt;br&gt;
По стандарту FB2 внедренные рисунки описываются в тегах binary.А ссылаются на них с указанием якоря в ссылке, то есть &lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;img&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;src&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&apos;#cover.jpg&apos;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
&lt;br&gt;
Сначала возникла мысль просто вытащить рисунки, и положить их в папку с преобразоваемым файлом. Получилось нечто вроде&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;?php&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;path&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;&apos;&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;book&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;&apos;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;;&lt;/font&gt; &lt;font color=&quot;#888888&quot;&gt;&lt;i&gt;//&lt;/i&gt;&lt;/font&gt;&lt;font color=&quot;#888888&quot;&gt;&lt;i&gt;путь к папке куда будем складывать рисунки&lt;/i&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;doc&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#a1a100&quot;&gt;new&lt;/font&gt; &lt;font color=&quot;#993333&quot;&gt;DO&lt;/font&gt;&lt;font color=&quot;#660000&quot;&gt;&lt;b&gt;MDocument&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;doc&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;load&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;xml_filename&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;nodes&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;doc&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;getElementsByTagName&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;&apos;&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;binary&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;&apos;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#a1a100&quot;&gt;foreach&lt;/font&gt; &lt;font color=&quot;#008000&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;nodes&lt;/font&gt; &lt;font color=&quot;#a1a100&quot;&gt;as&lt;/font&gt; &lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;node&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;)&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#008000&quot;&gt;{&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;value&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;a href=&quot;http://www.php.net/base64_decode&quot;&gt;&lt;font color=&quot;#000066&quot;&gt;base64_decode&lt;/font&gt;&lt;/a&gt;&lt;font color=&quot;#008000&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;node&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;nodeValue&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;fname&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;node&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;attributes&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;getNamedItem&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;&apos;&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;id&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;&apos;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;nodeValue&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;fh&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;a href=&quot;http://www.php.net/fopen&quot;&gt;&lt;font color=&quot;#000066&quot;&gt;fopen&lt;/font&gt;&lt;/a&gt;&lt;font color=&quot;#008000&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;path&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;&apos;&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;/&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;&apos;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;fname&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;,&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;&apos;&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;w+&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;&apos;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.php.net/fwrite&quot;&gt;&lt;font color=&quot;#000066&quot;&gt;fwrite&lt;/font&gt;&lt;/a&gt;&lt;font color=&quot;#008000&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;fh&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;,&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;value&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.php.net/fclose&quot;&gt;&lt;font color=&quot;#000066&quot;&gt;fclose&lt;/font&gt;&lt;/a&gt;&lt;font color=&quot;#008000&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;$&lt;/font&gt;&lt;font color=&quot;#3333ff&quot;&gt;fh&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;;&lt;/font&gt; &lt;br&gt;
&lt;font color=&quot;#008000&quot;&gt;}&lt;/font&gt;&lt;br&gt;
&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
&lt;br&gt;
Затем делаем xslt преобразование файлов взятым с офф сайта и радуемся
жизнь, рисунки появились. Вот только объем, если делатаь небольшую
библиотечку то надо хранить txt файлы, fb2 файлы, xhtml&apos;ку, да и
рисунки еще, накладно получается. В принципе можно хранить одну fb2&apos;шку
а по обращению получать файл, задержка небольшая, пару секунд и
подождать можно (это на нетбуке, на десктопе преобразование выполняется
только влет). И тут мне вспомнилось что существует такая вещь как &lt;a href=&quot;http://en.wikipedia.org/wiki/Data_URI_scheme&quot;&gt;Data Uri&lt;/a&gt;,
так почему бы не использовать ее и не встроить рисунки прямо в итоговую
xhtml&apos;ку. Конечно размер вырастет, но ведь мы получаем xhtml&apos;ку только
посмотреть когда нужно, к тому же если такой xsl файл получить то можно
будет fb2&apos;ки нормально в браузере читать.&lt;br&gt;
И вот я начал копаться в FB2_2_xhtml.xsl файле.&lt;br&gt;
Сразу видно причину почему пропали рисунки&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:template match&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;fb:image&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;div&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#000066&quot;&gt;align&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;center&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;img&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#000066&quot;&gt;border&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;1&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:choose&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:when test&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;starts-with(@xlink:href,&apos;#&apos;)&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:attribute &lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;name&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;src&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;value&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;-of select&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;substring-after(@xlink:href,&apos;#&apos;)&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;/&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:attribute&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:when&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:otherwise&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:attribute &lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;name&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;src&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;value&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;-of select&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;@xlink:href&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;/&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:attribute&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:otherwise&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:choose&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/img&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/div&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:template&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
&lt;br&gt;
в данном случае просто вырезается # перед рисунком. И предполагается что рисунки будут лежать рядом. &lt;br&gt;
После некоторого шаманства получился следующий код&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:when test&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;starts-with(@xlink:href,&apos;#&apos;)&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:attribute &lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;name&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;src&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;text&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;data:&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;text&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:variable &lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;name&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;href&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt; select&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;substring-after(@xlink:href,&apos;#&apos;)&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt; &lt;font color=&quot;#008000&quot;&gt;/&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;set&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt; variable&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;href&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt; expression&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;substring-after(@xlink:href,&apos;#&apos;)&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;/&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;value&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;-of select&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;//fb:binary[@id=$href]/@content-type&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt; disable-output-escaping&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;yes&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt; &lt;font color=&quot;#008000&quot;&gt;/&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;text&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;;base64,&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;text&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;value&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;-of select&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;//fb:binary[@id=$href]&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt; disable-output-escaping&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;yes&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;/&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:attribute&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:when&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
&lt;br&gt;
Почему то простая конструкция &lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:variable &lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;name&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;href&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt; select&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;substring-after(@xlink:href,&apos;#&apos;)&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt; &lt;font color=&quot;#008000&quot;&gt;/&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt; &lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
&lt;br&gt;
у меня не захотела задавать переменную, она не виделась в xpath выражении, после дополнительного определения &lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;set&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt; variable&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;href&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt; expression&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;substring-after(@xlink:href,&apos;#&apos;)&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;/&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt; все заработало как нужно.&lt;br&gt;
&lt;br&gt;
Также внес небольшие изменения касающие вывода названия книги сверху &lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;h4&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#000066&quot;&gt;align&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;center&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;value&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;-of select&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;fb:description/fb:title-info/fb:book-title&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;/&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/h4&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
А также вывода обложки&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;for&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;-each select&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;fb:description/fb:title-info/fb:coverpage/fb:image&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:call-template &lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;name&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;image&lt;/font&gt;&lt;font color=&quot;#993333&quot;&gt;&quot;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;/&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;/xsl&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#000066&quot;&gt;for&lt;/font&gt;&lt;font color=&quot;#008000&quot;&gt;-each&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
&lt;br&gt;
предварительно исправив &lt;code&gt;&lt;xsl:template match=&quot;fb:image&quot;&amp;gt;&lt;/code&gt; на &lt;code&gt;&lt;xsl:template match=&quot;fb:image&quot; name=&quot;image&quot;&amp;gt;&lt;/code&gt;&lt;br&gt;
Возможно стоит перенести содержание в конец, но в принципе меня и так все устраивает.&lt;br&gt;
&lt;br&gt;
Получившийся файл можно взять здесь &lt;a href=&quot;http://bit.ly/1JOIvz&quot;&gt;bit.ly/1JOIvz&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
P.S. пока искал в нете подходящее решение наткнулся на &lt;a href=&quot;http://rusec.livejournal.com/11740.html&quot;&gt;rusec.livejournal.com/11740.html&lt;/a&gt; :)&lt;br&gt;
&lt;br&gt;
Ну и касательно fb2 читалки под линуксом не могу процитировать сообщение на которое наткнулся на &lt;a href=&quot;http://www.linux.org.ru/view-message.jsp?msgid=3599767&quot;&gt;лоре&lt;/a&gt;&lt;br&gt;
Нашел для себя отличный ридер для fictonbook: &lt;br&gt;
«zcat book.fb2.zip|xsltproc FB2_2_txt.xsl -|less -s» &lt;br&gt;
;) &lt;br&gt;
&lt;br&gt;
&lt;a href=&quot;http://juick.com/demyan/70753&quot;&gt;juick.com/demyan/70753&lt;/a&gt;</content:encoded>
			<link>https://hackandsecure.do.am/blog/preobrazovanie_fb2_v_xhtml_s_sokhraneniem_vlozhennykh_risunkov/2010-08-23-13</link>
			<category>Лог</category>
			<dc:creator>sepos</dc:creator>
			<guid>https://hackandsecure.do.am/blog/preobrazovanie_fb2_v_xhtml_s_sokhraneniem_vlozhennykh_risunkov/2010-08-23-13</guid>
			<pubDate>Mon, 23 Aug 2010 10:23:56 GMT</pubDate>
		</item>
		<item>
			<title>Кроссбраузерные HTML инклуды</title>
			<description>Пусть у нас есть простенький хтмльчик index1.htm&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;!&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;DOCTYPE&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;html&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=...</description>
			<content:encoded>Пусть у нас есть простенький хтмльчик index1.htm&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;!&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;DOCTYPE&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;html&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;html&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;head&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;title&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;Xbrowser HTML includes&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;title&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;meta&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;http-equiv&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;Content-Type&quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;content&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;text/html; charset=utf-8&quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;head&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;body&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;h1&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;First file&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;h1&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;body&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;html&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
Как известно, хтмл поддерживает инклуды только через iframe/object, но с ними не очень удобно работать из яваскрипта.&lt;br&gt;
&lt;br&gt;
Можно, конечно, прописать в каждую подключаемую страницу скрипт типа такого&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;new&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;function&lt;/font&gt;(){&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;var&lt;/font&gt; frame= window.frameElement&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;if&lt;/font&gt;( !frame ) &lt;font color=&quot;#0000ff&quot;&gt;return&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;var&lt;/font&gt; parent= frame.parentNode&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;var&lt;/font&gt; body= &lt;font color=&quot;#0000ff&quot;&gt;document&lt;/font&gt;.getElementsByTagName( &lt;font color=&quot;#a31515&quot;&gt;&apos;body&apos;&lt;/font&gt; )[0]&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;var&lt;/font&gt; child;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;while&lt;/font&gt;( child= body.firstChild ) parent.insertBefore( child, frame )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parent.removeChild( frame )&lt;br&gt;
}&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
Он переносит своё содержимое в родительский документ и удаляет фрейм.
Но в случае отключённоо яваскрипта мы получим окошко ифрейма не
подстраивающееся под размер содержимого.&lt;br&gt;
&lt;a name=&quot;habracut&quot;&gt;&lt;/a&gt;&lt;br&gt;
В XHTML2 пояилась интересная возможность — аттрибут src можно задавать
любому элементу и содержимое документа на который он указывает будет
всталено вместо содержимого элемента. Напишем index2.htm&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;!&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;DOCTYPE&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;html&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;PUBLIC&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&quot;-//W3C//DTD XHTML 2.0//EN&quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&quot;http://www.w3.org/MarkUp/DTD/xhtml2.dtd&quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;html&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;head&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;title&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;Xbrowser HTML includes&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;title&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;meta&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;http-equiv&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;Content-Type&quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;content&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;text/html; charset=utf-8&quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;head&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;body&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;h1&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;Second file&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;h1&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;div&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;src&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;index1.xml&quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;srctype&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;text/xml&quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;a&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;href&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;index1.xml&quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;link 2 first file&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;a&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;div&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;body&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;html&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
Проверили — не работает. Оживить её можно с помощью яваскрипта, который
опять же может быть отключён, но это уже не так фатально — пользователю
будет показана ссылка на подключаемый файл.&lt;br&gt;
&lt;br&gt;
Но мы поступим круче и обойдёмся без яваскрипта. А поможет нам в этом
xsl преобразование, накладывающееся само на себя. Напишем index2.xml,
который будет ни чем иным, как index.htm обёрнутым в специальную
волшебную обёртку.&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;!&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;DOCTYPE&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;t:stylesheet&lt;/font&gt; [ &lt;!&lt;font color=&quot;#ff0000&quot;&gt;ATTLIST&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;t:stylesheet&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;id&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;ID&lt;/font&gt; #&lt;font color=&quot;#ff0000&quot;&gt;REQUIRED&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt; ]&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt; &lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&lt;?&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;xml-stylesheet&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;type&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;text/xsl&quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;href&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;#t:stylesheet&quot;&lt;/font&gt;?&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:stylesheet&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;id&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;t:stylesheet&quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;version&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;1.0&quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;xmlns:t&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;http://www.w3.org/1999/XSL/Transform&quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:output&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;method&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;html&quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;doctype-public&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;doctype-system&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:template&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;match&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot; @* | node() &quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:copy&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:apply-templates&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;select&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot; @* | node() &quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:copy&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:template&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:template&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;match&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot; / &quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:apply-templates&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;select&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot; document( &apos;#t:stylesheet&apos; )//html &quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:template&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:template&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;name&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;content&quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;html&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;head&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;title&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;Xbrowser HTML includes&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;title&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;meta&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;http-equiv&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;Content-Type&quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;content&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;text/html; charset=utf-8&quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;head&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;body&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;h1&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;Second file&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;h1&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;div&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;src&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;index1.htm&quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;srctype&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;text/xml&quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;a&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;href&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;index1.htm&quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;link 2 first file&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;a&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;div&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;body&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;html&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:template&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:stylesheet&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
Доктайп тут выполняет две функции:&lt;br&gt;
1. он указывает xml-процессору, что аттрибут id в t:stylesheet является
идентификатором, что позволяет использовать его при указании
xsl-преобразования.&lt;br&gt;
2. Если документ будет отдан как text/html, то браузет всё ж будет
рендерить страницу в режиме соответствия стандартам. В t:output мы
прописываем доктайп по той же причине, только для случая, когда
документ был отдан как xml и xslt преобразовал себя в html.&lt;br&gt;
&lt;br&gt;
Первый шаблон матчится на все узлы и рекурсивно их копирует. Второй —
матричится на корень и пропускает xslt тэги, сразу переходя к выводу
html. Последнее правило просто содержит html с инклудами. Имя его не
имеет никакого значения.&lt;br&gt;
&lt;br&gt;
Если проверить сейчас это в браузере, то никаких отличий быть не должо.
Однако, если добавить ещё один шаблон, то инклуды внезапно заработают.&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:template&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;match&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot; *[ @src and contains( @srctype, &apos;xml&apos; ) ] &quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:copy&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:apply-templates&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;select&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot; @* &quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:apply-templates&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;select&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&apos; document( @src )//html/body/* &apos;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:copy&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:template&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
Примечательно, что инклудить таким образом можно как xml типа index2.xml, так и html типа index1.htm&lt;br&gt;
Напишем index3.xml, который инклудит index2.xml&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;!&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;DOCTYPE&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;t:stylesheet&lt;/font&gt; [ &lt;!&lt;font color=&quot;#ff0000&quot;&gt;ATTLIST&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;t:stylesheet&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;id&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;ID&lt;/font&gt; #&lt;font color=&quot;#ff0000&quot;&gt;REQUIRED&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt; ]&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&lt;?&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;xml-stylesheet&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;type&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;text/xsl&quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;href&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;#t:stylesheet&quot;&lt;/font&gt;?&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:stylesheet&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;id&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;t:stylesheet&quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;version&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;1.0&quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;xmlns:t&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;http://www.w3.org/1999/XSL/Transform&quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:output&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;doctype-public&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;-//W3C//DTD XHTML 2.0//EN&quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;doctype-system&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;http://www.w3.org/MarkUp/DTD/xhtml2.dtd&quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:template&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;match&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot; @* | node() &quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:copy&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:apply-templates&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;select&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot; @* | node() &quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:copy&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:template&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:template&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;match&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot; *[ @src and contains( @srctype, &apos;xml&apos; ) ] &quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:copy&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:apply-templates&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;select&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot; @* &quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:apply-templates&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;select&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&apos; document( @src )//html/body/* &apos;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:copy&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:template&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:template&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;match&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot; / &quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:apply-templates&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;select&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot; document( &apos;#t:stylesheet&apos; )//html &quot;&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:template&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:template&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;name&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;content&quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;html&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;head&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;title&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;Xbrowser HTML includes&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;title&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;meta&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;http-equiv&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;Content-Type&quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;content&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;text/html; charset=utf-8&quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;head&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;body&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;h1&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;Third file&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;h1&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;div&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;src&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;index2.xml&quot;&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;srctype&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;text/xml&quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;a&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;href&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;=&quot;index2.xml&quot;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;link 2 second file&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;a&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;div&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;body&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;html&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:template&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&lt;/&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;t:stylesheet&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
Для роботов и убогих мобильных браузеров страницы можно просто отдавать
как text/html и тогда вместо вставляемого файла будет рисоваться ссылка
на него.&lt;br&gt;
&lt;br&gt;
Совместимость: ie6+, ff3+, opera10+, webkit?+</content:encoded>
			<link>https://hackandsecure.do.am/blog/krossbrauzernye_html_inkludy/2010-08-23-12</link>
			<category>Лог</category>
			<dc:creator>sepos</dc:creator>
			<guid>https://hackandsecure.do.am/blog/krossbrauzernye_html_inkludy/2010-08-23-12</guid>
			<pubDate>Mon, 23 Aug 2010 05:25:52 GMT</pubDate>
		</item>
		<item>
			<title>Реабилитация XML/XSLT технологий</title>
			<description>Здравствуй. Некоторое время назад мы внедрили у себя в CMS наряду
с уже имевшимся к тому моменту собственным шаблонизатором, еще и XSLT.
Поскольку есть в XSLT большие и реальные преимущества и для
разработчиков, и для хозяев студий, и даже для владел...</description>
			<content:encoded>Здравствуй. Некоторое время назад мы внедрили у себя в CMS наряду
с уже имевшимся к тому моменту собственным шаблонизатором, еще и XSLT.
Поскольку есть в XSLT большие и реальные преимущества и для
разработчиков, и для хозяев студий, и даже для владельцев сайтов. Но
реакция наших партнеров разделилась на противоположные мнения: одни
давно ожидали этого и были рады появлению такой возможности, другие
поставили под сомнение востребованность XSLT, приводя в качестве
аргумента низкую производительность, которую якобы влечет за собой
использование XSLT.&lt;br&gt;
 &lt;br&gt;
Понятно, что у всего нового всегда есть сторонники и противники, и
рассудит их время. Поэтому не было особого смысла развязывать
религиозную войну XSLT vs tpl или Smarty на тот момент. Но мы
обнаружили, что оказывается, один из лидеров российского рынка CMS с
завидным упорством все &lt;a href=&quot;http://www.1c-bitrix.ru/blog/rsv/1.php?phrase_id=907659&quot;&gt;пишет&lt;/a&gt; и &lt;a href=&quot;http://rizhikov.habrahabr.ru/blog/33728.html&quot;&gt;пишет&lt;/a&gt;
о якобы несостоятельности XSLT как массовой технологии и готов
рассматривать ее только в контексте специфичных задач. А это негативно
влияет на умы некоторых непосвященных разработчиков об XSLT. &lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a name=&quot;habracut&quot;&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
С другой стороны, прошедшая недавно крупнейшая европейская IT-выставка CeBIT &lt;a href=&quot;http://webplanet.ru/review/soft/2008/03/13/umisoft_cebit.html&quot;&gt;показала нам&lt;/a&gt;,
что большинство серьезных западных CMS (и коробочных и внутренних
платформ) используют XML/XSLT в качестве единого унифицированного
стандарта. Все-таки, российский IT-рынок по скорости внедрения новых
технологий слегка отстает от западного. На этом фоне говорить о том,
что XSLT - отстой, пока весь мир его использует, не совсем полезно и
правильно. &lt;br&gt;
&lt;br&gt;
Поэтому я, зарегистрировавшись на Хабре, начну с попытки реабилитации
несправедливо обиженного XSLT. На мой взгляд, ответственность
участников рынка CMS как раз в том, чтобы продвигать современные
технологии и быть своеобразными технологическими флагманами. А не
дискредитировать их, даже если не получилось реализовать у себя или не
нравится. Можно не читать тем, кто и так знает про XSLT или даже
использует. Эта статья для тех, кто еще не в теме или сомневается. Тех,
кто не согласен - прошу не устраивать холивар. Все имеют право
высказывать свое мнение.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h2&gt;Шаблонизаторы XSLT, Smarty и внутренние tpl коробочных CMS. &lt;/h2&gt;&lt;br&gt;
Все технологические преимущества XSLT основаны на основной концепции,
заложенной в него, - полное разделение бизнес-логики и логики
представления. Смешать модели представления и модели бизнес-логики –
это смертный грех программиста. И только человек с очень низкой
квалификацией с этим не согласится. При этом, например, достаточно
популярный шаблонизатор Smarty, не только позволяет реализовывать
бизнес-логику в шаблоне, на уровне представления, но и подталкивает
разработчика к этому, искушает его быстрым решением сиюминутной задачи.
К чему это приведет впоследствии – к неструктурированной цепочке связей
между шаблонами и скриптами, которая нарастает как снежный ком и в
итоге становится неуправляемой. В итоге изменение, например, одного
метода, который используется в шаблоне, приведет к тому, что «упадет»
весь шаблон. &lt;br&gt;
&lt;br&gt;
Любые задачи по расширению становятся сравнимы с «написанием всего с
нуля» даже для того разработчика, который изначально вел проект. Не
говоря о том, что становится невозможным передача этого проекта другому
разработчику. Таким образом, преимущества использования отчуждаемой CMS
могут отчасти нивелироваться использованием Smarty, так как в сложном и
тем более нестандартном внедрении он делает созданный проект
неотчуждаемым от своего разработчика. Смена разработчика в большинстве
случаев будет означать то самое «переписывание с нуля», которое, как ни
парадоксально, в этом случае окажется более выгодным, чем трудозатраты
на изучение «чужого» кода. Очевидно, что это решение не оптимально, и
повлечет за собой очередную порцию достаточно существенных финансовых
вливаний. &lt;br&gt;
&lt;br&gt;
Поэтому говорить о невысокой стоимости владения серьезного проекта,
созданного с использованием такого шаблонизатора не приходится.
Разумеется, если проект небольшой, смены разработчиков не предвидится
или вам нужно быстро сделать и забыть – Smarty подходит больше.&lt;br&gt;
&lt;br&gt;
Также нельзя не отметить незащищенность «от дурака», если в CMS
используется Smarty – внедренец невысокого уровня «с помощью» Smarty
может легко прямо в шаблоне прописать запрос к БД и обрушить всю
систему целиком.&lt;br&gt;
&lt;br&gt;
Важная характеристика родных tpl-шаблонизаторов CMS – их
индивидуальность, т.к. в большинстве случаев они написаны для каждой
конкретной CMS. Каждый индивидуальный шаблонизатор требует от внедренца
предварительного изучения, и это увеличивает стоимость разработки.&lt;br&gt;
&lt;br&gt;
В итоге, Smarty на практике показывает себя как простой, привычный, но
не очень гибкий, нерасширяемый, слабо отчуждаемый от разработчика, к
тому же еще потенциально небезопасный. Эти недостатки всегда
сопутствуют смешению бизнес-логики и модели представления данных. И с
этой точки зрения, Smarty и ему подобные выступают антиподом технологии
XSLT, которая, собственно, и создавалась, для того чтобы все эти
недостатки устранить.&lt;br&gt;
&lt;br&gt;
&lt;h2&gt;10 аргументов в пользу XSLT&lt;/h2&gt;&lt;br&gt;
&lt;strong&gt;Надежность технологии&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
1) XSLT - это давно появившийся индустриальный стандарт, поддерживаемый
W3C. Он разрабатывается многочисленной командой профессиональных
разработчиков. Технология постоянно улучшается и обновляется за счет
качественной поддержки. Во всем мире XSLT уже давно воспринимается как
стандарт верстки, в России он используется на таких крупных проектах
как Яндекс, Мой Круг и других. &lt;br&gt;
&lt;strong&gt;&lt;br&gt;
Безопасность&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
2) Жесткое разделение бизнес-логики и модели представления данных ни
при каких обстоятельствах не позволит верстальщику «убить» всю систему,
если он имеет доступ только к шаблонам.&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Гибкость&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
3) XSLT позволяет повторно использовать результаты уже произведенной
работы. Единожды сверстанный на XSLT шаблон не держит на себе
функциональность бизнес-логики и ее отработки, поэтому он свободно
масштабируется и переносится на другие проекты. &lt;br&gt;
&lt;br&gt;
4) Для типовых операций достаточно создать шаблон только один раз и
использовать его из проекта в проект. Пример из практики:
студия-партнер получила заказ на разработку 3-х сайтов автосалона под
различные марки автомобилей. На создание первого сайта у нее ушло около
2-х месяцев, второй сайт с учетом новых доработок был разработан за 1
месяц, третий сайт был поднят за 2 недели. Благодаря тому, что
собственно технология уже сделана, сайты остается только «разукрасить»
(т.е. сменить дизайн). Единожды решенная задача, в следующий раз
требует в 2-3 раза меньше времени даже с внедрением новых функций. &lt;br&gt;
Доступность, понятность, невысокая стоимость разработки&lt;br&gt;
&lt;br&gt;
5) По нашему опыту, верстальщику, знакомому только с HTML и CSS, время
разработки проекта на XSLT с нуля составит в среднем около
месяца-полутора. При этом если он занимается изучением XSLT в отрыве от
других задач по проектам, то может освоить его за полторы недели. Для
сравнения – освоить tpl-шаблонизатор конкретной CMS такой же
верстальщик сможет в среднем за неделю, а освоение в процессе работы
над проектом займет у него тот же месяц. Но XSLT верстальщику нужно
освоить только один раз, а каждый отдельный tpl-шаблонизатор тянет за
собой отдельное изучение. Поэтому уже после разработки первого проекта
на XSLT можно говорить об экономии на этапе внедрения. &lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Отчуждаемость&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
6) Переработать чужой XSLT-шаблон может любой XSLT-верстальщик.
Технология является стандартной, переход от одного разработчика к
другому не представляет проблемы, что обеспечивает отчуждаемость
проекта и существенную экономию на стоимости владения проектом. &lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Расширяемость&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
7) Правка XSLT шаблона не предполагает вмешательства в бизнес-логику и
анализ структуры связей, которые могли бы использоваться в шаблоне будь
он на Smarty. Поэтому, например, изменения в бизнес-логике не приведет
к обрушению других шаблонов. В этом уже заложены возможности для
последовательного расширения, так как все связи структурированы и
поддаются модификации. Расширяемость при таком подходе становится
гораздо менее трудозатратной, и снова снижается стоимость владения
проектом.&lt;br&gt;
&lt;br&gt;
При нынешних требованиях заказчиков очень сложно представить проект,
который не потребует доработки и расширения в будущем. XSLT –это сейчас
наилучший стандарт, который позволяет предусмотреть развитие проекта и
закладывать возможности на перспективу.&lt;br&gt;
&lt;br&gt;
8) Некоторые задачи, решаемые в XML+XSLT просто и эффективно, представляются как минимум нетривиальными без XSLT.&lt;br&gt;
&lt;br&gt;
Например, с помощью XSLT можно строить децентрализованные сервисы (в
частности, популярный в контексте Веб 2.0 mash-up), можно использовать
для построения кластерных систем (конечно же, это не касается CMS).
Обмен контентом с другими ресурсами на основе XML-формата позволяет
использовать чужие сервисы на собственном сайте. При этом если этот
сторонний сервис «ляжет», то с сайтом ничего не произойдет – данные
могут браться из КЭШа какое-то время, а потом может перестать
отображаться именно этот сервис при остальной работоспособности сайта в
целом. Описанный выше подход Smarty благодаря развитым и
неструктурированным связям с великой долей вероятности поспособствует
тому, чтобы вместе с тем самым сторонним сервисом «лег» и весь сайт
целиком. &lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Нативная поддержка XML&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
9) Изобилие данных в формате XML, которые часто нужно использовать в
проекте, - это наша реальность. XSLT- шаблонизатор является «родным»
парсером для XML, а все остальные решения – «велосипед».&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;Производительность и скорость работы&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;
10) Один из «недостатков», которые ставятся некоторыми разработчиками в
«вину» XSLT - то, что он не может решить задачи бизнес-логики. Сложно
представить себе более абсурдное утверждение. В этом смысле накладывать
базу данных на XSLT и требовать высокой скорости работы – такой же
абсурд, как воспроизводить диск с поддержкой 5.1 через динамик обычного
телевизора и требовать при этом Dolby Surround. XSLT по определению не
должен этим заниматься, он создан только для того, чтобы реализовывать
представление. А вот бизнес-логика должна подготовить те данные,
которые ему нужны, чтобы отобразить страницу. И если она их подготовит,
то о скорости работы XSLT вопросов возникнуть не может, потому что
передавать нужно только то, что будет отображаться на странице (в
большинстве случаев 10-50 товаров). Если делать полное преобразование
базы на 10 тыс. товаров в XML, а потом на это накладывать
XSLT-трансформацию, то результаты производительности будут весьма
печальны. При этом будет полностью изнасилована концепция разделения
бизнес-логики и представления, на которой основан XSLT. Неудивительно,
что при подходе, &lt;a href=&quot;http://rizhikov.habrahabr.ru/blog/33728.html&quot;&gt;описанном&lt;/a&gt; у Сергея Рыжикова, он не покажет чудес производительности и скорости. &lt;br&gt;
&lt;br&gt;
&lt;h2&gt;О недостатках XSLT. &lt;/h2&gt;&lt;br&gt;
К сожалению, идеальных людей/продуктов/технологий не бывает. XSLT не исключение.&lt;br&gt;
&lt;br&gt;
Отладка шаблона на XSLT, если в нем допущена ошибка, может потребовать
от разработчика существенных усилий по ее нахождению и устранению. При
этом даже любой незакрытый тег ведет к неработоспособности всего
шаблона. Поэтому XSLT требует от разработчика особой тщательности,
аккуратности и внимательности к деталям. &lt;br&gt;
&lt;br&gt;
Другим ограничением по массовому использованию XSLT в России многие
называют существенно более высокий уровень заработной платы
XSLT-верстальщика по сравнению с HTML-верстальщиком. Отчасти это так,
но во многом ситуация нагнетена искусственно. В свое время, верстка на
дивах была такой же экзотикой, как сейчас многим представляется XSLT.
Но это не помешало ей получить широкое распространение благодаря
реальным преимуществам перед табличной версткой. И дефицит специалистов
по дивной верстке достаточно быстро восполнился на рынке. Поэтому
появление XSLT-верстальщиков – вопрос при времени при очевидном
превосходстве XSLT над другими существующими шаблонизаторами. &lt;br&gt;
&lt;br&gt;
&lt;h2&gt;Выводы. &lt;/h2&gt;&lt;br&gt;
Для начинающего разработчика разобраться с tpl-шаблонами часто проще.
Но на определенном этапе развития проекта использование XSLT становится
оправданным как с технологической, так и с экономической точки зрения.
Поэтому необходимо давать разработчикам выбор между tpl и XSLT. Но
самим разработчикам необходимо понимать, что прогресс неизбежен и
массовое распространение XSLT – это вопрос времени. Весь мир пошел этим
путем и игнорировать его не стоит. Поэтому чем раньше разработчики
начнут осваивать XSLT, тем больше денег заработают в будущем.</content:encoded>
			<link>https://hackandsecure.do.am/blog/reabilitacija_xml_xslt_tekhnologij/2010-08-20-11</link>
			<category>Лог</category>
			<dc:creator>sepos</dc:creator>
			<guid>https://hackandsecure.do.am/blog/reabilitacija_xml_xslt_tekhnologij/2010-08-20-11</guid>
			<pubDate>Fri, 20 Aug 2010 12:57:04 GMT</pubDate>
		</item>
		<item>
			<title>Smarty против XSLT</title>
			<description>Очень распространено&amp;nbsp;заблуждение о&amp;nbsp;том, что&amp;nbsp;xslt&amp;nbsp;— это&amp;nbsp;сплошные
тормоза, а&amp;nbsp;smarty&amp;nbsp;— наше всё. Отставим в&amp;nbsp;сторону&amp;nbsp;лаконичность
синтаксиса&amp;nbsp;смарти&amp;nbsp;и&amp;nbsp;удобство&amp;nbsp;поддержки&amp;nbsp;xslt, а&amp;nbsp;ус...</description>
			<content:encoded>Очень распространено&amp;nbsp;заблуждение о&amp;nbsp;том, что&amp;nbsp;xslt&amp;nbsp;— это&amp;nbsp;сплошные
тормоза, а&amp;nbsp;smarty&amp;nbsp;— наше всё. Отставим в&amp;nbsp;сторону&amp;nbsp;лаконичность
синтаксиса&amp;nbsp;смарти&amp;nbsp;и&amp;nbsp;удобство&amp;nbsp;поддержки&amp;nbsp;xslt, а&amp;nbsp;устремим наш пристальный
взор именно&amp;nbsp;на&amp;nbsp;скорость их&amp;nbsp;работы.&lt;br&gt;
&lt;br&gt;
Рисовать мы будем нечто&amp;nbsp;чуть более сложное чем «привет мир»&amp;nbsp;— дерево.
Это&amp;nbsp;не&amp;nbsp;даст нам использовать копипасту&amp;nbsp;и&amp;nbsp;заставит повторно&amp;nbsp;использовать
код для&amp;nbsp;вывода&amp;nbsp;узлов. Количество&amp;nbsp;их&amp;nbsp;пусть будет небольшим&amp;nbsp;— 100 штук.&lt;br&gt;
&lt;br&gt;
&lt;a name=&quot;habracut&quot;&gt;&lt;/a&gt;&lt;h1&gt;Создадим простенькую объектную модель данных.&lt;/h1&gt; &lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#3a00ff&quot;&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt; Thing &lt;font color=&quot;#009900&quot;&gt;{&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#3a00ff&quot;&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$color&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$shape&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$childs&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#990000&quot;&gt;array&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#3a00ff&quot;&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt; getArrayData&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;{&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$childs&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#990000&quot;&gt;array&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#b1b100&quot;&gt;foreach&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$this&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;childs&lt;/font&gt; &lt;font color=&quot;#b1b100&quot;&gt;as&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$child&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$childs&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;[&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;]&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$child&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;getArrayData&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$data&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#990000&quot;&gt;array&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;&apos;color&apos;&lt;/font&gt; &lt;font color=&quot;#339933&quot;&gt;=&amp;gt;&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$this&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;color&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;&apos;shape&apos;&lt;/font&gt; &lt;font color=&quot;#339933&quot;&gt;=&amp;gt;&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$this&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;shape&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;&apos;childs&apos;&lt;/font&gt; &lt;font color=&quot;#339933&quot;&gt;=&amp;gt;&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$childs&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#b1b100&quot;&gt;return&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$data&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#009900&quot;&gt;}&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#3a00ff&quot;&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt; getXMLData&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$doc&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;{&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$node&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$doc&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;createElement&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;thing&apos;&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$node&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;setAttribute&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;color&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$this&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;color&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$node&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;setAttribute&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;shape&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$this&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;shape&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#b1b100&quot;&gt;foreach&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$this&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;childs&lt;/font&gt; &lt;font color=&quot;#b1b100&quot;&gt;as&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$child&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$node&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;appendChild&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$child&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;getXMLData&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$doc&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#b1b100&quot;&gt;return&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$node&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#009900&quot;&gt;}&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#009900&quot;&gt;}&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
&lt;font color=&quot;#990000&quot;&gt;srand&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#cc66cc&quot;&gt;0&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#000088&quot;&gt;$things&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#990000&quot;&gt;array&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#000088&quot;&gt;$colors&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#990000&quot;&gt;array&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;red&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;green&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;blue&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;yellow&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;magenta&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;cyan&apos;&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#000088&quot;&gt;$shapes&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#990000&quot;&gt;array&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;circle&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;ellipse&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;oval&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;rectangle&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;triangle&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;star&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;rhombus&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;trapeze&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;exploit&lt;u&amp;gt;&apos;&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#b1b100&quot;&gt;for&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000088&quot;&gt;$i&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#cc66cc&quot;&gt;0&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;font color=&quot;#000088&quot;&gt;$i&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;&lt;&lt;/font&gt;&lt;font color=&quot;#cc66cc&quot;&gt;100&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;++&lt;/font&gt;&lt;font color=&quot;#000088&quot;&gt;$i&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;{&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$thing&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#3a00ff&quot;&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; Thing&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$thing&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;color&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$colors&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;[&lt;/font&gt; &lt;font color=&quot;#990000&quot;&gt;array_rand&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$colors&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;]&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$thing&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;shape&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$shapes&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;[&lt;/font&gt; &lt;font color=&quot;#990000&quot;&gt;array_rand&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$shapes&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;]&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#b1b100&quot;&gt;if&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$i&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;{&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$things&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;[&lt;/font&gt; &lt;font color=&quot;#990000&quot;&gt;array_rand&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#990000&quot;&gt;array_slice&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$things&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#cc66cc&quot;&gt;0&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#cc66cc&quot;&gt;10&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;]&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;childs&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;[&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;]&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$thing&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#009900&quot;&gt;}&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$things&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;[&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;]&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$thing&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#009900&quot;&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt; У
каждого&amp;nbsp;узла&amp;nbsp;есть два&amp;nbsp;метода: getArrayData возвращает поддерево&amp;nbsp;в&amp;nbsp;виде
структуры из&amp;nbsp;родных массивов, а&amp;nbsp;getXMLData возвращает DOM.&lt;br&gt;
&lt;br&gt;
Не сложно&amp;nbsp;измерить, что&amp;nbsp;составление DOM&amp;nbsp;требует примерно&amp;nbsp;в&amp;nbsp;3
раза&amp;nbsp;больше времени. Однако, это&amp;nbsp;всего-лишь
предварительная&amp;nbsp;обработка&amp;nbsp;данных.&lt;br&gt;
&lt;br&gt;
&lt;h1&gt;XSLT преобразование&lt;/h1&gt; &lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#000088&quot;&gt;$t1&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; getTime&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$doc&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#3a00ff&quot;&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; DOMDocument&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$data&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$things&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;[&lt;/font&gt;&lt;font color=&quot;#cc66cc&quot;&gt;0&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;]&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;getXMLData&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$doc&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#000088&quot;&gt;$t2&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; getTime&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$doc&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;appendChild&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$data&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$xsl&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#3a00ff&quot;&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; DOMDocument&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$xsl&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;load&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;tpl.xsl&apos;&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$proc&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#3a00ff&quot;&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; XSLTProcessor&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$proc&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;importStyleSheet&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$xsl&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#990000&quot;&gt;echo&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$proc&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;transformToXML&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$doc&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#000088&quot;&gt;$t3&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; getTime&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#009900&quot;&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&lt;xsl:stylesheet&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#000066&quot;&gt;xmlns:xsl&lt;/font&gt;=&lt;font color=&quot;#ff0000&quot;&gt;&quot;http://www.w3.org/1999/XSL/Transform&quot;&lt;/font&gt; &lt;font color=&quot;#000066&quot;&gt;version&lt;/font&gt;=&lt;font color=&quot;#ff0000&quot;&gt;&quot;1.0&quot;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#009900&quot;&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&lt;xsl:output&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#000066&quot;&gt;method&lt;/font&gt;=&lt;font color=&quot;#ff0000&quot;&gt;&quot;html&quot;&lt;/font&gt; &lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;/&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#009900&quot;&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&lt;xsl:template&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#000066&quot;&gt;match&lt;/font&gt;=&lt;font color=&quot;#ff0000&quot;&gt;&quot; thing &quot;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#009900&quot;&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&lt;div&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#000066&quot;&gt;style&lt;/font&gt;=&lt;font color=&quot;#ff0000&quot;&gt;&quot;color:{@color}&quot;&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#009900&quot;&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&lt;xsl:value-of&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#000066&quot;&gt;select&lt;/font&gt;=&lt;font color=&quot;#ff0000&quot;&gt;&quot; @color &quot;&lt;/font&gt; &lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;/&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#009900&quot;&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&lt;xsl:text&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&lt;/xsl:text&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#009900&quot;&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&lt;xsl:value-of&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#000066&quot;&gt;select&lt;/font&gt;=&lt;font color=&quot;#ff0000&quot;&gt;&quot; @shape &quot;&lt;/font&gt; &lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;/&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#009900&quot;&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&lt;/div&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#009900&quot;&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&lt;blockquote&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#009900&quot;&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&lt;xsl:apply-templates&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#000066&quot;&gt;select&lt;/font&gt;=&lt;font color=&quot;#ff0000&quot;&gt;&quot; thing &quot;&lt;/font&gt; &lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;/&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#009900&quot;&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&lt;/blockquote&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#009900&quot;&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&lt;/xsl:template&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#009900&quot;&gt;&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&lt;/xsl:stylesheet&lt;font color=&quot;#800000&quot;&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt; Результат: 3 + 5 = 8&lt;br&gt;
&lt;br&gt;
&lt;h1&gt;Smarty шаблонизация&lt;/h1&gt; &lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;ol&gt;&lt;li&gt;&lt;font color=&quot;#000088&quot;&gt;$t1&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; getTime&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$data&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$things&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;[&lt;/font&gt;&lt;font color=&quot;#cc66cc&quot;&gt;0&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;]&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;getArrayData&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font color=&quot;#000088&quot;&gt;$t2&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; getTime&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$smarty&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#3a00ff&quot;&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; Smarty&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$smarty&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;template_dir&lt;/font&gt; &lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;.&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$smarty&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;compile_dir&lt;/font&gt; &lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;.&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$smarty&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;assign&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;thing&apos;&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$data&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$smarty&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;display&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;tpl.smarty&apos;&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font color=&quot;#000088&quot;&gt;$t3&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; getTime&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;ol&gt;&lt;li&gt;&lt;font color=&quot;#d36900&quot;&gt;{&lt;/font&gt;function &lt;font color=&quot;#6a0a0a&quot;&gt;name&lt;/font&gt;&lt;font color=&quot;#d36900&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;&quot;proc&quot;&lt;/font&gt;&lt;font color=&quot;#d36900&quot;&gt;}&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font color=&quot;#009000&quot;&gt;&lt;div style=&quot;color:{$thing.color|escape}&quot;&amp;gt;&lt;/font&gt;&lt;font color=&quot;#d36900&quot;&gt;{&lt;/font&gt;&lt;font color=&quot;#00aaff&quot;&gt;$thing&lt;/font&gt;.&lt;font color=&quot;#006600&quot;&gt;color&lt;/font&gt;|escape&lt;font color=&quot;#d36900&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#d36900&quot;&gt;{&lt;/font&gt;&lt;font color=&quot;#00aaff&quot;&gt;$thing&lt;/font&gt;.&lt;font color=&quot;#006600&quot;&gt;shape&lt;/font&gt;|escape&lt;font color=&quot;#d36900&quot;&gt;}&lt;/font&gt;&lt;font color=&quot;#009000&quot;&gt;&lt;/div&amp;gt;&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font color=&quot;#009000&quot;&gt;&lt;blockquote&amp;gt;&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#d36900&quot;&gt;{&lt;/font&gt;&lt;font color=&quot;#0600ff&quot;&gt;foreach&lt;/font&gt; &lt;font color=&quot;#6a0a0a&quot;&gt;from&lt;/font&gt;&lt;font color=&quot;#d36900&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#00aaff&quot;&gt;$thing&lt;/font&gt;.&lt;font color=&quot;#006600&quot;&gt;childs&lt;/font&gt; &lt;font color=&quot;#6a0a0a&quot;&gt;item&lt;/font&gt;&lt;font color=&quot;#d36900&quot;&gt;=&lt;/font&gt;child&lt;font color=&quot;#d36900&quot;&gt;}&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#d36900&quot;&gt;{&lt;/font&gt;proc thing&lt;font color=&quot;#d36900&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#00aaff&quot;&gt;$child&lt;/font&gt;&lt;font color=&quot;#d36900&quot;&gt;}&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#d36900&quot;&gt;{&lt;/font&gt;&lt;font color=&quot;#d36900&quot;&gt;/&lt;/font&gt;&lt;font color=&quot;#0600ff&quot;&gt;foreach&lt;/font&gt;&lt;font color=&quot;#d36900&quot;&gt;}&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font color=&quot;#009000&quot;&gt;&lt;/blockquote&amp;gt;&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font color=&quot;#d36900&quot;&gt;{&lt;/font&gt;&lt;font color=&quot;#d36900&quot;&gt;/&lt;/font&gt;function&lt;font color=&quot;#d36900&quot;&gt;}&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font color=&quot;#d36900&quot;&gt;{&lt;/font&gt;proc thing&lt;font color=&quot;#d36900&quot;&gt;=&lt;/font&gt;&lt;font color=&quot;#00aaff&quot;&gt;$thing&lt;/font&gt;&lt;font color=&quot;#d36900&quot;&gt;}&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
Результат: 1 + 20 = 21&lt;br&gt;
______________________&lt;br&gt;
&lt;br&gt;
&lt;h1&gt;PHP быдлокод&lt;/h1&gt; &lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#000088&quot;&gt;$t1&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; getTime&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000088&quot;&gt;$data&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$things&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;[&lt;/font&gt;&lt;font color=&quot;#cc66cc&quot;&gt;0&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;]&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;font color=&quot;#004000&quot;&gt;getArrayData&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#000088&quot;&gt;$t2&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; getTime&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#b1b100&quot;&gt;include&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;&apos;tpl.php&apos;&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#000088&quot;&gt;$t3&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;=&lt;/font&gt; getTime&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;function akeurwbkurlycqvaelkuyrc( $data ){ ?&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;div style=&quot;color:&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;?=&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#990000&quot;&gt;htmlspecialchars&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000088&quot;&gt;$data&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;[&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&apos;color&apos;&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;]&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;?&gt;&lt;/b&gt;&lt;/font&gt;&quot;&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;?=&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#990000&quot;&gt;htmlspecialchars&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000088&quot;&gt;$data&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;[&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&apos;color&apos;&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;]&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;?&gt;&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;?=&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#990000&quot;&gt;htmlspecialchars&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000088&quot;&gt;$data&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;[&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&apos;shape&apos;&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;]&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;?&gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;blockquote&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;?&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#b1b100&quot;&gt;foreach&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$data&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;[&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;&apos;childs&apos;&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;]&lt;/font&gt; &lt;font color=&quot;#b1b100&quot;&gt;as&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$child&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt; akeurwbkurlycqvaelkuyrc&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$child&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;?&gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/blockquote&amp;gt;&lt;br&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;?&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;}&lt;/font&gt; akeurwbkurlycqvaelkuyrc&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$data&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt; Результат: 1 + 2 = 3&lt;br&gt;
&lt;br&gt;
&lt;h1&gt;Прочий код&lt;/h1&gt; &lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;font color=&quot;#3a00ff&quot;&gt;&lt;b&gt;function&lt;/b&gt;&lt;/font&gt; getTime&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;{&lt;/font&gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color=&quot;#b1b100&quot;&gt;return&lt;/font&gt; &lt;font color=&quot;#cc66cc&quot;&gt;1000&lt;/font&gt; &lt;font color=&quot;#339933&quot;&gt;*&lt;/font&gt; &lt;font color=&quot;#990000&quot;&gt;microtime&lt;/font&gt;&lt;font color=&quot;#009900&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#3a00ff&quot;&gt;&lt;b&gt;true&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#009900&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#339933&quot;&gt;;&lt;/font&gt;&lt;br&gt;
&lt;font color=&quot;#009900&quot;&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt; &lt;br&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color=&quot;black&quot;&gt;&lt;div style=&quot;position:absolute;top:0;right:0&quot;&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; preprocessing: &lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;?=&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$t2&lt;/font&gt; &lt;font color=&quot;#339933&quot;&gt;-&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$t1&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;?&gt;&lt;/b&gt;&lt;/font&gt;&lt;br/&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; templating: &lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;?=&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$t3&lt;/font&gt; &lt;font color=&quot;#339933&quot;&gt;-&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$t2&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;?&gt;&lt;/b&gt;&lt;/font&gt;&lt;br/&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; total: &lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;&lt;?=&lt;/b&gt;&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$t3&lt;/font&gt; &lt;font color=&quot;#339933&quot;&gt;-&lt;/font&gt; &lt;font color=&quot;#000088&quot;&gt;$t1&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;?&gt;&lt;/b&gt;&lt;/font&gt;&lt;br/&amp;gt;&lt;br&gt;
&lt;/div&amp;gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br&gt;
&lt;br&gt;
&lt;h1&gt;Тестовый стенд&lt;/h1&gt; php 5.3.1, libxml 2.7.3, libxsl 1.1.23, smarty 3 rc2&lt;br&gt;
&lt;br&gt;
&lt;h1&gt;Выводы&lt;/h1&gt; Компиляция&amp;nbsp;шаблонов&amp;nbsp;в&amp;nbsp;PHP вовсе не&amp;nbsp;гарантирует
производительности, в&amp;nbsp;то&amp;nbsp;время&amp;nbsp;как&amp;nbsp;работа&amp;nbsp;с&amp;nbsp;DOM не&amp;nbsp;сильно&amp;nbsp;и&amp;nbsp;медленней
нативной лапши.</content:encoded>
			<link>https://hackandsecure.do.am/blog/smarty_protiv_xslt/2010-08-20-10</link>
			<category>Лог</category>
			<dc:creator>sepos</dc:creator>
			<guid>https://hackandsecure.do.am/blog/smarty_protiv_xslt/2010-08-20-10</guid>
			<pubDate>Fri, 20 Aug 2010 12:45:38 GMT</pubDate>
		</item>
	</channel>
</rss>