LINUX.ORG.RU

Сообщения Obey-Kun

 

[Qt] Накидайте скриншотов одного приложения/окна/диалога под разными платформами

 

Тут один товарищ утверждает, что приложения на wxwidgets на разных платформах смотрятся роднее, чем приложения на Qt. А особенно под виндой. Накидайте скриншотов, опровергающих это, будьте добры.

Obey-Kun
()

Продолжение «Автор программы под GPLv2 нарушает GPLv2». Признавайтесь, кто?

Либа того автора добавлена в антивирусные базы как вирус — http://sharewareplaza.com/klen-library-virus_92808.html.

Признавайтесь, кто? Я тут не при чём, честно.

Да, это продолжение темы.

Obey-Kun
()

[C++] [компиляторы] Множественное наследование

 

#include <iostream>
using namespace std;

class MyBase1
{
public:
    MyBase1() {
        cout << "Con1\t" << this << endl;
    }
    MyBase1(const MyBase1 &other) {
        cout << "CCon1\t" << this << endl;
    }
    ~MyBase1() {
        cout << "Des1\t" << this << endl;
    }
    
};

class MyBase2
{
public:
    MyBase2() {
        cout << "Con2\t" << this <<  endl;
    }
    MyBase2(const MyBase2 &other) {
        cout << "CCon2\t" << this << endl;
    }
    ~MyBase2() {
        cout << "Des2\t" << this << endl;
    }
};

class MyBase12 : public MyBase1, MyBase2
{
public:
    MyBase12() {
        cout << "Con12\t" << this <<  endl;
    }
    MyBase12(const MyBase12 &other) {
        cout << "CCon12\t" << this << endl;
    }
    ~MyBase12() {
        cout << "Des12\t" << this << endl;
    }
};

class MySuperClass : public MyBase12
{
public:
    MySuperClass() {
        cout << "ConS\t" << this << endl;
    }
    MySuperClass(const MySuperClass &other) {
        cout << "CConS\t" << this << endl;
    }
    ~MySuperClass() {
        cout << "DesS\t" << this << endl;
    }
};

void func(MyBase12 r)
{
    cout << "COPY:\t" << &r <<  endl;
}

int main()
{
    const char *delim = "*****************\n";
    MySuperClass o;
    cout << "ORIG:\t" << &o << endl << delim;
    func(o);
    cout << delim;
}

gcc версия 4.5.2 20110127 (prerelease) (GCC) x86_64

Con1    0x7fff30141e66
Con2    0x7fff30141e66
Con12   0x7fff30141e66
ConS    0x7fff30141e66
ORIG:   0x7fff30141e66
*****************
Con1    0x7fff30141e67
Con2    0x7fff30141e67
CCon12  0x7fff30141e67
COPY:   0x7fff30141e67
Des12   0x7fff30141e67
Des2    0x7fff30141e67
Des1    0x7fff30141e67
*****************
DesS    0x7fff30141e66
Des12   0x7fff30141e66
Des2    0x7fff30141e66
Des1    0x7fff30141e66
Тут всё ожидаемо.

MSVC++ 2010 Express

Con1    0012FF4B
Con2    0012FF4C
Con12   0012FF4B
ConS    0012FF4B
ORIG:   0012FF4B
*****************
Con1    0012FE60
Con2    0012FE61
CCon12  0012FE60
COPY:   0012FE60
Des12   0012FE60
Des2    0012FE61
Des1    0012FE60
*****************
DesS    0012FF4B
Des12   0012FF4B
Des2    0012FF4C
Des1    0012FF4B
А тут обратите внимание на адреса объектов второго класса. Почему так?

Obey-Kun
()

Регистрация программы для ЭВМ в Роспатенте. GPL. Топик 2.

В предыдущем топике на вопрос о том, можно ли в России регистрировать свою программу в Роспатенте, если её планируется потом распространять под GPL, ответили, что можно. А теперь предоставляю вам мнение специалиста.

Юрист

Регистрации в Роспатенте подлежат только исключительные права. Право на программу, находящуюся под лицензией GPL, исключительным не является.

Я

Хм, впервые от Вас это услышал. Где можно про это почитать? Я всегда думал, что регистрировать ПО в Роспатенте нужно просто для того, чтобы в случае чего можно бы было легко доказать своё авторство. А исключительное оно или нет — не важно. Я ошибался?

Скажем, я автор некоторой программы, распространяющейся под GPL. Некоторый человек нарушил права и начал эту программу распространять, закрыв исходники (что нарушает лицензию) или, например, удалив упоминания о моём авторстве. Тут ведь доказывать государству, что именно я являюсь автором, будет сложнее?

Юрист

Если бы все можно было открыть и прочитать, не было бы потребности в специалистах, все открывали и смотрели бы. По заданому вами вопросу требуется системное толкование ГК совместно с условиями GPL. Для того, чтобы ответить на этот вопрос, надо уходить в теорию. Для начала, необходимо разделить понятие «авторство» на две его составляющие: правовую и обыденную.

Что касается обыденного понимания авторства, то есть как определенной связи между субъектом и созданным им произведением, то тут вы совершенно правы. В обыденном понимании, создав программу и лицензировав ее под GPL, вы безусловно являетесь ее автором. Как минимум, вы можете этим гордиться.

Правовой аспект авторства существенно сложнее. Начнем с того, что гражданское законодательство РФ до сих пор не содержит такого правового понятия как «открытая лицензия». Регистрация права авторства, т.е. по-сути, перевод права из разряда идеальных в разряд юридических, влечет определенный комплекс правовых мер.

Согласно ст. 1255 ГК РФ автору произведения принадлежат:

  • исключительное право на произведение
  • право авторства
  • право автора на имя
  • право на неприкосновенность произведения
  • право на обнародование произведения

В силу ст. 1265 ГК РФ правом авторства является право признаваться автором произведения, а правом автора на имя - право использовать или разрешать использование произведения под своим именем, под псевдонимом, без указания имени. Эти права неотчуждаемы и непередаваемы. Отказ от этих прав ничтожен в силу закона.

С. 1266 ГК РФ презюмирует право автора требовать отказ от внесения изменений в его произведение без согласия автора.

Таким образом, как вы сами видите, положения российского законодательства совершенно не применимы к тем свободам, которые дает GPL. Как следствие, регистрация права авторства на программу в уполномоченном органе, неизбежно выводит ее из сферы GPL на территории РФ. При этом, в других юрисдикциях, та же самая программа сможет без дефектов распространяться по GPL.

P.S. Все вышесказанное является моим профессиональным мнением, которое я никому не навязываю и не предлагаю им руководствоваться. Я встречал в литературе различные точки зрения, в том числе и прямо противоположные, но на мой взгляд, они неверны.

Вот такая фигня, товарищи.

Obey-Kun
()

Как пишете списки инициализации?

Вариант 1:

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
    , m_polygon1()
    , m_polygon2()
    , m_some_stuff("We have very very very very very long line here")
{
    // ...
}

Вариант 2:

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent),
    m_polygon1(),
    m_polygon2(),
    m_some_stuff("We have very very very very very long line here")
{
    // ...
}

Вариант 3:

MainWidget::MainWidget(QWidget *parent):
    QWidget(parent),
    m_polygon1(),
    m_polygon2(),
    m_some_stuff("We have very very very very very long line here")
{
    // ...
}

Или как-то иначе? Просто понял, что даже в тех проектах, где принято операторы делать в новой строке, то есть

if(isSomeLongLongLongLongLongOkGuys("We have very very long line here")
   && isOtherLongLongLongHeyThere()) {
    // ...
}
так вот, даже в этих проектах пользуются вариантом 2. Как у вас в проекте принято?

Obey-Kun
()

[icq][вирт секс] что за фигня?

 

Впервые за год вошёл в ICQ. Через полчаса после смены статуса на «онлайн» стали стучаться девушки с предложениями виртуального секса, «познакомиться», «поболтать».

Что за фигня? Явно не боты, ведут нормальную беседу. Сразу их посылаю.

Obey-Kun
()

Мыть мясо

Нужно ли мыть мясо перед его приготовлением?

Погуглил, 95% людей говорят, что мыть надо, но изредка встречаются высказывания вроде: «Мыть мясо нельзя. С водой микробы могут просочиться во внутренние ткани куска. Те, что снаружи, погибнут во время тепловой обработки.»

