26 апреля 2008 г.

Ubuntu 8.04 впечатления

Буду добавлять по мере того, как буду сталкиваться с проблемами.

Клиент PSI:
Обновленный клиент не нашел SSL плагин, переустановка либы qca-tls не помогла. Поэтому апт-ом удалил с машины PSI, и поставил с исходников, которые можно скачать с официального сайта psi-im.org
$ sudo apt-get autoremove qca-tls psi


Больше ничего не замечено.

9 апреля 2008 г.

Запуск ssh-agent при старте системы

Я, например, храню свои RSA/DSA ключи в ssh-agent.
При запуске bash-а, создаеться свое окружение, и чтоб не запускать постоянно новый ssh-agent, а главное не вводить постоянно пароли к ключам (я использую ключи с паролями), можно просто экспортировать переменные окружения агента.
Небольшой скриптик, который проверяет, не запущен ли сейчас ssh-agent, и если нет... запускает его с нужными ключами:
$ cat start_sshagent.sh
#!/bin/sh

# ssh-agent runner
# RSA/DSA private key files, it`s params script

eval `cat /tmp/ssh_agent.txt`
ret=`ps $SSH_AGENT_PID|grep $SSH_AGENT_PID`
if [ -z $ret ]; then
ssh-agent > /tmp/ssh_agent.txt
eval `cat /tmp/ssh_agent.txt`
ssh-add $1
echo "new ssh-agent"
else
ret=`ssh-add -l | grep $1`
if [ -n $ret ]; then
ssh-add $1
else
echo "yet"
fi
echo "use exist ssh-agent"
fi
echo "ok"

что б он постоянно выполнялся при запуске bash, я его включил в ~/.profile
start_sshagent.sh  /home/`whoami`/.ssh/id_to_remote_ssh_server
eval `cat /tmp/ssh_agent.txt`

7 апреля 2008 г.

Краткий справочник svn (subversion)

svn checkout http://repository.url/svn/name — извлекаем файлы проекта из репозитория, сокращение: svn co;
svn update — получаем обновления из репозитория, сокращение: svn up;
svn update -r rev_num ./file_name — извлекаем ревизию файла с номером rev_num;
svn add ./file_name — добавляем файл в репозиторий (не важно текстовый или бинарный);
svn rename ./old_file_name ./new_file_name — переименовываем файл в репозитории;
svn remove ./file_name — удаляем файл/директорию из репозитория;
svn status — просматриваем локально измененные файлы, сокращение: svn st;
svn status -u — просматриваем локально измененные и изменившиеся в репозитории файлы, сокращение: svn st -u;
svn diff ./file_name — показывает локальные изменения в файле построчно;
svn diff -r rev_num1:rev_num2 ./file_name — показывает различия между ревизией rev_num1 и rev_num2 файла;
svn revert ./file_name — откатывает локальные изменения файла (выгружает из репозитория последнюю закоммиченную ревизию);
svn revert -R ./ — откатывает все локальные изменения файлов;
svn log ./file_name — список ревизий с комментариями;
svn blame ./file_name — показывает авторов изменений файла построчно, синоним: svn annotate;
svn propset svn:ignore ./file_name . — добавляем файл в список игнорируемых файлов;
svn propset svn:keywords "Id Author Date" ./file_name — установка атрибутов файла;
svn cleanup — снимает блокировки с файлов;
svn unlock http://repository.url/svn/file_name — снять блокировку файла (URL можно узнать с помощью команды svn info ./file_name | grep URL, его и нужно передавать в svn unlock);
svnadmin setlog --bypass-hooks /path/to/repository -r rev_num ./commit_text_file — заменяет текстовое описание коммита, где rev_num — номер ревизии, commit_text_file — путь к файлу, содержащему новый комментарий к коммиту;
svn help command_name — выводит помощь по команде command_name, например, «svn help update»;
svn merge -r rev_to_rollback:rev_good ./file_name — откатываем ревизию номер rev_to_rollback до ревизии rev_good, причем все изменения старше rev_to_rollback сохраняются (Например, у файла есть ревизии 11,12 и 13. Хотим откатить 12-ую ревизию, но так, что бы изменения 13-ой остались в силе. Делаем тогда так: svn merge -r 12:11 ./file_name);
svn copy http://repository.url/svn/name/trunk/ http://repository.url/svn/name/branches/new_branch_name/ — создаем ветку с названием new_branch_name из главной линии разработки;
svn merge --dry-run -r rev_num1:rev_num2 http://repository.url/svn/name/trunk/ — проверяем, что будет изменено при объединении веток, где rev_num1 — номер ревизии, когда ваша ветка была «открыта», или это м.б. номер предыдущего объединения (слияния), rev_num2 — версия главной линии разработки, с которой производим объединение. Необходимо отметить, что все изменения будут применены для директории, в которой выполнялась эта команда;
svn merge -r rev_num1:rev_num2 http://repository.url/svn/name/trunk/ — синхронизирует вашу ветку с главной линией разработки с учетом ревизий: rev_num1 — номер ревизии, когда ваша ветка была «открыта», или это м.б. номер предыдущего объединения (слияния), rev_num2 — версия главной линии разработки, с которой производим объединение. Необходимо отметить, что все изменения будут применены для директории, в которой выполнялась эта команда;
Полную документацию по subversion на русском языке можно посмотреть по ссылке «Управление версиями в subversion». Если Вы нашли ошибку на этой странице, напишите по адресу mail (at) gnuman (dot) ru.
© www.gnuman.ru

Update (22.11.2010):
Статья по работе с бранчами в svn.

4 апреля 2008 г.

Оператор Life:), телефон LG-G1800

Как я подключал мобильный телефон LG-G1800 (оператор 'Life:)')
Ubuntu 7.10 легко определяет мой телефон подключенный через USB-порт:
$ lsusb 
Bus 005 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 002: ID 0458:003a KYE Systems Corp. (Mouse Systems)
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 002: ID 0e8d:0003 #<<<< вот адресс устройства моего телефона
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000

да и появляется устройство "/dev/ttyACM0"
для подключения к оператору 'Life:)' я использую консольную утилиту pppd:
$ sudo pppd call ll

и соответственно два конфига:
/etc/ppp/peers/ll:
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/life-gprs"
defaultroute
/dev/ttyACM0
115200
persist
# You may need these
passive
noipdefault
noproxyarp
ipcp-accept-local
#ipcp-accept-remote
#ipcp-restart 2
#ipcp-max-configure 20
#ipcp-max-failure 20
lcp-echo-failure 0
lcp-echo-interval 0
lcp-max-configure 0
lcp-max-failure 0
asyncmap 0xa0000
novj
nodeflate
nobsdcomp
usepeerdns
user ""
lock

и /etc/chatscripts/life-gprs:
ABORT 'BUSY'
ABORT 'ERROR'
ABORT 'NO ANSWER'
ABORT 'NO CARRIER'
ABORT 'NO DIAL'
'' AT
OK AT+CGDCONT=1,"IP","internet"
OK ATD*99***1#
CONNECT \d\c

Русские шрифты в wine

Коряво отображались русские символы под wine-ом.
$wine --version
wine-0.9.46

Точнее даже в самом Lotus Notes 7.0 шрифты отображались коряво (кстате установка его происходила из под винды, потом просто скопировал из 'C:\Program Files\lotus' в папку 'Program Files' wine-а). Русские шрифты подправил простой символической ссылкой папки 'c:\windows\fonts' в папку '$HOME\.wine\drive_c\windows\fonts'.

3 апреля 2008 г.

Конвертация .ape/.flac (+.cue) в .mp3/.ogg формат

Для конвертации в Ubuntu нам потребуетются библиотеки:
mac - конвертер с/в ape-формат (Monkey Audio)
  #: wget http://members.iinet.net.au/~aidanjm/mac-3.99-u4_b3-1_i386.deb
#: dpkg -i mac-3.99-u4_b3-1_i386.deb
lame - декодер mp3
 $: sudo apt-get install lame

mp3splt - обрезка mp3/ogg файлов
 $: sudo apt-get install mp3splt

oggenc - декодер ogg
 $: sudo apt-get install vorbis-tools


сам скрипт: конверта
<div class="commenthidden" id="SCRIPT-CUEAPE">
<table width="95%" cellpadding="0" cellspacing="0" border="0"><tr><td class="code-outline"><pre class="displaycode">#!/bin/bash
 
#cueape 0.1
#This script is intended to convert ape or flac + cue files to
#ogg vorbis or mp3 files, setting the tags to the correct value,
#obtained from the cue file.
#REQUIREMENTS:
# -Oggenc installed (it comes with vorbis-tools) if you want to encode into Ogg Vorbis.
# -lame installed if you want to encode into mp3
# -mac to decode ape files (Monkey's Audio)
# -flac to decode flac files.
 
#IF YOU FIND A BUG OR HAVE A SUGGESTION COMMENTO OR SIMPLY WANT TO CONTACT ME PLEASE MAIL ME TO
#rafadev_*@gmail.com REMOVING THE "_*"
#This is done to prevent spamming
 
#Copyright (C) 2006 Rafael Ponieman - Buenos Aires, Argentina
 
#This program is free software; you can redistribute it and/or
#modify it under the terms of the GNU General Public License
#as published by the Free Software Foundation; either version 2
#of the License, or (at your option) any later version.
 
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU General Public License for more details.
 
#You should have received a copy of the GNU General Public License
#along with this program; if not, write to the Free Software
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 
 
#scripted by deX
 
 
case "$1" in
*.[aA][pP][eE] | *[fF][lL][aA][cC] )
if [ ! -f "$1" ] ; then
echo "Input file $1 doesn't exist"
exit 1
fi
if [ ! -f "$2" ]; then
echo "Cue input file $2 doesn't exist"
exit 1
fi ;;
* )
echo "Error: invalid input parameters"
exit ;;
esac
 
#Testing parameters
if [ "$3" != "-m" ] && [ "$3" != "-o" ] ; then
echo -en "\033[1;31mInvalid parameters\n"
echo -en "\033[1;37m"
echo -en "Usage: cueape [input ape file] [input cue file] [parameters]\nParameters can be: -m for mp3 encoding or -o for ogg encoding.\n"
exit 1
fi
 
#Need help with this one, coudn't solve it. I need to know how to check if a
#program actually exists and is accesible
#Checking for mac
#[ -f $(which 'maca' >> /dev/null) ] || {
# echo -en "\033[1;31mYou must have mac in your PATH.\033[1;37m\nPlease install Monkey's Audio Codec\nYou can get it from http://sourceforge.net/projects/mac-port/\n"
#}
 
 
#Saving the position so as to return afterwards
olddir="$(pwd)"
 
#Going to target directory
cd "$(dirname "$1")"
 
#Checking for the output folder. If it's not there I create it
[ ! -d "Output" ] && mkdir -p "Output"
cp "$2" "Output/"
 
#Decompress
echo -en "\nCueape 0.1\n\n"
echo -en "\033[1;32mStarting conversion\n"
 
#Checking filetype by extension and decompressing
tmp="$(basename "$1")"
tmp="${tmp##*.}"
 
case "$tmp" in
[fF][lL][aA][cC] )
echo -en "\033[1;32mDecompressing FLAC file\n\n"
echo -en "\033[1;37m"
tm="$(basename "$1")"
tm="${tm%.[fF][lL][aA][cC]}"
out="$(flac "-d" "$1" -o "Output/${tm}.wav" )"
;;
[aA][pP][eE] )
echo -en "\033[1;32mDecompressing APE file\n\n"
echo -en "\033[1;37m"
tm="$(basename "$1")"
tm="${tm%.[aA][pP][eE]}"
out="$(mac "$1" "Output/${tm}.wav" "-d")"
;;
* )
echo "Error: line 99"
esac
 
cd "Output"
echo -en "\033[1;32m\nDecompression finished\n"
echo -en "\033[1;32mStarting reencoding\n\n"
echo -en "\033[1;37m"
if [ "$3" = "-o" ] ; then
#Calling oggenc. Saving output for future checking
out="$(oggenc -q 6 -o "$tm.ogg" "$tm.wav")"
echo -en "\033[1;32m\nReencoding finished\n"
echo -en "\033[1;32mSplitting\n\n"
echo -en "\033[1;37m"
out="$(mp3splt -c "$(basename "$2")" -o "@n+-+@t" "$tm.ogg")"
else
#Calling lame. Saving output for future checking
out="
$(lame --preset insane "$tm.wav" "$tm.mp3")"
echo -en "
\033[1;32m\nReencoding finished\n"
echo -en "
\033[1;32mSplitting\n\n"
echo -en "
\033[1;37m"
#Using framemode becaus this settings are for VBR
out="
$(mp3splt -f -c "$(basename "$2")" -o "@n+-+@t" "$tm.mp3")"
fi
cd "
$oldir"
echo -en "
\033[1;32m\nProcessing finished successfully\n"
echo -en "
\033[1;37m"
exit 0



Конвертирование тегов mp3 из cp1251 в UTF-8
find . -name "*.mp3" -print0 | xargs -0 mid3iconv -e CP1251 -d > ~/convert.log