website view ru/devel/forge.php @ rev 1256

Tiny edits of the hidden data (doctype, meta, line endings, hidden symbols).
author Aleksej Bobylev <al.bobylev@gmail.com>
date Thu Apr 23 23:53:42 2015 +0300 (2015-04-23)
parents 9a9848a106ca
children 3dbcace639e6
line source
1 <!DOCTYPE html>
2 <html lang="ru">
3 <head>
4 <meta charset="utf-8"/>
5 <title>Кузница | SliTaz</title>
6 <meta name="description" content="«Кузница» разработчиков SliTaz"/>
7 <meta name="keywords" lang="ru" content="SliTaz, разработчики, hg, bugs"/>
8 <meta name="author" content="Christophe Lincoln"/>
9 <?php include("../../lib/html/meta-link.html"); ?>
10 </head>
11 <body>
13 <?php include("../../lib/html/header.ru.html"); ?>
15 <!-- Block -->
16 <div id="block">
17 <?php include("../../lib/html/nav.ru.html"); ?>
18 <!-- Information/image -->
19 <div id="block_info">
20 <h4>Кузница</h4>
21 <p>Разнообразные утилиты, принципы и сервисы, используемые для создания
22 SliTaz.</p>
23 <p><img src="/images/users.png" alt="*" />
24 Присоединяйтесь к нам <a href="http://scn.slitaz.org/">на SCN</a>
25 и <a href="../mailing-list.php">в рассылке</a>
26 </p>
27 </div>
28 </div>
30 <?php include("../../lib/lang.php"); ?>
32 <!-- Content -->
33 <div id="content">
35 <h2>Совместное управление</h2>
37 <ul>
38 <li><a href="#kiss">KISS и соответствие стандартам</a></li>
39 <li><a href="#tank">Сборочный хост и дом</a></li>
40 <li><a href="#repos">Репозитории Mercurial</a></li>
41 <li><a href="#gui">GUI в GTK и CGI/web</a></li>
42 <li><a href="#iconv">Реализация iconv()</a></li>
43 <li><a href="#pkgs">Сборка пакетов SliTaz</a></li>
44 <li><a href="#website">Управление сайтом</a></li>
45 </ul>
48 <h2 id="kiss">KISS и соответствие стандартам</h2>
50 <p>Что означает <a target="_blank"
51 href="http://ru.wikipedia.org/wiki/KISS_%28%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%29">KISS</a>?
52 Будьте проще: следуйте лучшим стандартам, тщательно планируйте и пишите
53 качественную документацию, делайте систему стабильной и надежной, сохраняйте
54 <em>rootfs</em> на LiveCD настолько лёгким, чтобы дистрибутив мог
55 запускаться на компьютерах со 128 МБ оперативки. В дистрибутиве возможно
56 использование GTK+2, Dialog, SHell-скриптов и средств разработки PHP. Идея
57 заключается в том, чтобы не дублировать существующее, и думать о малом…</p>
60 <h2 id="tank">Tank — сборочный хост и дом</h2>
62 <p>Участники проекта могут получить аккаунт на сервере Tank с безопасным
63 доступом, дисковым пространством, общим каталогом и всеми средствами
64 разработки. Разработчики могут компилировать пакеты, а мэйнтейнеры зеркала
65 могут осуществлять синхронизацию. На сервере Tank также находятся домены
66 веб-загрузки, сборочного бота и SliTaz Pro:
67 <a href="http://tank.slitaz.org/">tank.slitaz.org</a>.</p>
68 <p>Инструкции по использованию сборочного хоста описаны в Cookbook:
69 <a href="http://doc.slitaz.org/en:cookbook:buildhost">SliTaz Build Host
70 (Tank)</a>.</p>
73 <h2 id="repos">Репозитории Mercurial</h2>
75 <p>Репозитории SliTaz Mercurial (Hg) можно просматривать и клонировать без
76 ограничений, используя адрес
77 <a href="http://hg.slitaz.org/">http://hg.slitaz.org/</a>. Те, у кого есть
78 доступ на запись, могут напрямую использовать адрес
79 <tt>repos.slitaz.org</tt>, требующий аутентификации. Mercurial работает на
80 Python; его можно установить командой
81 <code>tazpkg get-install mercurial</code></p>
84 <h3>~/.hgrc</h3>
86 <p>Перед тем, как отправить ваш первый коммит на сервер, внесите в файл
87 конфигурации Hg ваше имя, фамилию и адрес электронной почты. Запомните, Hg
88 не будет работать, если вы root. Пример персонального файла ~/.hgrc:</p>
90 <pre class="script">
91 [ui]
92 username = Ivan Ivanov &lt;ivanov@mail.org&gt;
93 </pre>
96 <h4>Клонировать → изменить → зафиксировать изменения → отправить</h4>
98 <p>Клонировать репозиторий, к примеру, wok:</p>
100 <pre>$ hg clone http://repos.slitaz.org/wok</pre>
102 <p>Перейдите в папку wok; вы должны находиться в репозитории, чтобы иметь
103 возможность использовать команды 'hg'. Чтобы проверить все журналы, или
104 просто последний журнал:</p>
106 <pre>
107 $ hg log
108 $ hg head
109 </pre>
111 <p>Добавьте или измените один или несколько файлов и зафиксируйте коммит:</p>
113 <pre>
114 $ hg add
115 $ hg status
116 $ hg commit -m "Log message..."
117 $ hg log
118 </pre>
120 <p>Обратите внимание, что вы можете использовать команду <code>rollback</code>
121 для отмены последней операции. Перед отправкой изменений на сервер
122 (<em>push</em> — «протолкнуть» изменения на сервер) возьмите за правило
123 принимать текущие изменения с сервера (при их наличии):</p>
125 <pre>
126 $ hg pull
127 $ hg push
128 </pre>
130 <p>Готово, теперь ваши изменения, код или исправления находятся на сервере.</p>
133 <h4>Обновление локального wok</h4>
135 <p>Для того, чтобы обновить ваш wok скомандуйте (<em>pull</em> — «втянуть»
136 изменения с сервера):</p>
138 <pre>$ hg pull -u</pre>
141 <h4>Полезные команды</h4>
143 <p>Могут быть использованы следующие команды Hg:</p>
145 <ul>
146 <li><code>hg help</code> — показать полный список команд.</li>
147 <li><code>hg rollback</code> — отменить последнее действие (commit, pull,
148 push).</li>
149 <li><code>hg log пакет</code> — показать журнал для пакета.</li>
150 <li><code>hg head</code> — показать последний журнал.</li>
151 </ul>
153 <p>В сети можно найти немало статей и учебников по Hg на русском языке. Мне,
154 например, понравился цикл переводных статей Джоэля Спольски: <a
155 href="http://habrahabr.ru/post/108658/" target="_blank">Hg Init: Часть 2.
156 Основы Mercurial</a>. Самое основное, действительно, можно рассказать за
157 минуту, но иногда могут возникнуть ситуации, когда вам понадобится помощь.
158 Прочитайте и обязательно закрепите полученные данные на практике, прежде
159 чем работать с репозитариями SliTaz.</p>
162 <h2 id="gui">GUI — на C/GTK, Yad, Vala/Genie и CGI/web</h2>
164 <p>Существует много способов создания пользовательского интерфейса в мире
165 открытого исходного кода. С самого начала проекта и до 3.0 мы, в основном,
166 использовали утилиту под названием GtkDialog. Она позволяет нам создавать
167 очень красивый и сложный интерфейс в GTK с помощью скриптового языка,
168 который можно просто запустить без необходимости компиляции. Но, GtkDialog
169 перестал развиваться, в нём не хватает многих новых возможностей GTK.
170 Поэтому мы перешли на Yad для простых графических диалогов. А все диалоги
171 администрирования, пакетного менеджера и утилит настройки используют
172 TazPanel, веб-интерфейс которой написан на xHTML 5 и CSS 3.</p>
173 <p>Yad очень прост, он не позволяет создавать сложные интерфейсы, даже если нам
174 нужны только 2 или 3 пункта с метками и несколько кнопок, поэтому придётся
175 искать другое решение. Преимущество скриптового языка в том, что его
176 не нужно компилировть, диалоги можно писать в режиме реального времени
177 (но он производит медленные приложения). Написание утилит на C сложно и
178 доступно не каждому, в то время как SHell-скрипты проще для понимания.
179 Поэтому сейчас наш руководящий принцип — сохранить и продолжать
180 совершенствовать наши утилиты командной строки, а также обеспечить их
181 графическим интерфейсом на GTK или CGI/web.</p>
182 <p>Многие новые языки, такие как Genie, Vala и GTKaml, используют GTK. Но,
183 имейте в виду, что они не так популярны, как C и GTK, и не факт, что их
184 проще освоить и использовать (для выполнения действий в простых приложениях
185 можно использовать скрипты оболочки). Вы можете использовать Vala, но,
186 посмотрите на чистый код GTK, создающий одно окно, для этого нужно всего
187 14 строк:</p>
189 <pre>
190 #include &lt;gtk/gtk.h&gt;
192 int main(int argc, char *argv[])
193 {
194 GtkWidget *window;
196 gtk_init(&amp;argc, &amp;argv);
197 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
198 g_signal_connect (G_OBJECT (window), "destroy",
199 G_CALLBACK (gtk_main_quit), NULL);
201 gtk_widget_show(window);
202 gtk_main();
203 return 0;
204 }
205 </pre>
207 <p>Если вы не уверены в том, какой язык использовать, обсудите его в рассылке.
208 Если вам нужен только небольшой функционал GUI, посмотрите на tazbox
209 в репозитории slitaz-tools, в нём есть крошечные утилиты для рабочего
210 стола, такие как окно выхода из системы. Первый подпроект SliTaz,
211 написанный на чистом GTK, — это TazWeb. Вы можете разобраться с ним, чтобы
212 узнать способы использования system() для добавления системных команд
213 в интерфейс. Например, TazWeb использует Wget для загрузки и Sed для
214 добавления закладок.</p>
215 <p>Скрипты Yad должны следовать руководящим принципам TazYad: <a
216 href="http://hg.slitaz.org/slitaz-dev-tools/raw-file/tip/tazyad/README">README</a>
217 и <a
218 href="http://hg.slitaz.org/slitaz-dev-tools/raw-file/tip/tazyad/tazyad">пример кода</a>.</p>
221 <h2 id="iconv">Реализация iconv()</h2>
223 <p>SliTaz использует iconv(), предоставленный GNU glibc — любые пакеты,
224 предлагающие <code>libiconv</code>, должны использовать библиотеку,
225 содержащуюся в <code>glibc-locale</code>. Поэтому в SliTaz больше не входит
226 пакет libiconv (1,2 МБ).</p>
229 <h2 id="pkgs">Сборка пакетов SliTaz</h2>
231 <p>Официальная сборка осуществляется с помощью Cookutils. Программа, а также
232 документация о том, как использовать cook и <a
233 href="http://hg.slitaz.org/cookutils/raw-file/tip/doc/cookutils.en.html"
234 >создавать пакеты SliTaz</a> для пакетного менеджера TazPKG, установлена
235 на каждой системе SliTaz.</p>
236 <p>Пакеты tazpkg в SliTaz создаются автоматически при помощи <a
237 href="http://cook.slitaz.org/">Cooker</a> («повар») из пакета Cookutils,
238 а также рецепта из wok. В Cookbook описан формат <a
239 href="http://doc.slitaz.org/en:cookbook:receipt">рецептов</a>. Прежде,
240 чем начать, необходимо прочитать документацию о Cook и рецептах.</p>
241 <p>Что касается выбора пакета, идея состоит в том, чтобы предложить пакет по
242 задаче или функциональности, т.е. выбрать самое легкое приложение
243 в какой-либо области, которое не дублирует уже имеющихся функций других
244 пакетов. Обратите внимание, что текущие пакеты могут быть изменены; если
245 вы найдете альтернативу, которая легче, или с более широкими возможностями,
246 или более <em>привлекательная</em> за счет нескольких дополнительных КБ,
247 вы можете предложить ее другим в рассылке. Особое внимание необходимо
248 уделить пакетам для LiveCD, они должны быть очищены, лишены необязательных
249 зависимостей и опций компилятора. Обычно, кандидаты пакетов для основного
250 LiveCD обсуждаются в рассылке.</p>
251 <p>Прежде чем вы приступите к компиляции и созданию пакетов для SliTaz,
252 убедитесь, что их еще нет в <a
253 href="http://download.tuxfamily.org/slitaz/packages/undigest/"
254 >неофициальном</a> wok, который находится на основном зеркале SliTaz.
255 Не забывайте, что участники рассылки могут помочь вам и о том, что
256 документация по <a href="http://doc.slitaz.org/en:cookbook:wok">wok и
257 утилитам</a> написана, чтобы помочь вам начать работу.</p>
260 <h3 id="pkgs-naming">Именование пакетов</h3>
262 <p>В большинстве случаев пакет называется так же, как его исходник,
263 за исключением модулей Python, Perl, PHP, Ruby и Lua. Например, пакет,
264 содержащий шаблон Kid для системы, написанной на Python и XML называется
265 <code>python-kid</code>.</p>
268 <h2 id="website">Управление сайтом</h2>
270 <p>Управление сайтом осуществляется через репозиторий Mercurial, он может
271 быть клонирован командой:</p>
273 <pre>$ hg clone http://hg.slitaz.org/website</pre>
275 <p>Или, если у вас есть соответствующие права:</p>
277 <pre>$ hg clone http://repos.slitaz.org/website</pre>
280 <h3>Стиль написания xHTML</h3>
282 <p>Страницы и различные <em>книги</em> написаны на xHTML 1.0 Transitional.
283 Заголовок 1-го уровня используется только один раз (вверху страницы),
284 заголовок 2-го уровня — это название документа, а уровни 3 и 4 используются
285 для подзаголовков. Если используется маркированный список со ссылками на
286 подразделы страницы, то он помещается вверху, сразу после заголовка 2-го
287 уровня. Абзацы текста окружаются тегами <code>&lt;p&gt;…&lt;/p&gt;</code>.
288 Для отступов мы используем не пробелы, а табуляцию — она помогает понять
289 структуру страницы и экономит вес, занимаемый страницей (в байтах).
290 Для того, чтобы поместить внутри абзаца код, как, например, имя команды,
291 предпочтительно использовать <code>&lt;code&gt;</code>. Для отображения
292 команд и демонстрации использования терминала в веб-странице используется
293 <code>&lt;pre&gt;</code> для отображения заранее отформатированного
294 текста. Пример:</p>
296 <pre>$ команда</pre>
298 <p>Для отображения текста, который можно скопировать и вставить, например,
299 скриптов, фрагментов кода, примеров конфигурационных файлов и т.д. — мы
300 также используем <code>&lt;pre&gt;</code>, но с CSS-классом под названием
301 "script". Пример:</p>
303 <pre class="script">
304 &lt;pre class="script"&gt;
306 код…
308 &lt;/pre&gt;
309 </pre>
311 <p><em>Выделенные</em> слова помещаются в тег <code>&lt;em&gt;</code>, а
312 внутренние ссылки являются относительными. Не забудьте проверить
313 соответствие кода стандартам при помощи онлайнового <em>валидатора</em>
314 от W3C.</p>
317 <h2 id="diff">Diff и patch</h2>
319 <p>Утилиты командной строки <code>diff</code> и <code>patch</code>
320 соответственно создают и применяют специальные файлы (<em>«патчи»</em>),
321 в которых содержатся различия между двумя файлами. Эта техника часто
322 используется для совместной работы — она позволяет легко увидеть изменения,
323 внесенные в исходный файл. Чтобы создать файл <code>diff</code>, который
324 предназначен для чтения людьми в простом текстовом редакторе, используйте
325 параметр <code>-u</code>:</p>
327 <pre>$ diff -u файл.оригинал файл.измененный &gt; файл.diff</pre>
329 <p>Применить патч:</p>
331 <pre>$ patch файл.оригинал файл.diff</pre>
333 <!-- End of content -->
334 </div>
336 <?php include("../../lib/html/footer.ru.html"); ?>
338 </body>
339 </html>