среда, 19 декабря 2012 г.

Qt 5.0 и Qt Creator 2.6.1

Сегодня вышли новые версии кроссплатформенного фреймворка Qt 5.0 и среды разработки Qt Creator 2.6.1.

Официальные анонсы:
  1. Qt 5.0
  2. Qt Creator 2.6.1 released

среда, 12 декабря 2012 г.

github запрещает upload

Что ни день, то какая-нибудь гадость случается. Причем с сайтами и сервисами, которыми пользовался, которые действительно радовали и которые рекомендовал друзьям.
Не так давно google врубает автоматическое перенаправление на локальные домены, а вчера github заблокировал возможность загрузки файлов на сайт и удаляет со страниц проектов вкладку Downloads. Ну что за черт?! И нет бы просто сказать, что нет больше ресурсов, нет денег. Просто назвать реальные причины, ибо обозначенное ну никак не тянет на реальность. По крайней мере у меня сложилось такое впечатление. Так нет же! Начинают пороть какую-то чушь! Цитата.
Supporting these types of uploads was a source of great confusion and pain – they were too similar to the files in a Git repository.
Поддержка этих типов загрузок была источником большой путаницы – они были слишком похожи на файлы в репозитории Git.
Это просто бред. Выложить рядом с исходниками сборки программ вполне логично и очень удобно. Тем более, что загруженные файлы можно было снабдить комментарием, вкратце описывающем, что это за файл и для чего он нужен.
К сожалению, github-овцы решили по-другому. Ничего не поделать, имеют право...

В связи с вышесказанным, с сегодняшнего дня сборки моих программ и документы со страницы Ссылки будут доступны на ЭТОМ САЙТЕ. Другие ссылки с этого сайта, которые должны были быть откорректированы, также приведены в соответствие.

понедельник, 10 декабря 2012 г.

Релиз r49-12.12

  • libtoxic v6.4.1
  • cr49 v1.1.0
  • Qr49 v3.4.1
Изменения:
  1. Исправлена ошибка: отсутствие реакции на активацию пункта "Руководство пользователя" меню "Справка" в среде MS Windows 7;
  2. Диалоги "Отладочные данные" и "Описание стандартов" более не привязаны к главному окну Qr49;
  3. Функция экспорта отчета в PDF теперь не будет выполняться, если отчет пуст;
  4. В диалоге "Отладочные данные", за невостребованностью, удалено контекстное меню;
  5. В диалоге "Отладочные данные" добавлена кнопка "Копировать", нажатие на которую приводит к копированию отображаемых данных в буфер обмена в формате, удобном для вставки в табличные редакторы (например, Libre Office Calc или MS Office Excel);
  6. В файл с отладочными данными по Правилам No85 добавлены 2 параметра: ge_b (удельный эффективный расход топлива брутто) и M_br (измеренный крутящий момент за вычетом потерь на привод вспомогательных агрегатов);
  7. Обновлен файл перевода интерфейса Qr49 на русский язык;
  8. Обновлено руководство пользователя;
  9. PDF версия руководства пользователя теперь также, как и ODT версия, находится под контролем git.
Пакет для Arch Linux, сборка для MS Windows, архив с примерами расчетов, а также руководство пользователя на русском языке доступны на ЗДЕСЬ.

воскресенье, 9 декабря 2012 г.

Релиз r49-12.11

  • libtoxic v6.4.0
  • cr49 v1.1.0
  • Qr49 v3.4.0
Изменения:
  1. Переработан диалог импорта данных. Добавлены возможности сохранения действий и автоматического импорта;
  2. Изменены варианты расчета выбросов "твердых" частиц;
  3. К столбцам таблиц с исходными данными добавлены всплывающие подсказки;
  4. Улучшена логика работы графического интерфейса Qr49;
  5. Улучшен внешний вид диалогов;
  6. В Qr49 использован новый комплект иконок от Дмитрия Епанешникова;
  7. В Qr49 в меню "Справка" добавлен пункт "Руководство пользователя";
  8. В Qr49, за ненадобностью, удален пункт "Проверить наличие обновлений" в меню "Справка";
  9. Исправлена ошибка: отсутствие отмены для таблицы исходных данных для расчета выбросов вредных веществ после расчета точек цикла;
  10. Исправлена ошибка: появление бесполезной отмены после открытия и закрытия диалога импорта без каких-либо действий в нем;
  11. Исправлена ошибка: расчет приведенной мощности для безнаддувных двигателей;
  12. Проведена оптимизация кода;
  13. Обновлен перевод интерфейса Qr49 на русский язык;
  14. Дополнено руководство пользователя.
Примечание
В связи с тем, что названия некоторых параметров в конфигурации расчета были изменены, использование конфигураций от старых расчетов может проходить не совсем "гладко". Выражается это в использовании значений по-умолчанию для некоторых параметров после загрузки файла. Будьте, пожалуйста, внимательны при пересчете старых циклов.

Пакет для Arch Linux, сборка для MS Windows, архив с примерами расчетов, а также руководство пользователя на русском языке доступны на ЗДЕСЬ.

суббота, 8 декабря 2012 г.

Google. Blogger. Перенаправление на национальные домены

Дожили!.. Первый раз в жизни к новости о Google (включая все бесчисленные устные заявления) прикрепляю тег "Ненависть".

С некоторых пор, при попытке зайти на сайт блога, использующего принадлежащий Google движок blogger, выполняется переадресация в национальный домен. Я категорически против этого, но негодую я больше по другой причине. Google об этом не предупредил заранее и даже не уведомил, когда изменения уже вступили в силу! Просто в один прекрасный момент, зайдя на свой блог, я обнаружил, что нахожусь не на pa2311.blogspot.com, а на pa2311.blogspot.ru. Это просто немыслимо! Без предупреждения! У меня просто нет слов...

Для желающих остаться в доменной зоне .com предлагается подключить к шаблону следующий скрипт.
<script type="text/javascript">
var blog = document.location.hostname;
var slug = document.location.pathname;
var ctld = blog.substr(blog.lastIndexOf("."));
if (ctld != ".com") {
var ncr = "http://" + blog.substr(0, blog.indexOf("."));
ncr += ".blogspot.com/ncr" + slug;
window.location.replace(ncr);
}
</script>
Вставлять вышеуказанный код следует после тега <head>.

Что же нас ждет дальше?..

Ссылки:

UPD 10.12.2012

Похоже, что приведенный выше скрипт не сделает нас полностью счастливыми, т.к. мобильный шаблон продолжает перенаправлять на .ru. Как вариант, можно отказаться от мобильного шаблона совсем, но... просматривать сайт на коммуникаторе будет уже не так удобно. Еще раз подтверждаю тег "Ненависть".

Я не рекомендую Ubuntu

