Pull to refresh
0
0
Евгений Стриго (Котов) @jameskotov

User

Send message
Уважаемый, простите за придирку к словам, но «помудомоечная машина» — это просто волшебно! :)
Хендмейд, говорите? )
Мне это напомнило о том авторе, который писал здесь цикл статей про изготовление микросхем в домашних условиях (не помню, к сожалению, его ник). Вот у него дома наверное как-то также все оборудовано )
На рабочем компе Windows 7 x64 — и вот я, как дурак, запускал виртуалку каждый раз, когда нужно было что-то сосканировать, а другого сканера рядом не было.

VueScan вам в помощь.
Расскажите, а что не так с интерфейсом видеомагнитофона?
Вот, в обзоре появилась HostCMS, спасибо )
Но неплохо бы еще указать, что у нее есть два демо-сайта:
один официальный, но без права редактирования demo.hostcms.ru/ логин и пароль demo
а второй неофициальный, с правами на редактирование, но живущий всего полчаса, форма создания здесь www.hostcmsblog.ru/demosites/
логин и пароль на создаваемые сайты — demo1
Среди систем общего назначения обошли вниманием hostcms :(
по слухам новая ревизия устройства уже производится с радиатором, к сожалению, подтвердить или опровергнуть эту информацию я не могу

Да, совершенно верно, новая ревизия уже с радиатором.
Не хватает фотографии автора статьи :-)
Google/Yandex/Bing не выдают одинаковые результаты кандидатам на вакансию и людям проводящим собеседование

Да-да, во всех крупных поисковиках сидят специально обученные люди, которые пишут алгоритмы, определяющие к какой категории относится автор поискового запроса и выдающие в зависимости от этого разные результаты! :-)
/* offtopic */

Развивая эту концепцию далее, мы приходим к мысли, что пейсхолдеры ...

Таки спасибо вам, вы обогатили мою речь новым расово верным словом! :-)
И кстати, отличная система!
Было бы интересно прочитать еще и ответ дизайнера :)
Прочитал сначала лсд вместо лдс.
Долго думал :)
Ну вообще-то еще есть такая штука как Google Minify — она объединяет и минифицирует и сжимает в gzip файлы «налету» при первом обращении к ним, и кеширует сжатый итоговый файл на диск и в дальнейшем отдает только его, пока какой-либо из исходных файлов не изменится.
В итоге вы работаете с отдельными неминифицированными и несжатыми файлами, а в браузер отдается один объединенный файл, минифицированный и сжатый.
У Google Minify есть плагины под некоторые распространенные CMS — например WordPress, Zend Framework, Yii, HostCMS, с остальными системами Minify можно использовать в чистом виде, с помощью входящего в комплект билдера
К активному? Какое же тут извлечение энергии, если выпрямитель активный? Имхо, КПД динамика в этом случае окажется значительно ниже мощности, потребляемой самим выпрямителем.
Был бы хорошо ввести какую-то разумную фильтрацию на возможные сочетания штекеров на разных концах кабеля.

Например, мне удалось с помощью плагина запросить кабель вида DVI-D — Миниджек 3,5. Автомагии, правда, не получилось, что соверешенно логично, но все же посоветовали обратиться к менеджерам :)

Было бы резонно, если бы после выбора, например, DVI-штекера на одном из концов кабеля, из вариантов для второго конца кабеля исчезли бы всякие расово неверные разъемы, типа джеков или BNC.
Если _действительно_ требуется целый миллион итераций в XSLT, то вероятнее всего имеет место быть некая серьезная ошибка в постороении системы.
Потому что в таком случае действительно единственно верный способ — это учесть такую потребность еще на этапе формирования документа. Тут я с вами совершенно согласен.
Рекурсия это более распростаненный метод организации цикла со счетчиком в XSLT.
Однако он же и более ресурсоемкий.

