Сообщения в Несетевые проекты

Re: azot

Ответ на сообщение
Сделал в сабже вот что:

* Инициализация дисплея для иксов теперь проходит только один раз
* В конфиге можно задавать самому задержку для проверки курсора
* Конфиг в самом начале не надо копировать вручную, программа сделает это сама
(вариант копирования из /usr/share/doc/ тоже работает)
* Теперь азот работает не на втором питоне, а на третьем

По первому пункту скажу, что после исправления сабж у меня исправно проработал около двух часов и никаких болезненных симптомов не показывал. Так что, видимо, проблема решена. Но протестировать всё равно надо.
vit01 to vit01 (2016-05-19 12:19:26) [ссылка]

Re: Несетевые проекты

Ответ на сообщение
Серьёзная вещь, надо бы посмотреть.
btimofeev> Но в эмуляторе есть пара ошибок, которые я так и не решил (одна связана с размером окна Qt, вторая с указателями c++).
Если руки дойдут, то и над этим голову поломать можно. Можно поподробнее, что за ошибки?
btimofeev> // а вообще я всегда хотел написать эмулятор Sega Mega Drive, но думаю не дорос еще))
Это и вправду сложная задача. Но зато есть и те, кто на эту платформу до сих пор пишет. Вот у меня есть знакомый (который даже в секте появлялся пару раз), регулярно делающий что-нибудь под сегу на ассемблере. Музыку пишет и всякие прикольные графические эффекты.
vit01 to btimofeev (2016-05-19 12:33:44) [ссылка]

Re: Несетевые проекты

Ответ на сообщение
vit01> Если руки дойдут, то и над этим голову поломать можно. Можно поподробнее, что за ошибки?
1. При изменении размера окна внизу появляется пустая полоса в несколько пикселей. Не понимаю откуда она берется.

2. Второе это даже не ошибка, а не очень хорошо написанный код. Внутри эмулятор создает двумерный массив, представляющий экран. Виджет должен отрисовать этот массив на экране. Вот передача этого массива между объектами реализована полным копированием, а не передачей указателя. Все мои попытки передать указатель заканчивались segfault'ом. Здесь наверное сказывается мое плохое знание c++, либо неправильная архитектура.
btimofeev to vit01 (2016-05-19 13:13:57) [ссылка]

Re: emuchip-qt

Ответ на сообщение
btimofeev> 2. ..... Вот передача этого массива между объектами реализована полным копированием, а не передачей указателя. Все мои попытки передать указатель заканчивались segfault'ом. Здесь наверное сказывается мое плохое знание c++, либо неправильная архитектура.
У меня получилось решить эту проблему. Вот приду с репетиции вечером, причешу код немного и закину на Гитхаб.
Правда, производительность только чуть-чуть повысилась, но всё же.

Над qt-шной пустой полосой пока думаю.
vit01 to btimofeev (2016-05-21 09:16:41) [ссылка]

Re: emuchip-qt

Ответ на сообщение
О, а кода там совсем немного. Уже сейчас успел отправить, можно мержить, собирать и проверять.
vit01 to vit01 (2016-05-21 09:48:40) [ссылка]

Re: emuchip-qt

Ответ на сообщение
vit01> О, а кода там совсем немного. Уже сейчас успел отправить, можно мержить, собирать и проверять.
Спасибо, смержил.

Насчет производительности: демки qt отрисовывают тысячи объектов с огромной скоростью, тут же отрисовка сотни квадратов порой тормозит. Особенно заметно на демках типа Climax Slideshow, на высоких разрешениях.

Я тут еще антиалиайсинг отключил, как то упустил его при портировании на qt5.
btimofeev to vit01 (2016-05-21 18:02:09) [ссылка]

Re: emuchip-qt

Ответ на сообщение
Хорошо. А я тут наконец-то выяснил, почему появляется та самая белая полоса внизу окна. Это происходит из-за того, что размеры окна становятся больше, чем размер [холста + меню].

У тебя есть функции set1x(), set2x() и так далее. Внутри них есть такой кусок кода:
setFixedSize (512, 256 + menuBar()->height()); // например, так
Так вот, обнаружил, что перед первой отрисовкой окна (то есть при вызове readSettings() из конструктора) функция height() выдаёт одно значение, а после отрисовки - другое. У меня правильным оказывается второе значение, а первое - на 3 пикселя больше, чем надо.

Варианты: либо продолжить разборки и найти в самом Qt причины этого, либо сделать какой-нибудь костыль.
vit01 to btimofeev (2016-05-23 19:43:24) [ссылка]

Re: emuchip-qt

Ответ на сообщение
Починил проблему с полосой, установив EventFilter на событие изменения размера меню.
Заодно сделал получение объекта menuBar единичным, а то как-то не очень хорошо для каждого раза заново метод вызывать.
vit01 to vit01 (2016-05-24 05:02:48) [ссылка]

