<?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=Trolzen</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=Trolzen"/>
		<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/Trolzen"/>
		<updated>2026-04-28T14:42:18Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>https://lib.custis.ru/index.php?title=MediaWiki_%E2%80%94_%D0%A1%D0%B5%D1%80%D0%B5%D0%B1%D1%80%D1%8F%D0%BD%D0%B0%D1%8F_%D0%BF%D1%83%D0%BB%D1%8F_%D0%B8%D0%BB%D0%B8_%D1%88%D0%B2%D0%B5%D0%B9%D1%86%D0%B0%D1%80%D1%81%D0%BA%D0%B8%D0%B9_%D0%BD%D0%BE%D0%B6%3F&amp;diff=15956</id>
		<title>MediaWiki — Серебряная пуля или швейцарский нож?</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=MediaWiki_%E2%80%94_%D0%A1%D0%B5%D1%80%D0%B5%D0%B1%D1%80%D1%8F%D0%BD%D0%B0%D1%8F_%D0%BF%D1%83%D0%BB%D1%8F_%D0%B8%D0%BB%D0%B8_%D1%88%D0%B2%D0%B5%D0%B9%D1%86%D0%B0%D1%80%D1%81%D0%BA%D0%B8%D0%B9_%D0%BD%D0%BE%D0%B6%3F&amp;diff=15956"/>
				<updated>2010-04-06T02:25:21Z</updated>
		
		<summary type="html">&lt;p&gt;Trolzen: /* MediaWiki */ повторно: орфография/пунктуация&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;[[:Категория:Стас Фомин (Статьи)|Стас Фомин]]: Заместитель директора по информационным технологиям / stas@custis.ru&lt;br /&gt;
