Auto switch to A2DP bluetooth device when connected in Ubuntu

Add to /etc/pulse/default.pa to automatically switch pulseaudio sink to Bluez:

 .ifexists module-bluetooth-discover.so
 load-module module-bluetooth-discover
 load-module module-switch-on-connect  # Add this
 .endif

Modify /etc/bluetooth/audio.conf to auto select A2DP profile (instead of HSP/HFP):

 [General]
 Disable=Headset # Add this

Apply changes:

sudo pulseaudio -k # Restarts pulseaudio
sudo restart --system bluetooth # Restarts BT

Vala 0.18.1 hello world in Ubuntu 12.10

After this tutorial you’ll learn how to compile your first vala GTK program
Screenshot from 2013-01-19 00:22:05

Prepare your system:

# add the GPG key for the vala team PPA
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 7DAAC99C
# add the PPA to your Software Sources
sudo add-apt-repository ppa:vala-team
# update the package lists
sudo apt-get update
# install vala
sudo apt-get install valac-0.18 vala-0.18-doc valac-0.18-dbg
valac --version

# optionally install other PPA packages
# libgee - collections library
sudo apt-get install libgee-dev 

# install gtk-dev
sudo apt-get install libgtk-3-dev

Save program text to hello.vala file:

using Gtk;
 
int main (string[] args) {
    Gtk.init(ref args);
 
    var window = new Window();
    window.title = "Hello, World!";
    window.border_width = 10;
    window.window_position = WindowPosition.CENTER;
    window.set_default_size(350, 70);
    window.destroy.connect(Gtk.main_quit);
 
    var label = new Label("Hello, World!");
 
    window.add(label);
    window.show_all();
 
    Gtk.main();
    return 0;
}

Compile and launch the prog:

valac --pkg gtk+-3.0 hello.vala && ./hello

Streaming audio from Ubuntu Linux to a DLNA player without Rygel

Recently, I became the proud owner of Onkyo TX-NR515 receiver. This device is DLNA MediaRenderer as upnp-inspector says. The A/V receiver is from the 2012 devices family (TX-NR414/TX-NR515/TX-NR616).

Streaming the sound from PC to my DLNA device over wlan was a tough task, but I managed to solve it the way I’ll describe below. The main idea is to pass the alsa/pulseaudio output stream over LAN to DLNA device. There are 2 ways of doing it: with DLNA server or without.

Continue reading

OSQA install experience

OSQA is an opensource Q/A engine. In this article I’ll describe the way I installed it on my VPS.

I like Debian/Ubuntu OS. Debian lacks new packages, that’s why I chose Ubuntu 12.04 LTS.

Act 1. Lighttpd

I had Lighttpd installed on my machine, so firstly I tried to install OSQA on Lighttpd. Googling around I found that running OSQA in fcgi mode is not OK (when you have a VPS). WSGI is the right way. Unfortunately, Lighttpd’s WSGI is very unstable, experimental and unsupported. That’s why I decided to move to nginx.

Act 2. nginx

Django projects are great with pure WSGI servers. So I decided to install nginx with WSGI server (uWSGI, GUnicorn, etc.). Spending 3 days, writing LOTS of site blocks, tuning nginx, messing around with various WSGI servers, I finally switched to Apache.

Act 3. Apache

My Apache/Ubuntu way was as described in article on meta.osqa.com. After doing the steps I received 500 errors as well as this:

Middleware module "django.middleware.csrf" does not 
define a "CsrfResponseMiddleware" class

OSQA is not compatible with Django 1.4.0, but works OK in 1.3.1. Check your version:

python
>>> import django
>>> django.VERSION

If necessary install 1.3.1:

sudo easy_install django==1.3.1

P.S.

In my spare time I’ll continue playing with nginx + uWSGI (or gunicorn), I think it’s the best way of running OSQA.

Установка Windows 7 через USB-флешку (UNetbootin)

1. Для установки Windows 7 с флешки нужно изначально отформатировать её в NTFS. Флешки, отформатированные в FAT32 не подойдут.
2. Скачать Unetbootin версии 494 (или 490). В последних версиях Unetbootin убрали галочку “показать все устройства”. Без неё вам Unetbootin не покажет устройства с NTFS. Также для Linux необходимо добавить права на выполнение (в Windows нужно просто распаковать архив):

chmod 755 unetbootin-linux-494
./unetbootin-linux-494


3. Указать путь к образу ISO
4. Дождаться (минут 15) пока система скопирует на флешку файлы и сделает её загрузочной

5. Вставить флешку в нужный компьютер, загрузиться с неё.

Credits:
http://www.addictivetips.com/windows-tips/install-windows-7-from-usb-drive-requires-2-simple-steps/
http://www.webupd8.org/2010/10/create-bootable-windows-7-usb-drive.html

Скачивание с RuTube в Ubuntu Linux

Ubuntu Linux:

sudo apt-get install rtmpdump

Rutube отдаёт ссылки на видеоролики 4-мя способами (по состоянию на 8 ноября 2013 г.):

  1. Нешифрованное видео по протоколу RTMP. Для закачки используется rtmpdump (версия не ниже 2.4).
  2. Шифрованное видео по RTMP. Хоть и скачается rtmpdump’ом, но воспроизвести его не удастся. Решение для этого типа ссылок не найдено.
  3. Нешифрованное видео по технологии HTTP Dynamic Streaming. Для закачки используется скрипт AdobeHDS.php
  4. Нешифрованное видео методом HTTP Live Streaming. Для закачки используется VLC/ffmpeg.

Сначала нужно определить, какой тип отдачи используется для требуемого видеоролика, на момент обновления статьи чаще всего это способы 3 и 4 (как минимум, для российских пользователей).

Для этого берём любую ссылку на нужное видео с его полным или предназначенным для встраивания идентификатором, это может быть ссылка вида:

  1. http://rutube.ru/video/51c001891c1147fa53787c8496c0d8bf/
  2. http://rutube.ru/video/embed/6641938
  3. http://rutube.ru/[accounts/login/?next=/]video/private/2cc0885902cac3c8f9f88849e115db15/?p=lwTcQ6Z0PUTg3AB7lDvGqg

Для ссылки под номером 3 важно не терять параметр “p”, стоящий в конце.

Открываем файл с информацией о видео http://rutube.ru/api/play/trackinfo/<VIDEO_ID>/?format=xml[&p=blablabla]:

http://rutube.ru/video/51c001891c1147fa53787c8496c0d8bf/
=> http://rutube.ru/api/play/trackinfo/51c001891c1147fa53787c8496c0d8bf/?format=xml
http://rutube.ru/video/embed/6641938
=> http://rutube.ru/api/play/trackinfo/6641938/?format=xml
http://rutube.ru/[accounts/login/?next=/]video/private/2cc0885902cac3c8f9f88849e115db15/?p=lwTcQ6Z0PUTg3AB7lDvGqg
=> http://rutube.ru/api/play/trackinfo/2cc0885902cac3c8f9f88849e115db15/?format=xml&p=lwTcQ6Z0PUTg3AB7lDvGqg

В этом файле нужны адреса из тега <videoBalancer>:
<default>http://bl.rutube.ru/5bc45bc80ad9f9597a8e1de3e0cf69f6.f4m — внутри этого файла будут ссылки для закачки по RTMP/HDS.
<m3u8>http://bl.rutube.ru/5bc45bc80ad9f9597a8e1de3e0cf69f6.m3u8 — для HLS.

RTMP/HDS

<default>http://bl.rutube.ru/5bc45bc80ad9f9597a8e1de3e0cf69f6.f4m
Это файл-манифест. Открыв его, смотрим на теги <baseURL> и <media>. Определяем тип отдачи по их содержимому:

  • RTMP, если baseURL == rtmp://video-N-N.rutube.ru/bla-bla-bla, а атрибут url тега media содержит расширение .mp4 в тексте ссылки.
  • Шифрованное видео по RTMP, если тот же атрибут url содержит расширение .f4f. Скачанное видео не воспроизводится.
  • Нешифрованное видео по HDS, если baseURL == http://video-N-N.rutube.ru, тег(и) media указывает на манифест (ссылка с расширением .f4m) либо сразу на mp4-файл.

Определившись со способом отдачи, приступаем к закачке.

RTMP
Тег <baseURL> содержит имя хоста, порт и переменную “app”. Атрибут url тега <media> содержит путь к потоку (playpath):
rtmp://video-N-N.rutube.ru(:1935)/<app>/mp4:volNN/movies/.*
|____________host___________|__app__|_____playpath____|

где переменная app может принимать следующие значения:

  1. vod/
  2. rutube/
  3. rutube_vod_[0-9]/
  4. rutube_vod_[0-9]/_definst_/

Из параметров, предлагаемых дампером (rtmpdump –help), нам нужны следующие:

--rtmp           URL (напр. rtmp://host[:port]/)
--app            Переменная app.
--playpath       Перезаписывает playpath, указанный в --rtmp
--swfUrl         Ссылка на swf-плеер.
--flv            Название конечного FLV-файла.
--live           Для rtmp-ссылок, переменная app которых равна "vod/".

Примеры закачки ссылок:
rtmp://video-1-12.rutube.ru:1935/rutube_vod_2/_definst_/mp4:vol12/movies/b5/e0/b5e08ad46a65d700dd0da2f7b40e2fc0.mp4?e=1288635285&s=740fa844fc6687ac03681a0eb72d003e

sh/cmd:

rtmpdump --rtmp "rtmp://video-1-12.rutube.ru:1935/"
 --app "rutube_vod_2/_definst_/"
 --swfUrl "http://rutube.ru/player.swf"
 --playpath "mp4:vol12/movies/b5/e0/b5e08ad46a65d700dd0da2f7b40e2fc0.mp4?e=1288635285&s=740fa844fc6687ac03681a0eb72d003e"
 --flv "output_video.flv"

rtmp://video-102-1.rutube.ru:1935/vod/mp4:rutube/vol41/movies/a2/05/a205ff4b2073c18522253585224f7a7c.mp4?e=1287342905&s=813f44d26fe97cd7ef670cb8d44e36e2

sh/cmd:

rtmpdump --rtmp "rtmp://video-1-12.rutube.ru:1935/"
 --app "vod/"
 --swfUrl "http://rutube.ru/player.swf"
 --playpath "mp4:rutube/vol41/movies/a2/05/a205ff4b2073c18522253585224f7a7c.mp4?e=128734&s=813f44d26fe97cd7ef670cb8d4"
 --flv "output_video.flv"
 --live

Не забудьте про параметр –live, используемый при переменной app равной “vod/”. Иначе видео будет качаться в размере, в два-три раза превышающий указанный на сайте. Также –swfUrl, он должен быть равен адресу флеш-плеера: “http://rutube.ru/player.swf”.

HDS
С HDS-ссылками проще, достаточно ссылки на f4m-файл:

sh/cmd:

php.exe AdobeHDS.php --manifest "http://bl.rutube.ru/5bc45bc80ad9f9597a8e1de3e0cf69f6.f4m"
 --outfile "output_video.mp4"

HLS

<m3u8>http://bl.rutube.ru/5bc45bc80ad9f9597a8e1de3e0cf69f6.m3u8

Для закачки можно использовать ffmpeg:

sh/cmd:

ffmpeg -i "http://bl.rutube.ru/5bc45bc80ad9f9597a8e1de3e0cf69f6.m3u8" video_out.ts

 

Credits: tradiz.org

Yota Samsung SWC-U200 in Ubuntu Linux

Установка предельно проста (проводил на 11.10):

git clone https://github.com/ago/madwimax.git
cd madwimax
autoreconf --install
sudo apt-get install libusb-1.0-0-dev liblua5.1-0-dev asciidoc docbook2x
./configure
make
sudo make install

Втыкаем модем, проверяем:

sudo ifconfig
#должен появиться wimax0 или по типу того

Заходим на Yota.ru, жмём Личный кабинет, там “привязать устройство” и всё! Покупка-продажа модема весьма проста, не надо никаких симок ни кодов. Нужен просто модем. Больше ничего. Никаких договоров. Удобно. Единственное – при привязке спрашивают как зовут, где живёшь, №паспорта. В остальном хорошо! Посмотрим, что за качество связи у Yota, на что жалуются чуть более чем 100% моих друзей 🙂

Speedtest:
speedtest yota

rTorrent with ruTorrent GUI from GIT on Ubuntu Linux 12.04

Bash script:

sudo apt-get --purge remove libxmlrpc* libtorrent* rtorrent
sudo apt-get install build-essential checkinstall libcurl4-openssl-dev libncurses5-dev libncursesw5-dev libsigc++-2.0-dev libtool git autoconf automake libcppunit-dev subversion

# Check that your g++ is 4.7+ (if so, skip this block)
g++ --version
sudo add-apt-repository ppa:ubuntu-toolchain-r/test 
sudo apt-get update
sudo apt-get install gcc-4.7 g++-4.7 
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7
sudo update-alternatives --config gcc

#fresh xmlrpc-c lib install
svn co https://svn.code.sf.net/p/xmlrpc-c/code/advanced xmlrpc-c
cd xmlrpc-c
./configure --prefix=/usr
make
#change version from "C" to smth else while installing the package
sudo checkinstall -D
cd ..

#libtorrent install
git clone git://github.com/rakshasa/libtorrent.git
cd libtorrent
./autogen.sh
./configure --prefix=/usr --with-posix-fallocate
make
sudo checkinstall -D
cd ..

#rtorrent install
git clone git://github.com/rakshasa/rtorrent.git
cd rtorrent
./autogen.sh
./configure --prefix=/usr --with-xmlrpc-c
make
sudo checkinstall -D

#rutorrent web-GUI
cd /var/www/
sudo svn co http://rutorrent.googlecode.com/svn/trunk/rutorrent
sudo chown -R  www-data:www-data /var/www/
sudo chmod -R  777 /var/www/rutorrent/share

#update rutorrent
cd /var/www/rutorrent
sudo svn up

#autolaunch on startup
sudo apt-get install screen
echo "screen -fa -d -m rtorrent" >> /etc/rc.local

# nginx
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
sudo apt-get install nginx

Last revised: Nov 22, 2014 (script is originally written for Ubuntu 12.04)

Выбор самого быстрого зеркала репозиториев через консоль в Ubuntu Linux

С помощью GUI легко выбирать самый быстрый сервер репозиториев для загрузки обновлений. Но как сделать это через командную строку? Очень просто! apt поддерживает директиву mirror, с помощью которой система может выбирать наиболее лучшие зеркала в зависимости от вашего местоположения.

Всё, что нужно – это добавить следующие строки вверху файла

/etc/apt/sources.list
deb mirror://mirrors.ubuntu.com/mirrors.txt oneiric main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt oneiric-updates main restricted universe multiverse

Пользователи Lucid (10.04), Maverick (10.10), Natty (11.04) могут поменять слово oneiric в командах на имя своего дистрибутива.