Ввод символа рубля с клавиатуры

В Линуксе можно настроить специальную клавишу Compose, которая упрощает ввод символов, которых нет на клавиатуре.

По умолчанию определен ввод многих символов, но пока среди них нет символа рубля ₽.

Чтобы вводить символ рубля комбинаций клавиш Compose дефис p (английская), запустите в терминале следующую команду.

echo -e 'include "%L"\n<Multi_key><minus><p>:"₽"' > ~/.XCompose

Эта команда создаст в домашней папке файл .XCompose с определенным содержимым. Ввод символа будет доступен только пользователю, которому принадлежит эта домашняя папка.

Если файл .XCompose уже существует, то следует использовать следующую команду.

echo -e '\n<Multi_key><minus><p>:"₽"' >> ~/.XCompose

Удачи!

Реклама

Что происходит при выравнивании кода табуляцией

Среди программистов существует спор, что использовать для отступа: табуляцию или пробелы.

Проблема с табуляцией в том, что многие используют ее и для выравнивания.

Следует различать отступы и выравнивание. Отступ (indent) используется, чтобы сместить начало строки. Выравнивание (alignment) используется внутри строки, чтобы сместить одну часть строки относительно другой.

Отступы можно делать и табуляцией, и пробелами, а выравнивание только пробелами.

Допустим, программист сделал выравнивание табуляцией шириной 4 пробела, а потом решил поменять ширину.

Ширина: 4 пробела (эталонное выравнивание)

int variable                = 1;
int superVariable           = 2;
int anotherSuperVariable    = 3;

Ширина: 2 пробела

int variable        = 1;
int superVariable     = 2;
int anotherSuperVariable  = 3;

Ширина: 3 пробела

int variable            = 1;
int superVariable       = 2;
int anotherSuperVariable   = 3;

Ширина: 8 пробелов

int variable                            = 1;
int superVariable                       = 2;
int anotherSuperVariable        = 3;

Как видно, выравнивание разваливается.

Иллюстрация табуляция для выравнивания кода в программировании

Сборка Qt Virtual Keyboard и добавление русской раскладки

Qt Virtual Keyboard Русская раскладка

Qt Virtual Keyboard — это библиотека предоставляющая виртуальную экранную клавиатуру. Она входит в библиотеку Qt начиная с Qt 5.7. Точнее, она и раньше входила, но была доступна только в коммерческой версии.

По умолчанию клавиатура из официальной сборки Qt поддерживает только английскую раскладку. Если нужны раскладки на других языках, то проект Qt Virtual Keyboard нужно пересобрать.

Далее приводится инструкция по сборке Qt Virtual Keyboard и добавлению русской раскладки в Линукс. Все действия выполняются в консоле. Для Виндовс инструкция не приводится, но она похожа.

Библиотека Qt должна быть установлена вместе с исходным кодом. Для этого при установке нужно отменить пункт Sources.

Установка исходного кода Qt

Создадим папку для сборки и перейдем в нее.

mkdir /tmp/build-qtvirtkb
cd /tmp/build-qtvirtkb

Создадим переменную, содержащую путь к папке, в которой установлен Qt.

QTDIR=/opt/Qt5.9.1/5.9.1

Переменная нужна только для того, чтобы далее не прописывать полные пути.

Сконфигурируем проект Qt Virtual Keyboard с помощью qmake.

$QTDIR/gcc_64/bin/qmake "CONFIG += lang-en lang-ru" $QTDIR/Src/qtvirtualkeyboard
 

Языки раскладок задаются в строке "CONFIG += lang-en lang-ru". Таким образом клавиатура будет поддерживать английскую и русскую раскладки. Полный список языков приведен в официальной документации. Если указать"CONFIG += lang-all", то клавиатура будет поддерживать все возможные языки.

Соберем проект с помощью make.

make

Сборка занимает некоторое время.

Следующая команда установит новую сборку. Нужно учесть, что будут внесены изменения в официальную сборку Qt. Она заменит файлы клавиатуры на те, которые получены во время новой сборки. Предыдущие файлы невозможно будет восстановить.

sudo make install

Готово. Теперь в клавиатуре будет русская раскладка.

Если нужно изменить раскладки, то нужно пересобрать проект следующими командами.

make distclean
$QTDIR/gcc_64/bin/qmake "CONFIG += lang-all" $QTDIR/Src/qtvirtualkeyboard
make
sudo make install

Первая команда нужна, чтобы очистить сборку.

EUROCONTROL ASTERIX Protocol. Category 002 (CAT002). Encoding Rules Table

This table is compiled according to EUROCONTROL ASTERIX CAT002, Part 2b, Monoradar Service Messages, Edition 1.0, 1997.11.01.

  • M stands for mandatory,
  • O for optional,
  • X for never present.
Item Message Type
001
North marker
002
Sector crossing
003
South marker
008
Activation of blind zone filtering
009
Stop of blind zone filtering
I002/000
Message Type
M M M M M
I002/010
Data Source Identifier
M M M M M
I002/020
Sector Number
X M X X X
I002/030
Time of Day
O O O O O
I002/041
Antenna Rotation Period
O O X X X
I002/050
Station Configuration Status
O O O X X
I002/060
Station Processing Mode
O O O X X
I002/070
Plot Count Values
O O X X X
I002/080
Warning/Error Conditions
O O O X X
I002/090
Collimation Error
O O X X X
I002/100
Dynamic Window — Type 1
X X X M X

Расчет цены товара

Обозначения:

  • A — цена товара в рублях.
  • B — суммарные затраты на товар в рублях, без учета сборов, комиссий и налогов.
  • C — суммарный % сборов, комиссий и налогов от A.
  • D — прибыль с продажи товара в рублях.

Цена на товар рассчитывается по следующей формуле.

A = \frac{D + B}{1 - \frac{C}{100}}


A = (D + B)/(1 - C/100)

Прибыль с продажи товара рассчитывается по следующей формуле.

D = A - B - \frac{A \cdot C}{100}


D = A - B - A * C / 100

Библиотека Qmakelib

Создал библиотеку Qmakelib. Библиотека расширяет возможности Qmake. Утилита Qmake используется для сборки проектов на Qt.

Библиотека выпущена под лицензией MIT, что дает большую свободу ее применения, в том числе в закрытых коммерческих проектах.

Библиотека работает с Qt 4 и Qt 5.

Получить библиотеку можно следующей командой.

git clone https://github.com/bravikov/qmakelib.git

Для использования библиотеки включите ее в свой проект, добавьте следующую строчку в файл .pro.

include(qmakelib/qmakelib.pri)

После включения можно вызывать функции библиотеки. Например.

qtVersionLessThan(5, 0, 0) {
    message("Qt 4")
}
else {
    message("Qt 5")
}

В первый выпуск библиотеки включены функции для проверки версии Qt.

Функции сравнивают версию Qt с версией x.y.z.

  • qtVersionEqualTo(x, y, z)
  • qtVersionLessThan(x, y, z)
  • qtVersionLessThanOrEqualTo(x, y, z)
  • qtVersionGreaterThan(x, y, z)
  • qtVersionGreaterThanOrEqualTo(x, y, z)

где:

  • x — мажорная версия,
  • y — минорная версия,
  • z — патч-версия.

Библиотеку можно протестировать на своей версии Qt если выполнить следующую команду.

qmake qmakelib/test/qmakelib_test.pro

Создание контуров текста и обводки в Inkscape

Чтобы преобразовать обводку в объект, необходимо в меню «Контур» выбрать пункт «Оконтурить обводку». При создании контура обводки, все объекты обводок должны быть разгруппированны.

оконтуряем обводку

Получаем объект с заливкой и пустой обводкой.

измененные свойства обводки

Для создания контура текста в меню «Контур» выбираем пункт «Оконтурить объект».

оконтуряем текст

После создания контура выделяем все наши объекты и в пункте «Обводка и заливка» меню «Объект» в меню «Зливка» выбираем «нет заливки».

удаление заливки

После удаления заливки наши объекты становятся невидимыми. Для создания контура в меню «Обводка» выбираем пункт «Сплошной цвет».

создание контура

В меню «Стиль обводки» настраиваем толщину обводки. Выбираем нужные нам единицы измерения в выпадающем списке и меняем значение в текстовом поле.

создание контура 2

В результате получаем контуры наших объектов и наслаждаемся содеянным.

Переходник MJ10-22-CS25 (RJ11 — DB9)

MJ10-22-CS25

MJ10-22-CS25

mj10-22-cs25

Обработка ошибок при выделение памяти с помощью new в C++

Есть два способа определить выделена ли память оператором new.

Способ 1. Обработка исключения

Если память не выделена, то бросается исключение std::bad_alloc.

Пример обработки исключения.

// bad_alloc example
#include <iostream>     // std::cout
#include <new>          // std::bad_alloc

int main () {
  try
  {
    int* myarray= new int[10000];
  }
  catch (std::bad_alloc& ba)
  {
    std::cerr << ba.what() << std::endl;
  }
  return 0;
}

Способ 2. Проверка указателя

При вызове new в качестве аргумента можно использовать константу std::nothrow. Тогда, исключение std::bad_alloc не испускается, а вместо него возвращается нулевой указатель.

Пример обработки нулевого указателя.

// nothrow example
#include <iostream>     // std::cout
#include <new>          // std::nothrow

int main () {
  std::cout << "Attempting to allocate 1 MiB... ";
  char* p = new (std::nothrow) char [1048576];

  if (!p) {
    std::cout << "Failed!\n";
  }
  else {
    std::cout << "Succeeded!\n";
    delete[] p;
  }

  return 0;
}

Ссылки

  1. Описание std::bad_alloc.
  2. Описание std::nothrow.

Контроль версий для резервных копий

Системы контроля версий (СКВ) не годятся для резервного копирования (бэкапов).

Чтобы в этом убедится, достаточно сравнить функционал системы контроля версий и необходимый функционал для бэкапов.

Функционал СКВ:

  1. Сохранение.
  2. Совместная работа.
  3. Ветвление.
  4. Сравнение.
  5. Слияние.
  6. Разрешение конфликтов.

Необходимый функционал для бэкапов:

  1. Сохранение.
  2. Автоматичность.
  3. Периодичность.
  4. Восстановление.
  5. Распределенное хранение.

Как видим пересечение только в сохранение. СКВ, можно использовать для бэкапов, но ни периодичности, ни восстановления, контроль версий не обеспечит.

Две наиболее распространенные ошибки при создании бэкапа:

  1. Ручные бэкапы вместо автоматических и отсутствие периодичности.
  2. Отсутствие проверки бэкапа на возможность восстановления данных. Сюда же относится проверка факта периодичности создания бэкапа.

На этот счет есть популярная шутка:

Всех пользователей можно разделить на две группы: на тех, кто регулярно делает бэкапы и на тех, кто пока не начал их делать. Но есть еще третья группа — те, кто проверяет бекапы.