1
/*! @file RA.documentation.src.h В этом файле находится исходный текст
2
для генерации документации к исходным
3
текстам программы Research Assistant.
6
//******************************************************************************
7
//******************************************************************************
8
/*! @mainpage Research Assistant Program
12
//******************************************************************************
13
//******************************************************************************
14
/*! @page program_structure Program structure
21
//******************************************************************************
22
//******************************************************************************
23
/*! @page versions Versions
30
//******************************************************************************
31
//******************************************************************************
32
/*! @page subversions Subversions and development discipline
37
Нам пора сливаться. И наводить более строгую дисциплину контроля версий. Предложения принимаются, индивидуальные вкусы могут быть учтены. Можно допустить и индивидуальные дисциплины, если они эффективны и понятны другим. Пока я навязываю свои правила и хочу три вещи:
39
1. Получить свежие версии ваших собственных текстов и ваши версии текстов, которые вы изменили (Install.cpp, файлы проектов,...).
41
Хотелось бы, чтобы они компилировались, по крайней мере, у вас.
43
Хотелось бы, получить их в виде zip с именем вида
44
"RA 101129 DN2VB.zip",
45
т.е. содержащим дату и от кого кому.
47
ВНИМАНИЕ: наличие суффикса "2VB" означает, что архив неполный, и остальные файлы адресат может найти у себя или скомпилировать самостоятельно.
49
2. Заведите у себя манеру периодически архивировать все исходники ЦЕЛИКОМ (мои и ваши). И все эти архивы хранить на флешке. Все! За всю историю! Когда флешка переполнится, сбрасывать на CD.
51
Как правило не стоит включать в архив то, что можно скомпилировать или сгенерить (exe, dll, генерируемые файлы документации,...). Без них архив RA около 1Mb, а со всем "мусором" больше 20Mb! Т.е. чистить! Либо до архивации (я использую скрипт или bat-файл), либо уже из архива удалять ненужное.
53
В имя архива обязательно включать дату. Если в тот же день делается несколько архивов, то можно добавить буквочки "a", "b",... Полезно ещё добавить имя компа: "RA 101129а blin.zip" (blin -- это не ругательство, а кличка моего ноутбука). Можно ещё какие-то ремарки приписать сзади. Я, например, добавляю "-", если версия не компилируется, "!" - для финальных отлаженных версий после значительного развития/переделки, а иногда и слово или фразу, которые напомнят мне, что в этой версии нового.
55
Обычно полные архивы не пересылаются со-программерам, но иногда может потребоваться. Если архив предназначен для пересылки, то обязательно включить в его имя свои инициалы, чтобы он случайно не потёр архив с той же датой у адресата.
57
Надо бы ещё вести history.log, но лично я пока ленюсь. После начала официальных релизов это вероятно придётся делать. Можете показать мне пример прямо сейчас ;-)
59
Примечание: Использование номеров версий имеет смысл только для официальных релизов. Т.е. после
60
a) слияния (обязательно!),
61
b) тестирования (желательно),
62
c) формирования дистрибутива (желательно, на Read-only CD),
63
d) и (!!!) смены номера версии для дальнейшей разработки,
64
причём согласованно у всех разработчиков.
66
3. Нужна некая унификация относительной структуры папок, прямо или косвенно касающихся разработки RA. У меня имеется папка .
70
//******************************************************************************
71
//******************************************************************************
72
/*! @page history History Log
74
@section history_0_1_beta Версия 0.1.beta (в разработке)
76
@subsection history_101206 Промежуточная версия 101206
78
Для пущей ясности (относительно разбивки на dll и плагины) косметически
79
поправил чуть не каждый файл.
81
В классы устройств внесена правка, необходимая для согласования с остальными
82
изменениями ядра и структуры, и кое-какая косметика. Поправки простенькие и
83
локализованные, но полезно сравнить с исходными версиями и посмотреть, что и
84
как. А если окажется, что я правил уже устаревшую версию, то слить
88
Диме: Если бы у меня были свежие и хотя бы компилирующиеся версии Ваших текстов, я бы и их поправил. Обратите внимание на изменения в sUniScanner и sPetrovich (для чего полезно уметь сравнивать текстовые файлы) и внесите изменения в свои производные и/или клоны от этих классов.
90
Обоим: Плагин Feofilov у вас в совместной разработке. Договоритесь о дисциплине и держите меня в курсе - хотелось бы иметь представление о том, what is whose.
93
@subsection history_101202a Промежуточная версия 101202a
95
Внедрены плагины, что потребовало реструктуризации программы: изменена
96
структура каталогов и проектов, программа развалена на части (exe, dll-ки ядра
99
Внедрены физ.величины (sPhysValue): расширенные вещественные числа (с
100
плюс-минус бесконечностью и неопределённостью), имеющие погрешность и единицы
101
измерения. Пока только основы, для конечного юзера незаметные, а для
102
программера необременительные (небольшие изменения при записи/чтении в/из БД).
103
Далее предстоит постепенно перейти к их использованию везде, где можно и нужно.
105
Кое какие переименования и переразбивка на файлы (для пущей читаемости текстов).
107
Добавлены базовые типы узлов RANet: sPhysValueNode sPhysRangeNode sBooleanNode
108
а вот просто вещественные числа в БД теперь не записываются. Тип real в
109
программе, конечно, останется, но будет использоваться там, где важна
112
Наряду с sArrayFunction теперь имеется sPairSetFunction - таблично заданная
113
зависимость с произвольным шагом по абциссе, динамически изменяющимся числом
114
точек и произвольным порядком их добавления (при этом они упорядочиваются по
117
@subsection history_lost Предыстория
124
//******************************************************************************
125
//******************************************************************************
126
/*! @page distrib Distribution
128
Порядок выпуска официальной версии:
130
- Полная пересборка под Windows и Linux в конфигурации Release
132
- Правка и компиляция перевода (linguist)
133
- Компиляция документации разработчика (doxygen)
135
- Инсталяция и тестирование дистрибутива на разных машинах и системах
136
- Увеличение номера версии для дальнейшей разработки
139
@section distrib_form Формирование дистрибутива
141
На данный момент для win32 минимальная процедура такая:
143
Пусть исходники лежат в некой папке <i>RAPROG</i>
144
(у меня это "d:\Vik\Prog\QtRA"),
145
а Qt установлен в <i>QTDIR</i>
146
(у меня это "с:\Qt\2009.05").
148
Всё ставится в некую папку <i>RADIST</i>, в имя которой полезно включить
149
номер версии (например, "d:\RA_0_2") - тогда можно поставить рядом
150
вторую версию, попробовать, а потом уже перейти к работе на ней,
151
скопировав туда рабочую базу данных.
153
Из папки <i>QTDIR</i>\\qt\\bin (НЕ ПУТАТЬ С <i>QTDIR</i>\\bin !!!)
154
в папку <i>RADIST</i>\\bin
169
Из папки <i>QTDIR</i>\\qt\\plugins\\sqldrivers
170
(НЕ ИЗ <i>QTDIR</i>\\bin\\sqldrivers !!!)
171
в папку <i>RADIST</i>\\bin\\plugins\\sqldrivers
174
Из папки <i>RAPROG</i>\\bin
175
в папку <i>RADIST</i>\\bin
179
Из папки <i>RAPROG</i>
180
в папку <i>RADIST</i>
183
- и папку help целиком со всеми файлами и вложенными папками
186
Из папки <i>RAPROG</i>\\locales
187
в папку <i>RADIST</i>\\locales
193
//******************************************************************************
194
//******************************************************************************
195
/*! @page datanet RANet Knowledgebase
201
//******************************************************************************
202
//******************************************************************************
206
@section intro_sec Introduction
208
This is the introduction.
210
@section sec_projects Versions, Customizations, Build Projects
212
@subsection sec_project_vers Versions
214
Версия программы состоит из версии общего ядра, кастомизации и даты
217
Версия ядра в виде major.minor будет расти общепринятым образом, отражая
218
изменения в формате данных (обязательно) и более или менее заметные
219
подвижки в общей функциональности.
221
Кастомизация идентифицирует состав сборки (какие исходные тексты в неё
222
закомпилячены) и обозначается коротким @b уникальным идентификатором,
223
образованным из имени "хозяина" экспериментальной установки и/или кликухи
224
самой установки. Только не надо использовать неинформативные типа "MySetup",
225
серийные имена "RadioPAN" или (тем более!) "ДФС-24" -- гораздо лучше
226
"BursiaPan", например.
228
Дата автоматически заносится при @b полной сборке.
230
@subsection sec_project_cust Customizations
232
В идеале все весьма различно выглядящие и функционирующие инсталяции
233
программы Research Assistant будут иметь один и тот же исполняемый файл,
234
а его конкретное поведение определяться конфигурационной составляющей
235
данных. Такую кастомизацию будем называть "global".
237
В процессе разработки будут появляться кастомизированные версии, которые,
238
однако, должны стремиться слиться в экстазе со следующей версией "global".
240
@subsection project_RA RA Project
242
Это то, что я сейчас пишу. Сегодня она претендует на звание global. Полное
243
название версии 0.1.global.
246
@subsection project_RA4BursiaPan RA4BursiaPan Project
248
Если мне захочется поэкспериментировать, не ломая основную (глобальную и уже
249
вышедшую в тираж) версию, то я, возможно, создам такой проект. Но буду писать
250
его так, чтобы в конечном итоге он влился в @ref project_RA.
252
Новые исходные тексты я помещу вместе с файлом RA4BursiaPan.pro в
253
папку RA4BursiaPan. Там же весь мусор и результат компиляции. Там же тестовая
256
Если затею переделку парочки файлов из библиотеки @ref RANet, то, возможно,
257
скопирую их туда же (и подменю в проекте). Но скорее всего, скопирую всю
258
библиотеку в RANet_BursiaPan.
260
@subsection project_Test_Com Test_Com Project
262
Это то, что сейчас пишет Митя
264
@subsection project_RA4RIZ RA4RIZ Project
266
Это то, что будет писать Митя для Русланы. Когда он закончит, мы сольёмся (в
267
экстазе, само-собой) и отнесём клиенту версию 1.0.global. После чего он может
268
развивать версию 1.1.RIZ и/или начать версию 1.1.DN.
270
@subsection sec_cust_numbering Динамика версий
272
Minor-компонента версии изменяется при каждой выдаче версии в эксплуатацию
273
на "боевых" данных (на реальных, имеющих ценность спектрах), даже если её
274
получают не все пользователи, а только самые смелые.
276
Major-компонента версии увеличивается, как это принято, при значительных
277
изменениях или просто, когда захочется создать повод для выпивки (именно
278
поэтому версия 0.1 превращается сразу в 1.0 при первой сдаче в эксплуатацию).
280
Ниже приведён возможный сценарий развития с разбором нюансов:
281
- @b 0.1.global + @b project_Test_Com ---> @b 0.1.global
282
(промежуточное слияние, в эксплуатацию не идёт)
283
- @b 0.1.global + @b 0.1.BursiaPan + @b 0.1.RIZ ---> @b 0.1.global
284
(промежуточное слияние; формат данных, возможно, изменился по инициативе одного
285
из разработчиков, врезультате чего БД другого разработчика, порождённая
286
предыдущей подверсией
287
версии 0.1, уже не читается новой подверсией версии 0.1.global, но это была
288
тестовая БД, её не жалко; обеспечивается читаемость только предыдущих версий,
289
сданных в эксплуатацию)
290
- @b 0.1.global + @b 0.1.BursiaPan + @b 0.1.RIZ ---> @b 1.0.global
291
(@b в @b эксплуатацию; порождаемые данные получают тэг "v.1.0.global")
292
- @b 1.0.global + @b 1.1.BursiaPan + @b 1.1.RIZ ---> @b 1.1.global
293
(промежуточное слияние)
294
- @b 1.1.global + @b 1.1.BursiaPan + @b 1.1.RIZ ---> @b 1.1.global
295
(промежуточное слияние)
297
- @b 1.1.global + @b 1.1.BursiaPan + @b 1.1.RIZ --->
298
@b 1.1.global + @b 1.2.BursiaPan + @b 1.1.RIZ
299
(я рискнул инсталлировать версию 1.1.BursiaPan у себя на "боевой" БД;
300
теперь мои данные получают тэг "v.1.1.BursiaPan", а версия в разработке
301
переименована в 1.2.BursiaPan)
302
- @b 1.1.global + @b 1.2.BursiaPan + @b 1.1.RIZ ---> @b 1.2.global
303
(промежуточное слияние)
304
- @b 1.2.global + @b 1.2.BursiaPan + @b 1.2.RIZ ---> @b 1.2.global
305
(промежуточное слияние)
306
- @b 1.2.global + @b 1.2.BursiaPan + @b 1.2.RIZ --->
307
@b 1.2.global + @b 1.3.BursiaPan + @b 1.2.RIZ
308
(тестируя свою версию, я случайно записал ценный спектр; он имеет тэг
309
"v.1.2.BursiaPan", но лежит в тестовой БД; я заархивировал тестовую БД,
310
экзэшник, и все исходники, после чего переименовал версию в разработке;
311
как я потом засуну этот спектр в боевую БД - это вопрос отдельный,
312
но теоретическая возможность обеспечена, и уж, как минимум, я всегда смогу
313
посмотреть его на экране и экспортировать в двухколоночный текст)
314
- @b 1.2.global + @b 1.3.BursiaPan + @b 1.2.RIZ ---> @b 1.3.global
315
(промежуточное слияние)
317
- @b 1.3.global + @b 1.3.BursiaPan + @b 1.3.RIZ ---> @b 1.4.global
318
(@b в @b эксплуатацию)
319
- @b 1.4.global + @b 1.5.BursiaPan + @b 1.5.RIZ ---> @b 1.5.global
320
(промежуточное слияние)
324
@subsection project_RAdmin RAdmin Project
326
Это внутреннего пользования упрощённый проект --
327
утилита для просмотра и редактирования сети.
330
@section sec_naming Naming conventions
332
@subsection sec_naming_classes Classes
340
@subsection sec_naming_types Other types
344
Exception is made for few simple and very common typedefs in General.h:
345
- literal = константный указатель на константный массив символов
350
@subsection sec_naming_class_members Class members
352
Приставка @a The используется, когда
353
имеется приватный член @a TheMember, доступ к
354
которому прикрыт публичной функцией
355
@a Member() и, возможно, функцией @a SetMember(...).
358
@section datanet Datanet