Compare commits

...

98 Commits

Author SHA1 Message Date
3858c49164 Пример подключения переводов 2020-04-16 01:05:11 +03:00
dfd884e36b Правильная локализация 2020-04-16 01:03:34 +03:00
31c6c022bc Варианты сборки в одном файле настройки 2020-04-15 19:12:49 +03:00
e243b899b3 update 2020-04-15 18:56:04 +03:00
84990e2821 update 2020-04-15 10:32:44 +03:00
16e8ef3bdb update 2020-04-15 10:00:09 +03:00
9a9bea6b1b update 2020-04-14 23:10:26 +03:00
fc6b02c833 update 2020-04-14 22:59:24 +03:00
329145eb50 update 2020-04-14 21:52:10 +03:00
7cab7eab1b update 2020-04-14 19:43:31 +03:00
fa7da4ab1b update 2020-04-14 17:23:07 +03:00
303837da8e update 2020-04-14 17:04:45 +03:00
0f27298764 update 2020-04-14 16:57:28 +03:00
2a6147b3db update 2020-04-14 16:55:21 +03:00
de13ec6e73 update 2020-04-14 16:54:05 +03:00
dc59d8785d update 2020-04-14 16:37:35 +03:00
12b1019cab update 2020-04-14 16:27:02 +03:00
4b640a0a34 update 2020-04-14 14:20:29 +03:00
8750675e43 update 2020-04-14 13:45:26 +03:00
5761bcb0fc update 2020-04-14 13:35:51 +03:00
9530058f05 update 2020-04-14 13:25:21 +03:00
ee4f156901 update 2020-04-14 13:19:33 +03:00
019eea73cf update 2020-04-14 13:10:34 +03:00
16f6a40456 update 2020-04-14 12:37:56 +03:00
3a2222cde3 update 2020-04-14 12:31:39 +03:00
8a4866ce9f update 2020-04-14 12:17:22 +03:00
2d0baaf290 update 2020-04-14 11:56:35 +03:00
3ca7530a29 update 2020-04-14 10:01:33 +03:00
6d71ca630a update 2020-04-14 09:43:55 +03:00
cf7d33f8b2 update 2020-04-14 09:37:33 +03:00
5f85ae0f8f update 2020-04-14 01:26:01 +03:00
9b4fe8fdb1 update 2020-04-14 01:11:23 +03:00
c89fed2c07 update 2020-04-14 00:57:48 +03:00
c22fcdfdd8 update 2020-04-13 13:22:56 +03:00
65a80b8d80 update 2020-04-13 13:18:15 +03:00
634cce1c8d update 2020-04-13 12:45:11 +03:00
ec06dd2a01 update 2020-04-13 12:31:59 +03:00
6d0d152039 update 2020-04-13 12:23:07 +03:00
2d8a272d2d update 2020-04-13 12:17:34 +03:00
59492ba5c6 update 2020-04-13 12:09:20 +03:00
e9970d2b2b update 2020-04-13 12:06:11 +03:00
bdda710617 update 2020-04-13 11:52:00 +03:00
e4d5715a06 update 2020-04-13 11:47:19 +03:00
3fe8173a31 update 2020-04-13 11:35:56 +03:00
ed3f6faa1b update 2020-04-13 11:31:26 +03:00
65007b699d update 2020-04-13 11:25:28 +03:00
0160aab51f update 2020-04-13 11:19:37 +03:00
4bdb12c95e update 2020-04-13 11:06:07 +03:00
305da06de1 update 2020-04-13 11:05:48 +03:00
e1873d9579 update 2020-04-13 10:54:15 +03:00
5facc2edd6 update 2020-04-13 10:33:11 +03:00
37e74cdbaf update 2020-04-13 10:02:30 +03:00
8f38d1d96c update 2020-04-13 10:00:26 +03:00
964fb48b9a update 2020-04-13 09:11:58 +03:00
78505cfa75 update 2020-04-13 09:08:14 +03:00
5602fbc30e update 2020-04-12 20:04:35 +03:00
0f1804e3fb gitignore 2020-04-12 19:59:32 +03:00
c6648d7ae8 update 2020-04-12 19:46:33 +03:00
b9ef4fb756 update 2020-04-12 17:13:09 +03:00
002213aa87 Важное изменение в настройках для переводов 2020-04-12 17:08:45 +03:00
ac5e2dd88e update 2020-04-11 23:58:43 +03:00
b7d2c2e280 update 2020-04-11 23:09:16 +03:00
40fac363ce update 2020-04-11 22:54:03 +03:00
b8d878287c update 2020-04-11 22:43:14 +03:00
a6d0505adb update 2020-04-11 22:00:06 +03:00
c99b5f0559 update 2020-04-11 21:53:54 +03:00
5fa1f983b8 update 2020-04-11 21:48:55 +03:00
5eb808d587 update 2020-04-11 21:20:55 +03:00
ee24a0d933 update 2020-04-11 21:06:02 +03:00
7430389f3c update 2020-04-11 20:59:22 +03:00
d84e23e0ad update 2020-04-11 20:49:41 +03:00
221a63a827 update 2020-04-11 20:44:28 +03:00
07bafa380d update 2020-04-11 20:36:44 +03:00
83f97f482e images 2020-04-11 20:20:31 +03:00
321e48c500 update 2020-04-11 20:16:51 +03:00
22067a2a3d update 2020-04-11 20:09:43 +03:00
494c9f31d6 update 2020-04-11 19:44:15 +03:00
2bcf387ba4 update 2020-04-11 18:07:10 +03:00
5bf5a20624 update 2020-04-11 16:19:35 +03:00
fff4e996d2 update 2020-04-11 15:13:41 +03:00
218f22c8d2 Merge branch 'master' of git.246060.ru:/f1x1t/dsp-site 2020-04-11 15:10:08 +03:00
d931b5aaea update 2020-04-11 14:57:13 +03:00
ec16a3a380 update 2020-04-10 18:13:06 +03:00
c41683d9e2 update 2020-04-10 18:10:40 +03:00
2abd41f429 update 2020-04-10 10:59:43 +03:00
f0cba8e7f6 update 2020-04-09 20:59:56 +03:00
8e1b48e868 update 2020-04-09 20:43:02 +03:00
d3fe32a96b update 2020-04-09 20:41:13 +03:00
62ab8db450 update 2020-04-09 20:39:10 +03:00
2af67616c8 update 2020-04-09 20:35:09 +03:00
d07e6a66f8 update 2020-04-09 20:10:52 +03:00
51adf6eb5a update 2020-04-09 19:23:16 +03:00
007afda3d1 update 2020-04-08 20:09:58 +03:00
3355f9185e update 2020-04-06 08:49:00 +03:00
1e5b6aa485 update 2020-04-04 11:51:36 +03:00
679bf869e8 Merge branch 'adoc' 2019-08-30 09:31:00 +03:00
1aaacb1df7 cmake 2019-08-29 17:34:57 +03:00
1068f502bb update 2019-07-15 21:47:09 +03:00
32 changed files with 1844 additions and 988 deletions