Метод Пиза позволяет избавиться от рекурсии и тем самым оптимизировать выполнение шаблона. При этом, надо учитывать, что в реальных задачах можно в качестве содержимого переменной $set использовать не набор узлов обрабатываемого XML-документа, а набор узлов самого шаблона, записав переменную как
<xsl:variable name="set" select="document('')//node()"/>
, и тогда наш цикл не будет зависеть от обрабатываемого документа.
(В данной, чисто условной задаче, это к сожалению, невозможно, из-за малого числа узлов в XSL-шаблоне цикл доходит только до 36. Но тут можно вспомнить о том, что каждый комментарий в шаблоне тоже считается узлом. Поэтому можно написать комментариев к каждой строке, и добить всеь шаблон пустыми комментариями в конце, чтобы цикл дошел до ста, пример ниже)

Ну и если уж совсем удариться в оптимизацию, то имеет смысл вынести деление в отдельные переменные и оптимизировать первое условие, проверяя в нем сначала делимость на 5 а потом только делимость на 3.

Тогда получится следующее:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="text" encoding="UTF-8"/>

	<!--Программа FizzBuzz-->

	<xsl:template match="/">

		<!--Выберем все узлы текущего документа-->
		<xsl:variable name="set" select="document('')//node()"/>

		<!--Создадим цикл со счетчиком-->
		<xsl:for-each select="$set[position() <= 100]">

			<!--Вычислим значение остатка от деления текущего числа на 5-->
			<xsl:variable name="mod5" select="position() mod 5"/>

			<!--Вычислим значение остатка от деления текущего числа на 3-->
			<xsl:variable name="mod3" select="position() mod 3"/>

			<!--Проверим выполение условий задачи-->
			<xsl:choose>

				<!--Если число кратно и пяти и трем то выведем "FizzBuzz"-->
				<xsl:when test="$mod5 = 0 and $mod3 = 0">FizzBuzz</xsl:when>

				<!--Если число кратно трем то выведем "Buzz"-->
				<xsl:when test="$mod3 = 0">Buzz</xsl:when>

				<!--Если число кратно пяти то выведем "Fizz"-->
				<xsl:when test="$mod5 = 0">Fizz</xsl:when>

				<!--Во всех остальных случаях выведем само число-->
				<xsl:otherwise>
					<xsl:value-of select="position()"/>
				</xsl:otherwise>
			</xsl:choose>

			<!--Выведем пробел-->
			<xsl:text> </xsl:text>

		</xsl:for-each>

	</xsl:template>
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- -->
 <!-- --> 
</xsl:stylesheet>

Да, это извращение чистой воды, но… на профайлере ваш способ выполняется примерно 0,0184 с, а мой — 0,0104 с. При этом глубина стека в вашем варианте составляет 301, а в моем — 4.
По-моему это профит, однозначно! :)

Ну то есть я понимаю что именно в данной задаче подобная оптимизация не имеет никакого практического смысла, но мои рассуждения вообще-то к тому, что не стоит всегда пользоваться только стандартными походами. В одном из проектов учет подобных нюансов серёзно облегчил жизнь серверу, а в конечном итоге и мне :-)
Вот XSLT здесь еще не было :) Поэтому вот он:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="text" encoding="UTF-8"/>

	<xsl:template match="/">
		<xsl:variable name="set" select="//node()"/>

		<xsl:for-each select="$set[position() <= 100]">
			<xsl:choose>
				<xsl:when test="position() mod 3 = 0 and position() mod 5 = 0">FizzBuzz</xsl:when>
				<xsl:when test="position() mod 5 = 0">Buzz</xsl:when>
				<xsl:when test="position() mod 3 = 0">Fizz</xsl:when>
				<xsl:otherwise>
					<xsl:value-of select="position()"/>
				</xsl:otherwise>
			</xsl:choose>
			<xsl:text> </xsl:text>
		</xsl:for-each>		
	</xsl:template>
</xsl:stylesheet>

Для краткости кода использован метод Пиза, поэтому число узлов в обрабатываемом xml должно быть не менее ста.
1

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity