среда, 29 июня 2011 г.

Индикаторы для панели Unity

В Gnome 2 верхняя панель у меня выполняла роль системного монитора плюс, разумеется, меню и трей. При переходе на Unity, чего не хватало, так это старых добрых апплетов, к которым я привык во времена Gnome 2.
Хорошие новости! Похоже, что на сегодняшний день уже существует весьма приличное количество индикаторов (аналоги апплетов) для панели Unity, что разумеется не может не радовать.
Я использую следующие индикаторы:
  1. Системный монитор indicator-multiload (ppa:indicator-multiload/stable-daily);
  2. indicator-sensors для отображения показаний аппаратных датчиков температуры (ppa:alexmurray/indicator-sensors);
  3. Менеджер буфера обмена pastie (ppa:hel-sheep/pastie);
  4. indicator-cpufreq для управления режимами работы процессора (ppa:artfwo/ppa).
Более полный список доступных индикаторов см., например, здесь.

пятница, 24 июня 2011 г.

STL и QTL

На днях мне приспичило сравнить производительность std::vector и QVector при их простейшем использовании, а сегодня на глаза попалась хорошая заметка - сравнение STL и QTL.
Вообще, в консольных приложения я использую только STL, однако, при создании кросс платформенных приложений с графическим интерфейсом, Qt сильно облегчает жизнь.

четверг, 23 июня 2011 г.

Оформление исходного кода в статьях на blogger.com

Опять же чтоб не забыть и не потерять )
При написании предыдущей заметки столкнулся с тем, что движок blogger.com не поддерживает должного оформления листингов исходного кода в статьях. Удивительно конечно, ну да ничего не поделаешь. Тем более, что решение нашлось очень быстро.

Во-первых, необходимо внести небольшие изменения в шаблон блога. Заходим в "Дизайн" -> "Изменить HTML" и в коде шаблона, после тега <head>, вставляем следующий код.
<script src='http://yandex.st/highlightjs/6.0/highlight.min.js'/>
<script type='text/javascript'>
initHighlightingOnLoad();
</script>
<link href='http://yandex.st/highlightjs/6.0/styles/default.min.css' rel='stylesheet'/>
<style>
pre&gt;code {
width: 100%; 
overflow: auto;
}
</style>
Данный код обеспечивает автоматическое распознавание языка и стиль подсветки синтаксиса по умолчанию.

Во-вторых, необходимо скачать библиотеку highlight, запустить файл export.html и подготовить свой код для вставки в статью блога. Вставку производить в режиме "Изменить HTML".

std::vector и QVector

А что мы, собственно, теряем по скорости используя QVector вместо sdt::vector? Оказывается не так уж и мало...

Машина и ПО, использовавшиеся в тесте:


Код с использованием std::vector
#include <vector>

using std::vector;

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

    vector<double> v;
    v.resize(10000000);

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

        v[i] = 67.687353 * (i + 13.507867) /
        (i * 45.686754) - 12.56;
    }

    return 0;
}

Код с использованием QVector
#include <QVector>

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

    QVector<double> v;
    v.resize(10000000);

    for (int i=0; i<v.size(); i++) {

        v[i] = 67.687353 * (i + 13.507867) /
        (i * 45.686754) - 12.56;
    }

    return 0;
}

Замеры времени выполнения программы проводились с помощью утилиты time.

Результаты: в среднем, (по пяти замерам) использование QVector увеличило время выполнения программы на 10%...

среда, 22 июня 2011 г.

g++ -Ox...

Один программист провел интересное исследование: сравнение эффективности одного и того же простого действия при использовании глобальной функции, inline глобальной функции, чистого функтора, лямбда-функции C++11 и лямбда-функции Boost.Phoenix. Полученные результаты оказались весьма интересны, в особенности то, насколько на таблицу результатов повлиял флаг g++ -Ox. Итак, при -O0 в лидеры вышел код с использованием лямбда-функции C++11, а при использовании -O3 лямбда-функция C++11 оказалась на последнем месте! В лидерах при максимальной оптимизации глобальная функция, чистый функтор и лямбда-функция Boost.Phoenix. Вот так.

Более подробно - см. первоисточник.