Re: emuchip-qt

Ответ на сообщение
vit01> Починил проблему с полосой, установив EventFilter на событие изменения размера меню.
Работает, спасибо. Кстати, добавь себя в файл authors.
btimofeev to vit01 (2016-05-24 10:34:30) [ссылка]

Re: emuchip-qt

Ответ на сообщение
Хочется ещё и ещё кода понаписать. ;)

Надо бы какой-нибудь покрупнее проект найти.

// Плюсы, кстати, неплохая вещь, особенно, в связке с Qt. Жаль, что раньше никогда почти дел с ними не имел.
vit01 to btimofeev (2016-05-24 13:48:34) [ссылка]

Re: emuchip-qt

Ответ на сообщение
vit01> Надо бы какой-нибудь покрупнее проект найти.
Могу предложить поучаствовать в относительно крупном проекте. Есть очень неплохой консольный музыкальный плеер cmus. У его плагинной системы один недостаток: из плагина нельзя добавить несколько треков в плейлист (это нужно для музыкальных форматов в которых в одном файле может содержаться несколько треков). К примеру в плагинах поддержки cue и cd это сделано хаками: часть кода плагина содержится в коде программы. И это сильно усложняет написание подобных плагинов + при компиляции плагина нужно перекомпилировать и программу. Текущий майнтейнер проекта не против изменений, но никто за реализацию этого так и не взялся.
vit01> // Плюсы, кстати, неплохая вещь, особенно, в связке с Qt. Жаль, что раньше никогда почти дел с ними не имел.
А мне они уже не нравятся, слишком сложный язык, по-моему.
btimofeev to vit01 (2016-05-24 15:30:31) [ссылка]

Re: emuchip-qt

Ответ на сообщение
vit01> // Плюсы, кстати, неплохая вещь, особенно, в связке с Qt. Жаль, что раньше никогда почти дел с ними не имел.
btimofeev> А мне они уже не нравятся, слишком сложный язык, по-моему.
Смотря с чем сравнивать. Вот если сравнить C++ & Qt с Java на андроиде, то первая связка гораздо приятнее в работе.
А так на питоне проще всего делать. Вот хорошее отличие от питоновского PyQt в том, что не надо заморачиваться с импортами разных фич (т.е. не надо помнить заранее, какая вещь в каком классе находится).
vit01 to btimofeev (2016-05-25 01:49:59) [ссылка]

Re: Несетевые проекты

Ответ на сообщение
btimofeev> Могу предложить поучаствовать в относительно крупном проекте. Есть очень неплохой консольный музыкальный плеер cmus.
Спасибо за идею. Вот собрал его только что, потом освою и буду исходники курить.
vit01 to btimofeev (2016-05-25 01:49:59) [ссылка]

Re: cmus

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

Проталкивать в апстрим пока страшновато (несмотря на то, что моя ветка уже собирается и не сегфолтится).
vit01 to vit01 (2016-05-27 15:55:41) [ссылка]

Re: cmus

Ответ на сообщение
vit01> Проталкивать в апстрим пока страшновато (несмотря на то, что моя ветка уже собирается и не сегфолтится).
Лучше создай заранее issue с обсуждением изменений или напиши на почту майнтейнеру приложения (его ник flyingmutant, он из России, на почту он нормально отвечает), так как он делает код ревью и отправляет на доработку если ему что-то не нравится (мой простенький vtx плагин со второго или третьего раза принял, точно не помню).
btimofeev to vit01 (2016-05-27 16:33:17) [ссылка]

Re: cmus

Ответ на сообщение
Разработчик мне только сегодня ответил. Пишет, что времени на просмотр кода у него очень мало, но подбадривает и говорит, чтобы я продолжал. Как сделаю большую часть, то пулл-реквест открою.
С кодом cd посложнее будет, потому что там инициализация модуля в самом коде находится. Больше всего вопросов по коду определения типа файла. Но ничего, зато нескучно будет.

Планирую сделать в каждом плагине функцию инициализации, где всякая экзотика сможет регистрировать собственные обработчики плейлистов и других штук.
vit01 to btimofeev (2016-06-05 15:46:22) [ссылка]

Re: cmus

Ответ на сообщение
Можешь еще посмотреть код deadbeef'а, у него внутри плагина доступна функция для добавления нескольких треков.
btimofeev to vit01 (2016-06-06 04:52:39) [ссылка]

Re: cmus

Ответ на сообщение
btimofeev> Можешь еще посмотреть код deadbeef'а, у него внутри плагина доступна функция для добавления нескольких треков.
deadbeef как раз на разные сомнительные штуки имеет функцию плагиноинициализации. Здесь я сделал подобную вещь и тем самым завершил перенос функций добавления плейлиста внутрь плагинов.

Посмотрим, что разработчик ответит: https://github.com/cmus/cmus/pull/460
vit01 to btimofeev (2016-06-13 18:02:57) [ссылка]