LINUX.ORG.RU

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

 

[C/C++] Выравнивание структур. Надо ли париться?

Форум — Development
struct LiseElement {
       bool m_isActive;
       char *m_pNext;
       int m_value;
};

24 байта на amd64.

struct LiseElement {
       char *m_pNext;
       int m_value;
       bool m_isActive;
};

16 байт на amd64.

Проводится ли популярными компиляторами (gcc, майкрософтовский компилятор) автоматическая оптимизация порядка данных в структурах, или же это лучше делать вручную? Или использовать pragma pack в критичных классах/структурах?

Obey-Kun
()

[Qt] [хороший стиль] Помогите с планировкой сигнально-слотовой архитектуры проекта. Или не только с ней.

Форум — Development

Скрин моего проекта.

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

А теперь по теме.

Есть док. В нем расположены всяческие настойки инструмента. На картинке он слева. В зависимости от выбранного инструмента (6 синих иконок) там показываются соответствующие параметры инструмента (как в GIMP и куче других программ).

Есть сцена. В ней пользователь может создавать инструмент. На картинке один из инструментов расположен по центру, зелёненький такой. Разные инструменты характеризуются разными параметрами. Геометрически это всегда или полилинии, или прямоугольники, так что во-первых они характеризуются геометрическими параметрами. Помимо этого, есть и другие параметры, персональные для каждого инструмента. Все они унаследованы от QGraphicsObject, то есть умеют сигналы и слоты.

Когда пользователь создаёт инструмент, нужно:

  1. Наладить связь между изменением значений в доке и инструментом. Пользователь меняет циферки — меняется инструмент.
  2. Наладить связь между изменением геометрии инструмента и обновлением значений в доке. Пользователь меняет инструмент (мышкой таскает) — обновляются значения в доке.
  3. Передать инструменту изначальные параметры (те, что вбиты в доке на момент создания его пользователем).

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

Все параметры можно условно разделить на параметры геометрии и параметры конкретного типа инструмента. Значит, можно ввести сигналы-слоты, связанные с геометрией (аргументы QRectF или QPolygonF), и сигналы-слоты, связанные с параметрами конкретного типа инструмента (в качестве аргументов — SelectionParameters, BlockCreatorParameters и т.п.).

  1. Сцена дублирует все сигналы, посылающиеся доком для изменения параметров инструментов. То есть там есть сигналы: setToolGeometry(QRectF), setToolGeometry(QPolygonF), setToolProperties(SelectionParameters), setToolProperties(BlockCreatorParameters), ... Эти сигналы MainWindow в конструкторе соединяет с соответствующими сигналами дока. Инструмент в конструкторе подключает часть из этих сигналов к своим слотам.
  2. Сцена дублирует все сигналы, посылающиеся при изменении параметров инструментов: toolGeometryChanged(QRectF), toolGeometryChanged(QPolygonF), toolPropertiesChanged(SelectionParameters). MainWindow в конструкторе соединяет эти сигналы с соответствующими слотами дока. Инструмент в конструкторе подключает свои сигналы к части сигналов сцены.
  3. Инструмент после налаживания всех связей испускает сигнал needSettings(). Это вызывает испускание сценой сигнала needToolSettings(). Этот сигнал принимается слотом дока emitToolSettings(). В этом слоте док испускает сигналы с настроками выбранного инструмента.

Спасибо всем осилившим сей поток информации! А теперь вопрос. Хороший ли это план, или же вы поступили бы иначе?

 

Obey-Kun
()

[Большой Проект] Ядро проекта, гуй проекта и исключения.

Форум — Development

Есть ядро проекта. На плюсах без сторонних либ. Есть гуй. На Qt. Возможно, потом будут другие гуи, возможно и консольный.

В ядре могут генерироваться ошибки. Например, при парсинге файла могут быть такие ошибки: встречён неправильный символ и встречена неправильная скобка.

В гуе надо такие ошибки отлавливать и показывать окошки и т.п.

Как такое лучше делать?

Obey-Kun
()

[C/C++/...][KDevelop] В продолжение разговора о int *i и int* i; int &i и int& i

