Compare commits

...

9 Commits

Author SHA1 Message Date
9206a9ff3a Все подмодули на собственном сервере 2022-01-15 16:44:37 +03:00
25b194750e Обновление 2022-01-15 15:36:41 +03:00
25491b80c4 Обновление 2021-12-24 16:51:35 +03:00
8c3a99eff9 Обновление 2021-12-24 16:02:12 +03:00
a2cca2dd8c Обновление 2021-12-13 23:10:12 +03:00
8e3f80d82c Обновление 2021-10-20 10:11:49 +03:00
763ec72402 Обновление 2021-08-27 12:15:49 +03:00
7505316c2c Обновление 2021-06-08 11:22:28 +03:00
8639788c93 update 2020-11-02 09:43:29 +03:00
21 changed files with 1976 additions and 120 deletions

3
.gitignore vendored
View File

@ -1,3 +1,5 @@
/.asciidoctor
cache/* cache/*
cache-ascii/* cache-ascii/*
cache-full/* cache-full/*
@ -10,6 +12,7 @@ upload.sh
wiki/**/diag*.png wiki/**/diag*.png
wiki/**/*.png.cache wiki/**/*.png.cache
*.pyc
*.txt *.txt
upload-*.sh upload-*.sh

25
.gitmodules vendored
View File

@ -1,28 +1,27 @@
[submodule "plugins/thirdparty/md-metayaml"] [submodule "plugins/thirdparty/md-metayaml"]
path = plugins/thirdparty/md-metayaml path = plugins/thirdparty/md-metayaml
url = git@git.246060.ru:/f1x1t/pelican-md-metayaml.git url = git@git.246060.ru:f1x1t/pelican-md-metayaml.git
[submodule "plugins/thirdparty/pelican-css"]
path = plugins/thirdparty/pelican-css
url = https://notabug.org/jorgesumle/pelican-css
[submodule "themes/bootstrap4"] [submodule "themes/bootstrap4"]
path = themes/bootstrap4 path = themes/bootstrap4
url = git@git.246060.ru:/f1x1t/pelican-theme-bootstrap4.git url = git@git.246060.ru:f1x1t/pelican-theme-bootstrap4.git
[submodule "plugins/thirdparty/yuicompressor-opt"] [submodule "plugins/thirdparty/yuicompressor-opt"]
path = plugins/thirdparty/yuicompressor-opt path = plugins/thirdparty/yuicompressor-opt
url = git@git.246060.ru:/f1x1t/pelican-yuicompressor-opt.git url = git@git.246060.ru:f1x1t/pelican-yuicompressor-opt.git
[submodule "plugins/thirdparty/pelidoc"] [submodule "plugins/thirdparty/pelidoc"]
path = plugins/thirdparty/pelidoc path = plugins/thirdparty/pelidoc
url = git@git.246060.ru:/f1x1t/pelican-pelidoc.git url = git@git.246060.ru:f1x1t/pelican-pelidoc.git
[submodule "plugins/thirdparty/pandoc_reader"] [submodule "plugins/thirdparty/pandoc_reader"]
path = plugins/thirdparty/pandoc_reader path = plugins/thirdparty/pandoc_reader
url = git@git.246060.ru:/f1x1t/pelican-pandoc-reader url = git@git.246060.ru:f1x1t/pelican-pandoc-reader
branch = master
[submodule "plugins/thirdparty/replacer"]
path = plugins/thirdparty/replacer
url = git@github.com:/narusemotoki/replacer
[submodule "plugins/thirdparty/asciidoctor"] [submodule "plugins/thirdparty/asciidoctor"]
path = plugins/thirdparty/asciidoctor path = plugins/thirdparty/asciidoctor
url = git@git.246060.ru:f1x1t/pelican-asciidoctor url = git@git.246060.ru:f1x1t/pelican-asciidoctor
[submodule "plugins/thirdparty/replacer"]
path = plugins/thirdparty/replacer
url = git@git.246060.ru:f1x1t/pelican-replacer
[submodule "plugins/thirdparty/pelican-css"]
path = plugins/thirdparty/pelican-css
url = git@git.246060.ru:f1x1t/pelican-css
[submodule "plugins/official"] [submodule "plugins/official"]
path = plugins/official path = plugins/official
url = git@github.com:getpelican/pelican-plugins url = git@git.246060.ru:f1x1t/pelican-plugins-official

View File

@ -0,0 +1,44 @@
= Настройка Redis
:category: Linux
:tags: Linux, Redis,
Создать файл `/etc/sysctl.d/98-redis.conf`:
[source,text]
----
net.core.somaxconn=65535
vm.overcommit_memory=1
----
Перезагрузить систему или выполнить команду:
[source,sh]
----
sudo sysctl -p
----
Создать файл `/etc/systemd/system/disable-transparent-huge-pages.service`:
[source,text]
----
[Unit]
Description=Disable Transparent Huge Pages (THP)
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=mongod.service redis.service redis-server.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'
[Install]
WantedBy=basic.target
----
Разрешить автоматический запуск при загрузке системы:
[source,sh]
----
sudo systemctl enable disable-transparent-huge-pages.service
----

View File

@ -0,0 +1,29 @@
= Настройка параметров локальной сети
:category: Linux
:tags: Linux, сеть, ethernet
Создать файл `/etc/sysctl.d/98-network.conf`:
[source,text]
----
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=33554432
net.core.wmem_max=33554432
net.ipv4.tcp_rmem = 4096 262144 33554432
net.ipv4.tcp_wmem = 4096 262144 33554432
net.ipv4.tcp_mem = 4096 262144 33554432
net.core.netdev_max_backlog = 16384
net.ipv4.ipfrag_high_threshold = 8388608
----
Перезагрузить систему или выполнить команду:
[source,sh]
----
sudo sysctl -p
----

File diff suppressed because it is too large Load Diff

View File

@ -21,28 +21,25 @@ include::{l10ndir}/{lang}.adoc[]
│ ├── debug │ ├── debug
│ │ ├── bin │ │ ├── bin
│ │ ├── etc │ │ ├── etc
│ │ ├── files
│ │ │ ├── data
│ │ │ ├── lib
│ │ │ └── log
│ │ ├── include │ │ ├── include
│ │ ── lib │ │ ── lib
│ │ ├── log
│ │ ├── share
│ │ └── var
│ └── release │ └── release
├── .git ├── .git
├── .gitlab-ci
├── cmake ├── cmake
│ ├── cmlib │ ├── cmlib
│ ├── doc
│ ├── etc │ ├── etc
│ │ └── uncrustify │ │ └── uncrustify
│ ├── find │ ├── find
│ └── generators │ └── generators
├── doc ├── doc
├── files ├── files
│ ├── data
│ ├── etc │ ├── etc
│ ├── lib │ ├── log
── log ── share
│ └── var
├── l10n ├── l10n
├── src ├── src
│ ├── app │ ├── app
@ -61,17 +58,15 @@ include::{l10ndir}/{lang}.adoc[]
|`_build/debug` | Результаты компиляции в режиме отладки |`_build/debug` | Результаты компиляции в режиме отладки
|`_build/debug/bin` | Исполняемые файлы |`_build/debug/bin` | Исполняемые файлы
|`_build/debug/etc` | Символическая ссылка на каталог `cmex/files/etc` |`_build/debug/etc` | Символическая ссылка на каталог `cmex/files/etc`
|`_build/debug/files/data` | Символическая ссылка на каталог `cmex/files/data`
|`_build/debug/files/lib` | Символическая ссылка на каталог `cmex/files/lib`
|`_build/debug/files/log` | Символическая ссылка на каталог `cmex/files/log`
|`_build/debug/include` | Заголовочные файлы копируемые и генерируемые во время сборки |`_build/debug/include` | Заголовочные файлы копируемые и генерируемые во время сборки
|`_build/debug/lib` | Статические и динамические библиотеки |`_build/debug/lib` | Статические и динамические библиотеки
|`_build/debug/log` | Символическая ссылка на каталог `cmex/files/log`
|`_build/debug/share` | Символическая ссылка на каталог `cmex/files/share`
|`_build/debug/var` | Символическая ссылка на каталог `cmex/files/var`
|`_build/release` | Результаты компиляции в режиме выпуска (иерархия аналогична `debug`) |`_build/release` | Результаты компиляции в режиме выпуска (иерархия аналогична `debug`)
|`.git` | Системные файлы репозитория git |`.git` | Системные файлы репозитория Git
|`.gitlab.ci` | Шаблон правил для автоматической сборки на сервере Gitlab
|`cmake` | Файлы с дополнительными функциями для CMake |`cmake` | Файлы с дополнительными функциями для CMake
|`cmake/cmlib` | Библиотека функций для CMake |`cmake/cmlib` | Библиотека функций для CMake
|`cmake/doc` | Правила для автоматической генерации документации
|`cmake/etc` | Файлы настроек, используемые в CMake |`cmake/etc` | Файлы настроек, используемые в CMake
|`cmake/etc/uncrustify` | Файл настройки для программы автоматического форматирования исходных текстов |`cmake/etc/uncrustify` | Файл настройки для программы автоматического форматирования исходных текстов
|`cmake/find` | Модули CMake для поиска внешних программ и библиотек |`cmake/find` | Модули CMake для поиска внешних программ и библиотек
@ -79,9 +74,9 @@ include::{l10ndir}/{lang}.adoc[]
|`doc` | Документация для проекта |`doc` | Документация для проекта
|`files` | Каталог для дополнительных файлов |`files` | Каталог для дополнительных файлов
|`files/etc` | Каталог для файлов настроек проекта |`files/etc` | Каталог для файлов настроек проекта
|`files/data` | Каталог для неизменяемых файлов
|`files/lib` | Каталог для изменяемых файлов
|`files/log` | Каталог для журналов |`files/log` | Каталог для журналов
|`files/share` | Каталог для неизменяемых файлов
|`files/var` | Каталог для изменяемых файлов
|`l10n` | Файлы переводов |`l10n` | Файлы переводов
|`src` | Исходные тексты |`src` | Исходные тексты
|`src/app` | Исходные тексты программы |`src/app` | Исходные тексты программы
@ -115,7 +110,7 @@ git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-base
=== Инициализация подмодулей === Инициализация подмодулей
Для начала нужно создать каталог для проекта, перейти в него и Для начала нужно создать каталог для проекта, перейти в него и
инициализировать репозиторий git: инициализировать репозиторий:
[source,sh] [source,sh]
---- ----
@ -132,8 +127,6 @@ git init
git submodule add https://git.246060.ru/f1x1t/cmlib.git cmake/cmlib git submodule add https://git.246060.ru/f1x1t/cmlib.git cmake/cmlib
git submodule add https://git.246060.ru/f1x1t/cmake-find.git cmake/find git submodule add https://git.246060.ru/f1x1t/cmake-find.git cmake/find
git submodule add https://git.246060.ru/f1x1t/cmake-generators.git cmake/generators git submodule add https://git.246060.ru/f1x1t/cmake-generators.git cmake/generators
git submodule add https://git.246060.ru/f1x1t/cmake-doc.git cmake/doc
git submodule add https://git.246060.ru/f1x1t/uncrustify-config.git cmake/etc/uncrustify
git commit -a -m "Начало проекта" git commit -a -m "Начало проекта"
---- ----
@ -146,13 +139,54 @@ git remote add origin АДРЕС_РЕПОЗИТОРИЯ_НА_СЕРВЕРЕ
git push -u origin master git push -u origin master
---- ----
После отправки файлов на сервер отредактировать файл `.gitmodules`,
так чтобы он содержал только относительные пути к подмодулям, чтобы
система автоматической сборки проекта могла их загружать без дополнительной
авторизации. Например, заменить:
[source,ini]
----
[submodule "cmake/cmlib"]
path = cmake/cmlib
url = git@git.246060.ru:f1x1t/cmlib.git
[submodule "cmake/find"]
path = cmake/find
url = git@git.246060.ru:f1x1t/cmake-find.git
[submodule "cmake/generators"]
path = cmake/generators
url = git@git.246060.ru:f1x1t/cmake-generators.git
----
на
[source,ini]
----
[submodule "cmake/cmlib"]
path = cmake/cmlib
url = ../../f1x1t/cmlib.git
[submodule "cmake/find"]
path = cmake/find
url = ../../f1x1t/cmake-find.git
[submodule "cmake/generators"]
path = cmake/generators
url = ../../f1x1t/cmake-generators.git
----
Обновить пути и сохранить изменения:
[source,sh]
----
git submodule sync --recursive
git add .gitmodules
git commit -m "Настройка путей к подмодулям"
----
Загрузить шаблоны для автоматической сборки проекта в разных вариантах Загрузить шаблоны для автоматической сборки проекта в разных вариантах
программных окружений и зафиксировать изменения: программных окружений и зафиксировать изменения:
[source,sh] [source,sh]
---- ----
mkdir .gitlab-ci wget https://git.246060.ru/f1x1t/gitlab-ci/raw/branch/master/.gitlab-ci.yml
wget -O .gitlab-ci.yml https://git.246060.ru/f1x1t/gitlab-ci/raw/branch/master/.gitlab-ci.yml
git add .gitlab-ci.yml git add .gitlab-ci.yml
git commit -m "Настройка автосборки" git commit -m "Настройка автосборки"
---- ----
@ -166,30 +200,35 @@ git add .clang-tidy
git commit -m "Настройка Clang-Tidy" git commit -m "Настройка Clang-Tidy"
---- ----
Загрузить файл настройки для программы https://github.com/cheshirekow/cmake_format/[cmake-format],
используемой для форматирования файлов CMake:
[source,sh]
----
wget https://git.246060.ru/f1x1t/cmake-format/raw/branch/master/.cmake-format.py
git add .cmake-format.py
git commit -m "Настройка cmake-format"
----
Создать стандартные файлы и каталоги: Создать стандартные файлы и каталоги:
[source,sh] [source,sh]
---- ----
mkdir -p doc/breathe mkdir -p doc/breathe
touch doc/breathe/index.md.in touch doc/breathe/index.md.in
mkdir -p files/etc mkdir -p files/{etc,log,share,var}
touch files/etc/.keep-directory touch files/{etc,log,share,var}/.gitkeep
mkdir -p files/data
touch files/data/.keep-directory
mkdir -p files/lib
touch files/lib/.keep-directory
mkdir -p files/log
touch files/log/.keep-directory
git add doc files git add doc files
git commit -m "Стандартные файлы и каталоги" git commit -m "Стандартные файлы и каталоги"
---- ----
IMPORTANT: Файлы `.keep-directory` позволяют защитить каталоги от удаления IMPORTANT: Файлы `.gitkeep` позволяют защитить каталоги от удаления
(будет выводиться дополнительное предупреждение, что каталог не пуст) и (будет выводиться дополнительное предупреждение, что каталог не пуст) и
обеспечивают возможность помещения каталогов с систему контроля версий git, обеспечивают возможность помещения каталогов с систему контроля версий Git,
в которой пустые каталоги недопустимы (это правильно!). в которой пустые каталоги недопустимы (это правильно!).
Создать файл `.gitignore` для исключения каталогов и файлов из-под контроля git: Создать файл `.gitignore` для исключения каталогов и файлов из-под контроля Git:
[source,sh] [source,sh]
---- ----
@ -215,7 +254,7 @@ cmake_policy(VERSION 3.0.2..3.7)
project(cmlib-example-base VERSION 0.2.0 LANGUAGES C CXX) project(cmlib-example-base VERSION 0.2.0 LANGUAGES C CXX)
---- ----
Значение версии следует формировать согласно правилам Значение версии проекта следует формировать согласно правилам
https://semver.org/lang/ru/[семантического версионирования]. https://semver.org/lang/ru/[семантического версионирования].
Для подключения функций для CMake из библиотеки CMLib, нужно добавить Для подключения функций для CMake из библиотеки CMLib, нужно добавить
@ -223,6 +262,21 @@ https://semver.org/lang/ru/[семантического версиониров
[source,cmake] [source,cmake]
---- ----
###
# Обязательные переменные для CMLib
###
# Название организации
set(CMLIB_ORGANIZATION_NAME "Org." CACHE STRING "")
# Имя автора
set(CMLIB_AUTHOR_NAME "John Doe" CACHE STRING "")
# Почта автора
set(CMLIB_AUTHOR_EMAIL "mail@johndoe.com" CACHE STRING "")
# Краткое описание проекта
set(CMLIB_DESCRIPTION "Пример проекта: начало" CACHE STRING "")
# В каталоге cmake/cmlib находятся файлы с библиотечными функциями # В каталоге cmake/cmlib находятся файлы с библиотечными функциями
if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/cmake/cmlib) if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/cmake/cmlib)
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/cmlib) list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/cmlib)
@ -234,31 +288,14 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/find)
include(CMLibCommon) include(CMLibCommon)
---- ----
[[variables-cmake]] Значения обязательных переменных, используемых библиотекой CMLib
В каталоге `cmake/etc` требуется создать файл `Variables.cmake`, для архивирования исходных текстов, автоматического создания пакетов,
в котором должны быть определены переменные, используемые генерации документации, следует отредактировать, после чего
библиотекой CMLib для архивирования исходных текстов, автоматического произведённые изменения можно зафиксировать:
создания пакетов, генерации документации:
[source,cmake]
----
set(ORGANIZATION_NAME "org")
set(AUTHOR_NAME "John Doe")
set(DOXYGEN_PROJECT_TITLE "Пример проекта (начало)")
set(DOXYGEN_GENERATE_LATEX YES)
set(DOXYGEN_GENERATE_HTML YES)
set(CPACK_PACKAGE_CONTACT "John Doe <box@mail.domain>")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "CMake project example")
----
Произведённые изменения можно зафиксировать:
[source,sh] [source,sh]
---- ----
git add cmake/etc/Variables.cmake CMakeLists.txt git commit -m "Подключение библиотеки CMLib" CMakeLists.txt
git commit -m "Подключение библиотеки CMLib"
---- ----
Чтобы проверить корректность подключения CMLib, можно выполнить команду: Чтобы проверить корректность подключения CMLib, можно выполнить команду:
@ -337,14 +374,14 @@ sudo apt-get install curl libcurl-dev libboost-all-dev
На этапе конфигурирования проекта можно сгенерировать файл, в который На этапе конфигурирования проекта можно сгенерировать файл, в который
будут записаны собранные значения параметров. В библиотеке CMLib будут записаны собранные значения параметров. В библиотеке CMLib
присутствует функция `cmlib_config_hpp_generate()`, создающая файл присутствует функция `cmlib_generate_private_config_hpp()`, создающая файл
`${CMAKE_BINARY_DIR}/include/cmlib_private_config.hpp`, в который `${CMAKE_BINARY_DIR}/include/cmlib_private_config.hpp`, в который
записывается информация о имени и версии проекта, дате и типе сборки. записывается информация о имени и версии проекта, дате и типе сборки.
[source,cmake] [source,cmake]
---- ----
# Автоматически генерируемый заголовочный файл # Автоматически генерируемый заголовочный файл
cmlib_config_hpp_generate() cmlib_generate_private_config_hpp()
---- ----
@ -452,13 +489,14 @@ set(Boost_USE_STATIC_RUNTIME ON)
find_package(Boost 1.55.0 REQUIRED) find_package(Boost 1.55.0 REQUIRED)
# Автоматически генерируемый заголовочный файл # Автоматически генерируемый заголовочный файл
cmlib_config_hpp_generate() cmlib_generate_private_config_hpp()
# Каталог с исходными текстами библиотеки # Каталог с исходными текстами библиотеки
add_subdirectory(src/cmlib-example) add_subdirectory(src/cmlib-example)
# Документация # Документация
add_subdirectory(cmake/doc) add_breathe_target(doc-breathe)
add_doxygen_target(doc-doxygen LATEX YES HTML YES)
# Создание вспомогательных символических ссылок # Создание вспомогательных символических ссылок
add_dependencies(cmlib-example create_auxilary_symlinks) add_dependencies(cmlib-example create_auxilary_symlinks)
@ -568,13 +606,14 @@ set(Boost_USE_STATIC_RUNTIME ON)
find_package(Boost 1.55.0 REQUIRED) find_package(Boost 1.55.0 REQUIRED)
# Автоматически генерируемый заголовочный файл # Автоматически генерируемый заголовочный файл
cmlib_config_hpp_generate() cmlib_generate_private_config_hpp()
# Приложение # Приложение
add_subdirectory(src/cmlib-example) add_subdirectory(src/cmlib-example)
# Документация # Документация
add_subdirectory(cmake/doc) add_breathe_target(doc-breathe)
add_doxygen_target(doc-doxygen LATEX YES HTML YES)
# Создание вспомогательных символических ссылок # Создание вспомогательных символических ссылок
add_dependencies(cmlib-example create_auxilary_symlinks) add_dependencies(cmlib-example create_auxilary_symlinks)
@ -800,7 +839,7 @@ target_include_directories(${TRGT} PUBLIC $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/
Для поиска необходимых компонентов Qt5 нужно в файле `CMakeLists.txt`, Для поиска необходимых компонентов Qt5 нужно в файле `CMakeLists.txt`,
находящемся в корневом каталоге проекта, перед вызовом функции находящемся в корневом каталоге проекта, перед вызовом функции
`cmlib_config_hpp_generate()` добавить строку: `cmlib_generate_private_config_hpp()` добавить строку:
[source,cmake] [source,cmake]
---- ----
@ -926,7 +965,7 @@ int main( int argc, char** argv )
git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-app-qt5-gui git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-app-qt5-gui
---- ----
В каталоге `files/data` создать файл описания включаемых ресурсов `icon.qrc`: В каталоге `files/share` создать файл описания включаемых ресурсов `icon.qrc`:
[source,xml] [source,xml]
---- ----
@ -941,7 +980,7 @@ git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-app-qt5-gui
[source,sh] [source,sh]
---- ----
wget https://git.246060.ru/f1x1t/cmlib-example-app-qt5-gui/raw/branch/master/files/data/icon.png wget https://git.246060.ru/f1x1t/cmlib-example-app-qt5-gui/raw/branch/master/files/share/icon.png
---- ----
Для графического приложения нужно создать файл описания интерфейса Для графического приложения нужно создать файл описания интерфейса
@ -1098,7 +1137,7 @@ set(TRGT_ui
# Файлы описания ресурсов, включаемых в исполняемый файл # Файлы описания ресурсов, включаемых в исполняемый файл
set(TRGT_qrc set(TRGT_qrc
${CMAKE_SOURCE_DIR}/files/data/icon.qrc) ${CMAKE_SOURCE_DIR}/files/share/icon.qrc)
### ###
# Конец списков файлов # Конец списков файлов
### ###
@ -1179,7 +1218,14 @@ git clone --recursive https://git.246060.ru/f1x1t/cmlib-example-app-features
`dos2unix` и `uncrustify`. Утилита `dos2unix` приводит переводы строк в `dos2unix` и `uncrustify`. Утилита `dos2unix` приводит переводы строк в
файлах к стандарту, принятому в Unix. Утилита `uncrustify` форматирует файлах к стандарту, принятому в Unix. Утилита `uncrustify` форматирует
файлы с исходными кодами на языке C{plus}{plus} в соответствии с правилами, файлы с исходными кодами на языке C{plus}{plus} в соответствии с правилами,
перечисленными в файле `cmake/etc/uncrustify/default.cfg`. перечисленными в файле `cmake/etc/uncrustify/default.cfg`. Можно использовать
собственный файл `default.cfg` или подключить подмодуль из репозитория:
[source,sh]
----
git submodule add https://git.246060.ru/f1x1t/uncrustify-config.git cmake/etc/uncrustify
git commit -m "Настройка uncrustify"
----
IMPORTANT: Настройка правил форматирования помогает другим разработчикам IMPORTANT: Настройка правил форматирования помогает другим разработчикам
придерживаться вашего стиля программирования и отправлять изменения в ваш придерживаться вашего стиля программирования и отправлять изменения в ваш
@ -1194,6 +1240,16 @@ IMPORTANT: Настройка правил форматирования помо
add_format_sources(${TRGT} ${TRGT_cpp} ${TRGT_headers}) add_format_sources(${TRGT} ${TRGT_cpp} ${TRGT_headers})
---- ----
Для автоматической проверки исходных текстов на соответствие стандарту
форматирования можно к локальному репозиторию подключить скрипт, выполняемый
перед фиксацией (`pre-commit`):
[source,sh]
----
wget -O - https://git.246060.ru/f1x1t/githooks/archive/master.tar.gz | tar zx --strip-components=1 -C .git/hooks
----
=== Статический анализ исходных кодов === Статический анализ исходных кодов
Для работы с программами на языке C{plus}{plus} используются утилиты, Для работы с программами на языке C{plus}{plus} используются утилиты,
@ -1482,12 +1538,68 @@ make all_unity
=== Документирование кода === Документирование кода
Надо написать. Для документирования кода используются блоки комментариев,
оформленные для обработки программой https://www.doxygen.nl[Doxygen].
Установка программы:
[source,sh]
----
sudo apt-get install doxygen
----
Пример комментария:
[source,c++]
----
/**
* @brief Базовый класс
*/
class Base {
public:
/**
* @brief Конструктор
*/
Base();
/**
* @brief Деструктор
*/
~Base();
/**
* @brief Вычисление квадратного корня
* @param value Входное значение
* @return Квадратный корень от value
*/
double sqrt(double value);
};
----
Поддержка автоматической генерации документации реализована
в функциях библиотеки CMLib `add_doxygen_target` и
`add_breathe_target`, которые необходимо вызвать в основном
файле `CMakeLists.txt` проекта.
[source,cmake]
----
# Документация
add_doxygen_target(doc-doxygen LATEX YES HTML YES)
add_breathe_target(doc-breathe)
----
В результате будут добавлены цели `doc-doxygen` и `doc-breathe`,
которые можно использовать после конфигурирования проекта:
[source,cmake]
----
make doc-doxygen
make doc-breathe
----
Поддержка документирования кода реализована в функциях
`add_doxygen` и `add_breathe`, для исполнения которых
добавляются цели `doc-doxygen` и `doc-breathe`.
Шаблоны для комментирования файлов, классов и функций Шаблоны для комментирования файлов, классов и функций
можно автоматически расставить в файлах исходных кодов можно автоматически расставить в файлах исходных кодов
исполнением цели `doc-add-comments` при наличии установленной исполнением цели `doc-add-comments` при наличии установленной
программы `uncrustify`. программы `uncrustify`:
[source,cmake]
----
make doc-add-comments
----

View File

@ -25,7 +25,7 @@ sudo setcap cap_sys_ptrace=eip /opt/intel/vtune_profiler/bin64/amplxe-perf
---- ----
[arabic, start=6] [arabic, start=6]
. Создать образ . Создать образ:
`mksquashfs /opt/intel/* /home/user/intel.sfs -comp xz -Xbcj x86 -all-root -b 512K` `mksquashfs /opt/intel/* /home/user/intel.sfs -comp xz -Xbcj x86 -all-root -b 512K`
. Удалить содержимое каталога `/opt/intel`. . Удалить содержимое каталога `/opt/intel`.
. Примонтировать образ: . Примонтировать образ:
@ -37,3 +37,33 @@ sudo setcap cap_sys_ptrace=eip /opt/intel/vtune_profiler/bin64/amplxe-perf
source /opt/intel/bin/compilervars.sh intel64 source /opt/intel/bin/compilervars.sh intel64
source /opt/intel/vtune_profiler/amplxe-vars.sh source /opt/intel/vtune_profiler/amplxe-vars.sh
---- ----
[arabic, start=10]
. Создать файл `/etc/sysctl.d/97-vtune.conf`:
[source,text]
----
kernel.kptr_restrict=0
kernel.perf_event_paranoid=0
kernel.yama.ptrace_scope=0
----
[arabic, start=11]
. Прочитать его: `sysctl -p /etc/sysctl.d/97-vtune.conf`
. Создать группу `vtune` и добавить в неё пользователя:
[source,sh]
----
groupadd vtune
usermod -a -G vtune user
----
[arabic, start=13]
. Установить модули ядра для упрощения доступа к отладочной информации:
[source,sh]
----
sudo apt-get install dkms build-essential linux-headers-generic
sudo dpkg -i /opt/intel/vtune-dkms*deb
----

View File

@ -74,8 +74,6 @@ https://ru.wikipedia.org/wiki/FHS[FHS] («стандарт иерархии фа
| systemLogDirectory() | Полный путь к системному каталогу с журналами работы | systemLogDirectory() | Полный путь к системному каталогу с журналами работы
| executableFileDirectory() | Полный путь к каталогу с исполняемым файлом | executableFileDirectory() | Полный путь к каталогу с исполняемым файлом
| executableFileName() | Имя исполняемого файла | executableFileName() | Имя исполняемого файла
| configFilePath() | Полный путь к файлу настройки
| configFileName() | Имя файла настройки
| projectName() | Имя подкаталога для проекта | projectName() | Имя подкаталога для проекта
|=== |===
@ -87,7 +85,7 @@ https://ru.wikipedia.org/wiki/FHS[FHS] («стандарт иерархии фа
namespace MF = myx::filesystem; namespace MF = myx::filesystem;
MF::Paths& paths = MF::Paths::instance(); MF::Paths& paths = MF::Paths::instance();
paths.init( QStringLiteral( "project_name" ), QStringLiteral( "conf" ) ); paths.init();
qDebug() << paths.systemConstDataDirectory().path(); qDebug() << paths.systemConstDataDirectory().path();
---- ----
@ -102,8 +100,9 @@ qDebug() << paths.systemConstDataDirectory().path();
данных и журналов. Эти значения не зависят от расположения исполняемого файла, данных и журналов. Эти значения не зависят от расположения исполняемого файла,
а определяются в соответствии со значениям переменных окружения `HOME`, а определяются в соответствии со значениям переменных окружения `HOME`,
`TMPDIR`, `XDG_CONFIG_HOME` и `XDG_DATA_HOME`, либо устанавливаются значения, `TMPDIR`, `XDG_CONFIG_HOME` и `XDG_DATA_HOME`, либо устанавливаются значения,
принятые в стандартах. Пример имён каталогов для пользователя `user` принятые в стандартах. Пример имён каталогов для пользователя `user`,
и проекта `project` приведён в таблице. названия организации `org`, названия выполняемой работы `theme` и проекта
`project` приведён в таблице.
.Стандартные каталоги для текущего пользователя .Стандартные каталоги для текущего пользователя
[cols="4,4m,6m",options="header"] [cols="4,4m,6m",options="header"]
@ -111,10 +110,10 @@ qDebug() << paths.systemConstDataDirectory().path();
| Назначение каталога | Метод | Значение | Назначение каталога | Метод | Значение
| Домашний каталог | homeDirectory() | /home/user | Домашний каталог | homeDirectory() | /home/user
| Временные файлы | tempDirectory() | /tmp | Временные файлы | tempDirectory() | /tmp
| Файлы настройки | userConfigDirectory() | /home/user/.config/project | Файлы настройки | userConfigDirectory() | /home/user/.config/org-theme/project
| Неизменяемые файлы | userConstDataDirectory() | /home/user/.local/share/project/data | Неизменяемые файлы | userConstDataDirectory() | /home/user/.local/share/org-theme/project/share
| Изменяемые файлы | userVarDataDirectory() | /home/user/.local/share/project/lib | Изменяемые файлы | userVarDataDirectory() | /home/user/.local/share/org-theme/project/var
| Журналы работы | userLogDirectory() | /home/user/.local/share/project/log | Журналы работы | userLogDirectory() | /home/user/.local/share/org-theme/project/log
|=== |===
=== Общая проверка === Общая проверка
@ -135,7 +134,7 @@ IMPORTANT: При проверке типов иерархии всегда пр
Если полный путь к исполняемому файлу начинается с `/opt` и Если полный путь к исполняемому файлу начинается с `/opt` и
содержит в себе название текущего проекта, например содержит в себе название текущего проекта, например
`/opt/org/project/bin/application`, то выполняется проверка `/opt/org-theme/project/bin/application`, то выполняется проверка
на наличие сопутствующих системных каталогов. Если они присутствуют, на наличие сопутствующих системных каталогов. Если они присутствуют,
то принимается решение, что окружение в иерархии `/opt` сформировано правильно, то принимается решение, что окружение в иерархии `/opt` сформировано правильно,
иначе делается заключение о том, что файлы всех типов находятся иначе делается заключение о том, что файлы всех типов находятся
@ -147,11 +146,11 @@ IMPORTANT: При проверке типов иерархии всегда пр
[cols="4,4m,5m",options="header"] [cols="4,4m,5m",options="header"]
|=== |===
| Назначение файла / каталога | Метод | Значение | Назначение файла / каталога | Метод | Значение
| Исполняемый файл | executableFilePath() | /opt/org/project/bin/application | Исполняемый файл | executableFilePath() | /opt/org-theme/project/bin/application
| Файлы настройки | systemConfigDirectory() | /opt/org/project/etc | Файлы настройки | systemConfigDirectory() | /opt/org-theme/project/etc
| Неизменяемые файлы | systemConstDataDirectory() | /opt/org/project/files/data | Неизменяемые файлы | systemConstDataDirectory() | /opt/org-theme/project/share
| Изменяемые файлы | systemVarDataDirectory() | /opt/org/project/files/lib | Изменяемые файлы | systemVarDataDirectory() | /opt/org-theme/project/var
| Журналы работы | systemLogDirectory() | /opt/org/project/files/log | Журналы работы | systemLogDirectory() | /opt/org-theme/project/log
|=== |===
@ -217,10 +216,10 @@ IMPORTANT: При проверке типов иерархии всегда пр
|=== |===
| Назначение файла / каталога | Метод | Значение | Назначение файла / каталога | Метод | Значение
| Исполняемый файл | executableFilePath() | /home/user/bin/application | Исполняемый файл | executableFilePath() | /home/user/bin/application
| Файлы настройки | systemConfigDirectory() | /home/user/.config/project | Файлы настройки | systemConfigDirectory() | /home/user/.config/org-theme/project
| Неизменяемые файлы | systemConstDataDirectory() | /home/user/.local/share/project/data | Неизменяемые файлы | systemConstDataDirectory() | /home/user/.local/share/org-theme/project/share
| Изменяемые файлы | systemVarDataDirectory() | /home/user/.local/share/project/lib | Изменяемые файлы | systemVarDataDirectory() | /home/user/.local/share/org-theme/project/var
| Журналы работы | systemLogDirectory() | /home/user/.local/share/project/log | Журналы работы | systemLogDirectory() | /home/user/.local/share/org-theme/project/log
|=== |===
@ -243,10 +242,10 @@ IMPORTANT: При проверке типов иерархии всегда пр
|=== |===
| Назначение файла / каталога | Метод | Значение | Назначение файла / каталога | Метод | Значение
| Исполняемый файл | executableFilePath() | /home/user/work/project/_build/debug/bin/application | Исполняемый файл | executableFilePath() | /home/user/work/project/_build/debug/bin/application
| Файлы настройки | systemConfigDirectory() | /home/user/work/project/_build/debug/etc/ | Файлы настройки | systemConfigDirectory() | /home/user/work/project/_build/debug/etc
| Неизменяемые файлы | systemConstDataDirectory() | /home/user/work/project/_build/debug/files/data | Неизменяемые файлы | systemConstDataDirectory() | /home/user/work/project/_build/debug/share
| Изменяемые файлы | systemVarDataDirectory() | /home/user/work/project/_build/debug/files/lib | Изменяемые файлы | systemVarDataDirectory() | /home/user/work/project/_build/debug/var
| Журналы работы | systemLogDirectory() | /home/user/work/project/_build/debug/files/log | Журналы работы | systemLogDirectory() | /home/user/work/project/_build/debug/log
|=== |===

View File

@ -62,9 +62,9 @@ untracked -> staged: git add
staged -> unmodified: git commit staged -> unmodified: git commit
unmodified -> modified: редактирование unmodified -> modified: редактирование
modified -> staged: git add modified -> staged: git add
modified -> untracked: git rm --cached modified -> untracked: git rm ~--cached
unmodified -> untracked: git rm --cached unmodified -> untracked: git rm ~--cached
staged -> untracked: git rm --cached staged -> untracked: git rm ~--cached
@enduml @enduml
---- ----
@ -125,7 +125,7 @@ participant remote as "Удалённый репозиторий\n(remote rep
[-> workspace : <font color=red>Начало работы</font> [-> workspace : <font color=red>Начало работы</font>
activate workspace activate workspace
remote -> local : <font color=red>Получение изменений с сервера</font>\n<b>git fetch</b> remote -> local : <font color=red>Получение изменений с сервера</font>\n<b>git fetch</b>
remote -> local : <font color=red>Обновление подмодулей</font>\n<b>git submodule update --recursive --init</b> remote -> local : <font color=red>Обновление подмодулей</font>\n<b>git submodule update ~--recursive ~--init</b>
workspace <-> local : <font color=red>Просмотр информации</font>\n<b>git status</b> workspace <-> local : <font color=red>Просмотр информации</font>\n<b>git status</b>
workspace <-> local : <font color=red>Переход на ветку master</font>\n<b>git checkout master</b> workspace <-> local : <font color=red>Переход на ветку master</font>\n<b>git checkout master</b>
local -> workspace : <font color=red>Слияние с удалённой веткой</font>\n<b>git merge origin/master</b> local -> workspace : <font color=red>Слияние с удалённой веткой</font>\n<b>git merge origin/master</b>
@ -135,11 +135,45 @@ workspace ->o workspace : <font color=red>Редактирование</font>
workspace <-> local : <font color=red>Просмотр изменений</font>\n<b>git diff</b> workspace <-> local : <font color=red>Просмотр изменений</font>\n<b>git diff</b>
workspace -> index : <font color=red>Занесение файлов в индекс</font>\n<b>git add</b> workspace -> index : <font color=red>Занесение файлов в индекс</font>\n<b>git add</b>
index -> local : <font color=red>Фиксация изменений</font>\n<b>git commit</b> index -> local : <font color=red>Фиксация изменений</font>\n<b>git commit</b>
local ->o local : <font color=red>Присвоение ветки осмысленного названия</font>\n<b>git branch -m temp branch_name</b> local ->o local : <font color=red>Присвоение ветки осмысленного названия</font>\n<b>git branch -m temp new_task</b>
local ->o local : <font color=red>Переход на ветку</font>\n<b>git checkout branch_name</b> local ->o local : <font color=red>Переход на ветку</font>\n<b>git checkout new_task</b>
remote -> local : <font color=red>Получение изменений с сервера</font>\n<b>git fetch</b> remote -> local : <font color=red>Получение изменений с сервера</font>\n<b>git fetch</b>
local ->o local : <font color=red>Слияние изменений с сервера в текущую ветку (branch_name)</font>\n<b>git merge origin/master</b> local ->o local : <font color=red>Слияние изменений с сервера в текущую ветку (new_task)</font>\n<b>git merge origin/master</b>
local -> remote : <font color=red>Отправка ветки на сервер</font>\n<b>git push origin branch_name</b> local -> remote : <font color=red>Отправка ветки на сервер</font>\n<b>git push origin new_task</b>
remote ->] : <font color=red>Создание запроса на слияние</font>
deactivate workspace
@enduml
----
Альтернативный пример действий, выполняемых пользователем в совместном
проекте, приведён на <<workflow-alt,диаграмме>>.
[[workflow-alt]]
[.text-center]
.Альтернативная последовательность действий
[plantuml]
----
@startuml
skinparam defaultFontSize 24
skinparam padding 16
participant workspace as "Рабочий каталог\n(working dir)"
participant index as "Индекс\n(index)" #77FF77
participant local as "Локальный репозиторий\n(local repository)" #FF7777
participant remote as "Удалённый репозиторий\n(remote repository)" #7777FF
[-> workspace : <font color=red>Начало работы</font>
activate workspace
workspace <-> local : <font color=red>Переход на локальную ветку master</font>\n<b>git checkout master</b>
remote -> workspace : <font color=red>Слияние с удалённой веткой и обновление рабочего каталога</font>\n<b>git pull</b>
workspace <-> local : <font color=red>Создание новой ветки</font>\n<b>git checkout -b new_task</b>
workspace ->o workspace : <font color=red>Редактирование</font>
workspace <-> local : <font color=red>Просмотр изменений</font>\n<b>git diff</b>
workspace -> index : <font color=red>Занесение файлов в индекс</font>\n<b>git add</b>
index -> local : <font color=red>Фиксация изменений</font>\n<b>git commit</b>
remote -> local : <font color=red>Получение изменений с сервера</font>\n<b>git fetch</b>
local ->o local : <font color=red>Слияние изменений с сервера в текущую ветку (new_task)</font>\n<b>git merge origin/master</b>
local -> remote : <font color=red>Отправка ветки на сервер</font>\n<b>git push origin new_task</b>
remote ->] : <font color=red>Создание запроса на слияние</font> remote ->] : <font color=red>Создание запроса на слияние</font>
deactivate workspace deactivate workspace
@enduml @enduml

View File

@ -15,4 +15,4 @@
== Оптимизация == Оптимизация
* https://www.agner.org/optimize[Agner's software optimization resources] * https://www.agner.org/optimize[Agner's software optimization resources]
* https://jjj.de[jj's pages (FXT library and Matters Computational)]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB