Openkinect+linux: поддержка звука

Категории: HowTo kinect linux

Есть такая демка во openkinect - micview. Для её использования нужна прошивка из состава kinect sdk или та, которая идет с Xbox360.

Подробнее можно глянуть официальный мануал.

А тут немного о том, где же эту прошивку взять (вики шлет в разные списки рассылки или гугл).

Если мы в linux, то нам нужен audios.bin из состава обновления xbox360. В windows нам нужен тот, который идет в составе kinect sdk (из-за ограничения стека usb в винде прошивка от xbox360 нормально работает только в linux).

  • скачиваем обновление
  • скачиваем скрипт extract360.py для распаковки ресурсов xbox
  • вытаскиваем из скачанного архива файл FFFE07DF00000001
  • натравливаем
    $ extract360.py FFFE07DF00000001
    
  • кладем audios.bin в ~/.libfreenect

!Openkinect demo: micview

Fedora+Nvidia=CUDA

Категории: HowTo

Итак. Мы хотим получить рабочую инсталляцию на Fedora (в моем случае - RFRemix и с этим связано несколько багов).

Для этого нам надо:

  1. видеокарту nvidia :)
  2. установленный репозитарий cuda (отсюда)
  3. заметку о том, как восстановить plymouth после установки драйвером nvidia

1 - Ставим

# yum install cuda

Этот метапакет поставит все, что должно идти в комплекте (включая свежие дрова)

2 - Удаляем kmod-nvidia

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

# yum remove kmod-nvidia

3 - Пересобираем akmod

# akmod -kernel $(uname -r)

Тут может потребоваться доставить kernel-headers

4 - Пересобираем initrd

Для этого воспользуемся dracut

# dracut --force

5 - Ребут :)

6 - Можно собрать семплы

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

# cd /usr/local/cuda-6.5/samples/5_Simulations/fluidsGL  
# make

7 - А вот тут нас поджидает облом (RFRemix)

>>> WARNING - libGL.so not found, refer to CUDA Samples release notes for how to find and install them. <<<  
>>> WARNING - libGLU.so not found, refer to CUDA Samples release notes for how to find and install them. <<<  
>>> WARNING - libX11.so not found, refer to CUDA Samples release notes for how to find and install them. <<<  
>>> WARNING - libXi.so not found, refer to CUDA Samples release notes for how to find and install them. <<<  
>>> WARNING - libXmu.so not found, refer to CUDA Samples release notes for how to find and install them. <<<

Ага!

Смотрим в findgllib.mk

ifeq ("$(OSLOWER)","linux")  
 # first search lsb_release  
 DISTRO = $(shell lsb_release -i -s 2>/dev/null | tr "[:upper:]" "[:lower:]")  
 DISTVER = $(shell lsb_release -r -s 2>/dev/null)  
 ifeq ("$(DISTRO)","")  
 # second search and parse /etc/issue  
 DISTRO = $(shell more /etc/issue | awk '{print $$1}' | sed '1!d' | sed -e "/^$$/d" 2>/dev/null | tr "[:upper:]" "[:lower:]")  
 DISTVER= $(shell more /etc/issue | awk '{print $$2}' | sed '1!d' 2>/dev/null  
 endif  
 ifeq ("$(DISTRO)","")  
 # third, we can search in /etc/os-release or /etc/{distro}-release  
 DISTRO = $(shell awk '/ID/' /etc/*-release | sed 's/ID=//' | grep -v "VERSION" | grep -v "ID" | grep -v "DISTRIB")  
 DISTVER= $(shell awk '/DISTRIB_RELEASE/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | grep -v "DISTRIB_RELEASE")  
 endif  
endif

ifeq ("$(OSUPPER)","LINUX")  
 # $(info) >> findgllib.mk -> LINUX path <<<)  
 # Each set of Linux Distros have different paths for where to find their OpenGL libraries reside  
 UBUNTU_PKG_NAME = "nvidia-340"  
 UBUNTU = $(shell echo $(DISTRO) | grep -i ubuntu >/dev/null 2>&1; echo $$?)  
 FEDORA = $(shell echo $(DISTRO) | grep -i rfremix >/dev/null 2>&1; echo $$?)  
 RHEL = $(shell echo $(DISTRO) | grep -i red >/dev/null 2>&1; echo $$?)  
 CENTOS = $(shell echo $(DISTRO) | grep -i centos >/dev/null 2>&1; echo $$?)  
 SUSE = $(shell echo $(DISTRO) | grep -i suse >/dev/null 2>&1; echo $$?)

Еще раз ага!

Смотрим как определяется тип дистрибутива.

Это команда

awk '/ID/' /etc/*-release | sed 's/ID=//' | grep -v "VERSION" | grep -v "ID" | grep -v "DISTRIB"

А у меня она выдает rfremix. А значит такого таргета ни разу нет в списке. :)
Ну что делать-то? меняем fedora на rfremix в findgllib.mk и радуемся.
Собралось! Но…

8 - А что у нас с библиотеками?

$ ./fluidsGL  
./fluidsGL: error while loading shared libraries: libcufft.so.6.5: cannot open shared object file: No such file or directory

Еще раз. У нас для ldconfig не заданы пути, где лежит libcufft.so.6.5

$ find /usr/ -name libcufft.so.6.5  
/usr/local/cuda-6.5/targets/x86_64-linux/lib/libcufft.so.6.5
$ grep -R /usr/local/cuda-6.5/targets/x86_64-linux/lib /etc/ld.so.conf.d/

Пусто.

# echo "/usr/local/cuda-6.5/targets/x86_64-linux/lib" > /etc/ld.so.conf.d/cuda-lib64.conf  
# ldconfig

9 - Наслаждаемся

fluidsGL

Firefox+Linux+MiddleButton

Категории: HowTo

Есть такая особенность у сборки Firefox в Linux (как под виндой - не знаю) - если нажать среднюю кнопку (не на ссылке, а просто в пределах страницы), то в адресную строку будет вставлено содержимое буфера обмена.

Очень и очень раздражающая фича.

Но отключается она очень просто.

  1. Идем в about:config.
  2. Находим настройку middlemouse.contentLoadURL и выставляем ее в false (или создаем - это параметр “логическое”)

Вопреки советам в сети за подобное поведение параметр middlemouse.paste не отвечает.

PostgreSQL: insert on duplicate key

Категории: Найдено в сети Разработка

Да-да. Постгрес не умеет делать

insert * on duplicate key ...

Но это легко эмулируется последовательностью запросов.

UPDATE table SET field='C', field2='Z' WHERE id=3;  
INSERT INTO table (id, field, field2)  
       SELECT 3, 'C', 'Z'  
       WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3);

Интересное в сети

Категории: Найдено в сети

Алгоритмы

JavaScript

Ruby

Python

Инструменты

Linux

Всякое