Форум — Development

Я так понял, большинство здесь таки придерживается стиля K&R, то есть прилепляет «*» и «&» к названиям переменных. Я тоже.

Замечательный astyle имеет параметр «--align-pointer» с возможными значениями type/middle/name.

А вот KDevelop в модуле переформатирования кода вообще не поддерживает эту фичу, то есть не трогает «*» и «&» и указателях и ссылках. Но вот при авто-дополнении всегда прилепляет эти значки в стиле Страуструпа, то есть к типу.

Кому не нравится это поведение, просьба проголосовать в https://bugs.kde.org/show_bug.cgi?id=263834.

 

Obey-Kun
()

[C++][дыра в знаниях] дефолтная инициализация стандартных типов и указателей

Форум — Development
int num;
//в num может быть мусор?
int *ptr;
//в ptr может быть мусор?

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

Другими словами — в стандарте языка определены стандартные значение для num и ptr?

 

Obey-Kun
()

Официальный обучающий курс Qt

Новости — Документация
Группа Документация

Вышел в свет Qt in Education Course Material. Этот материал предназначен в первую очередь учителям, желающим преподавать Qt.

Материал курса разбит на лекции. Лекции включают слайды, заметки для преподавателя и упражнения для студентов. Также имеется 5 лабораторных работ, каждая из которых затрагивает несколько лекций.

Каждая лекция расчитана на 2 академических часа (без учёта упражнений).

Все материалы распространяются на условиях Creative Commons Attribution-Non-Commercial-Share Alike 2.5.

Курс будет переведён на различные языки усилиями сообщества.

>>> Подробности

 , ,

Obey-Kun
()

[C++] int *i и int* i; int &i и int& i

Форум — Development

Есть страуструповское решение — он советует использовать int* i.

Что вы можете сказать по этому поводу? Я всегда использовал int *i. То же самое наблюдаю в Qt.

 

Obey-Kun
()

[БЕСИТ][KDE4] Кто-нибудь сделайте баг про KSnapshot

Форум — Talks

Уже давно бесит баг, но всё никак руки не доходят написать в багзиллу. А именно. При нажатии на printscreen открывается ksnapshot и сразу делает снимок. При этом почти всегда на снимок попадает иконка открываемого кснепшота и сдвигаемые заголовки в панели задач. Вот о чём я говорю: http://rghost.ru/4006474/image.png

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

Пожалуйста, составьте баг и запостите его в багзиллу. У меня сейчас мозг не варит (не спал долго).

Obey-Kun
()

Список ОС, прошедших The Open Group's UNIX Certification Program

Форум — Talks

Вот не нашёл список юниксов, ей б-гу. Поделитесь.

Obey-Kun
()

Уже какой раз удивляюсь гениальности гугла

Форум — Talks

Два примера приведу.

Первый довольно простой. Хочу найти хороший стиль C++ кодинга, принятый в google code. Запрос простой: http://www.google.ru/search?q=google+code+правила. Первый результат — искомый. Ну тут ничего сложного. Хотя нравится, как он ненавязчиво перевёл с русского на английский. Но сталкиваюсь с подобным более 9000 раз в день.

А вот второй пример уже заставляет поверить в божественность гугля. Искал нечто типа сайта rghost, написанное на php. Файлопомойку, короче. http://www.google.ru/search?q=php+rghost. И что вы думаете? На первой странице результатов — ссылка на мой же топик на ЛОРе на эту тему: http://www.linux.org.ru/forum/talks/4409639.

Гугл бог.

Obey-Kun
()

[Qt] Проголосуйте, пожалуйста, за несколько багов.

Форум — Development

По порядку.

http://bugreports.qt.nokia.com/browse/QTBUG-15756 — ну тут просто утечка памяти в примере про Undo Framework, причём очень тупая и исправляемая одной строчкой.

http://bugreports.qt.nokia.com/browse/QTBUG-15764 — хотелось бы иметь возможность удалять отменённые команды в QUndoStack. То есть очищать его от отменённых команд, оставляя те, что применены. В баге приведён пример, где такое может понадобиться. Опять же, реализация очень проста, а профита будет много.

http://bugreports.qt.nokia.com/browse/QTBUG-16297 — нужно иметь более низкоуровневый prepareGeometryChange. А именно такой, который бы обновлял bsp trees и прочую информацию о итемах в сцене, но ничего не перерисовывал. Пример я там привёл такой: у меня есть КАД, в этом КАДе есть инструмент-прямоугольник, лежащий в сцене. При изменении, скажем, позиции такого прямоугольника, не обязательно перерисовывать всё в предыдущей и новой позиции, ведь если они пересекаются, то достаточно лишь обновить всё, что лежит вне пересечения. Объяснил коряво. Если хотите более понятного объяснения, напишите в комментах здесь, просто сейчас пол-седьмого утра, а я не спал. Вот картинка (это конкретный случай, показывающий, что update() при изменении геометрии часто лучше контролировать самому).

http://bugreports.qt.nokia.com/browse/QTBUG-16762 — нужно добавить информацию в документацию по поводу transformationAnchor == AnchorUnderMouse в QGraphicsView. Там 2 пункта. В баге всё вроде понятно описано.

Заранее спасибо.

 

Obey-Kun
()

vim vs KDevelop

Форум — Development

На данный момент использую KDevelop. Думаю осилить vim. Там можно делать следующее?

  1. быстрое переключение declaration-definition.
  2. умное автодополнение (учитывает типы, умеет дополнять классы/методы из подключённых либ и т.п.)... чтобы было некоторое подобие менюшки с предложениями, дабы я мог выбрать одно из.
  3. быстрое добавление нового класса: выбираем название класса. выбираем родителя, выбираем какие методы родителя надо переделать... он создаёт .h и .cpp, пишет хедеры с лицензией, пишет define guards, заполняет дефинишны и скелет декларейшнов, добавляет файл в соответствующий cmake-файл.
Obey-Kun
()

Расчеты на видеокарте.

Форум — Development

Расскажите, пожалуйста, о расчетах на видеокарте. У меня в проекте есть то, что можно считать в почти неограниченное количество потоков. Метод с парочкой формул, который пускается для нескольких тысяч объектов. Сейчас это распараллелено с помощью OpenMP, достаточно парочки строк перед расчетным циклом.

Obey-Kun
()

[C++] static const и хороший тон.

Форум — Development

Вопросы такие.

У меня в классе есть некоторое поле, которое не меняет своего значения от экземпляра к экземпляру. Оно используется в нескольких методах. Тут использовать static const доктор прописал?

А если оно используется только в одном методе, то тут тоже надо использовать static const, но уже делать объявление внутри метода?

Раньше использовал просто const-поля.

 

Obey-Kun
()

[C] Ъ считывание из файла

Форум — Development

Есть файл вида:

12.2 4
 33.3  5.6
1.33    3.2
 2323  45.1
  2131 3.432
 3234   3323
3242     3423
 324324 43423

Нужно считать из него все числа в два массива (в первый массив числа первого столбца, во второй — второго). Причём если в строке что-то не так (присутствует что-то кроме двух чисел или же не хватает цифры), выводить ошибку. Как такое делают Ъ? А то частенько приходится делать подобное и каждый раз получается уникальный велосипед.

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

 

Obey-Kun
()

[Qt] Сжатие нескольких событий одного типа в одно.

Форум — Development

В документации Qt есть такая штука:

postEvent() отправляет событие в очередь для последующей координации. В следующий раз основной цикл обработки событий Qt работает, он координирует все отправленные события, с некоторой оптимизацией. Например, если имеется несколько событий изменения размера, они сжимаются в одно. То же самое относится к событиям рисования:

Если я решу создать свой собственный event (унаследую от QEvent), то как мне заставить несколько таких событий в очереди «сжиматься в одно»?

 

Obey-Kun
()

К Humble Bundle 2 добавили Humble Bundle 1

Новости — Игры
Группа Игры

Теперь при покупке HIB2 более, чем за 7.33 $, вы получаете также игры из Humble Bundle 1. Это следующие игры:

  • World of Goo
  • Aquaria
  • Gish
  • Lugaru HD
  • Penumbra Overture,

Также при покупке за эти деньги даётся ещё один бонус — квест Samorost 2.

У пользователей, купивших HIB2 до этого объявления (более 180 тысяч людей), эти игры теперь также доступны к загрузке, вне зависимости от денег, которые они заплатили.

>>> Подробности

 aquaria, , , gish, , , , , , , ,

Obey-Kun
()

«Прошу прощения(е)»?

Форум — Talks

Это винительный падеж множественного числа?

Прошу smth...

smth тут должно быть в винительном падеже, ибо:

Им. дом  хомячок
Р. дома хомячка
Д. дому хомячку
В. дом хомячка <----- только это подходит
Тв. домом хомячком
Пр. доме хомячке

Смотрим эту таблицу для нашего слова:

Падеж ед.ч. мн.ч
Им.	проще́ние	проще́ния
Р.	проще́ния	проще́ний
Д.	проще́нию	проще́ниям
В.	проще́ние	проще́ния <-----
Тв.	проще́нием	проще́ниями
Пр.	проще́нии	проще́ниях

Во всех книжках пишут «прошу прощения» и сомнений в том, что это — единственный верный вариант, у меня нет. Но ведь выходит, оно тут во множественном числе. Почему?

Obey-Kun
()

Ultrabundle — 3 игры за 6.97 $.

Новости — Игры
Группа Игры

Компания Puppy Games недавно начала продажу по символической цене набора из трёх своих игр. Специализация этой компании — качественно сделанные ретро-клоны старых игр для электронных автоматов. В комплект входят следующие игры:

  • Droid Assault — шутер. Используйте вирус, чтобы взять под контроль дроидов и уничтожить их.
  • Ultratron — напоминает Robotron: 2084. Отомстите за человеков! Запасайтесь вооружением и прорывайтесь сквозь орды злых железяк.
  • Titan Attacks — игрушка в стиле Space Invaders. Игра очень затягивает и обладает и красивой «лазерной» графикой.

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

Эти игры распространяются без DRM. Мало того, в письме, которое приходит после покупки, содержится указание о том, что распространение этих игр близким и знакомым разрешено и в некотором роде приветствуется. Они написаны на Java с использованием технологий OpenGL и OpenAL и доступны для Linux, MacOS X и ещё одной малопопулярной операционной системы.

Всего эта компания выпустила 4 игры. Три из них входят в этот пакет. Четвёртую вы могли видеть ранее — это захватывающий tower defence Revenge of the Titans, который входит в Humble Bundle 2.

За 6.97 $ вы получаете код, который после его ввода в демо-версии игр, делает их полноценными. За раз делается покупка на одну из платформ (linux/macosx/win) — то есть код действителен только для одной из них. Оплата доступна через PayPal, банковские карты, по почте и банковским переводом.

Сайт Puppy Games

>>> Запись в блоге Puppy Games

 droid assault, puppy games, titan attacks, ultratron,

Obey-Kun
()

[специалистам по всему] NAS с качалкой на 4+ SATA-харда

Форум — Talks

Хочу собрать NAS, поставить туда Arch Linux и качать-раздавать торренты. Оттуда будет смотреться HD-кино и играться музыка по NFS.

Там будет 2 харда по 500 гигов в зеркалирующем рейде (под музыку — я ей дорожу, редкая) и ещё 2 больших (1 или 1.5 Тб) харда, объединённых с помощью LVM — для торрентов и фильмов. Хорошо бы было, если я смог бы туда поставить ещё хотя бы 1 хард. То есть надо 4, а лучше 5 мест для хардов (как в корпусе, так и на маме).

Качаться-раздаваться будет сразу много торрентов (2-3 сотни), так что процессор должен это тянуть.

Этот NAS будет запихан куда-нибудь далеко, так что против активного охлаждения ничего не имею.

Посоветуете по железу?

 

Obey-Kun
()

RSS подписка на новые темы