Для меня очень важно отношение разработчиков отдельно взятого дистрибутива к пользователям. Мне очень близки идеалы, проповедуемые Ричардом Столлманом. Я не рекомендую к использованию дистрибутив Ubuntu.

Ссылки:
Вот и открылась наконец-то истинная цель столь мощного финансового вложения в "дебиан с человеческим лицом". "Официально" открылась.

Как хорошо, что у нас есть выбор! Благодаря идеям и воле Столлмана, благодаря огромному количеству разработчиков, эти идеи разделяющих.

суббота, 1 декабря 2012 г.

Релиз mixan-2.4.2

Изменения:
  1. Некоторые улучшения внешнего вида отчета;
  2. Оптимизация кода.
Пакет для Arch Linux, сборка для MS Windows, архив изображений для тестирования программы, а также руководство пользователя на русском языке доступны на ЗДЕСЬ.

понедельник, 26 ноября 2012 г.

Релиз mixan-2.4.0

Изменения:
  1. Добавлена альтернативная функция для расчета пороговых оттенков. Теперь, наряду с возможностью определения пороговых оттенков через полиномиальную аппроксимацию гистограмм изображений, можно использовать альтернативный вариант - через центры тяжести гистограмм;
  2. При анализе изображений компонентов смеси (или материала и подложки в случае гранулометрического анализа) в отчет теперь выводится только один, наиболее полный и общий график;
  3. Добавлено сообщение с предупреждением о большом расходе оперативной памяти в случае, когда пользователем выбрано более 10 изображений проб и отмечены чекбоксы "Изображения в отчете" и/или "Создавать временные файлы изображений" в настройках;
  4. Устранена ошибка, выражающаяся в несвоевременной реакции на проблемы с чтением файлов во время анализа изображений компонентов смеси (или материала и подложки в случае гранулометрического анализа);
  5. Проведена оптимизация кода;
  6. Обновлено руководство пользователя;
  7. Обновлен файл перевода интерфейса пользователя на русский язык.
Пакет для Arch Linux, сборка для MS Windows, архив изображений для тестирования программы, а также руководство пользователя на русском языке доступны на ЗДЕСЬ.

пятница, 16 ноября 2012 г.

LibreOffice Writer. Автоматическая нумерация формул

После публикации заметок о работе с библиографией в LibreOffice Writer (первая и вторая), было бы совсем неприлично, опять же в связи с убогостью его документации, не упомянуть о такой шикарной возможности, как автоматическая нумерация формул. Делается это проще простого. Устанавливаем курсор на свободную строку, пишем fn и нажимаем F3. Все! Далее просто отредактируйте созданную автоматически формулу. И на нее, кстати, можно создавать перекрестные ссылки в тексте. Очень удобно.

четверг, 15 ноября 2012 г.

LibreOffice Writer. Библиография. Более простой вариант

По сравнению с ранее изложенным вариантом формирования библиографии в документах LibreOffice Writer, предлагаемый в этой заметке способ имеет, на мой взгляд, пару весомых преимуществ. Во-первых, он гораздо проще в использовании, а во-вторых, ссылки в тексте можно сделать перекрестными, что обеспечит всплывающие подсказки при наведении на них курсора и переход на нужный пункт списка по щелчку (в том числе и PDF).

Для начала, формируем ссылки на все необходимые источники в программе biblref.


Далее, копируем текст из biblref в LibreOffice Writer и превращаем его в нумерованный список.


В тексте документа ссылку на требуемый источник оформляем в виде перекрестной. Для этого ставим курсор в нужное место документа и вызываем диалоговое окно "Поля", доступное в меню Вставка -> Перекрестная ссылка.


В открывшемся диалоговом окне, на закладке "Перекрестные ссылки", выбираем "Нумерованные абзацы", далее - требуемый источник, "Номер" и нажимаем кнопку "Вставить".


После чего в тексте документа появляется наша ссылка.

LibreOffice Writer. Библиография

В этой заметке я хочу поделиться своим опытом работы с библиографией в LibreOffice Writer, т.к. официальная документация данного пакета офисных программ весьма и весьма убога.
Вкратце, методика предлагается следующая:
  • элементы библиографического списка создаются по мере написания текста;
  • для формирования библиографической ссылки используется программа biblref;
  • по окончанию работы над текстом, формируется правило составления библиографического списка и сам список.
Теперь более подробно. Для создания и вставки в текст своей работы библиографической ссылки, следует воспользоваться диалогом LibreOffice Writer "Вставить библиографическую ссылку",  доступным в меню Вставка -> Оглавление и указатели -> Элемент списка литературы.


В открывшемся диалоговом окне нажимаем радиокнопку "Из содержимого документа" и кнопку "Создать".


В результате появляется следующее диалоговое окно - "Задать библиографическую ссылку". В этом окне необходимо заполнить 2 поля - "Сокращение" (сюда мы запишем порядковый номер ссылки) и "Поле пользователя 1" (сюда мы скопируем сформированную в программе biblref строку). В выпадающем списке "Тип" выберем "Поле пользователя 1". Формирование ссылки в biblref выглядит следующим образом.



Диалоговое окно "Задать библиографическую ссылку" после заполнения вышеуказанных полей приведено ниже.


Нажимаем в этом окне кнопку "ОК", а в окне "Вставить библиографическую ссылку" - кнопку "Вставить".


После чего в нашем тексте появляется созданная ссылка, представленная текстом из поля "Сокращение", т.е. порядковым номером.


Далее (или по завершению работы над текстом) формируем список использованных источников (библиографию). Для этого переводим курсор на нужный лист документа и вызываем диалоговое окно "Вставить оглавление/указатель", доступное в меню Вставка -> Оглавление и указатели -> Оглавление и указатели.


В выпадающем списке "Вид" открывшегося диалогового окна выбираем "Библиография".


Далее, переходим на закладку "Элементы", из списка "Тип" выбираем "Поле пользователя 1" и формируем структуру ссылки в списке из следующих элементов: "Сокращение", "Табуляция", "Поле пользователя 1".


Нажимаем кнопку "ОК" и любуемся результатом.

вторник, 13 ноября 2012 г.

LXDE. Настройка горячих клавиш

Настройка горячих клавиш в окружении LXDE производится путем редактирования файла ~/.config/openbox/lxde-rc.xml. Для примера, привожу часть своего файла lxde-rc.xml.
...
  <keyboard>
