Сборка приложения из KDE
Для установки приложения в KDE4 нужно использовать команду
cmake -DCMAKE_INSTALL_PREFIX:PATH=`kde4-config —prefix` ..
Жизнь в Германии и мир вокруг меня
Для установки приложения в KDE4 нужно использовать команду
cmake -DCMAKE_INSTALL_PREFIX:PATH=`kde4-config —prefix` ..
После обновления Kubuntu на версию 15.10 Dolphin «забыл» все сервисы, как штатные так и самодельные — «распаковать в…», «Edit as root» и т.д.
Проблема активно обсуждается и предлагаются решения, например на stackowerflow. Суть — в новой версии KDE плагины сервисов переехали из /usr/share/kde4/services/ServiceMenus/ в /usr/share/kservices5/ServiceMenus/. Но просто переместить файлы сервисов недостаточно, отсутствует ещё один файл, описание KonqPopupMenu/Plugin. Поэтому в свежей Kubuntu проблема решается так:
# Copy Service Menus and symlink old and new place
cp -r ~/.kde/share/kde4/services/ServiceMenus/* ~/.local/share/kservices5/ServiceMenus/
rm -rf ~/.kde/share/kde4/services/ServiceMenus
ln -s ~/.local/share/kservices5/ServiceMenus ~/.kde/share/kde4/services/ServiceMenus
# Copy main plugin file
sudo cp /usr/share/kde4/servicetypes/konqpopupmenuplugin.desktop /usr/share/kservicetypes5/konqpopupmenuplugin.desktop
Пользуясь случаем хочу поделиться своими сервисами:
HEX edit (открывает okteta на выбранном файле)
Text edit (открывает kate на выбранном файле)
Text edit as root (открывает kate на выбранном файле от рута)
Скачать dolphin-services. Для установки распакуйте в ~/.kde/share/kde4/services/ServiceMenus/
Однажды хороший человек подарил мне монитор — 27″ QNIX, модели QX2700. Монитор обладает высоким разрешением — 2560×1440 и LED подсветкой. Обладает так же низкой ценой (порядка 250 долларов). Но есть и недостатки — глянцевый экран (самый главный минус), полным отсутствием мозгов.
Полное отсутствие мозгов — у монитора нет OSD-меню, не может правильно показывать разрешения ниже рабочего, не отправляет EDID (не представляется). Первые два недостатка на жизнь никак не влияют, а вот последний создает много проблем. Без EDID монитор не будет правильно определяться и работать в linux.
Настройка монитора ещё осложняется тем что у меня два монитора с разными разрешениями (второй — fullhd Benq, телевизор-монитор для работы), и просто сунуть конфиг из интернета не получится. Вот типичный пример отсюда:
# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig: version 1.0 (buildmeister@builder58) Fri Mar 12 02:12:40 PST 2010
Section «ServerLayout»
Identifier «Layout0»
Screen 0 «Screen0»
EndSection
Section «Files»
EndSection
Section «Monitor»
Identifier «Monitor0»
VendorName «QNIX»
ModelName «2710»
HorizSync 88.8
VertRefresh 59.5
# 2560×1440 59.96 Hz (CVT 3.69M9) hsync: 89.52 kHz; pclk: 312.25 MHz
Modeline «2560×1440» 312.25 2560 2752 3024 3488 1440 1443 1448 1493 -hsync +vsync
DisplaySize 597 336
Option «DPMS»
EndSection
Section «Device»
Identifier «Device0»
Driver «nvidia»
VendorName «NVIDIA Corporation»
Option «NoLogo»
EndSection
Section «Screen»
Identifier «Screen0»
Device «Device0»
Monitor «Monitor0»
DefaultDepth 24
SubSection «Display»
Depth 24
Modes «2560×1440»
EndSubSection
Option «UseEDID» «False»
Option «UseEDIDDPI» «False»
Option «UseEDIDFreqs» «False»
Option «ExactModeTimingsDVI» «True»
## Metamode for single QX2710 (2560×1440)
# Option «metamodes» «DFP-0: 2560×1440 +0 +0»
## Metamode for dual QX2710 (5120×1440)
Option «metamodes» «DFP-0: 2560x1440_60 @2560×1440 +0+0, DFP-2: 2560x1440_60 @2560×1440 +2560+0»
EndSection
Самое главное в нём — это опция
Option «UseEDID» «False»
, которая выключает использование EDID и принудительно настраивает разрешение монитора не взирая ни на что. Следовательно второй монитор с другим разрешением работать не будет. Опция работает глобально и выключить только для одного выхода карты у меня не получилось.
Решение проблемы — первое и плохое
Решением оказалось создать один «чудо-монитор» с настроенными поддержкой 2560×1440 и 1920×1080 разрешений и выставить их. Пример работающего конфига:
# nvidia-settings: X configuration file generated by nvidia-settings
# nvidia-settings: version 331.20 (buildd@roseapple) Mon Feb 3 15:07:22 UTC 2014
Section «ServerLayout»
Identifier «Layout0»
Screen 0 «Screen0» 0 0
InputDevice «Keyboard0» «CoreKeyboard»
InputDevice «Mouse0» «CorePointer»
Option «Xinerama» «0»
EndSection
Section «Files»
EndSection
Section «InputDevice»
# generated from default
Identifier «Mouse0»
Driver «mouse»
Option «Protocol» «auto»
Option «Device» «/dev/psaux»
Option «Emulate3Buttons» «no»
Option «ZAxisMapping» «4 5»
EndSection
Section «InputDevice»
# generated from default
Identifier «Keyboard0»
Driver «kbd»
EndSection
Section «Monitor»
# HorizSync source: edid, VertRefresh source: edid
# 1920×1080 @ 60.00 Hz (GTF) hsync: 67.08 kHz; pclk: 172.80 MHz
Identifier «Monitor0»
VendorName «Unknown»
ModelName «DFP-0»
HorizSync 0.8 — 188.8
VertRefresh 1.0 — 120.0
ModeLine «1920x1080_60» 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -hsync +vsync
ModeLine «2560x1440_60» 241.50 2560 2608 2640 2720 1440 1443 1448 1481 +hsync -vsync
Option «UseEDID» «False»
Option «UseEDIDDPI» «False»
Option «UseEDIDFreqs» «False»
Option «ExactModeTimingsDVI» «True»
EndSection
Section «Monitor»
# DisplaySize 597 336
Identifier «Monitor1»
VendorName «Unknown»
ModelName «QX2700»
DisplaySize 597 336
HorizSync 0.8 — 188.8
VertRefresh 1.0 — 120.0
ModeLine «1920x1080_60» 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -hsync +vsync
ModeLine «2560x1440_60» 241.50 2560 2608 2640 2720 1440 1443 1448 1481 +hsync -vsync
Option «DPMS»
Option «UseEDID» «False»
Option «UseEDIDDPI» «False»
Option «UseEDIDFreqs» «False»
Option «ExactModeTimingsDVI» «True»
EndSection
Section «Device»
Identifier «Device0»
Driver «nvidia»
VendorName «NVIDIA Corporation»
BoardName «GeForce GTX 260»
EndSection
Section «Screen»
# Option «MultiGPU» «Off»
# Option «BaseMosaic» «off»
# Removed Option «metamodes» «DVI-I-2: 1920x1080_60.00 +0+0, DVI-I-3: 2560x1440_60.00 +1920+0»
# Removed Option «metamodes» «DVI-I-2: nvidia-auto-select +2560+240 {viewportin=1920×1200, viewportout=2304×1440+128+0}, DVI-I-3: nvidia-auto-select +0+0»
# Option «nvidiaXineramaInfoOrder» «DFP-0»
# Option «Stereo» «0»
# Option «metamodes» «DVI-I-2: 1920x1080_60.00 +2560+360 {viewportin=1920×1080}, DVI-I-3: nvidia-auto-select +0+0»
# Option «MultiGPU» «Off»
# Option «BaseMosaic» «off»
# Removed Option «metamodes» «DVI-I-2: 1920x1080_60.00 +2560+360 {viewportin=1920×1080}, DVI-I-3: 2560x1440_60.00 +0+0»
# Removed Option «metamodes» «DVI-I-2: 1920x1080_60 +2560+0, DVI-I-3: 2560x1440_60 +0+0»
Identifier «Screen0»
Device «Device0»
Monitor «Monitor1»
DefaultDepth 24
Option «Stereo» «0»
Option «nvidiaXineramaInfoOrder» «DFP-1»
Option «metamodes» «DVI-I-2: 1920x1080_60_0 +2560+360, DVI-I-3: 2560x1440_60 +0+0»
Option «SLI» «Off»
Option «MultiGPU» «Off»
Option «BaseMosaic» «off»
SubSection «Display»
Depth 24
EndSubSection
EndSection
С этим конфигом проработал долгое время, пока мне не подарили новую видеокарту (GeForce GTX750) — она понимать отказалась, и такой конфиг работать перестал. В результате было найдено правильное и красивое решение проблемы.
Решение проблемы — красивое
Как оказалось, можно принудительно задать EDID-файл для выхода видеокарты куда подключен монитор. Это решает все проблемы — монитор определяется правильно и работает автоматически, ручная настройка не требуется.
Section «Device»
Identifier «Device0»
Driver «nvidia»
VendorName «NVIDIA Corporation»
BoardName «GeForce GTX 570»
Option «CustomEDID» «DFP-0:/etc/X11/qnix.edid»
Option «IgnoreEdidChecksum» «DFP-0»
Option «ModeValidation» «AllowNon60hzmodesDFPModes, NoEDIDDFPMaxSizeCheck, NoVertRefreshCheck, NoHorizSyncCheck, NoDFPNativeResolutionCheck, NoMaxSizeCheck, NoMaxPClkCheck»
EndSection
Теперь монитор можно настроить штатными средствами вашей оболочки через CLI или GUI!
Скачать файлы:
Производитель Ownice. Устройство новое, начало продаж 20 декабря 2014 г.
CPU: RK3188, Cortex A9 Quad Core, 1.6-1.8GHz
RAM: 1GB /2GB
Экран: 1024*600
У меня такого аппарата нет, но судя по отзывам — звук получше привычных MicronTeck, но при этом более сырая прошивка и меньшая изученность.
Ко мне обратился пользователь форума 4pda с просьбой посмотреть способ работы внутри новой магнитолы, с проверкой возможности работы моего сервиса на новой магнитоле. На первый взгляд похоже что всё неплохо, такие же евенты типа
cn.com.cs2c.android.vehicle.action.NEXT_KEY
. Возможно будет реально сделать и небольшое приложение-сервис под них.
Выложил свои старые (2008-2009) разработки на PHP, со времен более активного кодирования под web. Необходимость быстро создавать разные админки, панельки, приложения и простые сайтики остаётся и поныне. Мой набор скриптов для простых решений простых задач не собирается терять эффективность — кода мало, выглядят хорошо, удобно пользоваться.
Пока что туго с документацией, но буду по мере сил дописывать демо-сайтик с примером использования пакета.
В процессе портирования программы VKMM сделал давно актуальный фикс — ВКонтакте уже довольно давно присылает 302 редирект на страницу ошибки, вместо прямого кода ошибки HTTP 404. С точки зрения QNetworkReply разумеется редирект не считается ошибкой, что приводило к зависаниям стрима, если плейлист был открыт давно (и ссылки протухли).
Обработка редиректа в Qt выполняется достаточно просто:
1. Присоединяемся к QNetworkReply::finished
connect(netReply, &QNetworkReply::finished, this, &mStream::onNetResult);
2. В слоте проверяем код статуса HTTP на редирект:
void mStream::onNetResult()
{
QNetworkReply* reply = qobject_cast(sender());
Q_CHECK_PTR(reply);
if (!reply) return;
switch (reply->error())
{
case QNetworkReply::NoError:
{
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
switch (statusCode) {
case 301:
case 302:
case 307:
qDebug()
Многие сталкивались с тем что при компиляции студией Qt-проектов (и не только) Windows не хочет использовать стандартную функцию main(), а требует свои
WinMain
для GUI приложений и при использовании UNICODE, выдавая ошибки линковки вроде этих:
LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup
или
error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
На более старых версиях проблему можно было отчасти решить, задав точку входа принудительно через
/ENTRY:main
или
#pragma comment( linker, «/entry:main» )
Но сейчас такой способ больше не работает, программа будет падать при старте. Если вам не нужна поддержка WCHAR в параметрах argv, то проще всего слинковать со специальной служебной либой Qt5 для линковки с main(). Библиотека называется Qt5::WinMain:
IF (BUILD_WIN32)
TARGET_LINK_LIBRARIES(${PROJECT} Qt5::WinMain) # Correct entry point
ENDIF()
Мой старый проект (основное развитие в 2012 году) гибридного музыкального плеера VKMM выложен в открытый доступ.
Перед выкладкой выполнил портирование на Qt5. Были сложности с компиляцией Qt5 проекта под Windows, но кажется что (почти) всё работает. Точно есть проблемы с last.fm API и событиями в потоках движка плеера.
Проект на gitgub: github.com:petrows / vkmm-desktop
В новой версии добавлена совместимость с некоторыми магнитолами KGL где присутствует нестандартное число шагов регулировки громкости. Исправление по просьбе пользователя форума 4pda.
Суть проблемы — в магнитоле используется формула для записи «настоящего» значения громкости (0-100), которое рассчитывается из «андроидной» (0-30) + добавляется нелинейность (логарифмическая шкала). Ранее максимальное значение громкости Android было жестко прописано в коде, теперь программа берет его из настроек. Так же китайцы поменяли формулу вычисления с операций целочисленными типами на вычисления с плавающей точкой.
String vol_max_s = ((AudioManager) ctx.getSystemService(«audio»)).getParameters(«cfg_maxvolume=»);
volumeMax = Float.parseFloat(vol_max_s);
Первая запись — открытие блога 7 января 2015 года.