3
.gitignore vendored
View File

@ -10,3 +10,6 @@ upload.sh
wiki/**/*.png wiki/**/*.png
wiki/**/*.png.cache wiki/**/*.png.cache
*.txt
upload-*.sh

View File

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

View File

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

View File

@ -1,122 +0,0 @@
#!/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,35 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # # -*- coding: utf-8 -*- #
from __future__ import unicode_literals
import os 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 = ' ' # ABOUT_ME = ' '
AUTHOR = 'Андрей Астафьев' AUTHOR = 'Андрей Астафьев'
SITENAME = 'ДСП' SITENAME = 'ДСП'
@ -68,14 +40,16 @@ DISPLAY_TAGS_ON_SIDEBAR = True
THEME = 'themes/bootstrap4' THEME = 'themes/bootstrap4'
BOOTSTRAP_THEME = 'litera' BOOTSTRAP_THEME = 'litera'
I18N_TEMPLATES_LANG = 'ru' # I18N_GETTEXT_LOCALEDIR = 'translations'
# I18N_GETTEXT_DOMAIN = 'messages'
# Обязательно в виде массива
I18N_TEMPLATES_LANG = ['ru']
I18N_GETTEXT_NEWSTYLE = True I18N_GETTEXT_NEWSTYLE = True
I18N_GETTEXT_LOCALEDIR = 'themes/bootstrap4/translations'
I18N_GETTEXT_DOMAIN = 'messages'
JINJA_ENVIRONMENT = {'extensions': ['jinja2.ext.i18n']} JINJA_ENVIRONMENT = {'extensions': ['jinja2.ext.i18n']}
PLUGIN_PATHS = ["plugins/official", "plugins/thirdparty"] PLUGIN_PATHS = ["plugins/official", "plugins/thirdparty"]
PLUGINS = [i18n(), "pelican-css", "series", "subcategory", "tag_cloud", "tipue_search", "replacer", "asciidoctor"] PLUGINS = ["i18n_subsites", "pelican-css", "series", "subcategory", "tag_cloud", "tipue_search", "replacer", "asciidoctor"]
ASCIIDOCTOR_CMD = "asciidoctor" ASCIIDOCTOR_CMD = "asciidoctor"
@ -86,9 +60,10 @@ ASCIIDOCTOR_EXTRA_OPTIONS = [
'--attribute=pygments-style=manni', '--attribute=pygments-style=manni',
'--attribute=pygments-css=class', '--attribute=pygments-css=class',
'--attribute=lang=ru', '--attribute=lang=ru',
'--attribute=figure-caption=Рис.', '--attribute=l10ndir={}/themes/l10n'.format(os.getcwd()),
'--attribute=toc-title=Содержание',
'--attribute=experimental', '--attribute=experimental',
'--attribute=pdf-themesdir={}/themes/pdf'.format(os.getcwd()),
'--attribute=pdf-theme=wiki',
] ]
REPLACES = ( REPLACES = (
@ -97,7 +72,10 @@ REPLACES = (
YUICOMPRESSOR_EXECUTABLE = "yui-compressor" YUICOMPRESSOR_EXECUTABLE = "yui-compressor"
YUICOMPRESSOR_EXTRA_OPTIONS = ["--nomunge"] YUICOMPRESSOR_EXTRA_OPTIONS = ["--nomunge"]
#PLUGINS += ["yuicompressor-opt"]
if 'COMPRESS' in os.environ:
PLUGINS += ["yuicompressor-opt"]
PDF_PROCESSOR = True PDF_PROCESSOR = True

23
themes/l10n/ru.adoc Normal file
View File

@ -0,0 +1,23 @@
// 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: Предупреждение

11
themes/pdf/wiki-theme.yml Normal file
View File

@ -0,0 +1,11 @@
extends: default
page:
size: A4
layout: portrait
# margin: [15mm, 20mm, 15mm, 10mm]
image:
caption:
align: inherit
font-style: normal
caption:
font-style: normal

View File

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

View File

@ -0,0 +1,110 @@
= Настройка Qt Creator
:title-separator: {sp}|
:category: Linux/Программы
:tags: Linux, Qt, QtCreator, C++,
Перед настройкой QtCreator желательно установить пакеты для разработки
и выполнить дополнительные настройки:
[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]
.Справка - О модулях (часть 1)
image::qtcreator-setup/qtcreator21.png[qtcreator21,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
[.text-center]
.Справка - О модулях (часть 2)
image::qtcreator-setup/qtcreator22.png[qtcreator22,pdfwidth=90%,scaledwidth=90%,align="center"]
{empty} +
<<<
== Комплекты
[.text-center]
.Инструменты - Параметры - Комплекты - Комплекты
image::qtcreator-setup/qtcreator34.png[qtcreator34,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
[.text-center]
.Инструменты - Параметры - Комплекты - Комплекты - Генератор CMake - Изменить
image::qtcreator-setup/qtcreator35.png[qtcreator35,align="center"]
{empty} +
<<<
== Среда
[.text-center]
.Инструменты - Параметры - Среда - Система
image::qtcreator-setup/qtcreator41.png[qtcreator41,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
== Редактор
[.text-center]
.Инструменты - Параметры - Текстовый редактор - Поведение
image::qtcreator-setup/qtcreator42.png[qtcreator42,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
<<<
== C++
[.text-center]
.Инструменты - Параметры - С++ - Именование файлов
image::qtcreator-setup/qtcreator51.png[qtcreator51,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
== Стилизатор
[.text-center]
.Инструменты - Параметры - Стилизатор - Uncrustify
image::qtcreator-setup/qtcreator55.png[qtcreator55,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
<<<
== Сборка и запуск
[.text-center]
.Инструменты - Параметры - Сборка и запуск - Основное
image::qtcreator-setup/qtcreator61.png[qtcreator61,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
== To-Do
[.text-center]
.Инструменты - Параметры - To-Do
image::qtcreator-setup/qtcreator67.png[qtcreator67,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
<<<
== Импорт проекта на CMake
[.text-center]
.Импорт проекта - Настроить проект
image::qtcreator-setup/qtcreator74.png[qtcreator74,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
== Сборка
[.text-center]
.Проект - Настройки сборки
image::qtcreator-setup/qtcreator81.png[qtcreator81,pdfwidth=80%,scaledwidth=80%,align="center"]

View File

@ -0,0 +1,269 @@
= Программный проект и иерархия каталогов
: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() | Имя исполняемого файла
| configFilePath() | Полный путь к файлу настройки
| configFileName() | Имя файла настройки
| projectName() | Имя подкаталога для проекта
|===
Пример использования:
[source,cpp]
----
#include <myx/filesystem/paths.hpp>
namespace MF = myx::filesystem;
MF::Paths& paths = MF::Paths::instance();
paths.init( QStringLiteral( "project_name" ), QStringLiteral( "conf" ) );
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`
и проекта `project` приведён в таблице.
.Стандартные каталоги для текущего пользователя
[cols="4,4m,6m",options="header"]
|===
| Назначение каталога | Метод | Значение
| Домашний каталог | homeDirectory() | /home/user
| Временные файлы | tempDirectory() | /tmp
| Файлы настройки | userConfigDirectory() | /home/user/.config/project
| Неизменяемые файлы | userConstDataDirectory() | /home/user/.local/share/project/data
| Изменяемые файлы | userVarDataDirectory() | /home/user/.local/share/project/lib
| Журналы работы | userLogDirectory() | /home/user/.local/share/project/log
|===
=== Общая проверка
Для определения типа текущего окружения используется полный путь
к исполняемому файлу, если он находится в каталоге `bin`, то выполняются
проверки работы в одной из возможных вариантов иерархий,
иначе делается заключение о том, что файлы всех типов находятся
в одном каталоге с исполняемым и дальнейшие проверки не выполняются.
IMPORTANT: При проверке типов иерархии всегда проверяется наличие
всех необходимых каталогов, при отсутствии хотя бы одного будет
принято решение, что файлы всех типов находятся в одном каталоге
с исполняемым.
=== Проверка на работу в иерархии `/opt`
Если полный путь к исполняемому файлу начинается c `/opt` и
содержит в себе название текущего проекта, например
`/opt/org/project/bin/application`, то выполняется проверка
на наличие сопутствующих системных каталогов. Если они присутствуют,
то принимается решение, что окружение в иерархии `/opt` сформировано правильно,
иначе делается заключение о том, что файлы всех типов находятся
в одном каталоге с исполняемым и дальнейшие проверки не выполняются.
Пример правильной структуры каталогов для данной иерархии приведён в таблице.
.Каталоги в иерархии `/opt`
[cols="4,4m,5m",options="header"]
|===
| Назначение файла / каталога | Метод | Значение
| Исполняемый файл | executableFilePath() | /opt/org/project/bin/application
| Файлы настройки | systemConfigDirectory() | /opt/org/project/etc
| Неизменяемые файлы | systemConstDataDirectory() | /opt/org/project/files/data
| Изменяемые файлы | systemVarDataDirectory() | /opt/org/project/files/lib
| Журналы работы | systemLogDirectory() | /opt/org/project/files/log
|===
=== Проверка на работу в иерархии `/usr/local`
Если полный путь к исполняемому файлу начинается c `/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`
Если полный путь к исполняемому файлу начинается c `/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
|===
=== Проверка на работу в домашнем каталоге
Если полный путь к исполняемому файлу начинается c `/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/project
| Неизменяемые файлы | systemConstDataDirectory() | /home/user/.local/share/project/data
| Изменяемые файлы | systemVarDataDirectory() | /home/user/.local/share/project/lib
| Журналы работы | systemLogDirectory() | /home/user/.local/share/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/files/data
| Изменяемые файлы | systemVarDataDirectory() | /home/user/work/project/_build/debug/files/lib
| Журналы работы | systemLogDirectory() | /home/user/work/project/_build/debug/files/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] [source,sh]
---- ----
sudo apt-get install clang-tidy-6.0 sudo apt-get install clang-tidy-10
---- ----
Использование: Использование:
[source,sh] [source,sh]
---- ----
cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-6.0" path/to/source cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-10" path/to/source
---- ----
В каталоге проекта нужно создать файл `.clang-tidy` в формате YAML со В каталоге проекта нужно создать файл `.clang-tidy` в формате YAML со
@ -30,12 +30,25 @@ cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-6.0" path/to/source
---- ----
--- ---
Checks: '-*, Checks: '-*,
clang-diagnostic-*, bugprone-*,
readability-*, clang-analyzer-*,
modernize-*,
cppcoreguidelines-*, cppcoreguidelines-*,
google-*, google-*,
bugprone-*' 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,
'
CheckOptions: CheckOptions:
- key: readability-identifier-naming.ClassCase - key: readability-identifier-naming.ClassCase
value: CamelCase value: CamelCase
@ -124,7 +137,7 @@ cmake -DCMAKE_LINK_WHAT_YOU_USE=TRUE ..
[source,sh] [source,sh]
---- ----
sudo apt-get install clazy clang-6.0 sudo apt-get install clazy clang-9
---- ----
Использование: Использование:
@ -132,7 +145,6 @@ sudo apt-get install clazy clang-6.0
[source,sh] [source,sh]
---- ----
CLAZY_CHECKS=level2 cmake -DCMAKE_CXX_COMPILER=clazy .. CLAZY_CHECKS=level2 cmake -DCMAKE_CXX_COMPILER=clazy ..
CLANGXX=clang++-6.0 make CLANGXX=clang++-9 make
---- ----
=== PVS-Studio

View File

@ -3,15 +3,35 @@
:category: Программирование :category: Программирование
:tags: программирование, git, :tags: программирование, git,
Если у подмодуля, находящегося в каталоге `thirdparty/example` нужно Если у подмодулей необходимо заменить адрес синхронизации и/или
заменить адрес синхронизации и имя используемой ветки, то в каталоге с имя используемой ветки, то можно отредактировать в корневом
файлом `.gitmodules`, в котором содержится информация об этом подмодуле, каталоге проекта файл `.gitmodules` и выполнить данный скрипт:
нужно выполнить команды:
[source,sh] [source,sh]
---- ----
git config --file=.gitmodules submodule.thirdparty/example.url https://github.com/username/ABC.git #!/bin/bash
git config --file=.gitmodules submodule.thirdparty/example.branch new-branch-name
git submodule sync --recursive # Замена адресов для подмодулей:
git submodule update --init --recursive --remote # 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
---- ----

View File

@ -24,25 +24,13 @@ sudo apt-get install git
[width="100%",cols="18%,20%,62%",options="header",] [width="100%",cols="18%,20%,62%",options="header",]
|=== |===
| Термин | Англ | Определение | Термин | Англ | Определение
|Рабочий каталог |working tree, working directory |Набор файлов в | Рабочий каталог | working tree, working directory | Набор файлов в текущем каталоге
текущем каталоге | Репозиторий | repository, repo | Контейнер, хранящий историю изменений файлов проекта
| Индекс | index, staging area | Область между рабочим каталогом и репозиторием, в котором осуществляется подготовка к фиксации
|Репозиторий |repository, repo |Контейнер, хранящий историю изменений | SHA-1 | SHA-1 | Уникальный идентификатор, отражающий информацию об истории
файлов проекта
|Индекс |index, staging area |Область между рабочим каталогом и
репозиторием, в котором осуществляется подготовка к фиксации
|SHA-1 |SHA-1 |Уникальный идентификатор, отражающий информацию об
истории
| Ветка | branch | Именованная последовательность в истории изменений | Ветка | branch | Именованная последовательность в истории изменений
| Фиксация (коммит) | commit | Набор файлов, записанных в историю одновременно
|Фиксация (коммит) |commit |Набор файлов, записанных в историю
одновременно
| `HEAD` | `HEAD` | Имя ссылки на последнюю фиксацию в текущей ветке | `HEAD` | `HEAD` | Имя ссылки на последнюю фиксацию в текущей ветке
| Метка | tag | Именованная ссылка на некоторую фиксацию в истории | Метка | tag | Именованная ссылка на некоторую фиксацию в истории
|=== |===
@ -137,7 +125,7 @@ participant remote as "Удалённый репозиторий\n(remote reposi
[-> 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 --remote</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>
@ -162,14 +150,9 @@ deactivate workspace
[width="100%",cols="15%,35%,50%",options="header",] [width="100%",cols="15%,35%,50%",options="header",]
|=== |===
| Команда | Ключи | Описание | Команда | Ключи | Описание
|`git config` |`--global user.name "John Doe"` |Имя текущего | `git config` | `--global user.name "John Doe"` | Имя текущего пользователя
пользователя | `git config` | `--global user.email "mail@example.com"` | Почта текущего пользователя
|`git config` |`--global user.email "mail@example.com"` |Почта текущего
пользователя
| `git config` | `--list` | Вывод текущей конфигурации | `git config` | `--list` | Вывод текущей конфигурации
| `git config` | `--global --list` | Вывод глобальной конфигурации | `git config` | `--global --list` | Вывод глобальной конфигурации
|=== |===
@ -179,13 +162,8 @@ deactivate workspace
|=== |===
| Команда | Ключи | Описание | Команда | Ключи | Описание
| `git init` | `<dir>` | Создать пустой репозиторий в каталоге `<dir>` | `git init` | `<dir>` | Создать пустой репозиторий в каталоге `<dir>`
| `git clone` | `<giturl>` `<dir>` | Создать в каталоге `<dir>` копию репозитория, находящегося по адресу `<giturl>`
|`git clone` |`<giturl>` `<dir>` |Создать в каталоге `<dir>` копию | `git clone` | `--recursive <giturl>` `<dir>` | Создать в каталоге `<dir>` копию репозитория, находящегося по адресу `<giturl>`, с учётом подмодулей
репозитория, находящегося по адресу `<giturl>`
|`git clone` |`--recursive <giturl>` `<dir>` |Создать в каталоге `<dir>`
копию репозитория, находящегося по адресу `<giturl>`, с учётом
подмодулей
|=== |===
== Подмодули == Подмодули
@ -193,13 +171,9 @@ deactivate workspace
[width="100%",cols="15%,25%,60%",options="header",] [width="100%",cols="15%,25%,60%",options="header",]
|=== |===
| Команда | Ключи | Описание | Команда | Ключи | Описание
|`git submodule` |`add <giturl> <dir>` |Добавить в каталог `<dir>` | `git submodule` | `add <giturl> <dir>` | Добавить в каталог `<dir>` текущего репозитория подмодуль, находящийся по адресу `<giturl>`
текущего репозитория подмодуль, находящийся по адресу `<giturl>`
| `git submodule` | `update --recursive --remote` | Обновить подмодули | `git submodule` | `update --recursive --remote` | Обновить подмодули
| `git submodule` | `sync --recursive` | Заменить адреса подмодулей на указанные в файле `.gitmodules`
|`git submodule` |`sync --recursive` |Заменить адреса подмодулей на
указанные в файле `.gitmodules`
|=== |===
Удаление подмодуля: Удаление подмодуля:
@ -216,11 +190,8 @@ git rm <path/to/submodule>
|=== |===
| Команда | Ключи | Описание | Команда | Ключи | Описание
| `git add` | `<filename>` | Подготовить файл `<filename>` к фиксации | `git add` | `<filename>` | Подготовить файл `<filename>` к фиксации
| `git commit` | | Зафиксировать подготовленные файлы | `git commit` | | Зафиксировать подготовленные файлы
| `git commit` | `-a` | Зафиксировать все отслеживаемые файлы, которые были изменены
|`git commit` |`-a` |Зафиксировать все отслеживаемые файлы, которые были
изменены
|=== |===
== Удаление == Удаление
@ -229,11 +200,8 @@ git rm <path/to/submodule>
|=== |===
| Команда | Ключи | Описание | Команда | Ключи | Описание
| `git rm` | `<filename>` | Удалить файл из индекса и рабочего каталога | `git rm` | `<filename>` | Удалить файл из индекса и рабочего каталога
| `git rm` | `-f <filename>` | Принудительное удаление файла | `git rm` | `-f <filename>` | Принудительное удаление файла
| `git rm` | `--cached <filename>` | Удаление файла из проекта, но не из рабочего каталога
|`git rm` |`--cached <filename>` |Удаление файла из проекта, но не из
рабочего каталога
|=== |===
== Информация == Информация
@ -252,15 +220,9 @@ git rm <path/to/submodule>
|=== |===
| Команда | Ключи | Описание | Команда | Ключи | Описание
| `git remote` | `-v` | Список адресов удалённых репозиториев | `git remote` | `-v` | Список адресов удалённых репозиториев
| `git branch` | `-r` | Список веток в удалённых репозиториях | `git branch` | `-r` | Список веток в удалённых репозиториях
| `git remote` | `add <name> <url>` | Создать ссылку `<name>` на удалённый репозиторий, находящийся по адресу `<url>`
|`git remote` |`add <name> <url>` |Создать ссылку `<name>` на удалённый | `git remote` | `rename <old> <new>` | Переименовать ссылку `<old>` на `<new>`
репозиторий, находящийся по адресу `<url>`
|`git remote` |`rename <old> <new>` |Переименовать ссылку `<old>` на
`<new>`
| `git remote` | `rm <name>` | Удалить ссылку `<name>` | `git remote` | `rm <name>` | Удалить ссылку `<name>`
|=== |===
@ -273,14 +235,9 @@ git rm <path/to/submodule>
[width="100%",cols="15%,20%,65%",options="header",] [width="100%",cols="15%,20%,65%",options="header",]
|=== |===
| Команда | Ключи | Описание | Команда | Ключи | Описание
|`git push` |`<remote> <branch>` |Отправить ветку `<branch>` в удалённый | `git push` | `<remote> <branch>` | Отправить ветку `<branch>` в удалённый репозиторий `<remote>`
репозиторий `<remote>` | `git push` | `<remote> --all` | Отправить все ветки в удалённый репозиторий `<remote>`
| `git push` | `--d <remote> <branch>` | Удалить ветку `<branch>` из удалённого репозитория `<remote>`
|`git push` |`<remote> --all` |Отправить все ветки в удалённый
репозиторий `<remote>`
|`git push` |`--d <remote> <branch>` |Удалить ветку `<branch>` из
удалённого репозитория `<remote>`
|=== |===
== Получение изменений == Получение изменений
@ -288,15 +245,9 @@ git rm <path/to/submodule>
[width="100%",cols="15%,20%,65%",options="header",] [width="100%",cols="15%,20%,65%",options="header",]
|=== |===
| Команда | Ключи | Описание | Команда | Ключи | Описание
|`git fetch` |`<remote>` |Получить изменения из всех веток репозитория | `git fetch` | `<remote>` | Получить изменения из всех веток репозитория `<remote>`, но не выполнять слияние
`<remote>`, но не выполнять слияние | `git fetch` | `<remote> <branch>` | Получить изменения из ветки `<branch>` репозитория `<remote>`, но не выполнять слияние
| `git merge` | `<remote>/<branch>` | Выполнить слияние с веткой `<branch>` репозитория `<remote>`
|`git fetch` |`<remote> <branch>` |Получить изменения из ветки
`<branch>` репозитория `<remote>`, но не выполнять слияние
|`git merge` |`<remote>/<branch>` |Выполнить слияние с веткой `<branch>`
репозитория `<remote>`
| `git pull` | `<remote>` | Получение и слияние | `git pull` | `<remote>` | Получение и слияние
|=== |===
@ -306,19 +257,11 @@ git rm <path/to/submodule>
|=== |===
|Команда |Ключи |Описание |Команда |Ключи |Описание
| `git branch` | `-a` | Список локальных и удалённых веток | `git branch` | `-a` | Список локальных и удалённых веток
| `git branch` | | Список локальных веток | `git branch` | | Список локальных веток
| `git branch` | `<branch>` | Создать ветку `<branch>` | `git branch` | `<branch>` | Создать ветку `<branch>`
| `git checkout` | `<sha-1>` | Перейти к фиксации с идентификатором `<sha-1>`
|`git checkout` |`<sha-1>` |Перейти к фиксации с идентификатором
`<sha-1>`
| `git branch` | `-m <old> <new>` | Переименовать ветку `<old>` в `<new>` | `git branch` | `-m <old> <new>` | Переименовать ветку `<old>` в `<new>`
| `git merge` | `<branch>` | Слить изменения из ветки `<branch>` в текущую ветку
|`git merge` |`<branch>` |Слить изменения из ветки `<branch>` в текущую
ветку
| `git branch` | `-d <branch>` | Удалить ветку `<branch>` | `git branch` | `-d <branch>` | Удалить ветку `<branch>`
|=== |===
@ -328,19 +271,10 @@ git rm <path/to/submodule>
|=== |===
| Команда | Ключи | Описание | Команда | Ключи | Описание
| `git diff` | | Сравнить рабочий каталог и индекс | `git diff` | | Сравнить рабочий каталог и индекс
| `git diff` | `-cached` | Сравнить индекс и последнюю фиксацию | `git diff` | `-cached` | Сравнить индекс и последнюю фиксацию
| `git diff` | `HEAD` | Сравнить последнюю фиксацию и рабочий каталог | `git diff` | `HEAD` | Сравнить последнюю фиксацию и рабочий каталог
| `git diff` | `--stat` | Краткий вывод результатов | `git diff` | `--stat` | Краткий вывод результатов
| `git diff` | `<sha-1> <sha-1>` | Сравнить две точки с указанными идентификаторами
|`git diff` |`<sha-1> <sha-1>` |Сравнить две точки с указанными | `git diff` | `<dir>` `<file>` | Сравнивать только указанный каталог `<dir>` или файл `<file>`
идентификаторами | `git difftool` | | Отобразить результаты сравнения в программе, определяемой переменной `diff.tool`
|`git diff` |`<dir>` `<file>` |Сравнивать только указанный каталог
`<dir>` или файл `<file>`
|`git difftool` | |Отобразить результаты сравнения в программе,
определяемой переменной `diff.tool`
|=== |===

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB