<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>LXF128:Interview - История изменений</title>
		<link>http://wiki2.linuxformat.ru/index.php?title=LXF128:Interview&amp;action=history</link>
		<description>История изменений этой страницы в вики</description>
		<language>ru</language>
		<generator>MediaWiki 1.11.1</generator>
		<lastBuildDate>Wed, 13 May 2026 23:41:00 GMT</lastBuildDate>
		<item>
			<title>Ewgen: исправлены ошибки, добавлены категории</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF128:Interview&amp;diff=12217&amp;oldid=prev</link>
			<description>&lt;p&gt;исправлены ошибки, добавлены категории&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 13:05, 24 июня 2011&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 17:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 17:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''LXF:''' Какие части проекта вам особенно интересны?''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''LXF:''' Какие части проекта вам особенно интересны?''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''ДжКМ:''' Моя любимая часть в этом проекте – дизайн API, выяснение того, что составляет хороший UI. Я имею в виду не тот интерфейс, который видят конечные пользователи, а другой, который применяют разработчики – хороший интерфейс прикладного программирования. Наш подход к разработке – сначала установить, как должен работать API, затем продумать его техническую реализацию. Конечно, есть искушение &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;зая вить &lt;/del&gt;«Ну, я выбрал этот способ, потому что мне так проще; пусть API на выходе будет менее ясным, зато его легче сделать», но мы стараемся так не поступать. Я часто пишу документацию для новых функций до написания самого кода, что бы осознать, как люди будут с ним взаимодействовать.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''ДжКМ:''' Моя любимая часть в этом проекте – дизайн API, выяснение того, что составляет хороший UI. Я имею в виду не тот интерфейс, который видят конечные пользователи, а другой, который применяют разработчики – хороший интерфейс прикладного программирования. Наш подход к разработке – сначала установить, как должен работать API, затем продумать его техническую реализацию. Конечно, есть искушение &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;заявить &lt;/ins&gt;«Ну, я выбрал этот способ, потому что мне так проще; пусть API на выходе будет менее ясным, зато его легче сделать», но мы стараемся так не поступать. Я часто пишу документацию для новых функций до написания самого кода, что бы осознать, как люди будут с ним взаимодействовать.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''LXF:''' Получается, «мы хотим, чтобы оно работало так – теперь давайте заставим его это делать…»''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''LXF:''' Получается, «мы хотим, чтобы оно работало так – теперь давайте заставим его это делать…»''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 23:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 23:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''ДжКМ:''' Верно. Я всегда ставлю себя на место пользователя и трачу намного больше времени на использование ''Django'', чем на его разработку. И, помоему, то же относится ко всем остальным. Главная наша цель – создать инструмент, удобный для пользования, и я не думаю, что это экзотика: это типично для Open Source.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''ДжКМ:''' Верно. Я всегда ставлю себя на место пользователя и трачу намного больше времени на использование ''Django'', чем на его разработку. И, помоему, то же относится ко всем остальным. Главная наша цель – создать инструмент, удобный для пользования, и я не думаю, что это экзотика: это типично для Open Source.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''LXF:''' Вы раньше говорили: вам нравится, что '''Django''' &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;работа ет &lt;/del&gt;подобно web. Какова зависимость между созданием '''Django''' webподобным и «питоновидным» — когда проект получает статус идиоматического кода '''Python'''?''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''LXF:''' Вы раньше говорили: вам нравится, что '''Django''' &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;работает &lt;/ins&gt;подобно web. Какова зависимость между созданием '''Django''' webподобным и «питоновидным» — когда проект получает статус идиоматического кода '''Python'''?''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''ДжКМ:''' Я думаю, что связь тут довольно близкая. ''Python'' ценит простоту, четкость и единообразие. Способ создания вещей REST (REpresentational State Transfer) – делать все через один и тот же интерфейс, а в'' Python'' и есть только один способ делать все. HTTP… полная спецификация состоит &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;гдето &lt;/del&gt;из 50 печатных страниц – она короткая, ее можно прочитать за один вечер. И я думаю, что у канонов ''Python'' и видения, основанного на множестве web-технологий, ценности схожи.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''ДжКМ:''' Я думаю, что связь тут довольно близкая. ''Python'' ценит простоту, четкость и единообразие. Способ создания вещей REST (REpresentational State Transfer) – делать все через один и тот же интерфейс, а в'' Python'' и есть только один способ делать все. HTTP… полная спецификация состоит &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;где-то &lt;/ins&gt;из 50 печатных страниц – она короткая, ее можно прочитать за один вечер. И я думаю, что у канонов ''Python'' и видения, основанного на множестве web-технологий, ценности схожи.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''LXF:''' То есть вы имеете в виду, что Django во многом обязан '''Python'''?''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''LXF:''' То есть вы имеете в виду, что Django во многом обязан '''Python'''?''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 33:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 33:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''LXF:''' Угу, это отличная черта Open Source — можно просто написать ему и задать вопросы!''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''LXF:''' Угу, это отличная черта Open Source — можно просто написать ему и задать вопросы!''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''ДжКМ:''' Да; и более того, все обсуждения открыты. Я слежу за списком рассылки разработчиков ''Python'' почти 10 лет, наблюдал все дискуссии и знаю, какая философия свидетельствует о принятии решения, так что когда наши споры в сообществе ''Django'' похожи на те, с какими мы уже сталкивались &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;гдето &lt;/del&gt;раньше, мы можем делать те выводы, к которым приходили другие люди.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''ДжКМ:''' Да; и более того, все обсуждения открыты. Я слежу за списком рассылки разработчиков ''Python'' почти 10 лет, наблюдал все дискуссии и знаю, какая философия свидетельствует о принятии решения, так что когда наши споры в сообществе ''Django'' похожи на те, с какими мы уже сталкивались &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;где-то &lt;/ins&gt;раньше, мы можем делать те выводы, к которым приходили другие люди.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''LXF:''' Получается, вы поете по тем же нотам.''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''LXF:''' Получается, вы поете по тем же нотам.''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 47:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 47:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''ДжКМ:''' Ну, на раннем этапе Саймон Виллисон [Simon Willison] и Адриан Головаты [Adrian Holovaty] [создатели ''Django''] начали писать web-приложения на ''Python'', и они писали все вручную. А когда вы создаете web-приложения своими руками, то замечаете, что делаете одни и те же вещи снова и снова – ох, мне нужно написать этот слой для обращения к базам данных, а я напишу несколько видов, а мне нужно связать представления с моими шаблонами URL, а мне бы не помешал интерфейс администратора.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''ДжКМ:''' Ну, на раннем этапе Саймон Виллисон [Simon Willison] и Адриан Головаты [Adrian Holovaty] [создатели ''Django''] начали писать web-приложения на ''Python'', и они писали все вручную. А когда вы создаете web-приложения своими руками, то замечаете, что делаете одни и те же вещи снова и снова – ох, мне нужно написать этот слой для обращения к базам данных, а я напишу несколько видов, а мне нужно связать представления с моими шаблонами URL, а мне бы не помешал интерфейс администратора.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Первым решением для подобных повторяющихся действий был генератор кода: вы пишете описание данных, затем запускаете генератор, и он выдает большой кусок кода за вас. Вот это и есть «строительные леса» [scaffolding]. Возможно, мы делали это неправильно или была другая причина, но в любом случае для нас такой вариант не сработал. Была даже расхожая шутка: «Не редактируйте этот файл, его сгенерировала программа», потому что подобное выдавал генератор. В &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;какойто &lt;/del&gt;момент мы ушли от такого подхода, а наш опыт оставил нам действительно здоровую нелюбовь к генерации кода. Так вот, когда я вижу &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;чтото &lt;/del&gt;типа «строительных лесов», у меня срабатывает коленный рефлекс: «у нас это рухнуло, проходили». Может, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;ктото &lt;/del&gt;знает о генерации кода такое, чего не знаю я, но при каждом столкновении с этим я думаю «Хорошим оно быть не может».&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Первым решением для подобных повторяющихся действий был генератор кода: вы пишете описание данных, затем запускаете генератор, и он выдает большой кусок кода за вас. Вот это и есть «строительные леса» [scaffolding]. Возможно, мы делали это неправильно или была другая причина, но в любом случае для нас такой вариант не сработал. Была даже расхожая шутка: «Не редактируйте этот файл, его сгенерировала программа», потому что подобное выдавал генератор. В &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;какой-то &lt;/ins&gt;момент мы ушли от такого подхода, а наш опыт оставил нам действительно здоровую нелюбовь к генерации кода. Так вот, когда я вижу &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;что-то &lt;/ins&gt;типа «строительных лесов», у меня срабатывает коленный рефлекс: «у нас это рухнуло, проходили». Может, &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;кто-то &lt;/ins&gt;знает о генерации кода такое, чего не знаю я, но при каждом столкновении с этим я думаю «Хорошим оно быть не может».&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''LXF:''' Можно, однако, предположить, что общих идей довольно много… все это — один большой ком, не так ли?''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''LXF:''' Можно, однако, предположить, что общих идей довольно много… все это — один большой ком, не так ли?''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''ДжКМ:''' Я не настолько знаком с основами ''Rails'', чтобы утверждать, что они сдирают его с нас, но &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;мыто &lt;/del&gt;взяли от них многое. Сначала в ''Django'' мы обходились без тестового инструментария, а начав баловаться с тестовым инструментарием ''Rails'', отметили: «Эй, а это и правда здорово – это укрепляет культуру тестирования». Мы взяли эту идею и внедрили ее у себя.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''ДжКМ:''' Я не настолько знаком с основами ''Rails'', чтобы утверждать, что они сдирают его с нас, но &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;мы то &lt;/ins&gt;взяли от них многое. Сначала в ''Django'' мы обходились без тестового инструментария, а начав баловаться с тестовым инструментарием ''Rails'', отметили: «Эй, а это и правда здорово – это укрепляет культуру тестирования». Мы взяли эту идею и внедрили ее у себя.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''LXF:''' Даже при учете совместного использования идей, считаете ли вы, что для успешного развития '''Django''' нужна какая-то другая система?''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''''LXF:''' Даже при учете совместного использования идей, считаете ли вы, что для успешного развития '''Django''' нужна какая-то другая система?''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''ДжКМ:''' Вы знаете, раньше я был помешан на чемто вроде «Мы победим, мы разрастемся, у нас будет больше пользователей, мы станем лучше, станем круче!» Но сам к этому особорук не прикладывал; и в &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;какойто &lt;/del&gt;момент сказал «А зачем?» Если вы пользователь ''Rails'', а я пытаюсь убедить вас перейти на ''Django'', какой от этого прок нам обоим? И я уже не занимаюсь такими проповедями. Мой тон сменился с «Вам следует использовать ''Django'', потому что…» на «Я использую ''Django'', потому что…» И меня начал расстраивать тон соперничества в сообществе Open Source. «Аа, вы ''Vi'' пользуетесь? Убил бы!» Это игра с нулевой суммой, а &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;настоящаято &lt;/del&gt;битва, с моей точки зрения, идет между открытым и закрытым кодом. И пока мы все используем открытый код, мы все в выигрыше.�&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;'''ДжКМ:''' Вы знаете, раньше я был помешан на чемто вроде «Мы победим, мы разрастемся, у нас будет больше пользователей, мы станем лучше, станем круче!» Но сам к этому особорук не прикладывал; и в &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;какой-то &lt;/ins&gt;момент сказал «А зачем?» Если вы пользователь ''Rails'', а я пытаюсь убедить вас перейти на ''Django'', какой от этого прок нам обоим? И я уже не занимаюсь такими проповедями. Мой тон сменился с «Вам следует использовать ''Django'', потому что…» на «Я использую ''Django'', потому что…» И меня начал расстраивать тон соперничества в сообществе Open Source. «Аа, вы ''Vi'' пользуетесь? Убил бы!» Это игра с нулевой суммой, а &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;настоящая-то &lt;/ins&gt;битва, с моей точки зрения, идет между открытым и закрытым кодом. И пока мы все используем открытый код, мы все в выигрыше.�&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Категория:Интервью]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Категория:Джейкоб Каплан-Мосс]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Fri, 24 Jun 2011 13:05:16 GMT</pubDate>			<dc:creator>Ewgen</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF128:Interview</comments>		</item>
		<item>
			<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF128:Interview&amp;diff=11560&amp;oldid=prev</link>
			<description>&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: Интервью Джейкоб Каплан-Мосс&lt;br /&gt;
&lt;br /&gt;
==Танго c ''Django''==&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF128_29_1.jpg|300px]] Джейкоб Каплан-Мосс|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
: '''Джейкоб Каплан-Мосс''', один из основных разработчиков проекта ''Django'', рассказывает о принятии идей от ''Rails'', почему ясность — это хорошо и повинны ли смерти пользователи ''Vi''…&lt;br /&gt;
&lt;br /&gt;
''Django'' — открытый каркас для разработки web-приложений с самыми понятными, самыми простыми программными интерфейсами, а также огромным и растущим сообществом грамотных специалистов, используемый на сайтах вроде WashingtonPost.com. Кстати, он написан на ''Python'', что облегчает его освоение.&lt;br /&gt;
&lt;br /&gt;
Джейкоб Каплан-Мосс [Jacob Kaplan-Moss] — один из ведущих разработчиков ''Django'', активный конечный пользователь ''Django''; он также имеет публикации по... ну, вы уже догадались: ''Django''. Мы встретились с ним за чашкой кофе и спросили, почему этот проект столь замечателен…&lt;br /&gt;
&lt;br /&gt;
'''''Linux Format:''' Со стороны создается впечатление, что вы занимаетесь в '''Django''' абсолютно всем. Но в чем именно заключается ваша роль?''&lt;br /&gt;
&lt;br /&gt;
'''Джейкоб Каплан-Мосс:''' В сообществе ''Django'' я своего рода универсал – я недостаточно толков, чтобы понимать все до самого дна, зато освоил основы любой части! Вот я и делаю то, что нужно в данный момент. У меня есть дурацкая склонность к волонтерству.&lt;br /&gt;
&lt;br /&gt;
'''''LXF:''' Какие части проекта вам особенно интересны?''&lt;br /&gt;
&lt;br /&gt;
'''ДжКМ:''' Моя любимая часть в этом проекте – дизайн API, выяснение того, что составляет хороший UI. Я имею в виду не тот интерфейс, который видят конечные пользователи, а другой, который применяют разработчики – хороший интерфейс прикладного программирования. Наш подход к разработке – сначала установить, как должен работать API, затем продумать его техническую реализацию. Конечно, есть искушение зая вить «Ну, я выбрал этот способ, потому что мне так проще; пусть API на выходе будет менее ясным, зато его легче сделать», но мы стараемся так не поступать. Я часто пишу документацию для новых функций до написания самого кода, что бы осознать, как люди будут с ним взаимодействовать.&lt;br /&gt;
&lt;br /&gt;
'''''LXF:''' Получается, «мы хотим, чтобы оно работало так – теперь давайте заставим его это делать…»''&lt;br /&gt;
&lt;br /&gt;
'''ДжКМ:''' Верно. Я всегда ставлю себя на место пользователя и трачу намного больше времени на использование ''Django'', чем на его разработку. И, помоему, то же относится ко всем остальным. Главная наша цель – создать инструмент, удобный для пользования, и я не думаю, что это экзотика: это типично для Open Source.&lt;br /&gt;
&lt;br /&gt;
'''''LXF:''' Вы раньше говорили: вам нравится, что '''Django''' работа ет подобно web. Какова зависимость между созданием '''Django''' webподобным и «питоновидным» — когда проект получает статус идиоматического кода '''Python'''?''&lt;br /&gt;
&lt;br /&gt;
'''ДжКМ:''' Я думаю, что связь тут довольно близкая. ''Python'' ценит простоту, четкость и единообразие. Способ создания вещей REST (REpresentational State Transfer) – делать все через один и тот же интерфейс, а в'' Python'' и есть только один способ делать все. HTTP… полная спецификация состоит гдето из 50 печатных страниц – она короткая, ее можно прочитать за один вечер. И я думаю, что у канонов ''Python'' и видения, основанного на множестве web-технологий, ценности схожи.&lt;br /&gt;
&lt;br /&gt;
'''''LXF:''' То есть вы имеете в виду, что Django во многом обязан '''Python'''?''&lt;br /&gt;
&lt;br /&gt;
'''ДжКМ:''' Ну, конечно, мы в первую очередь разработчики ''Python''. Я часто говорю, что лучшая черта ''Django'' в том, что он написан на ''Python'', потому что это значит, что можно использовать ''Python'' и все его библиотеки. При обсуждении возможностей, целый «дзен Python» появляется – например, «Что бы тут сделал Гвидо [Guido van Rossum, автор Python]?»&lt;br /&gt;
&lt;br /&gt;
'''''LXF:''' Угу, это отличная черта Open Source — можно просто написать ему и задать вопросы!''&lt;br /&gt;
&lt;br /&gt;
'''ДжКМ:''' Да; и более того, все обсуждения открыты. Я слежу за списком рассылки разработчиков ''Python'' почти 10 лет, наблюдал все дискуссии и знаю, какая философия свидетельствует о принятии решения, так что когда наши споры в сообществе ''Django'' похожи на те, с какими мы уже сталкивались гдето раньше, мы можем делать те выводы, к которым приходили другие люди.&lt;br /&gt;
&lt;br /&gt;
'''''LXF:''' Получается, вы поете по тем же нотам.''&lt;br /&gt;
&lt;br /&gt;
'''ДжКМ:''' И это отличная черта в Open Source: открыт не только код, но и сообщество. Вы получаете новую информацию не только по коду, который написан другими людьми, но и по обсуждениям, которые они вели.&lt;br /&gt;
&lt;br /&gt;
'''''LXF:''' А на самом деле компетентный программист '''Python''' должен легко начать работать в '''Django''' — у него ведь не будет большого культурного шока?''&lt;br /&gt;
&lt;br /&gt;
'''ДжКМ:''' Я думаю, не будет. ''Django'' был бы весьма иным, если бы его писали не на ''Python'': язык определяет то, что на нем будет написано. ''Rails'' таков, какой он есть, потому что таков ''Ruby''. Сообщество ''Ruby'' ценит лаконичность, ''Rails'' принимает это и говорит: «ОК, я хочу уметь создавать web-приложение как можно меньшим количеством строк кода». Сообщество ''Python'' ценит внятность, и иногда задачи реализуются немного более многословно, чтобы обеспечить полное понимание происходящего. Вы знаете, мы любим поругать ''PHP'', но то, к чему я возвращаюсь периодически, что отталкивает меня от ''PHP'' – это их культура: они смотрят свысока на модульное тестирование, смеются над проектированием ПО, об объектно-ориентированном программировании вспоминают после…&lt;br /&gt;
&lt;br /&gt;
'''''LXF''': Одно из сравнений, которое делается между '''Django''' и '''Rails''', заключается в том, что '''Django''' — не просто «строительные леса», это целое «здание»…''&lt;br /&gt;
&lt;br /&gt;
'''ДжКМ:''' Ну, на раннем этапе Саймон Виллисон [Simon Willison] и Адриан Головаты [Adrian Holovaty] [создатели ''Django''] начали писать web-приложения на ''Python'', и они писали все вручную. А когда вы создаете web-приложения своими руками, то замечаете, что делаете одни и те же вещи снова и снова – ох, мне нужно написать этот слой для обращения к базам данных, а я напишу несколько видов, а мне нужно связать представления с моими шаблонами URL, а мне бы не помешал интерфейс администратора.&lt;br /&gt;
&lt;br /&gt;
Первым решением для подобных повторяющихся действий был генератор кода: вы пишете описание данных, затем запускаете генератор, и он выдает большой кусок кода за вас. Вот это и есть «строительные леса» [scaffolding]. Возможно, мы делали это неправильно или была другая причина, но в любом случае для нас такой вариант не сработал. Была даже расхожая шутка: «Не редактируйте этот файл, его сгенерировала программа», потому что подобное выдавал генератор. В какойто момент мы ушли от такого подхода, а наш опыт оставил нам действительно здоровую нелюбовь к генерации кода. Так вот, когда я вижу чтото типа «строительных лесов», у меня срабатывает коленный рефлекс: «у нас это рухнуло, проходили». Может, ктото знает о генерации кода такое, чего не знаю я, но при каждом столкновении с этим я думаю «Хорошим оно быть не может».&lt;br /&gt;
&lt;br /&gt;
'''''LXF:''' Можно, однако, предположить, что общих идей довольно много… все это — один большой ком, не так ли?''&lt;br /&gt;
&lt;br /&gt;
'''ДжКМ:''' Я не настолько знаком с основами ''Rails'', чтобы утверждать, что они сдирают его с нас, но мыто взяли от них многое. Сначала в ''Django'' мы обходились без тестового инструментария, а начав баловаться с тестовым инструментарием ''Rails'', отметили: «Эй, а это и правда здорово – это укрепляет культуру тестирования». Мы взяли эту идею и внедрили ее у себя.&lt;br /&gt;
&lt;br /&gt;
'''''LXF:''' Даже при учете совместного использования идей, считаете ли вы, что для успешного развития '''Django''' нужна какая-то другая система?''&lt;br /&gt;
&lt;br /&gt;
'''ДжКМ:''' Вы знаете, раньше я был помешан на чемто вроде «Мы победим, мы разрастемся, у нас будет больше пользователей, мы станем лучше, станем круче!» Но сам к этому особорук не прикладывал; и в какойто момент сказал «А зачем?» Если вы пользователь ''Rails'', а я пытаюсь убедить вас перейти на ''Django'', какой от этого прок нам обоим? И я уже не занимаюсь такими проповедями. Мой тон сменился с «Вам следует использовать ''Django'', потому что…» на «Я использую ''Django'', потому что…» И меня начал расстраивать тон соперничества в сообществе Open Source. «Аа, вы ''Vi'' пользуетесь? Убил бы!» Это игра с нулевой суммой, а настоящаято битва, с моей точки зрения, идет между открытым и закрытым кодом. И пока мы все используем открытый код, мы все в выигрыше.�&lt;/div&gt;</description>
			<pubDate>Thu, 24 Mar 2011 09:44:31 GMT</pubDate>			<dc:creator>Crazy Rebel</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF128:Interview</comments>		</item>
	</channel>
</rss>