<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>софт, хард &amp; интERнет</title>
	<atom:link href="https://www.all-x.net/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.all-x.net</link>
	<description>Личный опыт укрощения компьютеров</description>
	<lastBuildDate>Tue, 01 Mar 2016 08:32:53 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Меню &#171;Параметры разработчика&#187; в Android</title>
		<link>https://www.all-x.net/2016/03/01/android-developer/</link>
					<comments>https://www.all-x.net/2016/03/01/android-developer/#respond</comments>
		
		<dc:creator><![CDATA[allex]]></dc:creator>
		<pubDate>Tue, 01 Mar 2016 08:26:55 +0000</pubDate>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[android]]></category>
		<guid isPermaLink="false">http://www.all-x.net/?p=1190</guid>

					<description><![CDATA[<p>Все эти ваши интернеты забиты информацией о том, как включить меню &#171;Параметры разработчика&#187; в Android, но хоть бы кто упомянул, что если пользователь &#8212; Гость, то 7 тапов по пункту &#171;Номер сборки&#187; в меню &#171;Об устройстве&#187; не помогут. Всё самому делать приходится&#8230;&#187;</p>]]></description>
										<content:encoded><![CDATA[<p>Все эти ваши интернеты забиты информацией о том, как включить меню &#171;Параметры разработчика&#187; в Android, но хоть бы кто упомянул, что если пользователь &#8212; Гость, то 7 тапов по пункту &#171;Номер сборки&#187; в меню &#171;Об устройстве&#187; не помогут. Всё самому делать приходится&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.all-x.net/2016/03/01/android-developer/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Занудно про русский язык</title>
		<link>https://www.all-x.net/2014/05/18/localization/</link>
					<comments>https://www.all-x.net/2014/05/18/localization/#respond</comments>
		
		<dc:creator><![CDATA[allex]]></dc:creator>
		<pubDate>Sun, 18 May 2014 05:53:04 +0000</pubDate>
				<category><![CDATA[Программы]]></category>
		<guid isPermaLink="false">http://www.all-x.net/?p=1179</guid>

					<description><![CDATA[<p>Мы учили английский по компьютерным играм. Локализованных программ (приложений? к чему приложений?) тогда не было. К счастью. Потому что даже спустя 15 лет локализация (и это не какая-то поделка, а Microsoft Windows 7!) находится на таком уровне:</p>
<blockquote><p>Что следует знать перед выполнением установки Windows</p></blockquote>
<p>А что не позволило написать &#171;перед установкой Windows&#187;? Давайте уж сразу &#171;перед началом выполнения установки&#187;, великий и могучий всё стерпит.</p>
<blockquote><p>Чтобы обеспечить <em>корректную работу всех своих возможностей</em>, Windows может создать дополнительные разделы для системных файлов.
</p></blockquote>
<blockquote><p>Установка Windows не может быть выполнена в это местоположение.</p></blockquote>
<p>Неудивительно, что студенты в дипломах пишут:</p>
<blockquote><p>Настоящее время – это время больших вычислительных возможностей, но качество программного обеспечения часто подводит нас своими изъянами.</p></blockquote>&#187;]]></description>
										<content:encoded><![CDATA[<p>Мы учили английский по компьютерным играм. Локализованных программ (приложений? к чему приложений?) тогда не было. К счастью. Потому что даже спустя 15 лет локализация (и это не какая-то поделка, а Microsoft Windows 7!) находится на таком уровне:</p>
<blockquote><p>Что следует знать перед выполнением установки Windows</p></blockquote>
<p>А что не позволило написать &#171;перед установкой Windows&#187;? Давайте уж сразу &#171;перед началом выполнения установки&#187;, великий и могучий всё стерпит.</p>
<blockquote><p>Чтобы обеспечить <em>корректную работу всех своих возможностей</em>, Windows может создать дополнительные разделы для системных файлов.
</p></blockquote>
<blockquote><p>Установка Windows не может быть выполнена в это местоположение.</p></blockquote>
<p>Неудивительно, что студенты в дипломах пишут:</p>
<blockquote><p>Настоящее время – это время больших вычислительных возможностей, но качество программного обеспечения часто подводит нас своими изъянами.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://www.all-x.net/2014/05/18/localization/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Instagram: загрузка не удалась</title>
		<link>https://www.all-x.net/2014/05/01/instagram-download-failed/</link>
					<comments>https://www.all-x.net/2014/05/01/instagram-download-failed/#comments</comments>
		
		<dc:creator><![CDATA[allex]]></dc:creator>
		<pubDate>Thu, 01 May 2014 19:19:46 +0000</pubDate>
				<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Программы]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[instagram]]></category>
		<category><![CDATA[телефон]]></category>
		<category><![CDATA[фото]]></category>
		<guid isPermaLink="false">http://www.all-x.net/?p=1175</guid>

					<description><![CDATA[<p>После долгого перерыва попробовал загрузить фоточку из галереи в инстаграм. Множество попыток окончилось неудачей с лаконичным сообщением &#171;Загрузка не удалась&#187;. Гугл решения не дал, пришлось доходить самому. Попробовал лайкнуть фотку &#8212; появилось предложение ввести номер телефона, чтобы принять на него код верификации. После получения SMS и ввода кода чужие фотки стали лайкаться, а свои &#8212; загружаться. Если помогло &#8212; отметьтесь в комментах, плиз.&#187;</p>]]></description>
										<content:encoded><![CDATA[<p>После долгого перерыва попробовал загрузить фоточку из галереи в инстаграм. Множество попыток окончилось неудачей с лаконичным сообщением &#171;Загрузка не удалась&#187;. Гугл решения не дал, пришлось доходить самому. Попробовал лайкнуть фотку &#8212; появилось предложение ввести номер телефона, чтобы принять на него код верификации. После получения SMS и ввода кода чужие фотки стали лайкаться, а свои &#8212; загружаться. Если помогло &#8212; отметьтесь в комментах, плиз.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.all-x.net/2014/05/01/instagram-download-failed/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Баг в Chrome. Откуда взялся &#8212; ваша версия?</title>
		<link>https://www.all-x.net/2014/01/13/chrome/</link>
					<comments>https://www.all-x.net/2014/01/13/chrome/#comments</comments>
		
		<dc:creator><![CDATA[allex]]></dc:creator>
		<pubDate>Mon, 13 Jan 2014 05:55:23 +0000</pubDate>
				<category><![CDATA[Программы]]></category>
		<category><![CDATA[Chrome]]></category>
		<guid isPermaLink="false">http://www.all-x.net/?p=1166</guid>

					<description><![CDATA[<p><img src="https://www.all-x.net/wp-content/uploads/2014/01/chrome.png" alt="chrome" width="564" height="515" class="aligncenter size-full wp-image-1167" srcset="https://www.all-x.net/wp-content/uploads/ax/2014/01/chrome.png 564w, https://www.all-x.net/wp-content/uploads/ax/2014/01/chrome-164x150.png 164w, https://www.all-x.net/wp-content/uploads/ax/2014/01/chrome-300x273.png 300w" sizes="(max-width: 564px) 100vw, 564px" />&#187;</p>]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" src="https://www.all-x.net/wp-content/uploads/2014/01/chrome.png" alt="chrome" width="564" height="515" class="aligncenter size-full wp-image-1167" srcset="https://www.all-x.net/wp-content/uploads/ax/2014/01/chrome.png 564w, https://www.all-x.net/wp-content/uploads/ax/2014/01/chrome-164x150.png 164w, https://www.all-x.net/wp-content/uploads/ax/2014/01/chrome-300x273.png 300w" sizes="(max-width: 564px) 100vw, 564px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.all-x.net/2014/01/13/chrome/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Задачка про DOS</title>
		<link>https://www.all-x.net/2013/10/22/dos/</link>
					<comments>https://www.all-x.net/2013/10/22/dos/#comments</comments>
		
		<dc:creator><![CDATA[allex]]></dc:creator>
		<pubDate>Tue, 22 Oct 2013 17:36:31 +0000</pubDate>
				<category><![CDATA[Идеи]]></category>
		<category><![CDATA[Программы]]></category>
		<category><![CDATA[dos]]></category>
		<guid isPermaLink="false">http://www.all-x.net/?p=1160</guid>

					<description><![CDATA[<p>Жизнь подкинула задачку: надо загрузиться с CD в DOS (есть только COMMAND.COM) и запустить программу flash.exe из каталога BIOS:<br />
<code>C:\cd BIOS<br />
C:\BIOSflash.exe</code><br />
Беда в том, что на клавиатуре не работает буква S 🙂<br />
Я справился. Коллеги подсказали другое решение, но я его не проверял. А вам слабо?&#187;</p>]]></description>
										<content:encoded><![CDATA[<p>Жизнь подкинула задачку: надо загрузиться с CD в DOS (есть только COMMAND.COM) и запустить программу flash.exe из каталога BIOS:<br />
<code>C:\>cd BIOS<br />
C:\BIOS>flash.exe</code><br />
Беда в том, что на клавиатуре не работает буква S <img src="https://s.w.org/images/core/emoji/13.1.0/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br />
Я справился. Коллеги подсказали другое решение, но я его не проверял. А вам слабо?</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.all-x.net/2013/10/22/dos/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Софт в копилку</title>
		<link>https://www.all-x.net/2013/09/24/%d1%81%d0%be%d1%84%d1%82-%d0%b2-%d0%ba%d0%be%d0%bf%d0%b8%d0%bb%d0%ba%d1%83/</link>
					<comments>https://www.all-x.net/2013/09/24/%d1%81%d0%be%d1%84%d1%82-%d0%b2-%d0%ba%d0%be%d0%bf%d0%b8%d0%bb%d0%ba%d1%83/#respond</comments>
		
		<dc:creator><![CDATA[allex]]></dc:creator>
		<pubDate>Mon, 23 Sep 2013 21:31:22 +0000</pubDate>
				<category><![CDATA[Программы]]></category>
		<guid isPermaLink="false">http://www.all-x.net/?p=1155</guid>

					<description><![CDATA[<p><a href="http://www.rapidee.com">Rapid Environment Editor</a> &#8212; удобный редактор переменных окружения. Давно пользуюсь, очень облегчает жизнь.<br />
<a href="http://dmde.com">DM Disk Editor</a> &#8212; Norton Disk Editor помните? Римейк 🙂 Недавно нашел и очень рад.<br />
<a href="http://www.froggie.sk/">Vistalizator</a> &#8212; изменение языка интерфейса Windows даже тех редакций, которые этого не поддерживают.&#187;</p>]]></description>
										<content:encoded><![CDATA[<p><a href="http://www.rapidee.com">Rapid Environment Editor</a> &#8212; удобный редактор переменных окружения. Давно пользуюсь, очень облегчает жизнь.<br />
<a href="http://dmde.com">DM Disk Editor</a> &#8212; Norton Disk Editor помните? Римейк <img src="https://s.w.org/images/core/emoji/13.1.0/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Недавно нашел и очень рад.<br />
<a href="http://www.froggie.sk/">Vistalizator</a> &#8212; изменение языка интерфейса Windows даже тех редакций, которые этого не поддерживают.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.all-x.net/2013/09/24/%d1%81%d0%be%d1%84%d1%82-%d0%b2-%d0%ba%d0%be%d0%bf%d0%b8%d0%bb%d0%ba%d1%83/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Глубокая отладка или Минус на минус &#8212; это плюс, но только первый раз.</title>
		<link>https://www.all-x.net/2013/08/18/smw-debug/</link>
					<comments>https://www.all-x.net/2013/08/18/smw-debug/#respond</comments>
		
		<dc:creator><![CDATA[allex]]></dc:creator>
		<pubDate>Sun, 18 Aug 2013 10:27:43 +0000</pubDate>
				<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Разработка]]></category>
		<category><![CDATA[mediawiki]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[scribuntu]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[semantic mediawiki]]></category>
		<category><![CDATA[xdebug]]></category>
		<category><![CDATA[отладка]]></category>
		<guid isPermaLink="false">http://www.all-x.net/?p=1147</guid>

					<description><![CDATA[<p>Последнюю неделю провел в глубокой отладке <a href="http://semantic-mediawiki.org/">Semantic MediaWiki</a>. Очень непросто искать нетривиальную ошибку в незнакомой системе. Обычно бросаю довольно быстро, если не удаётся разобраться сходу. Но тут, что называется &#171;закусил удила&#187;. Попробовал несколько новых инструментов, немного разобрался с устройством Semantic MediaWiki и нашел причину странного поведения.</p>
<p>Всё началось с того, что понадобился удобный способ выполнять вычисления на страницах MediaWiki. Установил расширение <a href="http://www.mediawiki.org/wiki/Extension:Scribunto">Scribuntu</a>, немного почитал про <a href="http://www.lua.org/">Lua</a> и реализовал необходимые функции. Дальше началось странное &#8212; функция возвращает число, которое становится значением свойства. Все значения выводятся нормально за исключением <code>'1'</code> &#8212; вместо него появляется ссылка на совершенно непричастную страницу. Чудеса начались.<br />
<span id="more-1147"></span><br />
Задаю вопрос в списке рассылки, параллельно пытаюсь повторить неправильное поведение. В процессе выясняется, что в нашей wiki была страница <code>'1'</code>, которую затем переименовали в &#171;совершенно непричастную страницу&#187; без перенаправления с <code>'1'</code> на новую страницу. Из списка рассылки отвечают, что действительно, была такая ошибка и перенаправление в базе данных устанавливалось, даже если эта галочка при переименовании страницы была снята, надо проверить на последней версии.  </p>
<p>Устанавливаю <a href="http://www.mediawiki.org/">MediaWiki</a> последней версии. Пытаюсь повторить странное поведение &#8212; сначала всё в порядке, но после нескольких переименований значение свойства таки меняется.</p>
<p>Лезу в исходники и базу данных старой wiki &#8212; действительно, в исходниках проблема есть, перенаправления в базе данных установлены. Если бы я не успел попробовать на последней версии &#8212; успокоился бы. Но в последней версии-то ошибка исправлена, а с переименованиями всё равно что-то неладно!</p>
<p>После долгих поисков нашлась последовательность действий, приводящая к странному результату:</p>
<ul>
<li>cоздать страницу &#8216;1&#8217;</li>
<li>создать страницу &#8216;S&#8217; с определением подобъекта, имеющего свойство P=1</li>
<li>создать страницу &#8216;Q&#8217; с запросом, выводящим подобъект и его свойство.</li>
<li>переименовать &#8216;1&#8217; в &#8216;One без установки перенаправления</li>
<li>перейти на страницу &#8216;Q&#8217;</li>
<li>убедиться, что значение P по-прежнему 1</li>
<li>заново создать страницу 1 и переименовать её в &#8216;Two&#8217;</li>
<li>перейти на страницу &#8216;Q&#8217;</li>
<li>убедиться, что значение P изменилось на Two</li>
</ul>
<p>Чудеса продолжаются. Точно не знаю, какое поведение правильное, но оба варианта правильными быть не могут, значит ошибка точно есть!</p>
<p>Включаю MediaWiki debug toolbar:</p>
<p><code>$wgDebugToolbar = true;</code></p>
<p>И с помощью отладочной печати пытаюсь разобраться, что происходит. Когда надоело повторять одни и те же действия, установил <a href="http://docs.seleniumhq.org/">Selenium IDE</a> и записал скрипт &#8212; &#171;вкалывают роботы, счастлив человек&#187;.</p>
<p>Когда отладочной печати стало не хватать и появились мечты о нормальном отладчике PHP кода на удалённом веб-сервере, разобрался в вопросе, установил <a href="http://xdebug.org/">xdebug</a> и <a href="http://wiki.eclipse.org/PDT">Eclipse с PHP Development Tools</a>. Наставил себе точек останова и нашел, что после первого переименования страницы значение семантического свойства в таблице <code>smw_di_wikipage</code> тоже меняется, но по окончании транзакции этих изменений в базе данных нет! Оттрассировал все операции с этой таблицей и понял, что изменения откатываются с помощью задания на обновление информации о странице <code>'S'</code>, которое выполняется уже после обработки переименования страницы <code>'1'</code>, поэтому-то я его в отладчике и не поймал.</p>
<p>А почему же после второго переименования не произошло обновления страницы <code>'S'</code> и отката изменений в семантической информации? Оказывается, есть ещё поле <code>smw_proptable_hash</code> в таблице <code>smw_object_ids</code>, в котором хранится хэш сериализованного массива свойств. Перед обновлением свойств считается новый хэш и, если он совпадает со старым, изменения не записываются, потому что они уже в базе. В этом случае данные точно не соответствовали тому, что лежало в базе, а хэши были одинаковые.</p>
<p><strong>Вот и первая ошибка:</strong> при переименовании страницы таблица со значениями свойств изменяется, а её хэш не обновляется, поэтому и отката изменений не происходит &#8212; хэш не изменился, значит и изменений не было.</p>
<p>Но почему эта ошибка проявляется только при втором переименовании? А потому что</p>
<p><strong>Вторая ошибка:</strong> при сериализации массива свойств первый раз ключами в нём являются числа, а во втором и последующих &#8212; строковое представление этих чисел. Привет поклонникам динамической типизации!</p>
<p>Поэтому хэши как бы одинаковых массивов оказываются разными и изменения в семантическая информации откатываются, создавая иллюзию правильного поведения. А на самом деле просто компенсировались эффекты от двух ошибок. К счастью, только при первом переименовании, потому и удалось выловить их обе. Пойду писать баг-репорты.&#187;</p>]]></description>
										<content:encoded><![CDATA[<p>Последнюю неделю провел в глубокой отладке <a href="http://semantic-mediawiki.org/">Semantic MediaWiki</a>. Очень непросто искать нетривиальную ошибку в незнакомой системе. Обычно бросаю довольно быстро, если не удаётся разобраться сходу. Но тут, что называется &#171;закусил удила&#187;. Попробовал несколько новых инструментов, немного разобрался с устройством Semantic MediaWiki и нашел причину странного поведения.</p>
<p>Всё началось с того, что понадобился удобный способ выполнять вычисления на страницах MediaWiki. Установил расширение <a href="http://www.mediawiki.org/wiki/Extension:Scribunto">Scribuntu</a>, немного почитал про <a href="http://www.lua.org/">Lua</a> и реализовал необходимые функции. Дальше началось странное &#8212; функция возвращает число, которое становится значением свойства. Все значения выводятся нормально за исключением <code>'1'</code> &#8212; вместо него появляется ссылка на совершенно непричастную страницу. Чудеса начались.<br />
<span id="more-1147"></span><br />
Задаю вопрос в списке рассылки, параллельно пытаюсь повторить неправильное поведение. В процессе выясняется, что в нашей wiki была страница <code>'1'</code>, которую затем переименовали в &#171;совершенно непричастную страницу&#187; без перенаправления с <code>'1'</code> на новую страницу. Из списка рассылки отвечают, что действительно, была такая ошибка и перенаправление в базе данных устанавливалось, даже если эта галочка при переименовании страницы была снята, надо проверить на последней версии.  </p>
<p>Устанавливаю <a href="http://www.mediawiki.org/">MediaWiki</a> последней версии. Пытаюсь повторить странное поведение &#8212; сначала всё в порядке, но после нескольких переименований значение свойства таки меняется.</p>
<p>Лезу в исходники и базу данных старой wiki &#8212; действительно, в исходниках проблема есть, перенаправления в базе данных установлены. Если бы я не успел попробовать на последней версии &#8212; успокоился бы. Но в последней версии-то ошибка исправлена, а с переименованиями всё равно что-то неладно!</p>
<p>После долгих поисков нашлась последовательность действий, приводящая к странному результату:</p>
<ul>
<li>cоздать страницу &#8216;1&#8217;</li>
<li>создать страницу &#8216;S&#8217; с определением подобъекта, имеющего свойство P=1</li>
<li>создать страницу &#8216;Q&#8217; с запросом, выводящим подобъект и его свойство.</li>
<li>переименовать &#8216;1&#8217; в &#8216;One без установки перенаправления</li>
<li>перейти на страницу &#8216;Q&#8217;</li>
<li>убедиться, что значение P по-прежнему 1</li>
<li>заново создать страницу 1 и переименовать её в &#8216;Two&#8217;</li>
<li>перейти на страницу &#8216;Q&#8217;</li>
<li>убедиться, что значение P изменилось на Two</li>
</ul>
<p>Чудеса продолжаются. Точно не знаю, какое поведение правильное, но оба варианта правильными быть не могут, значит ошибка точно есть!</p>
<p>Включаю MediaWiki debug toolbar:</p>
<p><code>$wgDebugToolbar = true;</code></p>
<p>И с помощью отладочной печати пытаюсь разобраться, что происходит. Когда надоело повторять одни и те же действия, установил <a href="http://docs.seleniumhq.org/">Selenium IDE</a> и записал скрипт &#8212; &#171;вкалывают роботы, счастлив человек&#187;.</p>
<p>Когда отладочной печати стало не хватать и появились мечты о нормальном отладчике PHP кода на удалённом веб-сервере, разобрался в вопросе, установил <a href="http://xdebug.org/">xdebug</a> и <a href="http://wiki.eclipse.org/PDT">Eclipse с PHP Development Tools</a>. Наставил себе точек останова и нашел, что после первого переименования страницы значение семантического свойства в таблице <code>smw_di_wikipage</code> тоже меняется, но по окончании транзакции этих изменений в базе данных нет! Оттрассировал все операции с этой таблицей и понял, что изменения откатываются с помощью задания на обновление информации о странице <code>'S'</code>, которое выполняется уже после обработки переименования страницы <code>'1'</code>, поэтому-то я его в отладчике и не поймал.</p>
<p>А почему же после второго переименования не произошло обновления страницы <code>'S'</code> и отката изменений в семантической информации? Оказывается, есть ещё поле <code>smw_proptable_hash</code> в таблице <code>smw_object_ids</code>, в котором хранится хэш сериализованного массива свойств. Перед обновлением свойств считается новый хэш и, если он совпадает со старым, изменения не записываются, потому что они уже в базе. В этом случае данные точно не соответствовали тому, что лежало в базе, а хэши были одинаковые.</p>
<p><strong>Вот и первая ошибка:</strong> при переименовании страницы таблица со значениями свойств изменяется, а её хэш не обновляется, поэтому и отката изменений не происходит &#8212; хэш не изменился, значит и изменений не было.</p>
<p>Но почему эта ошибка проявляется только при втором переименовании? А потому что</p>
<p><strong>Вторая ошибка:</strong> при сериализации массива свойств первый раз ключами в нём являются числа, а во втором и последующих &#8212; строковое представление этих чисел. Привет поклонникам динамической типизации!</p>
<p>Поэтому хэши как бы одинаковых массивов оказываются разными и изменения в семантическая информации откатываются, создавая иллюзию правильного поведения. А на самом деле просто компенсировались эффекты от двух ошибок. К счастью, только при первом переименовании, потому и удалось выловить их обе. Пойду писать баг-репорты.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.all-x.net/2013/08/18/smw-debug/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Настройка кодировки отчётов webalizer в debian</title>
		<link>https://www.all-x.net/2013/08/09/webalizer-debian/</link>
					<comments>https://www.all-x.net/2013/08/09/webalizer-debian/#respond</comments>
		
		<dc:creator><![CDATA[allex]]></dc:creator>
		<pubDate>Fri, 09 Aug 2013 10:59:11 +0000</pubDate>
				<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Webalizer]]></category>
		<guid isPermaLink="false">http://www.all-x.net/?p=1145</guid>

					<description><![CDATA[<p>Что-то я привык, что в Linux пакеты работают сразу после установки, расслабился. Конечно, приходится, ковырять, но обычно это настройка под себя, а не что-то общее.<br />
<a href="http://www.webalizer.org">Webalizer</a> в Debian 7.1 меня слегка обидел. Во первых, кодировку UTF-8 для отчётов он не устанавливает, надо добавить строку в <code>/etc/webalizer/webalizer.conf</code>:<br />
<code>HTMLHead </code><br />
Работать оно начинает, вот только вставляется в отчёт эта строка дважды. А всё потому, что скрипт <code>/etc/cron.daily/webalizer</code> перебирает все конфиги в каталоге <code>/etc/webalizer</code> и запускает webalizer для каждого из них, передавая конфиг в командной строке. Но webalizer хитрый и после чтения переданного конфига читает <code>/etc/webalizer/webalizer.conf</code> в обязательном порядке. Поэтому для большей лучшести пришлось переименовать этот конфиг и всё заработало.&#187;</p>]]></description>
										<content:encoded><![CDATA[<p>Что-то я привык, что в Linux пакеты работают сразу после установки, расслабился. Конечно, приходится, ковырять, но обычно это настройка под себя, а не что-то общее.<br />
<a href="http://www.webalizer.org">Webalizer</a> в Debian 7.1 меня слегка обидел. Во первых, кодировку UTF-8 для отчётов он не устанавливает, надо добавить строку в <code>/etc/webalizer/webalizer.conf</code>:<br />
<code>HTMLHead <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"></code><br />
Работать оно начинает, вот только вставляется в отчёт эта строка дважды. А всё потому, что скрипт <code>/etc/cron.daily/webalizer</code> перебирает все конфиги в каталоге <code>/etc/webalizer</code> и запускает webalizer для каждого из них, передавая конфиг в командной строке. Но webalizer хитрый и после чтения переданного конфига читает <code>/etc/webalizer/webalizer.conf</code> в обязательном порядке. Поэтому для большей лучшести пришлось переименовать этот конфиг и всё заработало.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.all-x.net/2013/08/09/webalizer-debian/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Git через ssh на нестандартном порту (Windows/putty: unknown option -p)</title>
		<link>https://www.all-x.net/2013/07/18/git-putty/</link>
					<comments>https://www.all-x.net/2013/07/18/git-putty/#respond</comments>
		
		<dc:creator><![CDATA[allex]]></dc:creator>
		<pubDate>Thu, 18 Jul 2013 15:52:04 +0000</pubDate>
				<category><![CDATA[Инструменты]]></category>
		<category><![CDATA[Разработка]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">http://www.all-x.net/?p=1123</guid>

					<description><![CDATA[<p>При использовании git через ssh, который работает на нестандартном порту, команда типа</p>
<p><code>git clone ssh:user@host:port/path</code></p>
<p>вызывает ssh с параметром <code>-p port</code>. Но под Windows при использовании putty (точнее, plink) в качестве ssh возникает ошибка</p>
<p><code>plink: unknown option "-p"</code></p>
<p>потому что putty пошел своим путём и опция у него <code>-P</code>.</p>
<p>Самый простой способ решения: найти в файле plink.exe любым hex-редактором (я по старой памяти использовал <a href="http://www.hiew.ru">hiew</a>, достаточно демо-версии) эту опцию и исправить её: <code>-P --p (0x50 -0x70)</code> в двух местах (одно &#8212; разбор командной строки, второе &#8212; вывод подсказки).</p>
<p><img loading="lazy" src="https://www.all-x.net/wp-content/uploads/2013/07/putty-p.png" alt="patch putty -p option" width="556" height="176" class="aligncenter size-full wp-image-1126" srcset="https://www.all-x.net/wp-content/uploads/ax/2013/07/putty-p.png 556w, https://www.all-x.net/wp-content/uploads/ax/2013/07/putty-p-200x63.png 200w, https://www.all-x.net/wp-content/uploads/ax/2013/07/putty-p-300x94.png 300w" sizes="(max-width: 556px) 100vw, 556px" />&#187;</p>]]></description>
										<content:encoded><![CDATA[<p>При использовании git через ssh, который работает на нестандартном порту, команда типа</p>
<p><code>git clone ssh:user@host:port/path</code></p>
<p>вызывает ssh с параметром <code>-p port</code>. Но под Windows при использовании putty (точнее, plink) в качестве ssh возникает ошибка</p>
<p><code>plink: unknown option "-p"</code></p>
<p>потому что putty пошел своим путём и опция у него <code>-P</code>.</p>
<p>Самый простой способ решения: найти в файле plink.exe любым hex-редактором (я по старой памяти использовал <a href="http://www.hiew.ru">hiew</a>, достаточно демо-версии) эту опцию и исправить её: <code>-P -> -p (0x50 -> 0x70)</code> в двух местах (одно &#8212; разбор командной строки, второе &#8212; вывод подсказки).</p>
<p><img loading="lazy" src="https://www.all-x.net/wp-content/uploads/2013/07/putty-p.png" alt="patch putty -p option" width="556" height="176" class="aligncenter size-full wp-image-1126" srcset="https://www.all-x.net/wp-content/uploads/ax/2013/07/putty-p.png 556w, https://www.all-x.net/wp-content/uploads/ax/2013/07/putty-p-200x63.png 200w, https://www.all-x.net/wp-content/uploads/ax/2013/07/putty-p-300x94.png 300w" sizes="(max-width: 556px) 100vw, 556px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.all-x.net/2013/07/18/git-putty/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Semantic MediaWiki: неформатированный вывод функции ask</title>
		<link>https://www.all-x.net/2013/05/01/ask/</link>
					<comments>https://www.all-x.net/2013/05/01/ask/#respond</comments>
		
		<dc:creator><![CDATA[allex]]></dc:creator>
		<pubDate>Wed, 01 May 2013 12:21:49 +0000</pubDate>
				<category><![CDATA[Разработка]]></category>
		<category><![CDATA[mediawiki]]></category>
		<category><![CDATA[semantic mediawiki]]></category>
		<guid isPermaLink="false">http://www.all-x.net/?p=1111</guid>

					<description><![CDATA[<p>Semantic MediaWiki при выводе пытается форматировать числа в соответствии с языком интерфейса, используя подходящие разделители для тысячных разрядов и десятичной точки. Вернее, как раз для русского языка дробную часть отделяет запятая, тысячные разряды ничем не отделяются. Десятичная точка используется, например, для английского языка, а запятая отделяет тысячные разряды.</p>
<p>Это влияет на вывод значений свойств и результатов семантических запросов &#8212; функций <code>ask</code> и <code>show</code>. <a href="https://www.all-x.net/2013/04/23/mediawiki/">Разбираясь с этой системой</a> я довольно болезненно наступил на грабли.<br />
<span id="more-1111"></span><br />
Дело в том, что результат работы функций ask и show может использоваться для установки значения свойства:</p>
<p><code>[[NewProperty::{{#ask:[[Page]]&#124;?Property}}]]</code></p>
<p>Но числа, которые являются значениями свойств, должны быть представлены в неформатированном виде &#8212; с десятичной точкой и без разделителей тысячных разрядов. Поэтому вышеуказанная конструкция работает не при всех языках и не для всех чисел. Положение исправляет явное указание, что вывод функции форматировать не надо:</p>
<p><code>[[NewProperty::{{#ask:[[Page]]&#124;?Property#-}}]]</code></p>
<p>Однако указание формата работает далеко не со всеми <a href="https://semantic-mediawiki.org/wiki/Help:Result_formats">форматами вывода</a>. Например, при суммировании значений:</p>
<p><code>[[NewProperty::{{#ask:&#124;?Property#-&#124;format=sum}}]]</code></p>
<p> результат всегда выводится в форматированном виде. При разборе числа происходит ошибка и значение свойства не устанавливается.</p>
<p>Я нашел три решения этой проблемы, но одно из них не работает.</p>
<ol>
<li>Конструкция <code>{{formatnum: <em>number</em> &#124;R}}</code> <a href="http://www.mediawiki.org/wiki/Help:Magic_words#Formatting">должна бы из форматированного числа <em>number</em> делать неформатированное</a>. Но, насколько я понял, форматирование ожидается в локали по умолчанию, а не в текущей, поэтому не работает.
</li>
<li>Можно пропатчить файл <code>mediawiki/extensions/SemanticResultFormats/formats/math/SRF_Math.php</code>, чтобы воспринимались указания форматов. Там есть функция
<pre lang="php">protected function buildResult( SMWQueryResult $results ) {
    global $wgLang;
    return $wgLang-formatNum( $this-getResultText( $results, SMW_OUTPUT_HTML ) );
}
</pre>
<p>поведение которой можно сделать зависимым от формата:</p>
<pre lang="php">protected static function getFormat( SMWQueryResult $res ) {
        foreach( $res-getPrintRequests() as $request ) {   
            return $request-getOutputFormat();             
        }                                                   
}                                                           

protected function buildResult( SMWQueryResult $results ) {
    global $wgLang;
    if( self::getFormat( $results ) == '-' ) {
        return $this-getResultText( $results, SMW_OUTPUT_HTML );
    } else {
        return $wgLang-formatNum( $this-getResultText( $results, SMW_OUTPUT_HTML ) );
    }
}</pre>
<p>Но тут больше вопросов, чем ответов. В частном случае работает, но если суммирование идёт больше, чем по одной колонке, логика непонятна &#8212; какой формат учитывать?</p></li>
<li>Вообще не использовать суммирование средствами формата вывода. Вывести слагаемые в список со знаком сложения в качестве разделителя и вычислить полученное выражение с помощью <code>expr</code>. Никаких проблем:
<p><code>[[NewProperty::{{#expr: {{#ask: &#124;mainlabel=-&#124;?Property#=&#124;format=list&#124;sep=+}} }}]]</code>
</p></li>
</ol>&#187;]]></description>
										<content:encoded><![CDATA[<p>Semantic MediaWiki при выводе пытается форматировать числа в соответствии с языком интерфейса, используя подходящие разделители для тысячных разрядов и десятичной точки. Вернее, как раз для русского языка дробную часть отделяет запятая, тысячные разряды ничем не отделяются. Десятичная точка используется, например, для английского языка, а запятая отделяет тысячные разряды.</p>
<p>Это влияет на вывод значений свойств и результатов семантических запросов &#8212; функций <code>ask</code> и <code>show</code>. <a href="https://www.all-x.net/2013/04/23/mediawiki/">Разбираясь с этой системой</a> я довольно болезненно наступил на грабли.<br />
<span id="more-1111"></span><br />
Дело в том, что результат работы функций ask и show может использоваться для установки значения свойства:</p>
<p><code>[[NewProperty::{{#ask:[[Page]]|?Property}}]]</code></p>
<p>Но числа, которые являются значениями свойств, должны быть представлены в неформатированном виде &#8212; с десятичной точкой и без разделителей тысячных разрядов. Поэтому вышеуказанная конструкция работает не при всех языках и не для всех чисел. Положение исправляет явное указание, что вывод функции форматировать не надо:</p>
<p><code>[[NewProperty::{{#ask:[[Page]]|?Property#-}}]]</code></p>
<p>Однако указание формата работает далеко не со всеми <a href="https://semantic-mediawiki.org/wiki/Help:Result_formats">форматами вывода</a>. Например, при суммировании значений:</p>
<p><code>[[NewProperty::{{#ask:|?Property#-|format=sum}}]]</code></p>
<p> результат всегда выводится в форматированном виде. При разборе числа происходит ошибка и значение свойства не устанавливается.</p>
<p>Я нашел три решения этой проблемы, но одно из них не работает.</p>
<ol>
<li>Конструкция <code>{{formatnum: <em>number</em> |R}}</code> <a href="http://www.mediawiki.org/wiki/Help:Magic_words#Formatting">должна бы из форматированного числа <em>number</em> делать неформатированное</a>. Но, насколько я понял, форматирование ожидается в локали по умолчанию, а не в текущей, поэтому не работает.
</li>
<li>Можно пропатчить файл <code>mediawiki/extensions/SemanticResultFormats/formats/math/SRF_Math.php</code>, чтобы воспринимались указания форматов. Там есть функция
<pre lang="php">protected function buildResult( SMWQueryResult $results ) {
    global $wgLang;
    return $wgLang->formatNum( $this->getResultText( $results, SMW_OUTPUT_HTML ) );
}
</pre>
<p>поведение которой можно сделать зависимым от формата:</p>
<pre lang="php">protected static function getFormat( SMWQueryResult $res ) {
        foreach( $res->getPrintRequests() as $request ) {   
            return $request->getOutputFormat();             
        }                                                   
}                                                           

protected function buildResult( SMWQueryResult $results ) {
    global $wgLang;
    if( self::getFormat( $results ) == '-' ) {
        return $this->getResultText( $results, SMW_OUTPUT_HTML );
    } else {
        return $wgLang->formatNum( $this->getResultText( $results, SMW_OUTPUT_HTML ) );
    }
}</pre>
<p>Но тут больше вопросов, чем ответов. В частном случае работает, но если суммирование идёт больше, чем по одной колонке, логика непонятна &#8212; какой формат учитывать?</li>
<li>Вообще не использовать суммирование средствами формата вывода. Вывести слагаемые в список со знаком сложения в качестве разделителя и вычислить полученное выражение с помощью <code>expr</code>. Никаких проблем:
<p><code>[[NewProperty::{{#expr: {{#ask: |mainlabel=-|?Property#=|format=list|sep=+}} }}]]</code>
</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>https://www.all-x.net/2013/05/01/ask/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