Так мыть или нет?

Obey-Kun
()

Автор программы под GPLv2 нарушает GPLv2

Нашёл одну интересную личность, которая распространяет свои программы (бинарники) под GPLv2, но при этом не предоставляет доступ к исходникам. Точнее, предоставляет, но при выполнении нескольких условий (одно из которых — «вы должны пользоваться моей программой не менее полугода»).

Может мне кто-нибудь объяснить его логику?

Obey-Kun
()

[flash] На тему эволюции машинок. Разработка способа передвижения набора узлов, костей и мышц.

 

Obey-Kun
()

Дизайнеры форм. Использовать или нет?

Вот посмотрел я сейчас несколько первых попавшихся софтин из KDE — все по дизайну простые донельзя. У себя .ui не использую, всё пишу руками в коде самой программы.

В каких случаях может понадобиться использования форм? Какие тут плюсы и минусы?

Да и вообще, Qt Designer я не осилил. При написании гуя в коде чувствую полный контроль. Или же Ъ пишут .ui—файлы руками? Или Ъ их таки вообще не используют?

Obey-Kun
()

Когда писать модульные тесты (unit tests)?

Когда в жизни проекта наступает момент, в который необходимо заняться созданием юнит-тестов? Когда проект вырос в полноценную софтину/либу, выложен в сеть и далее планируется совершенствование? Или когда API проекта перестаёт меняться по 10 раз на дню? А может быть, когда проект переваливает за 9000 строк чистого кода? Какого критерия придерживаетесь вы?

В моём сейчас 10000 строк, но он пока не завершён. Необходимость юнит-тестов ещё не чувствуется, но скорей потому, что я повсеместно повтыкал ассерты.

Obey-Kun
()

Интересные игрушки

http://www.contrib.andrew.cmu.edu/~gchin/ — та, что на Хаскеле, любопытная.

Obey-Kun
()

[C] (j>1 && j<-1) равно true

 

#include <stdio.h>

int main()
{
    unsigned j = 12;
    printf("j > -1: %i\n", j > -1);
    printf("j < -1: %i\n", j < -1);
    printf("j >  1: %i\n", j > 1);
}
j > -1: 0
j < -1: 1
j >  1: 1

Естественно, компилятор ругается на сравнение знакового и беззнакового целых выражений. Но в чём глубинный смысл результата?

Я сначала было подумал, что это из-за представления unsigned. Но после увеличения j на INT_MAX результат не поменялся.

Obey-Kun
()

Нечёткие (fuzzy) операции над полигонами. Посоветуйте либу.

Нужно проводить сложение полигонов. Сейчас для этого использую QPainterPath с его unite, но по-хорошему оно не для того предназначено. Да и не прокатило оно мне. А не прокатило вот почему...

Представьте ситуацию. Есть два полигона. Они соприкасаются, то есть сторона одного из них лежит на стороне другого. Мне надо, чтобы при сложении получился один полигон. Посмотрите на картинку: http://img141.imageshack.us/img141/2749/fuzzyunion.png. Видите там точки p1 и p2? Ведь в компьютерном представлении они могут лежать немного вне полигона, т.е. при сложении может получиться 2 различных полигона. А надо-то один.

То есть, нужна либа, которая учитывала бы подобные проблемы с числами с плавающей запятой.

Библиотек для булёвых операций с полигонами много: GPC, clipper, boost::polygon и т.п. Но пробовать все воистину лень. Кто-нибудь может подсказать ту, где такое точно сработает? Или назвать те, где такое не работает.

Obey-Kun
()

Поправочки к текстам

На add.jsp вместо

Пишите осмысленный заголовок. Придумайте осмысленный заголовок теме. Сообщения с бессмысленными загловками («Помогите!», «Вопрос», ...), как правило, остаются без ответа.

Хочу

Сообщения с бессмысленными заголовками («Помогите!», «Вопрос», …), как правило, остаются без ответа.

То есть кавычки-ёлочки, многоточие и исправление опечатки в слове «заголовками».

На add-section.jsp?section=1 тоже проблемы с кавычками. И не хватает точек. И вместо тире дефисы. А также косяк:

Не забывайте про заполнения поля Subject.

лучше исправить на

Не забывайте про заполнения поля «Заглавие».

Ну и вот косяк:

По умолчанию у нас установлен режим автовыделения ссылок в тексте новости. Если вы хотите выделять ссылки вручную HTML тегами - не забудьте переключиться с режима «Plain Text» на «HTML»

Obey-Kun
()

[реквест] Переименование разделов новостей

 

Вот тут (linux.org.ru) можете видеть полный список.

Половина на английском, а половина на русском. Да ещё кое-какие из них корявые. Переименовать давно пора, ИМХО. Вот:

  • Linux.org.ru server → Linux.org.ru
  • Linux General → (не придумал пока)
  • OpenSource → Открытое ПО (кстати, в комментарии написано «свободное», так что и комментарий надо бы поправить)
  • RedHat → Red Hat
  • Security → Безопасность
  • Linux kernel → Ядро Linux
  • Hardware and Drivers → Аппаратное обеспечение и драйвера
  • BSD → *BSD
  • OpenOffice (StarOffice) → OpenOffice
  • Ubuntu Linux → Ubuntu
  • Gentoo Linux → Gentoo
  • Multimedia → Мультимедиа (кстати, тут комментарий хорошо бы написать)
  • Internet → Интернет
Obey-Kun
()

[реквест] Читаемый URL для add.jsp, add-section.jsp, add-poll.jsp и edit.jsp. Отображение названия раздела, куда добавляем.

 

Вместо этого:

http://www.linux.org.ru/add.jsp?group=19392
http://www.linux.org.ru/add-section.jsp?section=1
http://www.linux.org.ru/add.jsp?group=10980&noinfo=1
http://www.linux.org.ru/add-poll.jsp?group=19387
http://www.linux.org.ru/edit.jsp?msgid=5891390

Хочу это:

http://www.linux.org.ru/forum/lor-source/add
http://www.linux.org.ru/news/add
http://www.linux.org.ru/news/openoffice/add
http://www.linux.org.ru/polls/add
http://www.linux.org.ru/forum/lor-source/5891390/edit

Вместо этого:

Добавить
Добавить Новость
Добавить
Добавить опрос
Редактирование

Хочу это:

Добавление темы в Lor-source
Добавление новости
Добавление новости в OpenOffice (StarOffice)
Добавление опроса
Форум - Lor-source \n Редактирование [url=http://www.linux.org.ru/forum/lor-source/5891390/edit]темы[/url]
(причём названия разделов хорошо бы сделать ссылками).

Вместо этого:

Добавить тему в форум

хочу пустоту, ибо 2 раза примерно одно и то же там написано. Там — это, очевидно, на странице добавления топика на форум.

Obey-Kun
()

[HIG] [кнопочка] Переключение трёх и более состояний

 

Есть 3 кнопочки. На них написаны названия животных. Например: «собачка», «кошка», «мышка». Кнопочки можно вжимать и отжимать. Если кнопочка вжата, то показывается соответствующее животное. То есть если вжаты кнопки «кошка» и «мышка», то показываются кошка и мышка.

А теперь появился хамелеон. Он умеет быть жёлтым и красным. Соответственно, есть такие взаимоисключающие состояния: «показывается жёлтый хамелеон», «показывается красный хамелеон», «хамелеон не показывается». По логике, первому и второму состояниям должна соответствовать вжатая кнопка, а последнему — отжатая.

Что должно быть написано на такой кнопке? Или правильные HIG такое вообще запрещают? А как тогда поступить?

P.S.: в моём случае речь идёт не о животных, а о переключении способов привязки — кто работал с CAD-ами, знает, что это. Но дела это не меняет, наверное.

upd: В дальнейшем у хамелеона могут добавиться новые цвета.

Obey-Kun
()

[c/c++] логические операции. Они ленивые?

if (firstBoolFunc() || secondBoolFunc()) {
    // ...
}

Если firstBoolFunc() возвращает true, будет ли выполняться secondBoolFunc()?

Касается ли это прочих случаев (||, &=, |=)?

Obey-Kun
()

[doxygen] Комментарии в .h/.hpp/.. vs комментарии в .c/.cpp/...

 

Как вы предпочитаете делать и почему?

Obey-Kun
()