среда, 23 июля 2014 г.

Шпаргалка: как записать установочный образ FreeBSD(или linux) на usb флешку в OS X и FreeBSD-like системе

Это краткое пошаговое руководство для записи установочного образа FreeBSD из под
Apple Macintosh и других BSD-подобных систем.

1. Скачать подходящий образ http://www.freebsd.org/ru/where.html  (щелкнуть на "ISO" напротив нужной архитектуры и выбрать файл, в названии которого явно присутствует "-memstick.img").

2. Запустить терминал.

3. Выполнить команду:
df -h
и найти путь к файлу устройства и точку монтирования USB флешки ( например файл устройства /dev/disk1s1 ,  точка монтирования /Volumes/MyFlashDrive)

4. Отмонтировать флешку:
sudo diskutil umount /dev/disk1s1
 Eсли все прошло нормально в консоли появится надпись: "Volume MyFlashDrive on disk1s1 unmounted".

5. Закатать образ на флешку:
sudo dd if=~/Downloads/FreeBSD-10.0-RELEASE-amd64-memstick.img of=/dev/disk1s1 bs=10240

Посмотреть текущий прогресс можно нажав Ctrl+t .

Что касается linux дистрибутивов то операции аналогичны , но перед записью на флешку образ нужно конвертировать:
hdiutil convert -format UDRW -o ~/path/to/target.img ~/path/to/ubuntu.iso
Ссылки по теме:
http://www.ubuntu.com/download/desktop/create-a-usb-stick-on-mac-osx

воскресенье, 25 августа 2013 г.

Настройка смены полярности вместо callprogres и busydetect на аналоговых линиях.

Уже довольно давно передо мной стояла задача реализовать автоматизированную систему оповещения на базе asterisk. Для нормальной работы такой системы необходимы определенные условия. Одним из таких условий является однозначное определение факта подъема трубки на принимающей стороне. На аналоговых линиях астериск использует несколько алгоритмов для определения состояния звонка. Настройка callprogres и busydetect для интерфейса dahdi включает алгоритм определения звуковых сигнальных паттернов на линии для определения состояния звонка, этот метод очень популярен, практически все применяют именно его. Но, к сожалению, он не позволяет однозначно определить ровным счетом ничего, то есть нет никакой гарантии, что этот алгоритм не распознает определенную сигнализацию в определенных условиях, либо распознает ее слишком поздно, либо распознает ее там где ее не было. Еще одним недостатком этого подхода является необходимость точного описания паттернов для их обнаружения. Несмотря на то, что в России есть определенные стандарты сигнализации, не всегда операторы в точности их соблюдают, в первую очередь, эти сигналы предназначены для людей, а люди зачастую не предают значения небольшим отличиям в звуке длинного гудка ответа станции или его продолжительности.
Метод определения смены полярности разработан как раз для того, чтобы однозначно обозначить моменты, когда отвечающая сторона подняла трубку и положила ее. Я не буду здесь подробно описывать устройство этого типа сигнализации, информации на эту тему достаточно много в интернете, я сосредоточусь на описании настройки астериска для работы по этой системе и опишу некоторые нюансы.
Предположим в нашем распоряжении имеется сервер с установленным и работающим asterisk(версия 1.8) и настроенным интерфейсом dahdi(версия 2.4), одна, а возможно и несколько аналоговых плат с fxo портами соединенными с оператором. Первым делом необходимо выяснить поддерживает ли ваш оператор эту сигнализацию, а так же добиться от него ее включения на линии.
Проверить видит ли карта переполюсовку можно включив дебуг драйвера dahdi.
echo 1 > /sys/module/dahdi/parameters/debug
После этого действия можно совершить звонок и посмотреть dmesg.
[138842.534627] wctdm24xxp 0000:05:08.0: 4329602929 Polarity reversed (1 -> -1)
[138941.140486] wctdm24xxp 0000:05:08.0: 4329627581 Polarity reversed (-1 -> 1)
Для того, чтобы астериск начал реагировать на смену полярности, необходимо добавить следующие строчки в файл настройки каналов dahdi - chan_dahdi.conf :
answeronpolarityswitch = yes // определяем поднятие трубки при смене полряности
hanguponpolarityswitch = yes // определяем что трубку положили при смене полярности
И тут начинается самое интересное, дело в том, что настройки callprogres и busydetect начинают конфликтовать с настройками answeronpolarityswitch и hanguponpolarityswitch , то есть астериск начинает производить детект дозвона, поднятия трубки и разрыва соединения по всем разрешенным признакам и скорее всего 99% соединений будут разрываться сразу после поднятия трубки на другой стороне. Это означает, что пообщаться по телефону мы сможем только случайно :). Строки с настройками callprogres и busydetect необходимо закомментировать, а еще лучше явно указать запрет использования этих алгоритмов:
callprogres=no
busydetect=no
После всех выше перечисленных действий необходимо выгрузить и загрузить модуль chan_dahdi.so, для этого в консоли астериска набираем:
module unload chan_dahdi.so
module load chan_dahdi.so
К сожалению, использовать команду "module reload chan_dahdi.so" нельзя?! Хоть это и кажется странным и не логичным. "dahdi restart"?!
На сегодняшний день, смена полярности является единственным надежным методом сигнализации поднятия трубки и разрыва соединения для аналоговых линий. Так-же стоит обратить внимание на настройку сигнализации каналов dahdi, в этом примере я использую signalling=fxs_ks .

среда, 20 марта 2013 г.

StarCraft II: Heart of the Swarm! Лучшее что сделали Blizzard за последние годы.

От StarCraft II: Heart of the Swarm много я не ждал , и был практически уверен, что это очередной тухлый DLC, в котором в сотый раз будет перемалываться, притянутый за уши, сюжет и однообразные задания. Купил я его, можно сказать, по привычке :) и не пожалел.
На этот раз Blizzad действительно перешагнули через свою традиционную занудность и выдали 100% эпига.

Первое, что продавало меня это - массовость. Практически с самого начала появляется возможность управлять 200-юнитовыми армиями разъяренных зергов , и выглядит это просто восхитительно.

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

Третье, сюжет средний, но впервые за всю историю серии, я могу сказать, что действительно понял о чем эта компания и что происходило с ее героями. Весь сюжет логичен и линия его простая и прямая. Авторы все таки смогли донести до меня, кто такие зерги и как устроено их сообщество. Рисуется альтернативная картина эволюции вида. Я даже порой ловил себя на мысли, что подобная форма жизни (с некоторыми оговорками) вполне могла бы  существовать где нибудь в нашей вселенной :) Кстати, думаю людям из гринписа(или тем кто против технократического пути), стоит поиграть. ;)

Четвертое, музыка! Впервые в игре Blizzard я услышал современную музыку, с качественным НОВЫМ звуком, для серии это настоящий прорыв! Были моменты, когда я прямо заслушивался. Я уж и не чаял, что близы вырвутся из своего занудянского ретро-оркестрового формата.

Пятое, дали погонять героя! Королева клинков жжот просто неподецки. Не то, что-бы это что-то прямо таки новое, но доставляет.

Шестое, юниты , они Новые! Они действительно новые и оригинальные. А мутации юнитов добавляют вариативности в геймплей.

Безусловно, все что делает Blizzard, это проекты высшей пробы, но в последнее время, они меня не радовали. Да я убил дьяблу(3), да я прошел Wings of Liberty, да я скрипя зубами докачался до 90 уровня в WoW. И все эти проекты, наверное, стоят, потраченных на них денег. И все они вроде бы хорошие, и качественные, но...
А Heart of the Swarm - это настоящая игра! Остается только надеяться, что этот свежий тренд Blizzard и дальше будет набирать обороты.

суббота, 16 февраля 2013 г.

Steam в Ubuntu 12.04 беглый взгляд

Не так давно Корпорация Valve объявила о выходе Steam для Linux, если честно , я отнесся к этой новости скептически... но все-таки свершилось! Я не принимал участие в закрытом бета- тестировании и не особо следил за развитием проекта, поэтому рассказывать о том, как проект мутировал со старта до официального релиза ,не буду.  Так или иначе, сейчас Steam для Linux доступен всем и у меня ,наконец ,до него "дошли руки". В Ubuntu 12.04 пакет Steam появился в репозитарии.
Итак, что же мы в итоге имеем, на моей машине установлен процессор core i5-2500 , 8 гигов RAM и видеоадаптер NVIDIA 650Ti. К сожалению, не все игры запустились с пол-оборота, были и те, что запускаться "не захотели", в частности Dwarfs!? и Titan Attacks, разбираться чего им не хватает, я не стал :).

Serious Sam 3: BFE и Anomaly Warzone Earch показали себя отлично, все работает четко, лагов нет.

Solar 2, Trine 2 и Bastion слегка притормаживают, самую малость, это практически незаметно. 

Сам Steam работает так же ме-е-едленно, как и под win, в этом плане прогресса у Valve нет :) 

Список игр для linux пока не велик, но и в нем можно найти несколько занимательных вещей. Буду  надеяться, что проект не стухнет.

понедельник, 6 августа 2012 г.

wav to flac

Недавно начали записывать звонки с asterisk сервера... Поступило предложение: для экономии места пережимать их в какой либо формат. Вначале я склонялся к ogg, но потом решил, что сервер потянет и лослесс.
Если честно ,я был приятно удивлен тем, что эту задачу можно решить элементарно:
Пишем скриптик :

#!/bin/bash
cd /var/spoll/... #путь до директории с файлами звонков
find . -name "*.wav" -exec flac --delete-input-file {} \;  -print

Остается забить его в в кронтаб и дело в шляпе.
/etc/crontab
35 5    * * *   root    /root/conver_wav_to_flac | logger -i -t conver_wav_to_flac

воскресенье, 22 ноября 2009 г.

Linux: массовый конверт mp3 в ogg (mp32ogg)

Внимание! Прежде чем копипастить отсюда дочитайте до конца.
День начался с огорчений... Меня разбудил телефонный звонок, по телефону мне напомнили, что у меня сегодня запланирована съемка... Времени на сборы оставалось мало, как мог быстро, я оделся и обжигаясь выдул кружку кофе. Сижу жду когда за мной заедут, раздается второй звонок, выясняется, что за мной заедут только в течении получаса :) Ну, что делать? Чтобы не терять времени попусту я решил запустить скрипт конвертирования mp3 в ogg который нашел еще вчера. Пока то се, думаю, переконвертит мне пару гигабайт. Запустил mp32ogg --help:

mp32ogg v0.11-gentoo-r2
(c) 2000-2002 Nathan Walp
Released without warranty under the terms of the Artistic License

Usage: /home/serpent/bin/mp32ogg [options] dir1 dir2 file1 file2 ...

Options:
--quality=[-1..10] Set Ogg/Vorbis quality level
Defaults to bitrate of original .mp3
--delete Delete files after converting
--rename=format Instead of simply replacing the .mp3 with
.ogg for the output file, produce output
filenames in this format, replacing %a, %t
and %l with artist, title, and album name
for the track
--lowercase Force lowercase filenames when using --rename
--verbose Verbose output
--help Display this help message

Все ясно - как день, и думать нечего. Но проверить в работе все же надо. перешел в какую-то папочку, запустил mp32ogg *.mp3 результат отличный, папка наполнилась конвертированными файлами. Проверил теги, вся информация перенеслась без потерь. Убедился что битрейт источника и назначения одинаковый, как написано в краткой справке: "если битрейт не указан используется битрейт оригинального .mp3 файла", порадовался... попробовал добавить флаг --delete, все отлично, конвертирование закончилось, оригинальные файлы удалены. Ну можно запускать глобальный перекодинг, подумал я, и тут раздался третий звонок, который означал что за мной приехали и мне пора выходить. Из корня моей музыкальной коллекции запустил :

find -iname '*.mp3' -print0 | xargs -0 mp32ogg -v --delete

и уехал.
Вернулся я часа через три, подошел к компу, дернул мышкой, убедился что процесс идет и отправился обедать. После обеда все тоже было как-то не досуг, пока то се прошло еще часа два - три. И вот, когда я наконец добрался до компьютера, уселся и решил послушать свою любимую музыку, в новом формате... случилось это! Вернее случилось то, что я понял, что "это!" случалось с моими файлами все время с момента запуска перекодирования. В папках файлов не было. Результат перекодирования вываливался прямо в корень моей музыкальной коллекции. Я остановил процесс и начал судорожные попытки вычленить файлы по признаку принадлежности к автору или альбому в этом 10 гигабайтовом месиве. В конце концов я убедился, что это займет гораздо больше времени чем я могу себе позволить. Все это, еще раз, напомнило мне о том, что *nix не терпит суеты. Ну пропало, и пропало, надо как то дальше жить. Порысков по поисковикам я не нашел решения, для того как заставить этот скрипт работать с большим деревом каталогов. Встречались какие-то не внятные попытки заставить обходить каталоги с помощью выражений типа : ./ ./* * , и множественных их повторений, но суть подхода я так и не смог понять, а в общем то и сам автор признавался в том, что не вполне понимает как это работает. В итоге я решил написать скрипт на перле, который по моей задумке должен был, производить рекурсивный обход каталогов, и запускать скрипт в каждом из тех где имелись .mp3 файлы. Но вовремя одумался, ведь mp32ogg это и есть скрипт, зачем что то писать и выдумывать, когда можно только чуть-чуть подправить то, что уже написано. Так и сделал, скрипт оказался на удивление просто и внятно написан. Вообще перл, это страшная сила, бывало так, что уже в процессе разработки перестаешь понимать, что ты там 2 часа назад понаписал и как это работает. Может быть по этому править чужие скрипты на перле всегда боязно.

--- ./mp32ogg_original 2009-11-21 23:40:08.000000000 +0400
+++ ./mp32ogg 2009-11-22 01:12:29.000000000 +0400
@@ -6,6 +6,10 @@
#

# ChangeLog
+# 0.11-gentoo-r2-serpent
+# * Bobylev Roman
+# Support for output to same directory
+#
# 0.11-gentoo-r2
# * Mathias Hablützel :
# Support for german umlaut
@@ -297,33 +301,34 @@

$oggoutputfile_escaped = shell_quote($oggoutputfile);
$mp3file_escaped = shell_quote($mp3file);
- $result = system("$mpg123 -q -s $mp3file_escaped 2>/dev/null | $oggenc -q $quality --quiet --raw --raw-rate=$frequency --raw-chan=$channels -o $oggoutputfile_escaped $infostring -");
+ $dirname_escaped = shell_quote($dirname);
+ $result = system("$mpg123 -q -s $mp3file_escaped 2>/dev/null | $oggenc -q $quality --quiet --raw --raw-rate=$frequency --raw-chan=$channels -o $dirname_escaped$oggoutputfile_escaped $infostring -");

if(!$result) {
- open(CHECK,"$ogginfo $oggoutputfile_escaped |");
+ open(CHECK,"$ogginfo $dirname_escaped$oggoutputfile_escaped |");
while()
{
if($_ eq "file_truncated=true\n")
{
- warn "Conversion failed ($oggoutputfile truncated).\n";
+ warn "Conversion failed ($dirname$oggoutputfile truncated).\n";
close CHECK;
exit 1;
}
elsif($_ eq "header_integrity=fail\n")
{
- warn "Conversion failed ($oggoutputfile header integrity check failed).\n";
+ warn "Conversion failed ($dirname$oggoutputfile header integrity check failed).\n";
close CHECK;
exit 1;
}
elsif($_ eq "stream_integrity=fail\n")
{
- warn "Conversion failed ($oggoutputfile header integrity check failed).\n";
+ warn "Conversion failed ($dirname$oggoutputfile header integrity check failed).\n";
close CHECK;
exit 1;
}
}
close CHECK;
- print "$oggoutputfile done!\n";
+ print "$dirname$oggoutputfile done!\n";
if($delete) {
unlink($mp3file);
}

Вот и весь пач. Вся суть исправлений заслешировать $dirname и подставить результат этой операции($dirname_escaped) перед имением файла в параметры oggenc, все остальные подставления, для валидатора, являются косметическими и на суть не виляют. Теперь можно использовать find в связке с mp32ogg. Пропатченый файл http://votkinsk.net/sites/default/files/mp32ogg.tar_.bz2 , вдруг кому пригодится.

Linux: UTF-8 и ID3v2 в музыкальной коллекции.

Когда музыкальная коллекция становиться довольно объемной и в ней набирается большое количество разношерстных файлов, возникает желание все это дело как то привести к общему виду. Уже довольно давно, я собирался взяться за уборку в своей папке music и вот руки наконец таки дошли.
В первую очередь меня беспокоили абракадабры в плай листах. Хотелось чтобы все было красиво и по русски. Во вторую: ID3v1, которые в последнее время все чаще стали игнорироваться некоторыми плеерами.
Я уж было собирался взяться, за написание матерого перлового скрипта, и уже совсем было полез искать для него подходящие модули... но по ходу поиска модулей, я попал как раз туда куда было мне надо, хотя и не туда, куда хотел. Как оказалась все уже давно написано(хотя если подумать это не "оказалось", это всегда так есть, но не всегда про нашу честь ;) ).
mid3iconv скрипт на питоне, заточенный специально под наши цели, расспрастраняется в составе пакета mutagen ( http://code.google.com/p/mutagen/ ), базируется на id3iconv (http://www.cs.berkeley.edu/~zf/id3iconv/), очень прост в использовании и эффективен в работе.


Usage: mid3iconv [OPTION] [FILE]...

Mutagen-based replacement the id3iconv utility, which converts ID3 tags from
legacy encodings to Unicode and stores them using the ID3v2 format.

Options:
--version show program's version number and exit
-h, --help show this help message and exit
-e ENCODING, --encoding=ENCODING
Specify original tag encoding (default is UTF-8)
-p, --dry-run Do not actually modify files
--force-v1 Use an ID3v1 tag even if an ID3v2 tag is present
--remove-v1 Remove v1 tag after processing the files
-q, --quiet Only output errors
-d, --debug Output updated tags

Files are updated in-place, so use --dry-run first.


Для нас конечно ключевым является флаг --encoding . Большая часть музыки попадает ко мне с id3 тегами в кодировке windows-cp1251, я укажу ее. О другой части файлов с id3 тегами utf-8, беспокоится не нужно, с ними ничего не случится. Если у вас имеются файлы в кодировке koi8-r вам соответственно придется вычленить их из общего числа и перекодировать отдельно. Другой флаг который заслуживает внимания это --remove-v1 , архи нужная в нашем деле вещь, после перезаписи в id3 версии 2 , в случаи если этот флаг установлен, id3 версии 1 удаляется.
Умные люди из Интернетов используют эту утилиту таким образом:

find -iname '*.mp3' -print0 | xargs -0 mid3iconv -eCP1251 --remove-v1

Суть думаю ясна без комментариев. Запускаем из каталога в котором необходимо перекодировать id3 , и очень быстро, получаем нужный результат.
С задачей которая изначально стояла передо мной я справился так быстро, что мне даже поскучнело... ...В плеере красивые русские буковки... ни одного файла со старыми id3v1... так... с кодировками и тегами покончено и что дальше?

А дальше мы займется перекодированием файлов формата mp3 в его свободный аналог ogg, но это будет завтра... ;) а сейчас пора спать :)