<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://lib.custis.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=VitaliyFilippov</id>
		<title>CustisWiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="https://lib.custis.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=VitaliyFilippov"/>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/VitaliyFilippov"/>
		<updated>2026-05-14T06:06:10Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Replicate-from-custiswiki-to-all&amp;diff=43983</id>
		<title>Шаблон:Replicate-from-custiswiki-to-all</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Replicate-from-custiswiki-to-all&amp;diff=43983"/>
				<updated>2017-05-22T10:21:06Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;Шаблон для задания репликации статьи/шаблона/изображения во ВСЕ наши Wiki-системы.&lt;br /&gt;
&lt;br /&gt;
Включать следует '''только''' на действительно полезные везде вещи, типа пиктограмм, макросов интеграции с Bugzilla и т.п. На справку включать НЕ надо.&amp;lt;/noinclude&amp;gt;&amp;lt;div class=&amp;quot;replication-info&amp;quot;&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;i&amp;gt;Статья реплицируется в [[SMWiki]], [[SBWiki]], [[RDWiki]], [[GZWiki]], [[DPWiki]], [[HRWiki]], [[CBWiki]], [[ORWiki]], [[RAWiki]], [[ITWiki]], [[CRMWiki]], [[NordeaWiki]], [[EvolWiki]], [[TMSWiki]]&amp;lt;/i&amp;gt;&amp;lt;/small&amp;gt;.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:Джентльменский набор вики]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:WikiACutBegin&amp;diff=43870</id>
		<title>Шаблон:WikiACutBegin</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:WikiACutBegin&amp;diff=43870"/>
				<updated>2016-07-04T11:57:18Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;NavFrame new collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;NavHead&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;NavOpen&amp;quot; data-collapse=&amp;quot;▼&amp;quot; data-expand=&amp;quot;►&amp;quot;&amp;gt;►&amp;lt;/span&amp;gt; &amp;lt;b&amp;gt;{{{1}}}&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;NavContent&amp;quot;&amp;gt;&amp;lt;noinclude&amp;gt;{{replicate-from-custiswiki-to-all}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Категория:CustisWikiToLib]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=FeedOnFeeds&amp;diff=43747</id>
		<title>FeedOnFeeds</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=FeedOnFeeds&amp;diff=43747"/>
				<updated>2015-09-16T11:29:53Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[FeedOnFeeds]] («Лента Лент») — серверный многопользовательский [[RSS]] [[Файл:Rss16.png|link=]] и [[Atom]] [[Файл:Rss16.png|link=]] -агрегатор (веб-приложение).&lt;br /&gt;
&lt;br /&gt;
{{Box|{{warning}} Оригинальная версия мертва. Есть пара живых «форков» — наш и RomanSixty. В нашем форке упор на производительность + мелкие новые фичи, у RomanSixty из фич есть адаптивный расчёт времени обновления.}}&lt;br /&gt;
&lt;br /&gt;
* Репозиторий нашего форка: https://github.com/vitalif/FeedOnFeeds либо http://yourcmc.ru/git/summary/FeedOnFeeds.git&lt;br /&gt;
* Сайт старой версии: http://www.feedonfeeds.com/&lt;br /&gt;
* Язык разработки: [[rupedia:PHP|PHP]]&lt;br /&gt;
* Распространение: copyleft, opensource (лицензия [[rupedia:GNU General Public License|GPL]]).&lt;br /&gt;
&lt;br /&gt;
== Что такое агрегатор? ==&lt;br /&gt;
&lt;br /&gt;
RSS-агрегатор — клиентское или серверное приложение (обычно веб-приложение), автоматически следящее за множеством новостных потоков, обычно в форматах [[RSS]] или [[Atom]], и представляющее их объединённо в одном месте для удобного чтения.&lt;br /&gt;
&lt;br /&gt;
Чем глубже в &amp;lt;strike&amp;gt;лес&amp;lt;/strike&amp;gt;Веб 2.0, тем больше в сети порождается различных блогов, форумов и прочих потоков информации. Читать все их по отдельности неудобно, поэтому и появляются агрегаторы: [http://www.google.com/reader Google Reader], [http://lenta.yandex.ru ЯндексЛента] и т. п. Однако использовать такой агрегатор в корпоративной интранет-среде не представляется возможным: внутренние потоки информации обычно конфиденциальны и их нельзя делать доступными всем желающим через Интернет. Тут на помощь и приходит [[FeedOnFeeds|FoF]].&lt;br /&gt;
== Основные возможности ==&lt;br /&gt;
&lt;br /&gt;
* '''Многопользовательская среда''': каждый пользователь может иметь свой набор лент, которые читает.&lt;br /&gt;
* '''Перемешивание потоков''': записи всех выбранных лент отображаются в хронологическом порядке.&lt;br /&gt;
* '''Хранение истории''': все когда-либо встреченные записи сохраняются в базе данных, таким образом, история всегда в наличии.&lt;br /&gt;
* '''Теги (метки) лент''': возможность помечать ленты каким-либо словом, а потом читать наборы лент, выбираемые по признаку наличия этого слова.&lt;br /&gt;
* '''Теги (метки) записей''': аналогично лентам, записи также можно помечать тегами.&lt;br /&gt;
* '''Звёздочки''': простой маленький маркер [[File:star-on.gif]] для определения «избранных» записей. Список записей со звёздочкой также потом можно читать.&lt;br /&gt;
* '''Поиск''': по тексту сохранённых записей можно искать.&lt;br /&gt;
* '''Приватные ленты''': поддержка лент, защищаемых паролем с помощью HTTP [[wikipedia:Basic access authentication|Basic]] или [[wikipedia:Digest access authentication|Digest]]-авторизации — последняя, кстати, используется при чтении «подзамочных» записей в [http://www.livejournal.com/ ЖЖ].&lt;br /&gt;
* '''Обновление по команде''': кроме автоматического обновления, также поддерживается обновление по явной команде.&lt;br /&gt;
&lt;br /&gt;
== Отдельные фичи ==&lt;br /&gt;
&lt;br /&gt;
=== Поделись «интересным» ===&lt;br /&gt;
&lt;br /&gt;
Записи, отмеченные звёздочками ([[File:star-on.gif]]), можно выносить на общедоступную страницу вида &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;http://&amp;lt;адрес FoF&amp;gt;/shared.php?user=###&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; (где ### — ID пользователя). Причём, на эту страницу можно также подписываться через [[RSS]], а точнее, [[Atom]], а не только читать в браузере. С помощью этой фичи, вероятно, можно уйти в глубокую [[lurkmore:Рекурсия|рекурсию]], читая отфильтрованные кем-то записи, кто читает ваши отфильтрованные записи, и т. д. и т. п. А можно и нарожать своих «башиков», разделяя только юмор.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программирование]]&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;br /&gt;
{{replicate-from-custiswiki-to-4intranet}}&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Gnuplot&amp;diff=43726</id>
		<title>Gnuplot</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Gnuplot&amp;diff=43726"/>
				<updated>2015-09-01T11:56:25Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: Массовая правка: замена PCRE \n{3,}&amp;lt;noinclude&amp;gt;\[\[Category:Справка\]\]&amp;lt;/noinclude&amp;gt; на 

&amp;lt;noinclude&amp;gt;Category:Справка&amp;lt;/noinclude&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;enableheadshift&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Gnuplot'' командно-декларативная программ для рисования графиков. Может быть использована для отрисовки функций или просто наборов точек в двух- и трех- мерном пространстве.&lt;br /&gt;
Программа является свободно распространяемой.&lt;br /&gt;
&lt;br /&gt;
== Быстрый старт ==&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы нарисовать график в [[{{SITENAME}}]], достаточно указать набор команд в тэгах &lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;plot&amp;gt;...&amp;lt;/plot&amp;gt;&amp;lt;/nowiki&amp;gt;. Основные команды состоят из задания области определения функции (для одномерных графиков это переменная «x», для двухмерных «x», «y»), и команды отрисовки одномерной или двухмерной функции, заданной в символьном виде. &lt;br /&gt;
Синтаксис функции интуитивно понятен, «+», «-», «*», «/» обозначают стандартные арифметические операторы (умножение должно быть явным, никаких математических сокращений типа «3x» и т. п.), «**» означает возведение в степень, скобки &amp;quot;(&amp;quot;, «)» используются для задания приоритета.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;plot&amp;gt;&lt;br /&gt;
 set xrange [-5:+5]&lt;br /&gt;
 plot 3*x**4 + 4*x - 2/3&lt;br /&gt;
 &amp;lt;/plot&amp;gt;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;plot&amp;gt;&lt;br /&gt;
set xrange [-5:+5]  &lt;br /&gt;
plot 3*x**4+4*x-2/3&lt;br /&gt;
&amp;lt;/plot&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Кроме операторов, есть набор стандартных математических функций:&lt;br /&gt;
* Тригонометрические функции &amp;lt;tt&amp;gt;sin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;cos&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tan&amp;lt;/tt&amp;gt;, константа &amp;lt;tt&amp;gt;pi&amp;lt;/tt&amp;gt;, и им обратные &amp;lt;tt&amp;gt;asin&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;acos&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;atan&amp;lt;/tt&amp;gt;. &lt;br /&gt;
* Гиперболические функции &amp;lt;tt&amp;gt;sinh&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;cosh&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;tanh&amp;lt;/tt&amp;gt;. &lt;br /&gt;
* Экспонента &amp;lt;tt&amp;gt;exp&amp;lt;/tt&amp;gt; и натуральный и десятичный логарифмы: &amp;lt;tt&amp;gt;log&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;log10&amp;lt;/tt&amp;gt; соответственно.&lt;br /&gt;
&lt;br /&gt;
Чтобы нарисовать несколько графиков на одном листе, нужно перечислить их через запятую:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;plot&amp;gt;&lt;br /&gt;
 set xrange [0:+10]&lt;br /&gt;
 plot 3*log(x), 5*sin(x)&lt;br /&gt;
 &amp;lt;/plot&amp;gt;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;plot&amp;gt;&lt;br /&gt;
set xrange [0:+10]&lt;br /&gt;
plot 3*log(x), 5*sin(x)  &lt;br /&gt;
&amp;lt;/plot&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Трехмерные графики=== &lt;br /&gt;
Трехмерные графики рисуются аналогично, нужно задать диапазоны для области определения и использовать команду «splot»&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;plot&amp;gt;&lt;br /&gt;
 set xrange [-10:+10]&lt;br /&gt;
 set yrange [-10:+10]&lt;br /&gt;
 splot -x**3-y&lt;br /&gt;
 &amp;lt;/plot&amp;gt;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;plot&amp;gt;&lt;br /&gt;
set xrange [-10:+10]&lt;br /&gt;
set yrange [-10:+10]&lt;br /&gt;
splot -x**3-y  &lt;br /&gt;
&amp;lt;/plot&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Графики дискретных величин===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;plot&amp;gt;&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt '%Y-%m-%d'  &lt;br /&gt;
set xrange ['2008-09-01':'2008-09-30'] &lt;br /&gt;
set xzeroaxis   &lt;br /&gt;
set grid ytics&lt;br /&gt;
set style fill solid 1.0 noborder&lt;br /&gt;
set boxwidth 0.7 relative&lt;br /&gt;
unset key&lt;br /&gt;
set title 'SCRUM BURNDOWN CHART'&lt;br /&gt;
plot 'scrum.dat' using 1:2 with linespoints, 'ideal.dat' using 1:2 with linespoints&lt;br /&gt;
DATASET ideal  &lt;br /&gt;
2008-09-01  137&lt;br /&gt;
2008-09-30  0&lt;br /&gt;
ENDDATASET&lt;br /&gt;
DATASET scrum&lt;br /&gt;
2008-09-01  137&lt;br /&gt;
2008-09-02  110&lt;br /&gt;
2008-09-03  100&lt;br /&gt;
2008-09-04  85&lt;br /&gt;
2008-09-05  82&lt;br /&gt;
2008-09-06  80&lt;br /&gt;
2008-09-07  75&lt;br /&gt;
2008-09-08  72&lt;br /&gt;
2008-09-09  65&lt;br /&gt;
2008-09-20  30&lt;br /&gt;
2008-09-28  30&lt;br /&gt;
2008-09-29  20&lt;br /&gt;
2008-09-30  0&lt;br /&gt;
ENDDATASET&lt;br /&gt;
&amp;lt;/plot&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Продвинутым пользователям==&lt;br /&gt;
[[Gnuplot:Краткое введение]]&lt;br /&gt;
&lt;br /&gt;
==Cсылки==&lt;br /&gt;
&lt;br /&gt;
* {{Link-to-wikipedia}}&lt;br /&gt;
;Домашная страница проекта: http://www.gnuplot.info/&lt;br /&gt;
;Введение в Gnuplot (на английском языке):  http://www.cs.uni.edu/Help/gnuplot/&lt;br /&gt;
;Онлайн-документация: http://gnuplot.sourceforge.net/docs/gnuplot.html#plot&lt;br /&gt;
&lt;br /&gt;
[[Category:Gnuplot]]&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Справка]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D0%B8%D0%B7_OpenOffice_(MediaWiki)&amp;diff=43727</id>
		<title>Импорт документов из OpenOffice (MediaWiki)</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D0%B8%D0%B7_OpenOffice_(MediaWiki)&amp;diff=43727"/>
				<updated>2015-09-01T11:55:34Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: Массовая правка: замена PCRE \n+\[\[Категория:Справка\]\] на 
&amp;lt;noinclude&amp;gt;Category:Справка&amp;lt;/noinclude&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Неплохо зарекомендовала себя технология&lt;br /&gt;
http://www.activasoft.com/OpenOffice2MediaWiki&lt;br /&gt;
&lt;br /&gt;
Но проще использовать работающий под Mozilla Firefox Javascript-редактор &amp;lt;tt&amp;gt;WikEd&amp;lt;/tt&amp;gt;, который умеет конвертировать HTML-разметку, вставленную из Clipboard в MediaWiki-разметку.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Справка]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D1%82%D0%B0%D1%82%D0%B5%D0%B9_%D0%BF%D0%BE_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%83&amp;diff=43728</id>
		<title>Быстрое создание статей по шаблону</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D1%82%D0%B0%D1%82%D0%B5%D0%B9_%D0%BF%D0%BE_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%83&amp;diff=43728"/>
				<updated>2015-09-01T11:55:34Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: Массовая правка: замена PCRE \n+\[\[Категория:Справка\]\] на 
&amp;lt;noinclude&amp;gt;Category:Справка&amp;lt;/noinclude&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В нашей [[{{SITENAME}}]]  есть высокоэффективный способ порождать статьи в любой категории по  схожему шаблону.&lt;br /&gt;
Для этого, находясь в любой странице-категории надо  ввести название статьи в поле «Создать статью в данной категории» и  нажать на кнопку «Создать».&lt;br /&gt;
Тогда в статье уже будет содержаться  инструкция, приписывающая создаваемую статью к этой категории. &lt;br /&gt;
&lt;br /&gt;
Можно  больше — заполнить  создаваемую статью не только «инструкцией о категории» но и любым  произвольным блоком текста (шаблоном отчета, тест-кейса и т.п.).&lt;br /&gt;
Для  этого, для категории «XXX» нужно завести статью «Шаблон:Категория:XXX»,  и тогда ее содержимое будет подставляться при действии &lt;br /&gt;
 «Создать статью в данной категории».&lt;br /&gt;
См. например, [[:Категория:Тест-кейсы_(Bugzilla)]].&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Справка]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=WikiWiki&amp;diff=43724</id>
		<title>WikiWiki</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=WikiWiki&amp;diff=43724"/>
				<updated>2015-09-01T11:49:58Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: Массовая правка: замена Category:Справка на &amp;lt;noinclude&amp;gt;Category:Справка&amp;lt;/noinclude&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''WikiWiki''' (Вики) — гипертекстовая интернет-среда, предназначенная для коллективного редактирования, накопления и структуризации текстовой информации.&lt;br /&gt;
&lt;br /&gt;
[http://lib.custis.ru/images/6/65/Wiki-documenting.swf Здесь] можно просмотреть Flash-презентацию, поясняющую, что есть WikiWiki-технология, и каковы ее преимущества и недостатки.&lt;br /&gt;
&lt;br /&gt;
==Термин==&lt;br /&gt;
Название произошло от гавайского слова «wikiwiki» — «как можно быстрее». Концепция Вики отвечает тому, что первоначально задумывал Тим Бернерс-Ли (Tim Berners-Lee), изобретатель Всемирной Сети: доступность информации онлайн и возможность её быстрого изменения. По крайней мере, так он писал в своей книге «Weaving the Web». &lt;br /&gt;
&lt;br /&gt;
Основная идея вики-технологии — возможность редактирования статей множеством пользователей. Для реализации этой идеи разработаны специальные знаки, тэги, называемые «вики-синтаксисом». Разные движки используют разный синтаксис, но все они проще и удобнее HTML-разметки, применяемой в WWW. Это позволяет работать с ней даже тем, кто не проходил обучения вообще.&lt;br /&gt;
&lt;br /&gt;
'''Wiki''' (также '''WikiWiki''', '''WikiWikiWeb''' или '''WikiWeb'''), — это собрание интернет-страниц, которые можно не только читать, но и изменять онлайн. Как и в WWW, отдельные страницы и статьи соединены между собой ссылками. Для реализации вики-среды создаётся (или добывается уже существующее) подходящее для данных целей ПО — движок вики-сети (вики-движок).&lt;br /&gt;
&lt;br /&gt;
Возможность редактировать содержимое вики-сайта любым посетителем, с одной стороны, позволяет без труда накапливать и систематизировать информацию, но, с другой стороны, создаёт обширное поле для вандализма. Из-за последнего все вики-сайты используют технологию CVS, сохраняющую каждую версию документа. Если документ подвергается вандализму, пользователь вики может легко восстановить старую версию. Получается, что портить в Вики сложнее, чем исправлять. Программное обеспечение также позволяет ограничить доступ и права редактирования страниц Вики-среды до определённого круга пользователей.&lt;br /&gt;
&lt;br /&gt;
Таким образом, «Вики» («ВикиВики») это:&lt;br /&gt;
* Выражение, означающее «быстро»/ «ненапряжно» на Гавайском.&lt;br /&gt;
* Принципы ведения вебконтента:&lt;br /&gt;
** Простой язык разметки;&lt;br /&gt;
** Совместное редактирование множеством пользователей.&lt;br /&gt;
** Мгновенная публикация изменений;&lt;br /&gt;
** Версионность.&lt;br /&gt;
* Софт, используемый для этого.&lt;br /&gt;
* Вебсистема, на базе такого софта.&lt;br /&gt;
&lt;br /&gt;
==История==&lt;br /&gt;
Оригинальная система Wiki была изобретена Вардом Каннингемом. Она была создана для web-узла Pattern Languages Community с целью упростить совместное создание и документирование программных образцов.&lt;br /&gt;
&lt;br /&gt;
== Преимущества ==&lt;br /&gt;
=== Статьи/документы — это плоский текст ===&lt;br /&gt;
Преимущества «плоского» текста (текста, разбитого на строки):&lt;br /&gt;
* Редактируется в любом текстовом редакторе.&lt;br /&gt;
* Минимальный «вес» при хранении и пересылке по сети. &lt;br /&gt;
* Возможно автоматически определять изменения, что дает:&lt;br /&gt;
** Параллельное (совместное редактирование);&lt;br /&gt;
** Определение авторства каждой строчки;&lt;br /&gt;
** Автоматическое разрешение конфликтов;&lt;br /&gt;
** Экономная система контроля версий.&lt;br /&gt;
** Удобен для автоматической обработки.&lt;br /&gt;
&lt;br /&gt;
=== Простой язык разметки ===&lt;br /&gt;
&lt;br /&gt;
Стандартные языки разметки ([[SGML]], [[HTML]], [[LaTeX]]):&lt;br /&gt;
* Сложные для изучения (много элементов, нетривиальный синтаксис);&lt;br /&gt;
* Возможны трудноуловимые ошибки;&lt;br /&gt;
* Элементы разметки занимают существенный объем текста (высок «overhead»):&lt;br /&gt;
** Долго и трудно набивать текст;&lt;br /&gt;
** Текст плохо читаем с экрана.&lt;br /&gt;
Плоский текст c простой разметкой:&lt;br /&gt;
* Быстро пишется;&lt;br /&gt;
* Легко читается с экрана.&lt;br /&gt;
&lt;br /&gt;
=== Правка и публикация по месту ===&lt;br /&gt;
&lt;br /&gt;
Мгновенная публикация:&lt;br /&gt;
&lt;br /&gt;
* Для практически всех языков разметки, кроме [[HTML]], нет WYSIWYG-программ просмотра — необходима конвертация в DVI, PostScript, PDF, RTF или тот же HTML, что происходит небыстро.&lt;br /&gt;
* Публикация по месту позволяет вносить правки в процессе чтения материала (не нужно искать исходные тексты)&lt;br /&gt;
* Немедленная публикация позволяет сразу же проверить внесенные правки.&lt;br /&gt;
&lt;br /&gt;
=== Автоматическое построение ссылок ===&lt;br /&gt;
Автоматическая линковка:&lt;br /&gt;
&lt;br /&gt;
* Стандартные языки разметки ([[TeX]], [[LaTeX]], [[SGML]]) разделяют идентификаторы и названия структурных блоков (секций, глав, разделов), что:&lt;br /&gt;
*{{ok}} способствует строгой целостности;&lt;br /&gt;
*{{no}} Вносит большую «нагрузку» на внесение ссылки&lt;br /&gt;
* Идентификаторы=Названия=Заголовки&lt;br /&gt;
* Адаптивная линковка:&lt;br /&gt;
** «Опережающие» ссылки на несуществующие статьи;&lt;br /&gt;
** Перенаправления ссылок.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Централизованное хранение ===&lt;br /&gt;
&lt;br /&gt;
{{no}} При локальной обработке размеченной (HTML, XML, LaTeX, SGML) документации необходимо одновременно знать &lt;br /&gt;
* файловую структуру проекта (в каком файле что лежит);&lt;br /&gt;
* Идентификаторы разделов.&lt;br /&gt;
* Иметь систему синхронизации изменений от различных пользователей&lt;br /&gt;
&lt;br /&gt;
{{ok}} ВикиВики система сама обеспечивает&lt;br /&gt;
* централизованное хранение всех блоков текста («статей»)  &lt;br /&gt;
* идентификатор хранения=идентификатор ссылки=названию статьи.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Редактировать может каждый ===&lt;br /&gt;
* Никто не знает всего, но возможно собрать знания «с миру по нитке».&lt;br /&gt;
* Никто не застрахован от ошибки, но любой, заметив ошибку может легко ее исправить.&lt;br /&gt;
* Легче поддерживать актуальность документа — правка ошибки очень проста, а от непоправимого разрушения документа защищает контроль версий.&lt;br /&gt;
&lt;br /&gt;
==Недостатки==&lt;br /&gt;
;Редактировать может каждый:&lt;br /&gt;
:* Широкий круг допущенных — уязвимо, если есть злонамеренный вандал.&lt;br /&gt;
:* Информация может быть неверной:&lt;br /&gt;
:** Внесена ошибка — пока ошибки не заметят;&lt;br /&gt;
:** Статья написана некомпетентными участниками — неверно до появления специалиста.&lt;br /&gt;
&lt;br /&gt;
;Нет стандартной вики-разметки:&lt;br /&gt;
:* уже существует «вавилонская башня» близких, но различных вики-диалектов, &lt;br /&gt;
:* практически каждая вики-система использует свою разметку (или допускает несколько различных разметок).&lt;br /&gt;
&lt;br /&gt;
;Разметка не «адаптирована к компьютеру»: Мало программных библиотек стандартного разбора (parsing) документов (в отличие от [[XML]]/[[SGML]]/[[HTML]]).&lt;br /&gt;
&lt;br /&gt;
;Ограниченное использование возможностей верстки и полиграфии:&lt;br /&gt;
:* Шрифты;&lt;br /&gt;
:* Сложные страницы с полями;&lt;br /&gt;
:* Плавающие объекты и т. п.&lt;br /&gt;
:* Оптимальный кернинг и выравнивание пустых пространств.&lt;br /&gt;
&lt;br /&gt;
* Размыта ответственность за содержимое;&lt;br /&gt;
* Допустима ссылочная нецелостность.&lt;br /&gt;
&lt;br /&gt;
== Почему это работает? ==&lt;br /&gt;
* Совместное редактирование влечет совместную ответственность;&lt;br /&gt;
* Вырабатывает культуру обсуждений и поиска правильного решения;&lt;br /&gt;
* «Эффект взбивания сливок» — легкость редактирования многими участниками ведет к многократным итерациям, что улучшает качество текста.&lt;br /&gt;
* Легкость порождения статей способствует фиксации больших объемов знаний («главное — начать»).&lt;br /&gt;
&lt;br /&gt;
== Когда это не работает? ==&lt;br /&gt;
* Широкий круг допущенных к редактированию может привести к спаму и вандализму.&lt;br /&gt;
* Когда возникают неразрешимые противоречия между участниками&lt;br /&gt;
* «Невежественное большинство» может «продавить» неверную информацию.&lt;br /&gt;
* Некоторых расстраивает потеря авторства при правках других участников.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Документирование]]&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Справка]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Graphviz&amp;diff=43725</id>
		<title>Graphviz</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Graphviz&amp;diff=43725"/>
				<updated>2015-09-01T11:49:57Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: Массовая правка: замена Category:Справка на &amp;lt;noinclude&amp;gt;Category:Справка&amp;lt;/noinclude&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Graphviz''' — это разработанный специалистами лаборатории AT&amp;amp;T пакет утилит по автоматической визуализации графов, заданных в виде текстового описания. Пакет распространяется с открытыми исходными файлами и работает на всех операционных системах, включая Windows, Linux/Unix, Mac OS. Самой интересной программой пакета является «dot», автоматический визуализатор направленных графов, который принимает на вход текстовый файл со структурой графа, а на выходе формирует граф в виде графического, векторного или текстового файла.&lt;br /&gt;
&lt;br /&gt;
== Быстрый старт ==&lt;br /&gt;
&lt;br /&gt;
Входной файл для программы «DOT» является обычным текстовым файлом на специальном языке разметки графа. Структура файла очень простая, например,&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;graph&amp;gt;&lt;br /&gt;
 digraph G{ &lt;br /&gt;
  Рождение-&amp;gt;Юность-&amp;gt;Зрелость-&amp;gt;Старость-&amp;gt;Смерть;&lt;br /&gt;
  Юность-&amp;gt;Смерть;&lt;br /&gt;
  Зрелость-&amp;gt;Смерть;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/graph&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
на выходе будет&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt; &lt;br /&gt;
digraph G{&lt;br /&gt;
  graph[fontname=&amp;quot;Segoe UI&amp;quot;];&lt;br /&gt;
  Рождение-&amp;gt;Юность-&amp;gt;Зрелость-&amp;gt;Старость-&amp;gt;Смерть;&lt;br /&gt;
  Юность-&amp;gt;Смерть;&lt;br /&gt;
  Зрелость-&amp;gt;Смерть;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Программа «Dot» сама распознает все связи графа и упорядочит его таким образом, чтобы было наименьшее количество пересечений.&lt;br /&gt;
&lt;br /&gt;
Чтобы использовать «dot»-графы в [[{{SITENAME}}]], используйте следующий синтаксис:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{ &lt;br /&gt;
  Рождение-&amp;gt;Юность-&amp;gt;Зрелость-&amp;gt;Старость-&amp;gt;Смерть;&lt;br /&gt;
  Юность-&amp;gt;Смерть;&lt;br /&gt;
  Зрелость-&amp;gt;Смерть;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/graph&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если у вас узлы поименованы словосочетаниями, заключите их в кавычки, т. е.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
  &amp;quot;Полет фантазии&amp;quot;-&amp;gt;&amp;quot;Расход горючего&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/graph&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поздравляем! Теперь вы способны рисовать графы в [[{{SITENAME}}]]. Остальной текст будет посвящен некоторым тонкостям использования [[Graphviz]].&lt;br /&gt;
&lt;br /&gt;
== Внешний вид графа ==&lt;br /&gt;
«Dot» позволяет изменять внешний вид графа. Например, можно изменять форму фигур (прямоугольники, овалы, круги, параллелограммы, многоугольники), цвет и шрифт текста, цвет фона фигур, стиль стрелок и рамок фигур, подписи стрелок и т. д.&lt;br /&gt;
Итак, основные объектами являются узлы («node») и ребра («edge»). Для того, чтобы настроить свойства всех узлов или ребер нужно вначале использовать команды&lt;br /&gt;
 node[свойство1=&amp;quot;значение1&amp;quot;,свойство2=&amp;quot;значение2&amp;quot;,...]&lt;br /&gt;
 edge[свойство1=&amp;quot;значение1&amp;quot;,свойство2=&amp;quot;значение2&amp;quot;,...]&lt;br /&gt;
Также (в квадратных скобках после описания объекта) можно изменять настройки конкретного узла или ребра. Параметры графа, просто задаются в виде &amp;lt;tt&amp;gt;параметр=значение&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Полезно запомнить параметр «rankdir», он может быть «TB» (top-&amp;gt;bottom, параметр по умолчанию), или «LR» (left-&amp;gt;right), и определяет, сверху-вниз, или справа-налево, нужно располагать узлы графа. Вот пестрый пример:&lt;br /&gt;
&lt;br /&gt;
 digraph G{&lt;br /&gt;
  rankdir=LR;&lt;br /&gt;
  node[color=&amp;quot;red&amp;quot;,fontsize=14];&lt;br /&gt;
  edge[color=&amp;quot;darkgreen&amp;quot;,fontcolor=&amp;quot;blue&amp;quot;,fontsize=12];&lt;br /&gt;
  OPEN[shape=&amp;quot;rectangle&amp;quot;,style=&amp;quot;filled&amp;quot;,fillcolor=&amp;quot;lightgrey&amp;quot;];&lt;br /&gt;
  CLOSED[shape=&amp;quot;octagon&amp;quot;,label=&amp;quot;Финиш&amp;quot;];&lt;br /&gt;
  VERIFIED[shape=&amp;quot;rectangle&amp;quot;,style=&amp;quot;rounded&amp;quot;];&lt;br /&gt;
  OPEN-&amp;gt;RESOLVED-&amp;gt;VERIFIED-&amp;gt;CLOSED;&lt;br /&gt;
  OPEN-&amp;gt;CLOSED[style=&amp;quot;bold&amp;quot;];&lt;br /&gt;
  VERIFIED-&amp;gt;OPEN[label=&amp;quot;обнаружены ошибки&amp;quot;,style=&amp;quot;dashed&amp;quot;,arrowhead=&amp;quot;dot&amp;quot;];&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
на выходе будет&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
   rankdir=LR;&lt;br /&gt;
  node[color=&amp;quot;red&amp;quot;,fontsize=14];&lt;br /&gt;
  edge[color=&amp;quot;darkgreen&amp;quot;,fontcolor=&amp;quot;blue&amp;quot;,fontsize=12];&lt;br /&gt;
  OPEN[shape=&amp;quot;rectangle&amp;quot;,style=&amp;quot;filled&amp;quot;,fillcolor=&amp;quot;lightgrey&amp;quot;];&lt;br /&gt;
  CLOSED[shape=&amp;quot;octagon&amp;quot;,label=&amp;quot;Финиш&amp;quot;];&lt;br /&gt;
  VERIFIED[shape=&amp;quot;rectangle&amp;quot;,style=&amp;quot;rounded&amp;quot;];&lt;br /&gt;
  OPEN-&amp;gt;RESOLVED-&amp;gt;VERIFIED-&amp;gt;CLOSED;&lt;br /&gt;
  OPEN-&amp;gt;CLOSED[style=&amp;quot;bold&amp;quot;];&lt;br /&gt;
  VERIFIED-&amp;gt;OPEN[label=&amp;quot;обнаружены ошибки&amp;quot;,style=&amp;quot;dashed&amp;quot;,arrowhead=&amp;quot;dot&amp;quot;];&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если предполагается, что граф будут не только просматривать через IE, но и печатать, то необходимо установить ширину картинки, иначе при печати картинка будет обрезана. Для этого следует задать внутри описания &lt;br /&gt;
 size=&amp;quot;6.7,15&amp;quot;;&lt;br /&gt;
Существенна только первая цифра. Число 6.7 подобрано эмпирически, оно обеспечивает печать полной картинки при настройках IE по умолчанию.&lt;br /&gt;
&lt;br /&gt;
== Уровни в графах ==&lt;br /&gt;
&lt;br /&gt;
В «Dot» присутствует возможность связать узлы графа не только стрелками, но и уровнями отображения, что позволяет создавать шкалу и располагать узлы графа соответственно данной шкале. Для связывания используется следующая конструкция:&lt;br /&gt;
   { rank = same; &amp;quot;элемент уровня&amp;quot;; &amp;quot;элемент для привязки 1&amp;quot;; &amp;quot;элемент для привязки 2&amp;quot;; ..}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Например, при использовании следующей конструкции: &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;graph&amp;gt;&lt;br /&gt;
 digraph G{&lt;br /&gt;
   node[fontsize=9];&lt;br /&gt;
   { /* шкала месяцев*/&lt;br /&gt;
     node[shape=plaintext]; /* что бы не было видно рамок */&lt;br /&gt;
     edge[color=white] /* что бы не было видно стрелок */&lt;br /&gt;
     &amp;quot;март&amp;quot; -&amp;gt;  &amp;quot;июнь&amp;quot; -&amp;gt; &amp;quot;сентябрь&amp;quot; -&amp;gt; &amp;quot;декабрь&amp;quot;; &lt;br /&gt;
   }&lt;br /&gt;
   { rank = same; &amp;quot;март&amp;quot;; &amp;quot;весна&amp;quot;; &amp;quot;a&amp;quot;; }&lt;br /&gt;
   { rank = same; &amp;quot;июнь&amp;quot;; &amp;quot;лето&amp;quot;;}&lt;br /&gt;
   { rank = same; &amp;quot;сентябрь&amp;quot;; &amp;quot;осень&amp;quot;; &amp;quot;d&amp;quot;; }&lt;br /&gt;
   { rank = same; &amp;quot;декабрь&amp;quot;; &amp;quot;зима&amp;quot;; &amp;quot;e&amp;quot;}&lt;br /&gt;
   &amp;quot;весна&amp;quot; -&amp;gt; &amp;quot;лето&amp;quot; -&amp;gt; &amp;quot;осень&amp;quot; -&amp;gt; &amp;quot;зима&amp;quot; -&amp;gt; &amp;quot;весна&amp;quot;&lt;br /&gt;
   &amp;quot;a&amp;quot; -&amp;gt; &amp;quot;b&amp;quot; -&amp;gt; &amp;quot;c&amp;quot; -&amp;gt; &amp;quot;d&amp;quot; -&amp;gt; &amp;quot;e&amp;quot; ;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/graph&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
на выходе получается:&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
   node[fontsize=9];&lt;br /&gt;
   { /* шкала месяцев*/&lt;br /&gt;
     node[shape=plaintext]; /* что бы не было видно рамок */&lt;br /&gt;
     edge[color=white] /* что бы не было видно стрелок */&lt;br /&gt;
     &amp;quot;март&amp;quot; -&amp;gt;  &amp;quot;июнь&amp;quot; -&amp;gt; &amp;quot;сентябрь&amp;quot; -&amp;gt; &amp;quot;декабрь&amp;quot;; &lt;br /&gt;
   }&lt;br /&gt;
   { rank = same; &amp;quot;март&amp;quot;; &amp;quot;весна&amp;quot;; &amp;quot;a&amp;quot;; }&lt;br /&gt;
   { rank = same; &amp;quot;июнь&amp;quot;; &amp;quot;лето&amp;quot;;}&lt;br /&gt;
   { rank = same; &amp;quot;сентябрь&amp;quot;; &amp;quot;осень&amp;quot;; &amp;quot;d&amp;quot;; }&lt;br /&gt;
   { rank = same; &amp;quot;декабрь&amp;quot;; &amp;quot;зима&amp;quot;; &amp;quot;e&amp;quot;}&lt;br /&gt;
   &amp;quot;весна&amp;quot; -&amp;gt; &amp;quot;лето&amp;quot; -&amp;gt; &amp;quot;осень&amp;quot; -&amp;gt; &amp;quot;зима&amp;quot; -&amp;gt; &amp;quot;весна&amp;quot;&lt;br /&gt;
   &amp;quot;a&amp;quot; -&amp;gt; &amp;quot;b&amp;quot; -&amp;gt; &amp;quot;c&amp;quot; -&amp;gt; &amp;quot;d&amp;quot; -&amp;gt; &amp;quot;e&amp;quot; ;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Многосекционный узлы ==&lt;br /&gt;
&lt;br /&gt;
Dot позволяет создавать многосекционные узлы при это каждая секция может быть поименована, и тогда ребра можно продоводить между секциями и узлами.&lt;br /&gt;
&lt;br /&gt;
Для включения режима многосекционности устанавливается атрибут узла shape.&lt;br /&gt;
 shape=record;&lt;br /&gt;
&lt;br /&gt;
Секции описываются в атрибуте label узла,  с помощью разделителя «|». Для именования секции ее имя указывается в &amp;lt;&amp;gt;. При описание ребра, исходящего или входящего в секцию, секция именуется следующим образом:&lt;br /&gt;
&lt;br /&gt;
 элемент:&amp;lt;имя_секции&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, из такого описания:&lt;br /&gt;
&lt;br /&gt;
 digraph structs {&lt;br /&gt;
   rankdir=HR;&lt;br /&gt;
   first [shape=record,label=&amp;quot;  x1\n all | { x21 | &amp;lt;f0&amp;gt; x22| x23} | x3&amp;quot; ];&lt;br /&gt;
   second [shape=record,label=&amp;quot; x22_1 | x22_2 | x22_3&amp;quot;];&lt;br /&gt;
   first:&amp;lt;f0&amp;gt; -&amp;gt; second;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Получается следующее:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
 digraph structs {&lt;br /&gt;
   rankdir=HR;&lt;br /&gt;
   first [shape=record,label=&amp;quot;  x1\n all | { x21 | &amp;lt;f0&amp;gt; x22| x23} | x3&amp;quot; ];&lt;br /&gt;
   second [shape=record,label=&amp;quot; x22_1 | x22_2 | x22_3&amp;quot;];&lt;br /&gt;
   first:&amp;lt;f0&amp;gt; -&amp;gt; second;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Гиперссылки на графах ==&lt;br /&gt;
&lt;br /&gt;
Можно использовать атрибут «URL», задавая относительные или абсолютные гиперссылки для узлов и ребер. Например&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;graph&amp;gt;&lt;br /&gt;
 digraph G {&lt;br /&gt;
     rankdir=LR;&lt;br /&gt;
            SGML [URL=&amp;quot;SGML&amp;quot;];&lt;br /&gt;
            HTML [URL=&amp;quot;HTML&amp;quot;];&lt;br /&gt;
            XML [URL=&amp;quot;XML&amp;quot;];&lt;br /&gt;
            XHTML [URL=&amp;quot;http://www.w3schools.com/xhtml/&amp;quot;];&lt;br /&gt;
    SGML-&amp;gt;HTML;&lt;br /&gt;
    SGML-&amp;gt;XML;&lt;br /&gt;
    HTML-&amp;gt;XHTML;&lt;br /&gt;
    XML-&amp;gt;XHTML;&lt;br /&gt;
    SGML-&amp;gt;XHTML[color=&amp;quot;red&amp;quot;,fontcolor=&amp;quot;blue&amp;quot;,label=&amp;quot;ссылка на Google&amp;quot;,URL=&amp;quot;http://www.google.com&amp;quot;];&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/graph&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
 digraph G {&lt;br /&gt;
     rankdir=LR;&lt;br /&gt;
            SGML [URL=&amp;quot;SGML&amp;quot;];&lt;br /&gt;
            HTML [URL=&amp;quot;HTML&amp;quot;];&lt;br /&gt;
            XML [URL=&amp;quot;XML&amp;quot;];&lt;br /&gt;
            XHTML [URL=&amp;quot;http://www.w3schools.com/xhtml/&amp;quot;];&lt;br /&gt;
    SGML-&amp;gt;HTML;&lt;br /&gt;
    SGML-&amp;gt;XML;&lt;br /&gt;
    HTML-&amp;gt;XHTML;&lt;br /&gt;
    XML-&amp;gt;XHTML;&lt;br /&gt;
    SGML-&amp;gt;XHTML[color=&amp;quot;red&amp;quot;,fontcolor=&amp;quot;blue&amp;quot;,label=&amp;quot;ссылка на Google&amp;quot;,URL=&amp;quot;http://www.google.com&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Кластеры в графах ==&lt;br /&gt;
&lt;br /&gt;
Программа «Dot» позволяет объединять узлы графов в кластеры для подчеркивания общности. &lt;br /&gt;
&lt;br /&gt;
Кластер описывается следующим синтаксисом:&lt;br /&gt;
 subgraph имя{&lt;br /&gt;
 свойство1 = &amp;quot;значение1&amp;quot;,свойство2=&amp;quot;значение2&amp;quot;,...&lt;br /&gt;
 узел1; &lt;br /&gt;
 узел2;&lt;br /&gt;
 ...&lt;br /&gt;
 }&lt;br /&gt;
При этом ''имя'' подграфа должно начинаться с префикса '''cluster''', иначе подграф не позволяет себя отобразить на экран(раскраска, контур, подпись, .. ).&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
&lt;br /&gt;
  digraph G {&lt;br /&gt;
   rankdir=LR;&lt;br /&gt;
   subgraph cluster0 {&lt;br /&gt;
        node [style=filled,color=white];&lt;br /&gt;
        style=filled;&lt;br /&gt;
        color=lightgrey;&lt;br /&gt;
        a0;&lt;br /&gt;
        a1&lt;br /&gt;
        label = &amp;quot;process #1&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   subgraph cluster1 {&lt;br /&gt;
        node [style=filled];&lt;br /&gt;
        b0;&lt;br /&gt;
        label = &amp;quot;process #2&amp;quot;;&lt;br /&gt;
        color=blue&lt;br /&gt;
   }&lt;br /&gt;
   start -&amp;gt; a0;&lt;br /&gt;
   start -&amp;gt; b0;&lt;br /&gt;
   a0 -&amp;gt; a1 -&amp;gt; end;&lt;br /&gt;
   b0 -&amp;gt; end;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
 digraph G {&lt;br /&gt;
   rankdir=LR;&lt;br /&gt;
   subgraph cluster0 {&lt;br /&gt;
        node [style=filled,color=white];&lt;br /&gt;
        style=filled;&lt;br /&gt;
        color=lightgrey;&lt;br /&gt;
        a0;&lt;br /&gt;
        a1&lt;br /&gt;
        label = &amp;quot;process #1&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   subgraph cluster1 {&lt;br /&gt;
        node [style=filled];&lt;br /&gt;
        b0;&lt;br /&gt;
        label = &amp;quot;process #2&amp;quot;;&lt;br /&gt;
        color=blue&lt;br /&gt;
   }&lt;br /&gt;
   start -&amp;gt; a0;&lt;br /&gt;
   start -&amp;gt; b0;&lt;br /&gt;
   a0 -&amp;gt; a1 -&amp;gt; end;&lt;br /&gt;
   b0 -&amp;gt; end;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Цвета ===&lt;br /&gt;
Graphviz позволяет использовать широкую цветовую палитру,&lt;br /&gt;
задавая цвета или по именам, в одной из известных палитр:&lt;br /&gt;
* [http://www.graphviz.org/content/color-names#x11 Палитра X11]&lt;br /&gt;
* [http://www.graphviz.org/content/color-names#svg SVG]&lt;br /&gt;
&lt;br /&gt;
* [http://www.graphviz.org/content/color-names#brewer Набор палитр Brewer-а], что удобно при автоматической генерации схем — задаваемые числовым индексом цвета в более-менее вменяемой палитре.&lt;br /&gt;
&lt;br /&gt;
Кроме именованных цветов, можно использовать обычное трехбайтное шестнадцатиричное кодирование&lt;br /&gt;
 color=&amp;quot;#FF0EDD&amp;quot;&lt;br /&gt;
и выбирать цвета из палитры, например, на http://www.colorpicker.com/&lt;br /&gt;
&lt;br /&gt;
==== Цвета и черно-белая печать ====&lt;br /&gt;
&lt;br /&gt;
Graphviz позволяет использовать широкую цветовую палитру, однако, стоит не забывать, что контрастно выглядящие на цветном мониторе цвета, могут быть совершенно неразличимы после черно-белой печати. После проделанных экспериментов ({{Bug|11015}}), можно рекомендовать следующие палитры цветов (иллюстрированы на цвете ребер графа):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph-print&amp;gt;&lt;br /&gt;
digraph G{ rankdir=TB; size=&amp;quot;7,6&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 Палитра1-&amp;gt;goldenrod1 [color=goldenrod1]&lt;br /&gt;
 Палитра1-&amp;gt;green [color=green]&lt;br /&gt;
 Палитра1-&amp;gt;sienna4 [color=sienna4]&lt;br /&gt;
 Палитра1-&amp;gt;red1 [color=red1]&lt;br /&gt;
 Палитра1-&amp;gt;blue2 [color=blue2]&lt;br /&gt;
&lt;br /&gt;
 Палитра2-&amp;gt;lightcyan2 [color=lightcyan2]&lt;br /&gt;
 Палитра2-&amp;gt;pink2 [color=pink2]&lt;br /&gt;
 Палитра2-&amp;gt;green [color=green]&lt;br /&gt;
 Палитра2-&amp;gt;sienna4 [color=sienna4]&lt;br /&gt;
 Палитра2-&amp;gt;red2 [color=red2]&lt;br /&gt;
 Палитра2-&amp;gt;black1 [color=black1]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/graph-print&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Формы вершин ==&lt;br /&gt;
&lt;br /&gt;
Перечислим палитру возможных форм вершин (узлов).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;neato&amp;gt;&lt;br /&gt;
digraph G{  &lt;br /&gt;
 edge [arrowtail=&amp;quot;none&amp;quot;]&lt;br /&gt;
 node [style=filled,  colorscheme=&amp;quot;brbg9&amp;quot;]; &lt;br /&gt;
 &lt;br /&gt;
 &amp;quot;box&amp;quot;      [shape=&amp;quot;box&amp;quot;      fillcolor=&amp;quot;1&amp;quot;];&lt;br /&gt;
 &amp;quot;polygon&amp;quot;  [shape=&amp;quot;polygon&amp;quot;      fillcolor=&amp;quot;2&amp;quot;];&lt;br /&gt;
 &amp;quot;ellipse&amp;quot;  [shape=&amp;quot;ellipse&amp;quot;      fillcolor=&amp;quot;3&amp;quot;];&lt;br /&gt;
 &amp;quot;circle&amp;quot;  [shape=&amp;quot;circle&amp;quot;      fillcolor=&amp;quot;4&amp;quot;];&lt;br /&gt;
 &amp;quot;point&amp;quot;  [shape=&amp;quot;point&amp;quot;      fillcolor=&amp;quot;black&amp;quot;];&lt;br /&gt;
 &amp;quot;egg&amp;quot;  [shape=&amp;quot;egg&amp;quot;      fillcolor=&amp;quot;6&amp;quot;];&lt;br /&gt;
 &amp;quot;triangle&amp;quot;  [shape=&amp;quot;triangle&amp;quot;      fillcolor=&amp;quot;7&amp;quot;];&lt;br /&gt;
 &amp;quot;plaintext&amp;quot;  [shape=&amp;quot;plaintext&amp;quot;      fillcolor=&amp;quot;8&amp;quot;];&lt;br /&gt;
 &amp;quot;diamond&amp;quot;  [shape=&amp;quot;diamond&amp;quot;      fillcolor=&amp;quot;9&amp;quot;];&lt;br /&gt;
 &amp;quot;trapezium&amp;quot;  [shape=&amp;quot;trapezium&amp;quot;      fillcolor=&amp;quot;1&amp;quot;];&lt;br /&gt;
 &amp;quot;parallelogram&amp;quot;  [shape=&amp;quot;parallelogram&amp;quot;      fillcolor=&amp;quot;2&amp;quot;];&lt;br /&gt;
 &amp;quot;house&amp;quot;  [shape=&amp;quot;house&amp;quot;      fillcolor=&amp;quot;3&amp;quot;];&lt;br /&gt;
  &amp;quot;pentagon&amp;quot;  [shape=&amp;quot;pentagon&amp;quot;      fillcolor=&amp;quot;4&amp;quot;];&lt;br /&gt;
 &amp;quot;hexagon&amp;quot;  [shape=&amp;quot;hexagon&amp;quot;      fillcolor=&amp;quot;5&amp;quot;];&lt;br /&gt;
 &amp;quot;septagon&amp;quot;  [shape=&amp;quot;septagon&amp;quot;      fillcolor=&amp;quot;6&amp;quot;];&lt;br /&gt;
 &amp;quot;octagon&amp;quot;  [shape=&amp;quot;octagon&amp;quot;      fillcolor=&amp;quot;7&amp;quot;];&lt;br /&gt;
 &amp;quot;doublecircle&amp;quot;  [shape=&amp;quot;doublecircle&amp;quot;      fillcolor=&amp;quot;8&amp;quot;];&lt;br /&gt;
 &amp;quot;doubleoctagon&amp;quot;  [shape=&amp;quot;doubleoctagon&amp;quot;      fillcolor=&amp;quot;9&amp;quot;];&lt;br /&gt;
 &amp;quot;tripleoctagon&amp;quot;  [shape=&amp;quot;tripleoctagon&amp;quot;      fillcolor=&amp;quot;1&amp;quot;];&lt;br /&gt;
 &amp;quot;invtriangle&amp;quot;  [shape=&amp;quot;invtriangle&amp;quot;      fillcolor=&amp;quot;1&amp;quot;];&lt;br /&gt;
 &amp;quot;invtrapezium&amp;quot;  [shape=&amp;quot;invtrapezium&amp;quot;      fillcolor=&amp;quot;2&amp;quot;];&lt;br /&gt;
 &amp;quot;invhouse&amp;quot;  [shape=&amp;quot;invhouse&amp;quot;      fillcolor=&amp;quot;3&amp;quot;];&lt;br /&gt;
 &amp;quot;Mdiamond&amp;quot;  [shape=&amp;quot;Mdiamond&amp;quot;      fillcolor=&amp;quot;4&amp;quot;];&lt;br /&gt;
 &amp;quot;Msquare&amp;quot;  [shape=&amp;quot;Msquare&amp;quot;      fillcolor=&amp;quot;5&amp;quot;];&lt;br /&gt;
 &amp;quot;Mcircle&amp;quot;  [shape=&amp;quot;Mcircle&amp;quot;      fillcolor=&amp;quot;6&amp;quot;];&lt;br /&gt;
 &amp;quot;rect/rectangle&amp;quot;  [shape=&amp;quot;rect&amp;quot;      fillcolor=&amp;quot;7&amp;quot;];&lt;br /&gt;
 &amp;quot;none&amp;quot;  [shape=&amp;quot;none&amp;quot;      fillcolor=&amp;quot;8&amp;quot;];&lt;br /&gt;
 &amp;quot;note&amp;quot;  [shape=&amp;quot;note&amp;quot;      fillcolor=&amp;quot;9&amp;quot;];&lt;br /&gt;
 &amp;quot;tab&amp;quot;  [shape=&amp;quot;tab&amp;quot;      fillcolor=&amp;quot;1&amp;quot;];&lt;br /&gt;
 &amp;quot;folder&amp;quot;  [shape=&amp;quot;folder&amp;quot;      fillcolor=&amp;quot;2&amp;quot;];&lt;br /&gt;
 &amp;quot;box3d&amp;quot;  [shape=&amp;quot;box3d&amp;quot;      fillcolor=&amp;quot;3&amp;quot;];&lt;br /&gt;
 &amp;quot;component&amp;quot;  [shape=&amp;quot;component&amp;quot;      fillcolor=&amp;quot;4&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/neato&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Окончания ребер ==&lt;br /&gt;
Можно задавать стиль офомления начала («arrowtail») и конца («arrowhead») дуг (ребер):&lt;br /&gt;
&lt;br /&gt;
{{Warning}} Чтобы работал arrowtail, для ребра нужно указать свойство '''dir=both''' или '''dir=back'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;circo&amp;gt;&lt;br /&gt;
digraph G{  &lt;br /&gt;
size=&amp;quot;6.7,15&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
 edge [arrowtail=&amp;quot;none&amp;quot;]&lt;br /&gt;
 A [label=&amp;quot;Arrowhead&amp;quot; style=filled fillcolor=&amp;quot;yellow&amp;quot;];&lt;br /&gt;
 &lt;br /&gt;
  A-&amp;gt;&amp;quot;normal&amp;quot; [arrowhead=&amp;quot;normal&amp;quot;];&lt;br /&gt;
  A-&amp;gt;&amp;quot;dot&amp;quot; [arrowhead=&amp;quot;dot&amp;quot;];&lt;br /&gt;
  A-&amp;gt;&amp;quot;odot&amp;quot; [arrowhead=&amp;quot;odot&amp;quot;];&lt;br /&gt;
   A-&amp;gt;&amp;quot;none&amp;quot; [arrowhead=&amp;quot;none&amp;quot;];&lt;br /&gt;
   A-&amp;gt;&amp;quot;empty&amp;quot; [arrowhead=&amp;quot;empty&amp;quot;];&lt;br /&gt;
   A-&amp;gt;&amp;quot;diamond&amp;quot; [arrowhead=&amp;quot;diamond&amp;quot;];&lt;br /&gt;
   A-&amp;gt;&amp;quot;ediamond&amp;quot; [arrowhead=&amp;quot;ediamond&amp;quot;];&lt;br /&gt;
   A-&amp;gt;&amp;quot;box&amp;quot; [arrowhead=&amp;quot;box&amp;quot;];&lt;br /&gt;
   A-&amp;gt;&amp;quot;open&amp;quot; [arrowhead=&amp;quot;open&amp;quot;];&lt;br /&gt;
   A-&amp;gt;&amp;quot;vee&amp;quot; [arrowhead=&amp;quot;vee&amp;quot;];&lt;br /&gt;
   A-&amp;gt;&amp;quot;inv&amp;quot; [arrowhead=&amp;quot;inv&amp;quot;];&lt;br /&gt;
   A-&amp;gt;&amp;quot;invdot&amp;quot; [arrowhead=&amp;quot;invdot&amp;quot;];&lt;br /&gt;
   A-&amp;gt;&amp;quot;invodot&amp;quot; [arrowhead=&amp;quot;invodot&amp;quot;];&lt;br /&gt;
   A-&amp;gt;&amp;quot;tee&amp;quot; [arrowhead=&amp;quot;tee&amp;quot;];&lt;br /&gt;
   A-&amp;gt;&amp;quot;invempty&amp;quot; [arrowhead=&amp;quot;invempty&amp;quot;];&lt;br /&gt;
   A-&amp;gt;&amp;quot;odiamond&amp;quot; [arrowhead=&amp;quot;odiamond&amp;quot;];&lt;br /&gt;
   A-&amp;gt;&amp;quot;crow&amp;quot; [arrowhead=&amp;quot;crow&amp;quot;];&lt;br /&gt;
   A-&amp;gt;&amp;quot;obox&amp;quot; [arrowhead=&amp;quot;obox&amp;quot;];&lt;br /&gt;
   A-&amp;gt;&amp;quot;halfopen&amp;quot; [arrowhead=&amp;quot;halfopen&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/circo&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Неориентированные графы ==&lt;br /&gt;
Наряду с рисованием ориентированных графов, есть несколько методов для автоматического рисования неориентированных графов (будем рассматривать их на примере несложной ER-диаграммы).&lt;br /&gt;
&lt;br /&gt;
В отличие от автоматического рисования направленных («directed») графов, основанных на ранговой модели, есть несколько подходов к раскладке ненаправленных графов.&lt;br /&gt;
&lt;br /&gt;
=== Graph ===&lt;br /&gt;
Ненаправленный граф можно нарисовать с помощью рангового подхода (несмотря на ненаправленность ребер) — будет использоваться программа «dot». Как это будет выглядеть для простой ER-диаграммы, можно увидеть ниже.&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
graph ER&lt;br /&gt;
{&lt;br /&gt;
  node [fontsize=12];&lt;br /&gt;
  node [shape=box]; course; institute; student;&lt;br /&gt;
  node [shape=ellipse];&lt;br /&gt;
  {node [label=&amp;quot;name&amp;quot;] name0; name1; name2;}&lt;br /&gt;
  code; grade; number;&lt;br /&gt;
 node [shape=diamond,style=filled,color=lightgrey];&lt;br /&gt;
  &amp;quot;C-I&amp;quot;; &amp;quot;S-C&amp;quot;; &amp;quot;S-I&amp;quot;;&lt;br /&gt;
 name0 -- course;&lt;br /&gt;
 code -- course;&lt;br /&gt;
 course -- &amp;quot;C-I&amp;quot; [label=&amp;quot;n&amp;quot;,len=1.00];&lt;br /&gt;
 &amp;quot;C-I&amp;quot; -- institute [label=&amp;quot;1&amp;quot;,len=1.00];&lt;br /&gt;
 institute -- name1;&lt;br /&gt;
 institute -- &amp;quot;S-I&amp;quot; [label=&amp;quot;1&amp;quot;,len=1.00];&lt;br /&gt;
 &amp;quot;S-I&amp;quot; -- student [label=&amp;quot;n&amp;quot;,len=1.00];&lt;br /&gt;
 student -- grade;&lt;br /&gt;
 student -- name2;&lt;br /&gt;
 student -- number;&lt;br /&gt;
 student -- &amp;quot;S-C&amp;quot; [label=&amp;quot;m&amp;quot;,len=1.00];&lt;br /&gt;
 &amp;quot;S-C&amp;quot; -- course [label=&amp;quot;n&amp;quot;,len=1.00];&lt;br /&gt;
  label = &amp;quot;\n\nEntity Relation Diagram\ndrawn by DOT&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очевидна неоптимальность такого подхода для неориентированных графов.&lt;br /&gt;
&lt;br /&gt;
=== Neato ===&lt;br /&gt;
&lt;br /&gt;
Метод «neato» использует «энергетическую» (''spring'') модель, по сути, близкую к методу искуственного отжига — начиная с некоторого состояния вершины перемещаются, чтобы минимизировать некую потенциальную энергию. Рекомендуем для ненаправленных графов общего вида.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;neato&amp;gt;&lt;br /&gt;
graph ER&lt;br /&gt;
{&lt;br /&gt;
 node [fontsize=12];&lt;br /&gt;
 node [shape=box]; course; institute; student;&lt;br /&gt;
  node [shape=ellipse];&lt;br /&gt;
  {node [label=&amp;quot;name&amp;quot;] name0; name1; name2;}&lt;br /&gt;
  code; grade; number;&lt;br /&gt;
 node [shape=diamond,style=filled,color=lightgrey];&lt;br /&gt;
  &amp;quot;C-I&amp;quot;; &amp;quot;S-C&amp;quot;; &amp;quot;S-I&amp;quot;;&lt;br /&gt;
 name0 -- course;&lt;br /&gt;
 code -- course;&lt;br /&gt;
 course -- &amp;quot;C-I&amp;quot; [label=&amp;quot;n&amp;quot;,len=1.00];&lt;br /&gt;
 &amp;quot;C-I&amp;quot; -- institute [label=&amp;quot;1&amp;quot;,len=1.00];&lt;br /&gt;
  institute -- name1;&lt;br /&gt;
  institute -- &amp;quot;S-I&amp;quot; [label=&amp;quot;1&amp;quot;,len=1.00];&lt;br /&gt;
 &amp;quot;S-I&amp;quot; -- student [label=&amp;quot;n&amp;quot;,len=1.00];&lt;br /&gt;
 student -- grade;&lt;br /&gt;
 student -- name2;&lt;br /&gt;
 student -- number;&lt;br /&gt;
 student -- &amp;quot;S-C&amp;quot; [label=&amp;quot;m&amp;quot;,len=1.00];&lt;br /&gt;
 &amp;quot;S-C&amp;quot; -- course [label=&amp;quot;n&amp;quot;,len=1.00];&lt;br /&gt;
 label = &amp;quot;\n\nEntity Relation Diagram\ndrawn by NEATO&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/neato&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FDP ===&lt;br /&gt;
Метод «fdp» по сути, близок к методу «neato», и использует другую разновидность «энергетического» («spring») подхода. Также рекомендуется для ненаправленных графов общего типа.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;fdp&amp;gt;&lt;br /&gt;
graph ER&lt;br /&gt;
{&lt;br /&gt;
 node [fontsize=12];&lt;br /&gt;
 node [shape=box]; course; institute; student;&lt;br /&gt;
  node [shape=ellipse];&lt;br /&gt;
  {node [label=&amp;quot;name&amp;quot;] name0; name1; name2;}&lt;br /&gt;
  code; grade; number;&lt;br /&gt;
 node [shape=diamond,style=filled,color=lightgrey];&lt;br /&gt;
  &amp;quot;C-I&amp;quot;; &amp;quot;S-C&amp;quot;; &amp;quot;S-I&amp;quot;;&lt;br /&gt;
 name0 -- course;&lt;br /&gt;
 code -- course;&lt;br /&gt;
 course -- &amp;quot;C-I&amp;quot; [label=&amp;quot;n&amp;quot;,len=1.00];&lt;br /&gt;
 &amp;quot;C-I&amp;quot; -- institute [label=&amp;quot;1&amp;quot;,len=1.00];&lt;br /&gt;
  institute -- name1;&lt;br /&gt;
 institute -- &amp;quot;S-I&amp;quot; [label=&amp;quot;1&amp;quot;,len=1.00];&lt;br /&gt;
 &amp;quot;S-I&amp;quot; -- student [label=&amp;quot;n&amp;quot;,len=1.00];&lt;br /&gt;
 student -- grade;&lt;br /&gt;
 student -- name2;&lt;br /&gt;
 student -- number;&lt;br /&gt;
 student -- &amp;quot;S-C&amp;quot; [label=&amp;quot;m&amp;quot;,len=1.00];&lt;br /&gt;
 &amp;quot;S-C&amp;quot; -- course [label=&amp;quot;n&amp;quot;,len=1.00];&lt;br /&gt;
 label = &amp;quot;\n\nEntity Relation Diagram\ndrawn by FDP&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/fdp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Twopi ===&lt;br /&gt;
&lt;br /&gt;
Метод «twopi» рисует графы с радиальной раскладкой. По сути одна вершина выбирается центральной, и помещается в центр, а остальные размещаются на последовательности концентрических орбит, вокруг этой вершины. Т.е. все вершины на расстоянии в «одно ребро» от центра, лежат на первой орбите, «в два ребра» — на второй и т. д.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;twopi&amp;gt;&lt;br /&gt;
graph ER&lt;br /&gt;
{&lt;br /&gt;
 &lt;br /&gt;
 node [fontsize=12];&lt;br /&gt;
  node [shape=box]; course; institute; student;&lt;br /&gt;
  node [shape=ellipse];&lt;br /&gt;
  {node [label=&amp;quot;name&amp;quot;] name0; name1; name2;}&lt;br /&gt;
  code; grade; number;&lt;br /&gt;
 node [shape=diamond,style=filled,color=lightgrey];&lt;br /&gt;
  &amp;quot;C-I&amp;quot;; &amp;quot;S-C&amp;quot;; &amp;quot;S-I&amp;quot;;&lt;br /&gt;
 name0 -- course;&lt;br /&gt;
 code -- course;&lt;br /&gt;
 course -- &amp;quot;C-I&amp;quot; [label=&amp;quot;n&amp;quot;,len=1.00];&lt;br /&gt;
 &amp;quot;C-I&amp;quot; -- institute [label=&amp;quot;1&amp;quot;,len=1.00];&lt;br /&gt;
  institute -- name1;&lt;br /&gt;
 institute -- &amp;quot;S-I&amp;quot; [label=&amp;quot;1&amp;quot;,len=1.00];&lt;br /&gt;
 &amp;quot;S-I&amp;quot; -- student [label=&amp;quot;n&amp;quot;,len=1.00];&lt;br /&gt;
 student -- grade;&lt;br /&gt;
 student -- name2;&lt;br /&gt;
 student -- number;&lt;br /&gt;
 student -- &amp;quot;S-C&amp;quot; [label=&amp;quot;m&amp;quot;,len=1.00];&lt;br /&gt;
 &amp;quot;S-C&amp;quot; -- course [label=&amp;quot;n&amp;quot;,len=1.00];&lt;br /&gt;
 label = &amp;quot;\n\nEntity Relation Diagram\ndrawn by TWOPI&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/twopi&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CIRCO ===&lt;br /&gt;
&lt;br /&gt;
Метод «circo» использует «circular layout». Выделяются двусвязные компоненты (каждая вершина имеет по крайней мере два ребра) и вершины этих компонент рисуются на некотором круге. «Дополнительные» ребра рисуются радиально и далее процесс повторяется. Пересечение ребер внутри круга минимизируется максимально возможным выносом ребер с круга за его периметр. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;circo&amp;gt;&lt;br /&gt;
graph ER&lt;br /&gt;
{&lt;br /&gt;
 node [fontsize=12];&lt;br /&gt;
 node [shape=box]; course; institute; student;&lt;br /&gt;
  node [shape=ellipse];&lt;br /&gt;
  {node [label=&amp;quot;name&amp;quot;] name0; name1; name2;}&lt;br /&gt;
  code; grade; number;&lt;br /&gt;
 node [shape=diamond,style=filled,color=lightgrey];&lt;br /&gt;
  &amp;quot;C-I&amp;quot;; &amp;quot;S-C&amp;quot;; &amp;quot;S-I&amp;quot;;&lt;br /&gt;
 name0 -- course;&lt;br /&gt;
 code -- course;&lt;br /&gt;
 course -- &amp;quot;C-I&amp;quot; [label=&amp;quot;n&amp;quot;,len=1.00];&lt;br /&gt;
 &amp;quot;C-I&amp;quot; -- institute [label=&amp;quot;1&amp;quot;,len=1.00];&lt;br /&gt;
  institute -- name1;&lt;br /&gt;
 institute -- &amp;quot;S-I&amp;quot; [label=&amp;quot;1&amp;quot;,len=1.00];&lt;br /&gt;
 &amp;quot;S-I&amp;quot; -- student [label=&amp;quot;n&amp;quot;,len=1.00];&lt;br /&gt;
 student -- grade;&lt;br /&gt;
 student -- name2;&lt;br /&gt;
 student -- number;&lt;br /&gt;
 student -- &amp;quot;S-C&amp;quot; [label=&amp;quot;m&amp;quot;,len=1.00];&lt;br /&gt;
 &amp;quot;S-C&amp;quot; -- course [label=&amp;quot;n&amp;quot;,len=1.00];&lt;br /&gt;
 label = &amp;quot;\n\nEntity Relation Diagram\ndrawn by CIRCO&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/circo&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Версии для печати ==&lt;br /&gt;
Как известно, трудно добиться хорошего результата одновременно на экране и на принтере, в силу разных разрешений. Картинка экранного разрешения будет плохо (с «зазубринами») выглядеть на принтере, а картинка печатного разрешения, будет очень плохо выглядеть на экране (к сожалению, современные броузеры выполняют очень примитивный ресайзинг картинок при показе), и будет достаточно много «весить». Все соображения о печатных картинках также относятся к случаю, когда вы переносите (например, копируя вебстраницу из броузера через клипборд) содержимое MediaWiki-статьи в MS Word или другой текстовый редактор.&lt;br /&gt;
Для такого, «печатного» случая (т. е. если у вас не примитивные графы, и вы собираетесь их печатать или переносить в другую систему верстки), мы сделали «печатную версию» всех перечисленных графов, с разрешением около 200 DPI. Для этого надо использовать те же самые тэги с постфиксом «-print», например «graph-print»,«neato-print», и т.п.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph-print&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
  rankdir=LR;&lt;br /&gt;
  node[color=&amp;quot;red&amp;quot;,fontsize=14];&lt;br /&gt;
  edge[color=&amp;quot;darkgreen&amp;quot;,fontcolor=&amp;quot;blue&amp;quot;,fontsize=12];&lt;br /&gt;
  OPEN[shape=&amp;quot;rectangle&amp;quot;,style=&amp;quot;filled&amp;quot;,fillcolor=&amp;quot;lightgrey&amp;quot;];&lt;br /&gt;
  CLOSED[shape=&amp;quot;octagon&amp;quot;,label=&amp;quot;Финиш&amp;quot;];&lt;br /&gt;
  VERIFIED[shape=&amp;quot;rectangle&amp;quot;,style=&amp;quot;rounded&amp;quot;];&lt;br /&gt;
  OPEN-&amp;gt;RESOLVED-&amp;gt;VERIFIED-&amp;gt;CLOSED;&lt;br /&gt;
  OPEN-&amp;gt;CLOSED[style=&amp;quot;bold&amp;quot;];&lt;br /&gt;
  VERIFIED-&amp;gt;OPEN[label=&amp;quot;обнаружены ошибки&amp;quot;,style=&amp;quot;dashed&amp;quot;,arrowhead=&amp;quot;dot&amp;quot;];&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/graph-print&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Полученные картинки являются компромиссом, между весом, читаемостью на экране и читаемостью на бумаге.&lt;br /&gt;
Желательно не использовать для совершенно тривиальных графов, или графов, которых вы не собираетесь печатать.&lt;br /&gt;
&lt;br /&gt;
== Ссылки и дополнительная документация ==&lt;br /&gt;
&lt;br /&gt;
Онлайн-документация, +последние изменения, FAQ и прочее можно найти на домашней странице пакета&lt;br /&gt;
http://www.graphviz.org/Documentation.php&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Справка]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%92%D0%B8%D0%BA%D1%82%D0%BE%D1%80_%D0%9E%D1%81%D0%BE%D0%BB%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B9_(%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D0%B8)&amp;diff=43644</id>
		<title>Категория:Виктор Осоловский (Статьи)</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%92%D0%B8%D0%BA%D1%82%D0%BE%D1%80_%D0%9E%D1%81%D0%BE%D0%BB%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B9_(%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D0%B8)&amp;diff=43644"/>
				<updated>2015-06-19T13:44:17Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Статьи Виктора Осоловского, опубликованные в бумажных и электронных СМИ.&lt;br /&gt;
&lt;br /&gt;
[[Категория:По авторам (статьи сотрудников)|О]]&lt;br /&gt;
[[Категория:CustisWikiToLib]]&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D0%BE%D0%B4%D0%B8%D0%BD%D0%B3:_%D0%B8%D1%82%D0%BE%D0%B3%D0%B8_2013&amp;diff=43251</id>
		<title>Кодинг: итоги 2013</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D0%BE%D0%B4%D0%B8%D0%BD%D0%B3:_%D0%B8%D1%82%D0%BE%D0%B3%D0%B8_2013&amp;diff=43251"/>
				<updated>2014-12-15T09:00:06Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: Перенаправление на Кодинг: итоги 2013 (о самом-самом в мире программирования)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Кодинг: итоги 2013 (о самом-самом в мире программирования)]]&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=SASL,_SVN,_Mercurial_%D0%B8_Bazaar&amp;diff=43227</id>
		<title>SASL, SVN, Mercurial и Bazaar</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=SASL,_SVN,_Mercurial_%D0%B8_Bazaar&amp;diff=43227"/>
				<updated>2014-11-06T11:54:25Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Те, кто предпочитают использовать [[SVN]] через встроенный легковесный сервер [http://svnbook.red-bean.com/en/1.0/ch06s03.html Svnserve] (вместо &amp;lt;tt&amp;gt;Apache&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;mod_dav_svn&amp;lt;/tt&amp;gt;),&lt;br /&gt;
вместе с интегрированной Windows-доменной авторизацией через [[RuPedia:Simple Authentication and Security Layer|SASL]],&lt;br /&gt;
могут столкнуться со странной ошибкой:&lt;br /&gt;
&lt;br /&gt;
В command-line клиенте SVN из дистрибутива от CollabNet (с дистрибутивом SlikSVN все ОК):&lt;br /&gt;
&lt;br /&gt;
 svn: Cannot negotiate authentication mechanism&lt;br /&gt;
&lt;br /&gt;
или что-то типа&lt;br /&gt;
&lt;br /&gt;
 subvertpy.SubversionException: ('Cannot negotiate authentication mechanism', 210007)&lt;br /&gt;
&lt;br /&gt;
* в Bazaar, который умеет работать с SVN-репозитариями, используя [http://www.samba.org/~jelmer/subvertpy/ subvertpy].&lt;br /&gt;
* в Mercurial, который может работать с SVN, используя дополнение hgsubversion, которое, в свою очередь, использует SWIG-биндинги WinSVN или тот же [http://www.samba.org/~jelmer/subvertpy/ subvertpy].&lt;br /&gt;
* вероятно, аналогично и в Git — там для работы с SVN используется Perl-модуль, основанный на тех же SWIG-биндингах.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Причина — неполный набор DLL’ек библиотеки SASL-аутентификации в сборках от CollabNet. Конкретно, обычно не хватает saslLOGIN.dll и saslPLAIN.dll, которые как раз нужны в нашей офисной конфигурации.&lt;br /&gt;
&lt;br /&gt;
Итак, чтобы «починить» CollabNet-oвский клиент, нужно залить в него все SASL-DLLи (разумеется, соответствующей «битности»), полный набор которых, кстати, есть в дистрибутиве TortoiseSVN (от того же CollabNet):&lt;br /&gt;
 saslANONYMOUS.dll&lt;br /&gt;
 saslCRAMMD5.dll&lt;br /&gt;
 saslDIGESTMD5.dll&lt;br /&gt;
 saslNTLM.dll&lt;br /&gt;
 saslLOGIN.dll&lt;br /&gt;
 saslPLAIN.dll&lt;br /&gt;
&lt;br /&gt;
И затем убедиться, что в реестре следующим образом прописаны пути к этим библиотекам (первый путь ищется под 32 битами, второй — под 64):&lt;br /&gt;
&lt;br /&gt;
 Windows Registry Editor Version 5.00 &lt;br /&gt;
 [HKEY_LOCAL_MACHINE\SOFTWARE\Carnegie Mellon\Project Cyrus\SASL Library]&lt;br /&gt;
 &amp;quot;SearchPath&amp;quot;=&amp;quot;C:\\Program Files\\TortoiseSVN\\bin&amp;quot;&lt;br /&gt;
 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Carnegie Mellon\Project Cyrus\SASL Library]&lt;br /&gt;
 &amp;quot;SearchPath&amp;quot;=&amp;quot;C:\\Program Files\\TortoiseSVN\\bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Важный момент — пути прописывать без завершающего слеша! Библиотеке конечно позор — и за это, и за использование реестра (никаких portable-сборок), и за «Carnegie Mellon».&lt;br /&gt;
&lt;br /&gt;
В случае с Bazaar — залить все эти библиотеки в папку &amp;lt;tt&amp;gt;lib&amp;lt;/tt&amp;gt; дистрибутива, и то же самое с реестром.&lt;br /&gt;
&lt;br /&gt;
Mercurial у меня питоновский, по крайней мере расширение &amp;lt;tt&amp;gt;hgsubversion&amp;lt;/tt&amp;gt; все равно требует &amp;lt;tt&amp;gt;Python&amp;lt;/tt&amp;gt; с установленными &amp;lt;tt&amp;gt;SVN&amp;lt;/tt&amp;gt;-биндингами, так что там проще поставить &amp;lt;tt&amp;gt;subvertpy&amp;lt;/tt&amp;gt; (хоть &amp;lt;tt&amp;gt;easy_install&amp;lt;/tt&amp;gt;-ом), а потом перегрузить в папку с &amp;lt;tt&amp;gt;subvertpy&amp;lt;/tt&amp;gt; все DLLи из «полного» CollabNet-дистрибутива (то есть дополненного тортилловыми SASL-библиотеками), и опять-таки вправить мозги реестру.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
За решение проблемы благодарность &amp;lt;tt&amp;gt;procmon&amp;lt;/tt&amp;gt;-у от Руссиновича, без которого, наверное, уже точно давно был виндекапец и все сидели под Linuxом, где таких проблем нет (с виндовой доменной авторизацией), и мне бы не пришлось выслушивать издевательства от рядом сидящего линуксоида.&lt;br /&gt;
&lt;br /&gt;
Если кто-то готов посоветовать лучшее решение (можно ли пересадить в Python 2.7 SVN библиотеки от SlikSVN, в общем, чтобы не было завязок на реестр) — [mailto: stas-fomin@yandex.ru посоветуйте].&lt;br /&gt;
&lt;br /&gt;
[[Категория:Статьи о Subversion]]&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Категория:CustisWikiToLib]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0:%D0%98%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=43178</id>
		<title>Справка:Изображения</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0:%D0%98%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=43178"/>
				<updated>2014-10-17T10:59:57Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Загрузка файла изображения в {{SITENAME}} ==&lt;br /&gt;
&lt;br /&gt;
Загрузить любой файл может только зарегистрированный пользователь, представившийся системе. Последовательность действий описана на странице [[Special:Upload|Загрузить файл]]. При загрузке учитывайте некоторые особенности:&lt;br /&gt;
* Для переименования изображения выберите вкладку «переименовать» вверху страницы.&lt;br /&gt;
* Для удаления — «удалить».&lt;br /&gt;
* При загрузке другого изображения (или того же, но более высокого качества) под тем же названием старое изображение не стирается, а сохраняется в «Истории», как и любой файл;&lt;br /&gt;
* В названии файлов различается написание «ПРОПИСНЫМИ» и «строчными» буквами.&lt;br /&gt;
* Так как пространство имен для всех изображений одно, желательно давать файлам дескриптивные (пусть и длинные) названия. То есть картинка с названием Image1.jpg не является дескриптивной, и повышает вероятность того, что в результате опечатки будет включена другая картинка и т. п.&lt;br /&gt;
Загрузка и удаление файлов отражаются в [[Special:Newimages]]. Просмотреть ранее загруженные файлы можно [[Special:Imagelist|в списке загруженных изображений]] либо через категории изображений.&lt;br /&gt;
&lt;br /&gt;
== Описание изображения ==&lt;br /&gt;
&lt;br /&gt;
После загрузки файла изображения появится ссылка на страницу '''описания''' этого изображения, которую желательно заполнить.&lt;br /&gt;
&lt;br /&gt;
== Вставка изображения в статью ==&lt;br /&gt;
&lt;br /&gt;
=== Первоначальных размеров ===&lt;br /&gt;
&lt;br /&gt;
Чтобы вставить загруженное изображение в статью, достаточно указать ссылку на него: '''&amp;lt;nowiki&amp;gt;[[Image:Файл]]&amp;lt;/nowiki&amp;gt;''' или '''&amp;lt;nowiki&amp;gt;[[File:Файл]]&amp;lt;/nowiki&amp;gt;'''. Изображение будет воспроизводится слева в полную величину, а текст начинаться ниже его. Если вы хотите дать только ссылку на изображение, не воспроизводя его, поставьте двоеточие перед словом «Image»: &amp;lt;nowiki&amp;gt;[[:Image:Файл]]&amp;lt;/nowiki&amp;gt;. Щелчок на такую надпись загружает страницу самого изображения. Вот попробуйте: [[:Image:2004-01-23-twins-computer-01-tmb.jpg]].&lt;br /&gt;
&lt;br /&gt;
'''С альтернативным текстом.'''&lt;br /&gt;
&lt;br /&gt;
Чтобы в браузерах с отключённой функцией показа графики показывалось '''пояснение к изображению''', его вписывают в конце после вертикальной чёрточки: '''&amp;lt;nowiki&amp;gt;[[Image: Файл|Альтернативный текст для изображений]]&amp;lt;/nowiki&amp;gt;'''. При наведении курсора мыши на пустующее место эта подпись всплывает.&lt;br /&gt;
&lt;br /&gt;
'''Пояснительная подпись.'''&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:2004-01-23-twins-computer-01-tmb.jpg|frame|Пояснительная подпись]]&lt;br /&gt;
Чтобы сделать поясняющую подпись, используется атрибут «'''frame'''»:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[Image:2004-01-23-twins-computer-01-tmb.jpg|frame|Пояснительная подпись]]&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Он заключает изображение в рамку и смещает изображение вправо. В области «Пояснительная подпись» можно применять wiki-разметку.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Уменьшение размеров ===&lt;br /&gt;
[[Image:2004-01-23-twins-computer-01-tmb.jpg|thumb|Пояснительная подпись]]&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[Image:2004-01-23-twins-computer-01-tmb.jpg|thumb|Пояснительная подпись]]&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Атрибуты «'''thumb'''» или «'''thumbnail'''», вставленные между именем файла и пояснительной подписью, уменьшают ширину изображения до 180рх (высота изменяется пропорционально), прижимают его вправо и помещают в рамку. Кроме того, справа от пояснительной подписи появляется значок, щёлкнув на который можно перейти на страницу изображения и посмотреть его в натуральную величину. Текст располагается слева от изображения.&lt;br /&gt;
&lt;br /&gt;
[[Image:2004-01-23-twins-computer-01-tmb.jpg|thumb|100px|Пояснительная подпись]]&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[Image:2004-01-23-twins-computer-01-tmb.jpg|thumb|100px|Пояснительная подпись]]&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Для получения изображения заданной ширины (высота изменяется пропорционально), запишите её в пикселах (рх) за атрибутом «thumb». При этом не забывайте о соотношении изображения с текстом. Если статья небольшая, то можно подобрать высоту изображения так, чтобы текст полностью охватывал его. В длинной статье не стоит делать изображения маленькими, иначе они «утонут» в тексте.&lt;br /&gt;
&lt;br /&gt;
=== Расположение на странице ===&lt;br /&gt;
'''Смещение вправо.'''&lt;br /&gt;
&lt;br /&gt;
Кроме рассмотренных выше атрибутов «frame», «class=rimage», «thumb» и «thumbnail», прижать изображение вправо можно html-атрибутом «'''right'''»:&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:2004-01-23-twins-computer-01-tmb.jpg|right|]]&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[Image:2004-01-23-twins-computer-01-tmb.jpg|right|]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Текст, помещённый ниже, обтекает его слева. Не забудьте поставить вертикальную чёрточку «'''|'''» в конце. Это нужно для того, чтобы слово не воспринималось как альтернативный текст для изображения.&lt;br /&gt;
|}&lt;br /&gt;
'''Смещение влево.'''&lt;br /&gt;
&lt;br /&gt;
Чтобы прижать изображение к левому краю страницы, даже при наличии вышеперечисленных атрибутов, используйте html-атрибут «'''left'''» или «'''none'''».&lt;br /&gt;
&lt;br /&gt;
'''Расположение по центру.'''&lt;br /&gt;
&lt;br /&gt;
Для расположения изображения в центре странице используется html-атрибут «'''center'''»:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;center&amp;gt;[[Image:2004-01-23-twins-computer-01-tmb.jpg|thumb|Пояснительная подпись]]&amp;lt;/center&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:2004-01-23-twins-computer-01-tmb.jpg|thumb|Пояснительная подпись]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
Комбинируя таблицы и изображения, можно представлять информацию, например, в таком виде:&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border-collapse:collapse&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;4&amp;quot;|Мои фото&lt;br /&gt;
|-&lt;br /&gt;
|Фото1|| [[Image:Stas-fomin.jpg]]&lt;br /&gt;
|Фото2|| [[Image:Stas-fomin.jpg]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Исходный текст для этой таблицы такой:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border-collapse:collapse&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;4&amp;quot;|Мои фото&lt;br /&gt;
|-&lt;br /&gt;
|Фото1|| [[Image:Stas-fomin.jpg]]&lt;br /&gt;
|Фото2|| [[Image:Stas-fomin.jpg]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Видео ==&lt;br /&gt;
&lt;br /&gt;
Совершенно аналогично операциям с картинками (загрузка, включение через &amp;lt;nowiki&amp;gt;[[Image:…]])&amp;lt;/nowiki&amp;gt;, можно загружать и видео, в [[EnPedia:FLV|FLV]]-формате с кодеками FLV видео + MP3 аудио, или в MP4-формате (контейнере) с кодеками H.264 видео + AAC аудио.&lt;br /&gt;
&lt;br /&gt;
FLV — проще (не нужно делать qt-faststart), но MP4 — качественнее, потому что кодек H.264 лучше, чем Flash Video.&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать практически любой видеоформат (например, AVI) в FLV или MP4, проще всего воспользоваться программой &amp;lt;tt&amp;gt;ffmpeg&amp;lt;/tt&amp;gt;. Скачайте и установите ее (например, [http://www.paehl.com/open_source/?Convert_Tools:FFMPEG отсюда]).&lt;br /&gt;
&lt;br /&gt;
Опции можно не учить, просто заведите bat-файл &amp;lt;tt&amp;gt;!avi-to-flv.bat&amp;lt;/tt&amp;gt;, для FLV состоящий всего из двух строк:&lt;br /&gt;
 ffmpeg -y -i %1 -vcodec libx264 -pass 1 -vpre fastfirstpass -r 10 -b 579k -f flv %1.flv&lt;br /&gt;
 ffmpeg -y -i %1 -vcodec libx264 -pass 2 -vpre hq -r 10 -b 579k -f flv %1.flv&lt;br /&gt;
и пользуйтесь им.&lt;br /&gt;
&lt;br /&gt;
== SVG-графика ==&lt;br /&gt;
&lt;br /&gt;
В дополнении к растровым изображениям, есть возможность работы с векторными [[SVG]]-изображениями. Их можно загружать в вики и вставлять в статьи так же, как и любые другие:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[[File:Warning icon.svg]]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отображаются они парой растрового+векторного изображения, так что старые браузеры, не поддерживающие SVG, картинку всё равно отобразят.&lt;br /&gt;
&lt;br /&gt;
{{Box|{{Warning}} Использовать СТАРЫЙ способ вставки SVG прямо в текст статьи через &amp;lt;tt&amp;gt;&amp;amp;lt;pic-svg&amp;amp;gt;&amp;lt;/tt&amp;gt; - '''НЕ НУЖНО'''! Это очень некрасиво и неудобно.}}&lt;br /&gt;
&lt;br /&gt;
С [[SVG]]-графикой работают графические редакторы «MS Visio» начиная с версии 2003 и бесплатный редактор [http://www.inkscape.org Inkscape].&lt;br /&gt;
== PDF-файлы ==&lt;br /&gt;
&lt;br /&gt;
С PDF-файлами в вики тоже можно работать, как с изображениями. Очевидный нюанс заключается в том, что в PDF-файле много страниц. Поэтому на странице файла (например, [[:File:Leeward.pdf]]) отображается поле с выбором страницы, а вставлять отдельные страницы в статью можно так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[[File:Leeward.pdf|page=5|300px]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Leeward.pdf|page=5|300px]]&lt;br /&gt;
&lt;br /&gt;
Также можно вставить диапазон страниц или ВСЕ страницы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Диапазон: [[File:Leeward.pdf|page=4-6|300px]]&lt;br /&gt;
Все: [[File:Leeward.pdf|page=-|300px]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Leeward.pdf|page=4-6|300px]]&lt;br /&gt;
&lt;br /&gt;
== Остальные типы файлов ==&lt;br /&gt;
&lt;br /&gt;
Можно также загружать «бинарный» контент произвольных форматов — документы Word и LibreOffice, презентации PowerPoint, и т. п.&lt;br /&gt;
&lt;br /&gt;
По тексту офисных документов и презентаций работает поиск.&lt;br /&gt;
&lt;br /&gt;
Прямо в вики (как обычные изображения) их, однако, просмотреть нельзя, но на них можно дать ссылку, и броузер пользователя сам разберется с переданным файлом (просмотрит его с помощью плагина, откроет какое-либо внешнее приложение или просто сохранит его, расчитывая, что читатель найдет, что делать с этим файлом.&lt;br /&gt;
&lt;br /&gt;
Дать '''прямую ссылку''' на скачивание любого файла можно в формате&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[[Media:&amp;lt;имя файла&amp;gt;]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Пример:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[[Media:Leeward.pdf|Лекция на тему «наветренный»/«подветренный»]].&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* [[Media:Leeward.pdf|Лекция на тему «наветренный»/«подветренный»]].&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;br /&gt;
{{replicate-from-custiswiki-to-smwiki}}&lt;br /&gt;
{{replicate-from-custiswiki-to-4intranet}}&lt;br /&gt;
[[Category:Справка|Изображения]]&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Replicate-from-custiswiki-to-all&amp;diff=43118</id>
		<title>Шаблон:Replicate-from-custiswiki-to-all</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Replicate-from-custiswiki-to-all&amp;diff=43118"/>
				<updated>2014-04-18T15:26:31Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;Шаблон для задания репликации статьи/шаблона/изображения во ВСЕ наши Wiki-системы.&lt;br /&gt;
&lt;br /&gt;
Включать следует '''только''' на действительно полезные везде вещи, типа пиктограмм, макросов интеграции с Bugzilla и т.п. На справку включать НЕ надо.&amp;lt;/noinclude&amp;gt;&amp;lt;div class=&amp;quot;replication-info&amp;quot;&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;i&amp;gt;Статья реплицируется в [[SMWiki]], [[SBWiki]], [[RDWiki]], [[GZWiki]], [[DPWiki]], [[HRWiki]], [[CBWiki]], [[ORWiki]], [[RAWiki]], [[ITWiki]], [[CRMWiki]], [[NordeaWiki]], [[EvolWiki]]&amp;lt;/i&amp;gt;&amp;lt;/small&amp;gt;.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:Джентльменский набор вики]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9A%D0%BE%D0%BD%D1%84%D0%B5%D1%80%D0%B5%D0%BD%D1%86%D0%B8%D0%B8&amp;diff=43051</id>
		<title>Категория:Конференции</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9A%D0%BE%D0%BD%D1%84%D0%B5%D1%80%D0%B5%D0%BD%D1%86%D0%B8%D0%B8&amp;diff=43051"/>
				<updated>2014-02-26T15:58:36Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Отчеты о внешних конференциях, семинарах, выставках.&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;br /&gt;
[[Category:Custis]]&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Box&amp;diff=43180</id>
		<title>Шаблон:Box</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Box&amp;diff=43180"/>
				<updated>2014-02-26T15:35:01Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: Новая страница: «&amp;lt;div style=&amp;quot;border: 1px solid gray; background: #f0f0f0; padding: 0.5em&amp;quot;&amp;gt;{{{1|}}}&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;{{replicate-from-custiswiki-to-all}}&amp;lt;/noinclude&amp;gt;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: 1px solid gray; background: #f0f0f0; padding: 0.5em&amp;quot;&amp;gt;{{{1|}}}&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;{{replicate-from-custiswiki-to-all}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D1%80%D0%B5%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_2.0&amp;diff=43054</id>
		<title>Креативное программирование 2.0</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D1%80%D0%B5%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_2.0&amp;diff=43054"/>
				<updated>2014-02-26T15:28:22Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: Массовая правка: замена Категория:Рецензии на Категория:Рецензии на книги, замена Category:Рецензии на Category:Рецензии на книги&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;Автор(ы):   								Гласс Р.&lt;br /&gt;
;Страница книги на сайте издательства: http://www.symbol.ru/alphabet/666333.html&lt;br /&gt;
&lt;br /&gt;
http://www.books.ru/img/666333.jpg&lt;br /&gt;
&lt;br /&gt;
== Рецензии ==&lt;br /&gt;
=== Наши рецензии ===&lt;br /&gt;
==== Рецензия Павла Трушина ====&lt;br /&gt;
&lt;br /&gt;
{{Блог:Павел Трушин/Роберт Гласс. Креативное программирование 2.0.}}&lt;br /&gt;
&lt;br /&gt;
=== Рецензии в рунете ===&lt;br /&gt;
* http://www.it4business.ru/lib/2003/&lt;br /&gt;
&lt;br /&gt;
[[Категория:Библиотека]]&lt;br /&gt;
[[Категория:Рецензии на книги]]&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Deadline_(%D0%94%D0%B5%D0%BC%D0%B0%D1%80%D0%BA%D0%BE)&amp;diff=43052</id>
		<title>Deadline (Демарко)</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Deadline_(%D0%94%D0%B5%D0%BC%D0%B0%D1%80%D0%BA%D0%BE)&amp;diff=43052"/>
				<updated>2014-02-26T15:28:21Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: Массовая правка: замена Категория:Рецензии на Категория:Рецензии на книги, замена Category:Рецензии на Category:Рецензии на книги&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;Автор:Том ДеМарко (он же ''Том Де Марко'')&lt;br /&gt;
;Название: «Deadline. Роман об управлении проектами» (''The Deadline: A Novel About Project Management'''''')&lt;br /&gt;
;Читать: http://www.litru.ru/?book=139&lt;br /&gt;
&lt;br /&gt;
== Рецензия ([[Участник:StasFomin|Стас Фомин]]) ==&lt;br /&gt;
В блогосфере роман очень популярен. Внятных рецензий правда мало или нет, но очень много односложных рекомендаций вида «must read», или «читал, много думал».&lt;br /&gt;
&lt;br /&gt;
Соответственно, такие рекомендации перед чтением настроили на достаточно большие ожидания.&lt;br /&gt;
Плюс, тут же автор — тот самый [[RuPedia:Tom_DeMarco|Том Демарко]], который уже полвека в индустрии, член всяких IEEE/ACM/…, отец метрик в разработке, автор бессмертного заклинания «тем что нельзя измерить, нельзя управлять»&amp;lt;ref&amp;gt;От которого, он правда [http://bishop-it.ru/2009/07/softwareengineeringisdead/ недавно отказался].&amp;lt;/ref&amp;gt;, плюс изложение не в виде сухой академической статьи, в виде убогого шестистраничного двухколоночного PDFа&amp;lt;ref&amp;gt;стандарт для всяких около IEEEшных статей&amp;lt;/ref&amp;gt;, а в виде увлекательного динамичного романа, даже с любовной линией.&lt;br /&gt;
&lt;br /&gt;
{{note}} Признаться, и меня часто посещали мысли написать производственный роман о современной разработке, с любовным треугольником (менеджер → тестировщица → суперпрограммист ← сисадмин …), с напряжением, бегом по коридору при сигналах о сломанных в [[Continuous Integration|CI]] сборках, мощному давлением от бизнесов на менеджмент, менеджеров на разработчиков, разработчиков на тестировщиков и аналитиков, аналитиков на юзабилистов, плюс вокруг возня HR-ов с их мотивацией… Конфликты социотипов, проблемы технологий и методологий (SCRUM vs. Dilbert-style, XP vs. Waterfall), важность правильных инструментов… Ну и название, лучше чем «ДедЛайн» тоже не придумать.&lt;br /&gt;
&lt;br /&gt;
С таким ожиданиями я начал чтение, и в процессе все более и более мрачнел.&lt;br /&gt;
&lt;br /&gt;
Судя по этому роману, автор НИЧЕГО не понимал в процессе разработки софта.&lt;br /&gt;
&lt;br /&gt;
А такой роман может за пару недель написать очень слабая команда литературных негров, или слабенький автор из тусовки русского фендома&amp;lt;ref&amp;gt;Тусовка авторов русской фантастики&amp;lt;/ref&amp;gt;. Без малейшего понимания, что такое программирование, тестирование, какие вообще бывают технологии, архитектуры и вообще виды разработки, что такое пользователь и какой ему нужен интерфейс, и в чем смысл эволюции требований и управления ими, где народ ищет серебряную пулю и откуда должен появиться «Agile Manifesto». Без ПОНЯТИЯ! Ни в одной области!&lt;br /&gt;
&lt;br /&gt;
Кратко перескажу свое впечатление, которое сложилось после прочтения четверти, и дальше только укреплялось.&lt;br /&gt;
&lt;br /&gt;
ГГ (главный герой), работавший менеджером в какой-то конторе (похоже, даже не софтовой ни разу, но возможно он руководил таки программистами) был уволен (и похоже, что справедливо).&lt;br /&gt;
&lt;br /&gt;
ГГ — лузер. Ему где-то сороковник, у него нет (и не было) семьи, друзей, нормальной собственности, увлечений — только кот.&lt;br /&gt;
ГГ совершенно не разбирается в технологиях разработки (ни в одной области). &lt;br /&gt;
Ни в архитектуре, ни в аналитике, ни юзабилити, ни в чем.&lt;br /&gt;
В гуманитарных областях — психология, общение, конфликты — тоже ноль (хотя считает, что у него «большое сердце»).&lt;br /&gt;
Да вообще, он совершенно неэрудирован — элементарные школьные факты были для него новостью. У него географический кретинизм.&lt;br /&gt;
Чистейший роговолосый шеф из Dilbertа, только более безобидный и к тому же уволенный.&lt;br /&gt;
&lt;br /&gt;
Чтобы бесконфликтно воспринимать написанное, мне пришлось домыслить небольшой «пропущенный открывок», после включения которого, уже можно как-то читать дальше.&lt;br /&gt;
&lt;br /&gt;
{{caution}} Ближайшие культурные коды — [[RuPedia:Бразилия_(фильм)|концовка фильма «Бразилия»]], роман «Ubik» от [[RuPedia:Дик, Филип Киндред|Филиппа Дика]].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;small&amp;gt;начало домыслов&amp;lt;/small&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Уволенный ГГ спивается, теряет остатки денег, и похоже бомжует, побираясь с тележкой из супермаркета.&lt;br /&gt;
Перестав ценить жизнь, он потерял полностью осторожность и был сбит автобусом (возможны варианты).&lt;br /&gt;
Далее главный герой умирает, и распадающийся мозг рожает ему картину, что …&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;small&amp;gt;пошел роман&amp;lt;/small&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
…Им заинтересовалось мощное тоталитарное государство (гибрид СССР, Албании, Болгарии, Венгрии — фантазия почище «Казахстана от Бората» — учитывая необразованность ГГ, была рождена странная географическая химера). И прислало за ним красавицу-шпионку, соблазняющую его и отвозящую в эту страну ОЗ&amp;lt;ref&amp;gt;Советский читатель наверняка помнит адаптацию «Волшебник Изумрудного Города»&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Он смело идет &amp;lt;s&amp;gt;по дороге из желтого кирпича&amp;lt;/s&amp;gt; живописным аллеям с пальмами, прямо в столицу к Великому и Ужасному Гудвину, и оказывается (surprise!), что это Старый Добрый Билл Гейтс купил себе Страну с Потрохами (и огромным числом дешевых высококвалифицированных программистов), и вот единственное, что ему не хватало для счастья — это ГГ в качестве топ-менеджера.&lt;br /&gt;
&lt;br /&gt;
У него полный карт-бланш — он может &amp;lt;s&amp;gt;вызывать духов&amp;lt;/s&amp;gt; заказывать любых людей и ресурсы, ему предлагают сыграть в увлекательную RPG-стратегию, где у него будет куча юнитов — программистов и менеджеров, которые будут что-то там программировать. Что — его совершенно не волнует, он этого даже не понимает. Официальная легенда:&lt;br /&gt;
# Копируем известные программы, фигли там думать, трясти надо.&lt;br /&gt;
# …&lt;br /&gt;
# PROFIT!!!!!&lt;br /&gt;
&lt;br /&gt;
Его задача, как геймера — чисто расставлять юниты, и наблюдать, как они шебуршатся. Более того — юниты ему выданы с запасом, он может устраивать эксперимент — запускать в одну миссию несколько команд, и расслабившись смотреть — кто эффективней добежит до цели.&lt;br /&gt;
&lt;br /&gt;
От него не требуется ничего.&lt;br /&gt;
&lt;br /&gt;
Он прекрасно проводит время — если ему интересно пообщаться с выдающимися людьми — ему их доставляют (ну или он срочно летит на личном самолете в другую страну, чтобы непринужденной обстановке в пабе перекинуться парой словечек с каким-нибудь экспертом). Иногда «вызывает Оракула» по email (насколько я понял, намек на Ларри Элиссона).&lt;br /&gt;
У него появляются женщины — отдельно красивая — ''wamp-style'' шпионка, отдельно высокая (бомжующая ПМ эксперт/баскетболистка — явно трансляция своего собственного бомжевания).&lt;br /&gt;
Время от времени, у него возникают легкие конфликты, но каждый раз он доходит до Босса этого уровня, после чего Босс легко сдается и становится его сторонником.&lt;br /&gt;
Единственная проблема ГГ — какой-то злобный роголовосый финменеджер, которого почему-то случайно поставили над ним, и который давил и смешно угрожал ГГ. И то, эту проблему ГГ не решил, она внезапно решилась методом «deux from machine».&lt;br /&gt;
&lt;br /&gt;
Ничего полезного ГГ не сделал. Максимум — не сильно мешал людям.&lt;br /&gt;
В процессе этого Великого Пути, автора посещают озарения и он записывает открывшиеся ему Великие Принципы Программного Менеджмента.&lt;br /&gt;
Сборник этих рецептов (все как на подбор от Капитана Очевидность), можно не читая роман найти [http://www.slideshare.net/galushko/deadline-2120656 тут]. Эти принципы никак не приоретизированы, то есть если рассматривать их как ограничения — «допустимого решения нет»&amp;lt;ref&amp;gt;Хотя я одобряю основной мотив этих принципов — нет «микроменеджменту», нет надуманным ограничениям, больше доверия. и т.п.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Концовка вообще из серии «[http://lurkmore.ru/%D0%95%D0%B1%D0%B0%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D1%8B%D0%B4 полный позор]» — все само как-то счастливо закончилось и ему в подарок случайно падает королевство с принцессой (купленная Болгария с женщиной-wamp). В общем, «Бразилия» в полный рост, воспринимать это иначе никак не возможно.&lt;br /&gt;
&lt;br /&gt;
В общем, я не рекомендую это чтение.&lt;br /&gt;
Если хочется почитать какой-нибудь бизнес-роман о разработке, бизнесе, консалтинге — то лучше наверное «Цель-3» от Голдратта (кстати, написан примерно в то же время). Хотя там разработки совсем мало, но все гораздо живей и жизненней. Там только концовка подкачала (слишком уж шоколадно все).&lt;br /&gt;
&lt;br /&gt;
Ну и может действительно надо написать свой собственный Великий Роман О ---.&lt;br /&gt;
&lt;br /&gt;
P.S. Кстати, если хочется чего-то художественного о ДедЛайне, как это выглядит на самом деле, то лучше всего, ИМХО,&lt;br /&gt;
это удалось у [[RuPedia:Кон,_Сатоси|Сатоси Кона]], в аниме-сериале «[[RuPedia:Агент_Паранойи|Агент_Паранойи]]», особенно в 10-й серии. Режиссер действительно видел и познал настоящий Ужас ДедЛайна, вероятно поэтому и умер в 46 лет.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:The  project team (cartoontester).jpg|400px|center]]&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
* http://www.litru.ru/?book=139&lt;br /&gt;
* [http://www.slideshare.net/galushko/deadline-2120656 Конспект «прописных истин» из романа]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;br /&gt;
[[Категория:Рецензии на книги]]&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%B3:%D0%9F%D0%B0%D0%B2%D0%B5%D0%BB_%D0%A2%D1%80%D1%83%D1%88%D0%B8%D0%BD/%D0%A0%D0%BE%D0%B1%D0%B5%D1%80%D1%82_%D0%93%D0%BB%D0%B0%D1%81%D1%81._%D0%9A%D1%80%D0%B5%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_2.0.&amp;diff=43057</id>
		<title>Блог:Павел Трушин/Роберт Гласс. Креативное программирование 2.0.</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%B3:%D0%9F%D0%B0%D0%B2%D0%B5%D0%BB_%D0%A2%D1%80%D1%83%D1%88%D0%B8%D0%BD/%D0%A0%D0%BE%D0%B1%D0%B5%D1%80%D1%82_%D0%93%D0%BB%D0%B0%D1%81%D1%81._%D0%9A%D1%80%D0%B5%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_2.0.&amp;diff=43057"/>
				<updated>2014-02-26T15:28:21Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: Массовая правка: замена Категория:Рецензии на Категория:Рецензии на книги, замена Category:Рецензии на Category:Рецензии на книги&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Креативное программирование  2.0|Книжка]] в основном про творчество в программировании и есть ли ему место — основной вывод — место есть и довольно приличное. Чем сложнее задача и чем она новее, в плане не решаемости ее раньше — тем больше в ней творчества и тем меньше ее решение поддается формальным методам.&lt;br /&gt;
&lt;br /&gt;
Первая часть книжки построена на [http://ru.wikipedia.org/wiki/Дихотомия дихотомиях] (забавный в вики пример дихотомии: мужчины и не мужчины, можно предположить, что есть еще дети, но все-таки навевает мысли о третьем поле).&lt;br /&gt;
&lt;br /&gt;
* Дисциплина и гибкость — какой должна быть команда разработчиков: конвейер Форда или индивидуумы в драных штанах с банкой пива.&lt;br /&gt;
Приведен пример, который был или мог случиться, о том, как две подобных команды поспорили в баре, кто быстрее разработает небольшую программу — результат, описанный в книге — ничья. Вообще возникает сомнение: будет ли дисциплинированная команда спорить в баре и тратить свое время на такую «ерунду» — но это на совести автора.&lt;br /&gt;
В этом разделе есть интересная статья об индексе сложности, который применяется ко всему: к задаче, к методам ее решения, к людям и высказывается интересная мысль, что проект можно завалить, если индексы не совпадают — типа сложные люди сложными методами решают простую задачу (будьте проще и люди к вам потянутся) или наоборот.&lt;br /&gt;
Ну и апофеоз всего, что бы вы думали — новейшее веяние Agile! О нем кстати в книге не очень много, ну это и понятно, книга в принципе не о нем.&lt;br /&gt;
&lt;br /&gt;
* Формальные методы и эвристики — можно ли решить сложные задачи, использую формальные подходы — вывод — нет или это решение будет неоправданно дорогим (деньги, время).&lt;br /&gt;
Пример — засунуть крупную вещь в багажник машины, теоретически можно решить эту задачу, но практически, когда она будет решена — ее решение уже будет не нужно (никуда не поехали, отпуск испорчен, скандалы, развод и девичья фамилия) — гораздо проще просто попробовать засунуть ее и так и эдак — это и есть эвристические подход.&lt;br /&gt;
&lt;br /&gt;
Второй пример — известный в узких кругах проект А7 (софт для самолета ВМС США). Как всегда для него было наколбашено много кода без всяких формальных методов, как всегда этот код никому не нравился и как это все-таки бывает во многих случая — он работал! Товарищ Дэвид Парнас решил все переделать «по-уму» (почему бы и нет, если это хорошо спонсируют) — в итоге пока он собирал данные, необходимые для реализации формальных методов, появлялись все новые требования, и новая разработка не догоняла старую, а отставала от нее.&lt;br /&gt;
&lt;br /&gt;
В этом же разделе поднята проблема — программирования без комплекса вины — не надо бояться экспериментировать и допускать ошибки. «Что не убивает меня, то делает меня сильнее» (с) Ницше.&lt;br /&gt;
&lt;br /&gt;
* Оптимизация и разумная достаточность — надо ли упереться рогом и довести продукт до совершенства или разумно остановиться на каком-то достаточно хорошем решении.&lt;br /&gt;
Есть статья об «ad hoc» — применение универсальных методов хорошо, но работает до определенного этапа, а дальше спасают только специальные вещи. Высказывается мысль, что возможен обратный откат к специализированным методам, программам и компьютерам.&lt;br /&gt;
&lt;br /&gt;
* Количественный и качественный подходы — возможно ли применение метрик и есть ли от него какая-то польза или лучше полагаться на интуицию.&lt;br /&gt;
&lt;br /&gt;
* Процесс и продукт — что нужнее, кто главнее — ну это прямо из манифеста Agile&lt;br /&gt;
&lt;br /&gt;
* Интеллектуальные и канцелярские задачи — здесь опять повторяется мысль, которая идет через всю книгу, что программирование — самая сложная деятельность, которой занимается человек.&lt;br /&gt;
В разделе много цифр и многА бакАв — исследование о проценте интеллектуальных и творческих задач в программировании.&lt;br /&gt;
&lt;br /&gt;
* Теория и практика — вывод, в большинстве разделов программирования практика опережает теорию, хотя они должны друг другу помогать (учите матчасть).&lt;br /&gt;
&lt;br /&gt;
* Наука и производство — несколько дихотомий:&lt;br /&gt;
:* интересное — полезное, в науке занимаются, чем интересно, в производстве — что полезно&lt;br /&gt;
:* групповое — индивидуально, в производстве преобладают группы, в науке — одиночки.&lt;br /&gt;
Деятели науки пафосны и далеки от простого народа (программистов-практиков).&lt;br /&gt;
Интересная мысль — о понимании и согласии, часто объединяют эти понятия — человек со мной не согласен — значит не понимает — значит надо объяснить еще раз.&lt;br /&gt;
&lt;br /&gt;
* Забавность и серьезность — от программирования надо получать фан!&lt;br /&gt;
Раньше все программисты были ковбоями и работали совсем не за деньги, не то, что сейчас. Хотя есть свет в конце туннеля — OpenSource!&lt;br /&gt;
&lt;br /&gt;
Вторая часть книжки о том, как стимулировать творчество, вроде бы как бы даются конкретные рекомендации, но то ли это как-то все не так интересно, то ли я подустал читать эту книжку — из этой части я мало что вынес.&lt;br /&gt;
&lt;br /&gt;
Интересная метафора, про греков, римлян и варваров в программировании, типа:&lt;br /&gt;
* греки — маленькие группы интуитивистов, придерживающихся неформальных методов решения задачи, использующих эмпирики — демократы&lt;br /&gt;
* римляне — большие группы формалистов, для которых процесс управления важнее решаемой задачи — империалисты&lt;br /&gt;
* варвары — ну это варвары, code&amp;amp;fix и прочие прелести&lt;br /&gt;
Себя автор видимо относит к грекам.&lt;br /&gt;
&lt;br /&gt;
В книге есть определения творчества, по этому поводу возникла мысль, что творение и творчество — однокоренные слова не зря, то есть если вы к своей программе относитесь как к творению, иногда работаете из дома просто ради удовольствия, иногда решение какой-то супер трудной задачи снится вам во сне, выходя с работы еще некоторое время вы там — то это видимо творчество (ключевое здесь слово иногда — если постоянно — это патология).&lt;br /&gt;
&lt;br /&gt;
[[Категория:CustisWikiToLib]]&lt;br /&gt;
[[Категория:Рецензии на книги]]&lt;br /&gt;
{{wl-publish: 2010-06-11 15:16:04 +0400 | PavelTrushin }}&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A1%D0%BE%D1%84%D1%82_-_%D0%BE%D1%82%D1%81%D1%82%D0%BE%D0%B9!_%D0%98_%D1%87%D1%82%D0%BE_%D1%81_%D1%8D%D1%82%D0%B8%D0%BC_%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C%3F&amp;diff=43055</id>
		<title>Софт - отстой! И что с этим делать?</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A1%D0%BE%D1%84%D1%82_-_%D0%BE%D1%82%D1%81%D1%82%D0%BE%D0%B9!_%D0%98_%D1%87%D1%82%D0%BE_%D1%81_%D1%8D%D1%82%D0%B8%D0%BC_%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C%3F&amp;diff=43055"/>
				<updated>2014-02-26T15:28:13Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;Автор(ы):  Платт Д.&lt;br /&gt;
;Страница книги на сайте издательства: http://www.symbol.ru/alphabet/539043.html&lt;br /&gt;
&lt;br /&gt;
http://www.books.ru/img/539043.jpg&lt;br /&gt;
&lt;br /&gt;
== Рецензии ==&lt;br /&gt;
&lt;br /&gt;
=== Рецензия Стаса Фомина ===&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
Обратная связь с рецензентом — [[Участник:StasFomin|по ссылке]].&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это книга с названием, звучащем как крик души (в оригинале «Why  Software Sucks ... And What You Can Do About It») от Девида Платта (''David S. Platt'') —  матерого программиста, автора [http://www.amazon.co.uk/David-S.-Platt/e/B001IOBGZ0/ ряда книг по околомикрософтовским  технологиям]. &lt;br /&gt;
&lt;br /&gt;
Первое, что вспоминается при начале чтения этой книги, это &lt;br /&gt;
[[Психбольница в руках  пациентов]], Алана Купера. &lt;br /&gt;
Собственно автор этого и не скрывает, регулярно «посылая к Куперу»&lt;br /&gt;
читателя и ругаемых им программистов. &lt;br /&gt;
&lt;br /&gt;
Но некоторое отличие в позиции есть — если Купер декларировал принципиальную, генетически обусловленную невозможность &lt;br /&gt;
разработки правильного интерфейса программистом, &lt;br /&gt;
то тут, автор, как бы программист, и такую радикальную позицию, поддерживать вроде как нельзя&lt;br /&gt;
(хотя «баг в ДНК» у программистов он вроде как признает — «Представляете, программисты чаще выбирают машины с ручной коробкой передач! Чертовы гики, плюющие на удобство в обмен на контроль!»).&lt;br /&gt;
&lt;br /&gt;
В результате, автор делит программистов на правильных (к которым относит и себя), &lt;br /&gt;
и недоучившихся идиотов (к которым он относит и своего бывшего начальника&amp;lt;ref&amp;gt;Случай с слабой авторизацией трейдерского софта.&amp;lt;/ref&amp;gt;.), которых можно и нужно ругать, и по крайней мере, &lt;br /&gt;
настойчивым фидбеком вправлять мозги.&lt;br /&gt;
&lt;br /&gt;
Итак, немного спойлеров. На каких же кейсах (т.е. реальных примерах), отжимается автор?&lt;br /&gt;
&lt;br /&gt;
Книга рассчитана на массового читателя, далеко даже не ITшника, поэтому, автор, на пальцах обьяснив, как примерно работает веб, рассматривает распространенные вебинтерфейсы, делающие обоснованные догадки — угадывание Googlом языка интерфейса по геотаргетированию IP-адреса, в противовес интерфейсу сайта &amp;lt;tt&amp;gt;UPS.com&amp;lt;/tt&amp;gt;, которого автор несколько десятков страниц пинает за то, что у них нужно лично выбрать свою страну в выпадающем списке. Автор призывает всех читателей слать гневный фидбек, ругать программистов UPS идиотами (считает, что только такое ругательство оскорбит аутичных программистов), и т.п. Ну и что в результате? &lt;br /&gt;
Прошло лет пять с написания этой книги — и ничего не изменилось, по-прежнему Google угадывает язык, и по-прежнему UPS предлагает самому выбрать свою страну из огромного списка пар «страна-язык».&lt;br /&gt;
&lt;br /&gt;
И кстати, я не готов переживать по этому поводу. Вот только что мучался в Египте, когда Гугл, несмотря на то, что я залогинен, и вся информация обо мне была доступна — и то, что я русский, и то, что я предпочитаю интерфейс на английском — упорно возвращал мне арабские версии страниц (полный «сбой кодировки» и верстка справа-налево), и лечилось это только прописыванием параметра &amp;lt;tt&amp;gt;hl=en&amp;lt;/tt&amp;gt; в URL каждого запроса.&lt;br /&gt;
&lt;br /&gt;
А с другой стороны, у кучи сайтов технологического плана, куда я прихожу за информацией (включая мануалы или драйверы), я всегда буду выбирать Штаты или Великобританию, чтобы получить доступ к самой большой базе, и не нарваться на криволокализованную маркетинговую страничку, где лежит всякий «бисер для аборигенов»).&lt;br /&gt;
&lt;br /&gt;
Так что между «безаппеляционным навязывание предположения робота» и сложным выбором из кучи вариантов (проблема не в двух кликах, а в огромном списке выбора, [[EnPedia:Hick's_law|закон Хика]] негодуэ!), я бы предпочел, чтобы выбор дали сделать мне, а догадку, что я русский или египтянин — предложили отдельно, для выбора в один клик. Так ведь так-то как раз никто до сих пор и не делает.&lt;br /&gt;
&lt;br /&gt;
Есть немало разумных советов, безусловно тривиальных для нормального ITшника (привет от К.О.), но полезных молодежи («поменьше шума на сайтах», «не заставляйте меня думать» и т.п.).&lt;br /&gt;
&lt;br /&gt;
Полсотни страниц автор разбирал кейс проблемы парольной аутентификации на множестве сайтов.&lt;br /&gt;
Он совершенно точно указал проблемы:&lt;br /&gt;
* одного запоминаемого пароля на все → и подобрать легко, и теряешь сразу все;&lt;br /&gt;
* незапоминаемых генерируемых паролей → «бумажки под клавиатурой»;&lt;br /&gt;
* опасность простых эвристик («русское слово английскими буквами плюс название сайта») → догадаются;&lt;br /&gt;
* опасность насильной смены паролей → пользователи придумают схему порождения.&lt;br /&gt;
* сложность таскания с собой чего-то (ключей, девайсов, …).&lt;br /&gt;
&lt;br /&gt;
Ну, думаю, сейчас этот умный человек придумает любимый мной [[SuperGenPass]]!&lt;br /&gt;
&lt;br /&gt;
И фиг тебе. &lt;br /&gt;
&lt;br /&gt;
Он придумал централизованную аутентификацию, &amp;lt;tt&amp;gt;Single Sign-On&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;Microsoft Passport&amp;lt;/tt&amp;gt;.&lt;br /&gt;
После чего предался размышлениям, почему все это провалилось. &lt;br /&gt;
Его версия — доверенным центром должен быть не Микрософт, а правительство или крупные банки/страховщики. &lt;br /&gt;
&lt;br /&gt;
Ну фиг знает, из всех этих ребят (чиновники-банкиры-страховщики), я бы лучше доверился микрософту.&lt;br /&gt;
А, да, те, кто таки хочет знать решение этой проблемы здесь и сейчас, без ожидания светлого будущего &lt;br /&gt;
с честным центром авторизации — читайте [[SuperGenPass]].&lt;br /&gt;
&lt;br /&gt;
Дальше ругать программистов кончили, и начали просвещать юзеров, чтобы постепенно подвести их к теме&lt;br /&gt;
«программист — друг человека».&lt;br /&gt;
Сначала шел просветительский раздел на тему «Privacy в Интернете или чем могут навредить вам Cookie».&lt;br /&gt;
&lt;br /&gt;
Затем, «Диалоги о &amp;lt;s&amp;gt;животных&amp;lt;/s&amp;gt; программистах» — глава о программистах, и их немудреных развлечениях&amp;lt;ref&amp;gt;Да, &lt;br /&gt;
немедленно вспоминается «[http://www.google.com/images?um=1&amp;amp;hl=en&amp;amp;client=firefox&amp;amp;rlz=1R1GGGL_ru___RU322&amp;amp;tbs=isch%3A1&amp;amp;sa=1&amp;amp;q=%22%D0%9C%D1%8B+%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D0%B5%D0%BC+%D0%B2%D0%B5%D1%87%D0%B5%D1%80%D0%B8%D0%BD%D0%BA%D1%83+%D0%B2+IT-%D1%81%D1%82%D0%B8%D0%BB%D0%B5%22&amp;amp;aq=f&amp;amp;aqi=&amp;amp;aql=&amp;amp;oq=&amp;amp;gs_rfai= вечеринка в IT-стиле]».&amp;lt;/ref&amp;gt;. &lt;br /&gt;
Конференции и гаджеты, страх &amp;lt;s&amp;gt;и ненависть в ЛасВегасе&amp;lt;/s&amp;gt; и возбуждение выступающих и участников,&lt;br /&gt;
кофеин и сахар во всех формах, абсолютное доминирование сильного пола, и любовь этого пола к порнографии при игнорировании реальных женщин.&lt;br /&gt;
&lt;br /&gt;
Кстати, наверное да, разумные наблюдения — подтверждаю, как завсегдатай программерских конференций. &lt;br /&gt;
Цитата: «''…читатель сообщил, что … некий крупный поставщик однажды пригласил танцовщиц из Dallas Cowboy Cheerleaders, но так&lt;br /&gt;
и не смог вспомнить ни этой фирмы, ни названия продукта''». &lt;br /&gt;
Тут сразу вспоминается реклама печально теперь известной фирмы McHost, рекламировавшихся на одной из конференций таким образом:&lt;br /&gt;
[[Файл:Стас Фомин на  Higload-2009 xx.JPG|600px|center]]&lt;br /&gt;
&lt;br /&gt;
Так вот, это фото со второго дня — а первый день на этих девушек никто внимания не обращал&amp;lt;ref&amp;gt;На самом деле, в первый день их ужасно раскрасили, и только на второй день специалист сделал все по-человечески — вся история [http://svetlyac.livejournal.com/63877.html тут]&amp;lt;/ref&amp;gt;, чем реально ввели их &lt;br /&gt;
в ступор&amp;lt;ref&amp;gt;Тут еще можно процитировать архетипический анекдот [http://www.google.ru/#hl=en&amp;amp;source=hp&amp;amp;q=%D0%BB%D1%8F%D0%B3%D1%83%D1%88%D0%BA%D0%B0+%D0%B8+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82&amp;amp;aq=f&amp;amp;aqi=&amp;amp;aql=&amp;amp;oq=&amp;amp;gs_rfai=&amp;amp;fp=96319cb69c82d137 про лягушку и программиста], кстати, он совершенно [http://www.google.ru/#hl=en&amp;amp;newwindow=1&amp;amp;safe=off&amp;amp;q=talking+frog+programmer&amp;amp;aq=f&amp;amp;aqi=&amp;amp;aql=&amp;amp;oq=&amp;amp;gs_rfai=&amp;amp;fp=96319cb69c82d137 интернациональный]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Дальше были попытки пояснить «над чем смеются гики», в целом же эту тему абсолютно закрывает сериал «[[RuPedia:Теория большого взрыва  (телесериал)|Теория большого взрыва]]», тут книге бесполезно конкурировать.&lt;br /&gt;
Кстати о гиковском юморе — книгу подают как полную убойного «LOL» юмора, но не рекомендую на это особо рассчитывать. &lt;br /&gt;
Может тонкий английский юмор и был, и погиб при переводе, но в целом это шутки только одним уровнем выше&lt;br /&gt;
«какую траву он курил?» (у автора — «на каких наркотиках сидела его мать во время беременности»). &lt;br /&gt;
В общем, есть экспрессия и истерика, но сейчас «в Интернете» этим никого не удивишь (так, процентов 25 от эмоционального уровня блога известного российского дизайнера).&lt;br /&gt;
&lt;br /&gt;
Но в целом книжка читается легко и быстро, так что можно прочитать даже программисту, если он не очень злобный, и терпимо относится к легкомысленным обобщениям. Тестировщику/аналитику — еще полезней. &lt;br /&gt;
Может быть имеет смысл прочитать родственникам программистов, желающих лучше понять, кто это у них такой странный в семье, — но где таких (желающих понять) найдешь?&lt;br /&gt;
&lt;br /&gt;
Основной посыл книги обращен к пользователям — не надо ненавидеть программистов, жизнь их и так ужасна, люди они ограниченные, но добрые — давайте им побольше фидбека в виде «доброго слова и пистолета» — добрых советов и пожеланий к интерфейсу, до которых они не додумаются в силу своей ограниченности и нехватке денег на специалиста-юзабилиста, и жесткого обсирания в блогах и форумах, если они вас не послушают по-хорошему.&lt;br /&gt;
&lt;br /&gt;
Сам автор ведет сайт блог http://www.suckbusters.com/ (он же http://suckbusters2.blogspot.com/ ), и не сказать, что жизнь там бьет ключом (уж год как нет обновлений, и негусто с комментариями).&lt;br /&gt;
&lt;br /&gt;
А адов [http://www.whysoftwaresucks.com/ сайт книги], с дизайном, уровня бандитских 90-ых, неработающими ссылками (причем там даже не классическая 404-страница возвращается, а «The system cannot find the file specified.», как будто CMS автора работает на bat-файлах), вероятно таки продолжает иллюстрировать мысль, почему ''software sucks'' — типа рожденный &amp;lt;s&amp;gt;ползать&amp;lt;/s&amp;gt;программировать, &amp;lt;s&amp;gt;летать не может&amp;lt;/s&amp;gt; красиво не сделает.&lt;br /&gt;
&lt;br /&gt;
Я же думаю, тут все проще — автору не достает чувства прекрасного. &lt;br /&gt;
А это можно починить, хотя поработать над собой придется, что, конечно, сложнее, чем отговорки «ну… эта… у нас порода такая…».&lt;br /&gt;
&lt;br /&gt;
[[Файл:Мистер  Виглс — юзабилист.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Рецензии в рунете ===&lt;br /&gt;
&lt;br /&gt;
* http://www.diary.ru/~hali/p104735036.htm&lt;br /&gt;
&lt;br /&gt;
{{ActualBanner}}&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;br /&gt;
[[Категория:Библиотека]]&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%B3:%D0%98%D0%B3%D0%BE%D1%80%D1%8C_%D0%91%D0%B5%D1%81%D0%BF%D0%B0%D0%BB%D1%8C%D1%87%D1%83%D0%BA/2010-06-08_%D0%91%D0%B0%D0%BB%D0%B4%D0%B5%D1%8E%D1%89%D0%B8%D0%B5_%D0%B8_%D0%B7%D0%BE%D0%BC%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5&amp;diff=43056</id>
		<title>Блог:Игорь Беспальчук/2010-06-08 Балдеющие и зомбированные</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%B3:%D0%98%D0%B3%D0%BE%D1%80%D1%8C_%D0%91%D0%B5%D1%81%D0%BF%D0%B0%D0%BB%D1%8C%D1%87%D1%83%D0%BA/2010-06-08_%D0%91%D0%B0%D0%BB%D0%B4%D0%B5%D1%8E%D1%89%D0%B8%D0%B5_%D0%B8_%D0%B7%D0%BE%D0%BC%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5&amp;diff=43056"/>
				<updated>2014-02-26T15:28:04Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:AdrenalineTemplatesZombie.jpg|frame]]&lt;br /&gt;
&lt;br /&gt;
Отзыв о книжке «[[Балдеющие от адреналина и зомбированные шаблонами]]».&lt;br /&gt;
&lt;br /&gt;
= О формате книжки и о том, где искать пользу =&lt;br /&gt;
&lt;br /&gt;
Когда мы обсуждали эту книжку в команде, прозвучало такое мнение, что книжки, в которых нет ничего, кроме сборника советов «как хорошо» и «как плохо» не очень-то полезны. Вот если бы рассказывалось о том, '''как''' избежать плохих вариантов — было бы гораздо лучше! Но в области командной организации труда четких рецептов, по-видимому, не существует.&lt;br /&gt;
&lt;br /&gt;
Не знаю, как вы, а я люблю читать предисловия и введения к разным книжкам. Иногда даже с интересом читаю типографские выходные данные &amp;lt;sup&amp;gt;(шутка)&amp;lt;/sup&amp;gt;. В книжке, о которой мы поговорим, «Балдеющие от адреналина и зомбированные шаблонами», в кратеньком двухстраничном введении содержится чрезвычайно важный посыл, который наполняет весь остальной объем совершенно особенным смыслом. Не пропускайте введение!&lt;br /&gt;
&lt;br /&gt;
Суть этого посыла в том, что вы можете начать работать своим левым полушарием мозга с каким-то явлением только после того, как вычлените его, отделите от всего остального и как-то назовете. До этого вам придется оперировать на уровне туманных правополушарных ощущений и предчувствий. А западная цивилизация слишком отвыкла доверять ощущениям и предчувствиям, разучилась их использовать. Нашему левополушарному человеку вынь да положь понятия, концепции и формулы, которые можно проанализировать логически сознательно.&lt;br /&gt;
&lt;br /&gt;
И в этом смысле паттерны командного поведения, изложенные так как есть, без начала и конца, в произвольном порядке, позволяют взглянуть на ситуации, которые происходят вокруг вас, более внимательно, более ''осознанно''. Осознание начинается с узнавания, с выявления подобия. Обычно это узнавание происходит при сравнении текущей ситуации с нашим прошлым жизненным опытом. Но у большинства из нас не было такого большого опыта командной разработки ПО в разных командах и разных организациях, какой накопился у авторов книги.&lt;br /&gt;
&lt;br /&gt;
Эта книга — способ передать нам хотя бы часть этого опыта. И возможность для нас — перенять этот опыт в малой его части, и получить материал для сравнения, узнавания, и осознания, которые могут нам позволить хоть чуть-чуть изменить ситуацию к лучшему. По-моему, это не так уж мало!&lt;br /&gt;
&lt;br /&gt;
= О стиле книжки =&lt;br /&gt;
&lt;br /&gt;
Кроме практической пользы нельзя не упомянуть об эстетическом удовлетворении, которое я получил от книжки (и переводом она вроде не изгажена). Небольшие главки с описаниями паттернов снабжены прикольными картинками, фотографиями, изящными эпиграфами и читаются «на ура» как отдельные маленькие истории. Язык очень выразительный, отточенный, меткий. Мыслью по древу авторы не растекаются. Я лично просто напросто читал с большим удовольствием.&lt;br /&gt;
&lt;br /&gt;
= О паттернах у нас =&lt;br /&gt;
&lt;br /&gt;
Конечно, в процессе чтения я пытался рефлексировать и соотносить каждый паттерн с тем, что я наблюдаю в нашей компании (команде). За проявления некоторых положительных паттернов я чувствовал гордость за компанию, по поводу некоторых отрицательных — хотелось повздыхать: «Да, да, так и есть…». А читая еще про некоторые паттерны я с удивлением обнаруживал, что это тоже про нас. Последние, как мне кажется, были самыми полезными — это и есть то самое осознание через узнавание.&lt;br /&gt;
&lt;br /&gt;
Надо сказать, что самых мерзких паттернов у нас нет, как я понимаю, никогда не было, и, надеюсь, не будет. Я говорю о таких вещах, как, например, «Дохлая рыба», «Собрание для оваций», «Карандашный огрызок» и «Оффшорное безрассудство». Более того, за свою практику я вообще не встречал таких проявлений. Может, мне везло? :)&lt;br /&gt;
&lt;br /&gt;
С удовольствием я отмечал, что многие положительные паттерны у нас воспринимаются как само собой разумеющееся. Это, например, паттерны «Я не знаю», «Взаимное обучение», «Естественный авторитет».&lt;br /&gt;
&lt;br /&gt;
Есть такие паттерны, которые скорее относятся к индивидуальным проявлениям: «Правоверный», «Атлант» — такие у нас тоже встречаются :)&lt;br /&gt;
&lt;br /&gt;
Хочется остановиться подробнее еще на нескольких. Я попробую «перевести» эти паттерны на язык наших конкретных ситуаций и коротко прокомментировать. Может, вас это заинтересует и подтолкнет к самостоятельному прочтению книжки :)&lt;br /&gt;
&lt;br /&gt;
; Отраженная боль&lt;br /&gt;
Мы пытаемся решить какую-то проблему, например, что тестировщики не успевают протестировать функционал до конца итерации из-за того, что разработчики оставили им слишком мало времени. Мы придумываем какие-то способы, которые вроде призваны решить проблему, но есть четкое ощущение, что это лечение симптоматическое, как парацетамол при гриппе.&lt;br /&gt;
&lt;br /&gt;
; Manana&lt;br /&gt;
Действительно, мы часто не глядим дальше &amp;lt;s&amp;gt;своего носа&amp;lt;/s&amp;gt; текущей или следующей итерации, и никуда особо не торопимся.&lt;br /&gt;
&lt;br /&gt;
; Сдача души в аренду (какой-либо технологии, с пониманием ее неидеальности, смирение с этим)&lt;br /&gt;
CISForms, no comments ;) Я горжусь этими людьми.&lt;br /&gt;
&lt;br /&gt;
; Без скамейки запасных!&lt;br /&gt;
Возникает необходимость запустить новый модуль для Спортмастера, но мы «вдруг» обнаруживаем, что собирать команду неоткуда, все группы и так сильно «обескровлены», свободных людей нет, из-за этого страдает мобильность и способность '''качественно''' реагировать на изменения. Переливаем из пустое в порожнее.&lt;br /&gt;
&lt;br /&gt;
; Советский стиль&lt;br /&gt;
Нам (Торговые сети) в этом плане везет — мы имеем сильнейшее конкурентное преимущество, так как уже «встали» в Спортмастере. Но что будет дальше?&lt;br /&gt;
&lt;br /&gt;
; Правила виноделов&lt;br /&gt;
У нас есть много правил и практик, которых мы не придерживаемся :(&lt;br /&gt;
&lt;br /&gt;
; Пограничная зона&lt;br /&gt;
Очень важный паттерн, я про него раньше «знал», но книжка позволила мне его вербализировать и получить уверенность в том, что этот паттерн очень положительный. Речь идет о том, что один разработчик склонен делать только то, что ему было явно указано, а второй — делает гораздо больше, и спрашивает разрешения (или даже извиняется постфактум) только про то, что было явно запрещено, и двигает при этом продукт вперед, активно работая в «пограничной зоне». Второе — гораздо более предпочтительно и неправильно ругать за такое проявление инициативы. С радостью вспоминаю, что я сам часто проявлял такое поведение на проектах (улучшал продукт «тайком от менеджера»), и с гордостью говорю, что у нас такие люди есть! Хотя, конечно, с этим есть свои проблемы, но полученный результат их стоит.&lt;br /&gt;
&lt;br /&gt;
; Свободное кресло&lt;br /&gt;
Это проблемный паттерн в Спортмастере — частенько не хватает человека, который бы обозревал бизнес-процесс целиком. В результате пользователи работают в трех системах, Excel’е и бумажном журнале.&lt;br /&gt;
&lt;br /&gt;
; Плаксы не играют в баскетбол&lt;br /&gt;
; Хладнокровный люк&lt;br /&gt;
Два важных паттерна, которые я вдруг «узнал» (или мне так показалось). Речь идет о том, что в организации яркое проявление эмоций или рабочий конфликт считаются неприемлемыми и свидетельствующими о неспособности человека к общению. Это не так. Совершенно шикарное утверждение из книжки: «Люди спорят и выплескивают эмоции только до тех пор, пока обсуждаемое дело им небезразлично». Безразличие гораздо хуже, а яркие эмоции просто нужно учиться адекватно воспринимать. Проблема бывает не в говорящем, а в слушающем. Аналогично — с конфликтами. Конфликт — это нормально, а иногда даже и хорошо, если он, конечно, не переходит на личности. Просто с конфликтами нужно учиться работать.&lt;br /&gt;
&lt;br /&gt;
; Дети из Лейк Вобегон&lt;br /&gt;
Это про наши оценки :) Действительно, бывает так трудно адекватно оценить лучших и худших.&lt;br /&gt;
&lt;br /&gt;
; Нераздельное внимание&lt;br /&gt;
Приводится оценка, что человек, занятый в трех проектах, теряет 60 % своей эффективности по сравнению с тем, как если бы он работал над одним проектом.&lt;br /&gt;
&lt;br /&gt;
; Семь самураев (я переназвал паттерн, в книжке используется невразумительно длинное немецкое слово)&lt;br /&gt;
Это про «истинный Agile», как я его для себя недавно понимал, как об этом рассказывает Д.Петелин. Команда сверх-заряженных чуваков, которые со скоростью молнии все пишут и переписывают. Ирония в том, что такие команды годятся далеко не для всех проектов.&lt;br /&gt;
&lt;br /&gt;
; Льюис и Кларк&lt;br /&gt;
Нам этого очень явно не хватает — выделенного ресурса исследования, сознательно направленного на внешний мир.&lt;br /&gt;
&lt;br /&gt;
; C кого спрос&lt;br /&gt;
Хороший вопрос — бывает ли командная ответственность? Бывает ли она у нас?&lt;br /&gt;
&lt;br /&gt;
; Вавилонская башня&lt;br /&gt;
Недавно был прецедент, связанный со словом «операция». Выяснилось, что одна сторона понимала под операцией проводки, а другая — нечто совершенно свое. При интеграции случился конфуз :)&lt;br /&gt;
&lt;br /&gt;
; Вечер покера&lt;br /&gt;
; Музыканты&lt;br /&gt;
У нас есть футбол по четвергам, но это подходит не всем. А может, есть ли еще какие-то регулярные нерабочие тематические встречи, о которых многие не знают?&lt;br /&gt;
&lt;br /&gt;
; Регулярная сдача в строк&lt;br /&gt;
Очень интересно было бы посчитать по каждой команде процент сдачи в срок (в конце итерации сделано все, что планировалось) и посмотреть на сводную табличку. У нас процент, увы, очень невелик :(В чем истинная, корневая проблема этого?&lt;br /&gt;
&lt;br /&gt;
= Краткое заключение =&lt;br /&gt;
&lt;br /&gt;
Книжка очень понравилась, советую прочитать и порефлексировать на тему прочитанного всем, кому интересно и небезразлично, в какой команде и компании он работает.&lt;br /&gt;
&lt;br /&gt;
{{wl-publish: 2010-06-13 21:29:39 +0400 | IgorBespalchuk }}&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;br /&gt;
[[Категория:Книги]]&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9F%D1%80%D0%B5%D0%B7%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F-%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%84%D0%BE%D1%80%D0%BC%D0%B5%D1%80:_S5_%D0%BD%D0%B0_MediaWiki&amp;diff=43053</id>
		<title>Презентация-трансформер: S5 на MediaWiki</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9F%D1%80%D0%B5%D0%B7%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F-%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%84%D0%BE%D1%80%D0%BC%D0%B5%D1%80:_S5_%D0%BD%D0%B0_MediaWiki&amp;diff=43053"/>
				<updated>2014-02-26T15:04:37Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;slide style=&amp;quot;custis&amp;quot; scaled=&amp;quot;true&amp;quot; headingmark=&amp;quot;Слайд&amp;quot;&amp;gt;&lt;br /&gt;
;addcss: * { font-family: «Segoe Print» !important; } .resc img { width: 500px; height: auto !important; } pre { font-family: Consolas !important; }&lt;br /&gt;
;author: Виталий Филиппов&lt;br /&gt;
&amp;lt;/slide&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{/Слайды}}&lt;br /&gt;
&lt;br /&gt;
== Слайд ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #aaa&amp;quot;&amp;gt;У нас стало&amp;lt;/span&amp;gt; популярно&lt;br /&gt;
&lt;br /&gt;
быстрее&amp;lt;span style=&amp;quot;color: #aaa&amp;quot;&amp;gt;, чем мы распиарили :)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Слайд ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ВСЁ&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;small&amp;gt;Виталий Филиппов&amp;lt;/small&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;small style=&amp;quot;color:#aaa&amp;quot;&amp;gt;vitalif *трям-трям* mail.ru&amp;lt;/small&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Аннотация ==&lt;br /&gt;
&lt;br /&gt;
Классические презентации — «устное выступление перед аудиторией, дополняющее аудиоканал визуальным каналом со слайдами», известны всем.&lt;br /&gt;
&lt;br /&gt;
Какие у них самые известные проблемы? Все, наверное, знакомы с «[http://www.slideshare.net/thecroaker/death-by-powerpoint-rus Смертью от Powerpoint]», гласящей, что основная проблема — перегруженность слайдов информацией.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что выступающий пытается угнаться за двумя зайцами и делает слайды двойного назначения — такие, под которые можно и «выступить», и такие, чтобы их могли прочитать отсутствующие на выступлении. Хочется, как лучше, а получается, как всегда — страшные «слайдоменты» (гибриды документа и слайда) вырубают аудиторию, заставляя её читать мелкий текст под монотонный бубнёж диктора. Но и самостоятельно читать «слайдоменты» сложнее, чем обычную статье.&lt;br /&gt;
&lt;br /&gt;
Кроме того, слайды обычно являются бинарными документами (Open Office, Keynote, PowerPoint), что убивает конкурентную работу и контроль версий. Итог — слайды, если это не какое-нибудь [http://takahashi.su/ Такахаши] (которое в FF 3.6, кстати, не работает) — исключительно ''write-only'' продукт, который создаётся единожды, более не развивается и пылится в дальних углах файлохранилища.&lt;br /&gt;
&lt;br /&gt;
Гуру «слайдологии» говорят — оставьте на слайде 1 мысль, 1 строку текста, 1 иллюстрацию, 1 график и так далее, потому что большее никто всё равно не осилит. И говорят, что на выходе будет «идеальная» презентация. На самом деле на выходе будет красочная WOW-презентация в стиле «гипножаба», идеальная для менеджера по продажам и абсолютно невозможная к самостоятельному изучению.&lt;br /&gt;
&lt;br /&gt;
У нас, разработчиков, цели другие — презентациями нам надо не продавать, а рассказывать и обучать (в том числе, чтобы обучала сама презентация, без нас). Делать презентации нам надо быстро и часто — к каждой демонстрации, совещанию, учебному курсу. Их необходимо целостно развивать, вносить изменения. Нужна возможность параллельной коллективной работы. Ну и хотелось бы, чтобы все было максимально быстро — минимум затрат, максимальный эффект — и чтобы можно было использовать все — текст, анимацию, видео, майндмапы, ибо время тупых статичных слайдов давно умерло вместе с диапроекторами.&lt;br /&gt;
&lt;br /&gt;
Встречайте! Решение — прикрученная к MediaWiki система презентаций S5 (чистый html+javascript).&lt;br /&gt;
&lt;br /&gt;
Любая статья MediaWiki теперь может быть не только прочитана, но и показана как презентация! Разумеется, в слайд-части разрешаются иллюстрации, тезисы, а поясняющая текстовая часть статьи (если таковая есть), в режиме презентации скрывается. Сохраняются все возможности MediaWiki:&lt;br /&gt;
&lt;br /&gt;
* Быстрое совместное редактирование, с контролем версий и историей изменений.&lt;br /&gt;
* Поддержка сотен расширений эффективной публикации (раскраска кода, автоматические диаграммы, майндмапы и т. п.).&lt;br /&gt;
* Презентация-статья — стандартный и целостный элемент общей базы знаний (ссылки, включения, шаблоны и т. п.).&lt;br /&gt;
&lt;br /&gt;
И при этом используются все возможности веб-публикации:&lt;br /&gt;
&lt;br /&gt;
* встраивание видео, флеш-объектов и т. п., они гораздо богаче возможностей PowerPoint или PDF-слайдов.&lt;br /&gt;
* можно мгновенно перейти от просмотра статьи к показу слайдов используя только броузер.&lt;br /&gt;
* есть навигация по слайдам, функциональность таймера.&lt;br /&gt;
&lt;br /&gt;
Чем-то это похоже на «[http://takahashi.su/ Такахаши]» — метод экстремально быстрого создания презентаций, порождаемых из плоского текста. Только S5 — это не XUL, а чистый кроссбраузерный HTML и JavaScript, помноженные на удобства централизованной базы знаний на движке MediaWiki, и в нашей компании технология стало популярна сразу же, после первого показа.&lt;br /&gt;
&lt;br /&gt;
* http://events.kapranoff.ru/proposals/23&lt;br /&gt;
&lt;br /&gt;
[[Category:Презентации]]&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=XHTML&amp;diff=43049</id>
		<title>XHTML</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=XHTML&amp;diff=43049"/>
				<updated>2014-02-26T14:39:35Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''XHTML''' — '''Расширяемый язык разметки гипертекстов''' (E'''x'''tensible '''H'''yper'''t'''ext '''M'''arkup '''L'''anguage) это язык разметки, который имеет те же возможности разметки что и [[HTML]], однако с более строгими требованиями к семантике. Как [[HTML]], так и XHTML являются применением [[SGML]], однако XHTML относится к более ужесточенному подмножеству, переходному к [[XML]]. XHTML 1.0 одобрен в качестве рекомендации W3C 26 января 2000 года.&lt;br /&gt;
&lt;br /&gt;
== Общее представление ==&lt;br /&gt;
XHTML является преемником [[HTML]] и его текущей версией. Потребность в более строгой версии HTML возникла из-за того что веб-контент сегодня все больше становится ориентированным на распространение через нетрадиционные виды устройств (например мобильные телефоны), в которых зачастую ограничены ресурсы, в том числе и для обработки гибкого, нетребовательного HTML (чем свободнее синтаксис языка тем сложнее его разбирать).&lt;br /&gt;
&lt;br /&gt;
Использование XHTML в сочетании с [[CSS]] позволяет отделить оформление документа от его содержимого.&lt;br /&gt;
&lt;br /&gt;
Отличия переходного (transitional) XHTML от HTML незначительны и ставят за цель лишь приведение его в соответствие с XML:&lt;br /&gt;
* все тэги были правильно построенными;&lt;br /&gt;
* все тэги должны записываться строчными буквами;&lt;br /&gt;
* все атрибуты, включая численные, должны быть заключены в кавычки. &lt;br /&gt;
* все элементы должны быть закрыты, включая те которые не имеют закрывающего тега (закрываются добавлением слэша в конце начального тэга). &lt;br /&gt;
* Минимизация атрибутов (к примеру &amp;amp;lt;option selected&amp;amp;gt; или &amp;amp;lt;td nowrap&amp;amp;gt;) также воспрещена. Детальнее об отличиях можно узнать из XHTML спецификации W3C.&lt;br /&gt;
&lt;br /&gt;
==Пример XHTML-документа==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code-xml&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;windows-1251&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &lt;br /&gt;
                      &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xml:lang=&amp;quot;ru&amp;quot; lang=&amp;quot;ru&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;$Author: tsatur $&amp;quot;&amp;gt;&amp;lt;/meta&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;Last-Modified&amp;quot; content=&amp;quot;$Date: 2005/03/25 17:19:18 $&amp;quot;&amp;gt;&amp;lt;/meta&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=windows-1251&amp;quot;&amp;gt;&amp;lt;/meta&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-Language&amp;quot; content=&amp;quot;ru&amp;quot;&amp;gt;&amp;lt;/meta&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;../css/cisprint.css&amp;quot;&amp;gt;&amp;lt;/link&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Заказные ИнформСистемы&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;&lt;br /&gt;
     Компания &amp;lt;b&amp;gt;ООО &amp;amp;#xAB;Заказные ИнформСистемы&amp;amp;#xBB;&amp;lt;/b&amp;gt; образована в 1996 году.&lt;br /&gt;
     &amp;lt;br/&amp;gt;Специализация: проектирование и создание учётно-аналитических &lt;br /&gt;
		программных комплексов для предприятий различных сфер деятельности.&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;h3&amp;gt;Миссия&amp;lt;/h3&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Наше кредо: система для клиента, а не клиент для системы.&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Вместе с заказчиком мы шаг за шагом укрепляем его конкурентные преимущества, &lt;br /&gt;
     создаем основу для его роста и развития&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/code-xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Версии XHTML ==&lt;br /&gt;
&lt;br /&gt;
Ниже приведены основные утвержденные версии XHTML, и соответствующие декларации [[DTD]], которые необходимо включать в начало документа (после стандартного XML-заголовка с указанием кодировки, см. [[#Пример XHTML-документа]]) для корректной валидации:&lt;br /&gt;
&lt;br /&gt;
;XHTML 1.0 Transitional (Переходный): предназначен для легкой миграции от HTML3.2 или для тех кто использует инлайн-фрэймы.&lt;br /&gt;
&amp;lt;code-xml&amp;gt;&lt;br /&gt;
   &amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;      &lt;br /&gt;
                         &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/code-xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;XHTML 1.0 Strict (Строгий): отделяет содержание от оформления (которое теперь переносится в CSS), многие атрибуты (такие как например bgcolor, align) более не поддерживаются, их поведение можно задавать только через таблицу стилей.&lt;br /&gt;
&amp;lt;code-xml&amp;gt;&lt;br /&gt;
  &amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot;    &lt;br /&gt;
                        &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/code-xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;XHTML 1.0 Frameset (Фрэймовый): используется если необходимо разделить окно браузера на несколько фрэймов.&lt;br /&gt;
&amp;lt;code-xml&amp;gt;&lt;br /&gt;
       &amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Frameset//EN&amp;quot;        &lt;br /&gt;
                             &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/code-xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;XHTML 1.1: авторы могут импортировать дополнительные свойства в их разметку. &lt;br /&gt;
&amp;lt;code-xml&amp;gt;&lt;br /&gt;
       &amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.1//EN&amp;quot; &lt;br /&gt;
                             &amp;quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/code-xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сейчас идет работа над спецификацией XHTML 2.0, который находится в состоянии «Working Draft».&lt;br /&gt;
&lt;br /&gt;
== Валидация XHTML документов ==&lt;br /&gt;
&lt;br /&gt;
Валидным (т. е. отвечающим всем правилам) XHTML документом считается документ удовлетворяющий спецификации. В идеале, все браузеры должны следовать веб-стандартам и в соответствии с ними валидные документы должны отображаться во всех браузерах под всеми платформами. Валидация XHTML документа рекомендована даже несмотря на то, что она не гарантирует кросс-браузерной совместимости. Документ может быть проверен на соответствие спецификации в Службе Валидации Разметки [[W3C]] ([http://validator.w3.org/]).&lt;br /&gt;
&lt;br /&gt;
Самыми распространенными ошибками в XHTML являются:&lt;br /&gt;
&lt;br /&gt;
* Незакрытые элементы (XHTML, в отличие от HTML, требует закрытия всех элементов)&lt;br /&gt;
* Отсутствие альтернативных текстов для изображений (достигающийся применением атрибута &amp;lt;code&amp;gt;alt&amp;lt;/code&amp;gt;, который помогает сделать документы доступнее для устройств которые не в состоянии отображать изображения или предназначенных для слепых).&lt;br /&gt;
* Присутствие текста непосредственно в &amp;amp;lt;body&amp;amp;gt; документа.&lt;br /&gt;
* Вложение блочных элементов внутрь инлайновых.&lt;br /&gt;
* Пренебрежение заключения значений атрибутов в кавычки.&lt;br /&gt;
* Неправильное вложение элементов.&lt;br /&gt;
* Неправильное использование SGML-обьектов (entity), например &amp;lt;code&amp;gt;&amp;amp;amp;&amp;lt;/code&amp;gt; вместо &amp;lt;code&amp;gt;&amp;amp;amp;amp;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Написание тэгов и/или атрибутов прописными буквами.&lt;br /&gt;
&lt;br /&gt;
Для валидации также можно использовать локальные (не веб-службы) программы и утилиты.&lt;br /&gt;
&lt;br /&gt;
Например, можно использовать утилиту &amp;lt;code&amp;gt;onsgmls&amp;lt;/code&amp;gt; от проекта [http://www.openjade.org/ OpenJade], предназначенную для валидации произвольных [[SGML]]-документов,&lt;br /&gt;
которая честно (без малейших &amp;quot;зашивок&amp;quot; в коде) проверяет предоставленный XHTML-документ на соответствие [[DTD]]-файлу.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[HTML]]&lt;br /&gt;
* [[XML]]&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*[http://www.w3.org/MarkUp/ W3C's HTML Home Page]&lt;br /&gt;
*[http://www.w3.org/TR/xhtml1/ XHTML 1.0 Specification]&lt;br /&gt;
*[http://www.w3.org/TR/xhtml11/ XHTML 1.1 Specification]&lt;br /&gt;
*[http://www.w3.org/TR/xhtml2/ Working Draft of XHTML 2.0]&lt;br /&gt;
* {{link-to-wikipedia}}&lt;br /&gt;
&lt;br /&gt;
=== Валидаторы ===&lt;br /&gt;
*[http://www.openjade.org/ Валидация и обработка SGML-документов]&lt;br /&gt;
*[http://validator.w3.org/ W3C's HTML валидатор]&lt;br /&gt;
*[http://www.validome.org/ Валидатор Validome]&lt;br /&gt;
*[http://validate.sourceforge.net HTML/XHTML Validator Project on SourceForge]&lt;br /&gt;
&lt;br /&gt;
[[Category:БазаЗнаний]]&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Firefox:_%D0%A1%D0%BE%D0%BA%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B2_%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B5&amp;diff=43062</id>
		<title>Firefox: Сокращения в адресной строке</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Firefox:_%D0%A1%D0%BE%D0%BA%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B2_%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B5&amp;diff=43062"/>
				<updated>2014-02-26T13:43:00Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox предоставляет несколько способов быстро найти информацию в интернет. Самый широко известный из них — воспользоваться специальный строкой поиска, которая располагается справа от адресной строки. Но есть еще один способ, менее известный. Запустить поиск можно сразу из строки ввода адреса, указа специфичный префикс перед запросом. Например,&lt;br /&gt;
  google ищу сам не знаю что&lt;br /&gt;
приведет к поиски строки «ищу сам не знаю что» поисковиком Google. В стандартную инсталляцию FF входит несколько таких заготовок, в частности поиск по Wikipedia осуществляется сокращением wp.&lt;br /&gt;
Рассмотрим, как добавить свои собственные сокращения. По сути дела, поисковые сокращению задаются в свойстве закладок краткое имя. Набрав это имя в строке поиска, осуществляется незамедлительный перехода на ссылку, сохраненную в закладке. А теперь самая главная хитрость. Если в этой строке ввести символ ''%s'', то при вместо него будет поставлена строка, следующая за коротким именем в строке ввода.&lt;br /&gt;
С теорией покончено, перейдем к практике. Для примера добавим быстрый поиск багов [[Bugzilla]] в Firefox.&lt;br /&gt;
* Ищем какой-нибудь баг. Например, 23701. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смотрим адрес, на который отправила нас поисковая система:&lt;br /&gt;
  http://bugs.office.custis.ru/bugs/show_bug.cgi?id=23701&lt;br /&gt;
&lt;br /&gt;
возможно, будут еще дополнительные параметры, разделенные ''&amp;amp;''.&lt;br /&gt;
* Заносим ссылку в закладки.&lt;br /&gt;
* Открываем свойства закладки (правой клавишей — Свойства).&lt;br /&gt;
* Находим в адресе ссылки строку 23701 и заменяем ее на %s.&lt;br /&gt;
* Вводим краткое имя (в случае [[Bugzilla|Bugzill’ы]], естественно, указал ''bug'').&lt;br /&gt;
* Сохраняем изменения.&lt;br /&gt;
&lt;br /&gt;
Вуаля! Пробуем ввести в адресной строке&lt;br /&gt;
  bug 21046&lt;br /&gt;
и попадаем на страницу результатов бага.&lt;br /&gt;
&lt;br /&gt;
'''А можно ещё короче''' — задайте для багзиллы просто сокращение «b». Это является решением для {{Bug|61155}}, в котором захотелось быстро открывать баг в новой вкладке. Другой вариант решения той же задачи — ввести номер бага в поле «быстрый поиск» Bugzilla и сделать Shift-Click по кнопке «Search». Однако, во-первых, это работает только в Opera и в Firefox, при условии, что установлено расширение [https://addons.mozilla.org/ru/firefox/addon/483 SubmitToTab], а во-вторых, всё равно дольше, так как задействует и клавиатуру, и мышь, а сокращения в адресной строке — только клавиатуру: &amp;lt;tt&amp;gt;Ctrl-T, b 12345, Enter&amp;lt;/tt&amp;gt; (Ctrl-T — открытие новой вкладки).&lt;br /&gt;
&lt;br /&gt;
Аналогично, чтобы из адресной строки выполнить сразу поиск в [[{{SITENAME}}]], нужно добавить закладку с адресом:&lt;br /&gt;
 &lt;br /&gt;
 {{SERVER}}{{localurl:Special:Search|search=%s}}&lt;br /&gt;
&lt;br /&gt;
и установить закладке подходящий «Keyword», например «wiki».&lt;br /&gt;
Пожалуйста, теперь «wiki Graphviz» в адресной строке сразу откроет статью [[Graphviz]].&lt;br /&gt;
&lt;br /&gt;
[[Категория:БазаЗнаний]]&lt;br /&gt;
[[Категория:Firefox]]&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D0%B8_%D1%81%D0%BE%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2&amp;diff=43048</id>
		<title>Категория:Статьи сотрудников</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D0%B8_%D1%81%D0%BE%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2&amp;diff=43048"/>
				<updated>2014-02-25T12:27:15Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Статьи сотрудников компании, опубликованные в бумажных и электронных СМИ.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:CustisWikiToLib]]&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Logo_profsoux.45a753e62c3f.png&amp;diff=43512</id>
		<title>Файл:Logo profsoux.45a753e62c3f.png</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Logo_profsoux.45a753e62c3f.png&amp;diff=43512"/>
				<updated>2014-02-25T11:11:11Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: Массовая правка: удаление Категория:Открытые тесты&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:CRN_(%D0%9F%D1%83%D0%B1%D0%BB%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8)&amp;diff=43025</id>
		<title>Категория:CRN (Публикации)</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:CRN_(%D0%9F%D1%83%D0%B1%D0%BB%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8)&amp;diff=43025"/>
				<updated>2014-01-14T13:57:47Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: VitaliyFilippov переименовал страницу Категория:CRM (Публикации) в Категория:CRN (Публикации) без оставления перенаправления&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Статьи сотрудников компании, опубликованные в [http://www.crn.ru/ CRN/RE] («ИТ-бизнес»).&lt;br /&gt;
&lt;br /&gt;
[[Категория: По СМИ (статьи сотрудников)]]&lt;br /&gt;
[[Категория: CustisWikiToLib]]&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Bug&amp;diff=43050</id>
		<title>Шаблон:Bug</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Bug&amp;diff=43050"/>
				<updated>2013-11-12T21:50:34Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Ссылка на баг в Bugzilla. Использовать так:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Bug|Номер бага|(опционально) заголовок}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
См. также:&lt;br /&gt;
* [[:Template:Attachment|Ссылка на вложение]]&lt;br /&gt;
* [[:Template:BugInfo|Маленький информер по багу]]&lt;br /&gt;
* [[:Template:BugInformer|Большой информер по багу]]&lt;br /&gt;
* [[:Template:Bz-embed|Встраивание списка багов из Bugzilla (с учётом прав доступа)]]&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-all}}&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;[http://bugs.office.custis.ru/bugs/show_bug.cgi?id={{{1|}}} {{#if:{{{2|}}}|{{{2}}}|Bug:{{{1|}}}}}]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Highload-2013:_%D0%9E%D1%82%D1%87%D1%91%D1%82_%D0%92%D0%B8%D1%82%D0%B0%D0%BB%D0%B8%D1%8F_%D0%A4%D0%B8%D0%BB%D0%B8%D0%BF%D0%BF%D0%BE%D0%B2%D0%B0&amp;diff=42952</id>
		<title>Highload-2013: Отчёт Виталия Филиппова</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Highload-2013:_%D0%9E%D1%82%D1%87%D1%91%D1%82_%D0%92%D0%B8%D1%82%D0%B0%D0%BB%D0%B8%D1%8F_%D0%A4%D0%B8%D0%BB%D0%B8%D0%BF%D0%BF%D0%BE%D0%B2%D0%B0&amp;diff=42952"/>
				<updated>2013-11-11T22:04:47Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: /* Как рассуждать о производительности хранилищ баз данных / Mark Callaghan (Facebook) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Информация о конференции, организация:&lt;br /&gt;
* Highload-2013, «Конференция разработчиков высоконагруженных систем». Проходила в очередной раз в конференц-зале гостиницы Radisson на м. Киевская.&lt;br /&gt;
* Самая первая и самая распиаренная из Бунинских конференция. Билет стоил аж 21000, плюс ещё были отдельные «учебный» и «VIP» дни (на которых я, естественно, не был).&lt;br /&gt;
* Хайлоад начался с хайлоад-очереди на регистрацию. В разные обработчики она, правда, почему-то была разная (очередь с приоритетами, где каждый оценивает свой приоритет сам?), и встав в другую, ты терял времени на порядок-два меньше.&lt;br /&gt;
* Вайфай нормально не работал, до отваливания в нём удавалось посидеть минут 5.&lt;br /&gt;
* С едой всё было более-менее в порядке — кофе-чай всё время, 2 перерыва, каждый из которых для части людей — кофе-брейк с плюшками, а для другой части — обед (балансировали нагрузку талонами). Небольшие трудности с обедом — народу много, места сесть не хватало, часть еды быстро кончалась. Но голодным там всё равно никто не оставался.&lt;br /&gt;
* Дали большую кучу раздаточных материалов — книжку с частью докладов с прошлой конференции, диск, рекламу, 3 блокнота… Полезный элемент — в этом году вместо ахтунг-стайл красной авоськи дали сумку для ноутбука, в которую и был упакован весь выданный crap.&lt;br /&gt;
&lt;br /&gt;
Общая атмосфера:&lt;br /&gt;
* Атмосфера в целом какая-то «коммерческая», видно, что компании туда ходят уже по накатанной для регулярного пиара.&lt;br /&gt;
* Докладчики (компании) — всё одни и те же лица, посетители — наоборот, похоже, исключительно новые. Правильно Стас выразился — это как с борделем, нормальный человек ходит туда 1 раз в жизни; это ты ходишь постоянно, и тебя уже ничем не удивишь.&lt;br /&gt;
* Девушек на конференции не было почти совсем, ''«радостную»'' программистскую тусовку разбавить было некем.&lt;br /&gt;
* Многие зарубежные «звёзды», как обычно, лили воду, содержательной части в докладах от FB, например, процентов 10.&lt;br /&gt;
* Было много докладов от одних и тех же компаний — может это и не плохо, но по-моему свидетельствует о неком спаде доступного разнообразия (или слабом подборе). Ну и badoo (которое сайт знакомств и вообще непонятно, почему в 21 веке имеет столько юзеров) уже слушать как-то неинтересно. Примеры повторов:&lt;br /&gt;
*: По 3 доклада от Badoo и 2ГИС; по 2 от Одноклассников, Facebook, Monty Program AB, Qrator/HLL, mail.ru, HashiCorp. К этим в общем-то претензий нет, понятно, что вторых таких же чуваков, как Qrator, найти сложно.&lt;br /&gt;
&lt;br /&gt;
== День 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Экосистема Сочи 2014. Космос как предчувствие / Михаил Чеканов (Оргкомитет Сочи 2014), Ольга Куликова (Articul Media) ===&lt;br /&gt;
&lt;br /&gt;
На докладе не был, отмечаю потому, что из интересного там было очевидное :-) сайт сначала сделали на БИТРИКСЕ, но потом всё-таки поняли, что с этого нереального ужоса надо сваливать. И таки свалили — переписали всё сами и довольны.&lt;br /&gt;
&lt;br /&gt;
=== (незачёт) Как поставить миграцию баз данных на поток / Илья Космодемьянский, Роман Друзягин ===&lt;br /&gt;
&lt;br /&gt;
Чуваки пытались рассказывать доклад вдвоём попеременно. Это хороший формат выступления, но слайды у них тем не менее были совершенно жуткие, да и сам рассказ таил в себе больше воды.&lt;br /&gt;
&lt;br /&gt;
* Из содержательного — миграции нужно всегда отрабатывать и нужно всегда иметь план «Б», то есть иметь возможность быстро откатиться назад, если миграция БД не удастся.&lt;br /&gt;
* Из смешного — если будете покупать IBM DB2 — скажите, что мигрируете с оракла, они вам сделают скидку :-D&lt;br /&gt;
&lt;br /&gt;
=== Полнотекстовый поиск в Почте Mail.Ru / Дмитрий Калугин-Балашов ===&lt;br /&gt;
&lt;br /&gt;
Зашёл в самом конце, услышал чуть-чуть. В общем, смысл в том, что полнотекстовый поиск написан полностью кастомный, хранит отдельный индекс для каждого пользователя, и умеет сортировать только по дате. Вроде внутри некая лог-структура.&lt;br /&gt;
&lt;br /&gt;
Из смешного — их спросили, неужели вам не подошло ни одно из готовых решений, зачем вы написали свой поиск? Они ответили — потому что есть ресурсы! («because we can!»)&lt;br /&gt;
&lt;br /&gt;
=== Своевременная оптимизация / Carlos Bueno (Facebook) ===&lt;br /&gt;
&lt;br /&gt;
Доклад рассказан неплохо, хоть содержательность и хромает. В основном было много общих слов.&lt;br /&gt;
&lt;br /&gt;
Чувак из фейсбука перевёл слайды на русский язык (на каждом слайде фраза была и по-английски, и по-русски)… но, видимо, перевёл google translate’ом, потому что были такие перлы:&lt;br /&gt;
* Optimisation: don’t ever do it! (* except sometimes).&amp;lt;br /&amp;gt; {{mag|Оптимизация: никогда не делайте его! (* кроме иногда)}}&lt;br /&gt;
* Distrust numbers. Especially your own.&amp;lt;br /&amp;gt;{{mag|Числа недоверия. Особенно ваше собственное.}}&lt;br /&gt;
&lt;br /&gt;
Ещё из смешного — доклад он начал со слов:&lt;br /&gt;
* I work at Facebook, it’s a V Kontakte in America. I work at facebook performance team…&lt;br /&gt;
И тут кто-то спросил (было в твиттере, было ли в реале — не уверен) :D&lt;br /&gt;
* OK, so when will you begin? [working on facebook performance]&lt;br /&gt;
&lt;br /&gt;
А дальше общие размышления:&lt;br /&gt;
* Проблема должна быть проверяемой, если она непроверяемая — то это не проблема…&lt;br /&gt;
* Два пути решения — повысить производительность либо сдвинуть нагрузку (которой мы можем управлять — обсчёт какой-нибудь и т. п.)&lt;br /&gt;
* Оптимизация это больше не про computer science, а про science science; вообще вся разработка — типа, умение «playing computer in your head». Однако: who is better than you in playing computer? the fucking computer! (не помню, к чему это — видимо к тому, что можно пытаться не придумать, а симулировать нагрузку)&lt;br /&gt;
* Опять про корректность измерений: «I feel really stupid saying about this, but directly measure what you optimize»&lt;br /&gt;
* Говорит, мы в один день проснулись, а Facebook на 10 % быстрее. Он такой — я говорю начальнику, смотри, круто! А он — ты зря радуешься, если много ситуаций, в которых система может ВНЕЗАПНО стать на 10 % быстрее, и лишь малая часть из них — хорошие :-)&lt;br /&gt;
&lt;br /&gt;
=== Распространение систем на Scala благодаря Finagle / Julio Capote (Twitter) ===&lt;br /&gt;
&lt;br /&gt;
Товарищ из Twitter’а просто рассказывал какая хорошая scala, и какая у них есть под неё библиотека RPC [https://github.com/twitter/finagle Finagle], я как-то выпал из контекста.&lt;br /&gt;
&lt;br /&gt;
=== Опыт переезда соцсети Livestreet с PHP/MySQL на NodeJS/Redis/Lua / Дмитрий Дегтярев (Хабикаса) ===&lt;br /&gt;
&lt;br /&gt;
Странный доклад… У чуваков был стандартный сайтик на стандартной отстойной блого-социально-подобной CMS’ке Livestreet. Данных там мало, всего несколько тысяч постов. И его вместо того, чтобы просто переписать, переписали на сильно извращённый вариант:&lt;br /&gt;
* В качестве БД — Redis&lt;br /&gt;
* В качестве логики — хранимые процедуры на Lua внутри Redis’а O_O&lt;br /&gt;
* Вместо классической схемы сделали сайт почти целиком на AJAX&lt;br /&gt;
* Генерация маленьких HTML страничек для возможности индексации осталась в Node.js&lt;br /&gt;
&lt;br /&gt;
Сразу отметим: запихивать толстые хранимые процедуры в redis == на корню убивать его производительность, он же однопоточный мультиплексирующий и все команды должны выполняться быстро.&lt;br /&gt;
&lt;br /&gt;
Типа, кэш мы инвалидировать не хотим, давайте сразу всё хранить в кэше… :-) хотя Redis — это вообще-то не кэш, а БД. Просто когда он вылезает за размеры памяти, работает весьма печально, а пока не вылезает, всё и так в памяти и по скорости он таки да, почти как memcache. Ещё в Redis’е есть два понятия — embed и sideload, типа при загрузке связанные сущности могут либо подгружаться по ID отдельно, либо встраиваться прямо в родительскую сущность. Первое, очевидно, меньше занимает места, второе — делает меньше запросов.&lt;br /&gt;
&lt;br /&gt;
Потом чувак сделал мегасерьёзный «бенчмарк» и расстроился, потому что redis с его подходом не получился быстрее MySQL! Бенчмарк заключался в измерении скорости загрузки ВСЕХ ПОСТОВ из базы одним запросом. Офигеть бенчмарк. «На мой взгляд редис должен быть в 10 раз быстрее… но сейчас это не так, или я тест сделать ниасилил подходящий даже» :-)&lt;br /&gt;
&lt;br /&gt;
Ещё в моих заметках отмечено «бред про многопоточный редис», но что это значит, я уже забыл :-)&lt;br /&gt;
&lt;br /&gt;
Потом он полез профилировать redis, и обнаружил, что 50 % времени тот проводит в string2ll (конвертации строки в число). Интересно.&lt;br /&gt;
&lt;br /&gt;
Но в общем и целом, буханка, троллейбус. Badoo’шники того же мнения, их чувак выразился «то есть вы решили пересесть с лёгких наркотиков на тяжёлые».&lt;br /&gt;
&lt;br /&gt;
=== Дизайн движка метапоиска aviasales / Борис Каплуновский (Aviasales) ===&lt;br /&gt;
&lt;br /&gt;
Интересный доклад от Aviasales («метапоисковика» авиабилетов), докладчик сначала было испугался, что его, как и предыдущего, сейчас запинают насмерть ребята из Badoo — он сказал, «я наверное тоже по вашему мнению пересел на тяжёлые наркотики», но на самом деле — нет, и архитектура, и доклад вполне адекватны и тот же badoo’шник это признал :-)&lt;br /&gt;
&lt;br /&gt;
'''Задача:''' есть куча поставщиков API, которые по запросу умеют отдавать дикого размера XML’ки или JSON’ы с ценами на авиабилеты (1-30 мб). Пользователь выбирает даты, пункт отправки и назначения и число человек, и по этому запросу Aviasales должен максимально быстро сделать запросы ко всем поставщикам, собрать от них цены и отобразить пользователю в порядке возрастания. Кэшировать особо не покэшируешь, так как информация быстро меняется и должна быть максимально актуальной.&lt;br /&gt;
&lt;br /&gt;
Нюанс: поставщики обычно сами тоже агрегаторы и тоже делают запросы к авиакомпаниям. И эти запросы поставщикам API '''не''' бесплатны. Соответственно, хоть запросы от Aviasales к ним для самого Aviasales и бесплатны, всё-таки лишние запросы тоже делать нельзя. Короче говоря, задача достаточно простая и прямолинейная.&lt;br /&gt;
&lt;br /&gt;
Ещё нюанс: по их исследованиям конверсия уменьшается на 30 %, если среднее время ответа сайта повышается со 100 до 500 миллисекунд. Так-то.&lt;br /&gt;
&lt;br /&gt;
'''Как было:''' Раньше у них всё это было представлено некой системой, написанной на Ruby On Rails, и это было довольно печально, так как RoR — типичный веб-фреймворк:&lt;br /&gt;
* Стартует небыстро, 5-10 секунд (и перезачитывать код на лету видимо не умеет?) — это несколько затрудняет отладку.&lt;br /&gt;
* Занимает немало памяти под каждый процесс зависимостями и т. п. (у них вроде 300 мб, но вероятно с учётом разделямой памяти)&lt;br /&gt;
* Полностью синхронный, и пока какой-то процесс делает запрос к внешней системе — процесс тупо висит, курит бамбук и ждёт ответа на сокете. Занятая память простаивает. Кроме того, пока таким образом не завершатся все скачивания — не получается начать отдачу страницы пользователю (не получается сделать «живой поиск»).&lt;br /&gt;
&lt;br /&gt;
'''Как стало:''' В общем, им всё это поднадоело, они решили всё переписать и изобрели свой «сервис-ориентированный» DSL на питоне, на основе сервера [http://www.tornadoweb.org/ Tornado]. DSL называется «Ясень», состоит из изолированных обработчиков (у которых на входе 1 объект и на выходе 1 объект) и довольно прост, умеет всего 3 вещи:&lt;br /&gt;
* Последовательные цепочки — выход одного обработчика скармливается другому&lt;br /&gt;
* Параллельные цепочки — выход одного обработчика скармливается набору других&lt;br /&gt;
* Отложенные цепочки — выход всегда равен входу, предназначены для побочных эффектов (логгирование и т. п.)&lt;br /&gt;
Цепочки запускаются внутри одного процесса, то есть даже никакие JSON’ы между серверами туда-сюда не гоняются. Каждый обработчик при этом можно дёрнуть извне, таким образом отлаживаясь.&lt;br /&gt;
&lt;br /&gt;
Система в целом написана на этом DSL, и его даже понимают менеджеры — бывает, приходят и говорят: а вставьте-ка мне вот сюда вот такой обработчик… И они вставляют.&lt;br /&gt;
&lt;br /&gt;
'''Архитектура хранения''' — данные делятся на несколько видов:&lt;br /&gt;
* Мелкие справочники (например, валюты) — хранятся в памяти процесса на каждом сервере.&lt;br /&gt;
* Толстые справочники (&amp;gt; 1 мб) — хранятся в файловой key-value БД [http://fallabs.com/kyotocabinet/ kyotocabinet]. Она маппится в память процесса, соответственно, разделяется всеми процессами. Реплицируются на сервера с помощью, кажется, файловым репликатором [http://code.google.com/p/lsyncd/ lsyncd].&lt;br /&gt;
* Логи — всегда пишутся локально, а потом асинхронно перетаскиваются в глобальное хранилище.&lt;br /&gt;
* Динамические данные — пишутся на 2 redis-сервера для отказоустойчивости.&lt;br /&gt;
&lt;br /&gt;
'''Какие есть процессы:'''&lt;br /&gt;
* «Пчёлы» — рабочие процессы, «муравьи» — те, что логи переносят, и локальное хранилище (плёлы и муравьи — это не я придумал, это у него в докладе так было).&lt;br /&gt;
* Ещё есть [http://haproxy.1wt.eu/ HAProxy] для распределения соединений, «многоножка» — интерфейс администрирования, и мониторинг [http://mmonit.com/monit/ monit], в который смотрит «пингвин»-админ.&lt;br /&gt;
* Если упадёт 1 redis — пофиг, система работает дальше. Если упадёт второй redis — ну, увы. Говорит, если у меня упадёт два редиса, я сначала уволю админа, а потом поставлю третий.&lt;br /&gt;
* Ещё при каких-то видах сбоев (если помрёт глобальное хранилище логов?) — часов 8 оно точно спокойно проживёт, а это время, за которое типичный «пингвин» может выспаться, прийти и всё пофиксить.&lt;br /&gt;
&lt;br /&gt;
Как делается синхронизация данных на серверах после сбоя — он не рассказывал. Возможно, делается руками админа-«пингвина».&lt;br /&gt;
&lt;br /&gt;
=== Как мы храним 60 тысяч событий в секунду / Арсен Мукучян (AdRiver) ===&lt;br /&gt;
&lt;br /&gt;
Сурьёзный плюсист в чорном костюме рассказывал, как за 5..10 человеко-лет (5 человек за 2 года вперемешку с другими задачами) они переписали хранилку событий в AdRiver. Событие ≈ показ баннера, занимает от 0.1 до 4 Кб. Старая система работала на основе syslog (оригинально), который дропает события, когда их становится много (это фича, а не баг). Писали они исключительно хранилку, конкретные вычисления статистики отданы на откуп клиентам к хранилищу (то есть, другим отделам).&lt;br /&gt;
&lt;br /&gt;
Рассказывал немного грустновато, я немного отключался. Итог реализации — кажется, поточная схема взаимодействия и «поуровневая» система архивирования: свежие события на «ближних» серверах, старые «дальше», ещё из старых событий может удаляться малополезная, но длинная информация типа Referer…&lt;br /&gt;
&lt;br /&gt;
Нагрузка сейчас 2 гбит/сек (закладывали до 20 гбит/сек), загрузка CPU 20-40 %, обслуживается 5000 клиентов с 10 серверов.&lt;br /&gt;
&lt;br /&gt;
=== Обзор популярных современных алгоритмов хранения данных на диске: LevelDB, TokuDB, LMDB, Sophia / Константин Осипов (Mail.ru, Tarantool) ===&lt;br /&gt;
&lt;br /&gt;
Что-то в этом году на хайлоаде было популярно рассказывать про всякие структуры хранения данных, в основном — оптимизированные для быстрой записи. Докладов было аж несколько. Но тем не менее — весьма интересно, я про детали реализации этих структур раньше как-то не слышал.&lt;br /&gt;
&lt;br /&gt;
Во-первых, '''[[wikipedia:Log-structured_merge-tree|LSM-деревья]]''' (Log-structured merge-tree). Идея в том, что у LSM дерева есть несколько уровней хранения увеличивающихся размеров, первый (нулевой, он же memtable) из которых лежит в памяти, а остальные лежат на диске. Каждый уровень представляет собой дерево или список деревьев, и у каждого уровня есть растущий (обычно в 10 раз на уровень) лимит размера. Вставка производится сначала в нулевой уровень, при переполнении он сбрасывается в первый, при переполнении первого — попадает во второй… И так далее. Вставки получаются быстрые, так как не нужно мучаться с перезаписью отдельных мелких блоков данных. Однако зато мы, во-первых, имеем неслабый write amplification, а во-вторых — при поиске значений должны просматривать все деревья (что не круто). С первым ничего не поделаешь, а со вторым борются поддержание в памяти bloom-фильтров — некой хеш-таблицы, посмотрев в которую, можно сказать, в каких деревьях данных точно НЕТ, а в каких они МОГУТ БЫТЬ.&lt;br /&gt;
&lt;br /&gt;
LSM-деревья используются в библиотеке [http://code.google.com/p/leveldb/ LevelDB] от гугла, встраиваемой SQL БД [http://sqlite.org/src4/doc/trunk/www/design.wiki SQLite 4], в HBase, Wired Tiger и в NoSQL БД [http://cassandra.apache.org/ Apache Cassandra].&lt;br /&gt;
&lt;br /&gt;
Во-вторых, '''Cache-oblivious структуры''' (общий термин, характеризующий то, что структуры эффективно используют кэш процессора, не зная его точного размера). Подход используется в новомодном движке хранения для MySQL — [[wikipedia:TokuDB|TokuDB]] (у них это называется [http://www.tokutek.com/2013/07/tokumx-fractal-treer-indexes-what-are-they/ Fractal Tree Indexes]). Идея в чём-то похожая — просто в каждом узле обычного B-дерева ещё поддерживается «буфер» для вставок, и вставляемые элементы сначала попадают туда, а уже потом сбрасываются в дочерние узлы. Засчёт этого скорость записи опять-таки увеличивается и не падает, даже когда индекс перестаёт влезать в память.&lt;br /&gt;
&lt;br /&gt;
В-третьих, '''Bitcask''', используемый в [http://basho.com/riak/ Basho Riak]. Это вообще вещь тупая — данные всегда пишутся последовательно, хеш-индекс всегда держится в памяти.&lt;br /&gt;
&lt;br /&gt;
Ну и последнее — некий гибридный подход, используемый в библиотеке '''[http://sphia.org/architecture.html Sophia]'''. Там, с одной стороны, данные делятся на непересекающиеся регионы, индекс которых (min, max для каждого) держится в памяти (получается что-то типа листов B-дерева), с другой — в памяти есть хеш-таблица, в которую в начале попадают новые элементы (чем-то похоже на memtable LSM-дерева). На диск последний хеш пишется в виде «журнала» (чтобы данные не терялись). А когда данных в этом хеше становится слишком много — данные распределяются по регионам, которые в свою очередь при переполнении разбиваются на под-регионы.&lt;br /&gt;
&lt;br /&gt;
В конце докладчика спросили — а как [http://tarantool.org/ Tarantool]-то хранит?! Как, как — да никак. В памяти он хранит. В будущем, возможно, его научат хранить и на диске.&lt;br /&gt;
&lt;br /&gt;
=== Статистика на практике для поиска аномалий в нагрузочном тестировании и production / Антон Лебедевич ===&lt;br /&gt;
&lt;br /&gt;
Доклад интересный — про то, как можно применять методы статистики для выявления потенциальных проблем системы по графикам кучи показателей с кучи серверов. Ну или как их хотя бы сгруппировать / почистить так, чтобы количество стало вменяемым и в нём мог разобраться человек.&lt;br /&gt;
&lt;br /&gt;
Выявление аномалий:&lt;br /&gt;
* Поиск изменения среднего. С помощью банального скользящего обычного или экспоненциального среднего.&lt;br /&gt;
* Поиск изменения распределения данных (делим данные на две части, применяем критерий Колмогорова-Смирнова).&lt;br /&gt;
* Выявление нелинейного роста.&lt;br /&gt;
* Выделение тренда с учётом сезонности + сильный выход за его границы (классический Холт-Винтерс). Минус в том, что нет нормального алгоритма для трёх сезонов, а их обычно как раз три :-) да и вообще в реальных данных часто встречается, например, график вида «пила».&lt;br /&gt;
* Нарушение автокорреляции показателя.&lt;br /&gt;
&lt;br /&gt;
Группировка показателей (поиск зависимостей между графиками):&lt;br /&gt;
* Применяются методы кластеризации (k-средние, иерархическая группировка).&lt;br /&gt;
* На основе, например, корреляции или среднеквадратичного отклонения между графиками.&lt;br /&gt;
* Однако есть минус — такая группировка прекрасно «ловит» ротацию логов (когда старые логи сжимаются/удаляются). Она обычно происходит на всех машинах в один момент, и смена разных показателей в этот момент отлично группирует графики, хотя вообще-то их группировать незачем.&lt;br /&gt;
&lt;br /&gt;
Всё это (или по меньшей мере часть), как ни странно, реализована в опенсорсном виде и её можно пощупать: https://github.com/etsy/skyline, https://github.com/etsy/oculus (части некого Kale Stack).&lt;br /&gt;
&lt;br /&gt;
== День 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Завалить в один запрос: уязвимости веб-приложений, приводящие к DoS / Иван Новиков (ONsec) ===&lt;br /&gt;
&lt;br /&gt;
Доклад немного в стиле «капитан ясен хрен», и явно было заметно, что товарищ пиарил свою конторку.&lt;br /&gt;
&lt;br /&gt;
Рассказывал про баги в сайтиках, через которые «всё поломать» не получится, но DoS устроить вполне можно. Часть идей была полным (или НЕполным) бредом:&lt;br /&gt;
* Бажные парсеры — типа бывают баги в парсерах (XML, CSV, входных параметров и т. п.), из-за которых оные зацикливаются. Утверждал бред, что если передать PHP параметр вида ?a[][][]…[][][], то он зациклится. Это конечно не отменяет того, что такие баги _возможны_, но явно не в этом месте.&lt;br /&gt;
* Ещё одна бредовая идея — чувак утверждал, что популярные новомодные «классификаторы» (типа [http://utinet.ru ютинетовского]) тормозят, если им выдать что-то непонятное («синий красный зелёный одновременно фиолетовый и вес меньше 100кг»). Дурь. С чего им тормозить? Разве что имеются ввиду движки, которые по условию (&amp;lt; 100кг) вытаскивают все возможные значения веса и ищут по множеству? Но и это к серьёзным тормозам не приведёт. Ютинетовский подтупливает, конечно, но он и в целом небыстрый… а на DoS в один запрос это как-то не тянет.&lt;br /&gt;
* Про переполнение хранилища сессий. Типа если сессии очень жирные (если там хранится вся история посещений со всеми полями запроса), то их туда можно накидать своих, и других людей не будет логинить, или если они в tmpfs, память кончится (что бред — tmpfs ограничен в размере). Но даже если всё так, то эксплуатировать довольно геморно — это надо реально долбить сервер запросами, иначе ваши «толстые» сессии всё равно будут вытесняться.&lt;br /&gt;
* А вот эта относится к классу «капитан ясен хрен»: вспомнил поиск по регэкспам в БД, которые при этом ещё и берутся из параметров запроса. Не, то есть я не против, PHP-сайтики много &amp;lt;abbr title=&amp;quot;Сам Себе Злобный Буратино&amp;quot;&amp;gt;ССЗБ&amp;lt;/abbr&amp;gt; пишут — многие популярные движки, например, исполняемый код в базе хранят (битрикс, Invision Power Board, например). Но это же реально ССЗБ — ясно же, что поиск по регэкспу в БД медленный ВСЕГДА. А он говорил, что типа можно сделать такой регэксп, который будет делать очень глубокий поиск с возвратом (backtracking) и тормозить.&lt;br /&gt;
&lt;br /&gt;
Некоторые идеи были вполне ничего:&lt;br /&gt;
* Часто ограничивают заливаемую картинку размером в килобайтах, но не ограничивают размер в пикселях. А ведь в PNG можно создать хоть 100000x100000 картинку маленького размера, залитую одним цветом — там же сжатие. И в итоге на масштабирование, и даже на кроп такой картинки приложение тут же потратит всю память сервера. Лучше даже так рассчитать размер, чтобы в OOM процесс сваливаться не успевал, а чтобы просто дико свопился — пожалуйста, DoS в один запрос.&lt;br /&gt;
* Пример с яндексом — они нашли баг в WebDAV сервисе яндекс диска — попытка перемещения папки в свою дочернюю приводила к зацикливанию. Им даже 5000 рублей за эту находку дали.&lt;br /&gt;
* Любые взаимодействия по сокетам, в которые можно подсунуть свой адрес — например, OpenID. Дело в том, что таймаут запроса часто работает не в целом, а на 1 операцию чтения из сокета. Тогда делаем свой сервер, который на запрос будет раз в ''(таймаут-1)'' секунд отвечать 1 байтом. Подсовываем его URL и делаем с ним штук 80-100 запросов к сайтику. Итог — все рабочие процессы заняты тем, что прилежно ждут, пока наш сервер им посылает данные по 1 байту.&lt;br /&gt;
&lt;br /&gt;
Но про самое классическое чувак почему-то не вспомнил! Самое классическое — это банальное открытие последних страниц какого-нибудь длинного тяжёлого поиска. В один запрос, конечно, не завалишь, но лёгким DoS’ом заставить сайт дико тупить от такого действия можно очень часто.&lt;br /&gt;
&lt;br /&gt;
=== Масштабирование скомпилированных приложений / Joe Domato ===&lt;br /&gt;
&lt;br /&gt;
Причем тут «масштабирование» — непонятно. Рассказ был про автоматизацию сборки и CI. Послушал чуть-чуть, услышал про:&lt;br /&gt;
* На винде все эти автотесты и CI настраивать геморно, на нормальных системах сильно удобнее.&lt;br /&gt;
* Тестов мы не хотим много и не хотим мало.&lt;br /&gt;
* Сборка должна быть повторяемой.&lt;br /&gt;
&lt;br /&gt;
=== (полный отстой) Анализ производительности и оптимизация MySQL / Пётр Зайцев (Percona) ===&lt;br /&gt;
&lt;br /&gt;
Тут я даже заметок никаких не напишу. Доклад вообще ни о чём, его можно было не делать. Там были не просто общие слова, а 100%-ная вода, состоящая из тривиальнейших идей. Про оптимизацию MySQL там не было '''вообще ничего''', ни одной фразы.&lt;br /&gt;
&lt;br /&gt;
Кто после такого доклада пошёл ещё и на мастер-класс этого мастера лить воду — лопух ;-)&lt;br /&gt;
&lt;br /&gt;
=== Платформа для Видео сроком в квартал / Александр Тоболь (Одноклассники) ===&lt;br /&gt;
&lt;br /&gt;
Рассказ о том, как Одноглазники передалали свой видеосервис на собственную платформу. До этого он работал сначала на платформе видео@мейл.ру, потом на rutube. Но, судя по всему, ни качество, ни стабильность ни того, ни другого их не устроило, а задача создания средненького видеосервиса — она в принципе не такая уж и суперсложная, поэтому они его решили сделать сами.&lt;br /&gt;
&lt;br /&gt;
Объёмы нормальные, в день: 10 млн уников, 60 млн просмотров (до 100 гб/сек), 50 тысяч новых видео (= 5 ТБ = до 5 гб/сек).&lt;br /&gt;
&lt;br /&gt;
Итого устроено всё довольно просто:&lt;br /&gt;
* Хранилище — 70 серверов, 5 петабайт, БД и кэш — ещё 30, парк ffmpeg’ом под zookeeper’ом для трансформации — ещё 60, раздача и загрузка — ещё 30.&lt;br /&gt;
* Есть возобновляемая загрузка (failover).&lt;br /&gt;
* Используют flash. Хотят доделать HTML5 плеер.&lt;br /&gt;
* Как обычно, псевдостриминг (и правильно, все так делают, кроме тупого рутуба). То есть, не RTMP или что-то подобное, а обычная раздача MP4 через HTTP, а если нужно перемотаться — HTTP Range Request.&lt;br /&gt;
* Собственный вариант [https://github.com/danielgtaylor/qtfaststart qt-faststart] — скрипта, который перемещает MOOV Atom (заголовок видео) в начало файла (он в MP4 по дефолту в конце O_o), а также удаляет из него информацию о лишних keyframe’ах.&lt;br /&gt;
* Нюансы перепаковки: несколько качеств, в 15 % случаев требуется коррекция длительности.&lt;br /&gt;
* Чтобы всё это работало быстро, они, во-первых, напилили собственный кэш на своих [https://github.com/odnoklassniki/one-nio one-nio] и [https://github.com/odnoklassniki/shared-memory-cache unsafe кэше], в который всегда попадают все заголовки видео, плюс попадает само видео кусками по 256 Кб.&lt;br /&gt;
* Для кэша используется 96 Гб RAM и 4 ТБ SSD’шек на каждом сервере, плюс [http://obsproject.com/ OBS]. 80 % cache hit.&lt;br /&gt;
&lt;br /&gt;
=== Вещание видео на 10 ГБит/с / Максим Лапшин (Erlyvideo) ===&lt;br /&gt;
&lt;br /&gt;
Erlyvideo теперь вышел на американский рынок и называется Flussonic. И, видимо, теперь его используют разные группы нехороших лиц, наживающихся на продаже «нихрена» (контента). Сам Erlyvideo от этого, правда, хуже не стал (а то и стал лучше) и остался опенсорсным, что, безусловно, хорошо.&lt;br /&gt;
&lt;br /&gt;
Рассказывал про разные нюансы раздачи видео с одного сервера на 10 гигабит. Типа процы в принципе не особо ускорились за 5 лет, но зато подешевели 10 гбит каналы, и появились SSD’шки, и вроде как стало можно раздавать и 10 гигабит. Например, на нагрузках в несколько гигабит у них подыхал software raid. И прочее — прерывания, дисковые очереди и т. п.&lt;br /&gt;
&lt;br /&gt;
=== DDoS атаки в России в 2013 / Александр Лямин (QratorLabs/HLL) ===&lt;br /&gt;
&lt;br /&gt;
Обзор ситуации с DDoS’ом в России за этот год.&lt;br /&gt;
&lt;br /&gt;
Интересное:&lt;br /&gt;
* Атак стало больше в 1.5 раза, рекорд за день вырос в 2 раза, макс. размер ботнета тоже немного подрос, рекорд длительности — наоборот, упал.&lt;br /&gt;
* Spoofed атак («с чужого IP») стало больше, чем прямых.&lt;br /&gt;
* В основном пик активности был в конце зимы и весной (в отличие от 2012 — пик был летом).&lt;br /&gt;
* Уверенный лидер по атакам как в 2012, так и в 2013 — внимание, '''магические услуги'''! O_o за ним идёт правительство с почти четырёхкратным отставанием. Это что, такая «чёрная ddos магия»? Или просто кармическое наказание для шОрлатанов?&lt;br /&gt;
* Отличная картинка и фраза про «год фиолетового DNS» (DNS amplification): ''тут есть всё — и фиолетовые пони, и облака, и кирпичи высокой кристаллизации… А почему пони фиолетовый — это потому, что его уже просто больше нельзя бить, он сплошная гематома''&amp;lt;br /&amp;gt;[[File:Год фиолетового DNS.jpg]]&lt;br /&gt;
* Товарищ зачем-то ругал UDP, потому что типа «любой протокол без авторизации и с плечом ответа» может привести к такому же усилению. Что-то мне кажется, что глупо UDP ругать — не будет его, будет что-нибудь ещё. А вот ratelimit на публичных сервисах — это правильно, да.&lt;br /&gt;
&lt;br /&gt;
=== История MySQL и MariaDB / Michael Widenius (Monty Program Ab) ===&lt;br /&gt;
&lt;br /&gt;
Видениус забавен, говорит с совершенно аццким акцентом. Рассказывал просто обзор фич MariaDB (аналогично https://mariadb.com/kb/en/mariadb-versus-mysql-features/). Напоминаю, [https://mariadb.org/ MariaDB] — это такой правильный MySQL, который пишут в основном те же люди, что писали изначально, вместо индусов из Oracle. О чём Видениус и напомнил, сказав, что программисты оракла явно не совсем понимают код, над которым работают.&lt;br /&gt;
&lt;br /&gt;
Хотел я у него спросить, что у них там происходит с движком Aria, но не успел :-(. Aria — это «безопасный MyISAM», который в будущем они планировали сделать и транзакционным. Интересно, насколько он развивается, и есть ли вообще смысл в том, чтобы делать из него транзакционный движок — есть подозрение, что с появлением транзакционности все его плюсы (которые были) растворятся, и получится ещё один InnoDB, тормозящий на вставках.&lt;br /&gt;
&lt;br /&gt;
=== Оптимизатор запросов в MariaDB: теперь и без индексов! / Сергей Голубчик (Monty Program Ab) ===&lt;br /&gt;
&lt;br /&gt;
Отличный доклад — разработчик марии рассказывал о том, как они недавно наконец-то запилили в MariaDB статистику, независимую от движка хранения.&lt;br /&gt;
&lt;br /&gt;
Типа, раньше статистика полагалась на движок и на индексы, так как говорила движку: «оцени мне cardinality этого индекса», «сколько строк в таблице?», «сколько стоит фуллскан?». А движки врут. Ну, не то, чтобы явно врут, но бывает, что а) подкручивают значения так, чтобы получать нужные планы, и б) просто делают неточную оценку. В итоге, например, значения от разных движков вообще могут различаться.&lt;br /&gt;
&lt;br /&gt;
А теперь сама мария умеет считать статистику по таблицам, индексам и даже колонкам (без индексов, ищет мин/макс, процент NULL, среднюю длину, обратную мощность и умеет считать гистограммы) путём ANALYZE, работающего через фулскан таблицы. Используются гистограммы равной высоты (то есть с неравномерной шкалой).&lt;br /&gt;
&lt;br /&gt;
Нюансы, я так понял, такие: во-первых, надо иногда делать ANALYZE (само оно статистику не считает), во-вторых, часть оптимизаций полезна для «медленных» выполнений запроса, без индексов.&lt;br /&gt;
&lt;br /&gt;
Из юмора:&lt;br /&gt;
* Показывал пример с таблицами сотрудников — «вот, смотрите, это такой странный набор данных, где мало менеджеров…»&lt;br /&gt;
* Ему задавали вопрос, он такой, «я не уверен что я понял &amp;lt;s&amp;gt;запрос&amp;lt;/s&amp;gt; вопрос…» :D&lt;br /&gt;
&lt;br /&gt;
=== Как рассуждать о производительности хранилищ баз данных / Mark Callaghan (Facebook) ===&lt;br /&gt;
&lt;br /&gt;
А вот и ещё один доклад про всевозможные LSM-деревья, LevelDB и подобное. В принципе нормальный доклад, но не совсем про производительность, а именно что про «рассуждения».&lt;br /&gt;
&lt;br /&gt;
А именно — про Write Amplification, Read Amplification и Space Amplification — то есть, про увеличение числа записанных/прочитанных/хранимых данных по сравнению с тем, что мы реально хотим записать/прочитать/хранить. Понятное дело, что зачастую Write Amplification есть у оборудования (например, SSD), у СУБД (redo/undo лог), ФС (мин. единица записи — 1 сектор). Space Amp: метаданные, фрагментация, старые версии данных… Read Amp: как раз относится ко всяким LSM, когда чтобы что-то прочитать, нужно сходить во все уровни. Типа, Write/Read Amp ограничивает производительность — она не может быть больше, чем максимальная скорость работы дисков делить на усиление.&lt;br /&gt;
&lt;br /&gt;
А теперь примерные оценки этих значений:&lt;br /&gt;
&amp;lt;tab sep=&amp;quot;tab&amp;quot; class=&amp;quot;wikitable&amp;quot; head=&amp;quot;topleft&amp;quot; style=&amp;quot;text-align: center&amp;quot;&amp;gt;&lt;br /&gt;
Алгоритм	point read-amp	range read-amp	write-amp	space-amp&lt;br /&gt;
B-дерево	1	1..2	page/row * GC	1..2&lt;br /&gt;
LSM leveled	1 + N*bloom	N	10*уровни	1.1 X&lt;br /&gt;
LSM с N частями	1 + N*bloom	N	возможно &amp;lt; 10	can be &amp;gt; 2&lt;br /&gt;
log-only (bitcask)	1	N	1 / (1-%live)	1 / %live&lt;br /&gt;
memtable+L1 (sophia)	1	1	размер БД/размер L0	1&lt;br /&gt;
memtable+L0+L1 (MaSM)	1 + N*bloom	N	3	2&lt;br /&gt;
tokudb	1	2	10*уровни	1.1 X&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Примечания:&lt;br /&gt;
* Это копия со слайда, только я про разные типы B-дерева опустил — у них всех один и тот же показатель. Разница только в сборке мусора&lt;br /&gt;
* Если постоянно коммитить в B-деревьях, то Write Amp — очень большой (1 на лог + размер страницы делить на размер строки), есть нет — то меньше. Space Amp зачастую около 2, так как страницы держатся полными на ~60 %.&lt;br /&gt;
(10 — это типичная разница в размерах между уровнями)&lt;br /&gt;
&lt;br /&gt;
В общем, интересно, но, в принципе, эти «усиления» далеко не всегда определяют производительность благодаря разнице в скорости последовательного и случайного ввода-вывода (и благодаря кэшу, кстати).&lt;br /&gt;
&lt;br /&gt;
См. также linkbench в https://www.facebook.com/MySQLatFacebook&lt;br /&gt;
&lt;br /&gt;
=== Cassandra vs. In-Memory Data Grid in eCommerce / Александр Соловьев (Grid Dynamics) ===&lt;br /&gt;
&lt;br /&gt;
Рассказ о том, как они переводили некий продукт с хранилища в оперативной памяти (а конкретно это был Oracle Coherence In-Memory Data Grid) на Кассандру. Именно на неё, потому что у Mongo и HBase обнаружены &amp;lt;abbr title=&amp;quot;Single Point Of Failure, единая точка отказа&amp;quot;&amp;gt;SPOF&amp;lt;/abbr&amp;gt;, сложное развёртывание, и некоторые эксклюзивные блокировки. Плюс, кассандра умеет работать на несколько датацентров, что тоже было требованием.&lt;br /&gt;
&lt;br /&gt;
Резюме — если данные влезают в память и если немного подтюнить кассандру — она, в принципе, практически так же производительна, как in-memory БД, ибо Linux’овый дисковый кэш работает хорошо.&lt;br /&gt;
&lt;br /&gt;
У них была магическая цифра, с каждым тюном производительность росла на +15 % TPS :-D конкретно тюны были следующие:&lt;br /&gt;
* Выключить swap&lt;br /&gt;
* Commit log и данные — положить на разные диски&lt;br /&gt;
* Асинхронные запросы по многим ключам + token-aware routing &amp;amp;rarr; ещё +15 % TPS&lt;br /&gt;
* Юзать последнюю версию — с 1.2.6 на 1.2.8 &amp;amp;rarr; ещё +15 % TPS&lt;br /&gt;
* Ключ «родительского» объекта как первый компонент составного ключа «дочернего» (группирует она их, видимо) &amp;amp;rarr; ещё +15 % TPS&lt;br /&gt;
* Локальные кэши &amp;amp;rarr; ещё +15 % TPS&lt;br /&gt;
&lt;br /&gt;
=== Сравнение распределенных файловых систем / Marian Marinov (1H Ltd.) ===&lt;br /&gt;
&lt;br /&gt;
Доклад с качественным вдумчивым бенчмарком нескольких распределённых файловых систем (линуксовых, разумеется).&lt;br /&gt;
&lt;br /&gt;
* Сначала про ethernet контроллеры — из типичного гигабитного выжимается ~500 mbit всего лишь. Чтобы приблизиться к теоретическому лимиту (~920 mbit), нужно покупать дорогой контроллер.&lt;br /&gt;
* Потом про ядро — почесать разные сетевые sysctl (см. презентацию: http://www.slideshare.net/profyclub_ru/marian-marinov), ethtool (всякие segmentation offload, receive offload)&lt;br /&gt;
* Потом переходим к бенчмаркам: GlusterFS, XtremeFS, FhgFS, Tahoe-LAFS.&lt;br /&gt;
* Итог — наилучший вариант это FhgFS, так как скорость хорошая и нет внезапных тормозов.&lt;br /&gt;
&lt;br /&gt;
=== JIT компиляция в виртуальной машине Java / Алексей Рагозин ===&lt;br /&gt;
&lt;br /&gt;
Тот же мэн, что рассказывал на SECR’е про Performance Test Driven Development. «Серия» из двух докладов, с общим названием «JVM Deep Dive» :-)&lt;br /&gt;
&lt;br /&gt;
Первый доклад — про JIT.&lt;br /&gt;
* Бывает классический JIT. Просто берёт код и компилит в машинный код перед запуском. Это .net, jvm, v8, ionmonkey.&lt;br /&gt;
* Бывает трассирующий JIT (tracing JIT) — который сначала запускает в интерпретируемом варианте, а потом повторяющиеся куски («трассы») JIT’ит. Они получаются идеальные и без ветвлений совсем. Это flash, tracemonkey, pypy, luajit.&lt;br /&gt;
* JIT в JVM (и официальной, и OpenJDK) довольно крутой. Он умеет разные оптимизации:&lt;br /&gt;
** Умеет на лету inline’ить функции&lt;br /&gt;
** Умеет заменять метод на стеке — в момент возврата из функции управление получает JIT, подменяет реализацию метода (вдруг заинлайнить что-то решил, например) и подменяет адрес возврата.&lt;br /&gt;
** Умеет превращать простые объекты в наборы скаляров (типа Point = float x, float y).&lt;br /&gt;
** Умеет инкрементальную компиляцию.&lt;br /&gt;
** Умеет ликвидировать код синхронизации там, где он не нужен (если значение не утекает за пределы текущего вызова функции). Например, StringBuffer.&lt;br /&gt;
** Умеет девиртуализацию функций (если вариантов нет) и инлайн final static членов класса.&lt;br /&gt;
&lt;br /&gt;
=== Cборка мусора в Java без пауз / Алексей Рагозин ===&lt;br /&gt;
&lt;br /&gt;
Второй доклад, тоже интересный, теперь про сборку мусора и про то, бывает ли она без пауз.&lt;br /&gt;
&lt;br /&gt;
Резюме — нет, сборки мусора без пауз не бывает. Если очень много выделять памяти и не освобождать автоматически, в какой-то момент она всё равно кончится и придётся останавливать мир :-). А ещё — паузы можно уменьшить, и их отсутствие мало от чего спасёт — в real-time применениях всё равно найдётся ещё 100500 других проблем (свопинг, кривые руки и т.п).&lt;br /&gt;
&lt;br /&gt;
Какие вообще есть алгоритмы сборки мусора?&lt;br /&gt;
* Простейшее (mark&amp;amp;sweep) — остановили всех, прошлись рекурсивно по всем объектам, пометили достижимые, удалили остальные.&lt;br /&gt;
* Concurrent mark&amp;amp;sweep с барьерами на запись: Немножко всех тормозим, находим корневые ссылки, потом всех возобновляем и маркируем достижимые объекты, потом всех приостанавливаем снова, перемаркируем то, что было изменено, опять всех возобновляем и удаляем отмеченное недостижимым. Барьер — это просто bitmap, который даёт нам понять, что же было изменено.&lt;br /&gt;
* Разделение кучи на поколения — «старые» объекты живут долго и редко собираются, «молодые» — живут недолго и собираются часто.&lt;br /&gt;
* Алгоритм «метроном» — сборка копированием с барьерами на чтение. Есть 2 области памяти: «старая» и «новая». Сначала все объекты в старой. Параллельным потоком включается сборка мусора, и начиная с этого момента, если поток при чтении видит, что объект в «старой» области — он его нерекурсивно копирует в новую и обновляет ссылку. Таким образом, код работает только с «новыми» объектами. Мусорщик параллельно тоже перемещает «старые» объекты в «новую» область памяти, обновляя ссылки. Процесс когда-то заканчивается. В общем-то идея хороша, но — накладные расходы немаленькие.&lt;br /&gt;
* JVM-суперкомпьютер Azul Vega. По сути, хитрожопый вариант «метронома» с поколениями и аппаратной поддержкой, а именно — с дополнительными битами в адресах, служащими как барьеры (плюс для работы со слабыми ссылками). Но — физические JVM CPU делать невыгодно, они уже все почти повымерли, поэтому потом они сделали Azul JVM с той же идеей, которая использовала сначала виртуализацию, а потом и просто модуль ядра Linux x86-64 для поддержки этих самых бит. Ещё у неё есть 3 стратегии копирования — байтами (до 256 Кб), 4 Кб страницами (до 16 Мб), и 2 Мб страницами (&amp;gt; 16 Мб объекты).&lt;br /&gt;
&lt;br /&gt;
См. также «[http://blog.ragozin.info/2013/11/hotspot-jvm-garbage-collection-options.html шпаргалку]» по сборке мусора в JVM от автора.&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;br /&gt;
[[Категория:Конференции]]&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%93%D0%BE%D0%B4_%D1%84%D0%B8%D0%BE%D0%BB%D0%B5%D1%82%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_DNS.jpg&amp;diff=42957</id>
		<title>Файл:Год фиолетового DNS.jpg</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%93%D0%BE%D0%B4_%D1%84%D0%B8%D0%BE%D0%BB%D0%B5%D1%82%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_DNS.jpg&amp;diff=42957"/>
				<updated>2013-11-11T11:39:55Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: загружена новая версия «Файл:Год фиолетового DNS.jpg»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=SECR-2013:_%D0%9E%D1%82%D1%87%D1%91%D1%82_%D0%92%D0%B8%D1%82%D0%B0%D0%BB%D0%B8%D1%8F_%D0%A4%D0%B8%D0%BB%D0%B8%D0%BF%D0%BF%D0%BE%D0%B2%D0%B0&amp;diff=42887</id>
		<title>SECR-2013: Отчёт Виталия Филиппова</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=SECR-2013:_%D0%9E%D1%82%D1%87%D1%91%D1%82_%D0%92%D0%B8%D1%82%D0%B0%D0%BB%D0%B8%D1%8F_%D0%A4%D0%B8%D0%BB%D0%B8%D0%BF%D0%BF%D0%BE%D0%B2%D0%B0&amp;diff=42887"/>
				<updated>2013-11-01T14:06:49Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: /* Осторожно: патентные тролли! Теория, практика и актуальные примеры — Юрий Бардмессер, Bardmesser Law Group */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:SECR-2013]]&lt;br /&gt;
* Конференция «Software Engineering Conference Russia — 2013». Даты проведения — 24-25 октября 2013.&lt;br /&gt;
* От нас ходило 8 человек, но я, по-моему, так выбирал доклады, что с другими пересекался мало. Хорошо — значит, отчёт будет полезнее :)&lt;br /&gt;
* Темы — разные, качество докладов — среднее, были интересные, но много и всякой фигни, в том числе долгих «круглых столов».&lt;br /&gt;
* Докладов много, 4 параллельных сессии в первый день, 5 параллельных сессий во второй.&lt;br /&gt;
* Место проведения: Digital October. Типичная для него проблема — всё время в проходах ставят мелкие столики, вокруг них толпится народ, и в итоге фиг пройдёшь, всё время расталкивать кого-то приходится.&lt;br /&gt;
* Торможений в организации не наблюдалось.&lt;br /&gt;
* Презентации уже есть на сайте — http://2013.secr.ru/, и это тоже хорошо.&lt;br /&gt;
* Еда: Кофечай был всё время, это хорошо. В перерывах давали довольно гнусные бутерброды, претендующие на вид «мини-бургеров», и печеньки, которые мгновенно сжирались. Обед нормальный, люди как всегда выстраивались в длиннющие очереди, а я применял хак.&lt;br /&gt;
* Ну какой нафиг software engineering может быть в 9:00? Хоть бы в 10, что ли… :)&lt;br /&gt;
&lt;br /&gt;
== День 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Легковесное профилирование разделяемых библиотек в Linux для встраиваемых систем — Кирилл Кринкин, Санкт-Петербургский Электротехнический Университет ===&lt;br /&gt;
&lt;br /&gt;
Что у них там за «встраиваемые» системы на x86 и x86-64, я не до конца понял, но сам подход довольно простой и понятный. Допустим, мы:&lt;br /&gt;
* не хотим / не можем менять саму библиотеку&lt;br /&gt;
* не хотим никак менять стандартные библиотеки системы&lt;br /&gt;
* не хотим или не можем инструментировать программу разными valgrind’ами&lt;br /&gt;
* хотим профилировать ограниченное число функций в любых библиотеках, в том числе системных, и чтобы это работало быстро&lt;br /&gt;
&lt;br /&gt;
Логичное решение — делать всё это путём подмены динамического загрузчика (/lib/ld-linux.so.2 и libdl.so). То есть путём патчинга libc. Модификация заливается на целевую систему, софт запускается через подменённый загрузчик. Оный получает имена функций из переменной окружения (их же немного), и для каждой генерирует профилирующую ассемблерную обёртку. Получается очень шустро и занимает мало памяти — профилируется-то не всё. Просто создаётся по «контексту» на каждое место вызова.&lt;br /&gt;
&lt;br /&gt;
Проект выложен на github — [https://github.com/OSLL/elfperf elfperf].&lt;br /&gt;
&lt;br /&gt;
=== Система видеосвязи для невидимого интернета — Андрей Бодренко, Волгоградский Государственный Университет ===&lt;br /&gt;
&lt;br /&gt;
Разрывной доклад! Немолодой и даже уже немного лысеющий чувак открыл для себя децентрализованную оверлейную сеть [http://ru.wikipedia.org/wiki/I2P I2P]. Сделал для неё просто-таки ZverBrowser:&lt;br /&gt;
&lt;br /&gt;
[[File:008 bodrenko.pdf|page=11|400px]]&lt;br /&gt;
&lt;br /&gt;
И у чувака реальные идеи — ух ты! На этом можно построить децентрализованную социальную сеть! Ух ты! На этом можно сделать децентрализованный email, когда почтовый ящик будет прямо у тебя в комнате на миникомпьютере, воткнутом в розетку! Можно делать VPN! ''«Можна грабить корованы, можна подзрывать мосты!»''&lt;br /&gt;
&lt;br /&gt;
Рассказывал с множеством «эээ» и «эту программу я реализовал на языке си шарп под операционную систему виндоус». Основной упор вообще был на видеосвязь. Он вроде даже что-то такое реализовал (опять-таки «на языке си шарп»).&lt;br /&gt;
&lt;br /&gt;
То есть в принципе понятно, что идеи нормальные, просто смешно немного, типа открытие такое :). Но основной плюс I2P в прозрачном шифровании и анонимности, и отсутствии централизованной аллокации адресов, а не в бессерверности, которую можно сделать и на базе обычного IPv4 (или, например, IPv6 для обхода NAT’ов), и которая всё равно требует написания кода, отвечающего за корректное взаимодействие всех твоих систем (видео или каких там ещё). А IPv6, кстати, легко врубить себе прямо сейчас через anycast адрес.&lt;br /&gt;
&lt;br /&gt;
Короче, вот если бы он сделал аналог скайпика для I2P, или прототип системы, поставив которую на «мини-компьютер», ты бы получал свою электронную почту — вот это было бы круто… а так — просто zverbrowser :)&lt;br /&gt;
&lt;br /&gt;
=== OpenStack as a public cloud at IBM: lessons learned — Николай Марин, IBM ===&lt;br /&gt;
&lt;br /&gt;
Рассказ о тех фичах, которые IBM допилил для OpenStack, чтобы сделать у себя публичное облако на его основе. Доработки довольно простые — отпилили суперюзера, чтобы извне зайти в панель управления под «рутом» было нельзя… как-то допилили миграцию — то ли чтобы между датацентрами работала, то ли ещё что-то… пересунули часть сервисов самого openstack’а тоже в виртуалки… вроде добавили прямое подключение дисков… Также в презентации было в целом про детали их сервиса (CloudFirst Factory) — типа сколько компов, стоек, какая конфигурация…&lt;br /&gt;
&lt;br /&gt;
Ну а люди их спрашивают — вы конечно молодцы, что похвастались :), а где код доработок-то? Чувак ответил что-то невразумительное — то ли они дорабатывают транк, то ли код доработок сейчас вообще только внутри IBM, а наружу только торчит сервис и демо (cloudfirst.demos.ibm.com)…&lt;br /&gt;
&lt;br /&gt;
=== Компромиссы в развитии платформы Java — Алексей Фёдоров, Oracle ===&lt;br /&gt;
&lt;br /&gt;
Прикольный лысый явист из Оракла рассказывал про, в основном, проблемы совместимости платформы Java и том, почему оно вынуждено медленно развиваться. Были различные примеры, но общий смысл такой:&lt;br /&gt;
* Старые public методы убирать вообще нельзя, по понятным причинам.&lt;br /&gt;
* Разные баги платформы можно фиксить в major релизах. Баги там обычно, в общем-то, довольно мелкие, например, по спецификации метод NULL не должен принимать, а он его принимает. Или имя приватного класса, не фигурирующего в спеке, наружу через getClass и сериализацию утекает. А оценить, кому вы что сломаете, если пофиксите — невозможно, потому что Java используется дофига где и собрать фидбэк со всех этих мест очень сложно. Поэтому риск по умолчанию «high».&lt;br /&gt;
* Новые public методы только в major релизах, ибо если добавлять постоянно, то альтернативные JVM вынуждены будут постоянно гнаться за оригиналом и могут вообще послать оригинал куда подальше.&lt;br /&gt;
* Был у них какой-то пример, когда появилась компания, которая сказала — оракл (или ещё сан?) баги не фиксит, а мы вот фиксим, и начала поддерживать свою версию Java для своих клиентов. А потом в новой версии оракл (или сан?) эти баги таки пофиксил, но по-своему. Те было хотели выкинуть свой фикс, а клиенты им сказали — нельзя, у нас уже на это всё завязано. В общем, так всё и загнулось.&lt;br /&gt;
&lt;br /&gt;
=== Kotlin vs Java puzzlers — Светлана Исакова, JetBrains ===&lt;br /&gt;
&lt;br /&gt;
Прикольная такая девочка рассказывала про язык Kotlin (мало) и про примеры из книжки Java Puzzlers (больше) — то есть некие примеры кода, выполняющиеся неочевидно. Местами притянутые за уши:&lt;br /&gt;
* Сравнение строк на ==. Константа может быть не равна сформированной в рантайме строке, две сформированные в рантайме строки могут быть не равны друг другу.&lt;br /&gt;
* С вещественными числами. Типа из-за точности вычисления 2-0.1 != 0.9.&lt;br /&gt;
* С конструктором StringBuilder’а. Типа символом он не ициализируется.&lt;br /&gt;
Я бы не назвал это недостатками Java. Не на PHP, в конце-то концов, пишете, чтобы это всё очевидным было ))&lt;br /&gt;
&lt;br /&gt;
История [http://kotlin.jetbrains.org/ Kotlin]'а, видимо, в том, что пришёл к ним RedHat со своим [http://ceylon-lang.org/ Ceylon]'ом и попросил под него сделать IDE, а они не захотели и сделали свой Ceylon с БДж и Ш.&lt;br /&gt;
&lt;br /&gt;
Хотя отличия есть — Ceylon пишет свою стандартную библиотеку, а Kotlin ориентируется на обычную Java’вскую. Но имхо Ceylon хоть редхат поддерживает, а котлин — это вообще поделие… Но девочка прикольная была, да.&lt;br /&gt;
&lt;br /&gt;
=== Веб-разработчик и голый SQL: конфликты и подходы к решению — Филипп Торчинский, JetBrains ===&lt;br /&gt;
&lt;br /&gt;
По сути реклама IDE JetBrains и того что она умеет в SQL базы данных лазать, особо полезного там было мало. Соответственно и меня там тоже было мало. Какие нафиг конфликты, чего все так пристали к SQL, непонятно. Оленей что ли нанимаете, которые язык не понимают?&lt;br /&gt;
&lt;br /&gt;
=== Современные вызовы образования в области программной инженерии — Юрий Куприянов, WikiVote! ===&lt;br /&gt;
&lt;br /&gt;
Был чуть-чуть в конце, доклад — рассказ про нюансы IT-образования, например, отсутствие нормального обучения практике программирования в ВУЗах. По этому поводу, кстати, я лично от себя хочу добавить, что это, может, и хорошо — образование должно быть в первую очередь фундаментальным, потому что фундаментальную часть тебе потом после выпуска уже никто никогда не расскажет, а практику догнать всегда можно самому. А будут учить одной практике — так и вырастешь быдлокодером.&lt;br /&gt;
&lt;br /&gt;
Также докладчик упомянул SEMAT — новое популярное слово в этом году :-D, типа некая классификация методологий разработки («теория всего?») и то, что этим надо грузить студентов (нет уж, нахрен-нахрен…). Ещё было про онлайн-курсы (MOOC, Massive Open Online Courses) и про то, что это круто и этим обязательно надо пользоваться. Тут не поспоришь, курсы действительно хорошая штука, дают «инвертированное образование» — на лекции можно не ходить (на них и так никто не ходит), вместо этого ты их смотришь на диване дома, а разбор и практику наоборот делаешь на учёбе.&lt;br /&gt;
&lt;br /&gt;
Ещё был хороший термин '''«скрамно»''' (означает, что «у нас скрам, но…») — он не новый, просто я его только сейчас услышал :) сначала ещё был английский аналог — scrumbutt.&lt;br /&gt;
&lt;br /&gt;
А потом мы с Юрием и Стасом после доклада интересно побеседовали на тему MediaWiki в целом и Semantic MediaWiki в частности, потому что WikiVote как раз её использует и участвует в разработке, и я с ними время от времени даже общался в списке рассылки. А ещё — не далее, чем на этой неделе (28-30 октября) они проводили аж целую конференцию по SMW в Берлине. Вообще они занимаются продвижением управления знаниями на основе SMW в разные НЕ-разработческие компании (вплоть до нефтяных), и Юрий говорил, что заходит оно туда довольно тяжко. Стас подкинул ему идею, что всё это управление знаниями — оно типа не даёт возможность снизить затраты на 1-2 % прямо сейчас, а наоборот само создаёт некоторые затраты, но направленные на страховку от того, чтобы в будущем не произошёл Большой Пипец — например, чтобы новая внезапная технология не похоронила всю компанию… Пообсуждали… Юрий сказал, что по его ощущению — это да, биг боссам донести реально, foresight и всё такое :) я ещё порассказал об SMW — о том, что там, например даже отрицания не было (и мы его допилили), то есть даже язык запросов неполный был… о том, что используется она не для семантик веба, который нафиг уже не модный и никому не нужен, а для того, чтобы на вики делать объектную модель :) а оно для этого не всегда удобно… ну и так далее.&lt;br /&gt;
&lt;br /&gt;
=== Программно-Конфигурируемые Сети и Виртуализация сетевых сервисов — новый вызов для разработчиков ПО — Руслан Смелянский, Московский государственный университет ===&lt;br /&gt;
&lt;br /&gt;
Про OpenFlow и т. п. Был в самом конце. Я так понял, что тут тоже было достаточно много общих слов и в чём конкретно «вызовы», не вполне понятно — об этом задавали вопрос и я согласен — ну появятся ПКС, один раз алгоритмы под них напишут и расслабятся люди. Разве что придумают много-много каких-то разных и хитрых применений. Но в принципе не замечено ничего такого, что требует именно ПКС. Все эти поганые зонды типа DPI и без него нормально работают, ага (увы).&lt;br /&gt;
&lt;br /&gt;
=== Суперкомпьютерное программирование — третья грамотность — Игорь Одинцов, Intel ===&lt;br /&gt;
&lt;br /&gt;
Ужос, монотонный бубнёж в лекторском стиле, просто рассказ о том, что есть в мире такая штука, как суперкомпьютеры, и на ней считают погоду и мультики. Спасибо, кэп. Неужели на такой конференции кто-то об этом не знает?&lt;br /&gt;
&lt;br /&gt;
Разве что забавно — он сказал, что Ломоносов, который на ВМК МГУ стоит и пол-парковки своими чиллерами занимает так, что не пройдёшь, грузят в основном в сессию, типа студенты всякую фигню начинают считать :)&lt;br /&gt;
&lt;br /&gt;
=== «Блиц-сессия» ===&lt;br /&gt;
&lt;br /&gt;
Блиц потому, что доклады по 15-20 минут.&lt;br /&gt;
&lt;br /&gt;
==== Абстрактный синтаксический анализ на основе GLR-алгоритма — Семён Григорьев, СПбГУ ====&lt;br /&gt;
&lt;br /&gt;
Идея — заюзать [[rupedia:GLR-парсер|GLR]]-алгоритм разбора для проверки/автокомплита/трансляции кусков динамически генерируемого кода, встроенных в код на другом языке (например, SQL-литералов). ''Гусары, молчать! ORM это не решается, так как всё равно тормозной отстой и почти всегда приводит к идиотизмам в духе &amp;lt;tt&amp;gt;foreach(rows) { select where id=rows[i].id }&amp;lt;/tt&amp;gt; — прим. меня ;-)''&lt;br /&gt;
&lt;br /&gt;
GLR — это алгоритм разбора, позволяющий работать с недетерминированными грамматиками, основанный на «ветвящемся стеке» и отслеживающий для каждого выражения множество его возможных значений.&lt;br /&gt;
&lt;br /&gt;
Что характерно, этот подход уже применяется в опенсорсных реализациях:&lt;br /&gt;
* [http://alvor.googlecode.com/ Alvor] — плагин-проверялка SQL для IDE Eclipse&lt;br /&gt;
* [http://www.brics.dk/JSA/ Java String Analyzer] — само по себе ничего не делает, только строит грамматики для вычисляемых строковых выражений&lt;br /&gt;
* [http://www.score.is.tsukuba.ac.jp/~minamide/phpsa/ PHP String Analyzer] — то же для PHP&lt;br /&gt;
&lt;br /&gt;
Честно говоря, как человек, оставивший IDE в возрасте лет 15, слабо понимаю, нахрена это вообще надо. Функции, генерящие всякий SQL — они маленькие и элементарно проверяются глазами. Ну а если вы этого не можете делать, то по-моему лучше вообще не программировать.&lt;br /&gt;
&lt;br /&gt;
==== Static Analysis for Dynamic Updates — Евгений Кабанов, ZeroTurnaround ====&lt;br /&gt;
&lt;br /&gt;
Статик анализис — тут это не анализ путей выполнения программы, а только анализ иерархии типов и добавленных/удалённых методов, чтобы иметь возможность их подменять на лету в жирных живых java процессах (300 мб и больше).&lt;br /&gt;
&lt;br /&gt;
==== Моделирование WAN-сетей для исследования вредоносного ПО — Виталий Антоненко, Центр прикладных исследований компьютерных сетей (ЦПИКС) ====&lt;br /&gt;
&lt;br /&gt;
Чувак поигрался с сетевыми неймспейсами линукса — засовывал в них по процессу, представляющему из себя «узел сети» и помоделировал на них «распространение вредоносного ПО». «Распространение» по его логике — это когда хост смотрит на пришедший пакет и сразу знает «ой, там вирус, я уже заразился!» :D таким макаром на паре серверов можно «моделировать» десятки тысяч «узлов». На выходе получается карта распространения вредоносного ПО. Один маленький нюанс — нахрена для этого пускать процессы, вообще непонятно, потому что если у нас заражение известно заранее, то карту распространения легко смоделировать тупо математически.&lt;br /&gt;
&lt;br /&gt;
Так что польза от всего этого, видимо, чуть меньше, чем никакая, а к вредоносному ПО это отношения вообще не имеет.&lt;br /&gt;
&lt;br /&gt;
==== Разработка AutoCAD приложения для расчета заземления и молниезащиты электрических подстанций — Дмитрий Шишигин, Вологодский государственный технический университет ====&lt;br /&gt;
&lt;br /&gt;
На SECR занесло студентика, который в духе защиты курсовой (в бесполезном таком духе) рассказывал про то, что написал плагинчик, рассчитывающий в AutoCAD «канонические экраны [защиты от молний] — сферические, цилиндрические &amp;lt;s&amp;gt;и офигические&amp;lt;/s&amp;gt;».&lt;br /&gt;
&lt;br /&gt;
Абсолютно бесполезный доклад.&lt;br /&gt;
&lt;br /&gt;
==== Автоматизация поддержки репозиториев ПО для Linux — Денис Силаков, РОСА ====&lt;br /&gt;
&lt;br /&gt;
Денис из РОСЫ рассказывал об их автоматизированном инструменте исправления типичных примитивных ошибок, возникающих при сборке новых версий программы в rpm пакет по старой спеке (чтобы руками спеку не обновлять и чтобы мантейнеры выполняли меньше monkey-job).&lt;br /&gt;
&lt;br /&gt;
Для отслеживания новых версий юзают http://upstream-tracker.org/, а про сам инструмент можно почитать в их Wiki — http://wiki.rosalab.ru/ru/index.php/Updates_builder&lt;br /&gt;
&lt;br /&gt;
== День 2 ==&lt;br /&gt;
&lt;br /&gt;
=== LLVM и Clang — новейшие компиляторы и инструменты программиста — Крис Латтнер, LLVM ===&lt;br /&gt;
&lt;br /&gt;
Товарисч на самом деле из Apple, говорил хвалебные речи в адрес шланга… Мне что в нём понравилось — по ощущению какое-то чистейшее произношение, по-моему, ни одного слова не было, которого бы я не понял. А с докладом он, видимо, особо не заморачивался — например, тест производительности, который приводил, явно взял с [http://phoronix.com/ похороникса].&lt;br /&gt;
&lt;br /&gt;
Вкратце, LLVM — «модульная платформа для компиляторов». LLVM означает (по крайней мере изначально означало) Low-Level Virtual Machine — то есть некий промежуточный машинный язык, в который можно компилировать языки программирования и который сам может компилироваться уже в реальные машинные языки, с применением глубоких оптимизаций. Соответственно, потенциально писать компиляторы легче, потому что:&lt;br /&gt;
* Компилятор одного и того же языка не нужно заново писать для всех новых аппаратных платформ&lt;br /&gt;
* Оптимизации не нужно заново писать для новых языков программирования&lt;br /&gt;
Также LLVM умеет JIT-компиляцию, которая несколько медленная, но зато опять-таки применяет все те же оптимизации кода.&lt;br /&gt;
&lt;br /&gt;
Clang (шланг) — это LLVM’ный компилятор языков C, C++ и Objective C. Главные фишки — более быстрая компиляция (до 2 раз, кажется) и максимально дружелюбные сообщения об ошибках, в том числе в безумном ++ном коде с миллионом шаблонов, и сишном с многоэтажными макросами.&lt;br /&gt;
&lt;br /&gt;
Архитектур по факту LLVM поддерживает пока что СИЛЬНО меньше, чем gcc.&lt;br /&gt;
&lt;br /&gt;
Пилится всё это весьма активно Apple’ом, Intel’ом и прочими. До какого-то момента gcc его сильно делал по скорости результирующего кода, сейчас он вроде начал (иногда?) его обгонять. FreeBSD недавно выбрало LLVM в качестве основного компилятора, правда, по дико тупой причине — только из-за того, что он не GPL.&lt;br /&gt;
&lt;br /&gt;
Минус (потенциальный) у LLVM только один — это НЕ-копилефт (пермиссивная) лицензия, что теоретически может привести к распространению закрытых плагинов и неюзабельности его в свободной среде. Этого, вроде-бы, пока не происходит, но гарантии никакой нет, особенно учитывая, что проект создан Apple. Но, например, закрытое ПО на его основе уже есть (XCode), и есть планы по обеспечению его использования в выжал студии.&lt;br /&gt;
&lt;br /&gt;
Но в любом случае, ещё один свободный компилятор лишним не будет.&lt;br /&gt;
&lt;br /&gt;
=== Осторожно: патентные тролли! Теория, практика и актуальные примеры — Юрий Бардмессер, Bardmesser Law Group ===&lt;br /&gt;
&lt;br /&gt;
Рассказ про патентных троллей — в основном в США, потому что там эта проблема из-за разрешённости патентов на ПО стоит наиболее остро (сейчас не меньше 60 % исков по ПО — троллевые).&lt;br /&gt;
&lt;br /&gt;
Определение тролля — это компания, которая занимается не реальной деятельностью, а монетизацией патентных прав. Они почти всегда предпочитают договориться, хотя и не стесняются подавать в суд. Бизнес-модель простая — если затраты на троллинг меньше, чем оценка выигрыша (вероятность успеха * продажи жертв * насчитанный ущерб), то ТРОЛЛИМ! Патенты либо тупо придумываются, либо скупаются, реальная деятельность компанией либо (обычно) вообще не ведётся, либо бывает, что велась когда-то, но кончилась.&lt;br /&gt;
&lt;br /&gt;
А дальше рассказ о том, как они от всего этого отмазываются. Что собственно и доказывает дурь патентной системы — если даже предположить пример, который бы работал в благих целях, юристы всё равно занимаются тем, что внимательно смотрят claim’ы и придумывают отмазки, и зачастую у них это удаётся:&lt;br /&gt;
* Юрисдикция: ГДЕ происходят «нарушения»? Какой штат, а может — страна? А может, нас вообще там нет, и никогда не было? Сколько мы там продали и продавали ли вообще? А нарушение — на сервере или на клиенте? А где стоят сервера?&lt;br /&gt;
* Что конкретно написано в формуле изобретения? Метод, система, и то, и то? Нарушаем напрямую или косвенно? Есть ли режимы работы, которые не нарушают? Что конкретно продаётся — сервис, диск?&lt;br /&gt;
* Какой срок действия патента? Что написано в переписке с патентным офисом? Есть ли родственные патенты?&lt;br /&gt;
* Есть ли prior art, допустим — если вы это трактуете вот так, то вот в одна тысяча хз каком году это делали вот те ребята, и тогда оно тоже должно трактоваться так же.&lt;br /&gt;
&lt;br /&gt;
А дальше на основе найденного выбираются стратегии действия:&lt;br /&gt;
* Игнор, рисковать получить иск.&lt;br /&gt;
* Написать ответ, в котором разъяснить что их позиции слабы — скорее всего отвянут. Но «извините, мы были неправы» — не скажут никогда.&lt;br /&gt;
* Вступить в переговоры, например, чтобы потянуть время — тролли обычно согласны почти на любые суммы денег, и можно долго торговаться. И пока ты торгуешься и они думают, что есть шанс стрясти бабло, в суд они не подадут.&lt;br /&gt;
* Подать петицию на пересмотр их патента (post-grant review) — дорого, но может получиться. Google так сделал с Lodsys, и последний пока проигрывает.&lt;br /&gt;
* Обойти патент в реализации.&lt;br /&gt;
&lt;br /&gt;
=== («а теперь глазами тролля…») Патентование интерфейса мобильного приложения — Михаил Радченко, SoftPatent ===&lt;br /&gt;
&lt;br /&gt;
Вот уж действительно, это называется «а теперь глазами тролля…» — когда человек говорит, что идея может стоить X денег, это определённо патентный тролль. Гопота! «Кто первый встал, того и тапки».&lt;br /&gt;
&lt;br /&gt;
Основная идея: всё, что можно придумать, можно запатентовать, если оно не запатентовано ранее. Например, в области мобильных технологий в первую очередь надо смотреть в 364-страничный Steve Jobs Patent, эти тролли запатентовали уже почти всё, что можно. Ещё можно юзать поисковики по патентам. Если запатентовать нельзя — есть патентные юристы, которые придумают, как, и станет можно. Аналогично — способ / устройство / и то и другое.&lt;br /&gt;
&lt;br /&gt;
=== Организация продаж своего продукта онлайн: путеводитель мимо грабель — Олеся Чедлеева, Avangate B.V. ===&lt;br /&gt;
&lt;br /&gt;
Во многом, конечно, реклама их компании. Наплодилось, блин, всяких… личностей, которые воздух любят продавать — под продуктом, естественно, понимается программный продукт. Затрат на создание копий нет, зато есть немалые затраты «мимо грабель» на продвижение и организацию продаж. Так что я за грабли, грабли при продаже софта — это хорошо, нефиг вообще софт продавать.&lt;br /&gt;
&lt;br /&gt;
Тем не менее, в чём-то замечания разумные, и частично даже применимые не только к софту. Типа раз уж продаёте, хотя бы делайте это вменяемо: нужно упрощать процесс заказа, разнообразие методов оплаты, нормальная мультиязычность (без дебилизмов в переводе), локальная техподдержка, говорящая на языке пользователя, партнёрские соглашения для продвижения. А также предусмотрите, что будет, если начнёте продавать много — надо уметь масштабироваться под возросшие требования, или быстро выходить на новые рынки.&lt;br /&gt;
&lt;br /&gt;
=== KPI разработчика — Леди Ада (Евгения Фирсова), Яндекс. Деньги ===&lt;br /&gt;
&lt;br /&gt;
Слушал кусочками, ибо там было не продохнуть. Любят все эту говорящую Леди Аду, хотя в этот раз она, кажется, причёску сменила и на собственно Леди Аду стала похоже меньше :)&lt;br /&gt;
&lt;br /&gt;
Но я бы к ней работать не пошёл :-D то у них XSLT, то разработчики уходят (потому что XSLT?), то вот теперь тем кто остался, метрики придумывают (доклад был об этом) :) ну то есть хз, может это и нормально. Критерии влияют на премию, измеряется, типа, только то, что выходит за пределы того, что и так должно быть в норме. Измеряется не по шкале, а бинарно (например, «делал code review»), более того — иногда измеряется «дифференциально», например, «раньше не делал code review, а тут вдруг стал». Критерии разработчикам известны, а коэффициенты, по которым в итоге считается премия — нет. Плюс всё это время от времени меняется.&lt;br /&gt;
&lt;br /&gt;
Слушал я этот доклад неактивно, так что подробнее можно почитать в других отчётах.&lt;br /&gt;
&lt;br /&gt;
=== Опыт использования технологии KDB+/Q в Дойче Банке — Андрей Бабанин, Deutsche Bank ===&lt;br /&gt;
&lt;br /&gt;
Я уже как-то раз видел это буквосочетание и поэтому мне было очень интересно, что же это за хрень такая — KDB+/Q. Поэтому пошёл слушать этот доклад. Не ошибся, доклад был хороший. По содержанию — обзор сей технологии.&lt;br /&gt;
&lt;br /&gt;
В итоге смысл такой:&lt;br /&gt;
* KDB+ — это дико оптимизированная на всех уровнях (например, код ядра маленький и легко влезает в кэш процессора) специфическая база данных для хранения '''огромных''' объёмов упорядоченных данных (миллиарды записей в день — даже 32-битное целое переполнится), таких, как, например, биржевые котировки.&lt;br /&gt;
* Q — это тоже очень странный (специфический) интерпретируемый язык для, собственно, работы с этими данными. Состоит из странного синтаксиса, теории множеств и смеси императивного, функционального и SQL-подобного кода. В общем, не похож ни на что. Но когда вкуришь — вроде, разрабатывать на нём сильно быстрее, чем то же самое на чём-то другом. Есть отладчик, который написали они сами.&lt;br /&gt;
* Ещё пример оптимизации — строки обычно складываются в таблицу и индексируются как числа.&lt;br /&gt;
* KDB+ во многом завязана на поточную обработку данных (конвейеры — пишущие, читающие), потому что это и есть наиболее оптимальный вариант и именно он требуется большинству потребителей (сверхбыстрая торговля, алгоритмическая торговля). Кластеризацию — поддерживает.&lt;br /&gt;
* Естественно, требует быстрого хранилища — сначала они применяли массивы через Fiber Channel, потом сервера, потом обратно FC…&lt;br /&gt;
* Цифры адские! 30 миллиардов записей в день, 2.5 миллиона активных подписок, 2 петабайта места, 3000 активных процессов, &amp;gt; 200 серверов, 70 миллионов запросов в день, несколько тысяч внутренних пользователей.&lt;br /&gt;
&lt;br /&gt;
Вот уж реально Big Data :)&lt;br /&gt;
&lt;br /&gt;
=== Performance Test Driven Development — Алексей Рагозин, Deutsche Bank ===&lt;br /&gt;
&lt;br /&gt;
Докладчик жжот — рассказал 1 доклад на SECR в пятницу 25-го и потом ещё 2 на Highload во вторник 29-го. И все, что характерно, интересные.&lt;br /&gt;
&lt;br /&gt;
Конкретно этот доклад был про очередной *DD, на этот раз — Performance-Test DD. Типа, есть такие приложения, в которых основное требование к системе — это производительность. И главное, что со временем жизни системы цена ошибки очень сильно растёт… а объём тестов, наоборот, растёт медленно.&lt;br /&gt;
&lt;br /&gt;
В итоге подход — пишем код как-нибудь (без преждевременной оптимизации на основе умозрительных заключений!), пишем нагрузочный тест, тестируем, выявляем и исправляем узкие места. Тестируем непрерывно, на всём протяжении жизни ПО, при добавлении функционала добавляем нужные бенчмарки и изолированные тесты.&lt;br /&gt;
&lt;br /&gt;
Проблемы здесь такие: нагрузочные тесты, как правило, весьма тяжёлые и зачастую распределённые, требуют желательно идентичного тестового окружения (актуальной БД…), требуют дополнительного оборудования (столько же, сколько на бою, всё равно никогда не бывает, так что экстраполируют), плюс изначально конкретных требований по нагрузке обычно нет (должно быть «быстро» и всё тут), так что их ещё приходится формализовать.&lt;br /&gt;
&lt;br /&gt;
Варианта того, как всё это сделать, он представляет себе два — ssh/bash/логи/анализ на Excel/R, либо второй вариант — писать всё на Java. Они делают второе (они же Java разработчики), хотя и приходится изобретать велосипеды. Когда-то делали первое, и когда перешли, то у них наконец-то куски тестов стали реюзабельными.&lt;br /&gt;
&lt;br /&gt;
Ещё сказал про то, что надо обращать внимание на корректность измерений — например:&lt;br /&gt;
* Неправильно измерять просто скорость отдачи ответа. Так как в какой-то момент сервис может начать отдавать 503, и будет делать это очень быстро.&lt;br /&gt;
* Например, есть тест, который делает 10000 запросов в 10 потоков. Но в какой-то момент сервер затупил и все 10 потоков висели по 10 секунд. В итоге ''процент'' неудачных запросов будет очень низкий, но это неправильно — пока сервер тупил, 10 потоков ждали и новые запросы не отправляли. В реальности же запросы бы продолжались, и неудачных было бы гораздо больше.&lt;br /&gt;
&lt;br /&gt;
Их результаты применения PTDD — стали писать меньше кода, стали корректнее оптимизировать (а не умозрительно), стали оптимизировать какие-то куски, до которых раньше не добирались, и теперь гораздо лучше знают нагрузочную способность систем, которые пишут.&lt;br /&gt;
&lt;br /&gt;
Ссылки: java gridkit (github, google code), XChart и его блог — http://blog.ragozin.info/.&lt;br /&gt;
&lt;br /&gt;
=== Как совместить жесткий график выпуска релизов и качественное тестирование? — Алексей Надененко, Сбербанк технологии, Минск ===&lt;br /&gt;
&lt;br /&gt;
А вот этот доклад уже получился сильно более унылым. Немолодой дядечка из Сбер-технологий рассказывал про то, как они у себя пишут ГУЁвые автотесты для систем на Java и MFC, у которых релизы выходят каждые 6 недель.&lt;br /&gt;
&lt;br /&gt;
Не до конца понял — то ли они сами написали систему тестирования полностью (AWN), то ли тоже сами, но на основе чего-то готового, кажется, от HP.&lt;br /&gt;
&lt;br /&gt;
Главный нюанс в том, что у них эти автотесты очень жирные и их должен писать автоматизатор вместе с человеком с хорошим знанием предметной области, так как она дико развесистая и научить ей разработчиков/автоматизаторов сложно. Я так понял, что сначала у них было чисто ручное тестирование, а теперь они заставили ручных тестеров писать автотесты, и всё стало, типа, хорошо — затраты в среднем около 2х минут на шаг теста, то есть минимум 4 теста в день один разработчик пишет (да-да, тесты по 200—300 шагов).&lt;br /&gt;
&lt;br /&gt;
Потом он пробовал показать демонстрацию, но там особо ничего гениального я не увидел — просто некая самопальная среда для создания автотестов, плюс они организованы в дерево.&lt;br /&gt;
&lt;br /&gt;
=== Миграция проекта на PHP глазами .Net разработчика — Михаил Ершов, First Line Software ===&lt;br /&gt;
&lt;br /&gt;
Ох ржака будет, думал я, но нет, всё оказалось довольно просто, прозаично и успешно. Причина перехода тоже банальная — попросил заказчик. С одной стороны несколько странное требование, с другой — ну и хорошо, оно-то теперь на FreeBSD будет запускаться, а не под виндовым сервером. Так что ОК ]:-&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В целом, чтобы люди совсем не обалдели от такого поворота событий — он сначала сделал маленький прототипчик, показывающий, что на PHP в принципе можно писать фактически в той же идеологии, что и на .Net: ну, нет linq, ну и хрен с ним ''(правильно, поддерживаю — прим. меня)'', ну doctrine вместо entity framework, ну и пофиг… Ну Yii вместо аспшного MVC (Yii потому что у заказчика уже были на нём системы), ну и тоже туда же… Ну MySQL, а не MSSQL (чо там, одна буква поменялась в названии :D)… Фронт вообще остался неизменным, потому что изначально был на тотальном JS — HTML части у их приложения и так почти не было.&lt;br /&gt;
&lt;br /&gt;
То есть люди-то всё равно прифигели и реакции были от просто удивления до желания срочно обновить резюме, но он решил стараться сохранить всю дружную и сработавшуюся команду, ибо если бы ушёл кто-то один — побежали бы и остальные. Заказчик тоже отнёсся с неким пониманием, и время на миграцию предоставил. Роли в проекте у всех примерно сохранились, зарплаты тоже — это вообще для всех неплохо — выучить что-то новое без понижения в звании и окладе.&lt;br /&gt;
&lt;br /&gt;
Из интересного:&lt;br /&gt;
* На Doctrine перешли легко, проблем не испытывали вообще.&lt;br /&gt;
* С Yii похуже, ибо он как и прочие PHP фреймворки, довольно жёсткий ''(и непонятно, зачем вообще нужен, хотя конкретно для бывших шарпистов — наверное понятно, зачем, типа для удобства схождения разных культур в одну точку — прим. меня)''.&lt;br /&gt;
* На C# писали юнит-тесты. Перешли на PHP и сначала продолжили писать юнит-тесты. Первый-второй спринт, вроде всё ОК, юнит-тесты проходят… начали склеивать модули воедино — ни хрена не работает, всё отваливается! Выкинули нафиг юнит-тесты и заменили на интеграционные, и всё сразу стало хорошо. Возможно, это в целом интересное общее наблюдение: чем более язык динамический, тем хуже вам подходит именно юнит-тестирование.&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
После этого доклада ушёл домой, ибо вроде ничего особо интересного более не предвиделось, а спать хотелось жестоко.&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=SECR-2013:_%D0%9E%D1%82%D1%87%D1%91%D1%82_%D0%92%D0%B8%D1%82%D0%B0%D0%BB%D0%B8%D1%8F_%D0%A4%D0%B8%D0%BB%D0%B8%D0%BF%D0%BF%D0%BE%D0%B2%D0%B0&amp;diff=42884</id>
		<title>SECR-2013: Отчёт Виталия Филиппова</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=SECR-2013:_%D0%9E%D1%82%D1%87%D1%91%D1%82_%D0%92%D0%B8%D1%82%D0%B0%D0%BB%D0%B8%D1%8F_%D0%A4%D0%B8%D0%BB%D0%B8%D0%BF%D0%BF%D0%BE%D0%B2%D0%B0&amp;diff=42884"/>
				<updated>2013-11-01T13:19:13Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:SECR-2013]]&lt;br /&gt;
* Конференция «Software Engineering Conference Russia — 2013». Даты проведения — 24-25 октября 2013.&lt;br /&gt;
* От нас ходило 8 человек, но я, по-моему, так выбирал доклады, что с другими пересекался мало. Хорошо — значит, отчёт будет полезнее :)&lt;br /&gt;
* Темы — разные, качество докладов — среднее, были интересные, но много и всякой фигни, в том числе долгих «круглых столов».&lt;br /&gt;
* Докладов много, 4 параллельных сессии в первый день, 5 параллельных сессий во второй.&lt;br /&gt;
* Место проведения: Digital October. Типичная для него проблема — всё время в проходах ставят мелкие столики, вокруг них толпится народ, и в итоге фиг пройдёшь, всё время расталкивать кого-то приходится.&lt;br /&gt;
* Торможений в организации не наблюдалось.&lt;br /&gt;
* Презентации уже есть на сайте — http://2013.secr.ru/, и это тоже хорошо.&lt;br /&gt;
* Еда: Кофечай был всё время, это хорошо. В перерывах давали довольно гнусные бутерброды, претендующие на вид «мини-бургеров», и печеньки, которые мгновенно сжирались. Обед нормальный, люди как всегда выстраивались в длиннющие очереди, а я применял хак.&lt;br /&gt;
* Ну какой нафиг software engineering может быть в 9:00? Хоть бы в 10, что ли… :)&lt;br /&gt;
&lt;br /&gt;
== День 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Легковесное профилирование разделяемых библиотек в Linux для встраиваемых систем — Кирилл Кринкин, Санкт-Петербургский Электротехнический Университет ===&lt;br /&gt;
&lt;br /&gt;
Что у них там за «встраиваемые» системы на x86 и x86-64, я не до конца понял, но сам подход довольно простой и понятный. Допустим, мы:&lt;br /&gt;
* не хотим / не можем менять саму библиотеку&lt;br /&gt;
* не хотим никак менять стандартные библиотеки системы&lt;br /&gt;
* не хотим или не можем инструментировать программу разными valgrind’ами&lt;br /&gt;
* хотим профилировать ограниченное число функций в любых библиотеках, в том числе системных, и чтобы это работало быстро&lt;br /&gt;
&lt;br /&gt;
Логичное решение — делать всё это путём подмены динамического загрузчика (/lib/ld-linux.so.2 и libdl.so). То есть путём патчинга libc. Модификация заливается на целевую систему, софт запускается через подменённый загрузчик. Оный получает имена функций из переменной окружения (их же немного), и для каждой генерирует профилирующую ассемблерную обёртку. Получается очень шустро и занимает мало памяти — профилируется-то не всё. Просто создаётся по «контексту» на каждое место вызова.&lt;br /&gt;
&lt;br /&gt;
Проект выложен на github — [https://github.com/OSLL/elfperf elfperf].&lt;br /&gt;
&lt;br /&gt;
=== Система видеосвязи для невидимого интернета — Андрей Бодренко, Волгоградский Государственный Университет ===&lt;br /&gt;
&lt;br /&gt;
Разрывной доклад! Немолодой и даже уже немного лысеющий чувак открыл для себя децентрализованную оверлейную сеть [http://ru.wikipedia.org/wiki/I2P I2P]. Сделал для неё просто-таки ZverBrowser:&lt;br /&gt;
&lt;br /&gt;
[[File:008 bodrenko.pdf|page=11|400px]]&lt;br /&gt;
&lt;br /&gt;
И у чувака реальные идеи — ух ты! На этом можно построить децентрализованную социальную сеть! Ух ты! На этом можно сделать децентрализованный email, когда почтовый ящик будет прямо у тебя в комнате на миникомпьютере, воткнутом в розетку! Можно делать VPN! ''«Можна грабить корованы, можна подзрывать мосты!»''&lt;br /&gt;
&lt;br /&gt;
Рассказывал с множеством «эээ» и «эту программу я реализовал на языке си шарп под операционную систему виндоус». Основной упор вообще был на видеосвязь. Он вроде даже что-то такое реализовал (опять-таки «на языке си шарп»).&lt;br /&gt;
&lt;br /&gt;
То есть в принципе понятно, что идеи нормальные, просто смешно немного, типа открытие такое :). Но основной плюс I2P в прозрачном шифровании и анонимности, и отсутствии централизованной аллокации адресов, а не в бессерверности, которую можно сделать и на базе обычного IPv4 (или, например, IPv6 для обхода NAT’ов), и которая всё равно требует написания кода, отвечающего за корректное взаимодействие всех твоих систем (видео или каких там ещё). А IPv6, кстати, легко врубить себе прямо сейчас через anycast адрес.&lt;br /&gt;
&lt;br /&gt;
Короче, вот если бы он сделал аналог скайпика для I2P, или прототип системы, поставив которую на «мини-компьютер», ты бы получал свою электронную почту — вот это было бы круто… а так — просто zverbrowser :)&lt;br /&gt;
&lt;br /&gt;
=== OpenStack as a public cloud at IBM: lessons learned — Николай Марин, IBM ===&lt;br /&gt;
&lt;br /&gt;
Рассказ о тех фичах, которые IBM допилил для OpenStack, чтобы сделать у себя публичное облако на его основе. Доработки довольно простые — отпилили суперюзера, чтобы извне зайти в панель управления под «рутом» было нельзя… как-то допилили миграцию — то ли чтобы между датацентрами работала, то ли ещё что-то… пересунули часть сервисов самого openstack’а тоже в виртуалки… вроде добавили прямое подключение дисков… Также в презентации было в целом про детали их сервиса (CloudFirst Factory) — типа сколько компов, стоек, какая конфигурация…&lt;br /&gt;
&lt;br /&gt;
Ну а люди их спрашивают — вы конечно молодцы, что похвастались :), а где код доработок-то? Чувак ответил что-то невразумительное — то ли они дорабатывают транк, то ли код доработок сейчас вообще только внутри IBM, а наружу только торчит сервис и демо (cloudfirst.demos.ibm.com)…&lt;br /&gt;
&lt;br /&gt;
=== Компромиссы в развитии платформы Java — Алексей Фёдоров, Oracle ===&lt;br /&gt;
&lt;br /&gt;
Прикольный лысый явист из Оракла рассказывал про, в основном, проблемы совместимости платформы Java и том, почему оно вынуждено медленно развиваться. Были различные примеры, но общий смысл такой:&lt;br /&gt;
* Старые public методы убирать вообще нельзя, по понятным причинам.&lt;br /&gt;
* Разные баги платформы можно фиксить в major релизах. Баги там обычно, в общем-то, довольно мелкие, например, по спецификации метод NULL не должен принимать, а он его принимает. Или имя приватного класса, не фигурирующего в спеке, наружу через getClass и сериализацию утекает. А оценить, кому вы что сломаете, если пофиксите — невозможно, потому что Java используется дофига где и собрать фидбэк со всех этих мест очень сложно. Поэтому риск по умолчанию «high».&lt;br /&gt;
* Новые public методы только в major релизах, ибо если добавлять постоянно, то альтернативные JVM вынуждены будут постоянно гнаться за оригиналом и могут вообще послать оригинал куда подальше.&lt;br /&gt;
* Был у них какой-то пример, когда появилась компания, которая сказала — оракл (или ещё сан?) баги не фиксит, а мы вот фиксим, и начала поддерживать свою версию Java для своих клиентов. А потом в новой версии оракл (или сан?) эти баги таки пофиксил, но по-своему. Те было хотели выкинуть свой фикс, а клиенты им сказали — нельзя, у нас уже на это всё завязано. В общем, так всё и загнулось.&lt;br /&gt;
&lt;br /&gt;
=== Kotlin vs Java puzzlers — Светлана Исакова, JetBrains ===&lt;br /&gt;
&lt;br /&gt;
Прикольная такая девочка рассказывала про язык Kotlin (мало) и про примеры из книжки Java Puzzlers (больше) — то есть некие примеры кода, выполняющиеся неочевидно. Местами притянутые за уши:&lt;br /&gt;
* Сравнение строк на ==. Константа может быть не равна сформированной в рантайме строке, две сформированные в рантайме строке не равны друг другу.&lt;br /&gt;
* С вещественными числами. Типа из-за точности вычисления 2-0.1 != 0.9.&lt;br /&gt;
* С конструктором StringBuilder’а. Типа символом он не ициализируется.&lt;br /&gt;
История [http://kotlin.jetbrains.org/ Kotlin]'а, видимо, в том, что пришёл к ним RedHat со своим [http://ceylon-lang.org/ Ceylon]'ом и попросил под него сделать IDE, а они не захотели и сделали свой Ceylon с БДж и Ш.&lt;br /&gt;
&lt;br /&gt;
Хотя отличия есть — Ceylon пишет свою стандартную библиотеку, а Kotlin ориентируется на обычную Java’вскую. Но имхо Ceylon хоть редхат поддерживает, а котлин — это вообще поделие… Но девочка прикольная была, да.&lt;br /&gt;
&lt;br /&gt;
=== Веб-разработчик и голый SQL: конфликты и подходы к решению — Филипп Торчинский, JetBrains ===&lt;br /&gt;
&lt;br /&gt;
По сути реклама IDE JetBrains и того что она умеет в SQL базы данных лазать, особо полезного там было мало. Соответственно и меня там тоже было мало. Какие нафиг конфликты, чего все так пристали к SQL, непонятно. Оленей что ли нанимаете, которые язык не понимают?&lt;br /&gt;
&lt;br /&gt;
=== Современные вызовы образования в области программной инженерии — Юрий Куприянов, WikiVote! ===&lt;br /&gt;
&lt;br /&gt;
Был чуть-чуть в конце, доклад — рассказ про нюансы IT-образования, например, отсутствие нормального обучения практике программирования в ВУЗах. По этому поводу, кстати, я лично от себя хочу добавить, что это, может, и хорошо — образование должно быть в первую очередь фундаментальным, потому что фундаментальную часть тебе потом после выпуска уже никто никогда не расскажет, а практику догнать всегда можно самому. А будут учить одной практике — так и вырастешь быдлокодером.&lt;br /&gt;
&lt;br /&gt;
Также докладчик упомянул SEMAT — новое популярное слово в этом году :-D, типа некая классификация методологий разработки («теория всего?») и то, что этим надо грузить студентов (нет уж, нахрен-нахрен…). Ещё было про онлайн-курсы (MOOC, Massive Open Online Courses) и про то, что это круто и этим обязательно надо пользоваться. Тут не поспоришь, курсы действительно хорошая штука, дают «инвертированное образование» — на лекции можно не ходить (на них и так никто не ходит), вместо этого ты их смотришь на диване дома, а разбор и практику наоборот делаешь на учёбе.&lt;br /&gt;
&lt;br /&gt;
Ещё был хороший термин '''«скрамно»''' (означает, что «у нас скрам, но…») — он не новый, просто я его только сейчас услышал :) сначала ещё был английский аналог — scrumbutt.&lt;br /&gt;
&lt;br /&gt;
А потом мы с Юрием и Стасом после доклада интересно побеседовали на тему MediaWiki в целом и Semantic MediaWiki в частности, потому что WikiVote как раз её использует и участвует в разработке, и я с ними время от времени даже общался в списке рассылки. А ещё — не далее, чем на этой неделе (28-30 октября) они проводили аж целую конференцию по SMW в Берлине. Вообще они занимаются продвижением управления знаниями на основе SMW в разные НЕ-разработческие компании (вплоть до нефтяных), и Юрий говорил, что заходит оно туда довольно тяжко. Стас подкинул ему идею, что всё это управление знаниями — оно типа не даёт возможность снизить затраты на 1-2 % прямо сейчас, а наоборот само создаёт некоторые затраты, но направленные на страховку от того, чтобы в будущем не произошёл Большой Пипец — например, чтобы новая внезапная технология не похоронила всю компанию… Пообсуждали… Юрий сказал, что по его ощущению — это да, биг боссам донести реально, foresight и всё такое :) я ещё порассказал об SMW — о том, что там, например даже отрицания не было (и мы его допилили), то есть даже язык запросов неполный был… о том, что используется она не для семантик веба, который нафиг уже не модный и никому не нужен, а для того, чтобы на вики делать объектную модель :) а оно для этого не всегда удобно… ну и так далее.&lt;br /&gt;
&lt;br /&gt;
=== Программно-Конфигурируемые Сети и Виртуализация сетевых сервисов — новый вызов для разработчиков ПО — Руслан Смелянский, Московский государственный университет ===&lt;br /&gt;
&lt;br /&gt;
Про OpenFlow и т. п. Был в самом конце. Я так понял, что тут тоже было достаточно много общих слов и в чём конкретно «вызовы», не вполне понятно — об этом задавали вопрос и я согласен — ну появятся ПКС, один раз алгоритмы под них напишут и расслабятся люди. Разве что придумают много-много каких-то разных и хитрых применений. Но в принципе не замечено ничего такого, что требует именно ПКС. Все эти поганые зонды типа DPI и без него нормально работают, ага (увы).&lt;br /&gt;
&lt;br /&gt;
=== Суперкомпьютерное программирование — третья грамотность — Игорь Одинцов, Intel ===&lt;br /&gt;
&lt;br /&gt;
Ужос, монотонный бубнёж в лекторском стиле, просто рассказ о том, что есть в мире такая штука, как суперкомпьютеры, и на ней считают погоду и мультики. Спасибо, кэп. Неужели на такой конференции кто-то об этом не знает?&lt;br /&gt;
&lt;br /&gt;
Разве что забавно — он сказал, что Ломоносов, который на ВМК МГУ стоит и пол-парковки своими чиллерами занимает так, что не пройдёшь, грузят в основном в сессию, типа студенты всякую фигню начинают считать :)&lt;br /&gt;
&lt;br /&gt;
=== «Блиц-сессия» ===&lt;br /&gt;
&lt;br /&gt;
Блиц потому, что доклады по 15-20 минут.&lt;br /&gt;
&lt;br /&gt;
==== Абстрактный синтаксический анализ на основе GLR-алгоритма — Семён Григорьев, СПбГУ ====&lt;br /&gt;
&lt;br /&gt;
Идея — заюзать [[rupedia:GLR-парсер|GLR]]-алгоритм разбора для проверки/автокомплита/трансляции кусков динамически генерируемого кода, встроенных в код на другом языке (например, SQL-литералов). ''Гусары, молчать! ORM это не решается, так как всё равно тормозной отстой и почти всегда приводит к идиотизмам в духе &amp;lt;tt&amp;gt;foreach(rows) { select where id=rows[i].id }&amp;lt;/tt&amp;gt; — прим. меня ;-)''&lt;br /&gt;
&lt;br /&gt;
GLR — это алгоритм разбора, позволяющий работать с недетерминированными грамматиками, основанный на «ветвящемся стеке» и отслеживающий для каждого выражения множество его возможных значений.&lt;br /&gt;
&lt;br /&gt;
Что характерно, этот подход уже применяется в опенсорсных реализациях:&lt;br /&gt;
* [http://alvor.googlecode.com/ Alvor] — плагин-проверялка SQL для IDE Eclipse&lt;br /&gt;
* [http://www.brics.dk/JSA/ Java String Analyzer] — само по себе ничего не делает, только строит грамматики для вычисляемых строковых выражений&lt;br /&gt;
* [http://www.score.is.tsukuba.ac.jp/~minamide/phpsa/ PHP String Analyzer] — то же для PHP&lt;br /&gt;
&lt;br /&gt;
Честно говоря, как человек, оставивший IDE в возрасте лет 15, слабо понимаю, нахрена это вообще надо. Функции, генерящие всякий SQL — они маленькие и элементарно проверяются глазами. Ну а если вы этого не можете делать, то по-моему лучше вообще не программировать.&lt;br /&gt;
&lt;br /&gt;
==== Static Analysis for Dynamic Updates — Евгений Кабанов, ZeroTurnaround ====&lt;br /&gt;
&lt;br /&gt;
Статик анализис — тут это не анализ путей выполнения программы, а только анализ иерархии типов и добавленных/удалённых методов, чтобы иметь возможность их подменять на лету в жирных живых java процессах (300 мб и больше).&lt;br /&gt;
&lt;br /&gt;
==== Моделирование WAN-сетей для исследования вредоносного ПО — Виталий Антоненко, Центр прикладных исследований компьютерных сетей (ЦПИКС) ====&lt;br /&gt;
&lt;br /&gt;
Чувак поигрался с сетевыми неймспейсами линукса — засовывал в них по процессу, представляющему из себя «узел сети» и помоделировал на них «распространение вредоносного ПО». «Распространение» по его логике — это когда хост смотрит на пришедший пакет и сразу знает «ой, там вирус, я уже заразился!» :D таким макаром на паре серверов можно «моделировать» десятки тысяч «узлов». На выходе получается карта распространения вредоносного ПО. Один маленький нюанс — нахрена для этого пускать процессы, вообще непонятно, потому что если у нас заражение известно заранее, то карту распространения легко смоделировать тупо математически.&lt;br /&gt;
&lt;br /&gt;
Так что польза от всего этого, видимо, чуть меньше, чем никакая, а к вредоносному ПО это отношения вообще не имеет.&lt;br /&gt;
&lt;br /&gt;
==== Разработка AutoCAD приложения для расчета заземления и молниезащиты электрических подстанций — Дмитрий Шишигин, Вологодский государственный технический университет ====&lt;br /&gt;
&lt;br /&gt;
На SECR занесло студентика, который в духе защиты курсовой (в бесполезном таком духе) рассказывал про то, что написал плагинчик, рассчитывающий в AutoCAD «канонические экраны [защиты от молний] — сферические, цилиндрические &amp;lt;s&amp;gt;и офигические&amp;lt;/s&amp;gt;».&lt;br /&gt;
&lt;br /&gt;
Абсолютно бесполезный доклад.&lt;br /&gt;
&lt;br /&gt;
==== Автоматизация поддержки репозиториев ПО для Linux — Денис Силаков, РОСА ====&lt;br /&gt;
&lt;br /&gt;
Денис из РОСЫ рассказывал об их автоматизированном инструменте исправления типичных примитивных ошибок, возникающих при сборке новых версий программы в rpm пакет по старой спеке (чтобы руками спеку не обновлять и чтобы мантейнеры выполняли меньше monkey-job).&lt;br /&gt;
&lt;br /&gt;
Для отслеживания новых версий юзают http://upstream-tracker.org/, а про сам инструмент можно почитать в их Wiki — http://wiki.rosalab.ru/ru/index.php/Updates_builder&lt;br /&gt;
&lt;br /&gt;
== День 2 ==&lt;br /&gt;
&lt;br /&gt;
=== LLVM и Clang — новейшие компиляторы и инструменты программиста — Крис Латтнер, LLVM ===&lt;br /&gt;
&lt;br /&gt;
Товарисч на самом деле из Apple, говорил хвалебные речи в адрес шланга… Мне что в нём понравилось — по ощущению какое-то чистейшее произношение, по-моему, ни одного слова не было, которого бы я не понял. А с докладом он, видимо, особо не заморачивался — например, тест производительности, который приводил, явно взял с [http://phoronix.com/ похороникса].&lt;br /&gt;
&lt;br /&gt;
Вкратце, LLVM — «модульная платформа для компиляторов». LLVM означает (по крайней мере изначально означало) Low-Level Virtual Machine — то есть некий промежуточный машинный язык, в который можно компилировать языки программирования и который сам может компилироваться уже в реальные машинные языки, с применением глубоких оптимизаций. Соответственно, потенциально писать компиляторы легче, потому что:&lt;br /&gt;
* Компилятор одного и того же языка не нужно заново писать для всех новых аппаратных платформ&lt;br /&gt;
* Оптимизации не нужно заново писать для новых языков программирования&lt;br /&gt;
Также LLVM умеет JIT-компиляцию, которая несколько медленная, но зато опять-таки применяет все те же оптимизации кода.&lt;br /&gt;
&lt;br /&gt;
Clang (шланг) — это LLVM’ный компилятор языков C, C++ и Objective C. Главные фишки — более быстрая компиляция (до 2 раз, кажется) и максимально дружелюбные сообщения об ошибках, в том числе в безумном ++ном коде с миллионом шаблонов, и сишном с многоэтажными макросами.&lt;br /&gt;
&lt;br /&gt;
Архитектур по факту LLVM поддерживает пока что СИЛЬНО меньше, чем gcc.&lt;br /&gt;
&lt;br /&gt;
Пилится всё это весьма активно Apple’ом, Intel’ом и прочими. До какого-то момента gcc его сильно делал по скорости результирующего кода, сейчас он вроде начал (иногда?) его обгонять. FreeBSD недавно выбрало LLVM в качестве основного компилятора, правда, по дико тупой причине — только из-за того, что он GPL.&lt;br /&gt;
&lt;br /&gt;
Минус (потенциальный) у LLVM только один — это НЕ-копилефт (пермиссивная) лицензия, что теоретически может привести к распространению закрытых плагинов и неюзабельности его в свободной среде. Этого, вроде-бы, пока не происходит, но гарантии никакой нет, особенно учитывая, что проект создан Apple. Но, например, закрытое ПО на его основе уже есть (XCode), и есть планы по обеспечению его использования в выжал студии.&lt;br /&gt;
&lt;br /&gt;
Но в любом случае, ещё один свободный компилятор лишним не будет.&lt;br /&gt;
&lt;br /&gt;
=== Осторожно: патентные тролли! Теория, практика и актуальные примеры — Юрий Бардмессер, Bardmesser Law Group ===&lt;br /&gt;
&lt;br /&gt;
Рассказ про патентных троллей — в основном в США, потому что там эта проблема из-за разрешённости патентов на ПО стоит наиболее остро (сейчас не меньше 60 % исков по ПО — троллевые).&lt;br /&gt;
&lt;br /&gt;
Определение тролля — это компания, которая занимается не реальной деятельностью, а монетизацией патентных прав. Они почти всегда предпочитают договориться, хотя и не стесняются подавать в суд. Бизнес-модель простая — если затраты на троллинг меньше, чем оценка выигрыша (вероятность * продажи жертв * насчитанный ущерб), то ТРОЛЛИМ! Патенты либо тупо придумываются, либо скупаются, реальная деятельность компанией либо (обычно) вообще не ведётся, либо бывает, что велась когда-то, но кончилась.&lt;br /&gt;
&lt;br /&gt;
А дальше рассказ о том, как они от всего этого отмазываются. Что собственно и доказывает дурь патентной системы — если даже предположить пример, который бы работал в благих целях, юристы всё равно занимаются тем, что внимательно смотрят claim’ы и придумывают отмазки, и зачастую у них это удаётся:&lt;br /&gt;
* Юрисдикция: ГДЕ происходят «нарушения»? Какой штат, а может — страна? А может, нас вообще там нет, и никогда не было? Сколько мы там продали и продавали ли вообще? А нарушение — на сервере или на клиенте? А где стоят сервера?&lt;br /&gt;
* Что конкретно написано в формуле изобретения? Метод, система, и то, и то? Нарушаем напрямую или косвенно? Есть ли режимы работы, которые не нарушают? Что конкретно продаётся — сервис, диск?&lt;br /&gt;
* Какой срок действия патента? Что написано в переписке с патентным офисом? Есть ли родственные патенты?&lt;br /&gt;
* Есть ли prior art, допустим — если вы это трактуете вот так, то вот в одна тысяча хз каком году это делали вот те ребята, и тогда оно тоже должно трактоваться так же.&lt;br /&gt;
&lt;br /&gt;
А дальше на основе найденного выбираются стратегии действия:&lt;br /&gt;
* Игнор, рисковать получить иск.&lt;br /&gt;
* Написать ответ, в котором разъяснить что их позиции слабы — скорее всего отвянут. Но «извините, мы были неправы» — не скажут никогда.&lt;br /&gt;
* Вступить в переговоры, например, чтобы потянуть время — тролли обычно согласны почти на любые суммы денег, и можно долго торговаться. И пока ты торгуешься и они думают, что есть шанс стрясти бабло, в суд они не подадут.&lt;br /&gt;
* Подать петицию на пересмотр их патента (post-grant review) — дорого, но может получиться. Google так сделал с Lodsys, и последний пока проигрывает.&lt;br /&gt;
* Обойти патент в реализации.&lt;br /&gt;
&lt;br /&gt;
=== («а теперь глазами тролля…») Патентование интерфейса мобильного приложения — Михаил Радченко, SoftPatent ===&lt;br /&gt;
&lt;br /&gt;
Вот уж действительно, это называется «а теперь глазами тролля…» — когда человек говорит, что идея может стоить X денег, это определённо патентный тролль. Гопота! «Кто первый встал, того и тапки».&lt;br /&gt;
&lt;br /&gt;
Основная идея: всё, что можно придумать, можно запатентовать, если оно не запатентовано ранее. Например, в области мобильных технологий в первую очередь надо смотреть в 364-страничный Steve Jobs Patent, эти тролли запатентовали уже почти всё, что можно. Ещё можно юзать поисковики по патентам. Если запатентовать нельзя — есть патентные юристы, которые придумают, как, и станет можно. Аналогично — способ / устройство / и то и другое.&lt;br /&gt;
&lt;br /&gt;
=== Организация продаж своего продукта онлайн: путеводитель мимо грабель — Олеся Чедлеева, Avangate B.V. ===&lt;br /&gt;
&lt;br /&gt;
Во многом, конечно, реклама их компании. Наплодилось, блин, всяких… личностей, которые воздух любят продавать — под продуктом, естественно, понимается программный продукт. Затрат на создание копий нет, зато есть немалые затраты «мимо грабель» на продвижение и организацию продаж. Так что я за грабли, грабли при продаже софта — это хорошо, нефиг вообще софт продавать.&lt;br /&gt;
&lt;br /&gt;
Тем не менее, в чём-то замечания разумные, и частично даже применимые не только к софту. Типа раз уж продаёте, хотя бы делайте это вменяемо: нужно упрощать процесс заказа, разнообразие методов оплаты, нормальная мультиязычность (без дебилизмов в переводе), локальная техподдержка, говорящая на языке пользователя, партнёрские соглашения для продвижения. А также предусмотрите, что будет, если начнёте продавать много — надо уметь масштабироваться под возросшие требования, или быстро выходить на новые рынки.&lt;br /&gt;
&lt;br /&gt;
=== KPI разработчика — Леди Ада (Евгения Фирсова), Яндекс. Деньги ===&lt;br /&gt;
&lt;br /&gt;
Слушал кусочками, ибо там было не продохнуть. Любят все эту говорящую Леди Аду, хотя в этот раз она, кажется, причёску сменила и на собственно Леди Аду стала похоже меньше :)&lt;br /&gt;
&lt;br /&gt;
Но я бы к ней работать не пошёл :-D то у них XSLT, то разработчики уходят (потому что XSLT?), то вот теперь тем кто остался, метрики придумывают (доклад был об этом) :) ну то есть хз, может это и нормально. Критерии влияют на премию, измеряется, типа, только то, что выходит за пределы того, что и так должно быть в норме. Измеряется не по шкале, а бинарно (например, «делал code review»), более того — иногда измеряется «дифференциально», например, «раньше не делал code review, а тут вдруг стал». Критерии разработчикам известны, а коэффициенты, по которым в итоге считается премия — нет. Плюс всё это время от времени меняется.&lt;br /&gt;
&lt;br /&gt;
Слушал я этот доклад неактивно, так что подробнее можно почитать в других отчётах.&lt;br /&gt;
&lt;br /&gt;
=== Опыт использования технологии KDB+/Q в Дойче Банке — Андрей Бабанин, Deutsche Bank ===&lt;br /&gt;
&lt;br /&gt;
Я уже как-то раз видел это буквосочетание и поэтому мне было очень интересно, что же это за хрень такая — KDB+/Q. Поэтому пошёл слушать этот доклад. Не ошибся, доклад был хороший. По содержанию — обзор сей технологии.&lt;br /&gt;
&lt;br /&gt;
В итоге смысл такой:&lt;br /&gt;
* KDB+ — это дико оптимизированная на всех уровнях (например, код ядра маленький и легко влезает в кэш процессора) специфическая база данных для хранения '''огромных''' объёмов упорядоченных данных (миллиарды записей в день — даже 32-битное целое переполнится), таких, как, например, биржевые котировки.&lt;br /&gt;
* Q — это тоже очень странный (специфический) интерпретируемый язык для, собственно, работы с этими данными. Состоит из странного синтаксиса, теории множеств и смеси императивного, функционального и SQL-подобного кода. В общем, не похож ни на что. Но когда вкуришь — вроде, разрабатывать на нём сильно быстрее, чем то же самое на чём-то другом. Есть отладчик, который написали они сами.&lt;br /&gt;
* Ещё пример оптимизации — строки обычно складываются в таблицу и индексируются как числа.&lt;br /&gt;
* KDB+ во многом завязана на поточную обработку данных (конвейеры — пишущие, читающие), потому что это и есть наиболее оптимальный вариант и именно он требуется большинству потребителей (сверхбыстрая торговля, алгоритмическая торговля). Кластеризацию — поддерживает.&lt;br /&gt;
* Естественно, требует быстрого хранилища — сначала они применяли массивы через Fiber Channel, потом сервера, потом обратно FC…&lt;br /&gt;
* Цифры адские! 30 миллиардов записей в день, 2.5 миллиона активных подписок, 2 петабайта места, 3000 активных процессов, &amp;gt; 200 серверов, 70 миллионов запросов в день, несколько тысяч внутренних пользователей.&lt;br /&gt;
&lt;br /&gt;
Вот уж реально Big Data :)&lt;br /&gt;
&lt;br /&gt;
=== Performance Test Driven Development — Алексей Рагозин, Deutsche Bank ===&lt;br /&gt;
&lt;br /&gt;
Докладчик жжот — рассказал 1 доклад на SECR в пятницу 25-го и потом ещё 2 на Highload во вторник 29-го. И все, что характерно, интересные.&lt;br /&gt;
&lt;br /&gt;
Конкретно этот доклад был про очередной *DD, на этот раз — Performance-Test DD. Типа, есть такие приложения, в которых основное требование к системе — это производительность. И главное, что со временем жизни системы цена ошибки очень сильно растёт… а объём тестов, наоборот, растёт медленно.&lt;br /&gt;
&lt;br /&gt;
В итоге подход — пишем код как-нибудь (без преждевременной оптимизации на основе умозрительных заключений!), пишем нагрузочный тест, тестируем, выявляем и исправляем узкие места. Тестируем непрерывно, на всём протяжении жизни ПО, при добавлении функционала добавляем нужные бенчмарки и изолированные тесты.&lt;br /&gt;
&lt;br /&gt;
Проблемы здесь такие: нагрузочные тесты, как правило, весьма тяжёлые и зачастую распределённые, требуют желательно идентичного тестового окружения (актуальной БД…), требуют дополнительного оборудования (столько же, сколько на бою, всё равно никогда не бывает, так что экстраполируют), плюс изначально конкретных требований по нагрузке обычно нет (должно быть «быстро» и всё тут), так что их ещё приходится формализовать.&lt;br /&gt;
&lt;br /&gt;
Варианта того, как всё это сделать, он представляет себе два — ssh/bash/логи/анализ на Excel/R, либо второй вариант — писать всё на Java. Они делают второе (они же Java разработчики), хотя и приходится изобретать велосипеды. Когда-то делали первое, и когда перешли, то у них наконец-то куски тестов стали реюзабельными.&lt;br /&gt;
&lt;br /&gt;
Ещё сказал про то, что надо обращать внимание на корректность измерений — например:&lt;br /&gt;
* Неправильно измерять просто скорость отдачи ответа. Так как в какой-то момент сервис может начать отдавать 503, и будет делать это очень быстро.&lt;br /&gt;
* Например, есть тест, который делает 10000 запросов в 10 потоков. Но в какой-то момент сервер затупил и все 10 потоков висели по 10 секунд. В итоге ''процент'' неудачных запросов будет очень низкий, но это неправильно — пока сервер тупил, 10 потоков ждали и новые запросы не отправляли. В реальности же запросы бы продолжались, и неудачных было бы гораздо больше.&lt;br /&gt;
&lt;br /&gt;
Их результаты применения PTDD — стали писать меньше кода, стали корректнее оптимизировать (а не умозрительно), стали оптимизировать какие-то куски, до которых раньше не добирались, и теперь гораздо лучше знают нагрузочную способность систем, которые пишут.&lt;br /&gt;
&lt;br /&gt;
Ссылки: java gridkit (github, google code), XChart и его блог — http://blog.ragozin.info/.&lt;br /&gt;
&lt;br /&gt;
=== Как совместить жесткий график выпуска релизов и качественное тестирование? — Алексей Надененко, Сбербанк технологии, Минск ===&lt;br /&gt;
&lt;br /&gt;
А вот этот доклад уже получился сильно более унылым. Немолодой дядечка из Сбер-технологий рассказывал про то, как они у себя пишут ГУЁвые автотесты для систем на Java и MFC, у которых релизы выходят каждые 6 недель.&lt;br /&gt;
&lt;br /&gt;
Не до конца понял — то ли они сами написали систему тестирования полностью (AWN), то ли тоже сами, но на основе чего-то готового, кажется, от HP.&lt;br /&gt;
&lt;br /&gt;
Главный нюанс в том, что у них эти автотесты очень жирные и их должен писать автоматизатор вместе с человеком с хорошим знанием предметной области, так как она дико развесистая и научить ей разработчиков/автоматизаторов сложно. Я так понял, что сначала у них было чисто ручное тестирование, а теперь они заставили ручных тестеров писать автотесты, и всё стало, типа, хорошо — затраты в среднем около 2х минут на шаг теста, то есть минимум 4 теста в день один разработчик пишет (да-да, тесты по 200—300 шагов).&lt;br /&gt;
&lt;br /&gt;
Потом он пробовал показать демонстрацию, но там особо ничего гениального я не увидел — просто некая самопальная среда для создания автотестов, плюс они организованы в дерево.&lt;br /&gt;
&lt;br /&gt;
=== Миграция проекта на PHP глазами .Net разработчика — Михаил Ершов, First Line Software ===&lt;br /&gt;
&lt;br /&gt;
Ох ржака будет, думал я, но нет, всё оказалось довольно просто, прозаично и успешно. Причина перехода тоже банальная — попросил заказчик. С одной стороны несколько странное требование, с другой — ну и хорошо, оно-то теперь на FreeBSD будет запускаться, а не под виндовым сервером. Так что ОК ]:-&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В целом, чтобы люди совсем не обалдели от такого поворота событий — он сначала сделал маленький прототипчик, показывающий, что на PHP в принципе можно писать фактически в той же идеологии, что и на .Net: ну, нет linq, ну и хрен с ним ''(правильно, поддерживаю — прим. меня)'', ну doctrine вместо entity framework, ну и пофиг… Ну Yii вместо аспшного MVC (Yii потому что у заказчика уже были на нём системы), ну и тоже туда же… Ну MySQL, а не MSSQL (чо там, одна буква поменялась в названии :D)… Фронт вообще остался неизменным, потому что изначально был на тотальном JS — HTML части у их приложения и так почти не было.&lt;br /&gt;
&lt;br /&gt;
То есть люди-то всё равно прифигели и реакции были от просто удивления до желания срочно обновить резюме, но он решил стараться сохранить всю дружную и сработавшуюся команду, ибо если бы ушёл кто-то один — побежали бы и остальные. Заказчик тоже отнёсся с неким пониманием, и время на миграцию предоставил. Роли в проекте у всех примерно сохранились, зарплаты тоже — это вообще для всех неплохо — выучить что-то новое без понижения в звании и окладе.&lt;br /&gt;
&lt;br /&gt;
Из интересного:&lt;br /&gt;
* На Doctrine перешли легко, проблем не испытывали вообще.&lt;br /&gt;
* С Yii похуже, ибо он как и прочие PHP фреймворки, довольно жёсткий ''(и непонятно, зачем вообще нужен, хотя конкретно для бывших шарпистов — наверное понятно, зачем, типа для удобства схождения разных культур в одну точку — прим. меня)''.&lt;br /&gt;
* На C# писали юнит-тесты. Перешли на PHP и сначала продолжили писать юнит-тесты. Первый-второй спринт, вроде всё ОК, юнит-тесты проходят… начали склеивать модули воедино — ни хрена не работает, всё отваливается! Выкинули нафиг юнит-тесты и заменили на интеграционные, и всё сразу стало хорошо. Возможно, это в целом интересное общее наблюдение: чем более язык динамический, тем хуже вам подходит именно юнит-тестирование.&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
После этого доклада ушёл домой, ибо вроде ничего особо интересного более не предвиделось, а спать хотелось жестоко.&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:008_bodrenko.pdf&amp;diff=42885</id>
		<title>Файл:008 bodrenko.pdf</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:008_bodrenko.pdf&amp;diff=42885"/>
				<updated>2013-10-30T15:20:31Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=ViewVC&amp;diff=42872</id>
		<title>ViewVC</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=ViewVC&amp;diff=42872"/>
				<updated>2013-10-23T15:54:31Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ViewVC — система онлайн-просмотра репозиториев систем версионного контроля [[CVS]] и [[Subversion]]. Ранее называлась ViewCVS.&lt;br /&gt;
&lt;br /&gt;
* Сайт: http://www.viewvc.org/, http://viewvc.tigris.org/&lt;br /&gt;
* Лицензия: Permissive, типа [[rupedia:Лицензия MIT|MIT]]. Free &amp;amp; OpenSource.&lt;br /&gt;
* Версия с нашими доработками (ViewVC4Intranet): https://github.com/vitalif/viewvc-4intranet&lt;br /&gt;
*: Ниже значком ([[File:Wiki4intranet-logo.svg|32px|link=]]) помечены фичи, присутствующие только в нашей версии.&lt;br /&gt;
&lt;br /&gt;
= Основные возможности =&lt;br /&gt;
&lt;br /&gt;
Просмотр:&lt;br /&gt;
* Листингов директорий (ls) (в том числе по предыдущим версиям)&lt;br /&gt;
* Журналов ревизий с комментариями, списков изменённых файлов (log)&lt;br /&gt;
* Различий между версиями, в том числе в формате патча (diff)&lt;br /&gt;
* Содержимого файлов&lt;br /&gt;
** С подсветкой синтаксиса многих языков программирования, в том числе нашего PL/SQL препроцессируемого [[m4]] (*.sp4)&lt;br /&gt;
* Аннотаций, поиск виновного (blame/annotate)&lt;br /&gt;
&lt;br /&gt;
[[#Поиск изменений|Поиск изменений]]:&lt;br /&gt;
* Поиск по параметрам ревизии&lt;br /&gt;
* ([[File:Wiki4intranet-logo.svg|32px|link=]]) [[#Поиск по содержимому|'''Поиск по содержимому файлов''']], в том числе бинарных (офисных и т.п.)&lt;br /&gt;
* Генерация [[RSS]]-лент изменений (в том числе по любому запросу поиска)&lt;br /&gt;
* ([[File:Wiki4intranet-logo.svg|32px|link=]]) [[#Патчи из выбранных изменений|Генерация патчей]] из выбранных списков изменений&lt;br /&gt;
* [[#Списки merge для отмены изменений|Вывод команд svn merge для отмены выбранных изменений]]&lt;br /&gt;
&lt;br /&gt;
Поддержка:&lt;br /&gt;
* Прав Subversion.&lt;br /&gt;
* ([[File:Wiki4intranet-logo.svg|32px|link=]]) Прав CVSnt.&lt;br /&gt;
* ([[File:Wiki4intranet-logo.svg|32px|link=]]) Корректных проверок прав в результатах поиска.&lt;br /&gt;
* ([[File:Wiki4intranet-logo.svg|32px|link=]]) Мелкие доработки и исправления багов, полный список [https://github.com/vitalif/viewvc-4intranet/blob/master/CHANGES здесь].&lt;br /&gt;
&lt;br /&gt;
== Листинги директорий ==&lt;br /&gt;
&lt;br /&gt;
Заходя на главную страницу ViewVC, можно увидеть список [[CVS]]- и [[Subversion]]-репозиториев, а также ссылку «Query revision history» вверху страницы. Далее можно выбрать репозиторий — вы увидите список файлов и каталогов/модулей (cvs), находящихся в нём. Аналогично, кликнув на каталог, вы увидите листинг файлов и подкаталогов в нём.&lt;br /&gt;
&lt;br /&gt;
== Журналы ревизий ==&lt;br /&gt;
&lt;br /&gt;
К журналу ревизий можно перейти, выбирая файл из списка (по умолчанию открывается журнал ревизий), кликая в списке на номер ревизии рядом с каталогом, или переходя по ссылке «(modified)» в списке изменений, просматриваемом по номеру ревизии.&lt;br /&gt;
&lt;br /&gt;
== Различия между версиями ==&lt;br /&gt;
&lt;br /&gt;
Diff’ы отображаются с подсветкой удалённых/добавленных/изменённых строк и некоторым количеством строк контекста. Можно просматривать различия только по отдельным файлам; удобнее всего делать это со страницы журнала ревизий — нажимая на ссылки «Diff to previous XXX» или выбирая две версии (числовых, а в случае с CVS — и именованных) и желаемый формат различий внизу страницы. А со страницы с самими различиями можно скачать патч, нажав на ссылку «Patch».&lt;br /&gt;
&lt;br /&gt;
== Списки изменений по ревизиям ==&lt;br /&gt;
&lt;br /&gt;
В [[Subversion]] (не [[CVS]]) каждая фиксация изменений атомарна, а в репозиториях хранятся данные для сопоставления номера ревизии репозитория и всех изменений, в ней произошедших. Кликнув по номеру ревизии на странице журнала изменений файла, или по номеру ревизии вверху страницы со списком файлов в каталоге [[Subversion]], вы попадаете на страницу с информацией об изменениях, произошедших в данной ревизии.&lt;br /&gt;
&lt;br /&gt;
== Построчное аннотирование ==&lt;br /&gt;
&lt;br /&gt;
Аннотирование (поиск виновного): файл разбивается на строки, и напротив каждой строки выводится информация о том, кто последний её менял. Чтобы перейти на страницу с аннотацией, нужно кликнуть на ссылку annotate на странице с журналом ревизий.&lt;br /&gt;
&lt;br /&gt;
== Поиск изменений ==&lt;br /&gt;
&lt;br /&gt;
На страницу поиска коммитов (изменений) можно попасть по ссылкам «Query revision history» в листингах каталогов. На странице поиска можно выбрать:&lt;br /&gt;
* ([[File:Wiki4intranet-logo.svg|32px|link=]]) Текст для поиска по содержимому версионированных файлов. При поиске учитывается русская и английская морфология, поиск ведётся ''во всю глубину истории''.&lt;br /&gt;
* ([[File:Wiki4intranet-logo.svg|32px|link=]]) Репозиторий, тип репозитория.&lt;br /&gt;
* Поддиректорию, путь к конкретному файлу.&lt;br /&gt;
* Логин автора.&lt;br /&gt;
* ([[File:Wiki4intranet-logo.svg|32px|link=]]) Номер ревизии.&lt;br /&gt;
* Интервал дат.&lt;br /&gt;
* Текст комментария для поиска.&lt;br /&gt;
&lt;br /&gt;
Большинство параметров может содержать как точное значение, так и регулярное выражение для выбора нескольких вариантов.&lt;br /&gt;
&lt;br /&gt;
Нужно отметить несколько нетривиальное поведение поля «поддиректория» при переходе на форму поиска также из некоторой поддиректории репозитория — при этом поле «поддиректория» становится относительным по отношению к поддиректории, из которой был сделан переход.&lt;br /&gt;
&lt;br /&gt;
Форма поиска используется для интеграции с [[Bugzilla]] — в Bugzilla можно увидеть ссылки «Look for bug in CVS&amp;amp;SVN», ведущие на результаты поиска изменений с номером бага или словом «bugXXXX» в тексте.&lt;br /&gt;
&lt;br /&gt;
=== Поиск по содержимому ===&lt;br /&gt;
&lt;br /&gt;
([[File:Wiki4intranet-logo.svg|32px|link=]]) Долгое время для поиска по содержимому у нас пытался жить [[SVNSearcher]] (если это можно назвать жизнью). Но — не прижился. Ибо '''очень''' медленный, '''очень''' некачественный, и генерирует '''очень''' большие индексы. В тормозах его виноват, правда, не Lucene (который вполне [[Сравнение движков полнотекстового поиска|быстрый]]), а качество реализации.&lt;br /&gt;
&lt;br /&gt;
А теперь наша сборка '''ViewVC''', с помощью прикрученных к ней Tika и Sphinx’а, умеет отлично искать по содержимому Subversion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 200%&amp;quot;&amp;gt;[[File:viewvc-logo.png|link=http://viewvc.org/]] + [[File:Tika.png|200px|link=http://tika.apache.org/]] + [[File:Sphinx.jpg|link=http://sphinxsearh.com/]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Tika''' — это java-библиотека для вытаскивания текста из бинарных документов. Собственно, самое вкусное, что было в составе SVNSearcher’а. Чтобы работала быстро, её можно запускать в режиме TCP-сервера.&lt;br /&gt;
&lt;br /&gt;
'''Sphinx''' — в качестве движка поиска. Его realtime индексы, из которых по факту ничего нельзя удалить, а можно только добавить, идеально подходят для индексации содержимого системы контроля версий.&lt;br /&gt;
&lt;br /&gt;
Для использования поиска нужно нажать '''Query revision history''', ввести в поле «Search content» нужный текст, выбрать желаемые даты (по умолчанию поиск только за последнюю неделю), и нажать Search.&lt;br /&gt;
&lt;br /&gt;
[[File:ViewVC-ContentSearch.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=== RSS-ленты изменений ===&lt;br /&gt;
&lt;br /&gt;
Кликнув на привычный значок [[RSS]] [[File:rss14.png]] на странице, можно получать результаты любых поисков в формате [[RSS]]. В том числе, можно подписываться на изменения по отдельным репозиториям, каталогам, файлам — нужно просто кликнуть по значку [[RSS]].&lt;br /&gt;
&lt;br /&gt;
=== Патчи из выбранных изменений ===&lt;br /&gt;
&lt;br /&gt;
([[File:Wiki4intranet-logo.svg|32px|link=]]) ViewVC может генерировать патчи из результатов поиска изменений (ревизий). Для генерации патча перейдите по ссылке «''Show a patch built from these changes''», показываемой вверху страницы результатов поиска. Помните, что если результаты поиска включают в себя изменения одних и тех же файлов, сильно разнесённые во времени, патч будет включать также и все изменения, сделанные в том же файле между найденными. ViewVC старается отслеживать такие ситуации и выводить предупреждение о них в следующей форме: '''CAUTION: selected changes are not contiguous, patch may include differences from other commits'''.&lt;br /&gt;
&lt;br /&gt;
=== Списки merge для отмены изменений ===&lt;br /&gt;
&lt;br /&gt;
Ещё одна нетривиальная возможность страницы результатов — ссылка «''Show commands which could be used to back out these changes''». Перейдя по ней, вы увидите список команд merge, которые нужно выполнить в рабочей копии репозитория, чтобы попытаться отменить все изменения, выведенные на странице результатов поиска.&lt;br /&gt;
&lt;br /&gt;
= Ссылки =&lt;br /&gt;
&lt;br /&gt;
* [http://www.viewvc.org/ Официальный сайт ViewVC];&lt;br /&gt;
* [http://viewvc.tigris.org/ ViewVC на хостинге проектов tigris.org];&lt;br /&gt;
* [[WikiPedia:ViewVC|ViewVC в Википедии]];&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;br /&gt;
{{replicate-from-custiswiki-to-4intranet}}&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=MediaWiki:Sidebar&amp;diff=42863</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=MediaWiki:Sidebar&amp;diff=42863"/>
				<updated>2013-10-22T13:00:06Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* CUSTIS&lt;br /&gt;
** http://www.custis.ru/|Сайт CUSTIS →&lt;br /&gt;
** http://www.custis.ru/#about/vacancies/|Вакансии&lt;br /&gt;
** http://team.custis.ru/|Блог команды&lt;br /&gt;
** Блог:События|Архив событий&lt;br /&gt;
** Блог:Публикации|Архив публикаций&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* wikilogcalendar&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=MediaWiki:Sidebar&amp;diff=42862</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=MediaWiki:Sidebar&amp;diff=42862"/>
				<updated>2013-10-22T12:59:41Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* CUSTIS&lt;br /&gt;
** http://www.custis.ru/|Сайт CUSTIS →&lt;br /&gt;
** http://www.custis.ru/#about/vacancies/|Вакансии&lt;br /&gt;
** http://team.custis.ru/|Блог команды&lt;br /&gt;
** Блог:События|Архив событий&lt;br /&gt;
** Блог:Публикации|Архив публикаций&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help&lt;br /&gt;
* SEARCH&lt;br /&gt;
* favratebar&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* wikilogcalendar&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=42849</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=42849"/>
				<updated>2013-10-18T15:19:41Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[{{SITENAME}}]] содержит {{NUMBEROFARTICLES}} статей IT-тематики, написанных (или переведенных) сотрудниками компании [http://www.custis.ru CUSTIS].&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=10&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;background: #f8fff8; border: 1px solid #80ff80; padding: .5em&amp;quot;|&lt;br /&gt;
&amp;lt;h2&amp;gt;Наши видеозаписи конференций&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;templatedpagelist&amp;gt;&lt;br /&gt;
subcategory=Конференции (наша запись)&lt;br /&gt;
namespace=Main&lt;br /&gt;
namespace=Blog&lt;br /&gt;
limit=8&lt;br /&gt;
order=creation desc&lt;br /&gt;
output=template&lt;br /&gt;
template=Datelist&lt;br /&gt;
&amp;lt;/templatedpagelist&amp;gt;&lt;br /&gt;
[[:Категория:Конференции (наша запись)|Смотреть все…]]&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;background: #f8fff8; border: 1px solid #80ff80; padding: .5em&amp;quot;|&lt;br /&gt;
&amp;lt;h2&amp;gt;Наши отчёты о конференциях&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;templatedpagelist&amp;gt;&lt;br /&gt;
subcategory=Конференции&lt;br /&gt;
namespace=Main&lt;br /&gt;
namespace=Blog&lt;br /&gt;
limit=8&lt;br /&gt;
order=creation desc&lt;br /&gt;
output=template&lt;br /&gt;
template=Datelist&lt;br /&gt;
&amp;lt;/templatedpagelist&amp;gt;&lt;br /&gt;
[[:Категория:Конференции|Смотреть все…]]&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;background: #f8fff8; border: 1px solid #80ff80; padding: .5em&amp;quot;|&lt;br /&gt;
&amp;lt;h2&amp;gt;Открытые семинары&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;templatedpagelist&amp;gt;&lt;br /&gt;
subcategory=Открытые Семинары&lt;br /&gt;
namespace=Main&lt;br /&gt;
namespace=Blog&lt;br /&gt;
limit=8&lt;br /&gt;
order=creation desc&lt;br /&gt;
output=template&lt;br /&gt;
template=Datelist&lt;br /&gt;
&amp;lt;/templatedpagelist&amp;gt;&lt;br /&gt;
[[:Категория:Открытые Семинары|Смотреть все…]]&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;background: #f8fff8; border: 1px solid #80ff80; padding: .5em&amp;quot;|&lt;br /&gt;
&amp;lt;h2&amp;gt;Статьи и публикации наших сотрудников в СМИ&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;templatedpagelist&amp;gt;&lt;br /&gt;
subcategory=Статьи сотрудников&lt;br /&gt;
namespace=Main&lt;br /&gt;
namespace=Blog&lt;br /&gt;
limit=8&lt;br /&gt;
order=creation desc&lt;br /&gt;
output=template&lt;br /&gt;
template=Datelist&lt;br /&gt;
&amp;lt;/templatedpagelist&amp;gt;&lt;br /&gt;
[[:Категория:Статьи сотрудников|Смотреть все…]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Наиболее интересны следующие категории:&lt;br /&gt;
* [[:Категория:Конференции (наша запись)|Наши видеозаписи конференций]]&lt;br /&gt;
* [[:Категория:Открытые Семинары|Открытые Семинары]]&lt;br /&gt;
* [[:Категория:Статьи сотрудников|Публикации сотрудников в СМИ]]&lt;br /&gt;
* [[:Категория:Вакансии|Наши вакансии]]&lt;br /&gt;
* [[:Category:Алгоритмы|Алгоритмы]]&lt;br /&gt;
* [[:Category:Документирование|Документирование и публикация]]&lt;br /&gt;
* [[:Category:Программирование|Разработка программного обеспечения]]&lt;br /&gt;
* [[:Category:Обучение|Обучение]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
== RSS ==&lt;br /&gt;
В [[{{SITENAME}}]] доступны следующие [[RSS]]-ленты:&lt;br /&gt;
* [{{SERVER}}{{localurl:Special:Newpages|feed=rss}} Добавленные страницы] &amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://feedvalidator.org/check.cgi?url=http://lib.custis.ru/index.php%3Ftitle%3DSpecial:Newpages%26feed%3Drss&amp;quot; rel=&amp;quot;nofollow&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;/custisinstall/valid-rss.png&amp;quot; alt=&amp;quot;[Valid RSS]&amp;quot; title=&amp;quot;Validate my RSS feed&amp;quot; width=&amp;quot;66&amp;quot; height=&amp;quot;15&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [{{SERVER}}{{localurl:Special:Recentchanges|feed=rss}} Последние изменения] &amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://feedvalidator.org/check.cgi?url=http://lib.custis.ru/index.php%3Ftitle%3DSpecial:Recentchanges%26feed%3Drss&amp;quot; rel=&amp;quot;nofollow&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;/custisinstall/valid-rss.png&amp;quot; alt=&amp;quot;[Valid RSS]&amp;quot; title=&amp;quot;Validate my RSS feed&amp;quot; width=&amp;quot;66&amp;quot; height=&amp;quot;15&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=42848</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=42848"/>
				<updated>2013-10-18T15:18:18Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[{{SITENAME}}]] содержит {{NUMBEROFARTICLES}} статей IT-тематики, написанных (или переведенных) сотрудниками компании [http://www.custis.ru CUSTIS].&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=10&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;background: #f8fff8; border: 1px solid #80ff80; padding: .5em&amp;quot;|&lt;br /&gt;
&amp;lt;h2&amp;gt;Наши видеозаписи конференций&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;templatedpagelist&amp;gt;&lt;br /&gt;
subcategory=Конференции (наша запись)&lt;br /&gt;
namespace=Main&lt;br /&gt;
limit=8&lt;br /&gt;
order=creation desc&lt;br /&gt;
output=template&lt;br /&gt;
template=Datelist&lt;br /&gt;
&amp;lt;/templatedpagelist&amp;gt;&lt;br /&gt;
[[:Категория:Конференции (наша запись)|Смотреть все…]]&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;background: #f8fff8; border: 1px solid #80ff80; padding: .5em&amp;quot;|&lt;br /&gt;
&amp;lt;h2&amp;gt;Наши отчёты о конференциях&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;templatedpagelist&amp;gt;&lt;br /&gt;
subcategory=Конференции&lt;br /&gt;
namespace=Main&lt;br /&gt;
namespace=Blog&lt;br /&gt;
limit=8&lt;br /&gt;
order=creation desc&lt;br /&gt;
output=template&lt;br /&gt;
template=Datelist&lt;br /&gt;
&amp;lt;/templatedpagelist&amp;gt;&lt;br /&gt;
[[:Категория:Конференции|Смотреть все…]]&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;background: #f8fff8; border: 1px solid #80ff80; padding: .5em&amp;quot;|&lt;br /&gt;
&amp;lt;h2&amp;gt;Открытые семинары&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;templatedpagelist&amp;gt;&lt;br /&gt;
subcategory=Открытые Семинары&lt;br /&gt;
namespace=Main&lt;br /&gt;
limit=8&lt;br /&gt;
order=creation desc&lt;br /&gt;
output=template&lt;br /&gt;
template=Datelist&lt;br /&gt;
&amp;lt;/templatedpagelist&amp;gt;&lt;br /&gt;
[[:Категория:Открытые Семинары|Смотреть все…]]&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;background: #f8fff8; border: 1px solid #80ff80; padding: .5em&amp;quot;|&lt;br /&gt;
&amp;lt;h2&amp;gt;Статьи и публикации наших сотрудников в СМИ&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;templatedpagelist&amp;gt;&lt;br /&gt;
subcategory=Статьи сотрудников&lt;br /&gt;
namespace=Main&lt;br /&gt;
limit=8&lt;br /&gt;
order=creation desc&lt;br /&gt;
output=template&lt;br /&gt;
template=Datelist&lt;br /&gt;
&amp;lt;/templatedpagelist&amp;gt;&lt;br /&gt;
[[:Категория:Статьи сотрудников|Смотреть все…]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Наиболее интересны следующие категории:&lt;br /&gt;
* [[:Категория:Конференции (наша запись)|Наши видеозаписи конференций]]&lt;br /&gt;
* [[:Категория:Открытые Семинары|Открытые Семинары]]&lt;br /&gt;
* [[:Категория:Статьи сотрудников|Публикации сотрудников в СМИ]]&lt;br /&gt;
* [[:Категория:Вакансии|Наши вакансии]]&lt;br /&gt;
* [[:Category:Алгоритмы|Алгоритмы]]&lt;br /&gt;
* [[:Category:Документирование|Документирование и публикация]]&lt;br /&gt;
* [[:Category:Программирование|Разработка программного обеспечения]]&lt;br /&gt;
* [[:Category:Обучение|Обучение]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
== RSS ==&lt;br /&gt;
В [[{{SITENAME}}]] доступны следующие [[RSS]]-ленты:&lt;br /&gt;
* [{{SERVER}}{{localurl:Special:Newpages|feed=rss}} Добавленные страницы] &amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://feedvalidator.org/check.cgi?url=http://lib.custis.ru/index.php%3Ftitle%3DSpecial:Newpages%26feed%3Drss&amp;quot; rel=&amp;quot;nofollow&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;/custisinstall/valid-rss.png&amp;quot; alt=&amp;quot;[Valid RSS]&amp;quot; title=&amp;quot;Validate my RSS feed&amp;quot; width=&amp;quot;66&amp;quot; height=&amp;quot;15&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [{{SERVER}}{{localurl:Special:Recentchanges|feed=rss}} Последние изменения] &amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://feedvalidator.org/check.cgi?url=http://lib.custis.ru/index.php%3Ftitle%3DSpecial:Recentchanges%26feed%3Drss&amp;quot; rel=&amp;quot;nofollow&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;/custisinstall/valid-rss.png&amp;quot; alt=&amp;quot;[Valid RSS]&amp;quot; title=&amp;quot;Validate my RSS feed&amp;quot; width=&amp;quot;66&amp;quot; height=&amp;quot;15&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=42847</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=42847"/>
				<updated>2013-10-18T15:17:15Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[{{SITENAME}}]] содержит {{NUMBEROFARTICLES}} статей IT-тематики, написанных (или переведенных) сотрудниками компании [http://www.custis.ru CUSTIS].&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=10&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;background: #f8fff8; border: 1px solid #80ff80; padding: .5em&amp;quot;|&lt;br /&gt;
&amp;lt;h2&amp;gt;Наши видеозаписи конференций&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;templatedpagelist&amp;gt;&lt;br /&gt;
subcategory=Конференции (наша запись)&lt;br /&gt;
namespace=Main&lt;br /&gt;
limit=8&lt;br /&gt;
order=creation desc&lt;br /&gt;
output=template&lt;br /&gt;
template=Datelist&lt;br /&gt;
&amp;lt;/templatedpagelist&amp;gt;&lt;br /&gt;
[[:Категория:Конференции (наша запись)|Смотреть все…]]&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;background: #f8fff8; border: 1px solid #80ff80; padding: .5em&amp;quot;|&lt;br /&gt;
&amp;lt;h2&amp;gt;Наши отчёты о конференциях&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;templatedpagelist&amp;gt;&lt;br /&gt;
subcategory=Конференции&lt;br /&gt;
limit=8&lt;br /&gt;
order=creation desc&lt;br /&gt;
output=template&lt;br /&gt;
template=Datelist&lt;br /&gt;
&amp;lt;/templatedpagelist&amp;gt;&lt;br /&gt;
[[:Категория:Конференции|Смотреть все…]]&lt;br /&gt;
|-&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;background: #f8fff8; border: 1px solid #80ff80; padding: .5em&amp;quot;|&lt;br /&gt;
&amp;lt;h2&amp;gt;Открытые семинары&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;templatedpagelist&amp;gt;&lt;br /&gt;
subcategory=Открытые Семинары&lt;br /&gt;
namespace=Main&lt;br /&gt;
limit=8&lt;br /&gt;
order=creation desc&lt;br /&gt;
output=template&lt;br /&gt;
template=Datelist&lt;br /&gt;
&amp;lt;/templatedpagelist&amp;gt;&lt;br /&gt;
[[:Категория:Открытые Семинары|Смотреть все…]]&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;background: #f8fff8; border: 1px solid #80ff80; padding: .5em&amp;quot;|&lt;br /&gt;
&amp;lt;h2&amp;gt;Статьи и публикации наших сотрудников в СМИ&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;templatedpagelist&amp;gt;&lt;br /&gt;
subcategory=Статьи сотрудников&lt;br /&gt;
namespace=Main&lt;br /&gt;
limit=8&lt;br /&gt;
order=creation desc&lt;br /&gt;
output=template&lt;br /&gt;
template=Datelist&lt;br /&gt;
&amp;lt;/templatedpagelist&amp;gt;&lt;br /&gt;
[[:Категория:Статьи сотрудников|Смотреть все…]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Наиболее интересны следующие категории:&lt;br /&gt;
* [[:Категория:Конференции (наша запись)|Наши видеозаписи конференций]]&lt;br /&gt;
* [[:Категория:Открытые Семинары|Открытые Семинары]]&lt;br /&gt;
* [[:Категория:Статьи сотрудников|Публикации сотрудников в СМИ]]&lt;br /&gt;
* [[:Категория:Вакансии|Наши вакансии]]&lt;br /&gt;
* [[:Category:Алгоритмы|Алгоритмы]]&lt;br /&gt;
* [[:Category:Документирование|Документирование и публикация]]&lt;br /&gt;
* [[:Category:Программирование|Разработка программного обеспечения]]&lt;br /&gt;
* [[:Category:Обучение|Обучение]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
== RSS ==&lt;br /&gt;
В [[{{SITENAME}}]] доступны следующие [[RSS]]-ленты:&lt;br /&gt;
* [{{SERVER}}{{localurl:Special:Newpages|feed=rss}} Добавленные страницы] &amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://feedvalidator.org/check.cgi?url=http://lib.custis.ru/index.php%3Ftitle%3DSpecial:Newpages%26feed%3Drss&amp;quot; rel=&amp;quot;nofollow&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;/custisinstall/valid-rss.png&amp;quot; alt=&amp;quot;[Valid RSS]&amp;quot; title=&amp;quot;Validate my RSS feed&amp;quot; width=&amp;quot;66&amp;quot; height=&amp;quot;15&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [{{SERVER}}{{localurl:Special:Recentchanges|feed=rss}} Последние изменения] &amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;http://feedvalidator.org/check.cgi?url=http://lib.custis.ru/index.php%3Ftitle%3DSpecial:Recentchanges%26feed%3Drss&amp;quot; rel=&amp;quot;nofollow&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;/custisinstall/valid-rss.png&amp;quot; alt=&amp;quot;[Valid RSS]&amp;quot; title=&amp;quot;Validate my RSS feed&amp;quot; width=&amp;quot;66&amp;quot; height=&amp;quot;15&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:WikiCutEnd&amp;diff=42831</id>
		<title>Шаблон:WikiCutEnd</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:WikiCutEnd&amp;diff=42831"/>
				<updated>2013-10-10T11:16:51Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{replicate-from-custiswiki-to-all}}&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=WikiWiki&amp;diff=42828</id>
		<title>WikiWiki</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=WikiWiki&amp;diff=42828"/>
				<updated>2013-10-10T11:15:37Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''WikiWiki''' (Вики) — гипертекстовая интернет-среда, предназначенная для коллективного редактирования, накопления и структуризации текстовой информации.&lt;br /&gt;
&lt;br /&gt;
[http://lib.custis.ru/images/6/65/Wiki-documenting.swf Здесь] можно просмотреть Flash-презентацию, поясняющую, что есть WikiWiki-технология, и каковы ее преимущества и недостатки.&lt;br /&gt;
&lt;br /&gt;
==Термин==&lt;br /&gt;
Название произошло от гавайского слова «wikiwiki» — «как можно быстрее». Концепция Вики отвечает тому, что первоначально задумывал Тим Бернерс-Ли (Tim Berners-Lee), изобретатель Всемирной Сети: доступность информации онлайн и возможность её быстрого изменения. По крайней мере, так он писал в своей книге «Weaving the Web». &lt;br /&gt;
&lt;br /&gt;
Основная идея вики-технологии — возможность редактирования статей множеством пользователей. Для реализации этой идеи разработаны специальные знаки, тэги, называемые «вики-синтаксисом». Разные движки используют разный синтаксис, но все они проще и удобнее HTML-разметки, применяемой в WWW. Это позволяет работать с ней даже тем, кто не проходил обучения вообще.&lt;br /&gt;
&lt;br /&gt;
'''Wiki''' (также '''WikiWiki''', '''WikiWikiWeb''' или '''WikiWeb'''), — это собрание интернет-страниц, которые можно не только читать, но и изменять онлайн. Как и в WWW, отдельные страницы и статьи соединены между собой ссылками. Для реализации вики-среды создаётся (или добывается уже существующее) подходящее для данных целей ПО — движок вики-сети (вики-движок).&lt;br /&gt;
&lt;br /&gt;
Возможность редактировать содержимое вики-сайта любым посетителем, с одной стороны, позволяет без труда накапливать и систематизировать информацию, но, с другой стороны, создаёт обширное поле для вандализма. Из-за последнего все вики-сайты используют технологию CVS, сохраняющую каждую версию документа. Если документ подвергается вандализму, пользователь вики может легко восстановить старую версию. Получается, что портить в Вики сложнее, чем исправлять. Программное обеспечение также позволяет ограничить доступ и права редактирования страниц Вики-среды до определённого круга пользователей.&lt;br /&gt;
&lt;br /&gt;
Таким образом, «Вики» («ВикиВики») это:&lt;br /&gt;
* Выражение, означающее «быстро»/ «ненапряжно» на Гавайском.&lt;br /&gt;
* Принципы ведения вебконтента:&lt;br /&gt;
** Простой язык разметки;&lt;br /&gt;
** Совместное редактирование множеством пользователей.&lt;br /&gt;
** Мгновенная публикация изменений;&lt;br /&gt;
** Версионность.&lt;br /&gt;
* Софт, используемый для этого.&lt;br /&gt;
* Вебсистема, на базе такого софта.&lt;br /&gt;
&lt;br /&gt;
==История==&lt;br /&gt;
Оригинальная система Wiki была изобретена Вардом Каннингемом. Она была создана для web-узла Pattern Languages Community с целью упростить совместное создание и документирование программных образцов.&lt;br /&gt;
&lt;br /&gt;
== Преимущества ==&lt;br /&gt;
=== Статьи/документы — это плоский текст ===&lt;br /&gt;
Преимущества «плоского» текста (текста, разбитого на строки):&lt;br /&gt;
* Редактируется в любом текстовом редакторе.&lt;br /&gt;
* Минимальный «вес» при хранении и пересылке по сети. &lt;br /&gt;
* Возможно автоматически определять изменения, что дает:&lt;br /&gt;
** Параллельное (совместное редактирование);&lt;br /&gt;
** Определение авторства каждой строчки;&lt;br /&gt;
** Автоматическое разрешение конфликтов;&lt;br /&gt;
** Экономная система контроля версий.&lt;br /&gt;
** Удобен для автоматической обработки.&lt;br /&gt;
&lt;br /&gt;
=== Простой язык разметки ===&lt;br /&gt;
&lt;br /&gt;
Стандартные языки разметки ([[SGML]], [[HTML]], [[LaTeX]]):&lt;br /&gt;
* Сложные для изучения (много элементов, нетривиальный синтаксис);&lt;br /&gt;
* Возможны трудноуловимые ошибки;&lt;br /&gt;
* Элементы разметки занимают существенный объем текста (высок «overhead»):&lt;br /&gt;
** Долго и трудно набивать текст;&lt;br /&gt;
** Текст плохо читаем с экрана.&lt;br /&gt;
Плоский текст c простой разметкой:&lt;br /&gt;
* Быстро пишется;&lt;br /&gt;
* Легко читается с экрана.&lt;br /&gt;
&lt;br /&gt;
=== Правка и публикация по месту ===&lt;br /&gt;
&lt;br /&gt;
Мгновенная публикация:&lt;br /&gt;
&lt;br /&gt;
* Для практически всех языков разметки, кроме [[HTML]], нет WYSIWYG-программ просмотра — необходима конвертация в DVI, PostScript, PDF, RTF или тот же HTML, что происходит небыстро.&lt;br /&gt;
* Публикация по месту позволяет вносить правки в процессе чтения материала (не нужно искать исходные тексты)&lt;br /&gt;
* Немедленная публикация позволяет сразу же проверить внесенные правки.&lt;br /&gt;
&lt;br /&gt;
=== Автоматическое построение ссылок ===&lt;br /&gt;
Автоматическая линковка:&lt;br /&gt;
&lt;br /&gt;
* Стандартные языки разметки ([[TeX]], [[LaTeX]], [[SGML]]) разделяют идентификаторы и названия структурных блоков (секций, глав, разделов), что:&lt;br /&gt;
*{{ok}} способствует строгой целостности;&lt;br /&gt;
*{{no}} Вносит большую «нагрузку» на внесение ссылки&lt;br /&gt;
* Идентификаторы=Названия=Заголовки&lt;br /&gt;
* Адаптивная линковка:&lt;br /&gt;
** «Опережающие» ссылки на несуществующие статьи;&lt;br /&gt;
** Перенаправления ссылок.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Централизованное хранение ===&lt;br /&gt;
&lt;br /&gt;
{{no}} При локальной обработке размеченной (HTML, XML, LaTeX, SGML) документации необходимо одновременно знать &lt;br /&gt;
* файловую структуру проекта (в каком файле что лежит);&lt;br /&gt;
* Идентификаторы разделов.&lt;br /&gt;
* Иметь систему синхронизации изменений от различных пользователей&lt;br /&gt;
&lt;br /&gt;
{{ok}} ВикиВики система сама обеспечивает&lt;br /&gt;
* централизованное хранение всех блоков текста («статей»)  &lt;br /&gt;
* идентификатор хранения=идентификатор ссылки=названию статьи.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Редактировать может каждый ===&lt;br /&gt;
* Никто не знает всего, но возможно собрать знания «с миру по нитке».&lt;br /&gt;
* Никто не застрахован от ошибки, но любой, заметив ошибку может легко ее исправить.&lt;br /&gt;
* Легче поддерживать актуальность документа — правка ошибки очень проста, а от непоправимого разрушения документа защищает контроль версий.&lt;br /&gt;
&lt;br /&gt;
==Недостатки==&lt;br /&gt;
;Редактировать может каждый:&lt;br /&gt;
:* Широкий круг допущенных — уязвимо, если есть злонамеренный вандал.&lt;br /&gt;
:* Информация может быть неверной:&lt;br /&gt;
:** Внесена ошибка — пока ошибки не заметят;&lt;br /&gt;
:** Статья написана некомпетентными участниками — неверно до появления специалиста.&lt;br /&gt;
&lt;br /&gt;
;Нет стандартной вики-разметки:&lt;br /&gt;
:* уже существует «вавилонская башня» близких, но различных вики-диалектов, &lt;br /&gt;
:* практически каждая вики-система использует свою разметку (или допускает несколько различных разметок).&lt;br /&gt;
&lt;br /&gt;
;Разметка не «адаптирована к компьютеру»: Мало программных библиотек стандартного разбора (parsing) документов (в отличие от [[XML]]/[[SGML]]/[[HTML]]).&lt;br /&gt;
&lt;br /&gt;
;Ограниченное использование возможностей верстки и полиграфии:&lt;br /&gt;
:* Шрифты;&lt;br /&gt;
:* Сложные страницы с полями;&lt;br /&gt;
:* Плавающие объекты и т. п.&lt;br /&gt;
:* Оптимальный кернинг и выравнивание пустых пространств.&lt;br /&gt;
&lt;br /&gt;
* Размыта ответственность за содержимое;&lt;br /&gt;
* Допустима ссылочная нецелостность.&lt;br /&gt;
&lt;br /&gt;
== Почему это работает? ==&lt;br /&gt;
* Совместное редактирование влечет совместную ответственность;&lt;br /&gt;
* Вырабатывает культуру обсуждений и поиска правильного решения;&lt;br /&gt;
* «Эффект взбивания сливок» — легкость редактирования многими участниками ведет к многократным итерациям, что улучшает качество текста.&lt;br /&gt;
* Легкость порождения статей способствует фиксации больших объемов знаний («главное — начать»).&lt;br /&gt;
&lt;br /&gt;
== Когда это не работает? ==&lt;br /&gt;
* Широкий круг допущенных к редактированию может привести к спаму и вандализму.&lt;br /&gt;
* Когда возникают неразрешимые противоречия между участниками&lt;br /&gt;
* «Невежественное большинство» может «продавить» неверную информацию.&lt;br /&gt;
* Некоторых расстраивает потеря авторства при правках других участников.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Документирование]]&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;br /&gt;
{{replicate-from-custiswiki-to-4intranet}}&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Replicate-from-custiswiki-to-all&amp;diff=42830</id>
		<title>Шаблон:Replicate-from-custiswiki-to-all</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Replicate-from-custiswiki-to-all&amp;diff=42830"/>
				<updated>2013-10-10T11:00:31Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;Шаблон для задания репликации статьи/шаблона/изображения во ВСЕ наши Wiki-системы.&lt;br /&gt;
&lt;br /&gt;
Включать следует '''только''' на действительно полезные везде вещи, типа пиктограмм, макросов интеграции с Bugzilla и т.п. На справку включать НЕ надо.&amp;lt;/noinclude&amp;gt;&amp;lt;div class=&amp;quot;replication-info&amp;quot;&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;i&amp;gt;Статья реплицируется в [[SMWiki]], [[SBWiki]], [[RDWiki]], [[GZWiki]], [[DPWiki]], [[HRWiki]], [[CBWiki]], [[ORWiki]], [[RAWiki]], [[ITWiki]], [[CRMWiki]], [[NordeaWiki]]&amp;lt;/i&amp;gt;&amp;lt;/small&amp;gt;.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:Джентльменский набор вики]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Red&amp;diff=43287</id>
		<title>Шаблон:Red</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Red&amp;diff=43287"/>
				<updated>2013-10-10T10:53:20Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Выделение красным цветом. Использовать так:&lt;br /&gt;
&amp;lt;pre&amp;gt;{{red|текст}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
Внимание! Если текст содержит символ &amp;quot;=&amp;quot;, нужно писать так:&lt;br /&gt;
&amp;lt;pre&amp;gt;{{red|1=текст}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
См. также:&lt;br /&gt;
* [[:Template:Green|Зелёный цвет]]&lt;br /&gt;
* [[:Template:Blue|Синий цвет]]&lt;br /&gt;
{{replicate-from-custiswiki-to-all}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:----&amp;diff=42844</id>
		<title>Шаблон:----</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:----&amp;diff=42844"/>
				<updated>2013-10-10T10:49:37Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Вставьте данный шаблон, чтобы прекратить обтекание текста картинками (вставленными с аргументом left или right):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{----}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{replicate-from-custiswiki-to-all}}&amp;lt;/noinclude&amp;gt;&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Remark&amp;diff=43291</id>
		<title>Шаблон:Remark</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Remark&amp;diff=43291"/>
				<updated>2013-10-10T10:47:35Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Шаблон &amp;quot;заметка&amp;quot; для вставки, собственно, заметок прямо в тело статьи.&lt;br /&gt;
&lt;br /&gt;
Использовать так:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Remark|~~~~ Текст заметки}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(На место &amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt; будет подставлена ваша подпись)&lt;br /&gt;
[[Категория:Open]]&lt;br /&gt;
{{replicate-from-custiswiki-to-all}}&amp;lt;/noinclude&amp;gt;&amp;lt;div style=&amp;quot;padding: .2em .3em; margin: .2em .2em; background-color: #c1ffc1; border: dashed 1px darkblue; font-size: 92%; font-style: oblique&amp;quot;&amp;gt;{{{1}}}&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Note.svg&amp;diff=43060</id>
		<title>Файл:Note.svg</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Note.svg&amp;diff=43060"/>
				<updated>2013-09-24T12:33:31Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[Категория:Пиктограммы]]&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Attention_niels_epting.svg&amp;diff=43179</id>
		<title>Файл:Attention niels epting.svg</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Attention_niels_epting.svg&amp;diff=43179"/>
				<updated>2013-09-24T12:30:59Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Пиктограммы]]&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:No.svg&amp;diff=42829</id>
		<title>Файл:No.svg</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:No.svg&amp;diff=42829"/>
				<updated>2013-09-24T12:30:34Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Пиктограммы]]&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Caution.svg&amp;diff=43061</id>
		<title>Файл:Caution.svg</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Caution.svg&amp;diff=43061"/>
				<updated>2013-09-24T12:30:33Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Пиктограммы]]&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Bugzilla&amp;diff=42789</id>
		<title>Bugzilla</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Bugzilla&amp;diff=42789"/>
				<updated>2013-09-20T14:55:17Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bugzilla — «система контроля ошибок», разработанная «The Mozilla Organization»&lt;br /&gt;
&lt;br /&gt;
{{note}} Может также упоминаться (и с некоторыми оговорками использоваться) как:&lt;br /&gt;
* «система учета заданий»&lt;br /&gt;
* «система контроля дел»&lt;br /&gt;
* «система регистрации инцидентов»&lt;br /&gt;
* система управления «требованиями», «идеями», «предложениями», «заявками» и т. п.&lt;br /&gt;
&lt;br /&gt;
* Сайт: http://www.bugzilla.org&lt;br /&gt;
* Распространение: freeware, opensource&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
&lt;br /&gt;
Ключевым понятием системы является баг («Bug») — суть «issue» — некоторое задание, запрос, рекламация по поводу ошибки в системе, или просто сообщение, требующее обратной связи, и назначение системы — регистрация и предоставление заинтересованным лицам целостной информации об состоянии этого «issue»,&lt;br /&gt;
включая интерфейсы редактирования, запроса и поиска, механизмы почтового и [[RSS]]-оповещений.&lt;br /&gt;
&lt;br /&gt;
Сейчас Bugzilla используют [http://www.bugzilla.org/installation-list/ более семиста] компаний и организаций по всему миру. Из наиболее известных имен компаний и проектов: NASA, IBM, Mozilla, Linux Kernel, Gnome, KDE, Apache Project, Open Office.&lt;br /&gt;
&lt;br /&gt;
== Анатомия бага ==&lt;br /&gt;
&lt;br /&gt;
Сущность ''Bug'' имеет набор атрибутов, работа с которыми — редактирование и запросы — является основными сценариями использования [[Bugzilla]].&lt;br /&gt;
&lt;br /&gt;
[[File:Bugs have feeling too (cartoon tester).jpg|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Опишем эти атрибуты.&lt;br /&gt;
&lt;br /&gt;
=== Структурные ===&lt;br /&gt;
&lt;br /&gt;
==== Product ====&lt;br /&gt;
&lt;br /&gt;
«Продукт». Основной атрибут, задающий структуру. Каждый «Product» состоит из набора [[#Component|компонентов]]. Можно включить классификацию продуктов — дополнительное подразделение продуктов на группы (исключительно двухуровневое), что отразится на интерфейсе заведения новых багов и на интерфейсе запросов.&lt;br /&gt;
&lt;br /&gt;
==== Component ====&lt;br /&gt;
&lt;br /&gt;
«Компонент». Дополнительная структурная классификация. В зависимости от выбранного компонента, баг может иметь разный набор флагов.&lt;br /&gt;
&lt;br /&gt;
=== Атрибуты жизненного цикла ===&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
«Статус». Основной атрибут, определяющий текущее состояние бага, то есть меру его активности — от самого «начального» состояния, когда он даже не подтвержден, как баг, до благополучного завершения, когда баг исправлен/решен, что подтверждено Службой Качества.&lt;br /&gt;
Набор состояний зависит от конкретной инсталляции и настройки [[Bugzilla]], однако, стандартный набор:&lt;br /&gt;
;UNCONFIRMED: «Не подтвержден». Наличие этого состояния зависит от настройки конкретного [[#Product|продукта]]. Например, если считается, что баг-отчеты в продукт могут составлять неконтролируемое множество пользователей (например, интернет-аудитория), то в этом состоянии имеется смысл. Тогда, для перехода в следующее состояние («NEW»), необходимо решение пользователя системы с правами «canconfirm». Если же новые баги ставят только обученные сотрудники, то в это состояние, скорее всего не нужно.&lt;br /&gt;
;NEW: «Новый». Только что зарегистрирован или проверен (если был зарегистрирован в состоянии «UNCONFIRMED»).&lt;br /&gt;
;ASSIGNED: «Акцептован». Пользователь, указанный в «Assigned-to», подтвердил свою ответственность за этот баг. Баг может быть «перенаправленным» другому лицу, и снова стать «NEW».&lt;br /&gt;
;REOPENED: Баг уже был однажды решен, однако, решение было либо неправильными, либо неокончательным.&lt;br /&gt;
&lt;br /&gt;
==== Resolution ====&lt;br /&gt;
&lt;br /&gt;
«Резолюция», «Решение» — этот атрибут имеет смысл только для багов в состояниях «RESOLVED», «VERIFIED», «CLOSED». Также, набор «резолюций» можно настраивать, но стандартный набор следующий:&lt;br /&gt;
&lt;br /&gt;
;FIXED: «Решено» — наиболее стандартная резолюция — означает, что задание выполнено или баг исправлен.&lt;br /&gt;
;INVALID: «Некорректно» — неправильная или некорректная постановка, не имеющая смысла.&lt;br /&gt;
;WONTFIX: «Проблема есть, но решать ее не будем». Например, такое может быть в отношении «request for enhancement», которые хоть и имеют смысл, но являются слишком трудновыполнимыми и не являются обязательными.&lt;br /&gt;
;DUPLICATE: «Дубль» — описанная проблема уже регистрировалась в определенном баге.&lt;br /&gt;
;WORKSFORME: «А у меня работает…» — не удалось воспроизвести описанную проблему ни эмуляцией сценария, ни анализом кода.&lt;br /&gt;
;MOVED: Проблема перенесена в иную систему- «tracker».&lt;br /&gt;
&lt;br /&gt;
Также можно использовать:&lt;br /&gt;
;LATER: Задача зафиксирована, но ее решение откладывается на неопределенный срок. Возможно для ее решение нужно некоторое внешнее событие, или решение каких-либо задач. Если в продукте есть веха «неопределенное будущее», то разумно также установить «target milestone» на эту веху.&lt;br /&gt;
&lt;br /&gt;
==== Диаграмма ====&lt;br /&gt;
&lt;br /&gt;
Жизненный цикл бага, он же граф переходов состояний, он же work flow, жестко задан в коде, и представлен ниже, на графе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G {&lt;br /&gt;
  ranksep =0.75;&lt;br /&gt;
  node [fontsize=&amp;quot;12&amp;quot;];&lt;br /&gt;
  edge [fontsize=&amp;quot;10&amp;quot;,labelfloat=true,fontcolor=blue,labelfontcolor=blue,labeldistance=2];&lt;br /&gt;
&lt;br /&gt;
  UNCONFIRMED -&amp;gt; NEW [headlabel=&amp;quot;Подтвержден \n или утвержден \n голосованием&amp;quot;];&lt;br /&gt;
  UNCONFIRMED -&amp;gt; ASSIGNED [label=&amp;quot;Разработчик \n берет баг&amp;quot;];&lt;br /&gt;
  UNCONFIRMED -&amp;gt; RESOLVED;&lt;br /&gt;
&lt;br /&gt;
  NEW -&amp;gt; ASSIGNED [headlabel=&amp;quot;Разработчик \n берет баг&amp;quot;];&lt;br /&gt;
  REOPENED -&amp;gt; ASSIGNED[headlabel=&amp;quot;Разработчик \n  берет баг&amp;quot;];&lt;br /&gt;
  NEW -&amp;gt; RESOLVED;&lt;br /&gt;
&lt;br /&gt;
  ASSIGNED -&amp;gt; RESOLVED;&lt;br /&gt;
  ASSIGNED -&amp;gt; NEW [headlabel=&amp;quot;Разработчик передает баг&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
 RESOLVED [shape=record,style=&amp;quot;filled&amp;quot;,fillcolor=&amp;quot;palegreen&amp;quot;,fontsize=10,label=&amp;quot;RESOLVED|{FIXED|DUPLICATE|WONTFIX|WORKSFORME|INVALID|REMIND|LATER}&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
  VERIFIED[style=&amp;quot;filled&amp;quot;,fillcolor=&amp;quot;slateblue&amp;quot;];&lt;br /&gt;
  REOPENED[style=&amp;quot;filled&amp;quot;,fillcolor=&amp;quot;orangered&amp;quot;];&lt;br /&gt;
  ASSIGNED[style=&amp;quot;filled&amp;quot;,fillcolor=&amp;quot;yellow&amp;quot;];&lt;br /&gt;
  NEW[style=&amp;quot;filled&amp;quot;,fillcolor=&amp;quot;orange&amp;quot;];&lt;br /&gt;
  CLOSED[style=&amp;quot;filled&amp;quot;,fillcolor=&amp;quot;lightgrey&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  RESOLVED -&amp;gt; REOPENED [headlabel=&amp;quot;Забраковано&amp;quot;];&lt;br /&gt;
  RESOLVED -&amp;gt; VERIFIED [headlabel=&amp;quot;Проверено&amp;quot;];&lt;br /&gt;
  RESOLVED -&amp;gt; CLOSED;&lt;br /&gt;
&lt;br /&gt;
  VERIFIED -&amp;gt; REOPENED;&lt;br /&gt;
  VERIFIED -&amp;gt; CLOSED;&lt;br /&gt;
&lt;br /&gt;
  REOPENED -&amp;gt; RESOLVED;&lt;br /&gt;
&lt;br /&gt;
  CLOSED -&amp;gt; REOPENED;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Связанные пользователи ===&lt;br /&gt;
&lt;br /&gt;
==== Assigned_To ====&lt;br /&gt;
&lt;br /&gt;
Лицо (сотрудник, пользователь), ответственное за решение (исправление) бага. Подтверждение ответственности происходит при переводе бага из состояний «NEW» или «REOPENED» в состояние «ASSIGNED».&lt;br /&gt;
&lt;br /&gt;
==== Reporter ====&lt;br /&gt;
&lt;br /&gt;
Пользователь, собственно составивший (заполнивший информацию) о баге.&lt;br /&gt;
&lt;br /&gt;
==== QA ====&lt;br /&gt;
&lt;br /&gt;
Пользователь, ответственный за проверку решения бага.&lt;br /&gt;
&lt;br /&gt;
==== CC ====&lt;br /&gt;
&lt;br /&gt;
«СС list»: Список людей, извещаемых при изменениях бага.&lt;br /&gt;
&lt;br /&gt;
=== Описание бага ===&lt;br /&gt;
&lt;br /&gt;
==== Summary ====&lt;br /&gt;
&lt;br /&gt;
Аннотация задачи/проблемы одним предложением. В правилах «хорошего тона» обязательно дублировать (не обязательно дословно) при регистрации нового бага, содержимое «Summary» в первом комментарии, ибо атрибут «Summary» может быть несколько раз отредактирован, будет утерян смысл бага. Конечно, можно посмотреть историю изменений, но лучше, чтобы эта история была зафиксирована в комментариях, которые показываются всегда.&lt;br /&gt;
&lt;br /&gt;
==== Version ====&lt;br /&gt;
&lt;br /&gt;
Обычно используется для указания конкретных версий продукта (вернее компонента продукта), в которых наблюдается описанная проблема.&lt;br /&gt;
&lt;br /&gt;
==== Priority ====&lt;br /&gt;
&lt;br /&gt;
[[#Assigned_To|Ответственный]] указывает приоритет (именно свою оценку приоритета) описанной проблемы или задания. Поэтому менять приоритет у чужих багов-заданий считается неправильным. Стандартный набор значений — от «P1» (наивысший приоритет) до «P5» (наименьший).&lt;br /&gt;
&lt;br /&gt;
==== Severity ====&lt;br /&gt;
&lt;br /&gt;
Указывает на критичность возникшей проблемы. Домен значений можно настраивать, стандартный набор следующий:&lt;br /&gt;
&lt;br /&gt;
;Blocker: Разработка или использования продукта невозможна. Нужно немедленное исправление проблемы.&lt;br /&gt;
;Critical: Серьезные проблемы — не работает критический блок функционала, наблюдаются серьезные ошибки, связанные с потерей данных и т. п.&lt;br /&gt;
;Major: Проблема связана с важным функционалом продукта.&lt;br /&gt;
;Minor: Проблема связана с второстепенным функционалом продукта, или есть легкий обходной путь для этой проблемы.&lt;br /&gt;
;Trivial: Проблема косметического уровня — например, «недоработанный» интерфейс (опечатки, не выровненные поля, разнобой с цветами и т. п.)&lt;br /&gt;
;Enhancement: «Request for enhancement».&lt;br /&gt;
&lt;br /&gt;
==== Target ====&lt;br /&gt;
&lt;br /&gt;
«Target Milestone», «Веха».&lt;br /&gt;
&lt;br /&gt;
Указание вехи, (версии, стадии) проекта, к которой баг должен быть решен.&lt;br /&gt;
Не путать с [[#Version|версией]]. Например, баг может описывать ошибку, возникшую в версии «1.17», но которую было решено исправить к вехе «1_21», в которой будет выпущена версия продукта «1.21». Веха не обязательно должна быть привязана к версии продукта — она может быть привязана и к определенному времени. Набор вех — набор единых для каждого продукта событий, которые должны синхронизировать процессы исправления, тестирования и пронесения изменений. Каждый продукт имеет атрибут «Milestone URL», содержащий ссылку на документ, где вехи продукта должны быть поименованы и описаны, то есть где будет приведен некоторый «Roadmap» проекта.&lt;br /&gt;
&lt;br /&gt;
==== Comments ====&lt;br /&gt;
&lt;br /&gt;
Комментарии. Первый комментарий по багу — это «Description», остальные в форме редактирования бага именуются «Additional Comments». Используется всеми связанными с багом пользователями для централизованных комментариев, которых [[Bugzilla]] рассылает всем ([[#Reporter]],[[#CC]],[[#QA]],[[#CC]]) по почте.&lt;br /&gt;
В нашей инсталляции, есть возможность «Silent»-комментариев (checkbox «Silent»), информация о которых не рассылается по почте. Использовать только в том случае, когда информация в комментарии действительно малоинтересна — например, просто worklog-запись о выполненной промежуточной (не «решающей» баг) работе, например, если основная ценность записи — с регистрация личных трудозатрат (см. [[#Учет времени (Timetracking)]]).&lt;br /&gt;
&lt;br /&gt;
Также, не стоит злоупотреблять комментарии, и превращать их в форум. Для обсуждения постановки задачи, продуктивней завести ассоциированную с багом статью в [[WikiWiki]]-системе, и обсуждать там (см. [[#Интеграция с Wiki]]).&lt;br /&gt;
&lt;br /&gt;
=== Зависимости между багами ===&lt;br /&gt;
&lt;br /&gt;
В [[Bugzilla]] регистрируется только один единственный вид зависимостей: «баг X зависит от решения бага Y». То есть нет разделения структурных зависимостей вида «проблема X подразделяется на проблемы X&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,X&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,X&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;» и сетевых зависимостей общего вида, но в целом, ничто не мешает представлять структурные зависимости в общем виде («баг X зависит от решения багов X&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,X&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,X&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;».&lt;br /&gt;
Зарегистрированные зависимости видны и при просмотре атрибутов отдельно выбранных багов, и могут быть просмотрены в виде ориентированного графа вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G {&lt;br /&gt;
graph [rankdir=LR, size=&amp;quot;64,64&amp;quot;]&lt;br /&gt;
node [style=filled, color=lightgrey]&lt;br /&gt;
11407 -&amp;gt; 11405;&lt;br /&gt;
11407 -&amp;gt; 11406;&lt;br /&gt;
11405 [color=green];&lt;br /&gt;
11407 [color=green];&lt;br /&gt;
11406 ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В нашей инсталляции Bugzilla 3 графы зависимостей имеют две дополнительные особенности:&lt;br /&gt;
&lt;br /&gt;
* «Важные» баги отображаются более крупными и их заголовки отображаются прямо на графе. «Важными» считаются баги, имеющие в трудозатратах или их оценке более 40 часов, либо блокирующие более, чем 4 бага.&lt;br /&gt;
* Можно выбрать «альтернативный» алгоритм построения графов, располагающий баги на поверхности более плотно — «twopi».&lt;br /&gt;
&lt;br /&gt;
(Баг «11407» зависит от решенного «11406» и нерешенного «11405»).&lt;br /&gt;
&lt;br /&gt;
==== Depends on ====&lt;br /&gt;
&lt;br /&gt;
Указывает, от решения каких багов '''зависит данный баг'''.&lt;br /&gt;
&lt;br /&gt;
В нашей инсталляции, показывается также активность по блокирующим багам, а именно:&lt;br /&gt;
;Процент выполненности блокирующих:&lt;br /&gt;
 Blockers completed ~16%, &lt;br /&gt;
;Дата последнего изменения блокирующих багов:&lt;br /&gt;
 last changed 2009-02-12 12:57:45&lt;br /&gt;
&lt;br /&gt;
==== Blocks ====&lt;br /&gt;
&lt;br /&gt;
Указывает, решение каких багов '''зависит от данного бага'''.&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
&lt;br /&gt;
==== URL ====&lt;br /&gt;
Ассоциированный с багом URL, указывающий на документ с описанием/постановкой проблемы, если таковой имеется.&lt;br /&gt;
В нашей инсталляции [[Bugzilla]], можно также пользоваться автоматической связью между багом и ассоциированной с каждым [[#Component|компонентом]] [[WikiWiki]]-системой, в которой можно делать пристойно отформатированную постановку задачи и даже вести ее обсуждение (См. [[#Интеграция с Wiki]]).&lt;br /&gt;
&lt;br /&gt;
==== Whiteboard ====&lt;br /&gt;
Текстовая зона свободной формы для задания кратких заметок или тегов к багу.&lt;br /&gt;
&lt;br /&gt;
==== Keywords ====&lt;br /&gt;
Ключевые слова, используемые для пометки и даже для классификации багов.&lt;br /&gt;
Набор ключевых слов «глобальный», общий для всех продуктов внутри инсталляции [[Bugzilla]], поэтому, рекомендуется ответственно относиться к заведению каждого нового ключевого слов, чтобы не «замусоривать» общее пространство.&lt;br /&gt;
&lt;br /&gt;
==== Platform ====&lt;br /&gt;
Вычислительная платформа (железо), на которой наблюдается проблема.&lt;br /&gt;
В нашей инсталляции [[Bugzilla]] этот атрибут не используется.&lt;br /&gt;
&lt;br /&gt;
==== OS ====&lt;br /&gt;
Операционная система, на которой наблюдается проблема.&lt;br /&gt;
В нашей инсталляции [[Bugzilla]] этот атрибут не используется.&lt;br /&gt;
&lt;br /&gt;
==== Attachments ====&lt;br /&gt;
К багам можно прикреплять файлы (например сценарии тестирования, патчи)&lt;br /&gt;
&lt;br /&gt;
==== Votes ====&lt;br /&gt;
Собрал ли баг сколько либо голосов (в нашей инсталляции отсутствует). Используется, в основном, для автоматического перевода бага из состояния «UNCONFIRMED» в состояние «NEW».&lt;br /&gt;
&lt;br /&gt;
== Поиск багов ==&lt;br /&gt;
&lt;br /&gt;
=== Основные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
На странице «Bugzilla Search» представлен интерфейс к поиску любых зарегистрированных багов, комментариев и патчей. Интерфейс позволяет задать поисковые значения для всех перечисленных полей бага, причем для некоторых полей может быть задано несколько значений из домена (с помощью списков с множественным выбором). Если значение не выбрано — атрибут бага может принимать любое значение.&lt;br /&gt;
&lt;br /&gt;
=== Хранение запросов ===&lt;br /&gt;
&lt;br /&gt;
Любой выполненный запрос можно сохранить под неким выбранным именем («Remember Search As»), тогда результат этого запроса можно будет всегда получить за один «клик», активировав одноименную с запросом ссылку, которая будет показываться внизу страницы, в линейке «Saved Searches».&lt;br /&gt;
&lt;br /&gt;
=== Временные условия ===&lt;br /&gt;
&lt;br /&gt;
Можно накладывать временные условия на изменение бага, запрашивая только баги, по которым было какое нибудь движение (изменение атрибутов, комментарии) в определенном интервале времени — см. группу полей «Bug Changes». Интервал времени можно задавать как в абсолютной форме (дата в ISO-формате yyyy-mm-dd), так и в форме, относительной текущей даты, таким образом можно сделать хранимый запрос, показывающий только баги измененные в течении предшествующих 24 часов (или недели, или месяца).&lt;br /&gt;
&lt;br /&gt;
Конкретно, можно использовать слова:&lt;br /&gt;
* Now — «сейчас», разумно использовать для задания верхней границы интервала.&lt;br /&gt;
* 1d — день назад (2d — два дня назад …). 0d — последняя полночь, до текущего момента.&lt;br /&gt;
* 1w — то же самое в неделях. 0w — начало недели.&lt;br /&gt;
* 1m — то же в месяцах. 0m — начало месяца.&lt;br /&gt;
* 1y — то же в годах. 0y — начало года.&lt;br /&gt;
&lt;br /&gt;
Можно добавить перед относительными датами знак «+», это будет означать, что относительная дата не вычитается из «Now», а прибавляется (в будущее).&lt;br /&gt;
&lt;br /&gt;
=== Полнотекстовый поиск ===&lt;br /&gt;
&lt;br /&gt;
Начиная с версии 3.0, Bugzilla поддерживает честный полнотекстовый поиск по MySQL [http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html FULLTEXT-индексам], а с нашими доработками — и русскоязычную морфологию через стеммер Портера {{CPAN|Lingua::Stem::Ru}} (порт из [http://snowball.tartarus.org/algorithms/russian/stemmer.html snowball]).&lt;br /&gt;
&lt;br /&gt;
То есть, по слову «завтрака» ищется и «завтрак», и «завтраков» и т. п.&lt;br /&gt;
&lt;br /&gt;
Искать по словам можно из двух мест: со страницы поиска [http://bugs.office.custis.ru/bugs/query.cgi] и из поля «Quicksearch», расположенного в шапке и подвале страниц Bugzilla.&lt;br /&gt;
&lt;br /&gt;
По умолчанию ищутся баги, содержащие в описании и/или комментариях ''все введённые слова'' с учётом морфологии. Однако, также действует специальный синтаксис, на самом деле совпадающий с синтаксисом [http://dev.mysql.com/doc/refman/5.1/en/fulltext-boolean.html MySQL Fulltext Boolean Search]. При встрече во введённом запросе любого элемента этого синтаксиса запрос автоматически переключается в режим поиска ''любого из введённых слов'', если не указано обратное.&lt;br /&gt;
&lt;br /&gt;
Описание синтаксиса:&lt;br /&gt;
&lt;br /&gt;
; +слово: Слово обязательно должно присутствовать в тексте бага.&lt;br /&gt;
; -слово: Слово не должно присутствовать в тексте бага. Работает только в сочетании с заданными «положительными» словами — запрос, состоящий из просто «-слова», не вернёт ни один баг.&lt;br /&gt;
; слово: Слово не обязательно должно присутствовать в тексте бага, однако тексты, содержащие данное слово, ранжируются выше других.&lt;br /&gt;
; &amp;gt;слово: Повышенная «важность» слова — больше вклад в ранжирование.&lt;br /&gt;
; &amp;lt;слово: Пониженная «важность» слова.&lt;br /&gt;
; +(слово1 слово2) слово3: Группировка выражений скобками. Может быть вложенной.&lt;br /&gt;
; ~слово: Ранжировать тексты, содержащие слово ниже других, но не исключать окончательно.&lt;br /&gt;
; &amp;lt;nowiki&amp;gt;сло*&amp;lt;/nowiki&amp;gt;: Знак шаблона (wildcard). Такой запрос найдёт и «слона», и «слово».&lt;br /&gt;
; &amp;lt;nowiki&amp;gt;&amp;quot;слово, или фраза&amp;quot;&amp;lt;/nowiki&amp;gt;: Искать словосочетания, а не слова. Знаки препинания между словами не учитываются. Морфология учитывается всё равно.&lt;br /&gt;
&lt;br /&gt;
Кроме того, слова короче 3 символов в поиске не учитываются.&lt;br /&gt;
&lt;br /&gt;
=== Boolean Charts ===&lt;br /&gt;
&lt;br /&gt;
Можно также задавать «продвинутые» запросы используя «Boolean Charts».&lt;br /&gt;
Хотя использование «Boolean Charts» несколько менее «интуитивно» и возможно требует большего времени, чем задание атрибутов в основной форме, с их помощью можно построить запрос, практически произвольной сложности, вида&lt;br /&gt;
 [ NOT ]&lt;br /&gt;
  ( (Атрибут&amp;lt;sub&amp;gt;11&amp;lt;/sub&amp;gt; Операция&amp;lt;sub&amp;gt;11&amp;lt;/sub&amp;gt; Значение&amp;lt;sub&amp;gt;11&amp;lt;/sub&amp;gt;) OR&lt;br /&gt;
    (Атрибут&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt; Операция&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt; Значение&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;) OR&lt;br /&gt;
    ....)&lt;br /&gt;
  [ AND&lt;br /&gt;
    (Атрибут&amp;lt;sub&amp;gt;21&amp;lt;/sub&amp;gt; Операция&amp;lt;sub&amp;gt;21&amp;lt;/sub&amp;gt; Значение&amp;lt;sub&amp;gt;21&amp;lt;/sub&amp;gt;) OR&lt;br /&gt;
    (Атрибут&amp;lt;sub&amp;gt;22&amp;lt;/sub&amp;gt; Операция&amp;lt;sub&amp;gt;22&amp;lt;/sub&amp;gt; Значение&amp;lt;sub&amp;gt;22&amp;lt;/sub&amp;gt;) OR&lt;br /&gt;
    ....) ]&lt;br /&gt;
  [ AND ... ]&lt;br /&gt;
  )&lt;br /&gt;
&lt;br /&gt;
В частности, там можно накладывать условия по флагам, например,&lt;br /&gt;
;Только баги, содержащие флаги установленные пользователем «user@company.com»: «Flag Setter» «is equal to» «user@company.com»&lt;br /&gt;
;Только баги, в которых флаг «флаг_утвердить» установлен в «+»: «Flag» «is equal to» «флаг_утвердить+»&lt;br /&gt;
;Только баги, в которых флаг «флаг_утвердить» установлен в «?»: «Flag» «is equal to» «флаг_утвердить?» (аналогично с «-»).&lt;br /&gt;
&lt;br /&gt;
В [[Bugzilla]] 3 появилась возможность, ранее имевшаяся только в нашей версии — «подзапросы» по сохранённым запросам поиска в лице операций «matched by saved search» (присутствует в списке, возвращаемом запросом таким-то), и «not matched by saved search» (''отсутствует'' в списке, возвращаемом запросом таким-то)&lt;br /&gt;
&lt;br /&gt;
Например, вы можете сформулировать условие «Блокируется багом из списка, возвращаемого сохранённым запросом поиска My Bugs» — для этого нужно выбрать поле «Depends On», операцию «matched by saved search» и значение «My Bugs».&lt;br /&gt;
&lt;br /&gt;
Чуть менее тривиально: можно задавать и запросы вида «найти все мои баги в открытом состоянии, для которых все блокирующие выполнены». Для этого просто нужно создать сохранённый запрос, находящий все выполненные баги, и подменить в запросе из предыдущего абзаца My Bugs этим запросом.&lt;br /&gt;
&lt;br /&gt;
Желательно, чтобы вспомогательные запросы возвращали небольшое число багов, иначе это сильно влияет на скорость ответа. Также, весьма желательно, при использовании этих условий, задавать дополнительные, «простые» условия фильтрации.&lt;br /&gt;
&lt;br /&gt;
Заметим, запросы типа «баги, у которых нет блокирующих» или «баги, у которых нет зависимых»&lt;br /&gt;
можно реализовать стандартными условиями типа:&lt;br /&gt;
 NOT(Depends On &amp;quot;contains regexp&amp;quot; &amp;quot;[0-9]+&amp;quot; )&lt;br /&gt;
 NOT(Blocks     &amp;quot;contains regexp&amp;quot; &amp;quot;[0-9]+&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
== Списки багов ==&lt;br /&gt;
&lt;br /&gt;
После выполнения запроса система возвращает выборку — список удовлетворяющих запросу багов. Формат этого списка настраиваемый, по ссылке «Change Columns» можно настроить набор показываемых в списке атрибутов.&lt;br /&gt;
Также можно включить настройку «Stagger headers» — разнесение заголовка таблицы списка на два уровня.&lt;br /&gt;
&lt;br /&gt;
После выбора списка, его можно отсортировать щелчками по заголовкам колонок (что приводить к сортировке списка в порядке возрастания выбранного атрибута-колонки).&lt;br /&gt;
&lt;br /&gt;
Другие полезные возможности вызываются ссылками, расположенными внизу списка:&lt;br /&gt;
&lt;br /&gt;
;CSV: выдает список в CSV формате (разделенным запятыми), например, для импорта в программу электронных таблиц.&lt;br /&gt;
;Buglist feed: выдает список в RSS формате, для чтения через RSS-агрегатор. Список отсортирован по убыванию времени открытия бага, набор полей тоже задан жестко. Может быть полезным для отслеживания «поступления» новых багов. Для пользователей Mozilla Firefox рекомендуется установить [http://sage.mozdev.org Sage], чтобы использовать Bugzilla-авторизацию, полученную браузером после логина.&lt;br /&gt;
;Activity feed: показывает RSS-ленту последних комментариев и активности по выбранным в списке багам.&lt;br /&gt;
;Change Columns: изменить список атрибутов, показываемых в списке (см. выше).&lt;br /&gt;
;Change several bugs at once: Если у вас достаточно привилегий, то вы можете делать некоторые изменения одновременно над всеми багами в списке — например, сменить ответственного («owner»), «закрыть» группу багов, перенести их в другой продукт или компонент.&lt;br /&gt;
;Send Mail to Bug Assignees: Послать письмо всем ответственным по всем багам в списке.&lt;br /&gt;
;Edit Search: Можно вернуться на страницу запроса для дополнительного уточнения запроса.&lt;br /&gt;
;Remember Search As: Можно присвоить этому запросу имя и сохранить его, ссылка на сохраненный запрос будет показываться внизу вашей страницы.&lt;br /&gt;
&lt;br /&gt;
Также есть 3 кнопки:&lt;br /&gt;
;Long format: показывает несколько багов на одной странице в подробном формате со всеми атрибутами и полными обсуждениями.&lt;br /&gt;
;XML: даёт возможность выгрузить баги в XML-файл, для последующего импорта в другую Bugzilla или какой-то специальной обработки.&lt;br /&gt;
;Time Summary: перенаправляет на страницу просмотра отчётов по трудозатратам по выбранным багам (см. [[#Time Summary|Time Summary]]).&lt;br /&gt;
&lt;br /&gt;
В нашей инсталляции [[Bugzilla]], есть также пункты:&lt;br /&gt;
&lt;br /&gt;
;Graph: Просмотр выбранного списка багов в виде ориентированного графа.&lt;br /&gt;
;Summary Report: Просмотр табличной агрегации (См. [[#Отчеты]]) выбранного списка багов по выбранному срезу (набору атрибутов). Каждая ячейка табличного отчета будет содержать число багов, обладающих соответствующими атрибутами и ссылка на список этих багов. Таким образом, можно легко делать настоящий «OLAP drill-down», то есть формулировать «широкий запрос», переходя от списка к табличному отчету «раскладывать» по выбранным измерениям (от одного до трех), и далее, получать списки багов по отдельным ячейкам «среза», возможно повторяя процедуру раскладки по другим измерениям.&lt;br /&gt;
&lt;br /&gt;
== Заведение багов ==&lt;br /&gt;
&lt;br /&gt;
Процедура заведения бага следующая:&lt;br /&gt;
&lt;br /&gt;
* Кликните на ссылке «New» в нижней или верхней линейке «Actions».&lt;br /&gt;
* Выберите классификацию и продукт.&lt;br /&gt;
* Заполните поля. Уделите особое внимание атрибутам, идентифицирующим проблему или задание (что, где, насколько срочно) — [[#Component|Component]], [[#Version|Version]], [[#Severity|Severity]]. Старайтесь сделать так, что все, что написано в [[#Summary|summary]] также было записано (не обязательно дословно) в первом комментарии (поле [[#Comments|Description]]). Дело в том, что «summary» бага меняется, и нужно, чтобы первоначальная информация не пропадала.&lt;br /&gt;
* Нажмите «Commit» — это зафиксирует и отправит ваш «bug report».&lt;br /&gt;
&lt;br /&gt;
Для быстрого заведения багов по образцу уже созданных — например, если происходит декомпозиция крупной проблемы на мелкие — можно применять [[#Клонирование|клонирование]] багов.&lt;br /&gt;
&lt;br /&gt;
=== Импорт багов из Excel-листов ===&lt;br /&gt;
&lt;br /&gt;
Наша инсталляция Bugzilla 3 поддерживает массовый импорт багов из Excel-файлов — как бинарных &amp;lt;code&amp;gt;*.xls&amp;lt;/code&amp;gt;, так и [[rupedia:Office_Open_XML|OOXML]] &amp;lt;code&amp;gt;*.xlsx&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Система подразумевает, что первая строка Excel-файла содержит заголовки колонок, а последующие — описания багов. Обязательными полями бага являются только [[#Product|продукт]], [[#Component|компонент]] и [[#Summary|заголовок]].&lt;br /&gt;
&lt;br /&gt;
Процедура импорта багов из Excel-файла следующая делится на два этапа. На первом этапе вы выбираете Excel-файл и устанавливаете начальные параметры импорта. На втором этапе система разбирает загруженный файл и отображает его на веб-странице для проверки и, возможно, изменения каких-либо полей, или сопоставления каких-либо полей колонкам таблицы.&lt;br /&gt;
&lt;br /&gt;
После проверки и нажатия «Import selected bugs» отображается страница с результатами импорта:&lt;br /&gt;
&lt;br /&gt;
* Либо с ошибкой, и в этом случае '''ни один''' из выбранных багов не импортируется, то есть, гарантируется транзакционность.&lt;br /&gt;
* Либо с успехом, и в этом случае на странице будет текст «Successfully imported ''X'' bugs:» и список их ID со ссылками.&lt;br /&gt;
&lt;br /&gt;
Итак, для запуска Excel-импорта:&lt;br /&gt;
&lt;br /&gt;
* Кликните на ссылке «New» в нижней или верхней линейке «Actions».&lt;br /&gt;
* Внизу страницы, под списком классификаций или продуктов, вы увидите ссылку «'''See also:''' Mass bug import from Excel files». Перейдите по этой ссылке.&lt;br /&gt;
* Выберите Excel-файл кликом по кнопке «Обзор…»&lt;br /&gt;
* Если ваш Excel-файл содержит несколько листов, а вы хотите импортировать только один из них, введите его название в поле «Enter sheet name to process:». Если вы хотите импортировать все листы, очистите это поле.&lt;br /&gt;
* После загрузки файла система автоматически проверяет список на наличие уже импортированных ранее багов по точного совпадению названия и максимальному возрасту бага, указываемому в днях в поле «Maximum bug duplicate age:». Поэтому, если вы производите повторный импорт файла (возможно, модифицированного), укажите такой максимальный возраст, чтобы баги, импортированные ранее из того же файла, попали в этот возраст.&lt;br /&gt;
* Если вы хотите установить значение определённых полей по умолчанию для всех импортируемых багов, можно выбрать поле, нажать «Add field value for all bugs» и заполнить выбранное поле.&lt;br /&gt;
* Нажмите кнопку «Parse File».&lt;br /&gt;
&lt;br /&gt;
После нажатия кнопки «Parse File» будет показана страница с таблицей так, как её видит система. Если колонки в Excel-файле имели названия, совпадающие с названиями полей в багзилле, они автоматически сопоставятся нужным полям бага. Если же автоматическое сопоставление не удастся, то в любом случае по клику на название колонки будет показан выпадающий список для выбора нужного поля.&lt;br /&gt;
&lt;br /&gt;
Значения полей, то есть значения ячеек, должны в точности соответствовать значениям полей в Bugzilla. Все поля отображаются редактируемыми, и вы можете исправить любые значения, если увидите несоответствия.&lt;br /&gt;
&lt;br /&gt;
По результатам автоматической проверки существующих импортированных багов из списка будут установлены флажки слева каждой строки. По нажатию кнопки «Import selected bugs» будет предпринята попытка импорта ''только помеченных флажками'' багов.&lt;br /&gt;
&lt;br /&gt;
Также после успешно выполненного импорта вы увидите ссылку «'''Import another Excel file''' — you can bookmark this link as a template». В этой ссылке сохранена вся информация о сопоставлении полей и значениях полей для всех багов по умолчанию. Поэтому, переходя по ней, вы сможете импортировать другой файл того же формата без лишних усилий. Также вы можете сохранить её в закладки браузера, и воспользоваться ей в будущем.&lt;br /&gt;
&lt;br /&gt;
== Редактирование багов ==&lt;br /&gt;
&lt;br /&gt;
Редактирование багов необходимо, для поддержания (и распространения по заинтересованным лицам) актуальной информации по обозначенной в описании бага проблеме или задаче.&lt;br /&gt;
Редактирование бага включает изменение значений [[#Анатомия бага|атрибутов]] бага (причем ведется полная история их изменения, и написания комментариев (по сути рабочих журналов по решению проблемы).&lt;br /&gt;
То есть основной принцип «трекинга» — регистрация и хранение истории всех изменений. Поэтому, комментарии не удаляются и не редактируются, после того, как произошло их добавление в журнал комментариев к багу.&lt;br /&gt;
Кроме текстовых комментариев, можно также («аддитивно») регистрировать различные вложения («attachments») — логи ошибок, скриншоты, примеры патчей («patches»), и т. п.&lt;br /&gt;
&lt;br /&gt;
В основном, редактированием основных атрибутов бага занимаются наиболее тесно связанные с багом&lt;br /&gt;
участники, указанные в атрибутах [[#Reporter|Reporter]], [[#Assigned_To|Assigned_To]] и [[#QA|QA]], но конкретный регламент использования жестко не определен, и в принципе, любой пользователь (даже никак не связанный с багом), обладающий соотв. правами, может менять состояние бага и другие атрибуты.&lt;br /&gt;
&lt;br /&gt;
Впрочем, обычно:&lt;br /&gt;
* «Reporter» ответственен за указание атрибутов идентифицирующих проблему (что, где, насколько срочно) — [[#Product|Product]], [[#Version|Version]], [[#Severity|Severity]];&lt;br /&gt;
* «Assignee» определяет [[#Priority|Priority]], [[#Status|Status]], переводя баг по состояниям «NEW»-&amp;gt; «ASSIGNED»-&amp;gt; «RESOLVED».&lt;br /&gt;
* «QA» определяет [[#Status|Status]], переводя баг из состояния «RESOLVED» в состояния «VERIFIED» или «REOPENED».&lt;br /&gt;
&lt;br /&gt;
Если в инсталляции включены функции регистрации времени (см., например, параметр «timetrackinggroup»), то можно, регистрировать предварительную оценку сложности задачи,&lt;br /&gt;
и с каждым комментарием также регистрировать свои трудозатраты и корректировать оценку оставшийся работы (См. [[#Учет времени (Timetracking)]]).&lt;br /&gt;
&lt;br /&gt;
В окне редактирования бага можно выяснить различные аспекты решаемой проблемы, зарегистрированные как в [[Bugzilla]]:&lt;br /&gt;
&lt;br /&gt;
* Лента комментариев к багу, отсортированная по времени;&lt;br /&gt;
* Ссылка «View Bug Activity» ведет на историю изменения всех атрибутов бага;&lt;br /&gt;
&lt;br /&gt;
так и в других системах (есть в нашей инсталляции):&lt;br /&gt;
;Look for Bug in CVS/SVN: Ссылка на страницу [[ViewVC]] — выполняет поиск в [[CVS]] и [[Subversion]]-репозитариях ревизий файлов, в комментариях к которым указан номер этого бага. Страница результатов поиска содержит также и ссылки на различные другие действия с файлами. Оставленная до поры, до времени &amp;lt;sup&amp;gt;+Old&amp;lt;/sup&amp;gt; — ссылка на аналогичную страницу поиска в [[Bonsai]] — в будущем будет удалена. См. [[#Интеграция с системами контроля версий]].&lt;br /&gt;
;Look for Bug in Wiki: Перенаправляет на ассоциированную с багом статью. См. [[#Интеграция с Wiki]].&lt;br /&gt;
&lt;br /&gt;
=== Комментарии ===&lt;br /&gt;
&lt;br /&gt;
Заметим, что комментарии к багу нельзя редактировать задним числом (это принципиальная позиция),&lt;br /&gt;
разве что член специальной группы «insidergroup» может сделать их «private» — невидимыми для обычных пользователей.&lt;br /&gt;
&lt;br /&gt;
В нашей инсталляции можно воспользоваться ссылкой «Preview» (например, проверить, правильно ли «прогиперлинкуются» различные ссылки, см. [[#Автоматические ссылки]]), и убедившись, что все хорошо, вернуться кнопкой «Back» броузера и выполнить «Commit».&lt;br /&gt;
&lt;br /&gt;
В стандартной инсталляции для этого можно использовать страничку c адресом вида:&lt;br /&gt;
 http://bugs.office.custis.ru/bugs/page.cgi?id=linkify.html&lt;br /&gt;
&lt;br /&gt;
=== Клонирование ===&lt;br /&gt;
Для быстрого заведения новых багов (схожих с имеющимися) — например, если необходимо провести декомпозицию, то есть выделить некоторую подзадачу из крупной задачи, можно применять «клонирование», вызываемое ссылкой «Clone This Bug to other/same product».&lt;br /&gt;
&lt;br /&gt;
Клонирование бага приводит к заведению бага унаследовавшего все атрибуты (заполнять которых с нуля может быть очень муторно и долго) от исходного бага + являющегося блокирующим для родительского бага (впрочем, при клонировании можно и подредактировать родительские атрибуты и отказаться от блокирования родительского бага). «Клонирование в тот же продукт» выделено отдельной ссылкой, так как это ускоряет наиболее распространенный сценарий клонирования, исключая одну или две страницы выбора продукта.&lt;br /&gt;
&lt;br /&gt;
В нашей инсталляции также можно клонировать в баг любой комментарий исходного бага — через ссылку «clone as bug» над комментарием.&lt;br /&gt;
&lt;br /&gt;
== Полезности ==&lt;br /&gt;
&lt;br /&gt;
=== Автоматические ссылки ===&lt;br /&gt;
Комментарии в Bugzilla разрешены только plain текстом, то есть печатая &amp;lt;pre&amp;gt;&amp;lt;U&amp;gt;&amp;lt;/pre&amp;gt; вы получите не подчеркнутый текст, а &amp;lt;pre&amp;gt;&amp;lt;U&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также нет списков и иных структурных элементов. Тем не менее, Bugzilla делает гиперссылки для определенного рода комментариев, например распознаются и «гиперлинкуются» основные типы URL, типа:&lt;br /&gt;
* «&amp;lt;nowiki&amp;gt;http://&amp;lt;/nowiki&amp;gt;»,&lt;br /&gt;
* «&amp;lt;nowiki&amp;gt;ftp://&amp;lt;/nowiki&amp;gt;»,&lt;br /&gt;
* «&amp;lt;nowiki&amp;gt;mailto:&amp;lt;/nowiki&amp;gt;»,&lt;br /&gt;
* почтовые адреса «someone@somewhere.org».&lt;br /&gt;
Дополнительно гиперлинкуются ссылки на внутрибагзильные элементы (баги, комменты, вложения):&lt;br /&gt;
&lt;br /&gt;
* bug 12345&lt;br /&gt;
* comment 7&lt;br /&gt;
* bug 23456, comment 53&lt;br /&gt;
* attachment 4321&lt;br /&gt;
&lt;br /&gt;
=== Интеграция с системами контроля версий ===&lt;br /&gt;
&lt;br /&gt;
Очень важно, описать связь между багами (заданиями или сообщениями об ошибках) и производимым (или исправляемым) Разработчиком артефактом — программным кодом (включая документацию). В нашей Компании, весь код (то есть практически все производимое Разработчиком) находится в репозиториях принятых в Компании систем управления версиями [[CVS]] и [[Subversion]].&lt;br /&gt;
&lt;br /&gt;
Наша инсталляция [[Bugzilla]] интегрирована с системой [[ViewVC]], в которую оперативно загружается информация о всех правках в [[CVS]] и [[Subversion]]-репозитариях Компании. Поэтому, если при работе над багом XXX, ведутся правки файлов, находящихся под [[CVS]] или [[Subversion]], то при фиксации, (то есть при выполнении «commit») не нужно писать длинных комментариев, описывающих суть изменений, а достаточно указать идентификатор заявки/задания (номер бага), например, выполнить&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;cvs commit -m &amp;quot;Bug 1234&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Комментарий можно вводить и через опции командной строки и через редактор, см. ссылки на документацию в [[CVS]], [[Subversion]].&lt;br /&gt;
&lt;br /&gt;
При соблюдении этого правила, для каждой заявки можно найти все коммиты, в комментариях к которым указан номер этой заявки, с помощью ссылки «Look for Bug in CVS/SVN» на странице редактирования бага.&lt;br /&gt;
&lt;br /&gt;
Ранее похожую функцию выполнял [[Bonsai]], однако был сделан переход на [[ViewVC]] по причине поддержки не только системы контроля версий [[CVS]], но также и [[Subversion]] последним. Посему ссылки «Look for Bug in CVS/SVN» теперь ведут именно в [[ViewVC]].&lt;br /&gt;
&lt;br /&gt;
=== Интеграция с Wiki ===&lt;br /&gt;
&lt;br /&gt;
[[Bugzilla]] не является инструментом, подходящим для совместной работы над любым документом (пусть даже одностраничным), поэтому, при возникновении спорной или дискуссионной ситуации, когда нужно выработать постановку задачи (пусть даже и локальной), нужно использовать подходящий для этого инструмент: [[WikiWiki]]-систему.&lt;br /&gt;
&lt;br /&gt;
В нашей инсталляции Bugzilla, дополнительно к возможностям [[#Автоматические ссылки]],&lt;br /&gt;
можно делать читаемые гипертекстовые ссылки на статьи (и разделы статей) в&lt;br /&gt;
[[CustisWiki]], например&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wiki:Bugzilla#Автоматические_ссылки&lt;br /&gt;
wiki:[[Bugzilla#Автоматические ссылки]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
будет ссылаться на [[Bugzilla#Автоматические_ссылки]].&lt;br /&gt;
&lt;br /&gt;
Если при работе над багом (заданием или запросом), требуется сделать документ-постановку задачи и/или провести его обсуждение, то можно воспользоваться ссылкой «Look for Bug in Wiki» на странице редактирования бага, и мгновенно перейти к одноименной с багом статье «&amp;lt;nowiki&amp;gt;Bug XXX&amp;lt;/nowiki&amp;gt;», для чтения/редактирования/обсуждения.&lt;br /&gt;
&lt;br /&gt;
Рекомендуется после заведения статьи выполнить ее переименование (закладка «move/переименовать») в более дескриптивное название, например «Ошибка ORA-YYY при загрузке каталога (Bug XXX)» (что можно сделать в два клика используя только copy-paste атрибута «Summary» бага и мышь).&lt;br /&gt;
&lt;br /&gt;
Таким образом, будет создана статья с смысловым заголовком, и статья-перенаправление «Bug XXX».&lt;br /&gt;
Однако, стоит помнить, что в [[{{SITENAME}}]] не стоит помещать конфиденциальную информацию, так как тут уже не действует система прав [[Bugzilla]].&lt;br /&gt;
&lt;br /&gt;
=== Учет времени (Timetracking) ===&lt;br /&gt;
Пользователи, входящие в группу, указанную в настройках как «timetrackinggroup», могут вести учет трудоемкости каждого бага.&lt;br /&gt;
&lt;br /&gt;
Для каждого бага ведется учет следующих полей&lt;br /&gt;
&lt;br /&gt;
; «Orig. Est.»: Начальная оценка трудоемкости бага. Разумно использовать как априорную оценку трудоемкости. Хотя ее можно менять, лучше это делать реже — то есть чтобы сохранился смысл априорной оценки, данной разработчиком или руководителем проекта.&lt;br /&gt;
; «Current Est.»: Текущая оценка трудоемкости бага. Вычислимое поле, вычисляется как сумма «Hours Worked»+ «Hours Left».&lt;br /&gt;
; «Hours Worked»: Число затраченных часов времени. Может только увеличиваться с каждым редактированием.&lt;br /&gt;
; «Hours Left»: Осталось затратить времени. Изначально выставляется, как «Current Est.»- «Hours Worked», но будучи отредактированным, влияет на «Current Est.». То есть например, если считалось, что на баг надо затратить 5 часов, а после некоторой работы выяснилось, что затрачено 3 часа, а осталось еще 7, то текущая оценка меняется на 10 часов.&lt;br /&gt;
; «%Complete»: Процент завершенности — вычислимое поле, «Hours Worked»/«Current Est.».&lt;br /&gt;
; «Gain»: Выигрыш. Вычислимое поле — разность «Orig. Est.» — «Current Est.».&lt;br /&gt;
&lt;br /&gt;
Единица измерения — часы. Можно вводить нецелые значения &amp;lt;tt&amp;gt;1.5&amp;lt;/tt&amp;gt; — полтора часа.&lt;br /&gt;
&lt;br /&gt;
==== Time Summary ====&lt;br /&gt;
Отчет «Time Summary», для выбранного списка багов показывает зарегистрированные трудозатраты за заданный период, с группировкой по месяцам, в разбивке по сотрудниками или багам.&lt;br /&gt;
== Советы ==&lt;br /&gt;
&lt;br /&gt;
В процессе использования Bugzilla было сделано много доработок. О них можно кратко (очень кратко) прочитать здесь [[Bugzilla: Список доработок#Доработки 3.x]]&lt;br /&gt;
&lt;br /&gt;
=== Поддерживайте целостность ===&lt;br /&gt;
&lt;br /&gt;
* Старайтесь сделать так, что все, что вы написали в «summary» также было записано в первом комментарии. Дело в том, что «summary» бага часто меняют, и нужно, чтобы первоначальная информация не пропала.&lt;br /&gt;
* Старайтесь указывать корректные значения в полях или не указывать никаких. Например, не пишите строки «any», «нет» и подобный мусор в поле «URL», если нет никакого конкретного URL, который связан с данным багом.&lt;br /&gt;
&lt;br /&gt;
=== Вложения ===&lt;br /&gt;
Используйте вложения, а не комментарии, для больших блоков текстовых данных, таких как отладочная информация, логи и т. п. Иначе комментарии к багу станет невозможно читать, да и люди получать бессмысленные жирные письма.&lt;br /&gt;
&lt;br /&gt;
Сделана специальная доработка ({{Bug|15001}} и {{Bug|53638}}, которая позволяет присоединить текстовое вложение к багу через буфер обмена, без создания файла, с одновременным добавлением комментария, фиксацией времени и изменением некоторых других атрибутов бага. Таким образом, если Вы получили текстовое сообщение об ошибке с большим стеком, то надо не писать комментарий, а добавить вложение, где вставить это сообщение в текстовое окно вложения (переключив  radio button Enter text), а ниже написать комментарий, где кратко сформулировать ошибку.&lt;br /&gt;
&lt;br /&gt;
Обрезайте и сжимайте скриншоты. Нет необходимости показывать весь экран, если вы хотите указать на проблему в одном окне.&lt;br /&gt;
&lt;br /&gt;
Не вкладывайте простые тестовые примеры (например HTML файл, ссылающийся на CSS и картинку) как архив. Вместо этого загрузите перечисленные файлы в обратном порядке, и отредактируйте вкладываемый HTML-файл, чтобы он ссылался непосредственно на загруженные вложения.&lt;br /&gt;
&lt;br /&gt;
Bugzilla хранит и использует «Content-Type» для каждого вложения (например «text/html»). Чтобы выгружать вложение с другим «Content-Type» (например «application/xhtml+xml»), надо добавить CGI-параметр «content-type» в URL, то есть &amp;lt;nowiki&amp;gt;&amp;amp;content-type=text/plain&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Комментирование ===&lt;br /&gt;
Если вы изменяете баг, добавляйте комментарий только если вам действительно есть что сказать по делу, или если этого требует Bugzilla (для некоторых типов переходов). В противном случае, вы можете без нужды «заспамить» невинных людей. Например, люди могут настроить свой аккаунт (См. [[#«Field/recipient specific options»]]) чтобы не получать извещений при событиях вида «изменился CC». Но если доброжелатель добавляя себя, добавит еще комментарий «Я, типа, себя добавил», то это будет уже добавление комментария и это обойдет вышеуказанный фильтр.&lt;br /&gt;
&lt;br /&gt;
Не используйте подписей в комментариях, особенно, модные многострочные подписи с ASCII-картинками.&lt;br /&gt;
&lt;br /&gt;
=== Конфликты ===&lt;br /&gt;
&lt;br /&gt;
Если вы считаете, что отправленный вами баг некорректно помечен как «DUPLICATE of another», пожалуйста, задавайте вопросы-комментарии в вашем баге, а не в том, который считается багом-оригиналом. Смело добавляйте в «CC» бага человека, который принял такое решение, если его в «CC» нет.&lt;br /&gt;
&lt;br /&gt;
== Флаги ==&lt;br /&gt;
&lt;br /&gt;
Флаг — это некий атрибут, разновидность статуса, который может быть установлен на баг или вложение, чтобы указать, что этот баг/вложение находятся в некотором состоянии. Каждая инсталляция может определить свой собственных набор флагов, которых можно устанавливать на баг или вложение. Более того, флаги, в отличие от ключевых слов, имеющих «глобальную область» видимости для всех продуктов и компонентов, можно делать локальными, устанавливая набор продуктов и компонентов, в которых может быть установлен этот флаг.&lt;br /&gt;
&lt;br /&gt;
Если некий флаг определен в вашей конфигурации багзилла, то вы можете установить или сбросить этот флаг, и если разрешена функция запроса флагов (разрешается администратором системы), вы можете запрашивать другого пользователя установить флаг.&lt;br /&gt;
&lt;br /&gt;
Чтобы установить флаг, выберите «+», или «-» из выпадающего списка за списком «Flags». Значение этих символов зависит от флага и в этой документации описано быть не может, но в качестве примера, установление флага «review» в «+» может означать что баг или вложение одобрены, а «-» — отклонены. Чтобы сбросить флаг, выберите в выпадающем списке пустое значение.&lt;br /&gt;
&lt;br /&gt;
Если разрешено администратором, можно также делать «запрошенный флаг», устанавливая флаг в «?» и вводя рядом имя пользователя, от которого желается установка флага.&lt;br /&gt;
&lt;br /&gt;
Установленный флаг показывается на странице бага и странице «edit attachment», рядом с аббревиатурой установившего флаг пользователя. Например: &amp;lt;tt&amp;gt;Иван: review [ + ]&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Аналогично показывается запрошенный флаг, только в скобках показывается имя пользователя, у которого запрошена установка флага, например &amp;lt;tt&amp;gt;Иван: review [ ? ] (Бибичев)&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В нашей инсталляции есть доработка, позволяющая не вводить «запрашиваемых флагами» пользователей руками, а выбирать их из списка пользователей ассоцированных с багом (Reporter, Assignee, QA, CC…).&lt;br /&gt;
&lt;br /&gt;
== Отчеты и графики ==&lt;br /&gt;
В дополнение к стандартному списку багов, багзилла имеет некоторые аналитические возможности — просмотр количества зарегистрированных багов в виде таблиц и графиков, с возможностью задания среза (перспективы) агрегации, + графики показывающие динамическое изменение состояния багов по времени.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты ===&lt;br /&gt;
Отчет представляет собой некий информационный срез о текущем состоянии базы зарегистрированных багов. Можно сделать отчет как обычным, HTML-табличным, так и графическим, с различными видами графиков: линейными, круговыми, гистограммы (line/pie/bar), и переключаться между этими режимами просмотра онлайн.&lt;br /&gt;
&lt;br /&gt;
Очень удобно, что эти отчеты задаются с помощью стандартного интерфейса запросов и компактного интерфейса, определяющего выбор и расположение одного до трех измерений, по которым будет идти агрегация («трехмерная агрегация» — это когда на выходе будет соответственно набор двухмерных таблиц или графиков).&lt;br /&gt;
&lt;br /&gt;
Например, можно выбрать в поисковой форме «все баги в продукте XXX» и затем отрисовать их серьезность относительно каждого компонента продукта, чтобы увидеть, какой компонент имеет наибольшее число серьезных проблем.&lt;br /&gt;
&lt;br /&gt;
Или разработчик может выбрать все «свои» баги, распределив их по «критичности» и своей оценке приоритета, получив следующую таблицу, где каждая ячейка (например, «(major,P2)=&amp;gt; 2») является гиперссылкой на выборку соответствующих багов (то есть, в данном случае, двух багов, у которых, в дополнению к условиям общего запроса «Severity=major», а «Priority=P2»):&lt;br /&gt;
&lt;br /&gt;
             Priority&lt;br /&gt;
 Severity       P2       P3     P4     P5   Total&lt;br /&gt;
  major         2        .       1     .     3&lt;br /&gt;
  normal        8        1       1     .     10&lt;br /&gt;
  minor         .        .       2     2     4&lt;br /&gt;
  trivial       .        1       .     .     1&lt;br /&gt;
  enhancement   .        .       1     1     2&lt;br /&gt;
  Total         10       2       5     3     20&lt;br /&gt;
&lt;br /&gt;
От выборки багов можно снова перейти к таблице и продолжить детализацию далее&lt;br /&gt;
(см. описание «Summary report» в [[#Списки багов]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После того как вы заполнили параметры выборки и вызвали «Generate Report», вы можете переключаться между форматами «HTML», «CSV», «Bar», «Line», «Pie» (Формат «Pie» доступен если вы определили только одну горизонтальную ось). Остальные интерфейсные элементы интуитивно понятны — можно изменять размер картинки, если текст наползает графику или слишком узкие столбцы гистограмм.&lt;br /&gt;
&lt;br /&gt;
В нашей инсталляции, кроме числа багов, можно просматривать агрегированные временные параметры бага:&lt;br /&gt;
* Remaining time;&lt;br /&gt;
* Estimated time.&lt;br /&gt;
&lt;br /&gt;
То есть в вышеприведенном примере, разработчик может оценивать свою загрузку в временных единицах, сколько часов требуется от него на баги различной серьезности (и поможет например, ответить на вопрос — можно ли будет позволить себе отпуск в ближайший месяц или нет):&lt;br /&gt;
&lt;br /&gt;
           Priority&lt;br /&gt;
 Severity       P2      P3      P4      P5      Total&lt;br /&gt;
 major          32      .       .       .       32&lt;br /&gt;
 normal         47.5   184      .       .       231.5&lt;br /&gt;
 minor          .       .       .       192     192&lt;br /&gt;
 trivial        .       5       .       .       5&lt;br /&gt;
 enhancement    .       .       30      3       33&lt;br /&gt;
 Total          79.5   189      30      195     493.5&lt;br /&gt;
&lt;br /&gt;
=== Динамические графики (Charts) ===&lt;br /&gt;
&lt;br /&gt;
Динамические график, чарт (chart) — это просмотр эволюции состояния базы багов по времени.&lt;br /&gt;
&lt;br /&gt;
В данный момент в Bugzilla есть две системы построения таких графиков — «Old Charts» и «New Charts». «Old Charts» — это старая, давно используемая система, она отображает только изменения статусов и решений багов для каждого продукта. Она более не поддерживается и не развивается и будет вскоре исключена из системы. Развиваться будет система «New Charts», которая позволяет отрисовывать все, что можно задать поисковым запросом.&lt;br /&gt;
&lt;br /&gt;
Обе системы требуют, чтобы администратор настроил скрипт собирающий данные.&lt;br /&gt;
&lt;br /&gt;
Каждая отдельная линия в чарте представляется датасетом «data set», которые упорядочены в категории и подкатегории. Автоматически опеределяются категории/подкатегории на основе отношений Продукт/Компонент (для всех продуктов и компонентов), но также можно определять и любые другие категории.&lt;br /&gt;
&lt;br /&gt;
Датасеты могут быть публичными, которых могут видеть все, или приватными, доступными только создателю. Причем сделать датасет публичным могут только администраторы.&lt;br /&gt;
&lt;br /&gt;
Датасеты, даже приватные не должны пересекаться по набору (Категория, Подкатегория, Имя). Поэтому личные датасеты лучше заводить под Категорией со своим именем.&lt;br /&gt;
&lt;br /&gt;
==== Создание Динамических Графиков ====&lt;br /&gt;
&lt;br /&gt;
Для создания чарта, надо для каждого нужного датасета, выбрать его в списке и нажать «Add To List». В списке «List Of Data Sets To Plot» вы можете задать название-заголовок для каждого отображаемого датасета, также можно заказать суммирование подмножества выбранных датасетов (то есть можно просуммировать датасеты представляющие баги в состоянии RESOLVED, VERIFIED и CLOSED для выбранного продукта, тем самым получив полное число исправленных багов). Ошибочно добавленный датасет можно исключить с помощью чекбокса и «Remove». Если вы добавили больше чем один датасет, то в списке автоматически появится линия «Grand Total». Если она не нужна, то ее можно также удалить, как и любую другую линию.&lt;br /&gt;
&lt;br /&gt;
Также можно выбрать отрисовку только в определенном диапазоне дат, и аккумулирование результатов, то есть режим, когда каждая линия представляет собой сумму своего датасета и нижележащей линии, и верхняя линия представляет собой сумму всех датасетов. Лучше попробуйте, это проще, чем пытаться обьяснить.&lt;br /&gt;
&lt;br /&gt;
Для всех выбранных в список датасетов, если вы являетесь его владельцем или администратором можно редактировать его параметры — название, частоту и т. п.&lt;br /&gt;
&lt;br /&gt;
По окончании настроек нажмите «Chart This List» для получения чарта.&lt;br /&gt;
&lt;br /&gt;
==== Создание новых датасетов ====&lt;br /&gt;
&lt;br /&gt;
Для создания нового датасета следуйте ссылке «create a new data set» на странице «Create Chart». Там вы, используя стандартный интерфейс выбора определите нужную выборку, а внизу страницы, определите категорию, подкатегорию и имя для нового датасета.&lt;br /&gt;
&lt;br /&gt;
Если вы обладаете достаточными полномочиями, вы можете сделать датасет общедоступным, и сделать частоту сбора данных меньшей, чем неделя (значение по умолчанию).&lt;br /&gt;
&lt;br /&gt;
== Настройки пользователя ==&lt;br /&gt;
&lt;br /&gt;
После того, как вы войдете в систему, вы можете поменять личные настройки Bugzilla, по ссылке «Edit prefs» внизу страницы.&lt;br /&gt;
Настройки разбиты на три группы-закладки:&lt;br /&gt;
&lt;br /&gt;
=== Account Settings ===&lt;br /&gt;
На этой закладке, вы можете менять основную информацию вашей личной записи — пароль, e-mail, настоящее имя. По соображениям безопасности, при изменении любых параметров на этой странице, вы должны подтвердить изменение вводом своего пароля. Если вы меняете свой email, то по обоим (старому и новому) адресам будет выслано письмо со ссылкой на подтверждение изменения.&lt;br /&gt;
&lt;br /&gt;
=== General Settings ===&lt;br /&gt;
&lt;br /&gt;
Содержит простые настройки общеинтерфейсного плана.&lt;br /&gt;
&lt;br /&gt;
В нашей инсталляции, мы дополнительно включили настройки:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;After changing a bug&amp;quot;: по умолчанию, после правки бага [[Bugzilla]] перенаправляет на следующий баг в списке, однако большинство людей это смущает и они путают этот «следующий» баг с предыдущим. Для борьбы с этим поведением и служит данная опция. Её нужно установить в «Show the updated bug».&lt;br /&gt;
;&amp;quot;Remind me to track worktime for each comment&amp;quot;: Будет дозапрашивать затраченное время, если пользователь из Timetracking Group не заполнил (или поставил «0») в трудозатраты («Hours Worked») при введении комментария.&lt;br /&gt;
;&amp;quot;Remind me to track worktime for new bug&amp;quot;: Будет требовать введения трудозатрат от пользователя из Timetracking Group, при постановке каждого нового бага.&lt;br /&gt;
;&amp;quot;Remind me about flag requests&amp;quot;: При вводе комментария пользователем, на которого поставлены флаги-запросы (флаги в состоянии '?', у которых «requestee» этот пользователь) — будет проверять, и переспрашивать, не желает ли пользователь изменить состояния этих флагов (то есть ответил ли он своим комментарием на эти вопросы).&lt;br /&gt;
=== Email Settings ===&lt;br /&gt;
Эти настройки определяют когда и сколько писем будет вам слать Bugzilla.&lt;br /&gt;
Если вы хотите получать максимальное объем писем — нажмите на кнопку «Enable All Mail». Если не хотите получать почту от Bugzilla вообще — нажмите «Disable All Mail».&lt;br /&gt;
&lt;br /&gt;
''Администратор Bugzillы может также заблокировать получение почты пользователем через добавление имени пользователя в файл &amp;lt;tt&amp;gt;data/nomail&amp;lt;/tt&amp;gt;. Но такие крутые меры применяются в исключительных случаях — например, для аккаунтов уволившихся сотрудников.''&lt;br /&gt;
&lt;br /&gt;
Более детальную настройка описана ниже.&lt;br /&gt;
&lt;br /&gt;
==== «Global options» ====&lt;br /&gt;
Раздел «Global options» содержит (пока?) только настройки извещений по флагам (см. [[#Флаги]]):&lt;br /&gt;
&lt;br /&gt;
; «Email me when someone asks me to set a flag»: известить, если кто-то адресовал к вам «запрошенный флаг».&lt;br /&gt;
; «Email me when someone sets a flag I asked for»: известить, если кто-то ответил на (установил в «+» или «-») запрошенный вами флаг.&lt;br /&gt;
&lt;br /&gt;
====  «Field/recipient specific options» ====&lt;br /&gt;
&lt;br /&gt;
Если вы хотите получать почту, но не во всех случаях, то используйте таблицу «Field/recipient specific options». Каждая запись в таблице соответствует событию бага (новый комментарий, изменение приоритета и т. п.). Колонки в таблице соответствуют вашей связи с багом:&lt;br /&gt;
&lt;br /&gt;
;Reporter: Вы являетесь инициатором бага, то есть вы указаны в поле бага «Reporter».&lt;br /&gt;
&lt;br /&gt;
;Assignee: Вы являетесь ответственным за баг, то есть вы указаны в поле бага «Assigned To».&lt;br /&gt;
&lt;br /&gt;
;QA Contact: Вы являетесь контроллером бага, то есть вы указаны в поле бага «QA Contact».&lt;br /&gt;
&lt;br /&gt;
;CC: Вы указаны в списке «CC» бага.&lt;br /&gt;
&lt;br /&gt;
;Voter: Вы голосовали за баг. Ваш аккаунт будет показан по ссылке «Show votes for this bug» из окна бага.&lt;br /&gt;
&lt;br /&gt;
''Некоторые из описанных колонок могут отсутствовать, это определяется конфигурацией конкретной инсталляции''.&lt;br /&gt;
&lt;br /&gt;
Определите, в каких случаях вы хотите получать письма от Bugzilla, и в каких отношениях с багом должны вы при этом находиться и поставьте/оставьте галочки только в соответствующих клетках.&lt;br /&gt;
 &lt;br /&gt;
Почту также можно фильтровать по различным заголовкам X-Bugzilla-ЧтоНибудь, присутствующих во всех письмах от Bugzilla. См. [[#Дополнительные email заголовки]].&lt;br /&gt;
&lt;br /&gt;
По умолчанию, Bugzilla рассылает почту вне зависимости от того, кто был автором измения бага, и вы будете получать почту, даже если вы будете единственным лицом, связанным с багом. Если вы не хотите получать письма после своих собственных изменений, поставьте галочки в строке [ «but not when» ] «The change was made by me».&lt;br /&gt;
&lt;br /&gt;
{{note}} На самом деле, если использовать более-менее вменяемый почтовый клиент, лучше разрешить получать почту и комментарии при своих изменениях, добавив правило «помечать письма содержащие 'xxx@company.com changed:' как прочтенные» (Вместо «xxx@company.com» разумеется, подставьте ваш логин). Это даст вам возможность, установив локальный поисковик и проиндексировав почту, удобного полнотекстового поиска по всем комментариям «связанных» с вами багов.&lt;br /&gt;
&lt;br /&gt;
==== «User Watching» ====&lt;br /&gt;
&lt;br /&gt;
Если вы введете список (разделенный запятыми) пользовательских аккаунтов (обычно совпадающих с email-адресами) в «Users to watch», то вы будете получать копию всех писем рассылаемых пользователю Bugzillой (с учетом настроек безопасности). Если вы не видите это поле в настройках — значит была Bugzilla установлена без этой возможности, и для ее активации нужно обратиться к системному администратору. В этом же разделе, в информационном поле «Users watching you» перечислены пользователи «следящие» за вашим потоком извещений от Bugzilla.&lt;br /&gt;
&lt;br /&gt;
В нашей инсталляции, можно «подписываться» на почту других пользователей&lt;br /&gt;
и «подписывать» (а также «отписывать») других пользователей на себя.&lt;br /&gt;
&lt;br /&gt;
{{caution}} Не злоупотребляйте этой возможностью!&lt;br /&gt;
&lt;br /&gt;
=== Permissions ===&lt;br /&gt;
Это чисто информационная страница-закладка, описывающая все права пользователя в текущей инсталляции — какие группы продуктов доступны, может ли пользователь редактировать баги и осуществлять административные функции.&lt;br /&gt;
&lt;br /&gt;
== Advanced ==&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные email заголовки ===&lt;br /&gt;
&lt;br /&gt;
Bugzilla добавляет некоторые заголовки во все письма. Заголовки — это не subject, а внутренние заголовки письма, увидеть которые обычно можно, выбрав в почтовой программе пункт меню «View Message Headers» или подобный.&lt;br /&gt;
&lt;br /&gt;
В большинстве почтовых клиентов эти заголовки также можно использовать для фильтрации почты.&lt;br /&gt;
&lt;br /&gt;
Список заголовков:&lt;br /&gt;
&lt;br /&gt;
;X-Bugzilla-Reason: отношение получателя к упомянутому багу: &amp;lt;tt&amp;gt;AssignedTo&amp;lt;/tt&amp;gt; (ответственный), &amp;lt;tt&amp;gt;Reporter&amp;lt;/tt&amp;gt; (создатель бага), &amp;lt;tt&amp;gt;QAContact&amp;lt;/tt&amp;gt; (QA), &amp;lt;tt&amp;gt;CC&amp;lt;/tt&amp;gt; (в списке копий), &amp;lt;tt&amp;gt;Voter&amp;lt;/tt&amp;gt; (голосовал за баг).&lt;br /&gt;
;X-Bugzilla-Watch-Reason: то же, но каждое значение означает, что получатель наблюдает за пользователем, имеющим соответствующее отношение к упомянутому багу. Плюс есть ещё одно значение — &amp;lt;tt&amp;gt;GlobalWatcher&amp;lt;/tt&amp;gt;, означающее, что пользователь получает всю почту по всем багам.&lt;br /&gt;
;X-Bugzilla-Type: &amp;lt;tt&amp;gt;new&amp;lt;/tt&amp;gt; (новый баг), &amp;lt;tt&amp;gt;changed&amp;lt;/tt&amp;gt; (изменение) или &amp;lt;tt&amp;gt;request&amp;lt;/tt&amp;gt; (изменение флагов).&lt;br /&gt;
;X-Bugzilla-Who: логин (то есть, e-mail адрес) изменившего баг.&lt;br /&gt;
;X-Bugzilla-Changed-Fields: список изменённых полей упомянутого бага.&lt;br /&gt;
;X-Bugzilla-Added-Comments: количество добавленных комментариев (0 или более).&lt;br /&gt;
&lt;br /&gt;
Также есть набор заголовков, имеющих значением значение соответствующего атрибута бага (какого — несложно понять по названию):&lt;br /&gt;
&lt;br /&gt;
* X-Bugzilla-Classification&lt;br /&gt;
* X-Bugzilla-Product&lt;br /&gt;
* X-Bugzilla-Component&lt;br /&gt;
* X-Bugzilla-Status&lt;br /&gt;
* X-Bugzilla-Priority&lt;br /&gt;
* X-Bugzilla-Severity&lt;br /&gt;
* X-Bugzilla-Assigned-To&lt;br /&gt;
* X-Bugzilla-QA-Contact&lt;br /&gt;
* X-Bugzilla-Target-Milestone&lt;br /&gt;
* X-Bugzilla-Keywords&lt;br /&gt;
&lt;br /&gt;
==== Пример ====&lt;br /&gt;
&lt;br /&gt;
'''Задача''': Фильтровать почту по багам, содержащую только изменения связанных багов.&lt;br /&gt;
&lt;br /&gt;
'''Решение''': Заголовок X-Bugzilla-Added-Comments равен 0 и заголовок X-Bugzilla-Changed-Fields пуст.&lt;br /&gt;
&lt;br /&gt;
=== Просмотр Патчей ===&lt;br /&gt;
&lt;br /&gt;
Важно: под патчем или исправлением, здесь имеется в виду именно патч, то есть файл в специальном стандартном текстовом формате (patch) представляющий собой инструкции для специальной программы-патчера по проносу изменений. А не какие-то тексты программ или инструкции для человека.&lt;br /&gt;
&lt;br /&gt;
Просмотр и ревизия исправлений в Bugzilla часто затруднена из-за недостатка контекста, несоответствующих форматов и других сложностей. «Patch Viewer» это дополнение Bugzilla, предназначенное для улучшения контекста, интеграции с Bonsai, LXR, [[CVS]].&lt;br /&gt;
&lt;br /&gt;
«Patch Viewer» позволяет:&lt;br /&gt;
&lt;br /&gt;
* Просмотр исправлений с раскраской, в режиме «side-by-side», а не интерпретация сырого содержимого исправления;&lt;br /&gt;
* Просмотр разницы между двумя исправлениями;&lt;br /&gt;
* Получение контекстной информации об исправлении;&lt;br /&gt;
* Удобный просмотр исправления, с возможностью скрывать/раскрывать разделы;&lt;br /&gt;
* Ссылки на разделы исправления для обсуждения или ревизии;&lt;br /&gt;
* Ссылки на Bonsai или LXR для определения ответственности;&lt;br /&gt;
* Создает исправления в унифицированном «diff»-формате.&lt;br /&gt;
&lt;br /&gt;
В нашей инсталляции, мы не используем PatchViewer, так как есть гораздо более удобная система просмотра версионных репозиториев [[ViewVC]] (см. [[#Интеграция с системами контроля версий]]).&lt;br /&gt;
&lt;br /&gt;
==== Просмотр в Patch Viewer ====&lt;br /&gt;
&lt;br /&gt;
Самый удобный способ для просмотра патчей вызывается по ссылке «Diff» в списке «Attachments»,&lt;br /&gt;
либо ссылкой «View Attachment As Diff» на странице «Edit Attachment».&lt;br /&gt;
&lt;br /&gt;
==== Изучение разницы между двумя исправлениями ====&lt;br /&gt;
&lt;br /&gt;
Для просмотра разницы между двумя патчами, надо сначала в Patch Viewer войти в просмотр нового патча, затем выбрать в выпадающем списке нужный старый патч, и нажать на кнопку «Diff».&lt;br /&gt;
&lt;br /&gt;
==== Получение большего контекста ====&lt;br /&gt;
&lt;br /&gt;
Если патч был получен с помощью «cvs diff», то можно при просмотре больший контекст (больше строк кода окружающих изменение или добавление). Для этого можно ввести нужное число контекстных строк в текстовое поле над Patch Viewer («Patch / File / [textbox]») и нажать «Enter».&lt;br /&gt;
Дополнительно по ссылке «File» будут показаны изменения в контексте всего файла.&lt;br /&gt;
&lt;br /&gt;
==== Схлопывание и раскрытие разделов Исправления ====&lt;br /&gt;
&lt;br /&gt;
Можно просматривать исправления в разбивке по секциям-файлам — интерфейс понятен, нужно нажимать на ссылки «(+)» и «(-)» в каждом разделе или «Collapse All», «Expand All» (сверху страницы).&lt;br /&gt;
&lt;br /&gt;
==== Ссылки на разделы Исправления ====&lt;br /&gt;
&lt;br /&gt;
==== Ссылки на Bonsai ====&lt;br /&gt;
Чтобы перейти для детального изучения кода в [[Bonsai]], надо проследовать по ссылке «Lines XX-YY» в заголовке раздела. Это будет работать даже если патч был к старой версии файла, так как [[Bonsai]] хранит все версии файлов.&lt;br /&gt;
&lt;br /&gt;
{{note}} [[Bonsai]] признан устаревшим и не используется в нашей компании. Ему на замену пришла [[ViewVC]].&lt;br /&gt;
&lt;br /&gt;
==== Создание стандартного Diff ====&lt;br /&gt;
&lt;br /&gt;
Патч может быть преобразован в «unified diff format» путем вызова ссылки «Raw Unified».&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mozilla-russia.org/products/bugzilla/ «Bugzilla в России»];&lt;br /&gt;
* [[RuPedia:Bugzilla|Bugzilla в Википедии]];&lt;br /&gt;
* [http://dmoz.org/Computers/Software/Configuration_Management/Bug_Tracking/Free/ Bug Tracking системы (бесплатные)].&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программирование]]&lt;br /&gt;
[[Категория:Тестирование программного обеспечения]]&lt;br /&gt;
[[Категория:Bugzilla]]&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;br /&gt;
{{replicate-from-custiswiki-to-4intranet}}&lt;br /&gt;
{{replicate-from-custiswiki-to-smwiki}}&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0:%D0%9B%D0%B5%D0%BD%D1%82%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%B4%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=42816</id>
		<title>Справка:Ленточная диаграмма</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0:%D0%9B%D0%B5%D0%BD%D1%82%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%B4%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0&amp;diff=42816"/>
				<updated>2013-09-20T14:47:27Z</updated>
		
		<summary type="html">&lt;p&gt;VitaliyFilippov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Ленточная диаграмма''' (''horizontal bar chart'') &lt;br /&gt;
позволяет отобразить множество дискретных данных вида (категория, число) в виде прямоугольников, ширина которых одинакова, а длина каждого прямоугольника пропорциональна заданному значению для этой категории.&lt;br /&gt;
Например, таким образом удобно показывать дискретные распределения.&lt;br /&gt;
В [[{{SITENAME}}]] можно легко включать ленточные диаграммы, используя тэг «hbarchart»:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 «Готовы ли Вы приобрести мобильный телефон отечественной сборки?»&lt;br /&gt;
 &amp;lt;hbarchart&amp;gt;&lt;br /&gt;
 Нет 4873&lt;br /&gt;
 Да 1970&lt;br /&gt;
 затрудняюсь ответить 1286&lt;br /&gt;
 это зависит от того, где его будут собирать 688&lt;br /&gt;
 &amp;lt;/hbarchart&amp;gt;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
«Готовы ли Вы приобрести мобильный телефон отечественной сборки?»&lt;br /&gt;
&amp;lt;hbarchart&amp;gt;&lt;br /&gt;
Нет 4873&lt;br /&gt;
Да 1971&lt;br /&gt;
затрудняюсь ответить 1287&lt;br /&gt;
это зависит от того, где его будут собирать 681&lt;br /&gt;
&amp;lt;/hbarchart&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогично, можно использовать вертикальный график — '''столбиковую диаграмму''' (''vertical bar chart'').&lt;br /&gt;
Для этого используется тег «vbarchart»:&lt;br /&gt;
&lt;br /&gt;
«Количество новорожденных в роддоме города N.»&lt;br /&gt;
&amp;lt;vbarchart&amp;gt;&lt;br /&gt;
2003 1523&lt;br /&gt;
2004 1985&lt;br /&gt;
2005 2123&lt;br /&gt;
2006 2345&lt;br /&gt;
2007 9876&lt;br /&gt;
&amp;lt;/vbarchart&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Справка]]&lt;br /&gt;
{{replicate-from-custiswiki-to-smwiki}}&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	</feed>