Compare commits

..

No commits in common. "master" and "adoc" have entirely different histories.
master ... adoc

52 changed files with 1012 additions and 4021 deletions

8
.gitignore vendored
View File

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

29
.gitmodules vendored
View File

@ -1,27 +1,28 @@
[submodule "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 "plugins/official"]
path = plugins/official
url = git@github.com:/getpelican/pelican-plugins.git
[submodule "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"]
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"]
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"]
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"]
path = plugins/thirdparty/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"]
path = plugins/official
url = git@git.246060.ru:f1x1t/pelican-plugins-official

View File

@ -2,7 +2,7 @@ build:
pelican -s pelicanconf.py
web:
COMPRESS=1 pelican -s pelicanconf.py
pelican -s pelicanconf-web.py
clean:
rm -rf cache __pycache__

View File

@ -2,8 +2,8 @@
========
```sh
sudo apt-get install pelican plantuml yui-compressor
sudo gem install asciidoctor asciidoctor-pdf asciidoctor-diagram
sudo apt-get install pelican asciidoctor ruby-asciidoctor-pdf plantuml yui-compressor
sudo gem install asciidoctor-diagram
```
Установка:
@ -18,7 +18,6 @@ git submodule update --init plugins/thirdparty/pelidoc
git submodule update --init plugins/thirdparty/yuicompressor-opt
git submodule update --init plugins/thirdparty/pandoc_reader
git submodule update --init plugins/thirdparty/replacer
git submodule update --init plugins/thirdparty/asciidoctor
git submodule update --init themes/bootstrap4
```

122
pelicanconf-web.py Normal file
View File

@ -0,0 +1,122 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
import os
class i18n(object):
# looks for translations in
# {LOCALE_DIR}/{LANGUAGE}/LC_MESSAGES/{DOMAIN}.mo
# if not present, falls back to default
DOMAIN = 'messages'
LOCALE_DIR = '{THEME}/translations'
LANGUAGES = ['ru']
NEWSTYLE = True
__name__ = 'i18n'
def register(self):
from pelican.signals import generator_init
generator_init.connect(self.install_translator)
def install_translator(self, generator):
import gettext
try:
translator = gettext.translation(
self.DOMAIN,
self.LOCALE_DIR.format(THEME=THEME),
self.LANGUAGES)
except (OSError, IOError):
translator = gettext.NullTranslations()
generator.env.install_gettext_translations(translator, self.NEWSTYLE)
# ABOUT_ME = ' '
AUTHOR = 'Андрей Астафьев'
SITENAME = 'ДСП'
SITEURL = 'https://dsp.246060.ru'
PATH = 'wiki'
CACHE_PATH = 'cache'
TIMEZONE = 'Europe/Moscow'
DEFAULT_LANG = 'ru'
# Generation time
CACHE_CONTENT = True
LOAD_CONTENT_CACHE = True
# Feed generation is usually not desired when developing
FEED_ALL_ATOM = None
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None
USE_FOLDER_AS_CATEGORY = True
DEFAULT_DATE = 'fs'
STATIC_PATHS = [ 'images', 'files', 'extras' ]
DIRECT_TEMPLATES = ('index', 'categories', 'authors', 'archives', 'search')
EXTRA_PATH_METADATA = {
'extras/favicon.ico': {'path': 'favicon.ico'},
}
DISPLAY_CATEGORIES_ON_MENU = False
DISPLAY_CATEGORIES_ON_SIDEBAR = True
DISPLAY_TAGS_ON_SIDEBAR = True
THEME = 'themes/bootstrap4'
BOOTSTRAP_THEME = 'litera'
I18N_TEMPLATES_LANG = 'ru'
I18N_GETTEXT_NEWSTYLE = True
I18N_GETTEXT_LOCALEDIR = 'themes/bootstrap4/translations'
I18N_GETTEXT_DOMAIN = 'messages'
JINJA_ENVIRONMENT = {'extensions': ['jinja2.ext.i18n']}
PLUGIN_PATHS = ["plugins/official", "plugins/thirdparty"]
PLUGINS = [i18n(), "pelican-css", "series", "subcategory", "tag_cloud", "tipue_search", "replacer", "asciidoctor"]
ASCIIDOCTOR_CMD = "asciidoctor"
ASCIIDOCTOR_EXTRA_OPTIONS = [
'--require', 'asciidoctor-diagram',
'--attribute=imagesdir={}/wiki/images'.format(os.getcwd()),
'--attribute=source-highlighter=pygments',
'--attribute=pygments-style=manni',
'--attribute=pygments-css=class',
'--attribute=lang=ru',
'--attribute=figure-caption=Рис.',
'--attribute=toc-title=Содержание',
'--attribute=experimental',
]
REPLACES = (
('{}/wiki/'.format(os.getcwd()), u''),
)
YUICOMPRESSOR_EXECUTABLE = "yui-compressor"
YUICOMPRESSOR_EXTRA_OPTIONS = ["--nomunge"]
PLUGINS += ["yuicompressor-opt"]
PDF_PROCESSOR = True
# Blogroll
LINKS = ()
# LINKS = (('Pelican', 'http://getpelican.com/'),
# ('Python.org', 'http://python.org/'),
# ('Jinja2', 'http://jinja.pocoo.org/'),
# ('You can modify those links in your config file', '#'),)
# Social widget
SOCIAL = ()
# SOCIAL = (('You can add links in your config file', '#'),
# ('Another social link', '#'),)
PYGMENTS_STYLE='asciidoctor-pastie'
DEFAULT_PAGINATION = 20
# Uncomment following line if you want document-relative URLs when developing
RELATIVE_URLS = True

View File

@ -1,7 +1,35 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
import os
class i18n(object):
# looks for translations in
# {LOCALE_DIR}/{LANGUAGE}/LC_MESSAGES/{DOMAIN}.mo
# if not present, falls back to default
DOMAIN = 'messages'
LOCALE_DIR = '{THEME}/translations'
LANGUAGES = ['ru']
NEWSTYLE = True
__name__ = 'i18n'
def register(self):
from pelican.signals import generator_init
generator_init.connect(self.install_translator)
def install_translator(self, generator):
import gettext
try:
translator = gettext.translation(
self.DOMAIN,
self.LOCALE_DIR.format(THEME=THEME),
self.LANGUAGES)
except (OSError, IOError):
translator = gettext.NullTranslations()
generator.env.install_gettext_translations(translator, self.NEWSTYLE)
# ABOUT_ME = ' '
AUTHOR = 'Андрей Астафьев'
SITENAME = 'ДСП'
@ -40,31 +68,27 @@ DISPLAY_TAGS_ON_SIDEBAR = True
THEME = 'themes/bootstrap4'
BOOTSTRAP_THEME = 'litera'
# I18N_GETTEXT_LOCALEDIR = 'translations'
# I18N_GETTEXT_DOMAIN = 'messages'
# Обязательно в виде массива
I18N_TEMPLATES_LANG = ['ru']
I18N_TEMPLATES_LANG = 'ru'
I18N_GETTEXT_NEWSTYLE = True
I18N_GETTEXT_LOCALEDIR = 'themes/bootstrap4/translations'
I18N_GETTEXT_DOMAIN = 'messages'
JINJA_ENVIRONMENT = {'extensions': ['jinja2.ext.i18n']}
PLUGIN_PATHS = ["plugins/official", "plugins/thirdparty"]
PLUGINS = ["i18n_subsites", "pelican-css", "series", "subcategory", "tag_cloud", "tipue_search", "replacer", "asciidoctor"]
PLUGINS = [i18n(), "pelican-css", "series", "subcategory", "tag_cloud", "tipue_search", "replacer", "asciidoctor"]
ASCIIDOCTOR_CMD = "asciidoctor"
ASCIIDOCTOR_EXTRA_OPTIONS = [
'--require', 'asciidoctor-diagram',
'--require', '{}/themes/pdf/qa.rb'.format(os.getcwd()),
'--attribute=imagesdir={}/wiki/images'.format(os.getcwd()),
'--attribute=source-highlighter=pygments',
'--attribute=pygments-style=manni',
'--attribute=pygments-css=class',
'--attribute=lang=ru',
'--attribute=l10ndir={}/themes/l10n'.format(os.getcwd()),
'--attribute=figure-caption=Рис.',
'--attribute=toc-title=Содержание',
'--attribute=experimental',
'--attribute=pdf-themesdir={}/themes/pdf'.format(os.getcwd()),
'--attribute=pdf-theme=wiki',
]
REPLACES = (
@ -73,10 +97,7 @@ REPLACES = (
YUICOMPRESSOR_EXECUTABLE = "yui-compressor"
YUICOMPRESSOR_EXTRA_OPTIONS = ["--nomunge"]
if 'COMPRESS' in os.environ:
PLUGINS += ["yuicompressor-opt"]
#PLUGINS += ["yuicompressor-opt"]
PDF_PROCESSOR = True

@ -1 +1 @@
Subproject commit 7e8c591b519581dce80912abeb5070c4a299b547
Subproject commit 8cea2c6492f98e11341c48556978da7f6756f8a0

@ -1 +1 @@
Subproject commit b597cccb6b894bca614414706af0249078d3283c
Subproject commit 288c5aeba001bc605d20c573c37d1fb9384262e8

@ -1 +1 @@
Subproject commit 4168da84689e24c9d96ad3f8b979ea79a5b78771
Subproject commit ce6b18660a933855dbe996fc5b5d3d0ac1c25223

View File

@ -1,23 +0,0 @@
// Russian translation, courtesy of Alexander Zobkov <alexander.zobkov@gmail.com>
:appendix-caption: Приложение
:appendix-refsig: {appendix-caption}
:caution-caption: Внимание
:chapter-label: Глава
:chapter-refsig: {chapter-label}
:example-caption: Пример
:figure-caption: Рисунок
:important-caption: Важно
:last-update-label: Последнее обновление
ifdef::listing-caption[:listing-caption: Листинг]
ifdef::manname-title[:manname-title: Название]
:note-caption: Примечание
:part-label: Часть
:part-refsig: {part-label}
ifdef::preface-title[:preface-title: Предисловие]
:section-refsig: Раздел
:table-caption: Таблица
:tip-caption: Подсказка
:toc-title: Содержание
:untitled-label: Без названия
:version-label: Версия
:warning-caption: Предупреждение

View File

@ -1,60 +0,0 @@
require 'asciidoctor/extensions'
class QuestionBlock < Asciidoctor::Extensions::BlockProcessor
use_dsl
named :QUESTION
on_context :example
def process parent, reader, attrs
attrs['name'] = 'question'
attrs['caption'] = 'Question'
admon = create_block parent, :admonition, nil, attrs, content_model: :compound
parse_content admon, reader
admon
end
end
class QuestionBlockCss < Asciidoctor::Extensions::DocinfoProcessor
use_dsl
def process doc
'<style>
.admonitionblock td.icon .icon-question:before{content:"\f128";color:#000}
</style>'
end
end
Asciidoctor::Extensions.register do
block QuestionBlock
docinfo_processor QuestionBlockCss
end
class AnswerBlock < Asciidoctor::Extensions::BlockProcessor
use_dsl
named :ANSWER
on_context :example
def process parent, reader, attrs
attrs['name'] = 'answer'
attrs['caption'] = 'Answer'
admon = create_block parent, :admonition, nil, attrs, content_model: :compound
parse_content admon, reader
admon
end
end
class AnswerBlockCss < Asciidoctor::Extensions::DocinfoProcessor
use_dsl
def process doc
'<style>
.admonitionblock td.icon .icon-answer:before{content:"\f0eb";color:#000}
</style>'
end
end
Asciidoctor::Extensions.register do
block AnswerBlock
docinfo_processor AnswerBlockCss
end

View File

@ -1,22 +0,0 @@
extends: default
page:
size: A4
layout: portrait
# margin: [15mm, 20mm, 15mm, 10mm]
image:
caption:
align: inherit
font-style: normal
caption:
font-style: normal
admonition:
icon:
question:
name: fa-question
stroke_color: 000000
size: 24
answer:
name: fa-lightbulb
stroke_color: 000000
size: 24

View File

@ -1,44 +0,0 @@
= Настройка 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

@ -1,29 +0,0 @@
= Настройка параметров локальной сети
: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
----

View File

@ -7,16 +7,16 @@
Windows{nbsp}10. Пример приведён ниже:
.Экран 1
image::oo-shutup/1.jpg[1,align="center"]
image::oo-shutup/1.jpg[1]
.Экран 2
image::oo-shutup/2.jpg[2,align="center"]
image::oo-shutup/2.jpg[2]
.Экран 3
image::oo-shutup/3.jpg[3,align="center"]
image::oo-shutup/3.jpg[3]
.Экран 4
image::oo-shutup/4.jpg[4,align="center"]
image::oo-shutup/4.jpg[4]
.Экран 5
image::oo-shutup/5.jpg[5,align="center"]
image::oo-shutup/5.jpg[5]

View File

@ -14,18 +14,18 @@ https://software.intel.com/en-us/parallel-studio-xe[дистрибутив] и
скопировать его в полученный каталог.
. Если есть файл лицензии `parallel_studio.lic`, скопировать его в
каталог `/opt/intel/licenses`.
. От суперпользователя установить в каталог `/opt/intel` командой
`sudo ./install.sh -s silent.cfg`.
. Добавить полномочия для сбора статистики:
[source,sh]
----
sudo setcap cap_sys_ptrace=eip /opt/intel/vtune_profiler/bin64/vtune
sudo setcap cap_sys_ptrace=eip /opt/intel/vtune_profiler/bin64/amplxe-perf
sudo setcap cap_sys_ptrace=eip /opt/intel/vtune_amplifier/bin64/amplxe-cl
sudo setcap cap_sys_ptrace=eip /opt/intel/vtune_amplifier/bin64/amplxe-perf
----
[arabic, start=6]
. Создать образ:
[arabic, start=5]
. От суперпользователя установить в каталог `/opt/intel` командой
`sudo ./install.sh -s silent.cfg`.
. Создать образ
`mksquashfs /opt/intel/* /home/user/intel.sfs -comp xz -Xbcj x86 -all-root -b 512K`
. Удалить содержимое каталога `/opt/intel`.
. Примонтировать образ:
@ -35,35 +35,5 @@ sudo setcap cap_sys_ptrace=eip /opt/intel/vtune_profiler/bin64/amplxe-perf
[source,sh]
----
source /opt/intel/bin/compilervars.sh intel64
source /opt/intel/vtune_profiler/amplxe-vars.sh
source /opt/intel/vtune_amplifier/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

@ -1,129 +0,0 @@
= Настройка Qt Creator
:title-separator: {sp}|
:category: Linux/Программы
:tags: Linux, Qt, Qt Creator, C++,
:toc:
:icons: font
include::{l10ndir}/{lang}.adoc[]
Перед настройкой Qt Creator желательно установить пакеты для разработки
и выполнить дополнительные настройки:
[source,sh]
----
sudo apt-get install git ninja-build cmake uncrustify dos2unix doxygen
sudo apt-get install clazy clang-tidy build-essential qt5-default
git clone https://git.246060.ru/f1x1t/uncrustify-config ~/.config/uncrustify
----
<<<
== Плагины
[.text-center]
.menu:Справка[О модулях] (часть 1)
image::qtcreator-setup/qtcreator21.png[qtcreator21,pdfwidth=70%,scaledwidth=90%,align="center"]
{empty} +
[.text-center]
.menu:Справка[О модулях] (часть 2)
image::qtcreator-setup/qtcreator22.png[qtcreator22,pdfwidth=70%,scaledwidth=90%,align="center"]
{empty} +
[.text-center]
.menu:Справка[О модулях] (часть 3)
image::qtcreator-setup/qtcreator23.png[qtcreator23,pdfwidth=70%,scaledwidth=90%,align="center"]
{empty} +
[.text-center]
.menu:Справка[О модулях] (часть 4)
image::qtcreator-setup/qtcreator24.png[qtcreator24,pdfwidth=70%,scaledwidth=90%,align="center"]
{empty} +
== Комплекты
[.text-center]
.menu:Инструменты[Параметры > Комплекты > Комплекты]
image::qtcreator-setup/qtcreator34.png[qtcreator34,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
[.text-center]
.menu:Инструменты[Параметры > Комплекты > Комплекты > Генератор CMake > Изменить]
image::qtcreator-setup/qtcreator35.png[qtcreator35,align="center"]
{empty} +
<<<
== Среда
[.text-center]
.menu:Инструменты[Параметры > Среда > Система]
image::qtcreator-setup/qtcreator41.png[qtcreator41,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
== Редактор
[.text-center]
.menu:Инструменты[Параметры > Текстовый редактор > Поведение]
image::qtcreator-setup/qtcreator42.png[qtcreator42,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
== C++
[.text-center]
.menu:Инструменты[Параметры > С++ > Именование файлов]
image::qtcreator-setup/qtcreator51.png[qtcreator51,pdfwidth=78%,scaledwidth=78%,align="center"]
{empty} +
== Стилизатор
[.text-center]
.menu:Инструменты[Параметры > Стилизатор > Uncrustify]
image::qtcreator-setup/qtcreator55.png[qtcreator55,pdfwidth=78%,scaledwidth=78%,align="center"]
{empty} +
== Сборка и запуск
[.text-center]
.menu:Инструменты[Параметры > Сборка и запуск > Основное]
image::qtcreator-setup/qtcreator61.png[qtcreator61,pdfwidth=78%,scaledwidth=80%,align="center"]
{empty} +
<<<
== To-Do
[.text-center]
.menu:Инструменты[Параметры > To-Do]
image::qtcreator-setup/qtcreator67.png[qtcreator67,pdfwidth=78%,scaledwidth=80%,align="center"]
{empty} +
== Импорт проекта на CMake
[.text-center]
.menu:Импорт проекта[Настроить проект]
image::qtcreator-setup/qtcreator74.png[qtcreator74,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
== Сборка
[.text-center]
.menu:Проект[Настройки сборки]
image::qtcreator-setup/qtcreator81.png[qtcreator81,pdfwidth=80%,scaledwidth=80%,align="center"]

View File

@ -1,269 +0,0 @@
= Программный проект и иерархия каталогов
:title-separator: {sp}|
:category: Программирование
:tags: Linux, файлы, каталоги, программирование, cmake
:toc:
include::{l10ndir}/{lang}.adoc[]
Для операционных систем типа Linux принят стандарт
https://ru.wikipedia.org/wiki/FHS[FHS] («стандарт иерархии файловой
системы»), унифицирующий местонахождение файлов и каталогов с общим
назначением в файловой системе. Полная текущая версия стандарта
находится http://refspecs.linuxfoundation.org/fhs.shtml[здесь].
== Типы расположения проекта
В соответствии с данным стандартом, а также принятыми в ведущих
дистрибутивах правилами размещения исполняемых файлов в каталогах
пользователей, можно выделить следующие типы расположения:
* системная иерархия в каталоге `/usr` используется для установки
бинарных пакетов для данного дистрибутива;
* системная иерархия в каталоге `/usr/local` используется для установки
программного обеспечения системным администратором без использования
пакетов (не рекомендуется для использования из-за проблем поддержки
в актуальном состоянии);
* системная иерархия в каталоге `/opt` используется для установки
стороннего программного обеспечения. В рамках данной иерархии
предполагается, что каждый программный продукт располагается в
собственном каталоге. При таком типе сборки обычно используются
дополнительные методы (статическая компоновка, включение в состав
пакета своего набора динамических библиотек) для обеспечения работы
пакета в операционных системам с отличающимся составом библиотек
и другим циклом обновления;
* системная иерархия в домашнем каталоге пользователя не имеет
определённого стандарта, обычно производители дистрибутивов
предлагают использовать для исполняемых файлов каталоги
`$HOME/bin` или `$HOME/.local/bin`.
Система автоматизации сборки программного обеспечения https://cmake.org[CMake]
позволяет организовать окружение подобное перечисленным выше.
На этапе сборки проекта можно создать структуру каталогов,
которая будет отвечать требованиям по логическому разделению
файлов на исполняемые, заголовочные, библиотеки, файлы настроек и т.д.
== Автоматическая адаптация к текущему окружению
Для обеспечения единообразной работы вне зависимости от варианта
иерархии каталогов, в которой находится исполняемый файл, можно
выполнять автоматическую настройку на работу в текущем окружении.
В библиотеке https://git.246060.ru/f1x1t/myxlib[myxlib] реализован
класс, который анализирует расположение и окружение исполняемого
файла и предоставляет методы для получения имён каталогов,
соответствующих текущему окружению. Названия методов и описания
возвращаемых значений приведены в таблице.
.Имена методов и описания
[cols="2m,4",options="header"]
|===
| Метод | Описание
| homeDirectory() | Полный путь к домашнему каталогу текущего пользователя
| tempDirectory() | Полный путь к каталогу с временными файлами
| userConfigDirectory() | Полный путь к пользовательскому каталогу с файлами настройки
| userConstDataDirectory() | Полный путь к пользовательскому каталогу с неизменяемыми файлами
| userVarDataDirectory() | Полный путь к пользовательскому каталогу с изменяемыми файлами
| userLogDirectory() | Полный путь к пользовательскому каталогу с журналами работы
| executableFilePath() | Полный путь к исполняемому файлу
| systemConfigDirectory() | Полный путь к системному каталогу с файлами настройки
| systemConstDataDirectory() | Полный путь к системному каталогу с неизменяемыми файлами
| systemVarDataDirectory() | Полный путь к системному каталогу с изменяемыми файлами
| systemLogDirectory() | Полный путь к системному каталогу с журналами работы
| executableFileDirectory() | Полный путь к каталогу с исполняемым файлом
| executableFileName() | Имя исполняемого файла
| projectName() | Имя подкаталога для проекта
|===
Пример использования:
[source,cpp]
----
#include <myx/filesystem/paths.hpp>
namespace MF = myx::filesystem;
MF::Paths& paths = MF::Paths::instance();
paths.init();
qDebug() << paths.systemConstDataDirectory().path();
----
== Правила выбора типа окружения
Класс `myx::filesystem::Paths` реализован в виде синглтона,
чтобы повторно не выполнять проверку окружения в разных частях программы.
Сначала определяются имена пользовательского и временного каталогов с
помощью вызовов функций https://doc.qt.io/qt-5/qdir.html#homePath[`QDir::homePath`]
и https://doc.qt.io/qt-5/qdir.html#tempPath[`QDir::tempPath`], затем
имена пользовательских каталогов для настроек, постоянных и изменяемых
данных и журналов. Эти значения не зависят от расположения исполняемого файла,
а определяются в соответствии со значениям переменных окружения `HOME`,
`TMPDIR`, `XDG_CONFIG_HOME` и `XDG_DATA_HOME`, либо устанавливаются значения,
принятые в стандартах. Пример имён каталогов для пользователя `user`,
названия организации `org`, названия выполняемой работы `theme` и проекта
`project` приведён в таблице.
.Стандартные каталоги для текущего пользователя
[cols="4,4m,6m",options="header"]
|===
| Назначение каталога | Метод | Значение
| Домашний каталог | homeDirectory() | /home/user
| Временные файлы | tempDirectory() | /tmp
| Файлы настройки | userConfigDirectory() | /home/user/.config/org-theme/project
| Неизменяемые файлы | userConstDataDirectory() | /home/user/.local/share/org-theme/project/share
| Изменяемые файлы | userVarDataDirectory() | /home/user/.local/share/org-theme/project/var
| Журналы работы | userLogDirectory() | /home/user/.local/share/org-theme/project/log
|===
=== Общая проверка
Для определения типа текущего окружения используется полный путь
к исполняемому файлу, если он находится в каталоге `bin`, то выполняются
проверки работы в одной из возможных вариантов иерархий,
иначе делается заключение о том, что файлы всех типов находятся
в одном каталоге с исполняемым и дальнейшие проверки не выполняются.
IMPORTANT: При проверке типов иерархии всегда проверяется наличие
всех необходимых каталогов, при отсутствии хотя бы одного будет
принято решение, что файлы всех типов находятся в одном каталоге
с исполняемым.
=== Проверка на работу в иерархии `/opt`
Если полный путь к исполняемому файлу начинается с `/opt` и
содержит в себе название текущего проекта, например
`/opt/org-theme/project/bin/application`, то выполняется проверка
на наличие сопутствующих системных каталогов. Если они присутствуют,
то принимается решение, что окружение в иерархии `/opt` сформировано правильно,
иначе делается заключение о том, что файлы всех типов находятся
в одном каталоге с исполняемым и дальнейшие проверки не выполняются.
Пример правильной структуры каталогов для данной иерархии приведён в таблице.
.Каталоги в иерархии `/opt`
[cols="4,4m,5m",options="header"]
|===
| Назначение файла / каталога | Метод | Значение
| Исполняемый файл | executableFilePath() | /opt/org-theme/project/bin/application
| Файлы настройки | systemConfigDirectory() | /opt/org-theme/project/etc
| Неизменяемые файлы | systemConstDataDirectory() | /opt/org-theme/project/share
| Изменяемые файлы | systemVarDataDirectory() | /opt/org-theme/project/var
| Журналы работы | systemLogDirectory() | /opt/org-theme/project/log
|===
=== Проверка на работу в иерархии `/usr/local`
Если полный путь к исполняемому файлу начинается с `/usr/local`,
например `/usr/local/bin/application`, то выполняется проверка
на наличие сопутствующих системных каталогов. Если они присутствуют,
то принимается решение, что окружение в иерархии `/usr/local` сформировано правильно,
иначе делается заключение о том, что файлы всех типов находятся
в одном каталоге с исполняемым и дальнейшие проверки не выполняются.
Пример правильной структуры каталогов для данной иерархии приведён в таблице.
.Каталоги в иерархии `/usr/local`
[cols="4,4m,5m",options="header"]
|===
| Назначение файла / каталога | Метод | Значение
| Исполняемый файл | executableFilePath() | /usr/local/bin/application
| Файлы настройки | systemConfigDirectory() | /usr/local/etc/project
| Неизменяемые файлы | systemConstDataDirectory() | /usr/local/share/project
| Изменяемые файлы | systemVarDataDirectory() | /var/lib/project
| Журналы работы | systemLogDirectory() | /var/log/project
|===
=== Проверка на работу в иерархии `/usr`
Если полный путь к исполняемому файлу начинается с `/usr`,
например `/usr/bin/application`, то выполняется проверка
на наличие сопутствующих системных каталогов. Если они присутствуют,
то принимается решение, что окружение в иерархии `/usr` сформировано правильно,
иначе делается заключение о том, что файлы всех типов находятся
в одном каталоге с исполняемым и дальнейшие проверки не выполняются.
Пример правильной структуры каталогов для данной иерархии приведён в таблице.
.Каталоги в иерархии `/usr`
[cols="4,4m,5m",options="header"]
|===
| Назначение файла / каталога | Метод | Значение
| Исполняемый файл | executableFilePath() | /usr/bin/application
| Файлы настройки | systemConfigDirectory() | /etc/project
| Неизменяемые файлы | systemConstDataDirectory() | /usr/share/project
| Изменяемые файлы | systemVarDataDirectory() | /var/lib/project
| Журналы работы | systemLogDirectory() | /var/log/project
|===
=== Проверка на работу в домашнем каталоге
Если полный путь к исполняемому файлу начинается с `/home/user/bin` или
`/home/user/.local/bin`, например `/home/user/bin/application`, то выполняется
проверка на наличие сопутствующих системных каталогов. Если они присутствуют,
то принимается решение, что окружение в домашнем каталоге сформировано правильно,
иначе делается заключение о том, что файлы всех типов находятся
в одном каталоге с исполняемым и дальнейшие проверки не выполняются.
Пример правильной структуры каталогов для данной иерархии приведён в таблице.
.Каталоги при работе в домашнем каталоге
[cols="4,4m,6m",options="header"]
|===
| Назначение файла / каталога | Метод | Значение
| Исполняемый файл | executableFilePath() | /home/user/bin/application
| Файлы настройки | systemConfigDirectory() | /home/user/.config/org-theme/project
| Неизменяемые файлы | systemConstDataDirectory() | /home/user/.local/share/org-theme/project/share
| Изменяемые файлы | systemVarDataDirectory() | /home/user/.local/share/org-theme/project/var
| Журналы работы | systemLogDirectory() | /home/user/.local/share/org-theme/project/log
|===
=== Проверка на работу в окружении для разработки
Если исполняемый файл находится в каталоге `bin` и при этом окружение не совпадает
ни с одним из перечисленных выше, то делается предположение, что исполняемый файл
запускается из окружения, сформированного системой управления проектом, и в данный
момент идёт разработка (отладка) приложения. В этом случае целесообразно считать
системными каталогами те, которые находятся внутри иерархии каталогов программного
проекта. Если присутствуют каталоги, созданные системой управления проекта,
то принимается решение, что окружение сформировано правильно,
иначе делается заключение о том, что файлы всех типов находятся
в одном каталоге с исполняемым и на этом проверки заканчиваются.
Пример правильной структуры каталогов для данной иерархии приведён в таблице.
.Каталоги при работе в окружении для разработки
[cols="4,4m,6m",options="header"]
|===
| Назначение файла / каталога | Метод | Значение
| Исполняемый файл | executableFilePath() | /home/user/work/project/_build/debug/bin/application
| Файлы настройки | systemConfigDirectory() | /home/user/work/project/_build/debug/etc
| Неизменяемые файлы | systemConstDataDirectory() | /home/user/work/project/_build/debug/share
| Изменяемые файлы | systemVarDataDirectory() | /home/user/work/project/_build/debug/var
| Журналы работы | systemLogDirectory() | /home/user/work/project/_build/debug/log
|===
=== Расположение в одном каталоге
Если в ходе перечисленных выше проверок не удалось найти правильно
сформированное окружение, то применяется настройка по умолчанию,
которая соответствует ситуации, когда все типы файлов расположены
в одном каталоге с исполняемым файлом. Пример для такого случая приведён в таблице.
.Каталоги в неопределённой иерархии
[cols="4,4m,6m",options="header"]
|===
| Назначение файла / каталога | Метод | Значение
| Исполняемый файл | executableFilePath() | /home/user/work/project/application
| Файлы настройки | systemConfigDirectory() | /home/user/work/project
| Неизменяемые файлы | systemConstDataDirectory() | /home/user/work/project
| Изменяемые файлы | systemVarDataDirectory() | /home/user/work/project
| Журналы работы | systemLogDirectory() | /home/user/work/project
|===

View File

@ -13,14 +13,14 @@
[source,sh]
----
sudo apt-get install clang-tidy-10
sudo apt-get install clang-tidy-6.0
----
Использование:
[source,sh]
----
cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-10" path/to/source
cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-6.0" path/to/source
----
В каталоге проекта нужно создать файл `.clang-tidy` в формате YAML со
@ -30,25 +30,12 @@ cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-10" path/to/source
----
---
Checks: '-*,
bugprone-*,
clang-analyzer-*,
cppcoreguidelines-*,
google-*,
llvm-*,
misc-*,
modernize-*,
readability-*,
performance-*,
portability-*,
-cppcoreguidelines-owning-memory,
-cppcoreguidelines-avoid-magic-numbers,
-cppcoreguidelines-pro-bounds-array-to-pointer-decay,
-readability-magic-numbers,
-readability-else-after-return,
-modernize-use-trailing-return-type,
-modernize-avoid-c-arrays,
-performance-no-automatic-move,
'
clang-diagnostic-*,
readability-*,
modernize-*,
cppcoreguidelines-*,
google-*,
bugprone-*'
CheckOptions:
- key: readability-identifier-naming.ClassCase
value: CamelCase
@ -137,7 +124,7 @@ cmake -DCMAKE_LINK_WHAT_YOU_USE=TRUE ..
[source,sh]
----
sudo apt-get install clazy clang-9
sudo apt-get install clazy clang-6.0
----
Использование:
@ -145,6 +132,7 @@ sudo apt-get install clazy clang-9
[source,sh]
----
CLAZY_CHECKS=level2 cmake -DCMAKE_CXX_COMPILER=clazy ..
CLANGXX=clang++-9 make
CLANGXX=clang++-6.0 make
----
=== PVS-Studio

View File

@ -1,44 +0,0 @@
= Разные вопросы и ответы
:title-separator: {sp}|
:category: Linux/Программы
:tags: Linux, Qt, Qt Creator, C++,
:toc:
:icons: font
include::{l10ndir}/{lang}.adoc[]
[QUESTION]
====
[float]
==== Проект на CMake перестал настраиваться.
Сообщения вида:
----
Не удалось разобрать проект CMake: потеряно соединение с сервером CMake.
----
====
[ANSWER]
====
. Закрыть проект в Qt Creator
. Удалить файл `CMakeLists.txt.user` и целевой каталог сборки, например `_build`
. Открыть проект в Qt Creator
====
[QUESTION]
====
[float]
==== Отсутствует необходимый для сборки пакет.
Пример:
image::qtcreator-setup/errors01.png[errors01,align="center"]
====
[ANSWER]
====
. Установить недостающий пакет
. Выполнить menu:Сборка[Запустить CMake]
====

View File

@ -3,35 +3,15 @@
:category: Программирование
:tags: программирование, git,
Если у подмодулей необходимо заменить адрес синхронизации и/или
имя используемой ветки, то можно отредактировать в корневом
каталоге проекта файл `.gitmodules` и выполнить данный скрипт:
Если у подмодуля, находящегося в каталоге `thirdparty/example` нужно
заменить адрес синхронизации и имя используемой ветки, то в каталоге с
файлом `.gitmodules`, в котором содержится информация об этом подмодуле,
нужно выполнить команды:
[source,sh]
----
#!/bin/bash
# Замена адресов для подмодулей:
# 1. Отредактировать файл .gitmodules
# 2. Запустить этот скрипт
#
# Параметры:
# - имя подмодуля (если присутствует, то замена
# адреса производится только для данного подмодуля)
M="#"
[ ! -z $1 ] && M="$1"
cat .gitmodules | while read s; do
s=${s/\*/}
s=${s/path = /}
if [ "$M" = "#" -o "x$M" = "x$s" ]; then
rm -rf .git/modules/$s
rm -rf $s
fi
done
git submodule sync
git submodule update
git config --file=.gitmodules submodule.thirdparty/example.url https://github.com/username/ABC.git
git config --file=.gitmodules submodule.thirdparty/example.branch new-branch-name
git submodule sync --recursive
git submodule update --init --recursive --remote
----

View File

@ -23,15 +23,27 @@ sudo apt-get install git
[width="100%",cols="18%,20%,62%",options="header",]
|===
| Термин | Англ | Определение
| Рабочий каталог | working tree, working directory | Набор файлов в текущем каталоге
| Репозиторий | repository, repo | Контейнер, хранящий историю изменений файлов проекта
| Индекс | index, staging area | Область между рабочим каталогом и репозиторием, в котором осуществляется подготовка к фиксации
| SHA-1 | SHA-1 | Уникальный идентификатор, отражающий информацию об истории
| Ветка | branch | Именованная последовательность в истории изменений
| Фиксация (коммит) | commit | Набор файлов, записанных в историю одновременно
| `HEAD` | `HEAD` | Имя ссылки на последнюю фиксацию в текущей ветке
| Метка | tag | Именованная ссылка на некоторую фиксацию в истории
|Термин |Англ |Определение
|Рабочий каталог |working tree, working directory |Набор файлов в
текущем каталоге
|Репозиторий |repository, repo |Контейнер, хранящий историю изменений
файлов проекта
|Индекс |index, staging area |Область между рабочим каталогом и
репозиторием, в котором осуществляется подготовка к фиксации
|SHA-1 |SHA-1 |Уникальный идентификатор, отражающий информацию об
истории
|Ветка |branch |Именованная последовательность в истории изменений
|Фиксация (коммит) |commit |Набор файлов, записанных в историю
одновременно
|`HEAD` |`HEAD` |Имя ссылки на последнюю фиксацию в текущей ветке
|Метка |tag |Именованная ссылка на некоторую фиксацию в истории
|===
== Состояния
@ -51,20 +63,20 @@ sudo apt-get install git
@startuml
skinparam padding 16
participant untracked as "Неотслеживамые\n(untracked)"
participant untracked as "Неотслеживамые\n(untracked)"
box "Отслеживаемые"
participant staged as "Подготовленные к фиксации\n(indexed)" #55FF55
participant staged as "Подготовленные к фиксации\n(indexed)" #55FF55
participant unmodified as "Неизменённые\n(unmodified)" #99FF99
participant modified as "Изменённые\n(modified)" #77FF77
participant modified as "Изменённые\n(modified)" #77FF77
end box
untracked -> staged: git add
staged -> unmodified: git commit
unmodified -> modified: редактирование
modified -> staged: git add
modified -> untracked: git rm ~--cached
unmodified -> untracked: git rm ~--cached
staged -> untracked: git rm ~--cached
untracked -> staged : git add
staged -> unmodified : git commit
unmodified -> modified : редактирование
modified -> staged : git add
modified -> untracked: git rm --cached
unmodified -> untracked: git rm --cached
staged -> untracked: git rm --cached
@enduml
----
@ -80,14 +92,14 @@ staged -> untracked: git rm ~--cached
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
participant index as "Индекс\n(index)" #77FF77
participant local as "Локальный репозиторий\n(local repository)" #FF7777
participant remote as "Удалённый репозиторий\n(remote repository)" #7777FF
workspace -> local : git commit -a
workspace -> index : git add (-u)
index -> local : git commit
local -> remote : git push
index -> local : git commit
local -> remote : git push
== Обновление с сервера ==
@ -118,63 +130,29 @@ 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
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
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>
workspace <-> local : <font color=red>Просмотр информации</font>\n<b>git status</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 branch temp</b>
local <-> workspace : <font color=red>Переход на новую ветку</font>\n<b>git checkout temp</b>
remote -> local : <font color=red>Получение изменений с сервера</font>\n<b>git fetch</b>
remote -> local : <font color=red>Обновление подмодулей</font>\n<b>git submodule update --remote</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>
local -> workspace : <font color=red>Слияние с удалённой веткой</font>\n<b>git merge origin/master</b>
local <-> workspace : <font color=red>Создание новой ветки</font>\n<b>git branch temp</b>
local <-> workspace : <font color=red>Переход на новую ветку</font>\n<b>git checkout temp</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>
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 new_task</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>
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>
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>
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 checkout branch_name</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 -> remote : <font color=red>Отправка ветки на сервер</font>\n<b>git push origin branch_name</b>
remote ->] : <font color=red>Создание запроса на слияние</font>
deactivate workspace
@enduml
----
@ -183,31 +161,45 @@ deactivate workspace
[width="100%",cols="15%,35%,50%",options="header",]
|===
| Команда | Ключи | Описание
| `git config` | `--global user.name "John Doe"` | Имя текущего пользователя
| `git config` | `--global user.email "mail@example.com"` | Почта текущего пользователя
| `git config` | `--list` | Вывод текущей конфигурации
| `git config` | `--global --list` | Вывод глобальной конфигурации
|Команда |Ключи |Описание
|`git config` |`--global user.name "John Doe"` |Имя текущего
пользователя
|`git config` |`--global user.email "mail@example.com"` |Почта текущего
пользователя
|`git config` |`--list` |Вывод текущей конфигурации
|`git config` |`--global --list` |Вывод глобальной конфигурации
|===
== Инициализация
[width="100%",cols="15%,35%,50%",options="header",]
|===
| Команда | Ключи | Описание
| `git init` | `<dir>` | Создать пустой репозиторий в каталоге `<dir>`
| `git clone` | `<giturl>` `<dir>` | Создать в каталоге `<dir>` копию репозитория, находящегося по адресу `<giturl>`
| `git clone` | `--recursive <giturl>` `<dir>` | Создать в каталоге `<dir>` копию репозитория, находящегося по адресу `<giturl>`, с учётом подмодулей
|Команда |Ключи |Описание
|`git init` |`<dir>` |Создать пустой репозиторий в каталоге `<dir>`
|`git clone` |`<giturl>` `<dir>` |Создать в каталоге `<dir>` копию
репозитория, находящегося по адресу `<giturl>`
|`git clone` |`--recursive <giturl>` `<dir>` |Создать в каталоге `<dir>`
копию репозитория, находящегося по адресу `<giturl>`, с учётом
подмодулей
|===
== Подмодули
[width="100%",cols="15%,25%,60%",options="header",]
|===
| Команда | Ключи | Описание
| `git submodule` | `add <giturl> <dir>` | Добавить в каталог `<dir>` текущего репозитория подмодуль, находящийся по адресу `<giturl>`
| `git submodule` | `update --recursive --remote` | Обновить подмодули
| `git submodule` | `sync --recursive` | Заменить адреса подмодулей на указанные в файле `.gitmodules`
|Команда |Ключи |Описание
|`git submodule` |`add <giturl> <dir>` |Добавить в каталог `<dir>`
текущего репозитория подмодуль, находящийся по адресу `<giturl>`
|`git submodule` |`update --recursive --remote` |Обновить подмодули
|`git submodule` |`sync --recursive` |Заменить адреса подмодулей на
указанные в файле `.gitmodules`
|===
Удаление подмодуля:
@ -222,42 +214,54 @@ git rm <path/to/submodule>
[width="100%",cols="15%,20%,65%",options="header",]
|===
| Команда | Ключи | Описание
| `git add` | `<filename>` | Подготовить файл `<filename>` к фиксации
| `git commit` | | Зафиксировать подготовленные файлы
| `git commit` | `-a` | Зафиксировать все отслеживаемые файлы, которые были изменены
|Команда |Ключи |Описание
|`git add` |`<filename>` |Подготовить файл `<filename>` к фиксации
|`git commit` | |Зафиксировать подготовленные файлы
|`git commit` |`-a` |Зафиксировать все отслеживаемые файлы, которые были
изменены
|===
== Удаление
[width="100%",cols="15%,20%,65%",options="header",]
|===
| Команда | Ключи | Описание
| `git rm` | `<filename>` | Удалить файл из индекса и рабочего каталога
| `git rm` | `-f <filename>` | Принудительное удаление файла
| `git rm` | `--cached <filename>` | Удаление файла из проекта, но не из рабочего каталога
|Команда |Ключи |Описание
|`git rm` |`<filename>` |Удалить файл из индекса и рабочего каталога
|`git rm` |`-f <filename>` |Принудительное удаление файла
|`git rm` |`--cached <filename>` |Удаление файла из проекта, но не из
рабочего каталога
|===
== Информация
[width="100%",cols="15%,20%,65%",options="header",]
|===
| Команда | Ключи | Описание
| `git status` | `-s` | Вывод информации о рабочем каталоге в краткой форме
| `git log` | `--oneline` | Вывод журнала изменений в краткой форме
| `git ls-files` | | Вывод списка отслеживаемых и подготовленных файлов
|Команда |Ключи |Описание
|`git status` |`-s` |Вывод информации о рабочем каталоге в краткой форме
|`git log` |`--oneline` |Вывод журнала изменений в краткой форме
|`git ls-files` | |Вывод списка отслеживаемых и подготовленных файлов
|===
== Удалённый репозиторий
[width="100%",cols="15%,20%,65%",options="header",]
|===
| Команда | Ключи | Описание
| `git remote` | `-v` | Список адресов удалённых репозиториев
| `git branch` | `-r` | Список веток в удалённых репозиториях
| `git remote` | `add <name> <url>` | Создать ссылку `<name>` на удалённый репозиторий, находящийся по адресу `<url>`
| `git remote` | `rename <old> <new>` | Переименовать ссылку `<old>` на `<new>`
| `git remote` | `rm <name>` | Удалить ссылку `<name>`
|Команда |Ключи |Описание
|`git remote` |`-v` |Список адресов удалённых репозиториев
|`git branch` |`-r` |Список веток в удалённых репозиториях
|`git remote` |`add <name> <url>` |Создать ссылку `<name>` на удалённый
репозиторий, находящийся по адресу `<url>`
|`git remote` |`rename <old> <new>` |Переименовать ссылку `<old>` на
`<new>`
|`git remote` |`rm <name>` |Удалить ссылку `<name>`
|===
* Обращение к удалённому репозиторию осуществляется по ссылке,
@ -268,21 +272,32 @@ git rm <path/to/submodule>
[width="100%",cols="15%,20%,65%",options="header",]
|===
| Команда | Ключи | Описание
| `git push` | `<remote> <branch>` | Отправить ветку `<branch>` в удалённый репозиторий `<remote>`
| `git push` | `<remote> --all` | Отправить все ветки в удалённый репозиторий `<remote>`
| `git push` | `--d <remote> <branch>` | Удалить ветку `<branch>` из удалённого репозитория `<remote>`
|Команда |Ключи |Описание
|`git push` |`<remote> <branch>` |Отправить ветку `<branch>` в удалённый
репозиторий `<remote>`
|`git push` |`<remote> --all` |Отправить все ветки в удалённый
репозиторий `<remote>`
|`git push` |`--d <remote> <branch>` |Удалить ветку `<branch>` из
удалённого репозитория `<remote>`
|===
== Получение изменений
[width="100%",cols="15%,20%,65%",options="header",]
|===
| Команда | Ключи | Описание
| `git fetch` | `<remote>` | Получить изменения из всех веток репозитория `<remote>`, но не выполнять слияние
| `git fetch` | `<remote> <branch>` | Получить изменения из ветки `<branch>` репозитория `<remote>`, но не выполнять слияние
| `git merge` | `<remote>/<branch>` | Выполнить слияние с веткой `<branch>` репозитория `<remote>`
| `git pull` | `<remote>` | Получение и слияние
|Команда |Ключи |Описание
|`git fetch` |`<remote>` |Получить изменения из всех веток репозитория
`<remote>`, но не выполнять слияние
|`git fetch` |`<remote> <branch>` |Получить изменения из ветки
`<branch>` репозитория `<remote>`, но не выполнять слияние
|`git merge` |`<remote>/<branch>` |Выполнить слияние с веткой `<branch>`
репозитория `<remote>`
|`git pull` |`<remote>` |Получение и слияние
|===
== Ветки
@ -290,25 +305,42 @@ git rm <path/to/submodule>
[width="100%",cols="15%,20%,65%",options="header",]
|===
|Команда |Ключи |Описание
| `git branch` | `-a` | Список локальных и удалённых веток
| `git branch` | | Список локальных веток
| `git branch` | `<branch>` | Создать ветку `<branch>`
| `git checkout` | `<sha-1>` | Перейти к фиксации с идентификатором `<sha-1>`
| `git branch` | `-m <old> <new>` | Переименовать ветку `<old>` в `<new>`
| `git merge` | `<branch>` | Слить изменения из ветки `<branch>` в текущую ветку
| `git branch` | `-d <branch>` | Удалить ветку `<branch>`
|`git branch` |`-a` |Список локальных и удалённых веток
|`git branch` | |Список локальных веток
|`git branch` |`<branch>` |Создать ветку `<branch>`
|`git checkout` |`<sha-1>` |Перейти к фиксации с идентификатором
`<sha-1>`
|`git branch` |`-m <old> <new>` |Переименовать ветку `<old>` в `<new>`
|`git merge` |`<branch>` |Слить изменения из ветки `<branch>` в текущую
ветку
|`git branch` |`-d <branch>` |Удалить ветку `<branch>`
|===
== Сравнение
[width="100%",cols="15%,20%,65%",options="header",]
|===
| Команда | Ключи | Описание
| `git diff` | | Сравнить рабочий каталог и индекс
| `git diff` | `-cached` | Сравнить индекс и последнюю фиксацию
| `git diff` | `HEAD` | Сравнить последнюю фиксацию и рабочий каталог
| `git diff` | `--stat` | Краткий вывод результатов
| `git diff` | `<sha-1> <sha-1>` | Сравнить две точки с указанными идентификаторами
| `git diff` | `<dir>` `<file>` | Сравнивать только указанный каталог `<dir>` или файл `<file>`
| `git difftool` | | Отобразить результаты сравнения в программе, определяемой переменной `diff.tool`
|Команда |Ключи |Описание
|`git diff` | |Сравнить рабочий каталог и индекс
|`git diff` |`-cached` |Сравнить индекс и последнюю фиксацию
|`git diff` |`HEAD` |Сравнить последнюю фиксацию и рабочий каталог
|`git diff` |`--stat` |Краткий вывод результатов
|`git diff` |`<sha-1> <sha-1>` |Сравнить две точки с указанными
идентификаторами
|`git diff` |`<dir>` `<file>` |Сравнивать только указанный каталог
`<dir>` или файл `<file>`
|`git difftool` | |Отобразить результаты сравнения в программе,
определяемой переменной `diff.tool`
|===