...
    <!-- блокировка экрана по Ctrl+Alt+L -->
    <keybind key="C-A-L">
      <action name="Execute">
        <command>gnome-screensaver-command --lock</command>
      </action>
    </keybind>
    <!-- перезагрузка компьютера по Ctrl+Alt+Del -->
    <keybind key="C-A-Delete">
      <action name="Execute">
        <command>reboot</command>
      </action>
    </keybind>
    <!-- ждущий режим по Win+Alt+Del -->
    <keybind key="W-A-Delete">
      <action name="Execute">
        <command>gnome-screensaver-command --lock</command>
      </action>
      <action name="Execute">
        <command>systemctl suspend</command>
      </action>
    </keybind>
    <!-- выключение компьютера по Ctrl+Win+Del -->
    <keybind key="C-W-Delete">
      <action name="Execute">
        <command>poweroff</command>
      </action>
    </keybind>
    <!-- вызов окна параметров скриншота по PrtScr -->
    <keybind key="Print">
      <action name="Execute">
        <command>gnome-screenshot -i</command>
      </action>
    </keybind>
...
  </keyboard>
...

LXDE. Автозапуск

Если есть желание настроить автозапуск постоянно использующихся программ в окружении LXDE, то сделать это можно путем редактирования файла ~/.config/lxsession/LXDE/autostart. Для примера, привожу содержимое своего файла autostart.
@nautilus --no-default-window
@gnome-screensaver
@setxkbmap -option grp:switch,grp:alt_shift_toggle,grp_led:scroll us,ru
@numlockx
@pulseaudio --start
Первая строка обеспечивает запуск файлового менеджера nautilus, вторая - gnome-screensaver, третья - устанавливает доступные раскладки клавиатуры и параметры их переключения, четвертая - обеспечивает включение дополнительной цифровой клавиатуры. Разумеется, что необходимое программное обеспечение должно быть заранее установлено )

пятница, 9 ноября 2012 г.

Chromium и GNOME Keyring

При использовании в среде GNOME, Chromium, в качестве хранилища паролей по умолчанию, использует GNOME Keyring. Последний, вкупе с Seahorse, является весьма удобным инструментом, поэтому желание его использовать и за пределами GNOME (например, при работе в окружении рабочего стола LXDE) является очевидным. По крайней мере для меня.
Итак, для того, чтобы Chromium использовал GNOME Keyring + Seahorse в качестве хранилища паролей, необходимо использовать параметр --password-store=gnome. В Arch Linux (наверняка и в других дистрибутивах тоже) браузер Chromium запускается через скрипт /usr/bin/chromium. У меня он, после добавления вышеуказанного параметра, выглядит следующим образом.
#!/bin/bash

# Allow users to override command-line options
# Based on Gentoo's chromium package (and by extension, Debian's)
if [[ -f /etc/chromium/default ]]; then
 . /etc/chromium/default
fi

# Prefer user defined CHROMIUM_USER_FLAGS (from env) over system
# default CHROMIUM_FLAGS (from /etc/chromium/default)
CHROMIUM_FLAGS=${CHROMIUM_USER_FLAGS:-$CHROMIUM_FLAGS}

export CHROME_WRAPPER=$(readlink -f "$0")
export CHROME_DESKTOP=chromium.desktop

exec /usr/lib/chromium/chromium $CHROMIUM_FLAGS --password-store=gnome "$@"

понедельник, 5 ноября 2012 г.

GNU/Linux. Настройка клавиш регулировки яркости на ноутбуке

В отличие от таких окружений рабочего стола, как GNOME, которые пытаются управлять всем подряд, при работе в легких окружениях необходима дополнительная настройка системы, в частности, функциональных клавиш регулировки яркости ЖК дисплея.
Итак, если вы имеете проблемы с настройкой вышеуказанных клавиш, предлагаю вариант с использованием ACPI и подготовленного мною набора скриптов, которые были протестированы на Arch Linux и Sony Vaio VPCF12M1R/H.
  1. Убедитесь, что в вашей системе установлен пакет acpid;
  2. Убедитесь, что сервис acpid запущен и работает (systemctl status acpid). Если нет, то активируйте его для автоматического запуска при загрузке и запустите (systemctl enable acpid, systemctl start acpid);
  3. Если вы являетесь пользователем Arch Linux, то установите пакет brnctl, который можно скачать отсюда. Если вы пользователь другого дистрибутива GNU/Linux, то возьмите отсюда же архив *src*, распакуйте его и скопируйте скрипты brnctl, brnctl_brightnessup и brnctl_brightnessdown в каталог /usr/bin, сделав файлы исполняемыми и назначив соответствующие права;
  4. Откорректируйте файл /etc/acpi/handler.sh так, как описано в файле README, который вы найдете и в пакете для Arch Linux и в архиве *src*.
  5. Возможно, потребуется перезапуск демона acpid.
Это все. Наслаждайтесь работой на своем ноутбуке.

UPD: 21.09.2014

воскресенье, 4 ноября 2012 г.

Chromium. Открытие файлов во внешних программах

Как уже сообщалось, я перешел на LXDE из состава которого использовал только базовые компоненты, а набор программ оставил привычный для себя из GNOME (в том числе и nautilus с активной функцией управления рабочим столом). Заметив, что мой любимый браузер Chromium перестал открывать скачиваемые файлы во внешних программах, привязанных к данному типу, я начал искать решение, которое, разумеется, нашлось, чем и делюсь.

Для того, чтобы загруженные с помощью Chromium файлы открывались во внешних программах, привязанных к данному типу, необходимо в скрипте /usr/bin/xdg-open изменить строку
open_lxde "$url"
на
open_gnome "$url"

Хочу обратить внимание, что при других раскладах использования LXDE, отличных от моего, может понадобиться правка строки
open_generic "$url"

Для того, чтобы заработала функция "Показать в папке", необходимо в файл /home/user/.local/share/applications/defaults.list добавить строку
inode/directory=nautilus.desktop

С GNOME на LXDE

Мои попытки сделать GNOME 3 более или менее пригодным для продуктивной и комфортной работы, где я использовал все от плагинов до мата и ругани, закончены. С меня хватит! Мне нужно работать!

Рекомендую ознакомиться с частью проблем GNOME 3.6 здесь и здесь, а также прочитать перевод статьи "Gnome 3 - This is the end, it seems", где я полностью согласен с автором касательно пригодности современного GNOME для работы на компьютере.

В итоге, по той же причине, по которой я в один прекрасный момент перебрался с Ubuntu на Arch, сегодня я поменял GNOME на LXDE и знаете что? Я просто счастлив! Две панели, настройки, трей, меню приложений, раскладки клавиатуры... Все как нужно. После GNOME 3 - просто кайф!

В качестве dm использую gdm, а в качестве набора программ первой необходимости, как то терминал, текстовый редактор, файловый менеджер и прочее - приложения из окружения GNOME.

суббота, 3 ноября 2012 г.

GNOME 3.6. Настройка клавиатуры

Итак, эмоции подутихли и мы, пользователи GNOME, начинаем потихоньку находить решения тех проблем, что приподнесла нам новая версия.
В последнем своем релизе, gnome-tweak-tool стал более функциональным и позволяет теперь произвести ряд настроек клавиатуры. Находятся эти настройки в разделе "Набор".


Как видно на скриншоте, здесь можно выбрать необходимое сочетание клавиш для смены раскладки (параметр Modifiers-only input source...). Это очень радует, ведь, как я писал ранее, штатными средствами среды (Системные параметры -> Клавиатура) назначить адекватное сочетание (например Alt+Shift) невозможно.
Также, среди перечисленных мною недостатков новой версии GNOME, было следующее - убрали возможность "Завершить сеанс". Однако, на это действие можно также назначить горячие клавиши в разделе "Набор" утилиты gnome-tweak-tool (параметр terminate), за что разработчикам этой утилиты огромное спасибо.
Кстати этот gnome-tweak-tool весьма интересная программа. Откуда она вообще? Это часть gnome или как? Нужно будет как-нибудь на досуге погуглить на эту тему.

UPD 03.11.2012 20:00

Переключение раскладки клавиатуры с горячих клавиш по-прежнему не работает в режиме обзора (activities) и при блокировке экрана (

Релиз biblref-1.1.2

Изменения:
  • Через диалог "Патент" теперь можно сформировать также ссылку на полезную модель.
Пакет для Arch Linux и сборка для MS Windows доступны на ЗДЕСЬ.

четверг, 1 ноября 2012 г.

GNOME 3.6. Горячие клавиши для смены раскладки клавиатуры

Новый релиз GNOME за номером 3.6 преподнес нам очередной ворох проблем и нелепостей (не перестаем гадать на каких веществах сидят разработчики). За вечер использования версии 3.6.1 (обратите внимание, это уже багфикс релиз) с ходу обнаружилось следующее:
  • Двухпанельный режим в nautilus, доступный ранее по F3, отменили;
  • Сверх идиотский всплывающий трей стал еще страшнее;
  • Print screen так и не заработал;
  • Подсветка текущей строки в gedit не работает;
  • Вернули кнопку "Выключить" для выключения компьютера, но (бл...ь!!!) убрали кнопку "Завершить сеанс". Чем она им, черт побери, помешала я не знаю;
  • Индикатор num lock гаснет через некоторое время работы, сама цифровая клавиатура продолжает работать;
  • Сигналы клавиатуры теперь обрабатываются GNOME, а не X11. При этом в настройках горячих клавиш для смены раскладки, доступных в "Системные параметры -> Клавиатура" (лучше присядьте, чтоб не упасть) запретили всякие Alt, Ctrl, Shift и их сочетания!
И это только то, что сразу бросилось в глаза, буквально за один вечер использования.

Теперь самое страшное. Актуальная версия плагина GNOME Shell "classic systray", о котором я писал ранее, с новым GNOME не работает. Комплект плагинов GNOME Shell Frippery, о котором я тоже писал, не имеет версии для GNOME 3.6.

Что можно поправить:
  1. Плагины "Panel favorites" и "Bottom panel" из комплекта GNOME Shell Frippery заработают в GNOME 3.6, если в файлах *.json заменить значение параметра shell-version с 3.4 на 3.6. Активируются плагины как обычно через gnome-tweak-tool;
  2. Назначить сочетание клавиш Alt+Shift на смену раскладки клавиатуры можно следующей командой:
    gsettings set org.gnome.settings-daemon.peripherals.keyboard input-sources-switcher alt-shift-l
Вот так... Хотел написать о проблеме назначения горячих клавиш для смены раскладки, но не выдержал и выдал все, что накипело. Тенденции развития GNOME лично меня очень огорчают. А заменить реально нечем.

UPD 01.11.2012 21:20

Выявился один недостаток насильственного применения плагина "Bottom panel". Панель не скрывается при просмотре фильмов в полноэкранном режиме.

среда, 31 октября 2012 г.

Релиз mixan-2.3.3

Изменения:
  • Коррективы в логике работы GUI окна настроек.
Пакет для Arch Linux, сборка для MS Windows, архив изображений для тестирования программы, а также руководство пользователя на русском языке доступны на ЗДЕСЬ.

понедельник, 29 октября 2012 г.

Релиз mixan-2.3.2

Изменения:
  1. Добавлен расчет модуля крупности при анализе гранулометрического состава. Параметр рассчитывается только при использовании настройки "Размер частиц в квадратных миллиметрах" и набора сит с ячейками 2.5, 1.25, 0.63, 0.315, 0.14 (0.16) мм;
  2. Устранена регрессивная ошибка: при выборе типа анализа "Материалы" не производилось формирование отчета.
Пакет для Arch Linux, сборка для MS Windows, архив изображений для тестирования программы, а также руководство пользователя на русском языке доступны на ЗДЕСЬ.

суббота, 27 октября 2012 г.

Релиз mixan-2.3.1

Изменения:
  1. Добавлен учет формы ячеек сит при анализе гранулометрического состава;
  2. Добавлен расчет полных остатков материала на ситах;
  3. Откорректировано руководство пользователя.
Пакет для Arch Linux, сборка для MS Windows, архив изображений для тестирования программы, а также руководство пользователя на русском языке доступны на ЗДЕСЬ.

четверг, 25 октября 2012 г.

Релиз mixan-2.2.4

Изменения:
  1. При анализе гранулометрического состава, остатки материала на ситах теперь вычисляются в массовом отношении, а не количественном;
  2. К среднему размеру по всем обнаруженным частицам в отчет теперь также выводятся минимальный и максимальный;
  3. Откорректирована логика применения параметра "Размер частицы в мм2" в расчетах.
Пакет для Arch Linux, сборка для MS Windows, архив изображений для тестирования программы, а также руководство пользователя на русском языке доступны на github.com.

вторник, 23 октября 2012 г.

Релиз mixan-2.2.3

Изменения:
  1. Уменьшено потребление памяти;
  2. Устранена утечка памяти при анализе гранулометрического состава;
  3. Устранена ошибка, вследствие которой было невозможно открыть файл документации (если он находился не в каталоге программы) из меню "Справка".
Пакет для Arch Linux, сборка для MS Windows, архив изображений для тестирования программы, а также руководство пользователя на русском языке доступны на github.com.

понедельник, 22 октября 2012 г.

Релиз mixan-2.2.0

Изменения:
  1. Добавлен расчет и построение гистограммы распределения частиц материала по компактности формы при анализе гранулометрического состава;
  2. Исправлена ошибка, приводившая к невозможности анализа изображений материалов, для которых максимум полинома, аппроксимирующего значения столбцов гистограммы, приходился на одно из крайних значений массива;
  3. Добавлен перевод интерфейса программы и текста протокола на русский язык;
  4. В отчет добавлен вывод средних значений размера частиц материала и компактности формы при анализе гранулометрического состава;
  5. Оптимизация функции поиска частиц на изображении проб;
  6. В рамках сеанса работы программа теперь запоминает последний каталог с изображениями, что обеспечивает более быстрый доступ при выборе файлов для анализа;
  7. Временные файлы теперь сохраняются в отдельный каталог с именем вида "дата-расчета_время-расчета";
  8. Обеспечено сохранение выбранного типа расчета между запусками программы;
  9. Добавлен диалог с прогресс баром при сохранении временных файлов;
  10. Добавлена возможность расчета размеров частиц в мм2;
  11. Вместо создания гистограмм распределения частиц материала по размерам и компактности формы для каждого изображения, теперь приводятся общие гистограммы для всех частиц, обнаруженных на всех изображениях;
  12. Добавлен расчет остатков материала на ситах, размеры ячеек которых указаны в настройках программы;
  13. Улучшена работа прогресс бара диалога при анализе изображений;
  14. Добавлено руководство пользователя;
  15. Проведена внутренняя реорганизация кода.
Пакет для Arch Linux, сборка для MS Windows, архив изображений для тестирования программы, а также руководство пользователя на русском языке доступны на github.com.

среда, 12 сентября 2012 г.

понедельник, 3 сентября 2012 г.

Книги по C++

Сегодня один мой товарищ, решивший начать изучение этого замечательного языка программирования, задал мне вопрос - какие книги по C++ нужно иметь в своей библиотеке? Подобные вопросы также неоднократно задаются на различных форумах соответствующей тематики. В связи с этим, я решил представить список книг, имеющихся в моей библиотеке. Разумеется, это не все, но перечисленное ниже, на мой взгляд, нужно иметь, а еще лучше изучить и переварить )))
  1. Бьерн Страуструп. Язык программирования C++. Специальное издание. 2011;
  2. Стивен Прата. Язык программирования C++. Лекции и упражнения. 5-е издание. 2007;
  3. Николай Джосьютис. C++. Стандартная библиотека. 2004;
  4. Брюс Эккель. Философия C++. Введение в стандартный C++. 2-е издание. 2004;
  5. Брюс Эккель, Чак Эллисон. Философия C++. Практическое программирование. 2004;
  6. Герб Саттер. Решение сложных задач на C++. 2002;
  7. Герб Саттер. Новые сложные задачи на C++. 2005;
  8. Стефан Дьюхэрст. Скользкие места C++. 2006;
  9. Мэтью Уилсон. C++. Практический подход к решению проблем программирования. 2006;
  10. Д. Райан Стефенс, Кристофер Диггинс, Джонатан Турканис, Джефф Когсуэлл. C++. Сборник рецептов. 2007.
Не забывайте о стандарте! Ссылки на документы можно найти в разделе Ссылки.

Рекомендация для начинающих - начните работать с языком, вооружившись только компилятором (рекомендую gcc) и текстовым редактором (тут уж сами смотрите, что удобней), что позволит вам лучше сконцентрироваться на главном и не отвлекаться. Понравившуюся IDE ничто не мешает освоить позже.

Удачи!

UPD 25.11.2012

Добавка - великолепная книга, которую я почему-то упустил:
  • Скотт Мэйерс. Эффективное использование C++. Третье издание. 55 верных советов улучшить структуру и код ваших программ. 2006.

вторник, 31 июля 2012 г.

Релиз r49-12.10

  • libtoxic v6.3.5
  • cr49 v1.0.2
  • Qr49 v3.3.1
Изменения:
  1. Исправлена ошибка, приводившая к некорректному завершению работы Qr49 в "чистом" окружении после сборки из исходных кодов;
  2. Обеспечена автоматическая генерация файла перевода интерфейса Qr49 на русский язык во время сборки;
  3. Подготовлен PKGBUILD файл для создания Arch Linux пакета r49;
  4. Обновлена документация Quick Start;
  5. Функция проверки обновлений теперь доступна и в сборке для MS Windows.
Пакет для Arch Linux и архивы с бинарными файлами для Arch Linux и MS Windows доступны ЗДЕСЬ, исходный код - ЗДЕСЬ.

UPD 31.07.2012 17:43

Если при попытке воспользоваться функцией проверки обновлений в MS Windows вы получаете сообщение об ошибке
установите Microsoft Visual C++ 2008 Redistributable Package (x86).

воскресенье, 29 июля 2012 г.

Работа с цифровой камерой в консоли GNU/Linux

В данной заметке я хочу показать, как работать с цифровой камерой из консоли в GNU/Linux на примере получения файлов с камеры Nikon d5100 в Arch Linux с помощью gphoto2.
Для начала проверим, установлена ли программа gphoto2.

$ pacman -Ss gphoto2
extra/gphoto2 2.4.14-1 [установлен]
    A digital camera download and access program.
extra/gvfs-gphoto2 1.12.3-2 [установлен]
    gphoto2 (PTP camera/MTP media player) backend for gvfs
extra/libgphoto2 2.4.14-1 [установлен]
    The core library of gphoto2, designed to allow access to digital
    camera by external programs.

У меня, как видите уже установлена, если у вас нет, то установите.

$ sudo pacman -S gphoto2

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

$ lsusb
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 05ca:18ba Ricoh Co., Ltd 
Bus 001 Device 004: ID 0489:e00f Foxconn / Hon Hai Foxconn T77H114 BCM2070 [Single-Chip Bluetooth 2.1 + EDR Adapter]
Bus 002 Device 003: ID 046d:c52f Logitech, Inc. Wireless Mouse M305
Bus 002 Device 008: ID 04b0:0429 Nikon Corp.

$ gphoto2 --auto-detect
Модель                         Порт
----------------------------------------------------------
Nikon DSC D5100 (PTP mode)     usb:002,008

При желании, можно получить море информации о камере с помощью команды gphoto2 --summary, но наша цель - скачать файлы изображений. Смотрим, что есть на карте камеры.

$ gphoto2 --list-files
В каталоге «/» файлы отсутствуют.
В каталоге «/store_00010001» файлы отсутствуют.
В каталоге «/store_00010001/DCIM» файлы отсутствуют.
688 файлов в каталоге «/store_00010001/DCIM/100D5100».
#1     DSC_0040.NEF               rd 15328 KB application/x-unknown
#2     DSC_0072.NEF               rd 17500 KB application/x-unknown
...
#685   DSC_0713.JPG               rd  6823 KB 4928x3264 image/jpeg
#686   DSC_0713.NEF               rd 17564 KB application/x-unknown
#687   DSC_0714.JPG               rd  7508 KB 4928x3264 image/jpeg
#688   DSC_0714.NEF               rd 18058 KB application/x-unknown

Далее, создадим на компьютере каталог для загружаемых файлов и произведем загрузку, например, первых 5 файлов.

$ mkdir pic_temp
$ gphoto2 --get-file=1-5
Копирование 'DSC_0040.NEF' из папки '/store_00010001/DCIM/100D5100'...
Файл сохраняется с именем DSC_0040.NEF
Копирование 'DSC_0072.NEF' из папки '/store_00010001/DCIM/100D5100'...
Файл сохраняется с именем DSC_0072.NEF
Копирование 'DSC_0078.NEF' из папки '/store_00010001/DCIM/100D5100'...
Файл сохраняется с именем DSC_0078.NEF
Копирование 'DSC_0083.NEF' из папки '/store_00010001/DCIM/100D5100'...
Файл сохраняется с именем DSC_0083.NEF
Копирование 'DSC_0087.NEF' из папки '/store_00010001/DCIM/100D5100'...
Файл сохраняется с именем DSC_0087.NEF

Вот, собственно, и все.

Перечень других возможностей программы gphoto2 можно узнать из встроенной справки.

$ gphoto2 --help

четверг, 26 июля 2012 г.

Релиз mixan-2.1.0

Изменения:
  1. Каталог для временных файлов mixan перемещен в домашний каталог пользователя.
Исходный код, сборка для GNU/Linux, архив изображений для тестирования программы, а также файл PKGBUILD, архив с исходными кодами и пакет для Arch Linux доступны на github.

UPD 18.08.2012

Добавлена сборка для M$ Windows.

biblref v1.1.1 Arch package

Для biblref v1.1.1 на github.com добавлены пакет для Arch Linux, PKGBUILD файл и архив исходных кодов для пакетирования.

воскресенье, 15 июля 2012 г.

Что же такое бозон Хиггса?

Arch Linux. Обновление glibc

Все пакеты Arch Linux, у которых до настоящего времени имелись свои файлы в директории /lib, перемещены в /usr/lib и /lib теперь есть ссылка на /usr/lib. Если при выполнении обновления вы получите сообщение:

glibc: /lib уже существует в файловой системе

то обновление необходимо провести следующими командами:

pacman -Syu --ignore glibc
pacman -Su

Никогда не используйте --force при этом обновлении.

Первоисточник: News: The /lib directory becomes a symlink
Дополнительная информация: DeveloperWiki:usrlib

вторник, 10 июля 2012 г.

ru.wikipedia.org против законопроекта 89417-6

Википедия на русском языке 10 июля будет закрыта по решению сообщества в знак протеста против предлагаемых поправок к закону «Об информации», обсуждение которых проходит в этот день в Государственной Думе Российской Федерации. Эти поправки могут стать основой для реальной цензуры в сети Интернет — формирования списка запрещённых сайтов и IP-адресов с их последующей фильтрацией.

Википедия:Законопроект № 89417-6

понедельник, 9 июля 2012 г.

Готовимся к жесткой цензуре?

05.07.2012 г. совет ООН по правам человека принял Резолюцию по защите прав человека в Интернете. 47 государств-членов ООН подписали документ, в которой говорится о том, что право на доступ в интернет является неотъемлемым правом человека и не может быть никем ограничено. Россия, кстати, голосовала против...

06.07.2012 г. государственная дума РФ принимает в первом чтении законопроект, предусматривающий создание единого реестра интернет-страниц и сайтов с запрещенной к распространению информацией. Законопроект был раскритикован советом по правам человека при президенте РФ. В заявлении совета говорится, что от внесения в реестр могут пострадать "добросовестные сайты" (любой из которых, как у нас водится, может стать попросту "неугодным"), а сам документ предусматривает создание в Рунете цензуры...

Первоисточники и дополнительная информация:

UPD 12.07.2012

11.07.2012 г. госдума приняла во втором и третьем чтениях законопроект, предусматривающий создание единого реестра сайтов с запрещенной в России информацией. Об этом сообщает ИТАР-ТАСС. За законопроект во втором чтении проголосовал 441 депутат, в третьем - 434. Ни один парламентарий не воздержался и не проголосовал против...

Первоисточник:

воскресенье, 8 июля 2012 г.

Релиз r49-12.07

  • libtoxic v6.3.4
  • cr49 v1.0.2
  • Qr49 v3.3.0
Изменения:
  1. В Qr49 добавлена функция печати выделенных ячеек таблицы.
Сборки для ОС на базе GNU/Linux (64 бит) и ОС MS Windows (32 бит) доступны ЗДЕСЬ, а исходный код - ЗДЕСЬ.

среда, 27 июня 2012 г.

Релиз r49-12.06

  • libtoxic v6.3.4
  • cr49 v1.0.2
  • Qr49 v3.2.1
Изменения:
  1. В виду того, что документ Р.031-2009 имеет статус временного, было принято решение оставить пределы для лабораторного атмосферного коэффициента fa 0.96...1.06 для всех циклов;
  2. Удален параметр "Плотность воздуха". При расчете объемного расхода отработавших газов, плотность воздуха теперь определяется для каждой точки по температуре окружающего воздуха;
  3. Для всех циклов по ГОСТ 30574-98, ГОСТ Р 51249-99 объемный расход отработавших газов приводится к условиям t0 = 0 oC, B0 = 101.3 кПа;
  4. Улучшения в логике работы интерфейса Qr49.
Сборки для ОС на базе GNU/Linux (64 бит) и ОС MS Windows (32 бит) доступны ЗДЕСЬ, а исходный код - ЗДЕСЬ.

вторник, 26 июня 2012 г.

Релиз r49-12.04

Изменения:
  1. Исправления в функции расчета лимитов по выбросам оксидов азота для испытательных циклов Е* (судовые дизели);
  2. Для испытательных циклов по ГОСТ 30574-98, ГОСТ Р 51249-99 добавлен расчет лабораторного атмосферного коэффициента, пределы допустимых значений которого для цикла Е3 взяты из руководства Р.031-2009, для остальных циклов - из "автомобильных" Правил.
Сборки для ОС на базе GNU/Linux (64 бит) и ОС MS Windows (32 бит) доступны ЗДЕСЬ, а исходный код - ЗДЕСЬ.

понедельник, 25 июня 2012 г.

Окраина и окрестности г. Ярославль

За что я не люблю свой город? Много за что. И вот за это в частности (прокатился 5 км на велосипеде).
























Вы бы еще видели эти места весной, когда не было всей этой травы... Местами земля завалена мусором буквально сплошняком. У меня просто нет слов...

суббота, 23 июня 2012 г.

Nokia увольняет команду Qt

Это самая печальная новость! А я вот знал, что этим все кончится. Знал с того самого момента, как только они связались с этой ... майкрософт, черт бы их подрал! И так дела шли не очень, а тут еще... Да ну на фиг!

Подробности на ЛОРе

UPD 24.06.2012
Продолжение темы на OpenNET

вторник, 1 мая 2012 г.

Релиз r49-12.03

Из изменений только одно - исправлен расчет точек 5-ти ступенчатого цикла.

Сборки для ОС на базе GNU/Linux (64 бит) и ОС MS Windows (32 бит) доступны ЗДЕСЬ, а исходный код - ЗДЕСЬ.