&lt;br /&gt;
* «Mediawiki: Серебряная пуля или швейцарский нож?»&amp;lt;ref&amp;gt;Статья написана в июле 2008, к конференции SECR-2008, опубликована с сокращениями в [http://www.osp.ru/os/2009/03/8162918 «Открытые системы», апрель 2009]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Аннотация ==&lt;br /&gt;
&lt;br /&gt;
В последние годы наблюдается бурный рост использования ''Wiki''-систем, причем не только для агрегации знаний открытыми сообществами, для чего они были предназначены изначально, но и для процессов документирования и управления знаниями внутри компаний-разработчиков ПО. При этом, вики-системы зачастую заменяют «классические» системы документооборота и технологии генерации документации. Здесь мы выделим и проанализируем причины, по которым это происходит, и обозначим границы применимости — покажем минусы вики-систем, из-за которых они так и не стали «серебряной пулей», и выявим области, где использование вики-систем не только модно, но и действительно эффективно.&lt;br /&gt;
&lt;br /&gt;
Далее, мы перейдем к вопросу выбора вики-системы для задачи построения внутрифирменной базы знаний, ведения документации и коммуникации с потребителями. На наш взгляд, в большинстве случаев оптимальным выбором будет MediaWiki. У этой вики-системы огромное количество пользователей и разработчиков, накоплен опыт использования и объем текстов. Открытая архитектура системы позволяет легко расширять возможности инструментами-расширениями и «срезать» неудобные углы в использовании.&lt;br /&gt;
&lt;br /&gt;
И наконец, мы рассмотрим наиболее острые проблемы, встающие перед пользователями вики-систем и предложим свои решения.&lt;br /&gt;
&lt;br /&gt;
Ключевые слова: документирование, коммуникация, управление знаниями, вики-системы, MediaWiki.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Mediawiki: silver bullet or swiss-army knife?&lt;br /&gt;
&lt;br /&gt;
General-purpose Wiki systems are successfully used in last years for documenting and knowledge management in software companies. These systems were designed to aggregate knowledge in open communities. But now Wiki systems often replace «stereotype» document management systems and software documenting technologies.&lt;br /&gt;
&lt;br /&gt;
We will discuss some reasons for this situation and point out some problems that limit application scope of Wikis. Wiki is not a «silver bullet» but we can outline application domains where Wiki may be effectively used. Then, we will consider how to choose Wiki system in order to build an internal corporate knowledge base, keep and maintain documentation and communicate with customers.&lt;br /&gt;
&lt;br /&gt;
MediaWiki is an optimal choice for this purpose in our opinion, since it has a vast community of users and developers and a wealth of experience. Open architecture makes it possible to extend easily any functionality of MediaWiki and to «downsize» possible inconveniencies.&lt;br /&gt;
&lt;br /&gt;
Finally, we will offer solutions for the most acute problems of «corporate wikiing».&lt;br /&gt;
&lt;br /&gt;
'''Keywords''''''': authoring, documenting, knowledge management, Wiki systems, 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;
&lt;br /&gt;
=== Документирование и взаимодействие ===&lt;br /&gt;
&lt;br /&gt;
Ранее было принято, что технической документацией занимается небольшая группа технических экспертов (технических писателей), владеющих технологиями верстки, публикации и групповой работы. &lt;br /&gt;
&lt;br /&gt;
http://netanyachess.com/dilbertru.20100405.png&lt;br /&gt;
&lt;br /&gt;
Сейчас же, с ростом использования Agile-практик разработки, стало критически важно привлекать к работам по постановке задач или рецензированию существующей документации максимально широкий круг специалистов, как внутри компании (аналитиков, тестировщиков, разработчиков), так и представителей заказчика. Качество верстки, полиграфического оформления и литературного стиля уже не так важно, как актуальность, своевременность, полнота учета интересов всех заинтересованных сторон и верифицированность различными специалистами.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
  &lt;br /&gt;
     rankdir=TB; node [style=filled, fillcolor=&amp;quot;lavender&amp;quot;, shape=&amp;quot;rect&amp;quot; fontname=&amp;quot;Segoe Print&amp;quot;]&lt;br /&gt;
     &amp;quot;Совместная работа&amp;quot;&lt;br /&gt;
     &amp;quot;Совместная работа&amp;quot;-&amp;gt;&amp;quot;«IT»-команды&amp;quot;&lt;br /&gt;
     &amp;quot;Совместная работа&amp;quot;-&amp;gt;&amp;quot;C заказчиком или \n другими «не IT»-участниками&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
    &amp;quot;«IT»-команды&amp;quot;-&amp;gt;&amp;quot;Эффективность&amp;quot;&lt;br /&gt;
      &amp;quot;Эффективность&amp;quot; [fillcolor=darkolivegreen1]&lt;br /&gt;
  &lt;br /&gt;
    &amp;quot;C заказчиком или \n другими «не IT»-участниками&amp;quot;-&amp;gt;&amp;quot;Простота и доступность&amp;quot;&lt;br /&gt;
      &amp;quot;Простота и доступность&amp;quot; [fillcolor=cadetblue2]&lt;br /&gt;
  &lt;br /&gt;
    node[shape=&amp;quot;egg&amp;quot;]&lt;br /&gt;
    &amp;quot;Эффективность&amp;quot;-&amp;gt;&amp;quot;Параллелизм&amp;quot;  &lt;br /&gt;
    &amp;quot;Эффективность&amp;quot;-&amp;gt;&amp;quot;Скорость&amp;quot; &lt;br /&gt;
    &amp;quot;Эффективность&amp;quot;-&amp;gt;&amp;quot;Гибкость&amp;quot; &lt;br /&gt;
  &lt;br /&gt;
    edge [constraint=0 style=&amp;quot;dashed&amp;quot;]&lt;br /&gt;
    &amp;quot;C заказчиком или \n другими «не IT»-участниками&amp;quot;-&amp;gt;&amp;quot;Эффективность&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
    edge [arrowtail=&amp;quot;vee&amp;quot; arrowhead=&amp;quot;vee&amp;quot; color=&amp;quot;red&amp;quot; constraint=0 label=&amp;quot;несовместимость&amp;quot;]&lt;br /&gt;
     &amp;quot;Эффективность&amp;quot;-&amp;gt;&amp;quot;Простота и доступность&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
То есть важно, чтобы используемая технология обеспечивала возможность совместной работы, но для различных групп участников важными являются разные и конфликтующие между собой аспекты. Так, например, для основных или стержневых производителей документации, обозначенных на рисунке как «IT-команда», ключевым является фактор ''эффективности'', выражающийся в следующих аспектах:&lt;br /&gt;
&lt;br /&gt;
;Параллелизм: возможность асинхронной работы с минимумом блокировок и других узких мест, что дает возможность масштабировать команду. Правильными практиками для этого аспекта являются использование систем контроля версий с ''неблокирующей'' моделью «Копирование-Изменение-Слияние», допускающей параллельную правку одного артефакта несколькими участниками. Отрицательными примерами могут служить схемы «согласование по email», «файлы на файл-сервере с блокировкой», «Word-документ на всех».&lt;br /&gt;
&lt;br /&gt;
;Скорость: аспект технологии, ответственный за минимизацию затрат (человеко-часов, килокалорий, меганейронов) на условную единицу документации. Позитивные примеры — «написал несколько коротких строчек — диаграммы сами нарисовались, текст сам красиво отформатировался». Отрицательные — «выравнивать мышью маловажные диаграммы», «мучительно и монотонно переформатировать текст».&lt;br /&gt;
;Гибкость: цена внесения изменений должна быть ограничена и не более чем пропорциональна объему изменений. Хорошо, когда используются различные составные документы, шаблоны, автоматическое построение документации по программному коду (''literate programming'') или по схеме базы данных. Плохо, когда изменения надо проносить вручную и во множество различных документов.&lt;br /&gt;
&lt;br /&gt;
С другой стороны, кроме «стержневых» участников процесса, обеспечивающих основной объем документации, не менее важна роль и остальных — представителей заказчика, бизнес-аналитиков, разово привлекаемых экспертов-рецензентов. ''Можно привести смелую метафору с «вытягиванием репки» — несмотря на то, что основную тяговую силу составляет стержневая команда «деда и бабки», без участия «кошки и жучки» уже не обойтись, а минутное участие «мышки» может спасти проект от тупика.''  А для них в первую очередь важна не эффективность построения документации, а простота ее правки-рецензирования и доступность для чтения и изменений. ''Простота'' означает крутость «кривой обучения» — то есть включиться в работу с допустимым качеством можно практически «не приходя в сознание», посмотрев пару примеров, и ориентируясь на интуицию. Как пример, можно сравнить программирование на Basic против программирования ядра операционных систем, или использование текстовых процессоров в сравнении с системами верстки типа TeX.&lt;br /&gt;
&lt;br /&gt;
''Доступность'' же означает, что к процессу можно «подключиться» откуда угодно, нет никаких ограничений и требований к рабочему месту, не требуется сложных инсталляций набора ПО. В идеале должна использоваться модель «тонкого» клиента, под которым в данный момент обычно подразумевают браузер.&lt;br /&gt;
&lt;br /&gt;
Как обычно, аспекты «эффективность» и «простота и доступность» плохо между собой совместимы, и решения выигрышные для одной стороны, обычно совершенно недопустимы для другой. Но компромисс необходим — иначе одна из сторон («core» или «не-core») неизбежно выйдет из игры.&lt;br /&gt;
&lt;br /&gt;
=== Knowledge management ===&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;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
  &lt;br /&gt;
      rankdir=TB;&lt;br /&gt;
      node [style=filled, fillcolor=&amp;quot;lavender&amp;quot;, shape=&amp;quot;rect&amp;quot; peripheries=1 fontname=&amp;quot;PF Libera Pro&amp;quot;];&lt;br /&gt;
      &amp;quot;KnowledgeBase&amp;quot;-&amp;gt;&amp;quot;Фиксация знаний&amp;quot;&lt;br /&gt;
      &amp;quot;KnowledgeBase&amp;quot;-&amp;gt;&amp;quot;Рефакторинг \n знаний&amp;quot;&lt;br /&gt;
      &amp;quot;KnowledgeBase&amp;quot;-&amp;gt;&amp;quot;Извлечение \n знаний&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;Фиксация знаний&amp;quot;-&amp;gt;&amp;quot;Легкость дополнений&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;Эффективность&amp;quot; [style=filled, fillcolor=&amp;quot;palegreen1&amp;quot;, shape=&amp;quot;ellipse&amp;quot; peripheries=3]&lt;br /&gt;
  &amp;quot;Рефакторинг \n знаний&amp;quot;-&amp;gt;&amp;quot;Ссылки \n Рубрики \n категории \n ...&amp;quot;&lt;br /&gt;
  &amp;quot;Рефакторинг \n знаний&amp;quot;-&amp;gt;&amp;quot;Эффективность&amp;quot;&lt;br /&gt;
  &amp;quot;Рефакторинг \n знаний&amp;quot;-&amp;gt;&amp;quot;Актуальность&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;Актуальность&amp;quot;-&amp;gt;&amp;quot;Простота и доступность&amp;quot;&lt;br /&gt;
  &amp;quot;Извлечение \n знаний&amp;quot;-&amp;gt;&amp;quot;Полнотекстовый поиск&amp;quot;&lt;br /&gt;
  &amp;quot;Извлечение \n знаний&amp;quot;-&amp;gt;&amp;quot;Быстрая \n навигация&amp;quot;&lt;br /&gt;
  &amp;quot;Быстрая \n навигация&amp;quot;-&amp;gt;&amp;quot;Ссылки \n Рубрики \n категории \n ...&amp;quot;&lt;br /&gt;
  node [fillcolor=yellow] &lt;br /&gt;
&lt;br /&gt;
  &amp;quot;Простота и доступность&amp;quot; [style=filled, fillcolor=&amp;quot;palegreen1&amp;quot;, shape=&amp;quot;ellipse&amp;quot; peripheries=3]&lt;br /&gt;
  &amp;quot;Легкость дополнений&amp;quot;-&amp;gt;&amp;quot;Простота и доступность&amp;quot;&lt;br /&gt;
  &amp;quot;Легкость дополнений&amp;quot;-&amp;gt;&amp;quot;Эффективность&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Оказывается, первые два пункта нуждаются в том же, что рассмотрено в предыдущем разделе, ибо с одной стороны требуется «простота и доступность» технологии для широкой аудитории — от  программистов и системных администраторов, до HR и административно-хозяйственных служб, то есть включая персонал, не сильно «разбирающийся в IT». С другой — эффективность, как добавления знаний, так и рефакторинга, причем с учетом совместной работы.&lt;br /&gt;
&lt;br /&gt;
И наоборот,  третий пункт — ''эффективное извлечение знаний'', теперь востребован потребителем и от обычной документации. Ушли в прошлое времена, когда  пользователь ПО должен был обязательно проштудировать увесистую стопку томов бумажной документации. Сейчас упор идет на  возможность фрагментарного ознакомления, для чего тоже нужно предоставить все современные технологии — быструю навигацию по различным классификаторам, использование гипертекстовых переходов по семантическим связям, и эффективный полнотекстовый поиск с учетом морфологии.&lt;br /&gt;
&lt;br /&gt;
Таким образом, видно, что задачи ''Knowledge management'''а и документирования во взаимодействии с заказчиком весьма схожи, и для них  разумно ожидать единого решения. Отложив вопрос, а существует ли такая «серебряная пуля», попробуем понять, каких свойств можно ждать от такого решения.&lt;br /&gt;
&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;
  &lt;br /&gt;
     rankdir=TB; node [style=filled, fillcolor=&amp;quot;lavender&amp;quot;, shape=&amp;quot;rect&amp;quot; fontname=&amp;quot;PF Libera Pro Liberissima&amp;quot;];&lt;br /&gt;
     &amp;quot;Формат документа&amp;quot;-&amp;gt;&amp;quot;Бинарный&amp;quot;&lt;br /&gt;
     &amp;quot;Формат документа&amp;quot;-&amp;gt;&amp;quot;Текстовый&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
   binarybad [label=&amp;quot;Совместная работа \n без блокировок \n чрезвычайно затруднена&amp;quot; style=filled shape=egg]&lt;br /&gt;
   textgood [label=&amp;quot;Совместная работа \n без блокировок \n «Изменение-Слияние»&amp;quot; style=filled shape=egg]&lt;br /&gt;
  &amp;quot;Бинарный&amp;quot;-&amp;gt;binarybad &lt;br /&gt;
  &amp;quot;Текстовый&amp;quot;-&amp;gt;textgood &lt;br /&gt;
  &lt;br /&gt;
  textgood-&amp;gt;&amp;quot;Автоматические \n слияния&amp;quot;&lt;br /&gt;
  textgood-&amp;gt;&amp;quot;Построчные \n различия&amp;quot;&lt;br /&gt;
  textgood-&amp;gt;&amp;quot;Эффективное \n хранение версий&amp;quot;&lt;br /&gt;
  node [fillcolor=yellow] &lt;br /&gt;
&lt;br /&gt;
   binarybad [fillcolor=&amp;quot;lightpink&amp;quot; ]&lt;br /&gt;
   textgood [fillcolor=&amp;quot;palegreen&amp;quot;]&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;
Действительно, только для плоского, разбитого на ограниченные строки текста существуют эффективные алгоритмы вычисления различий и автоматического слияния различных версий. Этот момент уже известен с появления в 1970х первых систем управления версиями. И в эффективном документировании давно было принято использовать различные ''языки разметки'', хранить документацию в текстовом виде под системой контроля версий, а бинарные форматы использовать только в неизбежных случаях, для редко меняющихся артефактов, например фотографий или растровых иллюстраций.&lt;br /&gt;
&lt;br /&gt;
=== Языки разметки ===&lt;br /&gt;
&lt;br /&gt;
Выбрав текстовый формат документа, какой же язык разметки выбрать? Мы возьмем на себя смелость предложить некоторую классификацию существующих языков (''markup languages'') разметки документов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
  digraph G{ &lt;br /&gt;
    &lt;br /&gt;
     rankdir=LR; node [fontname=&amp;quot;sans-serif&amp;quot; style=filled, fillcolor=&amp;quot;lavender&amp;quot;, shape=&amp;quot;rect&amp;quot; fontname=Festus];&lt;br /&gt;
     edge [color=blue4]&lt;br /&gt;
     &amp;quot;Для Машины&amp;quot;&lt;br /&gt;
     &amp;quot;Для Человека&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
     &amp;quot;Для Машины&amp;quot;  -&amp;gt;SGML&lt;br /&gt;
     &amp;quot;Для Машины&amp;quot;  -&amp;gt;&amp;quot;Препроцессоры&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
   &amp;quot;Препроцессоры&amp;quot;-&amp;gt;TeX&lt;br /&gt;
   &amp;quot;Препроцессоры&amp;quot;-&amp;gt;M4&lt;br /&gt;
  &lt;br /&gt;
   TeX-&amp;gt;LateX&lt;br /&gt;
  &lt;br /&gt;
   SGML-&amp;gt;Docbook&lt;br /&gt;
   SGML-&amp;gt;HTML&lt;br /&gt;
   SGML-&amp;gt;XML&lt;br /&gt;
  node [fillcolor=yellow] &lt;br /&gt;
&lt;br /&gt;
   XML-&amp;gt;Семантический&lt;br /&gt;
   XML-&amp;gt;&amp;quot;Технический&amp;quot;&lt;br /&gt;
   Семантический-&amp;gt;XHTML&lt;br /&gt;
   Семантический-&amp;gt;&amp;quot;XML Docbook&amp;quot;&lt;br /&gt;
   Семантический-&amp;gt;&amp;quot;DITA&amp;quot;&lt;br /&gt;
   Семантический-&amp;gt;&amp;quot;MathML&amp;quot;&lt;br /&gt;
   &amp;quot;Технический&amp;quot;-&amp;gt;&amp;quot;MS XML (OOXML,ODF)&amp;quot;&lt;br /&gt;
   &amp;quot;Технический&amp;quot;-&amp;gt;SVG;&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
  digraph G{ &lt;br /&gt;
    &lt;br /&gt;
     rankdir=LR; node [fontname=&amp;quot;sans-serif&amp;quot; style=filled, fillcolor=&amp;quot;lavender&amp;quot;, shape=&amp;quot;rect&amp;quot; fontname=Festus];&lt;br /&gt;
     edge [color=blue4]&lt;br /&gt;
     &amp;quot;Для Машины&amp;quot;&lt;br /&gt;
     &amp;quot;Для Человека&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  node [fillcolor=cornsilk shape=none]&lt;br /&gt;
  &amp;quot;Для Человека&amp;quot;-&amp;gt;&amp;quot;Plain ASCII&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;Plain ASCII&amp;quot;-&amp;gt;&amp;quot;Wiki-markups&amp;quot;&lt;br /&gt;
  &amp;quot;Plain ASCII&amp;quot;-&amp;gt;&amp;quot;BBCode&amp;quot;&lt;br /&gt;
  &amp;quot;Plain ASCII&amp;quot;-&amp;gt;&amp;quot;Комментарии в коде&amp;quot;&lt;br /&gt;
  &amp;quot;Plain ASCII&amp;quot;-&amp;gt;&amp;quot;Textile&amp;quot;&lt;br /&gt;
  &amp;quot;Plain ASCII&amp;quot;-&amp;gt;&amp;quot;Markdown&amp;quot;&lt;br /&gt;
  &amp;quot;Plain ASCII&amp;quot;-&amp;gt;&amp;quot;reStructuredText&amp;quot;&lt;br /&gt;
  &amp;quot;Plain ASCII&amp;quot;-&amp;gt;&amp;quot;txt2tags&amp;quot;&lt;br /&gt;
  &amp;quot;Wiki-markups&amp;quot; [fillcolor=&amp;quot;chartreuse&amp;quot;]&lt;br /&gt;
  node [fillcolor=yellow] &lt;br /&gt;
&lt;br /&gt;
  &amp;quot;Комментарии в коде&amp;quot;-&amp;gt;docstrings&lt;br /&gt;
  &amp;quot;Комментарии в коде&amp;quot;-&amp;gt;&amp;quot;Plain Old Documentation&amp;quot;&lt;br /&gt;
  &amp;quot;Комментарии в коде&amp;quot;-&amp;gt;&amp;quot;Ruby Document format&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Не вдаваясь в историю и тонкости, отметим, что ветви языков разметки, основанных как на использовании препроцессора (&amp;lt;tt&amp;gt;TeX&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;LaTeX&amp;lt;/tt&amp;gt;), так и на использовании жестких &amp;lt;tt&amp;gt;SGML&amp;lt;/tt&amp;gt;-спецификаций (&amp;lt;tt&amp;gt;HTML&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;DocBook&amp;lt;/tt&amp;gt;) обладают особенностями, делающими их неподходящими для решения задачи «простота для не-гиков». Элементы разметки, будь то теги или макросы, занимают много места, разметка документа ориентируется не на удобство автора, а на удобство машинного представления, для обработки препроцессором (TeX/LaTeX) или стандартизированным компилятором (&amp;lt;tt&amp;gt;SGML&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;XML&amp;lt;/tt&amp;gt;/…). В результате, надо быть готовым к трудноуловимым и даже необъяснимым ошибкам при работе с TeX, или держать в голове иерархию вложенности сотен тегов при использовании структурной SGML/XML-разметки (&amp;lt;tt&amp;gt;DocBook&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;XHTML&amp;lt;/tt&amp;gt;). Конечно, сильная команда легко сможет обуздать любое из этих средств, и сможет эффективно порождать документацию на любом языке разметки, используя системы последовательных преобразований (''tool chains''), управляемые системой сборки (&amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Ant&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Scons&amp;lt;/tt&amp;gt;). При этом можно достичь и гибкости, за счет использования препроцессирования, шаблонов и составных документов, и параллелизма, используя систему контроля версий (&amp;lt;tt&amp;gt;SVN&amp;lt;/tt&amp;gt;, или хотя бы &amp;lt;tt&amp;gt;CVS&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Но «простоты» при этом уже не будет, ибо приучить «непродвинутого» человека этим пользоваться совершенно нереально — проверено более чем десятилетним опытом автора статьи, регулярно ставившего подобные эксперименты. Плюс необходимость развертывания системы сборки на каждом рабочем месте существенно подрывает «доступность».&lt;br /&gt;
&lt;br /&gt;
Однако в те же 1970-80ые года, когда зародились поколения &amp;lt;tt&amp;gt;SGML&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;TeX&amp;lt;/tt&amp;gt;-разметок, появились и так называемые плоские (''plain text'') разметки, основной смысл которых заключался в форматировании документа с помощью пустых строк, пробелов-отступов, и использования десятка символов пунктуации так, что текст оставался вполне читаемым и без обработки.&lt;br /&gt;
&lt;br /&gt;
Получается, что «при всем богатстве выбора другой альтернативы нет» — наша «серебряная пуля» должна использовать текстовый формат документа и понятную ''plain text''-разметку. При этом мы уже не достигнем качества верстки &amp;lt;tt&amp;gt;LaTeX&amp;lt;/tt&amp;gt;-текстов, или удобства манипуляции XML-документами, но для поставленных задач — база знаний или техническая документация этого будет достаточно.&lt;br /&gt;
&lt;br /&gt;
=== Другие желания ===&lt;br /&gt;
&lt;br /&gt;
Что же еще разумно пожелать от «серебряной пули»? ''Доступность'' — просмотр гипертекста в любимом браузере, правка и редактирование там же. Да, ходить по ссылкам сможет и ребенок, но надо сделать, чтобы и ссылаться можно было легко и понятно. Чтобы было лекарство от страха — управление версиями. Чтобы обеспечивалось reusability: составные документы, шаблоны, препроцессор. В идеале, возможность подключения и использования любых простых предметно-ориентированных языков (''Domain Specific La''''n''''guages'') для увеличения продуктивности. Например, построение графов и даже UML-диаграмм по краткому текстовому описанию, понимание математических формул в общепринятой разметке &amp;lt;tt&amp;gt;TeX&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;LaTeX&amp;lt;/tt&amp;gt;, автоматическое форматирование и синтаксическая раскраска для фрагментов кода и т. п. Ну и конечно средства поиска и навигации — категории (онтологии, таксономии) и полнотекстовый поиск.&lt;br /&gt;
&lt;br /&gt;
== Вики-системы ==&lt;br /&gt;
&lt;br /&gt;
Хотя «шум» вокруг вики-систем усилился в последние лет пять, на самом деле идея и первоначальная реализация появилась еще в 1995 году. Тогда разработчик общедоступной базы знаний по паттернам программирования, решил заложить простоту, общедоступность и эффективность в основу своей CMS-системы. Более того, он назвал ее в честь понравившихся ему гавайских автобусов, которые, несмотря на некоторую неказистость, дешево и эффективно перевозили пассажиров между аэропортами. Некоторое время вики-системы не были особенно заметны на фоне огромного множества других CMS-систем, растущих, как грибы после дождя. Но уже в 2001 году на вики-системе стартовала «Википедия»— теперь уже всемирно известная многоязычная энциклопедия, а в 2007 году слово «Wiki» получило официальную прописку в Oxford English Dictionary. Теперь практически базы знаний сообществ сделаны на вики-системах, на «виках» ведут официальные сайты проектов, «вики» попадают и в интранет, где вытесняют «классические» CMS и системы документооборота, в них же ведут техническую документацию к программным продуктам. Почему это происходит? Видимо, потому, что множество вышеперечисленных «хотелок» прекрасно покрывают базовые принципы вики-систем:&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;tt&amp;gt;TeX&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;LaTeX&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;SGML Docbook&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;HTML&amp;lt;/tt&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;
Да, есть и технические проблемы, ограничивающие область применимости «вик», о чем надо помнить. Например, если вам нужна книга с высококачественной версткой или полиграфией (шрифты, сложные страницы с полями, плавающие объекты, оптимальный кернинг и выравнивание пустых пространств) — то я бы рекомендовал использовать LaTeX. Если заказчик требует сдавать документацию по древнему ГОСТу, с обязательной проверкой форматирования «службой нормоконтроля» — в таких случаях мы используем SGML DocBook. Но вообще тенденция такова, что ценность бумажной техдокументации уже упала почти до нуля, и продолжает падать дальше. Правда есть еще область электронных документов, в которых требуется качественная верстка по «листу/экрану» — это презентации. Здесь я бы рекомендовал LaTeX/beamer, и использовать все возможности автогенерации текста, диаграмм, картинок, и автоматизировать все это системой сборки типа SCons. Но в целом, пока кажется что эта пуля, если и не тянет на «серебряную», то «посеребренной» называться вполне может. И самое главное, кроме словесных аргументов есть убедительная проверка этого подхода практикой. Почти все знают «Википедию», но далеко не все знают, что ее прародителем был проект «Nupedia», основанный на «серьезных и глубоко продуманных подходах». Например, процесс помещения статей в энциклопедию состоял из семи этапов (проверка независимыми экспертами, вычитка редакторами и т. п.). Результат за 4 года работы — 23 завершенных статьи, 68 «in progress». А с момента перехода проекта на первый вики-движок, начался настоящий «взлет ракетой»:&lt;br /&gt;
&lt;br /&gt;
;2004: ≈ &amp;lt;tt&amp;gt;300 000&amp;lt;/tt&amp;gt; статей («en»-раздел);&lt;br /&gt;
&lt;br /&gt;
;2005: ≈ &amp;lt;tt&amp;gt;500 000&amp;lt;/tt&amp;gt; статей («en»-раздел);&lt;br /&gt;
&lt;br /&gt;
;2007: ≈ &amp;lt;tt&amp;gt;2 млн&amp;lt;/tt&amp;gt; статей («en»-раздел).&lt;br /&gt;
&lt;br /&gt;
В момент написания этой статьи (30 июля 2008 г.) в англоязычном разделе было &amp;lt;tt&amp;gt;2,478,333&amp;lt;/tt&amp;gt; статей, а в русскоязычном &amp;lt;tt&amp;gt;303,462&amp;lt;/tt&amp;gt;. Для сравнения — последняя (&amp;lt;tt&amp;gt;v15&amp;lt;/tt&amp;gt;) версия энциклопедии «Британника» содержала 120 тыс. статей, а последняя (v3) версия БСЭ состояла из &amp;lt;tt&amp;gt;95 тыс.&amp;lt;/tt&amp;gt; статей.&lt;br /&gt;
&lt;br /&gt;
=== Обратная сторона луны или проблемы выбора ===&lt;br /&gt;
&lt;br /&gt;
Итак, так как большинство читателей к этому моменту воскликнут «Убедили! Дайте две!», пора рассказать об обратной стороне, серьезно затрудняющей выбор. Дело в том, что вики-систем, даже только тех, которых сравнивают на ''wikimatrix.org'', уже больше сотни, и их число продолжает расти. Почти у всех из них свой собственный язык разметки и интерфейс. Да, наступило время веб-технологий и сменился парк изобретаемых программистами «велосипедов» — с текстовых редакторов и языков программирования, на вики-системы и языки разметки. Выбрать же очень непросто — дискуссии по выбору оптимальной вики-системы, судя по нашему опыту, чудовищно жаркие — сравнивается функционал, эстетика, архитектура, в ход идут религиозные доводы («hate Perl!», «hate PHP», «болд обозначать астерисками!»…). И ошибка в выборе может надолго, если не навсегда, отпугнуть компанию от использования вики-систем: «Вики? Даже не предлагайте! Мы тут пробовали — кошмар, убогая, неудобная, падает, помойка, ничего найти нельзя, никто ее не знает, вообще потом сломалась и мы все потеряли». Ситуация, как в анекдоте — «Карузо? Полная ерунда, мне вчера сосед напел…».&lt;br /&gt;
&lt;br /&gt;
Чтобы этого не случилось, мы предлагаем в первую очередь ориентироваться на комплексную характеристику функционала системы — популярность и распространенность. Да, «миллионы леммингов не могут ошибаться»&amp;lt;ref&amp;gt;Если кто не в курсе, популярный миф про леммингов, тупо следующих друг за другом на пути к суициду — всего лишь мем, запущенный постановочной сценой фильма «Белая пустошь» (1958), где леммингов сбрасывали в реку метлой.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Как же объективно измерить популярность?&lt;br /&gt;
&lt;br /&gt;
[[Image:Вики-системы — логарифм от гугл-известности.svg|center]]&lt;br /&gt;
&lt;br /&gt;
Мы провели некоторое оригинальное исследование, подсчитав количество страниц в «глобальном интернете», то есть индексе Google, упоминающих ту или иную систему. Диапазон полученных значений был настолько велик (от &amp;lt;tt&amp;gt;101&amp;lt;/tt&amp;gt; до &amp;lt;tt&amp;gt;295,000,000&amp;lt;/tt&amp;gt; страниц), что на графике и в последующем сравнении мы приводим десятичный логарифм от этого количества.&lt;br /&gt;
&lt;br /&gt;
Видно, что популярность уже далеко не одинакова, и чтобы выбрать более-менее известную систему, желательно сразу ограничить «шорт-лист», верхней десяткой кандидатов, чтобы не оказаться в незавидной роли «лабораторных животных» — первых пользователей системы, самостоятельно занимающихся «разминированием» сложных моментов. Еще мы анализировали популярность, используя ''Google Pagerank'', — известный индекс интернет-цитируемости. К нашему некоторому удивлению, «top10» согласно нашему исходному критерию и критерию, основанному на Google Pagerank, совпали! Из-за экономии места мы не приводим некоторые другие метрики популярности, например Google Trends и т. п. — заинтересовавшийся читатель вполне сможет получить их самостоятельно.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:wikis-prdata.svg]] || [[Image:wikis-topdata.svg]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В целом, основная наша рекомендация — ограничить выбор первой вики-системы одной из популярных перечисленных. У каждой из них есть уникальные конкурентные преимущества, положительные и отрицательные особенности. Например, &amp;lt;tt&amp;gt;Confluence&amp;lt;/tt&amp;gt; очень хорошо интегрируется с популярным баг-трекером &amp;lt;tt&amp;gt;Jira&amp;lt;/tt&amp;gt;, но является платной. &amp;lt;tt&amp;gt;TWiki&amp;lt;/tt&amp;gt; бесплатна и поддерживает управление правами на статьи, но написана на Perl. &amp;lt;tt&amp;gt;MoinMoin&amp;lt;/tt&amp;gt; понравится любителям Python’а. А &amp;lt;tt&amp;gt;JotSpot&amp;lt;/tt&amp;gt; уже понравился Google, и его превратили в &amp;lt;tt&amp;gt;Google Sites&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===MediaWiki===&lt;br /&gt;
&lt;br /&gt;
Мы же продолжим аргументировать за наш выбор — ''MediaWiki''. Количество контента, размещенного в MediaWik’ах, количество пользователей и разработчиков на порядки больше, чем у любой другой системы. Знание разметки &amp;lt;tt&amp;gt;MediaWiki&amp;lt;/tt&amp;gt; уже не менее полезно, чем знание &amp;lt;tt&amp;gt;HTML&amp;lt;/tt&amp;gt; — хотя бы потому, что дает возможность копировать или публиковать материалы в Википедии. Открытая архитектура имеет сотни возможных точек расширения (''Hooks'', ''Extensions''), куда можно подключать свои модули, легко реализуя собственные предметно-ориентированные языки, дополнительные интерфейсы редактирования и публикации, поиска и навигации. Причем API-интерфейсы достаточно стабильны — то есть реализовав расширение, можно спокойно обновлять &amp;lt;tt&amp;gt;MediaWiki&amp;lt;/tt&amp;gt;, бесплатно получая новый функционал, без боязни потерять свои наработки. Более того, уже есть больше ''тысячи'' готовых расширений, которые легко может установить даже эникейщик (скопировать файлы в каталог &amp;lt;tt&amp;gt;/extensions&amp;lt;/tt&amp;gt;). Остается лишь проблема выбора, но, как знают те, кому за тридцать, она гораздо приятней проблемы дефицита и отсутствия. По сути, именно система расширений превращает MediaWiki в многофункциональный швейцарский нож, причем в который вы легко можете добавить свои собственные инструменты. Перечислим несколько наших основных «штопоров», «напильников» и «пассатижей» из ''swiss-army knife ''«MediaWiki»:&lt;br /&gt;
&lt;br /&gt;
;Автоматическое построение графов: строит направленные и неориентированные графы по краткому текстовому описанию. Успешно используют даже самые далекие от компьютеров сотрудники компании и заказчиков. Подходят для всего — для рисования графов информационных и материальных потоков, диаграмм состояний или иерархии счетов, схем проводок или каких-либо классификаций. Кстати, все графы в этой статье построены именно по этой технологии.&lt;br /&gt;
&lt;br /&gt;
;UML-диаграммы по текстовому описанию: аналогично, автоматическое построение некоторых типов UML-диаграмм, но сформулированных на специальном текстовом языке ''UMLGraph'', напоминающем описание классов на языке &amp;lt;tt&amp;gt;Java&amp;lt;/tt&amp;gt;. Кстати, это совсем не профанация — ''UMLGraph'' рекомендовал к использованию Мартин Фаулер (''Martin Fowler''), один из самых известных популяризаторов UML.&lt;br /&gt;
&lt;br /&gt;
;Графики по тексту: двух- и трехмерные графики и диаграммы по записанным формулам или наборам данных. Да, редко кому в Software Engineering нужно рисовать функции Бесселя, но вот быстро опубликовать или обновить «''Scrum Burndown Chart''» бывает очень полезно.&lt;br /&gt;
&lt;br /&gt;
;Синтаксическая раскраска: для фрагментов кода или языков разметки. Быстро придает нарядный вид скучным фрагментам технической документации.&lt;br /&gt;
&lt;br /&gt;
;LaTeX: вставка формул и даже целых фрагментов LaTeX-документов.&lt;br /&gt;
&lt;br /&gt;
;Mindmaps: публикация так называемых «карт концепций», сделанных в популярной программе &amp;lt;tt&amp;gt;Freemind&amp;lt;/tt&amp;gt;. По сути, это неограниченные иерархий понятий с взаимосвязями: планы действий, иерархии рисков, конспекты описаний предметных областей и т. п.&lt;br /&gt;
&lt;br /&gt;
;Экспорт в CHM: экспорт содержимого вики-системы для последующей компиляции в статический CHM-файл. Также есть экспорт в &amp;lt;tt&amp;gt;MS Word&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;OpenOffice&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;MediawikiQuizzer: система тестов с выдачей электронных «дипломов», превращающих вики-систему в систему дистанционного обучения, ибо MediaWiki сама по себе уже подходит для публикации обучающего материала.&lt;br /&gt;
&lt;br /&gt;
;Полнотекстовый поиск с морфологией: используется отличный поисковик &amp;lt;tt&amp;gt;Sphinx&amp;lt;/tt&amp;gt; (''sphinxsearch.com''), поддерживающий русскую морфологию. Кстати, для &amp;lt;tt&amp;gt;MediaWiki&amp;lt;/tt&amp;gt; на &amp;lt;tt&amp;gt;PostgreSQL&amp;lt;/tt&amp;gt;, скоро можно будет воспользоваться полнотекстовым поиском с русской морфологией, встроенным в ядро этой СУБД.&lt;br /&gt;
&lt;br /&gt;
;WikEd: встроенный в браузер &amp;lt;tt&amp;gt;JavaScript&amp;lt;/tt&amp;gt;-редактор MediaWiki-разметки. Поддерживает синтаксическую подсветку и форматирование, поиск-замену, импорт из HTML или форматов офисных документов и т. п. Дает возможность начать работу без изучения вики-разметки, причем практически не чувствовать ограничений редактирования в браузере. Действительно, современные браузеры поддерживают и проверку орфографии, и закладки, и практически заменяют собой ранее популярные файловые навигаторы с многофункциональным редактором.&lt;br /&gt;
&lt;br /&gt;
;Викификатор: автоматический эвристический обработчик, улучшающий форматирование и типографику текста. Например, заменяет обычные «кавычки», то есть знаки дюйма, на типографские кавычки-лапки, знак «минус» — на длинное тире, правильно расставляет пробелы около знаков пунктуации и т. п.&lt;br /&gt;
&lt;br /&gt;
''Впрочем, перечислять можно еще очень долго, поэтому для тех, кто заинтересовался, на конференции SEC(R)-2008 мы планируем раздавать переносимую версию MediaWiki с нашим набором расширений и демонстрационным набором статей, описывающих ее возможности. Любой желающий сможет простым копированием запустить вики-систему на своем рабочем компьютере или даже ноутбуке, продемонстрировать и попробовать систему в действии вместе со своими коллегами, и если всем понравится — перенести на сервер. Возможно, полезным будет и личная инсталляция MediaWiki на ноутбуке, как персональная CMS или база знаний. Да, мы раздаем переносную систему под Windows, но те, у кого-то стоит Linux, мы уверены, самостоятельно справятся с инсталляцией.&lt;br /&gt;
&lt;br /&gt;
И даже если MediaWiki вам не подойдет — вы сможете это быстро понять. Но знайте, что система быстро развивается, и лучше не заниматься бесплодными поисками «такого же, только без крыльев», а взять стандартное решение и подождать, пока некритичный функционал кто-нибудь сделает.''&lt;br /&gt;
&lt;br /&gt;
== FAQ или наши ответы на часто задаваемые вопросы о «виках» ==&lt;br /&gt;
&lt;br /&gt;
Здесь будут ответы на некоторые актуальные вопросы, о которых нас спрашивали в личном общении или на интернет-форумах.&lt;br /&gt;
&lt;br /&gt;
Сразу скажем, что для внедрения и поддержания «вик» очень полезно, чтобы в компании был один или несколько энтузиастов, получающих удовольствие от «борьбы за качество». Поищите их среди технических писателей или тестировщиков. Отлично, если у них будет терпимый уровень грамотности и элементарные понятия о типографике. Поощряйте их участие в «модерации-викификации»! Вики — это не помойка, требующая регулярной уборки, это скорее сад, где регулярные усилия садовника направляют и придают растениям правильную форму.&lt;br /&gt;
&lt;br /&gt;
{{question}} ''Статьи в вики — это как «письмо из Простоквашино»? Нагромождение разных идей, стилей, «кто в лес, кто по дрова»?''&lt;br /&gt;
&lt;br /&gt;
А вот мы наоборот, читали, что у большинства статей даже в Википедии один или два выделенных автора, а остальные участники вносят пренебрежимо малые правки. В корпоративных виках все будет еще более авторским. Тогда зачем вики, где тут «синергия»?''&lt;br /&gt;
&lt;br /&gt;
Нет, ситуация «письма из Простоквашино» редка, почти у каждой статьи есть основные авторы, реализующие основной объем, а роль остальных сводится к правкам, дополнениям, замечаниям. И эта ситуация совершенно нормальна — вспомним приведенную метафору «Сказки о репке».&lt;br /&gt;
&lt;br /&gt;
{{question}} ''Есть у нас вики, только уже через год мы ничего в ней найти не можем. Полная помойка в ней образовалась, так как никто ничего не модерировал''.&lt;br /&gt;
&lt;br /&gt;
Обязательно сделайте возможность полнотекстового поиска, желательно с русской морфологией. Это более-менее спасает даже такую помойку, как интернет. Технически, если внутренний поиск в вашей вике плох, самое простое решение — установить ''OmniFind Yahoo! Edition'' (корпоративный бесплатный поисковик с русской морфологией). Чуть более сложно, то есть требует некоторого понимания и доработки, подключение к вашей вике Sphinx (''sphinxsearch.com''). Не надо забывать об автоматических функциях Mediawiki по борьбе с нецелостностью и неактуальностью статей. Дополнительно мы используем LinkChecker (''linkchecker.sourceforge.net'').&lt;br /&gt;
&lt;br /&gt;
{{question}}  ''Мы завели вику, но никто из сотрудников туда не пишет. Что мы делаем не так?''&lt;br /&gt;
&lt;br /&gt;
Надо выяснить, могут ли писать что-то сотрудники вообще. Может они ведут активную переписку с заказчиком и между собой по email, или даже, не дай бог, по ICQ. Покажите преимущества накопления знаний, по сравнению с использованием компьютера как телеграфа. Найдите тех, кому вики будет наиболее полезна, и помогите им начать, а остальные подтянутся. Может, сотрудники стесняются (например, из-за низкой грамотности) писать в общую вику — мотивируйте их не бояться и фиксировать любые полезные знания. Попробуйте и кнут — например, включить в ''Definition of Done'' по задачам, требующим отчета, отчет именно в вики-системе.&lt;br /&gt;
&lt;br /&gt;
{{question}} ''При обсуждении статей в MediaWiki сотрудники пишут комментарии не на вкладку «Обсуждение», а непосредственно в тело статьи. Как нам отучить их от этого, или получить «очищенный» от замечаний вариант?''&lt;br /&gt;
&lt;br /&gt;
Да, действительно контекстное замечание удобней вставить непосредственно в текст статьи. Так оно больше привлечет внимание, ведь если на выходе должен быть «чистый» текст, значит нужно рано или поздно учесть это замечание и удалить его. Оформляйте замечания в виде специальных шаблонов, которые с одной стороны будут привлекать внимание цветом или пиктограммами, с другой — не будут включаться в композитную статью. Используйте теги «noinclude».&lt;br /&gt;
&lt;br /&gt;
{{question}} ''Мы используем вики, но версии ведутся только для текстовых документов. Как хранить все версии и для бинарных объектов, например, картинок, чтобы использовать их также в вики.''&lt;br /&gt;
&lt;br /&gt;
Установите &amp;lt;tt&amp;gt;Subversion&amp;lt;/tt&amp;gt; и храните бинарные объекты в нем. В любом случае для работы с нетекстовыми объектами вам понадобится специальные программы, вики обычно для этого не приспособлена (хотя есть некоторые расширения по редактированию картинок в браузере). Настройте доступ к SVN-репозитарию через &amp;lt;tt&amp;gt;Apache&amp;lt;/tt&amp;gt;, и вы прекрасно сможете использовать картинки, и другие бинарные артефакты, ссылаясь на них из вики-системы. Кстати, вы также сможете ссылаться на любой программный код, документы в бинарных форматах, автогенеримую по коду документацию и т. п.&lt;br /&gt;
&lt;br /&gt;
{{question}} ''Хотелось бы иметь возможность продолжать работу без онлайн-доступа, в местах без интернета, например, в командировке в регионы.''&lt;br /&gt;
&lt;br /&gt;
Заведите персональную инсталляцию MediaWiki (это легко и под Linux, и под Windows), перенесите экспортом набор статей и работайте над ними. Еще сейчас проходит обкатку реализация протоколов ''WebDav''/''DeltaV'' для доступа к MediaWiki, что даст возможность использовать стандартный Subversion-клиент (например, &amp;lt;tt&amp;gt;TortoiseSVN&amp;lt;/tt&amp;gt;), для экспорта статей, как набора файлов, редактирования их в файловом виде, с возможностью массовых правок, и последующем ''commit''’е их в MediaWiki, как в SVN-репозитарий.&lt;br /&gt;
&lt;br /&gt;
{{question}} ''Мы перепробовали все, но вики-системы не приживаются. Что нам делать?''&lt;br /&gt;
&lt;br /&gt;
Радуйтесь! Значит они вам и не нужны! А если вы чувствуете, что они вам таки нужны, то есть есть нерешенные проблемы в управлении знаниями или гибком документировании при взаимодействии с заказчиком — то проблема явно в другом. В людях и в их мотивации, в задачах компании и ее приоритетах. Да и вряд ли другой волшебный инструмент сможет помочь в этом случае.&lt;br /&gt;
&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;
Выступление с докладом по этой теме:&lt;br /&gt;
* [http://team.custis.ru/2008/12/mediawiki.html внутренний семинар перед SECR-2008].&lt;br /&gt;
* [http://team.custis.ru/2009/06/sef-2009.html скринкаст с SEF-2009].&lt;br /&gt;
&lt;br /&gt;
[[Категория:Стас Фомин (Статьи)]]&lt;br /&gt;
[[Категория:2009 год (Статьи)]]&lt;br /&gt;
[[Категория:Технологии разработки ПО (Статьи)]]&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>Trolzen</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=MediaWiki_%E2%80%94_%D0%A1%D0%B5%D1%80%D0%B5%D0%B1%D1%80%D1%8F%D0%BD%D0%B0%D1%8F_%D0%BF%D1%83%D0%BB%D1%8F_%D0%B8%D0%BB%D0%B8_%D1%88%D0%B2%D0%B5%D0%B9%D1%86%D0%B0%D1%80%D1%81%D0%BA%D0%B8%D0%B9_%D0%BD%D0%BE%D0%B6%3F&amp;diff=15871</id>
		<title>MediaWiki — Серебряная пуля или швейцарский нож?</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=MediaWiki_%E2%80%94_%D0%A1%D0%B5%D1%80%D0%B5%D0%B1%D1%80%D1%8F%D0%BD%D0%B0%D1%8F_%D0%BF%D1%83%D0%BB%D1%8F_%D0%B8%D0%BB%D0%B8_%D1%88%D0%B2%D0%B5%D0%B9%D1%86%D0%B0%D1%80%D1%81%D0%BA%D0%B8%D0%B9_%D0%BD%D0%BE%D0%B6%3F&amp;diff=15871"/>
				<updated>2010-03-27T18:39:11Z</updated>
		
		<summary type="html">&lt;p&gt;Trolzen: /* MediaWiki */ орфография&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;[[:Категория:Стас Фомин (Статьи)|Стас Фомин]]: Заместитель директора по информационным технологиям / stas@custis.ru&lt;br /&gt;
&lt;br /&gt;
* «Mediawiki: Серебряная пуля или швейцарский нож?»&amp;lt;ref&amp;gt;Статья написана в июле 2008, к конференции SECR-2008, опубликована с сокращениями в [http://www.osp.ru/os/2009/03/8162918 «Открытые системы», апрель 2009]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Аннотация ==&lt;br /&gt;
&lt;br /&gt;
В последние годы наблюдается бурный рост использования ''Wiki''-систем, причем не только для агрегации знаний открытыми сообществами, для чего они были предназначены изначально, но и для процессов документирования и управления знаниями внутри компаний-разработчиков ПО. При этом, вики-системы зачастую заменяют «классические» системы документооборота и технологии генерации документации. Здесь мы выделим и проанализируем причины, по которым это происходит, и обозначим границы применимости — покажем минусы вики-систем, из-за которых они так и не стали «серебряной пулей», и выявим области, где использование вики-систем не только модно, но и действительно эффективно.&lt;br /&gt;
&lt;br /&gt;
Далее, мы перейдем к вопросу выбора вики-системы для задачи построения внутрифирменной базы знаний, ведения документации и коммуникации с потребителями. На наш взгляд, в большинстве случаев оптимальным выбором будет MediaWiki. У этой вики-системы огромное количество пользователей и разработчиков, накоплен опыт использования и объем текстов. Открытая архитектура системы позволяет легко расширять возможности инструментами-расширениями и «срезать» неудобные углы в использовании.&lt;br /&gt;
&lt;br /&gt;
И наконец, мы рассмотрим наиболее острые проблемы, встающие перед пользователями вики-систем и предложим свои решения.&lt;br /&gt;
&lt;br /&gt;
Ключевые слова: документирование, коммуникация, управление знаниями, вики-системы, MediaWiki.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Mediawiki: silver bullet or swiss-army knife?&lt;br /&gt;
&lt;br /&gt;
General-purpose Wiki systems are successfully used in last years for documenting and knowledge management in software companies. These systems were designed to aggregate knowledge in open communities. But now Wiki systems often replace «stereotype» document management systems and software documenting technologies.&lt;br /&gt;
&lt;br /&gt;
We will discuss some reasons for this situation and point out some problems that limit application scope of Wikis. Wiki is not a «silver bullet» but we can outline application domains where Wiki may be effectively used. Then, we will consider how to choose Wiki system in order to build an internal corporate knowledge base, keep and maintain documentation and communicate with customers.&lt;br /&gt;
&lt;br /&gt;
MediaWiki is an optimal choice for this purpose in our opinion, since it has a vast community of users and developers and a wealth of experience. Open architecture makes it possible to extend easily any functionality of MediaWiki and to «downsize» possible inconveniencies.&lt;br /&gt;
&lt;br /&gt;
Finally, we will offer solutions for the most acute problems of «corporate wikiing».&lt;br /&gt;
&lt;br /&gt;
'''Keywords''''''': authoring, documenting, knowledge management, Wiki systems, 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;
&lt;br /&gt;
=== Документирование и взаимодействие ===&lt;br /&gt;
&lt;br /&gt;
Ранее было принято, что технической документацией занимается небольшая группа технических экспертов (технических писателей), владеющих технологиями верстки, публикации и групповой работы. Сейчас же, с ростом использования Agile-практик разработки, стало критически важно привлекать к работам по постановке задач или рецензированию существующей документации максимально широкий круг специалистов, как внутри компании (аналитиков, тестировщиков, разработчиков), так и представителей заказчика. Качество верстки, полиграфического оформления и литературного стиля уже не так важно, как актуальность, своевременность, полнота учета интересов всех заинтересованных сторон и верифицированность различными специалистами.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
  &lt;br /&gt;
     rankdir=TB; node [style=filled, fillcolor=&amp;quot;lavender&amp;quot;, shape=&amp;quot;rect&amp;quot; fontname=&amp;quot;Segoe Print&amp;quot;]&lt;br /&gt;
     &amp;quot;Совместная работа&amp;quot;&lt;br /&gt;
     &amp;quot;Совместная работа&amp;quot;-&amp;gt;&amp;quot;«IT»-команды&amp;quot;&lt;br /&gt;
     &amp;quot;Совместная работа&amp;quot;-&amp;gt;&amp;quot;C заказчиком или \n другими «не IT»-участниками&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
    &amp;quot;«IT»-команды&amp;quot;-&amp;gt;&amp;quot;Эффективность&amp;quot;&lt;br /&gt;
      &amp;quot;Эффективность&amp;quot; [fillcolor=darkolivegreen1]&lt;br /&gt;
  &lt;br /&gt;
    &amp;quot;C заказчиком или \n другими «не IT»-участниками&amp;quot;-&amp;gt;&amp;quot;Простота и доступность&amp;quot;&lt;br /&gt;
      &amp;quot;Простота и доступность&amp;quot; [fillcolor=cadetblue2]&lt;br /&gt;
  &lt;br /&gt;
    node[shape=&amp;quot;egg&amp;quot;]&lt;br /&gt;
    &amp;quot;Эффективность&amp;quot;-&amp;gt;&amp;quot;Параллелизм&amp;quot;  &lt;br /&gt;
    &amp;quot;Эффективность&amp;quot;-&amp;gt;&amp;quot;Скорость&amp;quot; &lt;br /&gt;
    &amp;quot;Эффективность&amp;quot;-&amp;gt;&amp;quot;Гибкость&amp;quot; &lt;br /&gt;
  &lt;br /&gt;
    edge [constraint=0 style=&amp;quot;dashed&amp;quot;]&lt;br /&gt;
    &amp;quot;C заказчиком или \n другими «не IT»-участниками&amp;quot;-&amp;gt;&amp;quot;Эффективность&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
    edge [arrowtail=&amp;quot;vee&amp;quot; arrowhead=&amp;quot;vee&amp;quot; color=&amp;quot;red&amp;quot; constraint=0 label=&amp;quot;несовместимость&amp;quot;]&lt;br /&gt;
     &amp;quot;Эффективность&amp;quot;-&amp;gt;&amp;quot;Простота и доступность&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
То есть важно, чтобы используемая технология обеспечивала возможность совместной работы, но для различных групп участников важными являются разные и конфликтующие между собой аспекты. Так, например, для основных или стержневых производителей документации, обозначенных на рисунке как «IT-команда», ключевым является фактор ''эффективности'', выражающийся в следующих аспектах:&lt;br /&gt;
&lt;br /&gt;
;Параллелизм: возможность асинхронной работы с минимумом блокировок и других узких мест, что дает возможность масштабировать команду. Правильными практиками для этого аспекта являются использование систем контроля версий с ''неблокирующей'' моделью «Копирование-Изменение-Слияние», допускающей параллельную правку одного артефакта несколькими участниками. Отрицательными примерами могут служить схемы «согласование по email», «файлы на файл-сервере с блокировкой», «Word-документ на всех».&lt;br /&gt;
&lt;br /&gt;
;Скорость: аспект технологии, ответственный за минимизацию затрат (человеко-часов, килокалорий, меганейронов) на условную единицу документации. Позитивные примеры — «написал несколько коротких строчек — диаграммы сами нарисовались, текст сам красиво отформатировался». Отрицательные — «выравнивать мышью маловажные диаграммы», «мучительно и монотонно переформатировать текст».&lt;br /&gt;
;Гибкость: цена внесения изменений должна быть ограничена и не более чем пропорциональна объему изменений. Хорошо, когда используются различные составные документы, шаблоны, автоматическое построение документации по программному коду (''literate programming'') или по схеме базы данных. Плохо, когда изменения надо проносить вручную и во множество различных документов.&lt;br /&gt;
&lt;br /&gt;
С другой стороны, кроме «стержневых» участников процесса, обеспечивающих основной объем документации, не менее важна роль и остальных — представителей заказчика, бизнес-аналитиков, разово привлекаемых экспертов-рецензентов. ''Можно привести смелую метафору с «вытягиванием репки» — несмотря на то, что основную тяговую силу составляет стержневая команда «деда и бабки», без участия «кошки и жучки» уже не обойтись, а минутное участие «мышки» может спасти проект от тупика.''  А для них в первую очередь важна не эффективность построения документации, а простота ее правки-рецензирования и доступность для чтения и изменений. ''Простота'' означает крутость «кривой обучения» — то есть включиться в работу с допустимым качеством можно практически «не приходя в сознание», посмотрев пару примеров, и ориентируясь на интуицию. Как пример, можно сравнить программирование на Basic против программирования ядра операционных систем, или использование текстовых процессоров в сравнении с системами верстки типа TeX.&lt;br /&gt;
&lt;br /&gt;
''Доступность'' же означает, что к процессу можно «подключиться» откуда угодно, нет никаких ограничений и требований к рабочему месту, не требуется сложных инсталляций набора ПО. В идеале должна использоваться модель «тонкого» клиента, под которым в данный момент обычно подразумевают браузер.&lt;br /&gt;
&lt;br /&gt;
Как обычно, аспекты «эффективность» и «простота и доступность» плохо между собой совместимы, и решения выигрышные для одной стороны, обычно совершенно недопустимы для другой. Но компромисс необходим — иначе одна из сторон («core» или «не-core») неизбежно выйдет из игры.&lt;br /&gt;
&lt;br /&gt;
=== Knowledge management ===&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;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
  &lt;br /&gt;
      rankdir=TB;&lt;br /&gt;
      node [style=filled, fillcolor=&amp;quot;lavender&amp;quot;, shape=&amp;quot;rect&amp;quot; peripheries=1 fontname=&amp;quot;PF Libera Pro&amp;quot;];&lt;br /&gt;
      &amp;quot;KnowledgeBase&amp;quot;-&amp;gt;&amp;quot;Фиксация знаний&amp;quot;&lt;br /&gt;
      &amp;quot;KnowledgeBase&amp;quot;-&amp;gt;&amp;quot;Рефакторинг \n знаний&amp;quot;&lt;br /&gt;
      &amp;quot;KnowledgeBase&amp;quot;-&amp;gt;&amp;quot;Извлечение \n знаний&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;Фиксация знаний&amp;quot;-&amp;gt;&amp;quot;Легкость дополнений&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;Эффективность&amp;quot; [style=filled, fillcolor=&amp;quot;palegreen1&amp;quot;, shape=&amp;quot;ellipse&amp;quot; peripheries=3]&lt;br /&gt;
  &amp;quot;Рефакторинг \n знаний&amp;quot;-&amp;gt;&amp;quot;Ссылки \n Рубрики \n категории \n ...&amp;quot;&lt;br /&gt;
  &amp;quot;Рефакторинг \n знаний&amp;quot;-&amp;gt;&amp;quot;Эффективность&amp;quot;&lt;br /&gt;
  &amp;quot;Рефакторинг \n знаний&amp;quot;-&amp;gt;&amp;quot;Актуальность&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;Актуальность&amp;quot;-&amp;gt;&amp;quot;Простота и доступность&amp;quot;&lt;br /&gt;
  &amp;quot;Извлечение \n знаний&amp;quot;-&amp;gt;&amp;quot;Полнотекстовый поиск&amp;quot;&lt;br /&gt;
  &amp;quot;Извлечение \n знаний&amp;quot;-&amp;gt;&amp;quot;Быстрая \n навигация&amp;quot;&lt;br /&gt;
  &amp;quot;Быстрая \n навигация&amp;quot;-&amp;gt;&amp;quot;Ссылки \n Рубрики \n категории \n ...&amp;quot;&lt;br /&gt;
  node [fillcolor=yellow] &lt;br /&gt;
&lt;br /&gt;
  &amp;quot;Простота и доступность&amp;quot; [style=filled, fillcolor=&amp;quot;palegreen1&amp;quot;, shape=&amp;quot;ellipse&amp;quot; peripheries=3]&lt;br /&gt;
  &amp;quot;Легкость дополнений&amp;quot;-&amp;gt;&amp;quot;Простота и доступность&amp;quot;&lt;br /&gt;
  &amp;quot;Легкость дополнений&amp;quot;-&amp;gt;&amp;quot;Эффективность&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Оказывается, первые два пункта нуждаются в том же, что рассмотрено в предыдущем разделе, ибо с одной стороны требуется «простота и доступность» технологии для широкой аудитории — от  программистов и системных администраторов, до HR и административно-хозяйственных служб, то есть включая персонал, не сильно «разбирающийся в IT». С другой — эффективность, как добавления знаний, так и рефакторинга, причем с учетом совместной работы.&lt;br /&gt;
&lt;br /&gt;
И наоборот,  третий пункт — ''эффективное извлечение знаний'', теперь востребован потребителем и от обычной документации. Ушли в прошлое времена, когда  пользователь ПО должен был обязательно проштудировать увесистую стопку томов бумажной документации. Сейчас упор идет на  возможность фрагментарного ознакомления, для чего тоже нужно предоставить все современные технологии — быструю навигацию по различным классификаторам, использование гипертекстовых переходов по семантическим связям, и эффективный полнотекстовый поиск с учетом морфологии.&lt;br /&gt;
&lt;br /&gt;
Таким образом, видно, что задачи ''Knowledge management'''а и документирования во взаимодействии с заказчиком весьма схожи, и для них  разумно ожидать единого решения. Отложив вопрос, а существует ли такая «серебряная пуля», попробуем понять, каких свойств можно ждать от такого решения.&lt;br /&gt;
&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;
  &lt;br /&gt;
     rankdir=TB; node [style=filled, fillcolor=&amp;quot;lavender&amp;quot;, shape=&amp;quot;rect&amp;quot; fontname=&amp;quot;PF Libera Pro Liberissima&amp;quot;];&lt;br /&gt;
     &amp;quot;Формат документа&amp;quot;-&amp;gt;&amp;quot;Бинарный&amp;quot;&lt;br /&gt;
     &amp;quot;Формат документа&amp;quot;-&amp;gt;&amp;quot;Текстовый&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
   binarybad [label=&amp;quot;Совместная работа \n без блокировок \n чрезвычайно затруднена&amp;quot; style=filled shape=egg]&lt;br /&gt;
   textgood [label=&amp;quot;Совместная работа \n без блокировок \n «Изменение-Слияние»&amp;quot; style=filled shape=egg]&lt;br /&gt;
  &amp;quot;Бинарный&amp;quot;-&amp;gt;binarybad &lt;br /&gt;
  &amp;quot;Текстовый&amp;quot;-&amp;gt;textgood &lt;br /&gt;
  &lt;br /&gt;
  textgood-&amp;gt;&amp;quot;Автоматические \n слияния&amp;quot;&lt;br /&gt;
  textgood-&amp;gt;&amp;quot;Построчные \n различия&amp;quot;&lt;br /&gt;
  textgood-&amp;gt;&amp;quot;Эффективное \n хранение версий&amp;quot;&lt;br /&gt;
  node [fillcolor=yellow] &lt;br /&gt;
&lt;br /&gt;
   binarybad [fillcolor=&amp;quot;lightpink&amp;quot; ]&lt;br /&gt;
   textgood [fillcolor=&amp;quot;palegreen&amp;quot;]&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;
Действительно, только для плоского, разбитого на ограниченные строки текста существуют эффективные алгоритмы вычисления различий и автоматического слияния различных версий. Этот момент уже известен с появления в 1970х первых систем управления версиями. И в эффективном документировании давно было принято использовать различные ''языки разметки'', хранить документацию в текстовом виде под системой контроля версий, а бинарные форматы использовать только в неизбежных случаях, для редко меняющихся артефактов, например фотографий или растровых иллюстраций.&lt;br /&gt;
&lt;br /&gt;
=== Языки разметки ===&lt;br /&gt;
&lt;br /&gt;
Выбрав текстовый формат документа, какой же язык разметки выбрать? Мы возьмем на себя смелость предложить некоторую классификацию существующих языков (''markup languages'') разметки документов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
  digraph G{ &lt;br /&gt;
    &lt;br /&gt;
     rankdir=LR; node [fontname=&amp;quot;sans-serif&amp;quot; style=filled, fillcolor=&amp;quot;lavender&amp;quot;, shape=&amp;quot;rect&amp;quot; fontname=Festus];&lt;br /&gt;
     edge [color=blue4]&lt;br /&gt;
     &amp;quot;Для Машины&amp;quot;&lt;br /&gt;
     &amp;quot;Для Человека&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
     &amp;quot;Для Машины&amp;quot;  -&amp;gt;SGML&lt;br /&gt;
     &amp;quot;Для Машины&amp;quot;  -&amp;gt;&amp;quot;Препроцессоры&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
   &amp;quot;Препроцессоры&amp;quot;-&amp;gt;TeX&lt;br /&gt;
   &amp;quot;Препроцессоры&amp;quot;-&amp;gt;M4&lt;br /&gt;
  &lt;br /&gt;
   TeX-&amp;gt;LateX&lt;br /&gt;
  &lt;br /&gt;
   SGML-&amp;gt;Docbook&lt;br /&gt;
   SGML-&amp;gt;HTML&lt;br /&gt;
   SGML-&amp;gt;XML&lt;br /&gt;
  node [fillcolor=yellow] &lt;br /&gt;
&lt;br /&gt;
   XML-&amp;gt;Семантический&lt;br /&gt;
   XML-&amp;gt;&amp;quot;Технический&amp;quot;&lt;br /&gt;
   Семантический-&amp;gt;XHTML&lt;br /&gt;
   Семантический-&amp;gt;&amp;quot;XML Docbook&amp;quot;&lt;br /&gt;
   Семантический-&amp;gt;&amp;quot;DITA&amp;quot;&lt;br /&gt;
   Семантический-&amp;gt;&amp;quot;MathML&amp;quot;&lt;br /&gt;
   &amp;quot;Технический&amp;quot;-&amp;gt;&amp;quot;MS XML (OOXML,ODF)&amp;quot;&lt;br /&gt;
   &amp;quot;Технический&amp;quot;-&amp;gt;SVG;&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
  digraph G{ &lt;br /&gt;
    &lt;br /&gt;
     rankdir=LR; node [fontname=&amp;quot;sans-serif&amp;quot; style=filled, fillcolor=&amp;quot;lavender&amp;quot;, shape=&amp;quot;rect&amp;quot; fontname=Festus];&lt;br /&gt;
     edge [color=blue4]&lt;br /&gt;
     &amp;quot;Для Машины&amp;quot;&lt;br /&gt;
     &amp;quot;Для Человека&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  node [fillcolor=cornsilk shape=none]&lt;br /&gt;
  &amp;quot;Для Человека&amp;quot;-&amp;gt;&amp;quot;Plain ASCII&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  &amp;quot;Plain ASCII&amp;quot;-&amp;gt;&amp;quot;Wiki-markups&amp;quot;&lt;br /&gt;
  &amp;quot;Plain ASCII&amp;quot;-&amp;gt;&amp;quot;BBCode&amp;quot;&lt;br /&gt;
  &amp;quot;Plain ASCII&amp;quot;-&amp;gt;&amp;quot;Комментарии в коде&amp;quot;&lt;br /&gt;
  &amp;quot;Plain ASCII&amp;quot;-&amp;gt;&amp;quot;Textile&amp;quot;&lt;br /&gt;
  &amp;quot;Plain ASCII&amp;quot;-&amp;gt;&amp;quot;Markdown&amp;quot;&lt;br /&gt;
  &amp;quot;Plain ASCII&amp;quot;-&amp;gt;&amp;quot;reStructuredText&amp;quot;&lt;br /&gt;
  &amp;quot;Plain ASCII&amp;quot;-&amp;gt;&amp;quot;txt2tags&amp;quot;&lt;br /&gt;
  &amp;quot;Wiki-markups&amp;quot; [fillcolor=&amp;quot;chartreuse&amp;quot;]&lt;br /&gt;
  node [fillcolor=yellow] &lt;br /&gt;
&lt;br /&gt;
  &amp;quot;Комментарии в коде&amp;quot;-&amp;gt;docstrings&lt;br /&gt;
  &amp;quot;Комментарии в коде&amp;quot;-&amp;gt;&amp;quot;Plain Old Documentation&amp;quot;&lt;br /&gt;
  &amp;quot;Комментарии в коде&amp;quot;-&amp;gt;&amp;quot;Ruby Document format&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Не вдаваясь в историю и тонкости, отметим, что ветви языков разметки, основанных как на использовании препроцессора (&amp;lt;tt&amp;gt;TeX&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;LaTeX&amp;lt;/tt&amp;gt;), так и на использовании жестких &amp;lt;tt&amp;gt;SGML&amp;lt;/tt&amp;gt;-спецификаций (&amp;lt;tt&amp;gt;HTML&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;DocBook&amp;lt;/tt&amp;gt;) обладают особенностями, делающими их неподходящими для решения задачи «простота для не-гиков». Элементы разметки, будь то теги или макросы, занимают много места, разметка документа ориентируется не на удобство автора, а на удобство машинного представления, для обработки препроцессором (TeX/LaTeX) или стандартизированным компилятором (&amp;lt;tt&amp;gt;SGML&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;XML&amp;lt;/tt&amp;gt;/…). В результате, надо быть готовым к трудноуловимым и даже необъяснимым ошибкам при работе с TeX, или держать в голове иерархию вложенности сотен тегов при использовании структурной SGML/XML-разметки (&amp;lt;tt&amp;gt;DocBook&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;XHTML&amp;lt;/tt&amp;gt;). Конечно, сильная команда легко сможет обуздать любое из этих средств, и сможет эффективно порождать документацию на любом языке разметки, используя системы последовательных преобразований (''tool chains''), управляемые системой сборки (&amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Ant&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;Scons&amp;lt;/tt&amp;gt;). При этом можно достичь и гибкости, за счет использования препроцессирования, шаблонов и составных документов, и параллелизма, используя систему контроля версий (&amp;lt;tt&amp;gt;SVN&amp;lt;/tt&amp;gt;, или хотя бы &amp;lt;tt&amp;gt;CVS&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Но «простоты» при этом уже не будет, ибо приучить «непродвинутого» человека этим пользоваться совершенно нереально — проверено более чем десятилетним опытом автора статьи, регулярно ставившего подобные эксперименты. Плюс необходимость развертывания системы сборки на каждом рабочем месте существенно подрывает «доступность».&lt;br /&gt;
&lt;br /&gt;
Однако в те же 1970-80ые года, когда зародились поколения &amp;lt;tt&amp;gt;SGML&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;TeX&amp;lt;/tt&amp;gt;-разметок, появились и так называемые плоские (''plain text'') разметки, основной смысл которых заключался в форматировании документа с помощью пустых строк, пробелов-отступов, и использования десятка символов пунктуации так, что текст оставался вполне читаемым и без обработки.&lt;br /&gt;
&lt;br /&gt;
Получается, что «при всем богатстве выбора другой альтернативы нет» — наша «серебряная пуля» должна использовать текстовый формат документа и понятную ''plain text''-разметку. При этом мы уже не достигнем качества верстки &amp;lt;tt&amp;gt;LaTeX&amp;lt;/tt&amp;gt;-текстов, или удобства манипуляции XML-документами, но для поставленных задач — база знаний или техническая документация этого будет достаточно.&lt;br /&gt;
&lt;br /&gt;
=== Другие желания ===&lt;br /&gt;
&lt;br /&gt;
Что же еще разумно пожелать от «серебряной пули»? ''Доступность'' — просмотр гипертекста в любимом браузере, правка и редактирование там же. Да, ходить по ссылкам сможет и ребенок, но надо сделать, чтобы и ссылаться можно было легко и понятно. Чтобы было лекарство от страха — управление версиями. Чтобы обеспечивалось reusability: составные документы, шаблоны, препроцессор. В идеале, возможность подключения и использования любых простых предметно-ориентированных языков (''Domain Specific La''''n''''guages'') для увеличения продуктивности. Например, построение графов и даже UML-диаграмм по краткому текстовому описанию, понимание математических формул в общепринятой разметке &amp;lt;tt&amp;gt;TeX&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;LaTeX&amp;lt;/tt&amp;gt;, автоматическое форматирование и синтаксическая раскраска для фрагментов кода и т. п. Ну и конечно средства поиска и навигации — категории (онтологии, таксономии) и полнотекстовый поиск.&lt;br /&gt;
&lt;br /&gt;
== Вики-системы ==&lt;br /&gt;
&lt;br /&gt;
Хотя «шум» вокруг вики-систем усилился в последние лет пять, на самом деле идея и первоначальная реализация появилась еще в 1995 году. Тогда разработчик общедоступной базы знаний по паттернам программирования, решил заложить простоту, общедоступность и эффективность в основу своей CMS-системы. Более того, он назвал ее в честь понравившихся ему гавайских автобусов, которые, несмотря на некоторую неказистость, дешево и эффективно перевозили пассажиров между аэропортами. Некоторое время вики-системы не были особенно заметны на фоне огромного множества других CMS-систем, растущих, как грибы после дождя. Но уже в 2001 году на вики-системе стартовала «Википедия»— теперь уже всемирно известная многоязычная энциклопедия, а в 2007 году слово «Wiki» получило официальную прописку в Oxford English Dictionary. Теперь практически базы знаний сообществ сделаны на вики-системах, на «виках» ведут официальные сайты проектов, «вики» попадают и в интранет, где вытесняют «классические» CMS и системы документооборота, в них же ведут техническую документацию к программным продуктам. Почему это происходит? Видимо, потому, что множество вышеперечисленных «хотелок» прекрасно покрывают базовые принципы вики-систем:&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;tt&amp;gt;TeX&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;LaTeX&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;SGML Docbook&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;HTML&amp;lt;/tt&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;
Да, есть и технические проблемы, ограничивающие область применимости «вик», о чем надо помнить. Например, если вам нужна книга с высококачественной версткой или полиграфией (шрифты, сложные страницы с полями, плавающие объекты, оптимальный кернинг и выравнивание пустых пространств) — то я бы рекомендовал использовать LaTeX. Если заказчик требует сдавать документацию по древнему ГОСТу, с обязательной проверкой форматирования «службой нормоконтроля» — в таких случаях мы используем SGML DocBook. Но вообще тенденция такова, что ценность бумажной техдокументации уже упала почти до нуля, и продолжает падать дальше. Правда есть еще область электронных документов, в которых требуется качественная верстка по «листу/экрану» — это презентации. Здесь я бы рекомендовал LaTeX/beamer, и использовать все возможности автогенерации текста, диаграмм, картинок, и автоматизировать все это системой сборки типа SCons. Но в целом, пока кажется что эта пуля, если и не тянет на «серебряную», то «посеребренной» называться вполне может. И самое главное, кроме словесных аргументов есть убедительная проверка этого подхода практикой. Почти все знают «Википедию», но далеко не все знают, что ее прародителем был проект «Nupedia», основанный на «серьезных и глубоко продуманных подходах». Например, процесс помещения статей в энциклопедию состоял из семи этапов (проверка независимыми экспертами, вычитка редакторами и т. п.). Результат за 4 года работы — 23 завершенных статьи, 68 «in progress». А с момента перехода проекта на первый вики-движок, начался настоящий «взлет ракетой»:&lt;br /&gt;
&lt;br /&gt;
;2004: ≈ &amp;lt;tt&amp;gt;300 000&amp;lt;/tt&amp;gt; статей («en»-раздел);&lt;br /&gt;
&lt;br /&gt;
;2005: ≈ &amp;lt;tt&amp;gt;500 000&amp;lt;/tt&amp;gt; статей («en»-раздел);&lt;br /&gt;
&lt;br /&gt;
;2007: ≈ &amp;lt;tt&amp;gt;2 млн&amp;lt;/tt&amp;gt; статей («en»-раздел).&lt;br /&gt;
&lt;br /&gt;
В момент написания этой статьи (30 июля 2008 г.) в англоязычном разделе было &amp;lt;tt&amp;gt;2,478,333&amp;lt;/tt&amp;gt; статей, а в русскоязычном &amp;lt;tt&amp;gt;303,462&amp;lt;/tt&amp;gt;. Для сравнения — последняя (&amp;lt;tt&amp;gt;v15&amp;lt;/tt&amp;gt;) версия энциклопедии «Британника» содержала 120 тыс. статей, а последняя (v3) версия БСЭ состояла из &amp;lt;tt&amp;gt;95 тыс.&amp;lt;/tt&amp;gt; статей.&lt;br /&gt;
&lt;br /&gt;
=== Обратная сторона луны или проблемы выбора ===&lt;br /&gt;
&lt;br /&gt;
Итак, так как большинство читателей к этому моменту воскликнут «Убедили! Дайте две!», пора рассказать об обратной стороне, серьезно затрудняющей выбор. Дело в том, что вики-систем, даже только тех, которых сравнивают на ''wikimatrix.org'', уже больше сотни, и их число продолжает расти. Почти у всех из них свой собственный язык разметки и интерфейс. Да, наступило время веб-технологий и сменился парк изобретаемых программистами «велосипедов» — с текстовых редакторов и языков программирования, на вики-системы и языки разметки. Выбрать же очень непросто — дискуссии по выбору оптимальной вики-системы, судя по нашему опыту, чудовищно жаркие — сравнивается функционал, эстетика, архитектура, в ход идут религиозные доводы («hate Perl!», «hate PHP», «болд обозначать астерисками!»…). И ошибка в выборе может надолго, если не навсегда, отпугнуть компанию от использования вики-систем: «Вики? Даже не предлагайте! Мы тут пробовали — кошмар, убогая, неудобная, падает, помойка, ничего найти нельзя, никто ее не знает, вообще потом сломалась и мы все потеряли». Ситуация, как в анекдоте — «Карузо? Полная ерунда, мне вчера сосед напел…».&lt;br /&gt;
&lt;br /&gt;
Чтобы этого не случилось, мы предлагаем в первую очередь ориентироваться на комплексную характеристику функционала системы — популярность и распространенность. Да, «миллионы леммингов не могут ошибаться»&amp;lt;ref&amp;gt;Если кто не в курсе, популярный миф про леммингов, тупо следующих друг за другом на пути к суициду — всего лишь мем, запущенный постановочной сценой фильма «Белая пустошь» (1958), где леммингов сбрасывали в реку метлой.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Как же объективно измерить популярность?&lt;br /&gt;
&lt;br /&gt;
[[Image:Вики-системы — логарифм от гугл-известности.svg|center]]&lt;br /&gt;
&lt;br /&gt;
Мы провели некоторое оригинальное исследование, подсчитав количество страниц в «глобальном интернете», то есть индексе Google, упоминающих ту или иную систему. Диапазон полученных значений был настолько велик (от &amp;lt;tt&amp;gt;101&amp;lt;/tt&amp;gt; до &amp;lt;tt&amp;gt;295,000,000&amp;lt;/tt&amp;gt; страниц), что на графике и в последующем сравнении мы приводим десятичный логарифм от этого количества.&lt;br /&gt;
&lt;br /&gt;
Видно, что популярность уже далеко не одинакова, и чтобы выбрать более-менее известную систему, желательно сразу ограничить «шорт-лист», верхней десяткой кандидатов, чтобы не оказаться в незавидной роли «лабораторных животных» — первых пользователей системы, самостоятельно занимающихся «разминированием» сложных моментов. Еще мы анализировали популярность, используя ''Google Pagerank'', — известный индекс интернет-цитируемости. К нашему некоторому удивлению, «top10» согласно нашему исходному критерию и критерию, основанному на Google Pagerank, совпали! Из-за экономии места мы не приводим некоторые другие метрики популярности, например Google Trends и т. п. — заинтересовавшийся читатель вполне сможет получить их самостоятельно.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:wikis-prdata.svg]] || [[Image:wikis-topdata.svg]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В целом, основная наша рекомендация — ограничить выбор первой вики-системы одной из популярных перечисленных. У каждой из них есть уникальные конкурентные преимущества, положительные и отрицательные особенности. Например, &amp;lt;tt&amp;gt;Confluence&amp;lt;/tt&amp;gt; очень хорошо интегрируется с популярным баг-трекером &amp;lt;tt&amp;gt;Jira&amp;lt;/tt&amp;gt;, но является платной. &amp;lt;tt&amp;gt;TWiki&amp;lt;/tt&amp;gt; бесплатна и поддерживает управление правами на статьи, но написана на Perl. &amp;lt;tt&amp;gt;MoinMoin&amp;lt;/tt&amp;gt; понравится любителям Python’а. А &amp;lt;tt&amp;gt;JotSpot&amp;lt;/tt&amp;gt; уже понравился Google, и его превратили в &amp;lt;tt&amp;gt;Google Sites&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===MediaWiki===&lt;br /&gt;
&lt;br /&gt;
Мы же продолжим аргументировать за наш выбор — ''MediaWiki''. Количество контента, размещенного в MediaWik’ах, количество пользователей и разработчиков на порядки больше, чем у любой другой системы. Знание разметки &amp;lt;tt&amp;gt;MediaWiki&amp;lt;/tt&amp;gt; уже не менее полезно, чем знание &amp;lt;tt&amp;gt;HTML&amp;lt;/tt&amp;gt; — хотя бы потому, что дает возможность копировать или публиковать материалы в Википедии. Открытая архитектура имеет сотни возможных точек расширения (''Hooks'', ''Extensions''), куда можно подключать свои модули, легко реализуя собственные предметно-ориентированные языки, дополнительные интерфейсы редактирования и публикации, поиска и навигации. Причем API-интерфейсы достаточно стабильны — то есть реализовав расширение, можно спокойно обновлять &amp;lt;tt&amp;gt;MediaWiki&amp;lt;/tt&amp;gt;, бесплатно получая новый функционал, без боязни потерять свои наработки. Более того, уже есть больше ''тысячи'' готовых расширений, которые легко может установить даже эникейщик (скопировать файлы в каталог &amp;lt;tt&amp;gt;/extensions&amp;lt;/tt&amp;gt;). Остается лишь проблема выбора, но, как знают те, кому за тридцать, она гораздо приятней проблемы дефицита и отсутствия. По сути, именно система расширений превращает MediaWiki в многофункциональный швейцарский нож, причем в который вы легко можете добавить свои собственные инструменты. Перечислим несколько наших основных «штопоров», «напильников» и «пассатижей» из ''swiss-army knife ''«MediaWiki»:&lt;br /&gt;
&lt;br /&gt;
;Автоматическое построение графов: строит направленные и неориентированные графы по краткому текстовому описанию. Успешно используют даже самые далекие от компьютеров сотрудники компании и заказчиков. Подходят для всего — для рисования графов информационных и материальных потоков, диаграмм состояний или иерархии счетов, схем проводок или каких-либо классификаций. Кстати, все графы в этой статье построены именно по этой технологии.&lt;br /&gt;
&lt;br /&gt;
;UML-диаграммы по текстовому описанию: аналогично, автоматическое построение некоторых типов UML-диаграмм, но сформулированных на специальном текстовом языке ''UMLGraph'', напоминающем описание классов на языке &amp;lt;tt&amp;gt;Java&amp;lt;/tt&amp;gt;. Кстати, это совсем не профанация — ''UMLGraph'' рекомендовал к использованию Мартин Фаулер (''Martin Fowler''), один из самых известных популяризаторов UML.&lt;br /&gt;
&lt;br /&gt;
;Графики по тексту: двух- и трехмерные графики и диаграммы по записанным формулам или наборам данных. Да, редко кому в Software Engineering нужно рисовать функции Бесселя, но вот быстро опубликовать или обновить «''Scrum Burndown Chart''» бывает очень полезно.&lt;br /&gt;
&lt;br /&gt;
;Синтаксическая раскраска: для фрагментов кода или языков разметки. Быстро придает нарядный вид скучным фрагментам технической документации.&lt;br /&gt;
&lt;br /&gt;
;LaTeX: вставка формул и даже целых фрагментов LaTeX-документов.&lt;br /&gt;
&lt;br /&gt;
;Mindmaps: публикация так называемых «карт концепций», сделанных в популярной программе &amp;lt;tt&amp;gt;Freemind&amp;lt;/tt&amp;gt;. По сути, это неограниченные иерархий понятий с взаимосвязями: планы действий, иерархии рисков, конспекты описаний предметных областей и т. п.&lt;br /&gt;
&lt;br /&gt;
;Экспорт в CHM: экспорт содержимого вики-системы для последующей компиляции в статический CHM-файл. Также есть экспорт в &amp;lt;tt&amp;gt;MS Word&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;OpenOffice&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;MediawikiQuizzer: система тестов с выдачей электронных «дипломов», превращающих вики-систему в систему дистанционного обучения, ибо MediaWiki сама по себе уже подходит для публикации обучающего материала.&lt;br /&gt;
&lt;br /&gt;
;Полнотекстовый поиск с морфологией: используется отличный поисковик &amp;lt;tt&amp;gt;Sphinx&amp;lt;/tt&amp;gt; (''sphinxsearch.com''), поддерживающий русскую морфологию. Кстати, для &amp;lt;tt&amp;gt;MediaWiki&amp;lt;/tt&amp;gt; на &amp;lt;tt&amp;gt;PostgreSQL&amp;lt;/tt&amp;gt;, скоро можно будет воспользоваться полнотекстовым поиском с русской морфологией, встроенным в ядро этой СУБД.&lt;br /&gt;
&lt;br /&gt;
;WikEd: встроенный в браузер &amp;lt;tt&amp;gt;JavaScript&amp;lt;/tt&amp;gt;-редактор MediaWiki-разметки. Поддерживает синтаксическую подсветку и форматирование, поиск-замену, импорт из HTML или форматов офисных документов и т. п. Дает возможность начать работу без изучения вики-разметки, причем практически не чувствовать ограничений редактирования в браузере. Действительно, современные браузеры поддерживают и проверку орфографии, и закладки, и практически заменяют собой ранее популярные файловые навигаторы с многофункциональным редактором.&lt;br /&gt;
&lt;br /&gt;
;Викификатор: автоматический эвристический обработчик, улучшающий форматирование и типографику текста. Например, заменяет обычные «кавычки», то есть знаки дюйма, на типографские кавычки-лапки, знак «минус» — на длинное тире, правильно расставляет пробелы около знаков пунктуации и т. п.&lt;br /&gt;
&lt;br /&gt;
''Впрочем, перечислять можно еще очень долго, поэтому для тех, кто заинтересовался, на конференции SEC(R)-2008 мы планируем раздавать переносимую версию MediaWiki с нашим набором расширений и демонстрационным набором статей, описывающих ее возможности. Любой желающий сможет простым копированием запустить вики-систему на своем рабочем компьютере или даже ноутбуке, продемонстрировать и попробовать систему в действии вместе со своими коллегами, и если всем понравится — перенести на сервер. Возможно, полезным будет и личная инсталляция MediaWiki на ноутбуке, как персональная CMS или база знаний. Да, мы раздаем переносную систему под Windows, но те, у кого-то стоит Linux, мы уверены, самостоятельно справятся с инсталляцией.&lt;br /&gt;
&lt;br /&gt;
И даже если MediaWiki вам не подойдет — вы сможете это быстро понять. Но знайте, что система быстро развивается, и лучше не заниматься бесплодными поисками «такого же, только без крыльев», а взять стандартное решение и подождать, пока некритичный функционал кто-нибудь сделает.''&lt;br /&gt;
&lt;br /&gt;
== FAQ или наши ответы на часто задаваемые вопросы о «виках» ==&lt;br /&gt;
&lt;br /&gt;
Здесь будут ответы на некоторые актуальные вопросы, о которых нас спрашивали в личном общении или на интернет-форумах.&lt;br /&gt;
&lt;br /&gt;
Сразу скажем, что для внедрения и поддержания «вик» очень полезно, чтобы в компании был один или несколько энтузиастов, получающих удовольствие от «борьбы за качество». Поищите их среди технических писателей или тестировщиков. Отлично, если у них будет терпимый уровень грамотности и элементарные понятия о типографике. Поощряйте их участие в «модерации-викификации»! Вики — это не помойка, требующая регулярной уборки, это скорее сад, где регулярные усилия садовника направляют и придают растениям правильную форму.&lt;br /&gt;
&lt;br /&gt;
{{question}} ''Статьи в вики — это как «письмо из Простоквашино»? Нагромождение разных идей, стилей, «кто в лес, кто по дрова»?''&lt;br /&gt;
&lt;br /&gt;
А вот мы наоборот, читали, что у большинства статей даже в Википедии один или два выделенных автора, а остальные участники вносят пренебрежимо малые правки. В корпоративных виках все будет еще более авторским. Тогда зачем вики, где тут «синергия»?''&lt;br /&gt;
&lt;br /&gt;
Нет, ситуация «письма из Простоквашино» редка, почти у каждой статьи есть основные авторы, реализующие основной объем, а роль остальных сводится к правкам, дополнениям, замечаниям. И эта ситуация совершенно нормальна — вспомним приведенную метафору «Сказки о репке».&lt;br /&gt;
&lt;br /&gt;
{{question}} ''Есть у нас вики, только уже через год мы ничего в ней найти не можем. Полная помойка в ней образовалась, так как никто ничего не модерировал''.&lt;br /&gt;
&lt;br /&gt;
Обязательно сделайте возможность полнотекстового поиска, желательно с русской морфологией. Это более-менее спасает даже такую помойку, как интернет. Технически, если внутренний поиск в вашей вике плох, самое простое решение — установить ''OmniFind Yahoo! Edition'' (корпоративный бесплатный поисковик с русской морфологией). Чуть более сложно, то есть требует некоторого понимания и доработки, подключение к вашей вике Sphinx (''sphinxsearch.com''). Не надо забывать об автоматических функциях Mediawiki по борьбе с нецелостностью и неактуальностью статей. Дополнительно мы используем LinkChecker (''linkchecker.sourceforge.net'').&lt;br /&gt;
&lt;br /&gt;
{{question}}  ''Мы завели вику, но никто из сотрудников туда не пишет. Что мы делаем не так?''&lt;br /&gt;
&lt;br /&gt;
Надо выяснить, могут ли писать что-то сотрудники вообще. Может они ведут активную переписку с заказчиком и между собой по email, или даже, не дай бог, по ICQ. Покажите преимущества накопления знаний, по сравнению с использованием компьютера как телеграфа. Найдите тех, кому вики будет наиболее полезна, и помогите им начать, а остальные подтянутся. Может, сотрудники стесняются (например, из-за низкой грамотности) писать в общую вику — мотивируйте их не бояться и фиксировать любые полезные знания. Попробуйте и кнут — например, включить в ''Definition of Done'' по задачам, требующим отчета, отчет именно в вики-системе.&lt;br /&gt;
&lt;br /&gt;
{{question}} ''При обсуждении статей в MediaWiki сотрудники пишут комментарии не на вкладку «Обсуждение», а непосредственно в тело статьи. Как нам отучить их от этого, или получить «очищенный» от замечаний вариант?''&lt;br /&gt;
&lt;br /&gt;
Да, действительно контекстное замечание удобней вставить непосредственно в текст статьи. Так оно больше привлечет внимание, ведь если на выходе должен быть «чистый» текст, значит нужно рано или поздно учесть это замечание и удалить его. Оформляйте замечания в виде специальных шаблонов, которые с одной стороны будут привлекать внимание цветом или пиктограммами, с другой — не будут включаться в композитную статью. Используйте теги «noinclude».&lt;br /&gt;
&lt;br /&gt;
{{question}} ''Мы используем вики, но версии ведутся только для текстовых документов. Как хранить все версии и для бинарных объектов, например, картинок, чтобы использовать их также в вики.''&lt;br /&gt;
&lt;br /&gt;
Установите &amp;lt;tt&amp;gt;Subversion&amp;lt;/tt&amp;gt; и храните бинарные объекты в нем. В любом случае для работы с нетекстовыми объектами вам понадобится специальные программы, вики обычно для этого не приспособлена (хотя есть некоторые расширения по редактированию картинок в браузере). Настройте доступ к SVN-репозитарию через &amp;lt;tt&amp;gt;Apache&amp;lt;/tt&amp;gt;, и вы прекрасно сможете использовать картинки, и другие бинарные артефакты, ссылаясь на них из вики-системы. Кстати, вы также сможете ссылаться на любой программный код, документы в бинарных форматах, автогенеримую по коду документацию и т. п.&lt;br /&gt;
&lt;br /&gt;
{{question}} ''Хотелось бы иметь возможность продолжать работу без онлайн-доступа, в местах без интернета, например, в командировке в регионы.''&lt;br /&gt;
&lt;br /&gt;
Заведите персональную инсталляцию MediaWiki (это легко и под Linux, и под Windows), перенесите экспортом набор статей и работайте над ними. Еще сейчас проходит обкатку реализация протоколов ''WebDav''/''DeltaV'' для доступа к MediaWiki, что даст возможность использовать стандартный Subversion-клиент (например, &amp;lt;tt&amp;gt;TortoiseSVN&amp;lt;/tt&amp;gt;), для экспорта статей, как набора файлов, редактирования их в файловом виде, с возможностью массовых правок, и последующем ''commit''’е их в MediaWiki, как в SVN-репозитарий.&lt;br /&gt;
&lt;br /&gt;
{{question}} ''Мы перепробовали все, но вики-системы не приживаются. Что нам делать?''&lt;br /&gt;
&lt;br /&gt;
Радуйтесь! Значит они вам и не нужны! А если вы чувствуете, что они вам таки нужны, то есть есть нерешенные проблемы в управлении знаниями или гибком документировании при взаимодействии с заказчиком — то проблема явно в другом. В людях и в их мотивации, в задачах компании и ее приоритетах. Да и вряд ли другой волшебный инструмент сможет помочь в этом случае.&lt;br /&gt;
&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;
Выступление с докладом по этой теме:&lt;br /&gt;
* [http://team.custis.ru/2008/12/mediawiki.html внутренний семинар перед SECR-2008].&lt;br /&gt;
* [http://team.custis.ru/2009/06/sef-2009.html скринкаст с SEF-2009].&lt;br /&gt;
&lt;br /&gt;
[[Категория:Стас Фомин (Статьи)]]&lt;br /&gt;
[[Категория:2009 год (Статьи)]]&lt;br /&gt;
[[Категория:Технологии разработки ПО (Статьи)]]&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>Trolzen</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:StasFomin&amp;diff=12656</id>
		<title>Обсуждение участника:StasFomin</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:StasFomin&amp;diff=12656"/>
				<updated>2010-02-19T07:23:29Z</updated>
		
		<summary type="html">&lt;p&gt;Trolzen: /* Не получается создать страницу обсуждения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Уважаемый Стас Фомин!&lt;br /&gt;
 &lt;br /&gt;
Пишут Вам из редакции журнала «Потенциал» -&lt;br /&gt;
образовательного научно-популярного журнала для школьников и учителей.&lt;br /&gt;
Ссылка на официальный сайт журнала — http://potential.org.ru/bin/view/Home/WebHome&lt;br /&gt;
Он также представлен в wikibooks (http://ru.wikibooks.org/wiki/Журнал_&amp;quot;Потенциал&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
На данном сайте (http://lib.custis.ru) мы обнаружили много разных хороших статей, которые можно было бы опубликовать в нашем журнале.&lt;br /&gt;
Нам бы хотелось связаться с авторами, чтобы узнать у них, не согласятся ли они подготовить ряд статей для журнала на основе имеющихся здесь.&lt;br /&gt;
Если с авторами связаться нельзя, то можем ли мы сами воспользоваться имеющимся здесь материалом?&lt;br /&gt;
 &lt;br /&gt;
В частности, нам интересна статья про машину Тьюринга&lt;br /&gt;
1) Знаете ли вы автора статьи про машину Тьюринга или аналогичного ему человека,который бы согласился переделать эту &lt;br /&gt;
статью в журнальном стиле и опубликовать ее в журнале «Потенциал»?&lt;br /&gt;
2) Если статью переделать некому или нельзя, каковы условия публикации, возможно, в измененном виде, данной статьи в нашем &lt;br /&gt;
журнале?&lt;br /&gt;
&lt;br /&gt;
С уважением, Ольга Бутыгина и Артем Ворожцов. karagota@mail.ru&lt;br /&gt;
&lt;br /&gt;
:[[Участник:StasFomin|Стас Фомин]] 12:38, 10 Apr 2006 (MSD): Статьи по сложности и машинам Тьюринга взяты из лекций (наших, с научным руководителем) по теории алгоритмов (и упрощены, как шпаргалка по основным понятиям) - PDF-файлы, посмотрите, может более интересно:&lt;br /&gt;
:* http://discopal.ispras.ru/ru.lectures.htm&lt;br /&gt;
:* http://discopal.ispras.ru/ru.lectures-mipt.htm&lt;br /&gt;
&lt;br /&gt;
:Взять наверно можно, только для школьников, в более популярном стиле, есть наверно более подходящие книги и статьи (которых лучше взять за основу), например, на http://www.mccme.ru/free-books/&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;
:[[Участник:StasFomin|Стас Фомин]] 12:06, 2 May 2006 (MSD): Можно, только ставьте ссылку на оригинал в разделе «Ссылки» (что собственно и было написано в [[{{SITENAME}}]]). Наиболее приличные материалы я и сам в википедию переношу. К сожалению, в [[{{SITENAME}}]] реализовано много расширений, полезных для представления IT- и CS- информации — поддержка [[Graphviz]], [[Tex]], SVG, синтаксическая раскраска кодов и т. п. — без этого (в Википедии) все это выглядит достаточно бедно. Поэтому в википедию обычно переношу энциклопедический обьем, а непосредственно статьи-учебники поддерживаю в актуальности здесь.&lt;br /&gt;
&lt;br /&gt;
== Вопрос по  правкам ==&lt;br /&gt;
&lt;br /&gt;
[[Участник:Trolzen|Trolzen]] 17:20, 18 февраля 2010 (UTC):  Скажите, почему после моих правок появилось ещё 2 (одна ваша и одна  бота), в которых написано, что они добавили столько же символов, хотя,  если посмотреть сравнение, то изменений никаких? Вот пример страницы с  такими правками: http://lib.custis.ru/index.php?title=Programmer_Insecurity&amp;amp;action=history  Здесь что-то  вроде системы постмодерации, и она себя так проявляет? Очень интересно,  почему так получается, т.к. вижу подобное впервые.&lt;br /&gt;
:[[Участник:StasFomin|Стас Фомин]] 19:01, 18 февраля 2010 (UTC): Почти все  статьи реплицируются (наша разработка) по ночам из внутренней  вики-системы (в частности это защищает от вандализма). Но  пользовательские правки я просматриваю, и исправления/добавления проношу  во внутреннюю вики. Так что ваши правки не пропали.&lt;br /&gt;
::[[Участник:Trolzen|Trolzen]] 07:18, 19 февраля 2010 (UTC): Да, я видел, что они не пропали, просто было интересно, почему так получается. Да, интересно вы придумали. Спасибо за разьяснения.&lt;br /&gt;
[[Участник:Trolzen|Trolzen]] 17:20, 18 февраля 2010 (UTC): И  ещё вопрос. Почему BenderBot всё время в комментарии пишет: &amp;quot;1 версия&amp;quot;?  Это означает &amp;quot;первая версия&amp;quot;? Тогда непонятно, почему всё время первая,  хотя страницы изменяются. &lt;br /&gt;
:[[Участник:StasFomin|Стас Фомин]] 19:01, 18 февраля 2010 (UTC): Нет, это он показывает, что пронесена одна (а не две или три)  новых версии статьи. То, что он реплицирует статьи, хотя они добайтово  совпадают (кроме авторства) — это то ли баг, то ли фича, сходу не помню,  надо посмотреть.&lt;br /&gt;
&lt;br /&gt;
== Не получается создать страницу обсуждения ==&lt;br /&gt;
&lt;br /&gt;
[[Участник:Trolzen|Trolzen]] 07:23, 19 февраля 2010 (UTC): Например, я не могу создать свою страницу и к ней страницу обсуждения. Ну и ко всем статьям тоже не получается создать обсуждение. Выдаётся ошибка &amp;quot;У вас нет разрешения создавать новые страницы&amp;quot;. Почему так было сделано? Если это поведение нельзя изменить, то не могли бы вы создать эти две мои страницы?&lt;/div&gt;</summary>
		<author><name>Trolzen</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:StasFomin&amp;diff=12655</id>
		<title>Обсуждение участника:StasFomin</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:StasFomin&amp;diff=12655"/>
				<updated>2010-02-19T07:22:58Z</updated>
		
		<summary type="html">&lt;p&gt;Trolzen: /* Не получается создать страницу обсуждения */ Новая тема&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Уважаемый Стас Фомин!&lt;br /&gt;
 &lt;br /&gt;
Пишут Вам из редакции журнала «Потенциал» -&lt;br /&gt;
образовательного научно-популярного журнала для школьников и учителей.&lt;br /&gt;
Ссылка на официальный сайт журнала — http://potential.org.ru/bin/view/Home/WebHome&lt;br /&gt;
Он также представлен в wikibooks (http://ru.wikibooks.org/wiki/Журнал_&amp;quot;Потенциал&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
На данном сайте (http://lib.custis.ru) мы обнаружили много разных хороших статей, которые можно было бы опубликовать в нашем журнале.&lt;br /&gt;
Нам бы хотелось связаться с авторами, чтобы узнать у них, не согласятся ли они подготовить ряд статей для журнала на основе имеющихся здесь.&lt;br /&gt;
Если с авторами связаться нельзя, то можем ли мы сами воспользоваться имеющимся здесь материалом?&lt;br /&gt;
 &lt;br /&gt;
В частности, нам интересна статья про машину Тьюринга&lt;br /&gt;
1) Знаете ли вы автора статьи про машину Тьюринга или аналогичного ему человека,который бы согласился переделать эту &lt;br /&gt;
статью в журнальном стиле и опубликовать ее в журнале «Потенциал»?&lt;br /&gt;
2) Если статью переделать некому или нельзя, каковы условия публикации, возможно, в измененном виде, данной статьи в нашем &lt;br /&gt;
журнале?&lt;br /&gt;
&lt;br /&gt;
С уважением, Ольга Бутыгина и Артем Ворожцов. karagota@mail.ru&lt;br /&gt;
&lt;br /&gt;
:[[Участник:StasFomin|Стас Фомин]] 12:38, 10 Apr 2006 (MSD): Статьи по сложности и машинам Тьюринга взяты из лекций (наших, с научным руководителем) по теории алгоритмов (и упрощены, как шпаргалка по основным понятиям) - PDF-файлы, посмотрите, может более интересно:&lt;br /&gt;
:* http://discopal.ispras.ru/ru.lectures.htm&lt;br /&gt;
:* http://discopal.ispras.ru/ru.lectures-mipt.htm&lt;br /&gt;
&lt;br /&gt;
:Взять наверно можно, только для школьников, в более популярном стиле, есть наверно более подходящие книги и статьи (которых лучше взять за основу), например, на http://www.mccme.ru/free-books/&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;
:[[Участник:StasFomin|Стас Фомин]] 12:06, 2 May 2006 (MSD): Можно, только ставьте ссылку на оригинал в разделе «Ссылки» (что собственно и было написано в [[{{SITENAME}}]]). Наиболее приличные материалы я и сам в википедию переношу. К сожалению, в [[{{SITENAME}}]] реализовано много расширений, полезных для представления IT- и CS- информации — поддержка [[Graphviz]], [[Tex]], SVG, синтаксическая раскраска кодов и т. п. — без этого (в Википедии) все это выглядит достаточно бедно. Поэтому в википедию обычно переношу энциклопедический обьем, а непосредственно статьи-учебники поддерживаю в актуальности здесь.&lt;br /&gt;
&lt;br /&gt;
== Вопрос по  правкам ==&lt;br /&gt;
&lt;br /&gt;
[[Участник:Trolzen|Trolzen]] 17:20, 18 февраля 2010 (UTC):  Скажите, почему после моих правок появилось ещё 2 (одна ваша и одна  бота), в которых написано, что они добавили столько же символов, хотя,  если посмотреть сравнение, то изменений никаких? Вот пример страницы с  такими правками: http://lib.custis.ru/index.php?title=Programmer_Insecurity&amp;amp;action=history  Здесь что-то  вроде системы постмодерации, и она себя так проявляет? Очень интересно,  почему так получается, т.к. вижу подобное впервые.&lt;br /&gt;
:[[Участник:StasFomin|Стас Фомин]] 19:01, 18 февраля 2010 (UTC): Почти все  статьи реплицируются (наша разработка) по ночам из внутренней  вики-системы (в частности это защищает от вандализма). Но  пользовательские правки я просматриваю, и исправления/добавления проношу  во внутреннюю вики. Так что ваши правки не пропали.&lt;br /&gt;
::[[Участник:Trolzen|Trolzen]] 07:18, 19 февраля 2010 (UTC): Да, я видел, что они не пропали, просто было интересно, почему так получается. Да, интересно вы придумали. Спасибо за разьяснения.&lt;br /&gt;
[[Участник:Trolzen|Trolzen]] 17:20, 18 февраля 2010 (UTC): И  ещё вопрос. Почему BenderBot всё время в комментарии пишет: &amp;quot;1 версия&amp;quot;?  Это означает &amp;quot;первая версия&amp;quot;? Тогда непонятно, почему всё время первая,  хотя страницы изменяются. &lt;br /&gt;
:[[Участник:StasFomin|Стас Фомин]] 19:01, 18 февраля 2010 (UTC): Нет, это он показывает, что пронесена одна (а не две или три)  новых версии статьи. То, что он реплицирует статьи, хотя они добайтово  совпадают (кроме авторства) — это то ли баг, то ли фича, сходу не помню,  надо посмотреть.&lt;br /&gt;
&lt;br /&gt;
== Не получается создать страницу обсуждения ==&lt;br /&gt;
&lt;br /&gt;
Например, я не могу создать свою страницу и к ней страницу обсуждения. Ну и ко всем статьям тоже не получается создать обсуждение. Выдаётся ошибка &amp;quot;У вас нет разрешения создавать новые страницы&amp;quot;. Почему так было сделано? Если это поведение нельзя изменить, то не могли бы вы создать эти две мои страницы?&lt;/div&gt;</summary>
		<author><name>Trolzen</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:StasFomin&amp;diff=12654</id>
		<title>Обсуждение участника:StasFomin</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:StasFomin&amp;diff=12654"/>
				<updated>2010-02-19T07:18:05Z</updated>
		
		<summary type="html">&lt;p&gt;Trolzen: /* Вопрос по  правкам */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Уважаемый Стас Фомин!&lt;br /&gt;
 &lt;br /&gt;
Пишут Вам из редакции журнала «Потенциал» -&lt;br /&gt;
образовательного научно-популярного журнала для школьников и учителей.&lt;br /&gt;
Ссылка на официальный сайт журнала — http://potential.org.ru/bin/view/Home/WebHome&lt;br /&gt;
Он также представлен в wikibooks (http://ru.wikibooks.org/wiki/Журнал_&amp;quot;Потенциал&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
На данном сайте (http://lib.custis.ru) мы обнаружили много разных хороших статей, которые можно было бы опубликовать в нашем журнале.&lt;br /&gt;
Нам бы хотелось связаться с авторами, чтобы узнать у них, не согласятся ли они подготовить ряд статей для журнала на основе имеющихся здесь.&lt;br /&gt;
Если с авторами связаться нельзя, то можем ли мы сами воспользоваться имеющимся здесь материалом?&lt;br /&gt;
 &lt;br /&gt;
В частности, нам интересна статья про машину Тьюринга&lt;br /&gt;
1) Знаете ли вы автора статьи про машину Тьюринга или аналогичного ему человека,который бы согласился переделать эту &lt;br /&gt;
статью в журнальном стиле и опубликовать ее в журнале «Потенциал»?&lt;br /&gt;
2) Если статью переделать некому или нельзя, каковы условия публикации, возможно, в измененном виде, данной статьи в нашем &lt;br /&gt;
журнале?&lt;br /&gt;
&lt;br /&gt;
С уважением, Ольга Бутыгина и Артем Ворожцов. karagota@mail.ru&lt;br /&gt;
&lt;br /&gt;
:[[Участник:StasFomin|Стас Фомин]] 12:38, 10 Apr 2006 (MSD): Статьи по сложности и машинам Тьюринга взяты из лекций (наших, с научным руководителем) по теории алгоритмов (и упрощены, как шпаргалка по основным понятиям) - PDF-файлы, посмотрите, может более интересно:&lt;br /&gt;
:* http://discopal.ispras.ru/ru.lectures.htm&lt;br /&gt;
:* http://discopal.ispras.ru/ru.lectures-mipt.htm&lt;br /&gt;
&lt;br /&gt;
:Взять наверно можно, только для школьников, в более популярном стиле, есть наверно более подходящие книги и статьи (которых лучше взять за основу), например, на http://www.mccme.ru/free-books/&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;
:[[Участник:StasFomin|Стас Фомин]] 12:06, 2 May 2006 (MSD): Можно, только ставьте ссылку на оригинал в разделе «Ссылки» (что собственно и было написано в [[{{SITENAME}}]]). Наиболее приличные материалы я и сам в википедию переношу. К сожалению, в [[{{SITENAME}}]] реализовано много расширений, полезных для представления IT- и CS- информации — поддержка [[Graphviz]], [[Tex]], SVG, синтаксическая раскраска кодов и т. п. — без этого (в Википедии) все это выглядит достаточно бедно. Поэтому в википедию обычно переношу энциклопедический обьем, а непосредственно статьи-учебники поддерживаю в актуальности здесь.&lt;br /&gt;
&lt;br /&gt;
== Вопрос по  правкам ==&lt;br /&gt;
&lt;br /&gt;
[[Участник:Trolzen|Trolzen]] 17:20, 18 февраля 2010 (UTC):  Скажите, почему после моих правок появилось ещё 2 (одна ваша и одна  бота), в которых написано, что они добавили столько же символов, хотя,  если посмотреть сравнение, то изменений никаких? Вот пример страницы с  такими правками: http://lib.custis.ru/index.php?title=Programmer_Insecurity&amp;amp;action=history  Здесь что-то  вроде системы постмодерации, и она себя так проявляет? Очень интересно,  почему так получается, т.к. вижу подобное впервые.&lt;br /&gt;
:[[Участник:StasFomin|Стас Фомин]] 19:01, 18 февраля 2010 (UTC): Почти все  статьи реплицируются (наша разработка) по ночам из внутренней  вики-системы (в частности это защищает от вандализма). Но  пользовательские правки я просматриваю, и исправления/добавления проношу  во внутреннюю вики. Так что ваши правки не пропали.&lt;br /&gt;
::[[Участник:Trolzen|Trolzen]] 07:18, 19 февраля 2010 (UTC): Да, я видел, что они не пропали, просто было интересно, почему так получается. Да, интересно вы придумали. Спасибо за разьяснения.&lt;br /&gt;
[[Участник:Trolzen|Trolzen]] 17:20, 18 февраля 2010 (UTC): И  ещё вопрос. Почему BenderBot всё время в комментарии пишет: &amp;quot;1 версия&amp;quot;?  Это означает &amp;quot;первая версия&amp;quot;? Тогда непонятно, почему всё время первая,  хотя страницы изменяются. &lt;br /&gt;
:[[Участник:StasFomin|Стас Фомин]] 19:01, 18 февраля 2010 (UTC): Нет, это он показывает, что пронесена одна (а не две или три)  новых версии статьи. То, что он реплицирует статьи, хотя они добайтово  совпадают (кроме авторства) — это то ли баг, то ли фича, сходу не помню,  надо посмотреть.&lt;/div&gt;</summary>
		<author><name>Trolzen</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:StasFomin&amp;diff=12650</id>
		<title>Обсуждение участника:StasFomin</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:StasFomin&amp;diff=12650"/>
				<updated>2010-02-18T17:20:40Z</updated>
		
		<summary type="html">&lt;p&gt;Trolzen: /* Вопрос по правкам */ Новая тема&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Уважаемый Стас Фомин!&lt;br /&gt;
 &lt;br /&gt;
Пишут Вам из редакции журнала «Потенциал» -&lt;br /&gt;
образовательного научно-популярного журнала для школьников и учителей.&lt;br /&gt;
Ссылка на официальный сайт журнала — http://potential.org.ru/bin/view/Home/WebHome&lt;br /&gt;
Он также представлен в wikibooks (http://ru.wikibooks.org/wiki/Журнал_&amp;quot;Потенциал&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
На данном сайте (http://lib.custis.ru) мы обнаружили много разных хороших статей, которые можно было бы опубликовать в нашем журнале.&lt;br /&gt;
Нам бы хотелось связаться с авторами, чтобы узнать у них, не согласятся ли они подготовить ряд статей для журнала на основе имеющихся здесь.&lt;br /&gt;
Если с авторами связаться нельзя, то можем ли мы сами воспользоваться имеющимся здесь материалом?&lt;br /&gt;
 &lt;br /&gt;
В частности, нам интересна статья про машину Тьюринга&lt;br /&gt;
1) Знаете ли вы автора статьи про машину Тьюринга или аналогичного ему человека,который бы согласился переделать эту &lt;br /&gt;
статью в журнальном стиле и опубликовать ее в журнале «Потенциал»?&lt;br /&gt;
2) Если статью переделать некому или нельзя, каковы условия публикации, возможно, в измененном виде, данной статьи в нашем &lt;br /&gt;
журнале?&lt;br /&gt;
&lt;br /&gt;
С уважением, Ольга Бутыгина и Артем Ворожцов. karagota@mail.ru&lt;br /&gt;
&lt;br /&gt;
:[[Участник:StasFomin|Стас Фомин]] 12:38, 10 Apr 2006 (MSD): Статьи по сложности и машинам Тьюринга взяты из лекций (наших, с научным руководителем) по теории алгоритмов (и упрощены, как шпаргалка по основным понятиям) - PDF-файлы, посмотрите, может более интересно:&lt;br /&gt;
:* http://discopal.ispras.ru/ru.lectures.htm&lt;br /&gt;
:* http://discopal.ispras.ru/ru.lectures-mipt.htm&lt;br /&gt;
&lt;br /&gt;
:Взять наверно можно, только для школьников, в более популярном стиле, есть наверно более подходящие книги и статьи (которых лучше взять за основу), например, на http://www.mccme.ru/free-books/&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;
:[[Участник:StasFomin|Стас Фомин]] 12:06, 2 May 2006 (MSD): Можно, только ставьте ссылку на оригинал в разделе «Ссылки» (что собственно и было написано в [[{{SITENAME}}]]). Наиболее приличные материалы я и сам в википедию переношу. К сожалению, в [[{{SITENAME}}]] реализовано много расширений, полезных для представления IT- и CS- информации — поддержка [[Graphviz]], [[Tex]], SVG, синтаксическая раскраска кодов и т. п. — без этого (в Википедии) все это выглядит достаточно бедно. Поэтому в википедию обычно переношу энциклопедический обьем, а непосредственно статьи-учебники поддерживаю в актуальности здесь.&lt;br /&gt;
&lt;br /&gt;
== Вопрос по правкам ==&lt;br /&gt;
&lt;br /&gt;
Скажите, почему после моих правок появилось ещё 2 (одна ваша и одна бота), в которых написано, что они добавили столько же символов, хотя, если посмотреть сравнение, то изменений никаких? Вот пример страницы с такими правками: http://lib.custis.ru/index.php?title=Programmer_Insecurity&amp;amp;action=history Здесь что-то вроде системы постмодерации, и она себя так проявляет? Очень интересно, почему так получается, т.к. вижу подобное впервые.&lt;br /&gt;
&lt;br /&gt;
И ещё вопрос. Почему BenderBot всё время в комментарии пишет: &amp;quot;1 версия&amp;quot;? Это означает &amp;quot;первая версия&amp;quot;? Тогда непонятно, почему всё время первая, хотя страницы изменяются. &lt;br /&gt;
&lt;br /&gt;
[[Участник:Trolzen|Trolzen]] 17:20, 18 февраля 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Trolzen</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Programmer_Insecurity&amp;diff=12634</id>
		<title>Programmer Insecurity</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Programmer_Insecurity&amp;diff=12634"/>
				<updated>2010-02-17T11:37:57Z</updated>
		
		<summary type="html">&lt;p&gt;Trolzen: орфография/пунктуация&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Programmer Insecurity/Комплексы Программиста&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Перевод статьи «Programmer Insecurity/Комплексы Программиста»&lt;br /&gt;
&amp;lt;ref&amp;gt;http://blog.red-bean.com/sussman/?p=96&amp;lt;/ref&amp;gt;,&lt;br /&gt;
выполнен сообществом компании [http://team.custis.ru «Заказные ИнформСистемы»].&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Я хотел бы о многом сегодня поговорить. Поговорить о том, что я никогда прежде не замечал, хотя вероятно, должен был заметить.&lt;br /&gt;
&lt;br /&gt;
Всегда был стереотип, что программисты асоциальны:&lt;br /&gt;
&lt;br /&gt;
  Q: How do you know when an engineer is outgoing?&lt;br /&gt;
  A: He looks at your shoes!&lt;br /&gt;
&lt;br /&gt;
Но на этой неделе я обнаружил, что большинство программистов и на самом деле очень закомплексованы, причем в своей же работе! Повторюсь: ужасно закомплексованы!&lt;br /&gt;
&lt;br /&gt;
Мой приятель Фитц и я долго проповедовали о ''best practices'' в разработке приложений&lt;br /&gt;
с открытым исходным кодом — когда человек должен быть открытым и честным с работой другого,&lt;br /&gt;
воспринимать разбор своего кода и уметь конструктивно критиковать, и, главное, активно общаться&lt;br /&gt;
с коллегами.&lt;br /&gt;
&lt;br /&gt;
Один из антипаттернов, о котором мы говорили — это люди, пишущие «кодовые бомбы».&lt;br /&gt;
То есть, что вы делаете, когда кто-либо показывает вам огромную новую фичу в open source проекте, написание которой заняло месяцы?&lt;br /&gt;
&lt;br /&gt;
У кого есть время, чтобы отрецензировать тысячи строк кода?&lt;br /&gt;
А что, если там были неправильные архитектурные решения с самого начала?&lt;br /&gt;
Есть ли теперь смысл указывать на это?&lt;br /&gt;
&lt;br /&gt;
Сбрасывание такой «кодовой-бомбы» в сообщество, редко когда идет проекту на пользу:&lt;br /&gt;
команда либо должна либо полностью отклонить ее, либо принять и иметь дело с&lt;br /&gt;
гигантским мутным ''BLOB''-ом, который трудно и понять, и править, и поддерживать.&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;
;Просьбы на конференции «Google I/O»:&lt;br /&gt;
  Пару недель назад, когда моя команда была на конференции «Google I/O»,&lt;br /&gt;
  мы поставили демонстрационный стенд, посвященный сервису поддержки проектов с открытыми исходными кодами.&lt;br /&gt;
  Раз за разом, мы получали просьбы типа:&lt;br /&gt;
* «Ребят, вы можете заставить Subversion в Google Code возможность прятать определенные ветки?»&lt;br /&gt;
* «Парни, а можно создавать открытые проекты поначалу скрытые от мира, а потом раскрыть их, когда они будут готовы?»&lt;br /&gt;
&lt;br /&gt;
По сути, они говорили одно и то же: «Я не хочу, чтобы люди видели процесс моей работы, пока она не стала идеальной»&lt;br /&gt;
&lt;br /&gt;
;Просьбы в список рассылки Google Code:&lt;br /&gt;
* Почистить так или иначе svn-репозиторий на &amp;lt;tt&amp;gt;Google Code&amp;lt;/tt&amp;gt;. Встречаются и разумные причины — например, случайный коммит секретных данных, или необходимость загрузить полностью историю из другого SVN-репозитория.&lt;br /&gt;
Но в основном, мы получаем некорректные (да, мы их отклоняем) просьбы вроде «Привет, я хочу переписать свой код с самого начала. Вы могли бы уничтожить историю?». Это значит «Я не хочу, чтобы люди увидели мой старый код, мне так за него стыдно!»&lt;br /&gt;
&lt;br /&gt;
Назовите это тщеславием или закомплексованностью —  в глубине души все кодеры хотят, чтобы все их прошлые ошибки и провалы были вычеркнуты из&lt;br /&gt;
истории.&lt;br /&gt;
&lt;br /&gt;
;Код-ревью воспринимаются как личные нападения:&lt;br /&gt;
Фитц рассказал смешной анекдот о своем друге, который перешел из мира open-source в корпоративную разработку.&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;
Один мой друг работает над несколькими проектами, в которых используют &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;mercurial&amp;lt;/tt&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;
Другая группа… Я не слышал от нее и писка за последние 5 месяцев.&lt;br /&gt;
Несмотря на множество писем и обсуждений в IRC, призывающих их обсудить их&lt;br /&gt;
дизайн и регулярно публиковать изменения, мне не дали увидеть ни одной строчки. […]&lt;br /&gt;
&lt;br /&gt;
В прошлое воскресенье один из них зашел ко мне с багом […] и я наконец смог увидеть&lt;br /&gt;
код, чтобы помочь отладить его. Это  мне не удалось, потому что там были 5000&lt;br /&gt;
строк мусорного кода, и просмотр лишь одного файла выявил две или три серьезных&lt;br /&gt;
ошибки в проектировании и дюжину сыро реализованных мест.&lt;br /&gt;
&lt;br /&gt;
Я убеждал их много раз в течение этих 5 месяцев публиковать свои изменения,&lt;br /&gt;
так, чтобы мы (другие) могли посмотреть и предложить обратную связь,&lt;br /&gt;
но каждый раз, в ответ была сплошная тишина.&lt;br /&gt;
&lt;br /&gt;
Я не знаю, боялись ли они опубликовать это, или только не заботились об этом.&lt;br /&gt;
Но так или иначе, учитывая код, что я видел, практический результат составляет 5 потраченных впустую месяцев.»&lt;br /&gt;
&lt;br /&gt;
Прежде, чем Вы начнете возражать — да да, я знаю, что потенциально&lt;br /&gt;
cave-hiding («разработка в тайной пещере») и написание кодовых бомб&lt;br /&gt;
возможно и с использованием централизованной системой управления версиями, такой, как Subversion.&lt;br /&gt;
&lt;br /&gt;
Но у моего друга есть интересная точка зрения:&lt;br /&gt;
&lt;br /&gt;
''Я думаю, что этот недостаток имеет место по крайней мере частично из-за того,&lt;br /&gt;
что DVCS даёт легкий способ обнести себя стеной и забраться в пещеру.&lt;br /&gt;
Если бы мы использовали &amp;lt;tt&amp;gt;svn&amp;lt;/tt&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;
Если бы они использовали Subversion, то гораздо менее вероятно, что&lt;br /&gt;
они сидели бы над патчем из 5000 строк в их рабочей копии в течение 5 месяцев;&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;
Вот классическая «рекомендация» для системы вроде git (взято из комментария в блоге):&lt;br /&gt;
«Не надо говорить мне, что я должен сотрудничать с другими людьми&lt;br /&gt;
в начале и публиковать мои изменения как можно раньше.&lt;br /&gt;
Я сотрудничаю с другими людьми, но иногда хочу делать определенную часть работы в одиночку.»&lt;br /&gt;
&lt;br /&gt;
Хм, ладно! Только не работай в одиночку слишком долго!&lt;br /&gt;
&lt;br /&gt;
Немного отступая от основной темы, скажу почему я предпочитаю &amp;lt;tt&amp;gt;Mercurial&amp;lt;/tt&amp;gt; &amp;lt;tt&amp;gt;Git&amp;lt;/tt&amp;gt;-у,&lt;br /&gt;
проделав некоторые исследования и прочитав немного об этих системах.&lt;br /&gt;
&lt;br /&gt;
Git гораздо более склонен к «пещерности», а я этого не люблю.&lt;br /&gt;
&lt;br /&gt;
Например, команда «git rebase» — это средство, позволяющее эффективно&lt;br /&gt;
уничтожать целые ветки истории: очень мощное, конечно же,&lt;br /&gt;
но это в то же время и способ стирания собственных следов.&lt;br /&gt;
Вместо того, чтобы соединить вашу ветку с родительской, она «притворяется», &lt;br /&gt;
что ваша ветвь всегда была основана на самой последней родительской ревизии.&lt;br /&gt;
&lt;br /&gt;
Другой пример: когда приходит время отправки и получения наборов изменений,&lt;br /&gt;
поведение по умолчанию для Mercurial состоит в том, чтобы обменяться историей с&lt;br /&gt;
удаленным репозитарием, тогда как git в этом случае только отправляет и получает&lt;br /&gt;
отдельную ветвь — предположительно ту, которую пользователь счел нужным сделать&lt;br /&gt;
общедоступной.&lt;br /&gt;
&lt;br /&gt;
Другими словами, git по умолчанию считает, что вся работа «пещерная», и с радостью&lt;br /&gt;
уничтожает историю. &lt;br /&gt;
Mercurial же по умолчанию разделяет все, и не может стирать историю.&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;
* Не бойтесь ежедневных ошибок — учитесь на них (Как говорят в Google, «не беги от ошибки — ошибайся часто, быстро, и учись!»).&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;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Статьи о Subversion]]&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>Trolzen</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Version_Control_and_the..._Long_Gradated_Scale&amp;diff=12633</id>
		<title>Version Control and the... Long Gradated Scale</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Version_Control_and_the..._Long_Gradated_Scale&amp;diff=12633"/>
				<updated>2010-02-17T11:20:55Z</updated>
		
		<summary type="html">&lt;p&gt;Trolzen: орфография/пунктуация&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Перевод статьи [http://blog.red-bean.com/sussman/?p=82 {{PAGENAME}}] («Контроль версий и далекие перспективы») выполнен сообществом компании [http://www.custis.ru «Заказные ИнформСистемы»].&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Моя предыдущая статья о [[Version Control and “the 80%”|контроле версий и «правиле 80%»]] заслуживает продолжения,&lt;br /&gt;
в первую очередь потому, что породило очень шумное обсуждение, &lt;br /&gt;
ну а затем из-за того, что мне бы не хотелось чтобы меня считали безграмотным нарциссом. &lt;br /&gt;
&lt;br /&gt;
Многие со мной согласились, но огромное число людей обиделись на мои смелые обобщения. &lt;br /&gt;
Я вижу бесконечные комментарии на мой пост&lt;br /&gt;
(хотя среди них есть и поддерживающие меня — см. пост [http://www.codinghorror.com/blog/archives/001002.html Джеффа Этвуда]),&lt;br /&gt;
где люди или пытаются решить — входят ли они в «80%» или в «20%», или несут пафосный бред, что &lt;br /&gt;
все программисты попадают о обе категории одновременно.&lt;br /&gt;
&lt;br /&gt;
Начну с извинений. &lt;br /&gt;
Оно конечно приятно, читать эту статью и думать, что смысл в том, что &lt;br /&gt;
«80% программеров — это тупые ведущиеся лохи, а другие 20% — клевые, толковые парни, прямо как я». &lt;br /&gt;
Очевидно, я в это не верю. :-). &lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что в начале статьи я специально предупреждал, что для наглядности я буду использовать «упрощенные стереотипы», это не сработало и я многих обидел. &lt;br /&gt;
&lt;br /&gt;
Конечно, мир не черно-бел и все программисты уникальны.&lt;br /&gt;
Нет каких-либо отдельных интересов, которые бы явно свидетельствовали о вашей «20%»-ности.&lt;br /&gt;
С другой стороны нельзя зайти в какую-нибудь контору и указать на команду программеров — «эти парни явно тупое 80%-е стадо».&lt;br /&gt;
Нельзя так четко делить, нельзя.&lt;br /&gt;
&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;
* участию в open-source, &lt;br /&gt;
* написанию LISP-компиляторов, &lt;br /&gt;
* [вставить здесь что-нибудь чумовое]. &lt;br /&gt;
&lt;br /&gt;
На этом я и основывал свои сверхсхематичные «80/20» метафоры в той статье, и, надеюсь, последнее определение будет менее скандально.&lt;br /&gt;
&lt;br /&gt;
По моему опыту, большинство людей, пишущих ПО за деньги, не имеют глубокой увлеченности в программировании, &lt;br /&gt;
и не занимаются этим ради удовольствия. &lt;br /&gt;
Они пользуются инструментами, написанные другими людьми, &lt;br /&gt;
причем эти инструменты должны быть очень дружественными к пользователю, чтобы ими воспользовались.&lt;br /&gt;
Как тут [http://kylecordes.com/2007/10/16/dvcs-80-percent/ указывали], эти инструменты должны работать прямо «из коробки»,&lt;br /&gt;
«с колес», без малейшей «обработки напильником».&lt;br /&gt;
&lt;br /&gt;
Основная мысль, которую я пытался донести, заключалась в том, что распределенные системы контроля версий (DVCS) пока не достигли такого уровня дружественности, да и Subversion только-только начинает достигать этого уровня (спасибо клиентам типа [http://tortoisesvn.tigris.org/ TortoiseSVN]). &lt;br /&gt;
&lt;br /&gt;
Я подписан на [http://www.google.com/alerts Google Alert] в моей области в софтверном мире, т.е. каждый раз, когда Google находит новую веб-страницу, ссылающуюся на Subversion или на контроль версий, я об этом узнаю. &lt;br /&gt;
Вы будете просто поражены числу новых постов в блогах, которые я вижу каждый день, по-существу говорящих &lt;br /&gt;
«Эй, может наша команда должна начать использовать контроль версий! Subversion кажется достаточно удобной, вы с ней уже работали?»&lt;br /&gt;
&lt;br /&gt;
И я вижу ничтожное проникновение DVCS в этот мир, а ведь это большой вызов для DVCS на пути к взрослению.&lt;br /&gt;
&lt;br /&gt;
Некоторые обратили внимание на то, что, в то время, когда я взываю к евангелистам DVCS не отбрасывать бездумно такие централизованые системы, как Subversion, сам я занят бездумным игнорированием DVCS (в той статье я жаловался, что большинство DVCS систем не работают под Windows, не имеют простого контроля доступа и не имеют приятных GUI клиентов). &lt;br /&gt;
Нет, я действительно сталкивался с Mercurial в разных проектах, просто мои утверждения основывались на несколько устаревшей информации. &lt;br /&gt;
[http://en.wikipedia.org/wiki/Comparison_of_revision_control_software Обратившись к википедии], я уверился в том, что был неправ. :-)&lt;br /&gt;
&lt;br /&gt;
[[Category:Статьи о Subversion]]&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>Trolzen</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9B%D0%B8%D0%BD%D1%83%D1%81_%D0%A2%D0%BE%D1%80%D0%B2%D0%B0%D0%BB%D1%8C%D0%B4%D1%81_%D0%BE_GIT_%D0%BD%D0%B0_Google_Talk&amp;diff=12632</id>
		<title>Линус Торвальдс о GIT на Google Talk</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9B%D0%B8%D0%BD%D1%83%D1%81_%D0%A2%D0%BE%D1%80%D0%B2%D0%B0%D0%BB%D1%8C%D0%B4%D1%81_%D0%BE_GIT_%D0%BD%D0%B0_Google_Talk&amp;diff=12632"/>
				<updated>2010-02-17T10:52:32Z</updated>
		
		<summary type="html">&lt;p&gt;Trolzen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Linus-git-googletalk.0-00-04.098.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Перевод доклада Линуса Торвальдса о системе контроля версий &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; на «''Google Talk''»&lt;br /&gt;
&amp;lt;ref&amp;gt;Оригинальное видео доклада http://www.youtube.com/watch?v=4XpnKHJAok8&amp;lt;/ref&amp;gt;,&lt;br /&gt;
выполнен сообществом компании [http://team.custis.ru «Заказные ИнформСистемы»].&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Есть предложение удалить эту статью, т.к. уже есть точно такая же: [[Линус Торвальдс о GIT на Google Talks]].&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk.0-00-11.269.jpg|center]]&lt;br /&gt;
[[Категория:Системы контроля версий]]&lt;br /&gt;
&lt;br /&gt;
== Представление ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk.0-00-19.731.jpg|framed|right| Эндрю Мортон. Один из ведущих разработчиков ядра Linux. Работник Google]]&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;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- [[Image:Linus-git-googletalk.0-00-35.640.jpg|framed|center]] --&amp;gt;&lt;br /&gt;
И вот, он пришел в мой офис сегодня днем, и сказал: «а чем ты вообще тут занимаешься?!»&lt;br /&gt;
О, спасибо вам, что тратите на нас свое время.&lt;br /&gt;
И вот, Линус пришел сегодня, чтобы объяснить нам,&lt;br /&gt;
какого …, он написал такие тулы, гм,&lt;br /&gt;
что только он тот избранный, кто настолько мудр, чтобы понять, как ими пользоваться.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:linus-git-googletalk.0-00-51.199.jpg|framed|center| тут все апплодируют, апплодируют…]]&lt;br /&gt;
&lt;br /&gt;
== Вводное слово ==&lt;br /&gt;
[[Изображение:linus-git-googletalk.0-01-15.165.jpg|framed|left|Линус Торвальдс.]]&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;Проект Linux Kernel.&amp;lt;/ref&amp;gt;, просто потому, что оно слишком большое,&lt;br /&gt;
чтобы рассказать о нем за час, хотя похоже Эндрю сделал это пару дней назад.&lt;br /&gt;
Вместо этого я расскажу вам про [[EnPedia:Git_(software)|git]], систему управления версиями,&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;!-- [[Изображение:linus-git-googletalk.0-01-10.219.jpg|framed|right]] --&amp;gt;&lt;br /&gt;
Я не знаю, как тут у вас, на ''Google talks'', все это происходит,&lt;br /&gt;
я скажу просто — меня не стесняйтесь.&lt;br /&gt;
А если ваш начальник потом вас пристрелит — это будет уже ваша проблема.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Linus-git-googletalk.0-02-21.683.jpg|framed|Потому что Линус любит заставлять людей думать, что он скромный|left]]&lt;br /&gt;
Сначала я хочу раздать несколько отзывов и благодарностей.&lt;br /&gt;
&lt;br /&gt;
О [[CVS]] я будут отзываться только в очень-очень отрицательном ключе,&lt;br /&gt;
потому что я, когда проектировал &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, во многих ситуациях&lt;br /&gt;
использовал (в контексте СУВ) подход «что бы тут сделал Иисус», а иногда и «что бы тут CVS никогда не сделала».&lt;br /&gt;
&lt;br /&gt;
Я никогда не использовал CVS при разработке ядра.&lt;br /&gt;
За последние десять лет для поддержки ядра&lt;br /&gt;
мы использовали только тарболы&amp;lt;ref&amp;gt;tarballs — несжатые tar-архивы&amp;lt;/ref&amp;gt;&lt;br /&gt;
и патчи&amp;lt;ref&amp;gt;patch — файлы изменений&amp;lt;/ref&amp;gt;,&lt;br /&gt;
которые оказались лучшими СУВ, чем CVS,&lt;br /&gt;
но я «покончил с CVS» после семилетнего опыта использования ее&lt;br /&gt;
в коммерческой компании, и я страстно ненавижу эту систему.&lt;br /&gt;
&lt;br /&gt;
Когда я сказал, что страстно ненавижу CVS, я должен также сказать, что если в аудитории есть пользователи SVN ([[EnPedia:Subversion (software)|Subversion]]),&lt;br /&gt;
то вы, возможно, захотите уйти.&lt;br /&gt;
Поскольку моя ненависть к CVS означает, что я считаю Subversion самым&lt;br /&gt;
бесцельным проектом, так как основной девиз Subversion некоторое время был&lt;br /&gt;
«Сделанный по-уму CVS» или что-то вроде этого.&lt;br /&gt;
А если вы начинаете с такого слогана, то вы никуда не сможете прийти.&lt;br /&gt;
Это так, потому что CVS невозможно сделать «правильным».&lt;br /&gt;
&lt;br /&gt;
Это была негативная часть.&lt;br /&gt;
&lt;br /&gt;
А вот с благодарностью я упомяну о [[EnPedia:BitKeeper|BitKeeper]],&lt;br /&gt;
хотя я понимаю, что по мнению многих, вокруг ''BitKeeper''’а было&lt;br /&gt;
много проблем и споров да и «развод» с ним был во многих смыслах неприятен.&lt;br /&gt;
Но по-моему, наш развод с BitKeeper-ом был&lt;br /&gt;
вполне полюбовный, хотя снаружи это казалось иначе.&lt;br /&gt;
И BitKeeper не только стал первой системой контроля версий,&lt;br /&gt;
которая показалась мне вполне достойной,&lt;br /&gt;
но, более того, показал мне, в чем была его основная идея&lt;br /&gt;
и как с ней можно реально работать.&lt;br /&gt;
И хотя &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; во многом, в том числе технически, очень-очень сильно отличается от&lt;br /&gt;
BitKeeper (это было специально задумано, чтобы убедить всех, что это&lt;br /&gt;
не клон BitKeeper), многие процессы используемые нами с &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
взяты из BitKeeper.&lt;br /&gt;
&lt;br /&gt;
Кстати, вы используете BitKeeper здесь, в Google? Я сомневаюсь.&lt;br /&gt;
Насколько я знаю, BitKeeper — это единственная коммерческая распределенная СУВ,&lt;br /&gt;
и поэтому, если вам-таки нужна именно коммерческая система,&lt;br /&gt;
то вам стоит использовать BitKeeper.&lt;br /&gt;
&lt;br /&gt;
Я также хотел бы заметить, что я разрабатываю &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; чуть больше двух лет,&lt;br /&gt;
но хотя я запустил проект, разработал архитектуру и начальный код,&lt;br /&gt;
на протяжении последних полутора лет его поддерживает&lt;br /&gt;
гораздо более славный парень, японец ''Junio Hamano'',&lt;br /&gt;
и именно он сделал &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; более доступным для простых смертных.&lt;br /&gt;
Ранние версии &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; действительно требовали некоторое количество&lt;br /&gt;
«ментальных пунктов» мозгосилы.&lt;br /&gt;
C тех пор он стал гораздо проще.&lt;br /&gt;
&lt;br /&gt;
В общем, это мой обычный подход —&lt;br /&gt;
все остальные делают все возможное, а я сам могу просто сидеть и потягивать&lt;br /&gt;
ПинаКоладу&amp;lt;ref&amp;gt;Пинья колада (исп. Piña colada), также ошибочно называемый пинаколада/пиноколада и т. п. — традиционный карибский алкогольный коктейль содержащий ром, кокосовое молоко и ананасовый сок.&amp;lt;/ref&amp;gt;,&lt;br /&gt;
ну и типа люди то же вроде как-то при деле…&lt;br /&gt;
&lt;br /&gt;
На этом благодарности окончены, всех вышеперечисленных откладываем в сторону.&lt;br /&gt;
&lt;br /&gt;
== Content ==&lt;br /&gt;
&lt;br /&gt;
[[Изображение:linus-git-googletalk.0-06-23.653.jpg|framed|right| Он набросал эту презентацию прошлой ночью, не ждите здесь чуда]]&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;tt&amp;gt;git&amp;lt;/tt&amp;gt; устроен изнутри.&lt;br /&gt;
Учить пользоваться &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;’ом я тоже не буду.&lt;br /&gt;
Ну есть же у вас такая штука, которую вы делаете, «google.com»,&lt;br /&gt;
и в ней есть такое место, куда можно вводить буквы, и если вы введете туда «git»&lt;br /&gt;
и нажмете кнопку «Мне повезет!», вы обязательно попадете [http://git-scm.com/ на официальный сайт &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;],&lt;br /&gt;
на котором есть и вводные обучающие курсы и руководство пользователя в HTML-формате.&lt;br /&gt;
В общем, если вы хотите научиться пользоваться &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, вам нужно первым делом туда,&lt;br /&gt;
а не на этот доклад.&lt;br /&gt;
&lt;br /&gt;
Но, как я уже сказал, ничего страшного, если мы отклонимся в сторону от темы&lt;br /&gt;
из-за ваших вопросов.&lt;br /&gt;
&lt;br /&gt;
== Content Advisory ==&lt;br /&gt;
[[Изображение:Linus-git-googletalk.0-08-05.443.jpg|framed|left|Линус критичен и к программам и к людям]]&lt;br /&gt;
&lt;br /&gt;
Я вам уже озвучил эти примечания к заголовкам; я использую сокращение [[EnPedia:Source_Code_Management|SCM]] в&lt;br /&gt;
значении «''source code management''/управление исходным кодом»,&lt;br /&gt;
что то же самое, что контроль версий. Некоторые думают, что SCM означает&lt;br /&gt;
«Управление конфигурациями/''software configuration management''»&lt;br /&gt;
и включают сюда не только контроль версий, но и управление релизами и все такое;&lt;br /&gt;
но я сейчас буду рассказывать не об этом, хотя &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; вполне подходит и для этого.&lt;br /&gt;
&lt;br /&gt;
С [[CVS]] мы уже разобрались. Вы можете не соглашаться со мной сколько хотите, но в течение этого доклада&lt;br /&gt;
все, кто не согласен со мной, по определению — тупые уроды.&lt;br /&gt;
Помните об этом!&lt;br /&gt;
Вы будете вольны делать и думать все что захотите, когда я закончу доклад.&lt;br /&gt;
А сейчас я рассказываю свое единственно правильное мнение,&lt;br /&gt;
так что пользователи CVS, если вы действительно его так любите,&lt;br /&gt;
уйдите с глаз моих долой. Вам надо обратиться в психушку или куда-то еще.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
[[Изображение:Linus-git-googletalk.0-09-24.327.jpg|framed|right|от BitKeeper к &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Теперь, перед тем как начать говорить о самой сути «Распределенности»,&lt;br /&gt;
что, по-моему, архиважно, нельзя не упомянуть об истории &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
потому что если люди что-то и слышали о &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
то это, в первую очередь, историю его возникновения.&lt;br /&gt;
&lt;br /&gt;
Во-первых, я на самом деле вообще не фанат SCM.&lt;br /&gt;
Я никогда особо не интересовался системами контроля версий, и думал, что это зло,&lt;br /&gt;
пока не наткнулся на ''BitKeeper'', который оценил по достоинству; и,&lt;br /&gt;
в некотором смысле, именно поэтому &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; намного лучше всего остального,&lt;br /&gt;
ведь мой мозг не страдал долгие годы, думая, что [[CVS]] делает что-либо разумное.&lt;br /&gt;
&lt;br /&gt;
Мне понадобилась замена для BitKeeper.&lt;br /&gt;
Причина в том, что BitKeeper — это коммерческий продукт,&lt;br /&gt;
но ''BitMover'' и ''Larry McVoy'' разрешили использовать его бесплатно для open-source&lt;br /&gt;
продуктов, как вы, возможно, знаете; единственным ограничением было то,&lt;br /&gt;
что его нельзя было исследовать (''reverse engineer'') и нельзя пытаться создать конкурирующий продукт.&lt;br /&gt;
&lt;br /&gt;
И я был вполне этим доволен, ведь я делаю свободное ПО,&lt;br /&gt;
потому что считаю это единственным правильным способом разработки,&lt;br /&gt;
но я также хочу использовать лучшие инструменты для работы,&lt;br /&gt;
и BitKeeper был как раз таким.&lt;br /&gt;
&lt;br /&gt;
Но не все были согласны со мной.&lt;br /&gt;
Все они тупые уроды, но как бы там ни было,&lt;br /&gt;
они подкинули проблем,&lt;br /&gt;
и это в результате привело к тому, что мы с ''Larry'' несколько раз&lt;br /&gt;
поговорили по телефону и в конце концов договорились прервать сотрудничество,&lt;br /&gt;
дабы не ухудшать отношения.&lt;br /&gt;
&lt;br /&gt;
Тогда, примерно 2 года назад, я выпустил релиз &amp;lt;tt&amp;gt;Linux 2.6.12-rc2&amp;lt;/tt&amp;gt; и сказал,&lt;br /&gt;
что не продолжу разработку Linux, пока у меня не будет замены BitKeeper’у,&lt;br /&gt;
для управления исходным кодом.&lt;br /&gt;
&lt;br /&gt;
Одним из способов замены был возврат к tar-архивам и патчам,&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;
И наконец, если вы не можете быть уверенными в том, что то, что вы положите в SCM,&lt;br /&gt;
можно легко достать обратно в том же виде,&lt;br /&gt;
такую систему тоже лучше не использовать.&lt;br /&gt;
&lt;br /&gt;
Честно говоря, та малышка [BitKeeper] прекрасно заботилась обо всем.&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;
была система [[EnPedia:Monotone_(software)|Monotone]], о которой, кстати, когда-то вроде был доклад в Google,&lt;br /&gt;
хотя может я и ошибаюсь; так вот, в ней было много интересных идей,&lt;br /&gt;
но производительность была просто ужасна,&lt;br /&gt;
так что попробовав ее один день, я понял, что она мне не подходит.&lt;br /&gt;
&lt;br /&gt;
В результате, я решил, что сам за две недели смогу написать что-то получше,&lt;br /&gt;
и не ошибся.&lt;br /&gt;
&lt;br /&gt;
== Distribution ==&lt;br /&gt;
&lt;br /&gt;
[''Показывает слайд «Distribution» с картинкой'']&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk-slide-distribution.jpg|framed|Это не просто хорошая идея. По-другому просто не будет работать!]]&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;
Поэтому, например, я Subversion даже&lt;br /&gt;
трехметровым багром трогать не буду.&lt;br /&gt;
В Subversion большой репозиторий, куда все обязаны складывать свои данные.&lt;br /&gt;
А централизованная модель просто не работает,&lt;br /&gt;
когда… давайте взглянем на некоторые такие случаи.&lt;br /&gt;
&lt;br /&gt;
[''Показывает слайд «Distribution» с пунктами'']&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk-slide-distribution2.jpg|frame|Слайд «Distribution» с пунктами]]&lt;br /&gt;
&lt;br /&gt;
Я сказал, что распределенность — это гораздо больше, чем просто работа в оффлайн,&lt;br /&gt;
но это, пожалуй, понять проще всего:&lt;br /&gt;
вы можете взять по-настоящему распределенную SCM с собой в самолет и,&lt;br /&gt;
даже если в нем нет ни wi-fi, ни спутникового интернета,&lt;br /&gt;
вы просто продолжаете работать — вы можете посмотреть любые логи,&lt;br /&gt;
вы можете фиксировать изменения, вы можете делать все, что вы бы делали,&lt;br /&gt;
если бы вы были подключены прямо к магистральному каналу с гигабитным Ethernet.&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;
И это действительно очень важно и очень сильно отличается от работы в CVS,&lt;br /&gt;
где ветвление считается уделом настоящих мастеров.&lt;br /&gt;
&lt;br /&gt;
Кто из вас когда-либо пользовался CVS?&lt;br /&gt;
&lt;br /&gt;
[''Слушатели поднимают руки'']&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;
Считается, что это сложная операция. В 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;
На самом деле, в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; мы так любим ветки, что многие держат их по 10-15 штук,&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;
Если вы пользуетесь CVS, вы не можете так сделать, если вы используете…&lt;br /&gt;
кстати, чем вы здесь пользуетесь?&lt;br /&gt;
&lt;br /&gt;
Perforce?… [[EnPedia:Perforce|Perforce]]. Ну да, извините.&lt;br /&gt;
Да, он, конечно же, лучше, чем [[CVS]].&lt;br /&gt;
&lt;br /&gt;
[''Слушатели смеются'']&lt;br /&gt;
&lt;br /&gt;
Но все равно это по сути CVS.&lt;br /&gt;
&lt;br /&gt;
Еще одна прикольная вещь, хотя у вас в компании возможно этого и нет,&lt;br /&gt;
но это обязательно есть во всех командах, разрабатывающих свободное ПО,&lt;br /&gt;
которые используют CVS или Subversion или что-то вроде этого, это то,&lt;br /&gt;
что они пользуются понятием «commit access».&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;
людям: «''Эй, тут в моей ветви все работает в десять раз быстрее, чем у всех остальных,&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;
Так что немедленно избавьтесь от Perforce!&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;
[[Image:Linus-git-googletalk.0-21-39.872.jpg|frame|right|И как вы собираетесь это делать?]]&lt;br /&gt;
&lt;br /&gt;
{{question}} Вопрос. И как вы собираетесь это делать?&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;
В 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;
Я уверен, что это так даже у вас, в Google.&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;
ведь почти всегда любой программист скажет: «Ха, я сделаю это за 48 часов».&lt;br /&gt;
А потом выясняется, что «не-а, не могу».&lt;br /&gt;
&lt;br /&gt;
Но так как вы думаете, что сможете сделать это за 48 часов, вам очень лень&lt;br /&gt;
создавать ветвь, даже в таких системах, в которых это делать удобнее, чем в CVS.&lt;br /&gt;
И вы этого не делаете, потому что думаете, что как-нибудь справитесь с этим&lt;br /&gt;
и вы возвращаетесь к случаю № 1, но даже если вы решите создать ветвь, то будете&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;
когда эта группа все сделает через две недели, они&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;
И это модель, которая используется в разработке ядра Linux.&lt;br /&gt;
Оказывается, что во многих местах нам не нужна вся эта мощь, даже в ядре.&lt;br /&gt;
И люди обычно не обмениваются обновленным кодом внутри одной группы, но иногда&lt;br /&gt;
случается, например, что те, кто работает над сетью, иногда сталкиваются с&lt;br /&gt;
людьми, которые работают над NFS, и то, что они могут синхронизироваться,&lt;br /&gt;
действительно помогает.&lt;br /&gt;
То есть это действительно помогает!&lt;br /&gt;
&lt;br /&gt;
У кого-то еще есть вопрос?&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk.0-27-03.671.jpg|frame|right|Похоже, что все эти правила и ограничения просто переместились или стали неявными.…]]&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
{{question}} Похоже, что все эти правила и ограничения просто переместились или стали неявными.&lt;br /&gt;
Да, у каждого есть доступ и все играются со своими ветвями в песочнице, но к вечеру&lt;br /&gt;
ветви нужно соединять и разрешать все конфликты чтобы не было 80&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;
В своей работе я не доверяю всем без исключения.&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;
Мне нужно доверять только 5, 10, ну может 15 людям.&lt;br /&gt;
Если у меня есть доверенная сеть, в которую входят эти 5, 10, 15 выдающихся&lt;br /&gt;
человек, и я знаю, что они выдающиеся, я могу забирать новый код&lt;br /&gt;
у них.&lt;br /&gt;
И мне не надо париться на эту тему.&lt;br /&gt;
&lt;br /&gt;
Когда Эндрю присылает мне патчи, он не использует никакого &amp;lt;tt&amp;gt;git&amp;lt;/tt&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;
[[Image:Linus-git-googletalk.0-30-08.466.jpg|frame|right|Именно так я и работаю…]]&lt;br /&gt;
&lt;br /&gt;
Именно так я и работаю, скорее всего также действуют и мои поручики/заместители&lt;br /&gt;
&amp;lt;ref&amp;gt;В оригинале ''lieutenants'', поэтому часто в рунете помощников Линуса зовут «лейтенантами».&amp;lt;/ref&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;
у нас есть специальное «-mm»&amp;lt;ref&amp;gt;Экспериментальная ветвь ядра Linux, специализированная на управлении памятью, см. [[EnPedia:Mm_tree]].&amp;lt;/ref&amp;gt; дерево, в котором много выделенных «точек», просто так получается, что&lt;br /&gt;
моя точка привлекает, быть может, больше внимания, чем должна была бы.&lt;br /&gt;
&lt;br /&gt;
Даже если что-то там не придет к этой одной точке, это значит, что&lt;br /&gt;
можно взять тысячи этих ветвей, игнорируя &amp;lt;tt&amp;gt;99.9%&amp;lt;/tt&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;
У нас есть 5, 7, 10 близких личных друзей, ну ладно, пусть мы асоциальные гики,&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;
[[Image:linus-git-googletalk.0-31-51.970.jpg|frame|right|Знаете ли вы о компаниях, которые используют распределенные системы у себя внутри?]]&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
{{question}} Знаете ли вы о компаниях, которые используют распределенные системы у себя внутри?&lt;br /&gt;
Похоже, тут есть вероятность «сепаратизма» в коде,&lt;br /&gt;
так как народ, разбредется по собственным песочницам, и&lt;br /&gt;
не будет вкладываться в основной ствол.&lt;br /&gt;
&lt;br /&gt;
'''Линус:'''&lt;br /&gt;
&lt;br /&gt;
Честно говоря, не так уж и много распределенных систем.&lt;br /&gt;
Это BitKeeper, очевидно использующийся коммерческими компаниями,&lt;br /&gt;
мы должны иметь в аудитории кого-нибудь, кто действительно знает, но что …&lt;br /&gt;
[''комментарий из аудитории''], ага,&lt;br /&gt;
HP использует такие системы как BitKeeper в проектах разработки принтеров.&lt;br /&gt;
&lt;br /&gt;
Я уверен, что таких компаний немало.&lt;br /&gt;
В мире open-source ПО, есть пара распределенных&lt;br /&gt;
систем, которых стоит посмотреть прямо сейчас.&lt;br /&gt;
Очевидно одна из них — &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
И вы, конечно, должны выбрать ее.&lt;br /&gt;
&lt;br /&gt;
Но есть и другая — Mercurial, которая на самом деле очень похожа по архитектуре.&lt;br /&gt;
Есть некоторые различия в деталях архитектуры и большие различия в реализации,&lt;br /&gt;
но в сухом остатке модели очень похожи.&lt;br /&gt;
Только &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; делает это лучше.&lt;br /&gt;
&lt;br /&gt;
Все остальное либо централизованное, либо сырое, либо слишком медленное&lt;br /&gt;
для достаточно больших проектов.&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
{{question}} А какие преимущества у компании, когда все играются в собственных песочницах?&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;tt&amp;gt;git&amp;lt;/tt&amp;gt;, в смысле, чтобы решение по его использованию&lt;br /&gt;
было принято на уровне корпоративного стандарта.&lt;br /&gt;
&lt;br /&gt;
Я знаю несколько компаний, которые внутри&lt;br /&gt;
используют &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, не подозревая об этом, потому что они все еще держат&lt;br /&gt;
свои главные репозитории в Subversion, но многие разработчики затем&lt;br /&gt;
импортируют код в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, потому что &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; действительно хорошо выполняет слияния.&lt;br /&gt;
Так что вы можете взять дерево веток из Subversion, импортировать в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
позволить &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; сделать слияние,&lt;br /&gt;
что было бы основной головной болью в Subversion,&lt;br /&gt;
зафиксировать изменения и фактически экспортировать их назад в Subversion,&lt;br /&gt;
и никто другой даже не узнает, что вы использовали &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Немного грустно, но я слышал о многих,&lt;br /&gt;
работающих в компаниях в точности по этому сценарию.&lt;br /&gt;
&lt;br /&gt;
А вот чтобы постоянно использовать &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; подряд в течении полугода или больше — таких людей пока еще мало.&lt;br /&gt;
&lt;br /&gt;
Мы сделали масштабные улучшения пользовательских интерфейсов,&lt;br /&gt;
честно говоря, еще год назад в коммерческих компаниях&lt;br /&gt;
многие говорили, что его слишком трудно использовать.&lt;br /&gt;
&lt;br /&gt;
Я думаю, что мы прошли переломный момент.&lt;br /&gt;
Git намного проще использовать, чем 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;
[[Image:linus-git-googletalk.0-34-59.000.jpg|frame|right|Как вы сводите к минимуму конфликты слияний?]]&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
{{question}} Одна из характеристик централизованных систем — это то, что именно&lt;br /&gt;
тот разработчик, который должен коммитить, обязан также&lt;br /&gt;
провести слияние. Как с этим в &amp;lt;tt&amp;gt;git&amp;lt;/tt&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;
Одно из самых приятных свойств &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; это то, что он реально проще&lt;br /&gt;
разбирается со слиянием, чем все остальные системы.&lt;br /&gt;
Объединение ветвей в CVS происходит крайне мучительно, просто невыносимо.&lt;br /&gt;
&lt;br /&gt;
По моим подсчетам ядро Линукса — это на самом деле один из крупнейших&lt;br /&gt;
проектов с открытыми исходниками.&lt;br /&gt;
У нас &amp;lt;tt&amp;gt;22 000&amp;lt;/tt&amp;gt; файлов.&lt;br /&gt;
&lt;br /&gt;
Мы используем &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; уже два года.&lt;br /&gt;
В течение этих двух лет у нас было в среднем &amp;lt;tt&amp;gt;4.5&amp;lt;/tt&amp;gt; слияния в день!&lt;br /&gt;
&lt;br /&gt;
Если бы слияние было бы сложным, то точно пользовались чем-то другим.&lt;br /&gt;
Так что &amp;lt;tt&amp;gt;git&amp;lt;/tt&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;
Они знают, что делать, потому что это их изменения.&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;
Далее мне просто нужно подсчитать третью составляющую — ''PROFIT!!!''&lt;br /&gt;
&lt;br /&gt;
Все это аспект, естественным образом возникающий в распределенных системах,&lt;br /&gt;
это не особенность &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;. Да, &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; справляется со слияниями гораздо проще, чем все остальные,&lt;br /&gt;
но это свойство вытекает из самой распределенной модели.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:linus-git-googletalk.0-38-02.885.jpg |frame|right|…зачем вам так нужно иметь эту распределенную систему?]]&lt;br /&gt;
&lt;br /&gt;
'''Зритель''':&lt;br /&gt;
&lt;br /&gt;
{{question}} Слушай, я не совсем понимаю, зачем вам так нужно&lt;br /&gt;
иметь эту распределенную систему…&lt;br /&gt;
Ну да, вроде получаешь кучу преимуществ, по крайней мере&lt;br /&gt;
для коммерческой разработки, да и для разработки open-source наверно очень полезно,&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;
в течение последних 35 лет.&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;
но это ноутбук 4-5-летней давности.&lt;br /&gt;
Что-то типа ''Pentium-M 1.6 GHz''.&lt;br /&gt;
&lt;br /&gt;
Я мог бы показать вам, что полный &amp;lt;tt&amp;gt;diff&amp;lt;/tt&amp;gt; проекта Linux Kernel&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;tt&amp;gt;commit&amp;lt;/tt&amp;gt; или &amp;lt;tt&amp;gt;diff&amp;lt;/tt&amp;gt; всего дерева исходников за 30 секунд,&lt;br /&gt;
то, может быть, 30 секунд вам не покажутся злом.&lt;br /&gt;
&lt;br /&gt;
Но поверьте, когда вы привыкли делать это за одну десятую секунды,&lt;br /&gt;
30 секунд — это полный отстой.&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;
Вы назовете ее «test»?&lt;br /&gt;
Ага-ага, уже есть 5000 других веток,&lt;br /&gt;
названных «test1», «test2», … «test5000», так что вам теперь придется&lt;br /&gt;
выдумывать новые правила именования&lt;br /&gt;
ваших веток, потому что у вас централизованная система&lt;br /&gt;
с централизованным пространством имен у ветвей,&lt;br /&gt;
что совершенно неизбежно при работе с централизованной системой.&lt;br /&gt;
&lt;br /&gt;
Как же это работает в распределенной среде разработки?&lt;br /&gt;
&lt;br /&gt;
Вы называете свою ветку «test», и все!&lt;br /&gt;
Ну на самом деле, вам не следовало бы ее так называть, веткам нужно давать имена&lt;br /&gt;
согласно их функциональности; называйте их кратко, благозвучно&lt;br /&gt;
и конкретно — что эта ветвь делает.&lt;br /&gt;
&lt;br /&gt;
Git дает вам по умолчанию одну ветку под названием «master»:&lt;br /&gt;
красиво, коротко и ясно — это ваш основной ствол.&lt;br /&gt;
&lt;br /&gt;
Но вы можете создать ветку под названием&lt;br /&gt;
«experimental-feature-x» — и все будет понятно.&lt;br /&gt;
&lt;br /&gt;
Но в централизованной среде вы просто не сможете так сделать.&lt;br /&gt;
Вы не можете назвать ветку «experimental-feature-x».&lt;br /&gt;
Вы должны придумывать тупые, идиотские названия.&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;
вашу ветвь: «то-то-и-то-то—56».&lt;br /&gt;
&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;
Таков расклад.&lt;br /&gt;
&lt;br /&gt;
Как бы то ни было, перейдем к слайду «Performance».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:linus-git-googletalk.0-43-15.833.jpg|frame|right|…сколько файлов осилит &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;?]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Зритель''':&lt;br /&gt;
&lt;br /&gt;
{{question}} Могу я задать вопрос?&lt;br /&gt;
&lt;br /&gt;
'''Линус''':&lt;br /&gt;
&lt;br /&gt;
Давай.&lt;br /&gt;
&lt;br /&gt;
'''Зритель''':&lt;br /&gt;
&lt;br /&gt;
{{question}} На самом деле, два вопроса.&lt;br /&gt;
Первый: сколько файлов осилит &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;?&lt;br /&gt;
а второй, представьте, что у вас здоровенная древовидная структура файлов в &amp;lt;tt&amp;gt;git&amp;lt;/tt&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;
Одно из особенных свойств &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; — отслеживание изменений всего содержимого,&lt;br /&gt;
и это отличает &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; даже от [[EnPedia:Mercurial_(software)|Mercurial]], несмотря на то, что они очень похожи.&lt;br /&gt;
&lt;br /&gt;
Он никогда не отслеживает отдельный файл.&lt;br /&gt;
Вы не можете прослеживать изменения файла в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ну, вы можете проследить изменения проекта, в котором один единственный файл.&lt;br /&gt;
Если в вашем проекте один файл, то у вас все получится,&lt;br /&gt;
но если вы отслеживаете изменения в десяти тысячах файлов, то &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; никогда не будет&lt;br /&gt;
возиться с ними по отдельности.&lt;br /&gt;
 &lt;br /&gt;
Git думает, что все вокруг — это единый проект.&lt;br /&gt;
Вся история в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; основана на истории проекта целиком.&lt;br /&gt;
&lt;br /&gt;
Отсюда — важные следствия для производительности.&lt;br /&gt;
&lt;br /&gt;
Когда вы используете CVS, вполне нормально, хотя и глупо,&lt;br /&gt;
иметь один здоровенный репозиторий с миллионом файлов внутри.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в конце дня, поскольку CVS думает о каждом&lt;br /&gt;
из миллиона файлов по отдельности,&lt;br /&gt;
вы можете попросить CVS обновить только один единственный файл —&lt;br /&gt;
все это в рамках CVS-идеологии.&lt;br /&gt;
И это верно для множества других моментов.&lt;br /&gt;
&lt;br /&gt;
Точно также работает и BitKeeper, и это является одной из его ошибок.&lt;br /&gt;
&lt;br /&gt;
Проблема мышления в «концепции наблюдения за каждым файлом по отдельности»&lt;br /&gt;
возникает очень часто, особенно, если вы разработчик высокого уровня (как я).&lt;br /&gt;
У меня 22 тысячи файлов, и мне пофигу, что происходит с одним из них.&lt;br /&gt;
Возможно, я буду следить за подмножеством из тысячи файлов,&lt;br /&gt;
например, коллекцией файлов по подсистеме USB.&lt;br /&gt;
Но я никогда не беспокоюсь о каком-то отдельном файле.&lt;br /&gt;
&lt;br /&gt;
Поэтому &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; следит за всем, как за коллекцией файлов,&lt;br /&gt;
и если вы попросите историю конкретного файла,&lt;br /&gt;
&amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; буквально начнет с глобальной истории и упростит ее.&lt;br /&gt;
Это очень эффективная система, вам даже в голову не придет что это так,&lt;br /&gt;
но в действительности, когда вы пытаетесь следить за миллионом файлов&lt;br /&gt;
в репозитории, а потом просите историю конкретного файла — это очень тормозит систему.&lt;br /&gt;
Таким образом, свойства масштабирования у &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; сильно отличаются от других систем,&lt;br /&gt;
благодаря этой фундаментальной особенности.&lt;br /&gt;
&lt;br /&gt;
Мы работали с большими репозиториями.&lt;br /&gt;
Мы импортировали историю проекта KDE из SVN, может быть, не всего,&lt;br /&gt;
но уж &amp;lt;m&amp;gt;\frac34&amp;lt;/m&amp;gt; точно.&lt;br /&gt;
И KDEнутые … эээ… ''Я не должен так их называть… Я не буду, поверьте, мне нравится KDE.''&lt;br /&gt;
&lt;br /&gt;
Но они засунули все компоненты в один репозиторий!&lt;br /&gt;
Не слишком умно.&lt;br /&gt;
Получилось так, что тот репозиторий, который, думаю, весил 8 Гб под CVS,&lt;br /&gt;
в SVN разбух еще в три раза!&lt;br /&gt;
Ну может там было меньше 8 Гб под CVS, но он был действительно огромным.&lt;br /&gt;
Точно больше 4 Гб.&lt;br /&gt;
Git же сжал это безобразие до где-то 1.3 Гб.&lt;br /&gt;
&lt;br /&gt;
Итак, &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; очень эффективен в обработке этого проекта,&lt;br /&gt;
почти все работает отлично, но не все и не всегда.&lt;br /&gt;
&lt;br /&gt;
Система не заработает хорошо, если вы поместите миллион файлов&lt;br /&gt;
в один репозиторий при начальном клонировании.&lt;br /&gt;
Когда вы его запрашиваете, вы получаете его целиком.&lt;br /&gt;
Вы сваливаете все в один репозиторий, &amp;lt;tt&amp;gt;git&amp;lt;/tt&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;
Потому что с &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; вам придется получить все и сразу.&lt;br /&gt;
&lt;br /&gt;
'''Из зала''':&lt;br /&gt;
{{question}} Как насчет разделяемого кода?&lt;br /&gt;
&lt;br /&gt;
'''Линус''':&lt;br /&gt;
&lt;br /&gt;
Если они все «расшарили» свой код, что вы можете сделать с помощью &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
если у вас действительно много «расшаренных» файлов,&lt;br /&gt;
то поскольку &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; внутри использует «файловую систему идентифицируемую содержимым»,&lt;br /&gt;
то если существуют одинаковые по содержанию файлы,&lt;br /&gt;
&amp;lt;tt&amp;gt;git&amp;lt;/tt&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;
один репозиторий &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, который просто отслеживает остальные репозитории &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
(и он тоже может содержать например, разделяемую инфраструктуру сборки),&lt;br /&gt;
но при этом индивидуальные части остаются индивидуальными.&lt;br /&gt;
 &lt;br /&gt;
Это похоже на модули CVS.&lt;br /&gt;
В CVS модули не до конца индивидуальны, но это потому,&lt;br /&gt;
что в CVS каталог — это вещь, которая всегда сама по себе,&lt;br /&gt;
так что модуль CVS — это комбинация «каталожности» и их отслеживания,&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;
[[Image:linus-git-googletalk.0-49-34.467.jpg|frame|right|Можно ли извлечь из репозитория только часть файлов?]]&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
{{question}} Можно ли извлечь из репозитория только часть файлов, а не целый репозиторий?&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;tt&amp;gt;git&amp;lt;/tt&amp;gt; не может обрабатывать большие проекты,&lt;br /&gt;
просто производительность будет не так хороша,&lt;br /&gt;
а вы будете иметь проблемы, которых можно было бы избежать.&lt;br /&gt;
&lt;br /&gt;
Так что я пропускаю этот вопрос и возвращаюсь к теме производительности.&lt;br /&gt;
&lt;br /&gt;
== Performance ==&lt;br /&gt;
&lt;br /&gt;
Одна из вещей, которую я хочу сказать по поводу производительности,&lt;br /&gt;
это то, что, похоже, огромное количество людей, кажется, думают, что&lt;br /&gt;
производительность это «как делать то же самое, но быстрее»,&lt;br /&gt;
а это неправда.&lt;br /&gt;
&lt;br /&gt;
''[показывает слайд «Производительность».]''&lt;br /&gt;
[[Image:Linus-git-googletalk.0-51-10.996.jpg|right]]&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;
как мне кажется, разработчики Subversion показали себя полными идиотами.&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;
Например, Subversion очень шумно хвалится, что&lt;br /&gt;
они исправили CVS, сделав ветвления дешевыми.&lt;br /&gt;
Это есть на их главной странице, где они вроде говорят,&lt;br /&gt;
что ветвление в SVN требует ''O(1)'' операций,&lt;br /&gt;
и что можно сделать дешевых ветвей столько, сколько хотите.&lt;br /&gt;
&lt;br /&gt;
Неважно, что ''O(1)'', мне кажется, на самом деле имеет&lt;br /&gt;
довольно большое ''O'', но даже если ветвление занимает микросекунду,&lt;br /&gt;
кого это волнует?&lt;br /&gt;
&lt;br /&gt;
Вы меряете не то, что нужно.&lt;br /&gt;
&lt;br /&gt;
Ветки полностью бесполезны, если Вы не объединяете их,&lt;br /&gt;
а CVS не может объединить вообще ничего.&lt;br /&gt;
Вы можете слить изменения однажды,&lt;br /&gt;
но тогда CVS забывает то, что вы сделали, и вы никогда не&lt;br /&gt;
сможете объединять снова, не получая адские конфликты.&lt;br /&gt;
Слияния в Subversion — полная беда.&lt;br /&gt;
Разработчики Subversion отчасти признают это, и у них есть некий замысел,&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;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
буквально заключаются в создании 41-байтного файла.&lt;br /&gt;
Ну насколько это быстро, как думаете?&lt;br /&gt;
Не думаю, что вы даже сможете это измерить.&lt;br /&gt;
Вы можете, в общем, если вы используете Windows, вероятно&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;tt&amp;gt;git&amp;lt;/tt&amp;gt; вы можете объединить… я сливаю изменения в 22 тысячах файлов несколько раз в день, и я недоволен,&lt;br /&gt;
если объединение занимает более пяти секунд,&lt;br /&gt;
и все эти пять секунд загружаются в основном уходят на загрузку ''diffs'', ладно, не ''diffs'',&lt;br /&gt;
а дельты между двумя деревьями, а само объединение занимает менее&lt;br /&gt;
чем полсекунды.&lt;br /&gt;
&lt;br /&gt;
И я не должен думать об этом.&lt;br /&gt;
&lt;br /&gt;
Вот что длится дольше чем слияние, это то, что после каждого слияния,&lt;br /&gt;
по умолчанию &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; сделает &amp;lt;tt&amp;gt;diffstat&amp;lt;/tt&amp;gt;&lt;br /&gt;
всего, что изменилось в результате объединения, потому что&lt;br /&gt;
мне это важно.&lt;br /&gt;
Когда я вливаю чьи-то изменения, я им доверяю, но с другой стороны,&lt;br /&gt;
вдруг они уже забросили свои лекарства?&lt;br /&gt;
Так что я доверяю им, да, но будем говорить начистоту — может&lt;br /&gt;
они были в порядке вчера, но сегодня был не их день…&lt;br /&gt;
Так что для контроля я делаю &amp;lt;tt&amp;gt;diffstat&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; тоже делает &amp;lt;tt&amp;gt;diffstat&amp;lt;/tt&amp;gt; по умолчанию,&lt;br /&gt;
хотя вы конечно можете для скорости его отключить, но лучше не надо,&lt;br /&gt;
&amp;lt;tt&amp;gt;diffstat&amp;lt;/tt&amp;gt; по-любому быстр, и обычно занимает…, ну если большое слияние,&lt;br /&gt;
обычно занимает секунду-другую.&lt;br /&gt;
Поскольку создание ''diff'' и фактически подсчет статистики о том, сколько&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;tt&amp;gt;git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Hg (Mercurial) довольно хорош, но &amp;lt;tt&amp;gt;git&amp;lt;/tt&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;
что там всего где-то 80000 строк, в основном на 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;
Когда вы делаете слияние 22 тысяч файлов, вы не хотите проверять по одному файлу,&lt;br /&gt;
вы хотите посмотреть все дерево сразу и сказать:&lt;br /&gt;
«А они же одинаковые, я не должен ничего делать».&lt;br /&gt;
В общем, &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; делает все такие штуки, и все это несколько раздувает объем кода,&lt;br /&gt;
ибо по-уму все это сделать непросто, но основы все же очень и очень просты.&lt;br /&gt;
&lt;br /&gt;
И одна из этих основ, это аспект безопасности и надежности.&lt;br /&gt;
&lt;br /&gt;
''Показывает слайд:''&lt;br /&gt;
[[Image:linus-git-googletalk.0-56-39.330.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
Когда &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; отслеживает ваш проект, мы сжимаем каждый блок данных,&lt;br /&gt;
вычисляя дельту (различия) по отношению ко всем другим блокам,&lt;br /&gt;
кроме того мы вычисляем SHA-1 хеш, который проверяется при&lt;br /&gt;
необходимости достать этот блок.&lt;br /&gt;
&lt;br /&gt;
Если у вас побился диск или память, или что-то еще в этом роде — &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; об этом сообщит.&lt;br /&gt;
Это даже не вопрос. Это безусловная и безоговорочная гарантия.&lt;br /&gt;
&lt;br /&gt;
У вас могут быть люди, пытающиеся навредить.&lt;br /&gt;
У них не выйдет.&lt;br /&gt;
&lt;br /&gt;
Вам нужно точно знать 20 байтов 160-битного SHA-1 хеша от верхушки вашего дерева,&lt;br /&gt;
и если вы их знаете, вы сможете доверять вашему дереву сверху донизу,&lt;br /&gt;
всей истории целиком.&lt;br /&gt;
У вас может быть десять лет истории проекта с сотней тысяч файлов,&lt;br /&gt;
миллионами ревизий, но вы сможете доверять любой части любой ревизии.&lt;br /&gt;
Потому что &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; такой надежный, и все его основные структуры данных&lt;br /&gt;
очень-очень просты.&lt;br /&gt;
&lt;br /&gt;
Да, мы проверяем контрольные суммы.&lt;br /&gt;
Но мы не считаем ''слабую'' контрольную сумму, как у некоторых UDP пакетов,&lt;br /&gt;
то есть 16-битную сумму всех байтов.&lt;br /&gt;
Мы проверяем контрольные суммы, которые считаются криптографически стойкими.&lt;br /&gt;
&lt;br /&gt;
Никто не может взломать SHA-1, но дело в том, что для &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
SHA-1 это не функционал информационной безопасности,&lt;br /&gt;
а просто проверка целостности.&lt;br /&gt;
Безопасность там отдельно.&lt;br /&gt;
&lt;br /&gt;
А то полно народу думают, что раз &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; использует SHA-1,&lt;br /&gt;
а SHA-1 используется во всяком криптографическом софте,&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;
Я вам гарантирую, что если вы положите ваши данные в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
спустя пять лет, даже если вы сконвертировали их с вашего&lt;br /&gt;
винчестера на какой нибудь DVD, или что там будет вместо него, &lt;br /&gt;
вы сможете проверить ваши данные и вернуть их назад в том же состоянии,&lt;br /&gt;
в котором вы поместили их в систему.&lt;br /&gt;
Именно этого вы и должны ждать от любой системы контроля версий.&lt;br /&gt;
&lt;br /&gt;
Одна из причин, по которой я так агитирую за это, состоит в том,&lt;br /&gt;
что у нас был случай со взломом одного из сайтов BitKeeper’а,&lt;br /&gt;
когда народ пытался испортить репозиторий с исходниками ядра,&lt;br /&gt;
а BitKeeper отловил эту попытку.&lt;br /&gt;
Но BitKeeper не имеет по настоящему крутого хеша,&lt;br /&gt;
думаю, там простейший 16-CRC код, или что-то типа этого.&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;
ну, например, вы делаете ваш проект [[EnPedia:Google Code|Google code]],&lt;br /&gt;
где можно держать исходники в ваших репозитариях,&lt;br /&gt;
так вот — я бы никогда не доверил Google хранить и поддерживать мои исходники.&lt;br /&gt;
Извините, но вы еще не заслужили моего доверия.&lt;br /&gt;
&lt;br /&gt;
Причина, по которой я предпочитаю распределенные системы,&lt;br /&gt;
состоит в том, что я могу держать свой исходный текст позади&lt;br /&gt;
трех брандмауэров на системе, которая не позволяет даже по &amp;lt;tt&amp;gt;ssh&amp;lt;/tt&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;
Я позволю Google держать копию репозитория, но&lt;br /&gt;
хочу чтобы было что-то, про что я знаю точно, что никто это не трогал.&lt;br /&gt;
&lt;br /&gt;
Кстати, я не такой уж и крутой сисадмин, так что сбой на винте&lt;br /&gt;
для меня определенно будет проблемой, так как бэкапами я не заморачиваюсь.&lt;br /&gt;
Но все будет в порядке, если я смогу загрузить обратно данные из нескольких&lt;br /&gt;
доверенных источников. Я смогу их сравнить друг с другом, это реально просто,&lt;br /&gt;
я смогу сверить их хеши с теми самыми 20 байтами, о которых я очень-очень&lt;br /&gt;
заботился — надеюсь, в нескольких местах они останутся.&lt;br /&gt;
&lt;br /&gt;
20 байтов отследить легче, чем 180 МБ.&lt;br /&gt;
&lt;br /&gt;
И очень маловероятно, что побьются именно эти 20 байтов.&lt;br /&gt;
&lt;br /&gt;
И если у меня есть эти 20 байтов, я могу загрузить &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;-репозитрий даже&lt;br /&gt;
из совершенно «левого» источника, и могу гарантировать, что они не сделали с ним ничего плохого.&lt;br /&gt;
&lt;br /&gt;
Ваш проект [Google Code] — хостинг репозитариев для народа — крутое и благое дело,&lt;br /&gt;
вот только вы неправильно делаете, если используете для него Subversion.&lt;br /&gt;
Из-за вас люди ночами спать спокойно не будут!&lt;br /&gt;
&lt;br /&gt;
Конечно, если вы делаете это для 70 … , сколько там проектов,&lt;br /&gt;
75 тысяч?&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;
== Content Management ==&lt;br /&gt;
&lt;br /&gt;
Я уже немного говорил на тему «Полный целостный проект vs. Отдельные файлы»,&lt;br /&gt;
и что &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; отслеживает именно полный проект.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:linus-git-googletalk.1-03-18.642.jpg|framed|right| «Это гораздо больше чем случайный набор файлов»]]&lt;br /&gt;
&lt;br /&gt;
Ну тут на слайде единственный пример с вызовом из командной строки,&lt;br /&gt;
''gitk'' — это GUI вьювер истории проекта под &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
это скрипт на tcl/tk для просмотра всей той информации, которую &amp;lt;tt&amp;gt;git&amp;lt;/tt&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;
Этот функционал &amp;lt;tt&amp;gt;git&amp;lt;/tt&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;
и вы можете сразу засечь — «Ага, это подсистема SCSI».&lt;br /&gt;
&lt;br /&gt;
Вот командная строка (''указывает на слайд'').&lt;br /&gt;
&lt;br /&gt;
Вы не можете указать точно проблемный файл, но можете сказать:&lt;br /&gt;
«Удали последние 15 тысяч коммитов, сделанных с прошлой недели, и он откатит&lt;br /&gt;
проект до 50 [коммитов]»&lt;br /&gt;
&lt;br /&gt;
Это круто, и никакая другая система так не может, уверяю.&lt;br /&gt;
&lt;br /&gt;
Вот поэтому вы и должны хотеть использовать именно &amp;lt;tt&amp;gt;git&amp;lt;/tt&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;
[[Image:linus-git-googletalk.1-05-57.109.jpg|framed|right|…будет просто дрейф проблем с масштабируемостью…?]]&lt;br /&gt;
&lt;br /&gt;
'''''Слушатель:'''''&lt;br /&gt;
&lt;br /&gt;
{{question}} Итак, причина ухода с Perforce — на самом деле масштабируемость и эффективность.&lt;br /&gt;
Иначе люди просто продолжат ее использовать.&lt;br /&gt;
И может, при переходе будет просто дрейф проблем с масштабируемостью и производительностью&lt;br /&gt;
из одной области в другую?&lt;br /&gt;
&lt;br /&gt;
'''''Линус:'''''&lt;br /&gt;
&lt;br /&gt;
Ну я уже говорил, что я без понятия, как вы работаете&lt;br /&gt;
с Perforce, и какие с ним проблемы, но если вы перейдете на &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
вы можете быть в нем уверены, если, конечно,&lt;br /&gt;
вы будете использовать его в разумных пределах.&lt;br /&gt;
А эти пределы обычно достаточно очевидны.&lt;br /&gt;
У вас есть компилятор, основные исходники,&lt;br /&gt;
документация, ну может ваша документация разбросана как-то фрагментами,&lt;br /&gt;
хотя наверняка у вас есть что-то типа пользовательской документации,&lt;br /&gt;
может в Google не так, но во многих компаниях отдельно&lt;br /&gt;
идет набор документации для потребителей&lt;br /&gt;
и документации, сопровождающей отдельные модули и пакеты.&lt;br /&gt;
&lt;br /&gt;
Так что одним из моментов использования &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, о котором стоит подумать,&lt;br /&gt;
это как организовать разумную структуру проекта.&lt;br /&gt;
Git легко поддерживает здоровые проекты, вы можете без проблем держать в нем&lt;br /&gt;
десятки тысяч файлов, вот в Ядре, например, их 22 тысячи.&lt;br /&gt;
Мы тестировали на ста тысячах — и все было в порядке — &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; быстрей, чем что бы то ни было.&lt;br /&gt;
&lt;br /&gt;
С миллионом файлов, подозреваю, другие системы, могут быть в чем-то и побыстрее.&lt;br /&gt;
И не хотелось бы, чтобы вы попали в такую ситуацию.&lt;br /&gt;
Но если вы правильно организуете проект и грамотно настроите,&lt;br /&gt;
&amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; будет и быстрее и лучше, что все остальное.&lt;br /&gt;
Я уверен в его исключительной производительности.&lt;br /&gt;
&lt;br /&gt;
Вот одна из вещей, которую мы не очень хорошо делаем,&lt;br /&gt;
это «CVS annotate»&amp;lt;ref&amp;gt;Команда, сообщающая по каждой строчке автора, совершившего в этой строчке последнее изменение и последнюю ревизию, в которой эта строчка менялась.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Люди часто используют эту команду.&lt;br /&gt;
Я говорил, что у Perforce оно тормозит, так что вы,&lt;br /&gt;
вероятно, хотя и не уверен, не используете Perforc’ный «annotate».&lt;br /&gt;
Но пользователи CVS используют «CVS annotate»,&lt;br /&gt;
эту единственную операцию, которую CVS может выполнять быстрее, чем &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
потому что CVS работает «пофайлово», а &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; — нет.&lt;br /&gt;
&lt;br /&gt;
У &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; есть «annotate», но фактически это будет поиск,&lt;br /&gt;
вы можете узнать об этом, если вы переместите функцию из одного файла в другой,&lt;br /&gt;
&amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; дословно воспроизведет историю функции, даже несмотря на перемещение.&lt;br /&gt;
Внимание, не перемещение файла, а функцию в пределах файла&lt;br /&gt;
он пойдет и откопает и скажет:&lt;br /&gt;
«Эй! Эти две строки на самом деле пришли из&lt;br /&gt;
того файла 5 лет назад».&lt;br /&gt;
&lt;br /&gt;
Опять-таки, это оригинальный функционал, который больше никто не тянет,&lt;br /&gt;
и сводится он к тому же, что рулит контент проекта целиком, а не файлы по отдельности.&lt;br /&gt;
Но за это приходится платить, так что если вы отматываете лет на пять назад,&lt;br /&gt;
это может занять секунд 30.&lt;br /&gt;
На ядре это занимает секунду для любого имеющегося у меня файла,&lt;br /&gt;
ведь два года назад мы начали историю с чистого листа, решив&lt;br /&gt;
«давайте не будем усложнять то, что не требуется»,&lt;br /&gt;
— и прямо сейчас у нас имеется только двухлетняя история ядра.&lt;br /&gt;
&lt;br /&gt;
В других проектах у нас есть история и подлинней,&lt;br /&gt;
мы делали на них замеры, например, после импорта KDE и других проектов &lt;br /&gt;
с еще более длинной историей.&lt;br /&gt;
Тут бывают проблемы с производительностью, но все равно даже&lt;br /&gt;
с учетом таких проблем &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; на один-два порядка быстрее, так что&lt;br /&gt;
в основном беспокоиться не о чем.&lt;br /&gt;
&lt;br /&gt;
И если обнаружите какую-нибудь проблему, то у нас сейчас очень-очень&lt;br /&gt;
классное сообщество.&lt;br /&gt;
В &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;-овом списке email-рассылок уровень «шума» очень мал,&lt;br /&gt;
и хотя писем там изрядное количество, это очень вменяемый мейллист.&lt;br /&gt;
Итак, если кто-то заинтересовался, посмотрите исходники,&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;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>Trolzen</name></author>	</entry>

	</feed>