Собственно сабж. Зарелизилась вторая часть Седжвиковского курса по алгоритмам и структурам данных. В этой части будем фапа^W учиться работать с графами.
В процессе была куча сегфолтов и адовые артефакты.
По сути проблемы всего три (конкретно для r600g, в целом для месы – 2):
Контекст OpenGL 4.2. Драйвер r600g рапортует версию 3.3, а движок игры, в свою очередь, работает по принципу segfault driven error handling. Решается просто:
Во-первых, разрабы используют расширение ARB_shading_language_include, которое не поддерживается ничем кроме невидиевской проприетарщины. Но во имя амдшной проприетарщины они запилили в движок fallback режим, в котором это расширение реализуется прямо в движке на коленке, однако включается этот fallback режим (немного) через жопу – они (только) проверяют возвращаемое значение функции glXGetProcAddressARB на nullptr. А glXGetProcAddressARBне обязан возвращать nullptr, кроме адреса надо смотреть еще в список расширений, чего они не делают, а месовская реализация никогда не возвращает nullptr -> segfault driven error handling. Чинится этот баг подстановкой костыля в LD_PRELOAD.
Во-вторых, в шейдерах постобработки SMAA/FXAA у них где-то в дебрях кода обложенное ifdef'ами лежит включение очередного расширения, что, блджад, не правильно. После обнаружения этой фигни месовский GLSL компилятор совершенно справедливо прерывает компиляцию, а так как ребята не умеют в обработку ошибок — см. выше. Этот баг обходится с помощью месовского механизма подмены шейдеров в рантайме и костыля-решейпера их кода шейдеров. файла drirc, в который нужно добавить
<application name='Divinity Original Sin Enhanced Edition' executable='EoCApp'>
<option name='allow_glsl_extension_directive_midshader' value='true' />
</application>
Графические артефакты. У них в движке (насколько я понял) есть две принципиально разные ветки кода/рендеринга, которые разделяются по (внимание!) строке в GL_VENDOR: если в этой строке что угодно кроме "ATI Technologies Inc.", то активируется невидиевская ветвь, что на месе приводит к аду, если же доставить в LD_PRELOAD еще один костыль с этой строкой, то рендеринг становится мягким и шелковистым.
TL;DR: Gentoo, дефолтные кеды, ШГ, панелька с автоскрытием.
[ ~ ] # USE="python_targets_python3_5" emerge -p dev-python/matplotlib
These are the packages that would be merged, in reverse order:
Calculating dependencies... done!
[ebuild U ~] dev-python/matplotlib-1.5.1::gentoo [1.4.3::gentoo] USE="cairo examples qt4 qt5 -doc -excel -fltk -gtk2% -gtk3 -latex -pyside {-test} -tk -wxwidgets (-gtk%)" PYTHON_TARGETS="python3_4 -python2_7 -python3_3 -python3_5" 52 766 KiB
[ebuild N ~] dev-python/cycler-0.10.0::gentoo USE="{-test}" PYTHON_TARGETS="python3_4 -python2_7 -python3_3 -python3_5" 17 KiB
[ebuild N ~] dev-python/versioneer-0.15::gentoo PYTHON_TARGETS="python3_4 python3_5 -pypy -python2_7 -python3_3" 35 KiB
Total: 3 packages (1 upgrade, 2 new), Size of downloads: 52 817 KiB
The following USE changes are necessary to proceed:
(see "package.use" in the portage(5) man page for more details)
# required by dev-python/matplotlib-1.5.1::gentoo
# required by @selected
# required by @world (argument)
>=dev-python/cycler-0.10.0 -python_targets_python3_5
# required by @selected
# required by @world (argument)
>=dev-python/matplotlib-1.5.1 -python_targets_python3_5
Я тут случайно посмотрел John Wick... И это офигенно! Лучший боевик за хз сколько лет. Сюжета нет (боевик же), но постановка боев и музыка очень круты.
И, да, в этом фильме тачки не взлетают если им пальнуть в крышку бензобака ^_^
# journalctl -xb | grep blue
-- Subject: Начинается запуск юнита bluetooth.service
-- Начат процесс запуска юнита bluetooth.service.
авг 17 18:25:15 tear bluetoothd[344]: Bluetooth daemon 5.21
авг 17 18:25:15 tear bluetoothd[344]: Starting SDP server
-- Subject: Запуск юнита bluetooth.service завершен
-- Процесс запуска юнита bluetooth.service был завершен.
-- Subject: Начинается запуск юнита bluetooth.target
-- Начат процесс запуска юнита bluetooth.target.
-- Subject: Запуск юнита bluetooth.target завершен
-- Процесс запуска юнита bluetooth.target был завершен.
авг 17 18:25:15 tear bluetoothd[344]: Bluetooth management interface 1.5 initialized
авг 17 18:25:15 tear bluetoothd[344]: Sap driver initialization failed.
авг 17 18:25:15 tear bluetoothd[344]: sap-server: Operation not permitted (1)
авг 17 18:25:15 tear bluetoothd[344]: GAP and GATT are mandatory
авг 17 18:25:15 tear bluetoothd[344]: gap-gatt-profile profile probe failed for 98:D6:F7:71:0F:FD
авг 17 18:25:15 tear bluetoothd[344]: hci0 Load Connection Parameters failed: Unknown Command (0x01)
авг 17 18:25:16 tear NetworkManager[323]: <warn> bluez error getting default adapter: Method "DefaultAdapter" with signature "" on interface "org.bluez.Manager" doesn't exist
авг 17 18:25:16 tear NetworkManager[323]: <warn> bluez error getting default adapter: Method "DefaultAdapter" with signature "" on interface "org.bluez.Manager" doesn't exist
# emerge -p net-wireless/bluez
These are the packages that would be merged, in reverse order:
Calculating dependencies... done!
[ebuild R ] net-wireless/bluez-5.21-r1:0/3 USE="cups obex readline systemd udev -debug (-selinux) {-test}" 1 356 KiB
Total: 1 package (1 reinstall), Size of downloads: 1 356 KiB
# emerge -p net-misc/networkmanager
These are the packages that would be merged, in reverse order:
Calculating dependencies... done!
[ebuild R ] net-misc/networkmanager-0.9.8.10-r1 USE="avahi bluetooth dhcpcd gnutls introspection modemmanager ppp systemd wext wifi -connection-sharing -consolekit -dhclient -nss -resolvconf {-test} -vala" 1 969 KiB
Total: 1 package (1 reinstall), Size of downloads: 1 969 KiB
По теме нагуглил только это, но там инфы не особо %)
Подскажите как в линуксе сэмулировать нажатие клавиши на хардварной клавиатуре. Т.е. не средствами иксов или перенаправлением ввода, а так чтобы софт (те же иксы) результат работы программы считали нажатием по реальной клавиатуре перед пользователем.
Я подумал в сторону /dev/input/event*, но тут две неприятности:
1. в сети нагуглил только примеры кейлогеров, т.е. RDONLY
2.
# file /dev/input/event0
/dev/input/event0: character special (13/64)
# cat /dev/input/event0
cat: /dev/input/event0: No such device
Столкнулся (при сборке openmw) с вот этим багом буста. Если коротко, то надо либо собирать буст с c++11, либо собирать пользовательский код без c++11, либо специальный дефайн (-DBOOST_NO_CXX11_SCOPED_ENUMS). Workaround понятен и не интересен. Посмотрел в
tear ~ # emerge -p =dev-libs/boost-1.55.0-r1
These are the packages that would be merged, in reverse order:
Calculating dependencies... done!
[ebuild R ~] dev-libs/boost-1.55.0-r1:0/1.55.0 USE="doc icu nls threads -context -debug -mpi -python -static-libs -tools" PYTHON_TARGETS="python2_7 python3_2 python3_3 (-python2_6)" 0 kB
Total: 1 package (1 reinstall), Size of downloads: 0 kB
tear ~ #
USE флага c++11 не увидел, посмотрел в ebuild:
tear ~ # grep -i cxx /usr/portage/dev-libs/boost/boost-1.55.0-r1.ebuild
mpi? ( || ( sys-cluster/openmpi[cxx] sys-cluster/mpich2[cxx,threads] ) )
compiler_executable="$(tc-getCXX)"
compiler_executable="$(tc-getCXX)"
using ${compiler} : ${compiler_version} : ${compiler_executable} : <cflags>"${CFLAGS}" <cxxflags>"${CXXFLAGS}" <linkflags>"${LDFLAGS}" ;
if [[ $($(tc-getCXX) -v) == *trunk* ]]; then
compilerVersion=$($(tc-getCXX) -v | sed '1q' \
compilerExecutable=$(tc-getCXX)
append-cxxflags -std=gnu++98
tear ~ # grep -i std /usr/portage/dev-libs/boost/boost-1.55.0-r1.ebuild
append-cxxflags -std=gnu++98
# boost's build system truely sucks for not having a destdir. Because for
tear ~ #
Увидел <cxxflags>"${CXXFLAGS}"
Вопрос: идеологически верно добавлять c++11 к своим системным (или в env) CXXFLAGS или просить на багзилле добавить юз к ебилдам буста?
почему не починить иксы, вместо того чтобы пилить ненужно:
Fixing the other security properties is impossible using the X11 protocol as it would break too many legitimate applications that rely on those features. Disabling access to these features would effectively make the X-Server non-compliant with the X11 protocol.
скажите, я правильно понимаю, что из-за «QString uses implicit sharing (copy-on-write) to reduce memory usage and to avoid the needless copying of data» функции-члены, которые копируют QString можно смело помечать как noexcept?
планируется приложение состоящее из мат. модели, базы данных, (возможно) сетевого обмена и какого-то гуя для всего этого. При чем все это должно быть заменяемым. Мне сразу вспоминаются плагины и Qt. Но яхз как это правильно делается, т.е. если заменяется все, то ядро приложения становится только запускалкой для плагинов, тут я вспомнил qutim и личкрафты, но первое я пару лет назад не осилил, а второго вообще боюсь :(
собственно вопрос - что мне почитать (исходники, теория), чтобы сделать наименее кривую первую реализацию (хотя один хрен переделывать придется)?