Tuesday, June 14, 2011

Unicode Collation Algorithm для чайников

Зачем вообще что-то сортировать? Зачем сортировать строки Unicode?
Коротко: это позволяет осуществлять и человеку, и машине поиск данных проще.
Этому вопросу посвящен целый раздел в стандарте Unicode (смотрите TR10).
Коротко, каждому символу назначаем свой "вес". Группы определённых символов могут иметь вес, отличный от их веса по отдельности.
Вес необходимо брать из DUCET (табличка, файлик, сделано до нас).
Весовой элемент состоит из четырёх частей: уровней (level). Первый - основной (base), второй - определяет, что это за символ (или часть). Черточки, кружочки, точечки над, под (и так далее) имеют свой второй уровень 2. Для "обычного" текста L2 предсказуем.
L3, case level, или регистр, предсказуем тоже: для "обычного" текста там двойки.
L4 это "особый" уровень - для тонкой сортировки. Обычно это просто код символа. Почему особый? Потому что в реальной жизни ограничиваются первыми тремя (и в примерах на сайте Unicode их тоже только три).

Строка, представленная в виде массива весов называется sort array, но этот массив только промежуточное звено для достижения нашей цели.

Уровни, веса... А как сортировать все равно непонятно. Веса нужны, чтобы представить строку в виде двоичной последовательности, которую удобно сравнивать стандартными средствами языка программирования. Для этого образуем двоичную последовательность: возьмем все первые веса (отбросим веса с весом 0), также возьмем все вторые, третьи и соединим их в одно целое, разделив нулями. Теперь получившуюся последовательность, которая называется sort key, можно сравнивать.

Правда, всё сложнее в реальном мире.

Tuesday, May 31, 2011

После обновления .gitignore

git add .
git commit -m "Save files"
git rm -r --cached .
git add .
git commit -m ".gitignore is now working"

Monday, May 9, 2011

Asus-at3iont-i-deluxe, ubuntu 11.04, xbmc

Asus-at3iont-i-deluxe - хорошая материнка с ION и Atom, пультом и блоком питания.
Пробуем помучать. Ставим ubuntu с флешки, сразу с кабелем hdmi в телевизоре.

XBMC


Ставим зависимости (тут могутбыть не все, и другие версии). Нижняя часть списка подобрана ручками.
sudo apt-get install -y autotools-dev autoconf automake unzip libboost-dev libmad0-dev libjpeg-dev libsamplerate-dev libogg-dev libvorbis-dev libvorbisenc2 libfreetype6-dev libfontconfig-dev libbz2-dev libfribidi-dev libsqlite3-dev libmysqlclient-dev libasound-dev libpng-dev libpcre3-dev liblzo2-dev libcdio-dev libsdl-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libenca-dev libjasper-dev libxt-dev libxtst-dev libxmu-dev libxinerama-dev libcurl3 libcurl4-gnutls-dev libdbus-1-dev libhal-storage-dev libhal-dev libpulse-dev libavahi-common-dev libavahi-client-dev libxrandr-dev libavcodec-dev libavformat-dev libavutil-dev libpostproc-dev libswscale-dev liba52-dev libdts-dev libfaad-dev libmp4v2-dev libmpeg2-4-dev libass-dev libflac-dev libwavpack-dev python-dev gawk gperf libcwiid1-dev libbluetooth-dev zlib1g-dev libmms-dev libsmbclient-dev libtiff4-dev libiso9660-dev libssl-dev libmicrohttpd-dev libmodplug-dev libssh-dev gettext cvs libtool libvdpau-dev libva-dev libbluray-dev libdca-dev librtmp-dev gettext-dev libdvdcss-dev libdts-dev libdvdcss yasm autopoint curl libgl1-mesa-dev libgl1-mesa-dri libgl1-mesa-glx libglade2-0 libglade2.0-cil libglademm-2.4-1c2a libgladeui-1-11 libglew1.5 libglew1.5-dev libglewmx1.5 libglib2.0-0 libglib2.0-bin libglib2.0-cil libglib2.0-data libglib2.0-dev libglibmm-2.4-1c2a libglu1-mesa libglu1-mesa-dev

Гитхабим xbmc, компилим, ждем :) Может даже соберут пакетик когда-нибудь в репазиторий.

Настраиваем пульт.


Установку расписали тут http://extmemory.blogspot.com/2011/03/ubuntu-asus-at3iont-i-deluxe.html
Вот только будут крашиться модули ядра lirc. И в новом релизе xbmc другие клавиши. Поэтому, гитхабим https://github.com/freeakk/asus-at3iont-i-deluxe
Ставим пакетик, меняем файлы в /usr/src/asus-at3iont-i-deluxe-1.0.1, добавляем глючные модули в blacklist.

Тут маппинг кнопочек.
/usr/src/asus-at3iont-i-deluxe-1.0.1/drivers/hid-philips-asus/mappings.h
Коды брать отсюда /usr/src/linux-headers-2.6.38-8-generic/include/linux/input.h
В итоге:
sudo vim /usr/src/asus-at3iont-i-deluxe-1.0.1/drivers/hid-philips-asus/mappings.h /usr/src/linux-headers-2.6.38-8-generic/include/linux/input.h -o



Wi-fi (n, но один диапазон), блютуз работает из коробки.
Делаем баночную антенну, ловим сигнал с роутера с помощью wavemon.


Автозапуск


Мой /usr/share/xsessions/xbmc.desktop
[Desktop Entry]
Name=XBMC
Comment=This session will start XBMC Media Center
Exec=xbmc-standalone
TryExec=xbmc-standalone
Type=Application


Делаем по умолчанию:
sudo /usr/lib/gdm/gdm-set-default-session -d xbmc

Мой /etc/gdm/custom.conf

[daemon]
AutomaticLoginEnable=true
AutomaticLogin=user
TimedLoginEnable=false
TimedLogin=user
TimedLoginDelay=10
DefaultSession=xbmc
SessionDesktopDir=/usr/share/xsessions/

Последняя строчка в дефолтной установке отсутствует, и зря.

Настраиваем ssd


Мой fstab:
proc /proc proc nodev,noexec,nosuid 0 0
# / was on /dev/sda2 during installation
UUID=e2bfcf35-a528-41bc-9e8b-d334d23daf8a / btrfs ssd,noatime,subvol=@ 0 1
# /boot was on /dev/sda1 during installation
UUID=bdece8b8-0803-452e-a0dd-8d7e0aa94192 /boot ext2 defaults 0 2
# /home was on /dev/sda2 during installation
UUID=e2bfcf35-a528-41bc-9e8b-d334d23daf8a /home btrfs ssd,noatime,subvol=@home 0 2
tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/tmp tmpfs defaults 0 0
tmpfs /var/log tmpfs defaults 0 0
tmpfs /var/lock tmpfs defaults 0 0
tmpfs /home/user/.xbmc/temp tmpfs defaults 0 0

UUID=2466fcd6-98bd-4f59-bf8f-3b9e4e5e0346 /media/extralarge ext4 defaults

Wine64

Можно скомпилить так:
cd $HOME
mkdir wine64
cd wine64
../wine-git/configure --enable-win64 CC=/usr/local/gcc/bin/gcc
make > make.log 2>&1
cd ..
mkdir wine32
cd wine32
../wine-git/configure --with-wine64=../wine64
make > make.log 2>&1


Непонятно как работает, но надо думать, ибо связка Portal 2 + wine + fgrlx "нормально" работает только c WoW64. А всё почему?
С ~/winetricks.sh glsl-disable вылетает при загрузке второго и выше уровней, при ~/winetricks.sh glsl-enable вылетает при создании порталов. Видимо, у них там ifы в коде.

PS: счастье не подтвердилось - вылетает и с wine64 при glsl-enable.