silvansky programming stuff

21Feb/110

nokia + microsoft

Интересный пост:

http://ishc.livejournal.com/136661.html

цитата:

И, наконец, Nokia. Нет, не эта нашумевшая история со сменой флагманской операционной системы. Август 2009: «Крупнейший производитель ПО и крупнейший производитель смартфонов создали альянс для создания потрясающего решения для мобильной работы. Сегодня президент бизнес-подразделения Microsoft Стивен Элоп и исполнительный вице-президент подразделения мобильных устройств Nokia Kai Öistämö объявили о соглашении, очерчивающем общее видение будущего мобильных устройств. Это первый раз, когда каждая из компаний вступает в альянс подобной природы и масштабов». В качестве планов было портирование Microsoft Office Mobile и ПО для ведения совместной работы Microsoft на устройства Nokia Symbian.

* Что вышло? Полтора года спустя Стивен Элоп объявляет о закрытии направления Symbian в Nokia.

Filed under: Uncategorized No Comments
14Feb/110

Farewell, Nokia!

Никто не ожидал такой подставы.
/me косится на чемоданчик под столом и задумывает ускорение

Filed under: Uncategorized No Comments
17Jan/110

идея на воздух

Есть большое количество различных "научных" и т.п. калькуляторов, сочетающих в себе простоту и функциональность, есть даже калькуляторы, использующие скриптовые языки (вроде javascript) для создания пользовательских фунцкий. Но последний подход не даёт хорошей скорости вычислений, т.к. скриптовые языки являются интерпретируемыми.
Моя идея состоит в том, чтобы вместо скриптового языка использовать C/C++. Но тогда необходима компиляция проекта... А затем выполнение...
А вот что если сделать так: код функции/функций компилируется в плагин/библиотеку, а затем цепляется к основной программе и может быть вызван сколько угодно раз с большой скоростью. Тогда нужен только анализатор имени и аргументов введённой функции, который уже легко сделать.
Наверняка такие проекты уже есть, но идея мне всё равно понравилась.

Filed under: Uncategorized No Comments
14Jan/110

IPv6

не могу не поделиться.

src

Filed under: Uncategorized No Comments
23Dec/100

Qt + windows registry

Хороший не документированный способ работы с реестром винды из Qt.

Пример: прочитать системную переменную Path:

QSettings reg("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", QSettings::NativeFormat);
QStringList paths(reg.value("Path").toString().split(";"));
23Nov/100

QML WhealArea

источник: https://github.com/explicitcall/QMLbox
что: QML-элемент WheelArea, дополнение к стандартному MouseArea. реагирует на mouse wheel.
чтобы юзать, регистрируем и импортируем стандартным образом.

#ifndef WHEELAREA_H
#define WHEELAREA_H

#include <QDeclarativeItem>
#include <QGraphicsSceneWheelEvent>

class WheelArea : public QDeclarativeItem
{
    Q_OBJECT

public:
    explicit WheelArea(QDeclarativeItem *parent = 0) : QDeclarativeItem(parent) {}

protected:
    void wheelEvent(QGraphicsSceneWheelEvent *event) {
        switch(event->orientation())
        {
            case Qt::Horizontal:
                emit horizontalWheel(event->delta());
                break;
            case Qt::Vertical:
                emit verticalWheel(event->delta());
                break;
            default:
                event->ignore();
                break;
        }
    }

signals:
    void verticalWheel(int delta);
    void horizontalWheel(int delta);
};

#endif // WHEELAREA_H
Tagged as: , , , No Comments
16Nov/100

qml & multiline elide

иногда нужно обрезать длинную строку и поставить в конце многоточие... для этого в QML у текста есть свойство elide. чтобы его задействовать нужно задать ширину текста.

а что если мы хотим вывести текст в 2 строки? и при этом естественно обрезать лишнее и поставить многоточие?...
тогда elide бессилен.

немного результатов моих мучений с данным вопросом: рабочая функция многострочного илайда!

сразу перейдём к коду.

Text {
    id: tempText
    visible: false
    width: parent.width
    wrapMode: Text.WordWrap
    function elideMultiline(text, font, linesCount) {
        tempText.font = font
        var l = text.length
        var s = "";
        for (var i = 0; i < linesCount; i++) {
            s += "W";
            if (i < linesCount - 1)
                s += "\n"
        }
        tempText.text = s
        var maxHeight = tempText.paintedHeight
        tempText.text = text
        while (tempText.paintedHeight > maxHeight) {
            tempText.text = text.substring(0, --l) + "..."
        }
        return tempText.text
    }
}
Text {
    id: longText
    width: parent.width
    wrapMode: Text.WordWrap
    font.pointSize: 16
    Component.onCompleted: {
        text = tempText.elideMultiline("my very-very-very-very and very long text with a lot of words in it and which i want to be correctly elided", font, 2)
    }
}

как видно из кода, создаётся дополнительный элемент Text и делается невидимым. он используется для определения размеров текста на экране. для этого элемента определяем функцию elideMultiline, в неё передаём текст, шрифт и нужное нам количество строк текста.

далее всё просто, простой линейный перебор (сокращаем строку на 1 символ, дописываем "...", проверяем, опять сокращаем.......)

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

Замечание. Почему-то не хочет работать text: elideMultiline(), поэтому используется событие готовности компонента и в нём делается присвоение. Если сделать всё же первый вариант, то всё будет тормозить и выдавать кучу предупреждений "QML Text: Binding loop detected for property "text""

Tagged as: , , , , No Comments
16Nov/100

livejournal + firefox

открыл свой жж в хроме и удивился рекламе... мда, отвык.
в огнелисе стоит AdblockPlus, в нём такие настройки:

|http://l-stat.livejournal.com/img/ljtimes/*
*lj_times*
Filed under: Uncategorized No Comments
16Nov/100

<замазано>


тестирую тег span в HTML... не нашёл лучшего места, чем данный жж.
кстати, интересно наверное будут выглядеть посты в таком стиле. неудобочитаемые.

а если серьёзно, то нашёл интересный класс в QtDeclarative, называется QDeclarativeImageProvider. его надо наследовать, реализовать функции requestImage/requestPixmap, зарегистрировать наш провайдер в энджине (QDeclarativeEngine::addImageProvider()) и юзать из QML вот так:

Image {
    source: "image://providerName/imageName.png"
}

теперь можно динамически вставлять картинки в qml, передавая туда лишь строку с "image://...".

Tagged as: , , , No Comments
15Nov/100

qml + qt model/view

итак, теперь серьёзно о QML. загрузить в QML список элементов и отобразить их там - это конечно хорошо, но мало. предположим, у нас есть уже модель данных, сделанная на наследнике QAbstractItemModel и мы хотим отобразить элементы этой модели. причём перед отображением неплохо бы отфильтровать и отсортировать нашу модель.

C++-way: делаем наследника QAbstractItemView, делаем наследника QAbstractItemDelegate (для кастомной отрисовки), делаем наследника QSortFilterProxyModel (для фильтрации и сортировки).

QML-way: делаем наследника QSortFilterProxyModel (для фильтрации и сортировки), делаем в QML ListView (для моделей типа список), регистрируем наш фильтр в QML, назначаем list.model.

всё по прежнему остаётся просто! в принципе, надо лишь правильно создать и заполнить свою модель и прокси-модель.

Tagged as: , , , , No Comments