пятница, 13 апреля 2012 г.

Qt 5. Соединение сигналов и слотов

Не далее как полторы недели назад, мир узнал об alpha версии Qt 5, а сегодня проскочила весьма интересная новость о том, что теперь, благодаря новому синтаксису, ошибки соединений сигналов и слотов можно будет обнаруживать на стадии компиляции программы, а не во время ее работы (старый вариант остается доступным).

Старый вариант:
connect(sender,
        SIGNAL(valueChanged(QString,QString)),
        receiver,
        SLOT(updateValue(QString)));
Новый вариант:
connect(sender,
        &Sender::valueChanged,
        receiver,
        &Receiver::updateValue);

Подробнее можно прочитать здесь и, разумеется, здесь.

воскресенье, 8 апреля 2012 г.

Релиз mixan-2.0.0

Изменения:
  1. Добавлен диалог Analysis;
  2. Проведена оптимизация расчета порогового значения для бинаризации изображений проб;
  3. Добавлена настройка Images in report, позволяющая отключить вывод изображений проб в отчет;
  4. Добавлена возможность получения гистограмм распределения частиц по размерам на основе анализа изображений;
  5. Улучшения в функции формирования отчета (вывод даты и настроек расчета, вывод дополнительной информации в зависимости от типа расчета);
  6. Улучшения в обработке исключительных ситуаций;
  7. Улучшение производительности.
Исходный код, сборка для GNU/Linux, архив изображений для тестирования программы, а также файл PKGBUILD, архив с исходными кодами и пакет для Arch Linux доступны на github.

воскресенье, 1 апреля 2012 г.

Браво, Женя!!!

Сегодня у всех российских поклонников классического ралли большая радость! Наш пилот Евгений Новиков занял 3-е место на 4-м этапе Чемпионата мира 2012 года - ралли Португалии! Браво, Женя!
Женя единственный российский пилот в Чемпионате мира.
Пилот команды ALM RUSSIA Евгений Новиков становится первым российским раллистом, которому удалось завоевать подиум на этапе чемпионата мира по ралли! Более того, похоже, что 21-летний Женя стал самым молодым пилотом, а 56-летний Дени Жиродэ самым возрастным штурманом, завоевавшим подиум!
almrally.ru
Желаем Жене успехов и удачи в его карьере. Молодец!

UPD 02.03.2012
После дисквалификации Микко Хирвонена, занимавшего 1-е место, Евгений Новиков становится серебряным призером ралли Португалии.

среда, 21 марта 2012 г.

Shotwell. Импорт фотографий

В качестве вьювера и редактора "на скорую руку" можно порекомендовать программу shotwell, которая, помимо вышеперечисленных функций, позволяет также импортировать изображения с цифровой камеры по протоколу PTP.
Импорт фотографий осуществляется весьма просто:
  • соединяем камеру и компьютер с помощью USB кабеля;
  • включаем камеру;
  • запускаем shotwell и на панели в левой части окна программы, в разделе Камеры, видим свой Nikon, выбираем его;
  • в основной части окна shotwell появятся эскизы находящихся на карте камеры изображений и видео роликов, можно импортировать все или только выбранное.
Куда импортируются ваши изображения, как будет называться каталог - все это настраивается в диалоге Параметры, доступном из меню Редактировать -> Параметры. Выглядит этот диалог так:


После завершения импорта, камеру лучше отключить перед тем, как будет отключен USB кабель.

вторник, 13 марта 2012 г.

понедельник, 12 марта 2012 г.

UNECE. Regulation No. 49 - Rev. 5 - Emission of pollutants of heavy vehicles

С некоторым опозданием новость, но тем не менее..
На официальном сайте Европейской экономической комиссии ООН опубликована 5-я ревизия Правил №49 "Единообразные предписания, касающиеся подлежащих принятию мер по ограничению выбросов загрязняющих газообразных веществ и взвешенных частиц из двигателей с воспламенением от сжатия...". Документ доступен на английском и русском языке. Разумеется, мной в новой ревизии первым же делом была проштудирована методика расчета выбросов газообразных компонентов и взвешенных частиц (так теперь принято называть старые добрые "твердые" частицы) с отработавшими газами по стационарному циклу. Отличий в данной методике по сравнению с Правилами 4-й ревизии нет. Следовательно, никаких изменений в программный код r49 вносить не требуется.

Arch Linux 10 лет!

Одной из лучших операционных систем на базе GNU/Linux исполнилось 10 лет! С днем рождения, Arch!

понедельник, 5 марта 2012 г.

Релиз biblref-1.1.1

Изменения:
  1. Добавлен диалог формирования ссылки на публикацию в сети;
  2. Если документ содержит какие-либо данные, то запрос на их сохранение появляется при любом варианте выхода из программы.
Исходный код и сборки - на github.com.

суббота, 3 марта 2012 г.

wget. Загрузка сайта

Иногда возникает необходимость скачать книгу, оформленную в виде html с оглавлением и текстом глав на отдельных страницах, а кому-то может понадобиться скачать аж целый сайт. Разумеется, в таких случаях в голову сразу же приходит мысль о wget. И это правильно, ибо wget много чего может. В том числе и скачать онлайн книгу или сайт.
Для загрузки онлайн книги вводим следующую команду:
wget -r -k -l 2 -p -E -nc http://alexott.net/ru/emacs/elisp-intro/elisp-intro-ru.html
-r  - рекурсивный переход по ссылкам;
-k  - преобразование всех ссылок в локальные по завершению закачки;
-p  - загрузка всех файлов (изображения, css и т.д.);
-l  - максимальная глубина вложенности страниц;
-E  - добавлять к загруженным файлам расширение .html;
-nc - отмена перезаписи существующих файлов.

Первоисточник: http://pingvinus.ru/note/wget-download-sites

пятница, 2 марта 2012 г.

Релиз engmod-2.0.1

Из изменений только увеличение производительности.
Исходный код - на github.

среда, 29 февраля 2012 г.

engmod-2.0.0

Написал программу для формирования поля распределения режимов работы двигателя в составе транспортного средства. Программа имеет интерфейс командной строки, принимает в качестве параметра файл с данными (формата csv со знаками табуляции в качестве разделителей) и создает в процессе работы текстовый файл с полем распределения.

UPD
Пример данных для обработки и результатов расчета - https://sites.google.com/site/pa2311/engmod.

воскресенье, 26 февраля 2012 г.

Релиз r49-12.02

  • libtoxic v6.3.0
  • cr49 v1.0.2
  • Qr49 v3.2.0
Изменения:
  1. Увеличен размер шрифта в окне отчетов, размер при выводе на печать и генерации PDF оставлен прежним;
  2. Автоматическое создание файла конфигурации с параметрами по умолчанию в случае его отсутствия (ищется в каталоге программы и каталоге пользователя);
  3. Исправления во встроенной справке cr49;
  4. Улучшение структуры дерева исходных кодов проекта и упрощение сборки (см. файл README).
Исходный код, а также сборка для ОС на базе GNU/Linux (64 бит) доступна на github.com. Сборка для ОС MS Windows (32 бит) будет доступна позже.

UPD 27.02.2012
На github.com добавлена сборка для ОС MS Windows (32 бит).

вторник, 21 февраля 2012 г.

Релиз biblref-1.0.0

По просьбе товарищей и коллег, написал программу для создания библиографических ссылок. Это первый релиз. Программа уже умеет создавать ссылки для следующих источников:
  • книга;
  • статья;
  • диссертация;
  • автореферат;
  • депонированная рукопись;
  • тезис доклада;
  • патент;
  • авторское свидетельство.
Жду отзывов и, возможно, замечаний )

Исходный код и сборки - традиционно на github.com. Сборка для виндовс будет добавлена завтра.

UPD 22.02.2012
На github.com добавлена сборка для виндовс.

пятница, 17 февраля 2012 г.

Qt. Функционал Undo/Redo для QTableWidget

Решил поделиться своей реализацией функционала Отмена/Повтор для приложения, использующего несколько QTableWidget-ов.
undoredotable.h
#ifndef UNDOREDOTABLE_H
#define UNDOREDOTABLE_H

#include <QVector>
#include <QString>
#include <QTableWidget>

class UndoRedoTable {

public:

    UndoRedoTable(QTableWidget *);
    virtual ~UndoRedoTable();

    void saveState();
    void undoTable();
    void redoTable();
    ptrdiff_t undoTableNumber() const;
    ptrdiff_t redoTableNumber() const;
    void freeMemory();

private:

    QTableWidget *table;
    QVector< QVector< QVector<QString> > > data;
    ptrdiff_t position;

};

#endif /* UNDOREDOTABLE_H */
undoredotable.cpp
#include "undoredotable.h"
#include "tablewidgetfunctions.h"

#include <QVector>
#include <QString>
#include <QTableWidget>

UndoRedoTable::UndoRedoTable(QTableWidget *tbl) :
    position(-1) {

    table = tbl;
}

UndoRedoTable::~UndoRedoTable() {
}

void UndoRedoTable::saveState() {

    if ( (data.count() - position) > 1 ) {

        for ( ptrdiff_t i=(data.count()-1); i>position; i-- ) {

            data.remove(i);
        }
    }

    QVector<QString> row;
    QVector< QVector<QString> > matrix;

    for ( ptrdiff_t i=0; i<table->rowCount(); i++ ) {

        for ( ptrdiff_t j=0; j<table->columnCount(); j++ ) {

            row.push_back(table->item(i, j)->text());
        }

        matrix.push_back(row);
        row.clear();
    }

    data.push_back(matrix);
    matrix.clear();

    position++;
}

void UndoRedoTable::undoTable() {

    position--;

    if ( table->rowCount() < data[position].count() ) {

        addRows(table, data[position].count());
    }
    else if ( table->rowCount() > data[position].count() ) {

        table->setRowCount(data[position].count());
    }

    for ( ptrdiff_t i=0; i<data[position].count(); i++ ) {

        for ( ptrdiff_t j=0; j<data[position][i].count(); j++ ) {

            table->item(i, j)->setText(data[position][i][j]);
        }
    }
}

void UndoRedoTable::redoTable() {

    position++;
    position++;

    undoTable();
}

ptrdiff_t UndoRedoTable::undoTableNumber() const {

    return position;
}

ptrdiff_t UndoRedoTable::redoTableNumber() const {

    return data.count() - position - 1;
}

void UndoRedoTable::freeMemory() {

    data.clear();
}

четверг, 16 февраля 2012 г.

std::vector. Освобождение памяти

Собственно решение.
vector<double> v;

// какая-то работа с вектором

// освобождение памяти, занимаемой вектором
v.clear();
vector<double>().swap(v);

C++. Чтение CSV файла в двумерный массив

В качестве примера использования предложенных ранее функций разбивки строки и конвертирования строки в число привожу листинг программы, которая читает данные из файла формата CSV в двумерный массив и выводит полученное на консоль.
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
#include <iostream>

using std::string;
using std::vector;
using std::ifstream;
using std::istringstream;
using std::cout;

void splitString(const string &fullstr,
                 vector<string> &elements,
                 const string &delimiter) {

    string::size_type lastpos =
        fullstr.find_first_not_of(delimiter, 0);
    string::size_type pos     =
        fullstr.find_first_of(delimiter, lastpos);

    while ( (string::npos != pos) || (string::npos != lastpos) ) {

        elements.push_back(fullstr.substr(lastpos, pos-lastpos));

        lastpos = fullstr.find_first_not_of(delimiter, pos);
        pos = fullstr.find_first_of(delimiter, lastpos);
    }
}

double stringToDouble(const string &str) {

    istringstream stm;
    double val = 0;

    stm.str(str);
    stm >> val;

    return val;
}

void readData(const string &filename,
              const string &csvdelimiter,
              vector< vector<double> > &sarr) {

    ifstream fin(filename.c_str());

    string s;
    vector<string> selements;
    vector<double> delements;

    while ( !fin.eof() ) {

        getline(fin, s);

        if ( !s.empty() ) {

            splitString(s, selements, csvdelimiter);

            for ( size_t i=0; i<selements.size(); i++ ) {

                delements.
                    push_back(stringToDouble(selements[i]));
            }

            sarr.push_back(delements);
            selements.clear();
            delements.clear();
        }
    }

    fin.close();
}

int main(int argc, char** argv) {

    vector< vector<double> > sarr;
    
    readData("data.csv", ";", sarr);

    for ( size_t i=0; i<sarr.size(); i++ ) {

        for ( size_t j=0; j<sarr[0].size(); j++ ) {

            cout << sarr[i][j] << "\t";
        }

        cout << "\n";
    }

    return 0;
}
Дабы не раздувать приведенный в качестве примера код, проверка доступности файла, возможности его открытия, а также однородности массива в файле с данными были опущены. Не забывайте о подобных проверках в реальных программах!

среда, 15 февраля 2012 г.

C++. Замена в строке

Решением может быть такая функция:
#include <string>

using std::string;

...

void replaceInString(string &str,
                     const string &str1,
                     const string &str2) {

    size_t n = 0;

    while ( (n = str.find(str1)) != string::npos ) {

        str.replace(n, str1.length(), str2);
    }
}

...
UPD 25.02.2015
Хотя можно просто воспользоваться std::replace. Приведем пример с заменой запятой на точку.
#include <algorithm>
...
using std::replace;
...
replace(str.begin(), str.end(), ',', '.');
...