Прекрасные консольные команды

Вот нашел отличный сборник полезных консольных комманд =)

http://www.commandlinefu.com/commands/browse/sort-by-votes

Вот выдежки

sudo !!
Выполнить последнюю команду еще раз

python -m SimpleHTTPServer
Запустить встроенных HTTP сервер в питоне, и начать предоставлять доступ к текущей директории на 8000 порту (удобно когда надо файл скачать с сервака например)

ssh -N -L2001:localhost:80 somemachine
Запустить туннель между текущей машиной, и удаленной на 2001 порту. Теперь к внешней машине:80 можно обращаться через localhost:2001

curl ya.ru
Показать на экране содержимое траницы http://ya.ru

curl -u user:pass -d status=»Tweeting from the shell» http://twitter.com/statuses/update.xml
Пост твита через коммандную строку (уже не работает =(( )

И много чего еще там есть. Классный сайт!

Автостарт демонов при загрузке CentOS

To auto start services in Centos or Redhat OS, you can use builtin chkconfig utility. It is located in /sbin directory. If you are a regular user (non-root), then /sbin may not be in your path. Therefore, you may have to use the full path to access the chkconfig utility.

To auto start a new service:

  • Find out the name of service’s script from /etc/init.d/ directory e.g. mysqld or httpd
  • Add it to chkconfig
    sudo /sbin/chkconfig --add mysqld
  • Make sure it is in the chkconfig.
    sudo /sbin/chkconfig --list mysqld
  • Set it to autostart
    sudo /sbin/chkconfig mysqld on

To stop a service from auto starting on boot

  • sudo /sbin/chkconfig mysqld off

Asterisk D-link DPH-150S

Я ВСЕ СЛЫШУ!!!

Для мониторинга, что творится в квартире, сначала использовал простую web-камеру и программку WebCamPro.
На рабочем сервере сделал в конфиге Asterisk следующее:

exten => 300,1,SIPAddHeader(Call-Info: answer-after=0)
exten => 300,n,Dial(SIP/300@home,,tT)

на домашнем, естетсвенно, стоит такая настройка:

exten => _3XX,1,Dial(SIP/${EXTEN},,tT)

Звоним …. и ничего. Поначалу расстроился, что данного функционала в Dlink DPH-150S просто нет. Но потом перенес строку SIPAddHeader(Call-Info: answer-after=0) на домашний сервер и все прекрасно заработало. Точнее сделал вызов на конкретный номер, чтобы не пугать всех и вся 🙂

exten => _3XX,1,Dial(SIP/${EXTEN},,tT)
exten => 333,1,SIPAddHeader(Call-Info: answer-after=0)
exten => 333,n,Dial(SIP/300,,tT)

Стоит на работе позвонить на 333 — попадаю домой и слышу что там творится.

НАС УТРО ВСТРЕЧАЕТ ПРОХЛАДОЙ.

В один прекрасный день забыл зарядку на работе. Все бы ничего — но сотовый разрядился ночью и … проспал КОНКРЕТНО на работу (мои как раз на даче были).

Что ж — есть «маленький» помощник в лице астера.

Ставим по cron-у генерацию call-файла примерно такого содержания:

Channel: Local/333@good_morning
MaxRetries: 0
RetryTime: 600
WaitTime: 60
Context: good_morning1
Extension: s
Priority: 1
Archive: yes

а далее в диалплане:

[good_morning]
exten => 333,1,SIPAddHeader(Call-Info: answer-after=0)
exten => 333,n,Dial(SIP/300,,tT)

[good_morning1]
exten => s,1,Answer
exten => s,n,Playback(pora_na_rabotu)

Все. Работает. Ну, еще, поковырявшись в Google, нашел примеры информатора погоды и будильник не просто проговаривал приветствие, но и прогноз на текущий день.

ЧЕГО ЕЩЕ ЖЕЛАЕТЕ?

Будильник будильником, но… ХОЧЕТСЯ БОЛЬШЕГО.

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

#!/usr/bin/perl
########################################################################
#
# $Id: google-voice-search.pl,v 1.1 2011-04-13 06:06:39 gosha Exp $
#
# Copyright (c) 2011 Okunev Igor <igor[at]prv.mts-nn.ru>
#
########################################################################

require LWP::UserAgent;

#my ( $file ) = @ARGV;

my ( $url, $use_converter );

my $lang=»ru»;
my $file=»/tmp/record.wav»;

unless ( $file ) {
die «Usage: $0 file.flac lang\n\twhere lang is ru or en\n»;
}

if ( lc($lang) eq ‘ru’ ) {
$url = «https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=ru-RU»;
} else {
$url = «https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=en-US»;
}

#
# to FLAC
#
unless ( $file =~ /\.flac$/i ) {
system «ffmpeg -y -i $file $file.flac 2> /dev/null»;
if ( $? ) {
die «Can’t convert file $file to $file.flac: $?\n»;
} else {
$file .= ‘.flac’;
$use_converter = 1;
}
}
                                        
my $file_info = `file $file`;
if ( $file_info =~ /FLAC audio.*\s(\d+)\s*kHz/ ) {
$file_info = $1.’000′;
} else {
unlink $file if $use_converter;
die «Incorrect FLAC file: $file_info\n»;
}

open( FILE, «<$file» ) || die «Can’t open input file[$file]: $!\n»;
undef $/; my $audio = <FILE>; $/ = «\n»;
close(FILE);

unlink $file if $use_converter;

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

my $response = $ua->post($url, Content_Type => «audio/x-flac; rate=$file_info», Content => $audio);

if ( $response->is_success ) {
print $response->content;
my $result=$response->content;

my($res1,$res2,$res3,$res4,$res5)=split(«:»,$result);
$_=$res5;
s/\»confidence\»//;
s/\»//;
s/\»//;
s/,//;

open(OUTFILE,»>/tmp/record.txt»);

print OUTFILE $_;
close(OUTFILE);

} else {
use Data::Dumper;
delete $response->{‘_request’}->{‘_content’};
print STDERR Dumper($response);
}

Теперь модифицировал диалплан:

exten => s,n(cikl),Playback(chto_xotim)
exten => s,n,Record(/tmp/record.wav,,5,k)
exten => s,n,AGI(/var/www/cgi-bin/voice.pl)
exten => s,n,Set(TEST=${FILE(/tmp/record.txt)})
exten => s,n,NoOp(${TEST})
exten => s,n,GotoIf($[«${TEST}»=»нет»]?hang)
exten => s,n,Goto(cikl)
exten => s,n(hang),Hangup

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

Ксати, обратите внимание на проверку на слово НЕТ — Asterisk прекрасно справился с задачей.

Вот так ручками сделал седе некий аналог Siri 🙂 Причем в сам perl-скрипт можно добавить собственные обработчики распознанного текста и возвращать в астер не текст, а МЕТКИ, которые используете в диалплане.

iftop спасает мир или как понять кто кладет канал

В дни безлимитного интернета уже никого не удивишь офисным 100-мегабитным каналом. И не смотря на то что домашний интернет стал дешевый как грязь, не перевелись люди которые предпочитают платить 150 рублей в месяц за 2-х мегабитный канал дома, и качать любимые сериалы или хрен-знает-что в офисе забивая всем остальным канал.

Понятное дело что нас могут спасти всякого рода шейперы, блокировки торрентов и прочие полезные вещи (и чтрого говоря так и надо делать), но бывает что конфигурация нужна максимально простая, и нужно понимать кто «ипортил интернет». Я в свое время писал разные программы, которые снифают траффик на  роутере и выясняют кто все испортил.

Однако существует прекрасная утилита, которая называется iftop. запускаем ее с ключами iftop -n -i em1 (где em1 — ваш внутренний интерфейс) и сразу видим негодняя. Дальше добавляем его в таблицу nonat или просто идем и рассказываем как настроить торрент клиент, что бы он занимал полосу не более 5-6 мегабит.

 

Удачи.
Толик, тебе отдельный привет =)

Что такое postback?

Общие условия такие:

  • Я покупаю трафик в какой-то системе, будь то Google Adwords, Mobfox или где-то еще.
  • Мне нужно знать какие объявления, ключевые слова, модели телефонов и другие параметры дают конверсию.
  • Мне нужно удобно анализировать весь этот массив данных и видеть информацию и по тем кликам, которые дают конверсию и по тем, которые конверсию не дают.
  • Система отчетов партнерок в большинстве случае не позволяет видеть полную картинку.

Из этого вытекает использование внешнего трекера, который:

  • умеет отслеживать 10-20 входящих параметров по уникальному клику
  • умеет работать с данными о конверсиях

Для того, чтобы получить данные о конверсиях обычно используются два механизма — tracking pixel и postback. С tracking pixel сложности — партнерки отказываются втыкать ваш пиксел на thanks page оффера. Наиболее распространенным механизмом получения информации о лидах является postback.

У постбека (post back, post-back, postback) есть еще несколько названий, которые достаточно часто употребляются: пингбек (pingback), server to server pixel (s2s pixel), s2s post back, server tracking post back.

Постбек — это механизм, позволяющий партнерке передавать данные о конверсиях вашему трекеру.

Например, самый простой случай — direct linking. Я покупаю трафик так:

  1. Размещаю ссылку на свой трекер, что-то вроде mytrackerurl.com/index.php?CID=id&ppc=ppc1&ad=ad1&adgroup=adgroup1&keyword=keyword1. То есть пользователь незаметно для себя проходит через мой трекер. Все параметры записываются в трекер — откуда пришел, по какому объявлению кликнул, какой оператор и трубка и т.д. В этот же момент пользователю присваивается уникальный ID. Например 42 или 123 или 18237482
  2. После того, как пользователь прошел через трекер, он отправляется по ссылке партнерки, что-то вроде affnetworktracker.com/offerlink. Трекер к ссылке добавляет тот самый уникальный ID. Получается что-то вроде affnetworktracker.com/offerlink?subid=42. Партнерка у себя эту информацию тоже фиксирует.
  3. Если по ID 42 проходит конверсия, то партнерка пингует мой трекер с подстановкой ID. То есть обращается по примерно такому урлу mytrackerurl.com/update.php?subid=42.
  4. Трекер фиксирует эту информацию в базе. В отчетах я вижу, что именно этот клик принес мне конверсию.

Большая часть партнерок поддерживает postback и не требуется каких-то дополнительных телодвижений, чтобы активировать ее. В трекеры типа prosper202 или CPVLab тоже встроена поддержка постбека.

Настройка постбека обычно сводится к следующему:

  • Получаем линк от партнерки с местом для subid. Например, в Myragon можно добавлять любой параметр к URL оффера — добавляем к линку что-то вроде &postback=. Для партнерок на Hasoffers это обычно &aff_sub=.
  • Используем этот линк в трекере с подстановкой subid. В prosper202 это добавление [[subid]], то есть у нас будет &postback=[[subid]] или &aff_sub=[[subid]].
  • Получаем от трекера post back URL, то есть URL по которому партнерка будет нас пинговать, для проспера это линк вида вашдомен/tracking202/static/gpb.php?amount=&subid=
  • Настраиваем передачу данных от партнерки в трекер, то есть добавляем в партнерке post back URL с подставленным параметром. Для Myragon это будет ваш параметр, что-то типа gpb.php?amount=&subid=[=pingback=], для Hasoffers-партнерок это будет tracking202/static/gpb.php?amount=&subid={aff_sub}

Все, после настройки все будет работать и у вас будет любая информация об источнике конверсий.