View File

@ -19,16 +19,11 @@ CREATE TABLE example (
----
const char cart[] = {0x04, 0x43, 0x00, 0x9A};
QByteArray binDataArray(QByteArray::fromRawData(cart, 4));
QSqlQuery query1;
query1.prepare(QString("INSERT INTO example (id, bin_data) VALUES(:id, :bin_data)");
query1.bindValue(":id", 10, QSql::In);
query1.bindValue(":bin_data", binDataArray, QSql::In | QSql::Binary);
query1.exec();
QSqlQuery query2;
query2.exec(QString("INSERT INTO files VALUES(%1, %2);")
.arg(18)
.arg(db.driver()->formatValue(dataField)));
QSqlQuery query;
query.prepare(QString("INSERT INTO example (id, bin_data) VALUES(:id, :bin_data)");
query.bindValue(":id", 10, QSql::In);
query.bindValue(":bin_data", binDataArray, QSql::In | QSql::Binary);
query.exec();
----
Чтение данных:

View File

@ -53,10 +53,10 @@ https://git.246060.ru/f1x1t/clang-tidy-readability-identifier-naming[Проек
[cols=",",options="header",]
|===
| Параметр | Значение
| AbstractClassCase | `CamelCase`
| AbstractClassPrefix | `''`
| AbstractClassSuffix | `''`
|Параметр |Значение
|AbstractClassCase |`CamelCase`
|AbstractClassPrefix |`''`
|AbstractClassSuffix |`''`
|===
Пример кода до форматирования:
@ -83,10 +83,10 @@ class AbstractClass {
[cols=",",options="header",]
|===
| Параметр | Значение
| ClassCase | `CamelCase`
| ClassPrefix | `''`
| ClassSuffix | `''`
|Параметр |Значение
|ClassCase |`CamelCase`
|ClassPrefix |`''`
|ClassSuffix |`''`
|===
Пример кода до форматирования:
@ -115,10 +115,10 @@ class TestClass {
[cols=",",options="header",]
|===
| Параметр | Значение
| StructCase | `CamelCase`
| StructPrefix | `''`
| StructSuffix | `''`
|Параметр |Значение
|StructCase |`CamelCase`
|StructPrefix |`''`
|StructSuffix |`''`
|===
Пример кода до форматирования:
@ -143,10 +143,10 @@ struct TestStruct {
[cols=",",options="header",]
|===
| Параметр | Значение
| UnionCase | `CamelCase`
| UnionPrefix | `''`
| UnionSuffix | `''`
|Параметр |Значение
|UnionCase |`CamelCase`
|UnionPrefix |`''`
|UnionSuffix |`''`
|===
Пример кода до форматирования:
@ -173,10 +173,10 @@ union TestUnion {
[cols=",",options="header",]
|===
| Параметр | Значение
| EnumCase | `CamelCase`
| EnumPrefix | `''`
| EnumSuffix | `''`
|Параметр |Значение
|EnumCase |`CamelCase`
|EnumPrefix |`''`
|EnumSuffix |`''`
|===
Пример кода до форматирования:
@ -197,10 +197,10 @@ enum TestEnum { ONE, TWO };
[cols=",",options="header",]
|===
| Параметр | Значение
| EnumConstantCase | `UPPER_CASE`
| EnumConstantPrefix | `''`
| EnumConstantSuffix | `''`
|Параметр |Значение
|EnumConstantCase |`UPPER_CASE`
|EnumConstantPrefix |`''`
|EnumConstantSuffix |`''`
|===
Пример кода до форматирования:
@ -221,10 +221,10 @@ enum TestEnum { ONE, TWO };
[cols=",",options="header",]
|===
| Параметр | Значение
| NamespaceCase | `lower_case`
| NamespacePrefix | `''`
| NamespaceSuffix | `''`
|Параметр |Значение
|NamespaceCase |`lower_case`
|NamespacePrefix |`''`
|NamespaceSuffix |`''`
|===
Пример кода до форматирования:
@ -249,10 +249,10 @@ namespace test_ns {
[cols=",",options="header",]
|===
| Параметр | Значение
| InlineNamespaceCase | `lower_case`
| InlineNamespacePrefix | `''`
| InlineNamespaceSuffix | `''`
|Параметр |Значение
|InlineNamespaceCase |`lower_case`
|InlineNamespacePrefix |`''`
|InlineNamespaceSuffix |`''`
|===
Пример кода до форматирования:
@ -281,10 +281,10 @@ inline namespace inline_namespace {
[cols=",",options="header",]
|===
| Параметр | Значение
| TypeAliasCase | `lower_case`
| TypeAliasPrefix | `''`
| TypeAliasSuffix | `''`
|Параметр |Значение
|TypeAliasCase |`lower_case`
|TypeAliasPrefix |`''`
|TypeAliasSuffix |`''`
|===
Пример кода до форматирования:
@ -311,10 +311,10 @@ using MyStructType = MyStructure;
[cols=",",options="header",]
|===
| Параметр | Значение
| TypedefCase | `lower_case`
| TypedefPrefix | `''`
| TypedefSuffix | `''`
|Параметр |Значение
|TypedefCase |`lower_case`
|TypedefPrefix |`''`
|TypedefSuffix |`''`
|===
Пример кода до форматирования:
@ -339,10 +339,10 @@ typedef int my_int;
[cols=",",options="header",]
|===
| Параметр | Значение
| GlobalVariableCase | `lower_case`
| GlobalVariablePrefix | `''`
| GlobalVariableSuffix | `''`
|Параметр |Значение
|GlobalVariableCase |`lower_case`
|GlobalVariablePrefix |`''`
|GlobalVariableSuffix |`''`
|===
Пример кода до форматирования:
@ -363,10 +363,10 @@ unsigned global_variable;
[cols=",",options="header",]
|===
| Параметр | Значение
| LocalVariableCase | `camelBack`
| LocalVariablePrefix | `''`
| LocalVariableSuffix | `''`
|Параметр |Значение
|LocalVariableCase |`camelBack`
|LocalVariablePrefix |`''`
|LocalVariableSuffix |`''`
|===
Пример кода до форматирования:
@ -393,10 +393,10 @@ int function() {
[cols=",",options="header",]
|===
| Параметр | Значение
| StaticVariableCase | `camelBack`
| StaticVariablePrefix | `''`
| StatucVariableSuffix | `''`
|Параметр |Значение
|StaticVariableCase |`camelBack`
|StaticVariablePrefix |`''`
|StatucVariableSuffix |`''`
|===
Пример кода до форматирования:
@ -423,10 +423,10 @@ int functionWithStaticVariable() {
[cols=",",options="header",]
|===
| Параметр | Значение
| ConstexprVariableCase | `lower_case`
| ConstexprVariablePrefix | `''`
| ConstexprVariableSuffix | `''`
|Параметр |Значение
|ConstexprVariableCase |`lower_case`
|ConstexprVariablePrefix |`''`
|ConstexprVariableSuffix |`''`
|===
Пример кода до форматирования:
@ -447,10 +447,10 @@ constexpr int const_five = 5;
[cols=",",options="header",]
|===
| Параметр | Значение
| GlobalPointerCase | `lower_case`
| GlobalPointerPrefix | `''`
| GlobalPointerSuffix | `''`
|Параметр |Значение
|GlobalPointerCase |`lower_case`
|GlobalPointerPrefix |`''`
|GlobalPointerSuffix |`''`
|===
Пример кода до форматирования:
@ -471,10 +471,10 @@ void* global_pointer;
[cols=",",options="header",]
|===
| Параметр | Значение
| LocalPointerCase | `camelBack`
| LocalPointerPrefix | `''`
| LocalPointerSuffix | `''`
|Параметр |Значение
|LocalPointerCase |`camelBack`
|LocalPointerPrefix |`''`
|LocalPointerSuffix |`''`
|===
Пример кода до форматирования:
@ -503,10 +503,10 @@ void* function() {
[cols=",",options="header",]
|===
| Параметр | Значение
| ClassMemberCase | `camelBack`
| ClassMemberPrefix | `''`
| ClassMemberSuffix | `''`
|Параметр |Значение
|ClassMemberCase |`camelBack`
|ClassMemberPrefix |`''`
|ClassMemberSuffix |`''`
|===
Пример кода до форматирования:
@ -533,10 +533,10 @@ class ClassWithClassMember {
[cols=",",options="header",]
|===
| Параметр | Значение
| ConstantMemberCase | `lower_case`
| ConstantMemberPrefix | `''`
| ConstantMemberSuffix | `''`
|Параметр |Значение
|ConstantMemberCase |`lower_case`
|ConstantMemberPrefix |`''`
|ConstantMemberSuffix |`''`
|===
Пример кода до форматирования:
@ -561,10 +561,10 @@ class ClassWithConstantMember {
[cols=",",options="header",]
|===
| Параметр | Значение
| PrivateMemberCase | `camelBack`
| PrivateMemberPrefix | `'m_'`
| PrivateMemberSuffix | `''`
|Параметр |Значение
|PrivateMemberCase |`camelBack`
|PrivateMemberPrefix |`'m_'`
|PrivateMemberSuffix |`''`
|===
Пример кода до форматирования:
@ -591,10 +591,10 @@ class ClassWithPrivateMember {
[cols=",",options="header",]
|===
| Параметр | Значение
| ProtectedMemberCase | `camelBack`
| ProtectedMemberPrefix | `''`
| ProtectedMemberSuffix | `''`
|Параметр |Значение
|ProtectedMemberCase |`camelBack`
|ProtectedMemberPrefix |`''`
|ProtectedMemberSuffix |`''`
|===
Пример кода до форматирования:
@ -621,10 +621,10 @@ class ClassWithProtectedMember {
[cols=",",options="header",]
|===
| Параметр | Значение
| PublicMemberCase | `camelBack`
| PublicMemberPrefix | `''`
| PublicMemberSuffix | `''`
|Параметр |Значение
|PublicMemberCase |`camelBack`
|PublicMemberPrefix |`''`
|PublicMemberSuffix |`''`
|===
Пример кода до форматирования:
@ -653,10 +653,10 @@ class ClassWithPublicMember {
[cols=",",options="header",]
|===
| Параметр | Значение
| ConstantCase | `UPPER_CASE`
| ConstantPrefix | `''`
| ConstantSuffix | `''`
|Параметр |Значение
|ConstantCase |`UPPER_CASE`
|ConstantPrefix |`''`
|ConstantSuffix |`''`
|===
Пример кода до форматирования:
@ -677,10 +677,10 @@ const int THE_ONE = 1;
[cols=",",options="header",]
|===
| Параметр | Значение
| GlobalConstantCase | `UPPER_CASE`
| GlobalConstantPrefix | `''`
| GlobalConstantSuffix | `''`
|Параметр |Значение
|GlobalConstantCase |`UPPER_CASE`
|GlobalConstantPrefix |`''`
|GlobalConstantSuffix |`''`
|===
Пример кода до форматирования:
@ -701,10 +701,10 @@ const int THE_ONE = 1;
[cols=",",options="header",]
|===
| Параметр | Значение
| LocalConstantCase | `camelBack`
| LocalConstantPrefix | `''`
| LocalConstantSuffix | `''`
|Параметр |Значение
|LocalConstantCase |`camelBack`
|LocalConstantPrefix |`''`
|LocalConstantSuffix |`''`
|===
Пример кода до форматирования:
@ -731,10 +731,10 @@ int functionWithLocalConstant() {
[cols=",",options="header",]
|===
| Параметр | Значение
| StaticConstantCase | `camelBack`
| StaticConstantPrefix | `''`
| StaticConstantSuffix | `''`
|Параметр |Значение
|StaticConstantCase |`camelBack`
|StaticConstantPrefix |`''`
|StaticConstantSuffix |`''`
|===
Пример кода до форматирования:
@ -761,10 +761,10 @@ int functionWithStaticConstant() {
[cols=",",options="header",]
|===
| Параметр | Значение
| ClassConstantCase | `UPPER_CASE`
| ClassConstantPrefix | `''`
| ClassConstantSuffix | `''`
|Параметр |Значение
|ClassConstantCase |`UPPER_CASE`
|ClassConstantPrefix |`''`
|ClassConstantSuffix |`''`
|===
Пример кода до форматирования:
@ -791,10 +791,10 @@ class ClassWithClassConstant {
[cols=",",options="header",]
|===
| Параметр | Значение
| GlobalConstantPointerCase | `lower_case`
| GlobalConstantPointerPrefix | `''`
| GlobalConstantPointerSuffix | `''`
|Параметр |Значение
|GlobalConstantPointerCase |`lower_case`
|GlobalConstantPointerPrefix |`''`
|GlobalConstantPointerSuffix |`''`
|===
Пример кода до форматирования:
@ -817,10 +817,10 @@ void* const global_const_pointer = global_pointer;
[cols=",",options="header",]
|===
| Параметр | Значение
| LocalConstantPointerCase | `camelBack`
| LocalConstantPointerPrefix | `''`
| LocalConstantPointerSuffix | `''`
|Параметр |Значение
|LocalConstantPointerCase |`camelBack`
|LocalConstantPointerPrefix |`''`
|LocalConstantPointerSuffix |`''`
|===
Пример кода до форматирования:
@ -851,10 +851,10 @@ void* functionWithLocalConstPointer() {
[cols=",",options="header",]
|===
| Параметр | Значение
| FunctionCase | `camelBack`
| FunctionPrefix | `''`
| FunctionSuffix | `''`
|Параметр |Значение
|FunctionCase |`camelBack`
|FunctionPrefix |`''`
|FunctionSuffix |`''`
|===
Пример кода до форматирования:
@ -879,10 +879,10 @@ static int staticFunction() {
[cols=",",options="header",]
|===
| Параметр | Значение
| GlobalFunctionCase | `camelBack`
| GlobalFunctionPrefix | `''`
| GlobalFunctionSuffix | `''`
|Параметр |Значение
|GlobalFunctionCase |`camelBack`
|GlobalFunctionPrefix |`''`
|GlobalFunctionSuffix |`''`
|===
Пример кода до форматирования:
@ -907,10 +907,10 @@ int globalFunction() {
[cols=",",options="header",]
|===
| Параметр | Значение
| ConstexprFunctionCase | `camelBack`
| ConstexprFunctionPrefix | `''`
| ConstexprFunctionSuffix | `''`
|Параметр |Значение
|ConstexprFunctionCase |`camelBack`
|ConstexprFunctionPrefix |`''`
|ConstexprFunctionSuffix |`''`
|===
Пример кода до форматирования:
@ -937,10 +937,10 @@ constexpr int getFive() {
[cols=",",options="header",]
|===
| Параметр | Значение
| ClassMethodCase | `camelBack`
| ClassMethodPrefix | `''`
| ClassMethodSuffix | `''`
|Параметр |Значение
|ClassMethodCase |`camelBack`
|ClassMethodPrefix |`''`
|ClassMethodSuffix |`''`
|===
Пример кода до форматирования:
@ -967,10 +967,10 @@ class ClassWithMethod {
[cols=",",options="header",]
|===
| Параметр | Значение
| ConstexprMethodCase | `camelBack`
| ConstexprMethodPrefix | `''`
| ConstexprMethodSuffix | `''`
|Параметр |Значение
|ConstexprMethodCase |`camelBack`
|ConstexprMethodPrefix |`''`
|ConstexprMethodSuffix |`''`
|===
Пример кода до форматирования:
@ -997,10 +997,10 @@ class ClassWithConstexprMethod {
[cols=",",options="header",]
|===
| Параметр | Значение
| VirtualMethodCase | `camelBack`
| VirtualMethodPrefix | `''`
| VirtualMethodSuffix | `''`
|Параметр |Значение
|VirtualMethodCase |`camelBack`
|VirtualMethodPrefix |`''`
|VirtualMethodSuffix |`''`
|===
Пример кода до форматирования:
@ -1027,10 +1027,10 @@ class ClassWithVirtualMethod {
[cols=",",options="header",]
|===
| Параметр | Значение
| PrivateMethodCase | `camelBack`
| PrivateMethodPrefix | `''`
| PrivateMethodSuffix | `''`
|Параметр |Значение
|PrivateMethodCase |`camelBack`
|PrivateMethodPrefix |`''`
|PrivateMethodSuffix |`''`
|===
Пример кода до форматирования:
@ -1040,7 +1040,7 @@ class ClassWithVirtualMethod {
class ClassWithPrivateMethod {
private:
int get_int() { return 0; };
};
};
----
Пример кода после форматирования:
@ -1050,17 +1050,17 @@ class ClassWithPrivateMethod {
class ClassWithPrivateMethod {
private:
int getInt() { return 0; };
};
};
----
=== ProtectedMethod (Защищённый метод)
[cols=",",options="header",]
|===
| Параметр | Значение
| ProtectedMethodCase | `camelBack`
| ProtectedMethodPrefix | `''`
| ProtectedMethodSuffix | `''`
|Параметр |Значение
|ProtectedMethodCase |`camelBack`
|ProtectedMethodPrefix |`''`
|ProtectedMethodSuffix |`''`
|===
Пример кода до форматирования:
@ -1087,10 +1087,10 @@ class ClassWithProtectedMethod {
[cols=",",options="header",]
|===
| Параметр | Значение
| PublicMethodCase | `camelBack`
| PublicMethodPrefix | `''`
| PublicMethodSuffix | `''`
|Параметр |Значение
|PublicMethodCase |`camelBack`
|PublicMethodPrefix |`''`
|PublicMethodSuffix |`''`
|===
Пример кода до форматирования:
@ -1119,10 +1119,10 @@ class ClassWithPublicMethod {
[cols=",",options="header",]
|===
| Параметр | Значение
| ParameterCase | `camelBack`
| ParameterPrefix | `''`
| ParameterSuffix | `''`
|Параметр |Значение
|ParameterCase |`camelBack`
|ParameterPrefix |`''`
|ParameterSuffix |`''`
|===
Пример кода до форматирования:
@ -1147,10 +1147,10 @@ int returnInt(int returnValue) {
[cols=",",options="header",]
|===
| Параметр | Значение
| ConstantParameterCase | `camelBack`
| ConstantParameterPrefix | `''`
| ConstantParameterSuffix | `''`
|Параметр |Значение
|ConstantParameterCase |`camelBack`
|ConstantParameterPrefix |`''`
|ConstantParameterSuffix |`''`
|===
Пример кода до форматирования:
@ -1175,10 +1175,10 @@ char returnChar(const char returnValue) {
[cols=",",options="header",]
|===
| Параметр | Значение
| ConstantPointerParameterCase | `camelBack`
| ConstantPointerParameterPrefix | `''`
| ConstantPointerParameterSuffix | `''`
|Параметр |Значение
|ConstantPointerParameterCase |`camelBack`
|ConstantPointerParameterPrefix |`''`
|ConstantPointerParameterSuffix |`''`
|===
Пример кода до форматирования:
@ -1203,10 +1203,10 @@ void* returnVoid(void* const returnValue) {
[cols=",",options="header",]
|===
| Параметр | Значение
| PointerParameterCase | `camelBack`
| PointerParameterPrefix | `''`
| PointerParameterSuffix | `''`
|Параметр |Значение
|PointerParameterCase |`camelBack`
|PointerParameterPrefix |`''`
|PointerParameterSuffix |`''`
|===
Пример кода до форматирования:
@ -1233,10 +1233,10 @@ void* returnPtr(void* returnValue) {
[cols=",",options="header",]
|===
| Параметр | Значение
| TemplateParameterCase | `camelBack`
| TemplateParameterPrefix | `''`
| TemplateParameterSuffix | `''`
|Параметр |Значение
|TemplateParameterCase |`camelBack`
|TemplateParameterPrefix |`''`
|TemplateParameterSuffix |`''`
|===
Пример кода до форматирования:
@ -1261,10 +1261,10 @@ template<typename TType> int tFunction(TType tValue) {
[cols=",",options="header",]
|===
| Параметр | Значение
| ParameterPackCase | `camelBack`
| ParameterPackPrefix | `''`
| ParameterPackSuffix | `''`
|Параметр |Значение
|ParameterPackCase |`camelBack`
|ParameterPackPrefix |`''`
|ParameterPackSuffix |`''`
|===
Пример кода до форматирования:
@ -1285,10 +1285,10 @@ template<class ... Types> void f(Types ... parametersPack);
[cols=",",options="header",]
|===
| Параметр | Значение
| TemplateTemplateParameterCase | `camelBack`
| TemplateTemplateParameterPrefix | `''`
| TemplateTemplateParameterSuffix | `''`
|Параметр |Значение
|TemplateTemplateParameterCase |`camelBack`
|TemplateTemplateParameterPrefix |`''`
|TemplateTemplateParameterSuffix |`''`
|===
Пример кода до форматирования:
@ -1311,10 +1311,10 @@ class AllmightyClass { };
[cols=",",options="header",]
|===
| Параметр | Значение
| TypeTemplateParameterCase | `CamelCase`
| TypeTemplateParameterPrefix | `''`
| TypeTemplateParameterSuffix | `''`
|Параметр |Значение
|TypeTemplateParameterCase |`CamelCase`
|TypeTemplateParameterPrefix |`''`
|TypeTemplateParameterSuffix |`''`
|===
Пример кода до форматирования:
@ -1339,10 +1339,10 @@ template<typename TType>int tFunction(TType value) {
[cols=",",options="header",]
|===
| Параметр | Значение
| ValueTemplateParameterCase | `camelBack`
| ValueTemplateParameterPrefix | `''`
| ValueTemplateParameterSuffix | `''`
|Параметр |Значение
|ValueTemplateParameterCase |`camelBack`
|ValueTemplateParameterPrefix |`''`
|ValueTemplateParameterSuffix |`''`
|===
Пример кода до форматирования:

View File

@ -19,9 +19,10 @@ https://ru.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms[BLAS]
* https://github.com/skystrife/cpptoml[cpptoml]: чтение
https://github.com/toml-lang/toml[TOML]
* https://github.com/martinmoene/gsl-lite/[gsl-lite]: реализация
рекомендаций https://github.com/isocpp/CppCoreGuidelines/[C{plus}{plus} Core Guidelines]
* http://www.holoborodko.com/pavel/mpfr/[mpfrc{plus}{plus}]: C++ интерфейс
для https://www.mpfr.org/[MPFR]
рекомендаций https://github.com/isocpp/CppCoreGuidelines[C++ Core
Guidelines]
* http://www.holoborodko.com/pavel/mpfr[mpfrc++]: C++ интерфейс для
https://www.mpfr.org/[MPFR]
== Qt

View File

@ -1,18 +0,0 @@
= Сайты и статьи по программированию
:category: Программирование
:tags: программирование, C, C++, Qt,
:toc:
== С++
* https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines[C++ Core Guidelines]
== Qt
* https://woboq.com/blog/how-qt-signals-slots-work.html[How Qt Signals and Slots Work]
== Оптимизация
* 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: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB