<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Записки сумасшедшего админа</title>
	<atom:link href="http://sincore.ru/feed" rel="self" type="application/rss+xml" />
	<link>http://sincore.ru</link>
	<description>Взгляд из-за грани.......</description>
	<lastBuildDate>Sat, 01 Oct 2011 04:06:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Python 2.5 &amp; python-mysqldb : TypeError: not all arguments converted during string formatting</title>
		<link>http://sincore.ru/archives/251</link>
		<comments>http://sincore.ru/archives/251#comments</comments>
		<pubDate>Mon, 08 Aug 2011 21:38:50 +0000</pubDate>
		<dc:creator>Valor</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Баг]]></category>

		<guid isPermaLink="false">http://sincore.ru/?p=251</guid>
		<description><![CDATA[Баг в python-mysqldb Debian 5.0.6 Фаил : /usr/site/lib/python2.5/site-packages/MySQLdb/cursors.py Пакет : Package: python-mysqldb Priority: optional Section: python Installed-Size: 360 Maintainer: Debian Python Modules Team Architecture: amd64 Version: 1.2.2-7 Пример : sql = '''INSERT INTO call_fail_log (`callerid`,`date_stamp`,`cause`) VALUES(%s,FROM_UNIXTIME(%s),%s)''' &#160; &#160; &#160; &#160; &#8230;<p class="read-more"><a href="http://sincore.ru/archives/251">Читать далее &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Баг в python-mysqldb Debian 5.0.6</p>
<p>Фаил : /usr/site/lib/python2.5/site-packages/MySQLdb/cursors.py</p>
<p>Пакет :</p>
<p>Package: python-mysqldb<br />
Priority: optional<br />
Section: python<br />
Installed-Size: 360<br />
Maintainer: Debian Python Modules Team
<python -modules-team@lists.alioth.debian.org>
Architecture: amd64<br />
Version: 1.2.2-7</p>
<p>Пример :</p>
<div class="codecolorer-container python default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sql <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">'''INSERT INTO call_fail_log (`callerid`,`date_stamp`,`cause`) VALUES(%s,FROM_UNIXTIME(%s),%s)'''</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; cursor <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>.<span style="color: black;">db_init</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">cursor</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; cursor.<span style="color: black;">executemany</span><span style="color: black;">&#40;</span>sql<span style="color: #66cc66;">,</span><span style="color: black;">&#91;</span><span style="color: black;">&#40;</span>callerid<span style="color: #66cc66;">,</span>datestamp<span style="color: #66cc66;">,</span>cause<span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">db_init</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></div>
<p>Третий плейсхолдер не работоспособен, причина &#8211; неправильная работа регулярного вырождения при парсинге.</p>
<p>Решение :</p>
<p>Патч.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:450px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #660033;">---</span> cursors.py~ <span style="color: #000000;">2007</span>-02-<span style="color: #000000;">11</span> 07:<span style="color: #000000;">48</span>:<span style="color: #000000;">19.000000000</span> <span style="color: #660033;">-0800</span><br />
&nbsp;+++ cursors.py <span style="color: #000000;">2008</span>-<span style="color: #000000;">10</span>-09 <span style="color: #000000;">14</span>:<span style="color: #000000;">31</span>:<span style="color: #000000;">27.000000000</span> <span style="color: #660033;">-0700</span><br />
&nbsp;<span style="color: #000000; font-weight: bold;">@@</span> -<span style="color: #000000;">6</span>,<span style="color: #000000;">7</span> +<span style="color: #000000;">6</span>,<span style="color: #000000;">14</span> <span style="color: #000000; font-weight: bold;">@@</span><br />
&nbsp;<span style="color: #ff0000;">&quot;&quot;</span><span style="color: #ff0000;">&quot;<br />
<br />
&nbsp;import re<br />
&nbsp;-insert_values =<br />
&nbsp;re.compile(r&quot;</span>\svalues\s<span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>\<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>?<span style="color: #000000; font-weight: bold;">&lt;!</span>\\<span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #ff0000;">'.*?\).*(?&lt;!\\)?'</span><span style="color: #000000; font-weight: bold;">|</span>.<span style="color: #7a0874; font-weight: bold;">&#41;</span>+?\<span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #ff0000;">&quot;,<br />
&nbsp;re.IGNORECASE)<br />
&nbsp;+<br />
&nbsp;+restr = (r&quot;</span>\svalues\s<span style="color: #000000; font-weight: bold;">*</span><span style="color: #ff0000;">&quot;<br />
&nbsp;+ r&quot;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>\<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>?<span style="color: #000000; font-weight: bold;">&lt;!</span>\\<span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #ff0000;">'[^\)]*?\)[^\)]*(?&lt;!\\)?'</span><span style="color: #ff0000;">&quot;<br />
&nbsp;+ r&quot;</span><span style="color: #000000; font-weight: bold;">|</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>^\<span style="color: #7a0874; font-weight: bold;">&#40;</span>\<span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #000000; font-weight: bold;">|</span><span style="color: #ff0000;">&quot;<br />
&nbsp;+ r&quot;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>?:\<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>^\<span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #000000; font-weight: bold;">*</span>\<span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #ff0000;">&quot;<br />
&nbsp;+ r&quot;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>+\<span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #ff0000;">&quot;)<br />
&nbsp;+<br />
&nbsp;+insert_values= re.compile(restr)<br />
&nbsp;from _mysql_exceptions import Warning, Error, InterfaceError, DataError,<br />
&nbsp;<span style="color: #000099; font-weight: bold;">\<br />
</span> DatabaseError, OperationalError, IntegrityError, InternalError, <span style="color: #000099; font-weight: bold;">\<br />
</span> NotSupportedError, ProgrammingError</span></div></div>
<p>Накладываем патч на /usr/site/lib/python2.5/site-packages/MySQLdb/cursors.py , радуемся.</python>
]]></content:encoded>
			<wfw:commentRss>http://sincore.ru/archives/251/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asterisk логирование не обслужанных звонков</title>
		<link>http://sincore.ru/archives/243</link>
		<comments>http://sincore.ru/archives/243#comments</comments>
		<pubDate>Mon, 08 Aug 2011 05:21:35 +0000</pubDate>
		<dc:creator>Valor</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Debian]]></category>

		<guid isPermaLink="false">http://sincore.ru/?p=243</guid>
		<description><![CDATA[Представим себе сферический колцентр в вакууме, есть голосовое меню и прочие навороты и есть абонент (то же в вакууме) звонящий в этот самый колцентр который пытается куда-то там и зачем-то там дозвониться, внезапно ему наскучивает слушать говор синтетического человека и &#8230;<p class="read-more"><a href="http://sincore.ru/archives/243">Читать далее &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Представим себе сферический колцентр в вакууме, есть голосовое меню и прочие навороты и есть абонент (то же в вакууме) звонящий в этот самый колцентр который пытается куда-то там и зачем-то там дозвониться, внезапно ему наскучивает слушать говор синтетического человека и абонент кладет трубку..<br />
А теперь представим, что колцентр обслуживает абонентов некого оператора связи где каждый абонент на счету и администрация люто печется о качестве сервиса и желает перезвонить не терпеливому абоненту и спросить, что тот хотел.</p>
<p>Замутим логирование кодов закрытия канала связи..</p>
<p>Что есть : Asterisk 1.4 , Python 2.5 , MySQL 5.1</p>
<p>Создадим табличку для MySQL в которую и будем складывать высеры Астериска.</p>
<p>Будем сохранять:<br />
callerid &#8211; собственно номер звонившего<br />
date_stamp &#8211; timestamp обрыва канала (HANGUP,CANCEL, etc..)<br />
cause &#8211; код причины<br />
status и comment &#8211; зело не обязательно, статус записи (типа обслужено или нет) и комментарий</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #ff0000;">`asterisk`</span><span style="color: #66cc66;">.</span><span style="color: #ff0000;">`call_fail_log`</span> <span style="color: #66cc66;">&#40;</span><br />
<span style="color: #ff0000;">`id`</span> <span style="color: #993333; font-weight: bold;">INT</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">11</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AUTO_INCREMENT</span><span style="color: #66cc66;">,</span><br />
<span style="color: #ff0000;">`callerid`</span> <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">11</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span><br />
<span style="color: #ff0000;">`date_stamp`</span> <span style="color: #993333; font-weight: bold;">TIMESTAMP</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #993333; font-weight: bold;">CURRENT_TIMESTAMP</span> <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #993333; font-weight: bold;">UPDATE</span> <span style="color: #993333; font-weight: bold;">CURRENT_TIMESTAMP</span><span style="color: #66cc66;">,</span><br />
<span style="color: #ff0000;">`cause`</span> <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span><br />
<span style="color: #ff0000;">`status`</span> tinyint<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #ff0000;">'0'</span><span style="color: #66cc66;">,</span><br />
<span style="color: #ff0000;">`comment`</span> text<span style="color: #66cc66;">,</span><br />
<span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`id`</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span><br />
<span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #ff0000;">`call_index`</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`callerid`</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#41;</span> ENGINE<span style="color: #66cc66;">=</span>MyISAM <span style="color: #993333; font-weight: bold;">DEFAULT</span> CHARSET<span style="color: #66cc66;">=</span>utf8</div></div>
<p>Теперь сварганим махонький python agi скрипт который непосредственно сохранять данный в базу..</p>
<div class="codecolorer-container python default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:450px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span><br />
<br />
<span style="color: #483d8b;">'''<br />
Created on 05.08.2011<br />
<br />
@author: valor<br />
'''</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> MySQLdb<br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">class</span> CallFailLog:<br />
<br />
&nbsp; &nbsp; DBHOST <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;192.168.158.160&quot;</span><br />
&nbsp; &nbsp; DBUSER <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;agi&quot;</span><br />
&nbsp; &nbsp; DBPASS <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;asterisk&quot;</span><br />
&nbsp; &nbsp; DBNAME <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;asterisk&quot;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">pass</span><br />
<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> db_init<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; connect <span style="color: #66cc66;">=</span> MySQLdb.<span style="color: black;">connect</span><span style="color: black;">&#40;</span>db<span style="color: #66cc66;">=</span><span style="color: #008000;">self</span>.<span style="color: black;">DBNAME</span><span style="color: #66cc66;">,</span> host<span style="color: #66cc66;">=</span><span style="color: #008000;">self</span>.<span style="color: black;">DBHOST</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">user</span><span style="color: #66cc66;">=</span><span style="color: #008000;">self</span>.<span style="color: black;">DBUSER</span><span style="color: #66cc66;">,</span> passwd<span style="color: #66cc66;">=</span><span style="color: #008000;">self</span>.<span style="color: black;">DBPASS</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> connect<br />
<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span>callerid<span style="color: #66cc66;">,</span> datestamp<span style="color: #66cc66;">,</span> cause<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; sql <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">'''INSERT INTO call_fail_log (`callerid`,`date_stamp`,`cause`) VALUES(%s,FROM_UNIXTIME(%s),%s)'''</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; cursor <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>.<span style="color: black;">db_init</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">cursor</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; cursor.<span style="color: black;">executemany</span><span style="color: black;">&#40;</span>sql<span style="color: #66cc66;">,</span><span style="color: black;">&#91;</span><span style="color: black;">&#40;</span>callerid<span style="color: #66cc66;">,</span>datestamp<span style="color: #66cc66;">,</span>cause<span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">db_init</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'__main__'</span>:<br />
&nbsp; &nbsp; app <span style="color: #66cc66;">=</span> CallFailLog<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; app.<span style="color: black;">main</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></div></div>
<p>Как видим все просто и легко..<br />
Теперь лезем в extensions.conf и сделаем макрос обработки кодов + посмотрим откель его можно вызвать..</p>
<p>Собственно макрос:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">&#91;</span>macro-logfailcall<span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
exten =<span style="color: #000000; font-weight: bold;">&gt;</span> s,<span style="color: #000000;">1</span>,GotoIF<span style="color: #7a0874; font-weight: bold;">&#40;</span>$<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #ff0000;">&quot;<span style="color: #007800;">${ARG1}</span>&quot;</span> = <span style="color: #ff0000;">&quot;16&quot;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>?goin:end<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
exten =<span style="color: #000000; font-weight: bold;">&gt;</span> s,n<span style="color: #7a0874; font-weight: bold;">&#40;</span>goin<span style="color: #7a0874; font-weight: bold;">&#41;</span>,DeadAGI<span style="color: #7a0874; font-weight: bold;">&#40;</span>callfaillog.py,<span style="color: #800000;">${CALLERID(num)}</span>,<span style="color: #800000;">${EPOCH}</span>,<span style="color: #800000;">${ARG1}</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
exten =<span style="color: #000000; font-weight: bold;">&gt;</span> s,n<span style="color: #7a0874; font-weight: bold;">&#40;</span>end<span style="color: #7a0874; font-weight: bold;">&#41;</span>,NoOp<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">&amp;</span>gt; Unknown cause <span style="color: #800000;">${ARG1}</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
exten =<span style="color: #000000; font-weight: bold;">&gt;</span> s,n,Hangup<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span></div></div>
<p>Код завершения 16 NORMAL_CLEARING  &#8211; есть не что иное как положенная абонентом трубка.</p>
<p>Вызвать его можно в любом контексте, например так..</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">...<br />
exten =<span style="color: #000000; font-weight: bold;">&gt;</span> h,<span style="color: #000000;">1</span>,Macro<span style="color: #7a0874; font-weight: bold;">&#40;</span>logfailcall,<span style="color: #800000;">${HANGUPCAUSE}</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
...</div></div>
<blockquote><p>a: Вызывается, когда пользователь нажимает &#8216;*&#8217; во время проигрывания приветствия системы голосовой почты.<br />
<strong>h: Вызывается, по завершению вызова. </strong><br />
i: Вызывается, при попытке вызова неизвестного екстеншена.<br />
o: Расширение оператора, используется для обработки нажатия нуля в системе голосовой почты.<br />
s: Стартовое расширение в контексте.<br />
t: Вызывается, при наступлении состояния таймаута.<br />
T: Вызывается, при наступлении состояния абсолютного таймаута, заданного функцией AbsolutTimeout?.<br />
e: Перехват расширений i,t и T для обработки ошибки в едином месте. Для выяснения типа ошибки может быть использована функция EXCEPTION(?)<br />
failed: Используется, если auto-dial out вызов завершился неудачно (который имеет определённый контекст, приоритет и расширение).<br />
fax: Используется для определения факса на Zap каналах.<br />
talk: Используется в конъюнкции с BackgroundDetect?.</p></blockquote>
<p>Полезные ссылки : <a href="http://voip.rus.net/tiki-index.php?page=Asterisk+Variable+HANGUPCAUSE" target="_blank">Коды причин закрытия канала</a></p>
<p>Удачи..</p>
]]></content:encoded>
			<wfw:commentRss>http://sincore.ru/archives/243/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VsFTPD and Virtual users on Debian</title>
		<link>http://sincore.ru/archives/239</link>
		<comments>http://sincore.ru/archives/239#comments</comments>
		<pubDate>Sun, 07 Aug 2011 21:32:58 +0000</pubDate>
		<dc:creator>Valor</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[Памятки]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[vsftpd]]></category>

		<guid isPermaLink="false">http://sincore.ru/?p=239</guid>
		<description><![CDATA[На заметку.. Пакеты: apt-get install libpam-pwdfile vsftpd Предположим, что сайтики лежат в /srv/www/{sitename &#8211; вида www.mysite.ru}/htdocs , соответственно ограничиваем пользователя доступом в корень, т.е. не выше директории www.mysite.ru. И так чистим дефолтный конфиг vsftpd echo &#34;&#34; &#62; /etc/vsftpad.conf И записываем &#8230;<p class="read-more"><a href="http://sincore.ru/archives/239">Читать далее &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>На заметку..</p>
<p>Пакеты:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">apt-get install</span> libpam-pwdfile vsftpd</div></div>
<p>Предположим, что сайтики лежат в /srv/www/{sitename &#8211; вида www.mysite.ru}/htdocs , соответственно ограничиваем пользователя доступом в корень, т.е. не выше директории www.mysite.ru.</p>
<p>И так чистим дефолтный конфиг vsftpd</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>vsftpad.conf</div></div>
<p>И записываем туды следующие..</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:450px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">listen</span>=YES<br />
<span style="color: #007800;">anonymous_enable</span>=NO<br />
<span style="color: #007800;">local_enable</span>=YES<br />
<span style="color: #007800;">write_enable</span>=YES<br />
<span style="color: #007800;">local_umask</span>=022<br />
<span style="color: #666666; font-style: italic;"># пользователя vsftpd нужно создать системным без шела, например useradd -M -r vsftpd</span><br />
<span style="color: #007800;">nopriv_user</span>=vsftpd<br />
<span style="color: #007800;">virtual_use_local_privs</span>=YES<br />
<span style="color: #007800;">guest_enable</span>=YES<br />
<span style="color: #007800;">user_sub_token</span>=<span style="color: #007800;">$USER</span><br />
<span style="color: #666666; font-style: italic;"># Токен $USER предполагает что к пути /srv/www/ будет добавлено имя пользователя, он и будет являться корнем для него. </span><br />
<span style="color: #007800;">local_root</span>=<span style="color: #000000; font-weight: bold;">/</span>srv<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$USER</span><br />
<span style="color: #007800;">chroot_local_user</span>=YES<br />
<span style="color: #007800;">hide_ids</span>=YES<br />
<span style="color: #007800;">guest_username</span>=vsftpd<br />
<span style="color: #007800;">chown_uploads</span>=YES<br />
<span style="color: #666666; font-style: italic;"># От имени и группы www-data пашет Apache.</span><br />
<span style="color: #007800;">chown_username</span>=www-data<br />
<span style="color: #007800;">guest_enable</span>=YES<br />
<span style="color: #007800;">guest_username</span>=www-data<br />
<span style="color: #007800;">chown_upload_mode</span>=0775<br />
<br />
<span style="color: #007800;">use_localtime</span>=YES<br />
<span style="color: #007800;">xferlog_enable</span>=YES<br />
<span style="color: #007800;">xferlog_file</span>=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>vsftpd.log<br />
<span style="color: #007800;">xferlog_std_format</span>=YES<br />
<br />
<span style="color: #007800;">dirmessage_enable</span>=YES<br />
<span style="color: #007800;">ascii_upload_enable</span>=YES<br />
<span style="color: #007800;">ascii_download_enable</span>=YES<br />
<span style="color: #007800;">ftpd_banner</span>=Welcome developer to WWW server<span style="color: #000000; font-weight: bold;">!</span><br />
<span style="color: #007800;">ls_recurse_enable</span>=YES<br />
<span style="color: #007800;">secure_chroot_dir</span>=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run<span style="color: #000000; font-weight: bold;">/</span>vsftpd<span style="color: #000000; font-weight: bold;">/</span>empty<br />
<br />
<span style="color: #007800;">pasv_enable</span>=YES<br />
<span style="color: #007800;">pasv_min_port</span>=<span style="color: #000000;">62000</span><br />
<span style="color: #007800;">pasv_max_port</span>=<span style="color: #000000;">64000</span></div></div>
<p>Далее надо настроит pam аутентификацию, для сего лезим в /etc/pam.d/vsftpd и комментим все попутно добавив туда две строчки</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">auth required pam_pwdfile.so pwdfile <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ftpd.passwd<br />
account required pam_permit.so</div></div>
<p>Собственно создаем файлик /etc/ftpd.passwd командой</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">htpasswd <span style="color: #660033;">-c</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ftpd.passwd</div></div>
<p>Добавление пользователя осуществляется аналогично, только без опции -с и с названием корневой директории сайта в качестве пользователя</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">htpasswd <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>ftpd.passwd www.mysite.ru</div></div>
<p>Ребутим vsftpd и радуемся..</p>
]]></content:encoded>
			<wfw:commentRss>http://sincore.ru/archives/239/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asterisk &#8211; запись исходящих звонков.</title>
		<link>http://sincore.ru/archives/225</link>
		<comments>http://sincore.ru/archives/225#comments</comments>
		<pubDate>Mon, 30 May 2011 05:42:17 +0000</pubDate>
		<dc:creator>Valor</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Памятки]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://sincore.ru/?p=225</guid>
		<description><![CDATA[Задача: Записывать исходящие звонки от некоторого подмножества абонентов корпоративной телефонной сети. Что есть в наличии: Asterisk 1.4* &#8211; вот с ним то и будем плясать.. Решение:  Список жертв будет храниться в бд, в моем случае это MySQL, для этого сварганим &#8230;<p class="read-more"><a href="http://sincore.ru/archives/225">Читать далее &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><strong>Задача</strong>: Записывать исходящие звонки от некоторого подмножества абонентов корпоративной телефонной сети.</p>
<p><strong>Что есть в наличии</strong>: Asterisk 1.4* &#8211; вот с ним то и будем плясать..</p>
<p><strong>Решение</strong>:  Список жертв будет храниться в бд, в моем случае это MySQL, для этого сварганим не хитрую табличку:</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #ff0000;">`asterisk`</span><span style="color: #66cc66;">.</span><span style="color: #ff0000;">`callout`</span> <span style="color: #66cc66;">&#40;</span><br />
<span style="color: #ff0000;">`id`</span> <span style="color: #993333; font-weight: bold;">INT</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AUTO_INCREMENT</span><span style="color: #66cc66;">,</span><br />
<span style="color: #ff0000;">`callerid`</span> <span style="color: #993333; font-weight: bold;">INT</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span><br />
<span style="color: #ff0000;">`status`</span> TINYINT<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">,</span><br />
<span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`id`</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#41;</span><br />
ENGINE <span style="color: #66cc66;">=</span> MyISAM;</div></div>
<p>Поясню: Поле  <strong>callerid</strong> &#8211; будет хронить 4х значный номер внутреннего абонента. <strong>status</strong> &#8211; просто флаг который позволит нам например временно исключать номер из списка записывающихся..</p>
<p>Далее давайте напишим AGI скрипт, который будет пробивать переданный ему в качестве аргумента callerid и если таковой там имеется, то вновь созданный канал будет записан.</p>
<p><strong>Пример скрипта:</strong></p>
<div class="codecolorer-container python default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:450px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span><br />
<span style="color: #483d8b;">'''<br />
Created on 26.05.2011<br />
<br />
@author: valor<br />
'''</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> MySQLdb<br />
<span style="color: #ff7700;font-weight:bold;">from</span> asterisk.<span style="color: black;">agi</span> <span style="color: #ff7700;font-weight:bold;">import</span> AGI<br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">class</span> calloutrec:<br />
<br />
DBHOST <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;localhost&quot;</span><br />
DBUSER <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;agi&quot;</span><br />
DBPASS <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;asterisk&quot;</span><br />
DBNAME <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;asterisk&quot;</span><br />
<br />
DEBUG <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">3</span><br />
<br />
agi <span style="color: #66cc66;">=</span> AGI<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> db_init<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:<br />
connect <span style="color: #66cc66;">=</span> MySQLdb.<span style="color: black;">connect</span><span style="color: black;">&#40;</span>db<span style="color: #66cc66;">=</span><span style="color: #008000;">self</span>.<span style="color: black;">DBNAME</span><span style="color: #66cc66;">,</span> host<span style="color: #66cc66;">=</span><span style="color: #008000;">self</span>.<span style="color: black;">DBHOST</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">user</span><span style="color: #66cc66;">=</span><span style="color: #008000;">self</span>.<span style="color: black;">DBUSER</span><span style="color: #66cc66;">,</span> passwd<span style="color: #66cc66;">=</span><span style="color: #008000;">self</span>.<span style="color: black;">DBPASS</span><span style="color: black;">&#41;</span><br />
<span style="color: #ff7700;font-weight:bold;">return</span> connect<br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span>arg<span style="color: black;">&#41;</span>:<br />
<br />
&nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">agi</span>.<span style="color: black;">verbose</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;&gt;&gt;&gt; start executing AGI script &quot;</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">self</span>.<span style="color: black;">DEBUG</span><span style="color: black;">&#41;</span><br />
<br />
&nbsp; &nbsp; cursor <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>.<span style="color: black;">db_init</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">cursor</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; cursor.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'''SELECT c.callerid FROM callout c WHERE c.status = 1 AND c.callerid =%s'''</span><span style="color: #66cc66;">,</span>arg<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; res <span style="color: #66cc66;">=</span> cursor.<span style="color: black;">fetchone</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> res <span style="color: #66cc66;">!=</span> <span style="color: #008000;">None</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">agi</span>.<span style="color: black;">set_variable</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;ISREC&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">self</span>.<span style="color: black;">agi</span>.<span style="color: black;">set_variable</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;ISREC&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'__main__'</span>:<br />
app <span style="color: #66cc66;">=</span> calloutrec<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
app.<span style="color: black;">main</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></div></div>
<p>В основе скрипта лежит мини фреймворк <a href="http://sourceforge.net/projects/pyst/" target="_blank">pyst</a> , один из немногих еще не здохших проектов &#8211; рекомендую, жизнь облегчит.</p>
<p>Теперь осталось подправить extensions.conf , для начала создадим макрос следующего содержания</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">&#91;</span>macro-calloutrec<span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
exten =<span style="color: #000000; font-weight: bold;">&gt;</span> s,<span style="color: #000000;">1</span>,AGI<span style="color: #7a0874; font-weight: bold;">&#40;</span>callaoutrec.py,<span style="color: #800000;">${ARG1}</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
exten =<span style="color: #000000; font-weight: bold;">&gt;</span> s,n,NoOp<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #800000;">${ISREC}</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
exten =<span style="color: #000000; font-weight: bold;">&gt;</span> s,n,GotoIF<span style="color: #7a0874; font-weight: bold;">&#40;</span>$<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #ff0000;">&quot;<span style="color: #007800;">${ISREC}</span>&quot;</span> = <span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>?rec:norec<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
exten =<span style="color: #000000; font-weight: bold;">&gt;</span> s,n<span style="color: #7a0874; font-weight: bold;">&#40;</span>rec<span style="color: #7a0874; font-weight: bold;">&#41;</span>,MixMonitor<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">/</span>raid<span style="color: #000000; font-weight: bold;">/</span>outmonitor<span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${EPOCH}</span>-<span style="color: #800000;">${CALLERID(num)}</span>.wav<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
exten =<span style="color: #000000; font-weight: bold;">&gt;</span> s,n<span style="color: #7a0874; font-weight: bold;">&#40;</span>norec<span style="color: #7a0874; font-weight: bold;">&#41;</span>,NoOp<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #800000;">${CALLERID(num)}</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;&gt;</span> No record call<span style="color: #7a0874; font-weight: bold;">&#41;</span></div></div>
<p>Вот такой вот нехитрый макрос принимает в качестве аргумента callerid абонента осуществляющего исходящий звонок, далее передает его как аргумент agi скрипту и на основе возвращенного результата решает писать его или нет.</p>
<p>Осталось применить макрос в контексте через который идут исходящие звонки. примерно так:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">exten =<span style="color: #000000; font-weight: bold;">&amp;</span>gt; _XXXXXX.,n,Macro<span style="color: #7a0874; font-weight: bold;">&#40;</span>calloutrec,<span style="color: #800000;">${CALLERID(num)}</span><span style="color: #7a0874; font-weight: bold;">&#41;</span></div></div>
<p>Вот и все.. записанные файлики в формате wav будут складываться в директорию  /raid/outmonitor/ с именем фала вида utc-callerid.wav .</p>
<p>ЗЫ. Для сортировки полученных фалов можно использовать скрипт из <a href="http://sincore.ru/archives/219" target="_blank">предыдущей статьи.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sincore.ru/archives/225/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Asterisk &#8211; укладываем фалики по полочкам.</title>
		<link>http://sincore.ru/archives/219</link>
		<comments>http://sincore.ru/archives/219#comments</comments>
		<pubDate>Mon, 30 May 2011 04:56:55 +0000</pubDate>
		<dc:creator>Valor</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Utility]]></category>

		<guid isPermaLink="false">http://sincore.ru/?p=219</guid>
		<description><![CDATA[Для тех кто использует Asterisk для построения колцентров.. Если вы ведете запись входящих звонков в очередях (asterisk: Queues), то рано или поздно встает вопрос об вменяемой организации нескольких десятков (может быть и сотен) тысяч файлов в нечто удобное для поиска &#8230;<p class="read-more"><a href="http://sincore.ru/archives/219">Читать далее &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Для тех кто использует Asterisk для построения колцентров..</p>
<p>Если вы ведете запись входящих звонков в очередях (asterisk: Queues), то рано или поздно встает вопрос об вменяемой организации нескольких десятков (может быть и сотен) тысяч файлов в нечто удобное для поиска и прочих манипуляций..</p>
<p>Я в свою очередь предлагаю хранить все файлы как дерево вида: YYYY/MM/DD/ , для сего написал небольшой скриптик на питоне..</p>
<div class="codecolorer-container python default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:450px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span><br />
<span style="color: #483d8b;">'''<br />
Created on 03.01.2011<br />
<br />
@author: valor<br />
'''</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span><br />
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">shutil</span> <span style="color: #ff7700;font-weight:bold;">import</span> move<br />
<br />
<span style="color: #ff7700;font-weight:bold;">class</span> AstMonFLSorter:<br />
<br />
&nbsp; &nbsp; store_root <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;/raid/monitor/&quot;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">pass</span><br />
<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> utc_get_date<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: #66cc66;">,</span>utc<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #dc143c;">time</span>.<span style="color: black;">strftime</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;%Y:%m:%d&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">time</span>.<span style="color: black;">localtime</span><span style="color: black;">&#40;</span>utc<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; count <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> fname <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">listdir</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">store_root</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; utc <span style="color: #66cc66;">=</span> fname<span style="color: black;">&#91;</span>:<span style="color: #ff4500;">10</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; year <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>.<span style="color: black;">utc_get_date</span><span style="color: black;">&#40;</span><span style="color: #008000;">float</span><span style="color: black;">&#40;</span>utc<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span>:<span style="color: #ff4500;">4</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; month <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>.<span style="color: black;">utc_get_date</span><span style="color: black;">&#40;</span><span style="color: #008000;">float</span><span style="color: black;">&#40;</span>utc<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">5</span>:<span style="color: #ff4500;">7</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; day <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>.<span style="color: black;">utc_get_date</span><span style="color: black;">&#40;</span><span style="color: #008000;">float</span><span style="color: black;">&#40;</span>utc<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">8</span>:<span style="color: #ff4500;">10</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; curday <span style="color: #66cc66;">=</span> <span style="color: #008000;">self</span>.<span style="color: black;">utc_get_date</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">time</span>.<span style="color: #dc143c;">time</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">8</span>:<span style="color: #ff4500;">10</span><span style="color: black;">&#93;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">isdir</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">store_root</span>+year<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;&gt;&gt;&gt; create &quot;</span>+year+<span style="color: #483d8b;">&quot; folder&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #dc143c;">os</span>.<span style="color: black;">mkdir</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">store_root</span>+year<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">isdir</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">store_root</span>+year+<span style="color: #483d8b;">&quot;/&quot;</span>+month<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;&gt;&gt; create &quot;</span>+month+<span style="color: #483d8b;">&quot; folder&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #dc143c;">os</span>.<span style="color: black;">mkdir</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">store_root</span>+year+<span style="color: #483d8b;">&quot;/&quot;</span>+month<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">isdir</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">store_root</span>+year+<span style="color: #483d8b;">&quot;/&quot;</span>+month+<span style="color: #483d8b;">&quot;/&quot;</span>+day<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;&gt; create &quot;</span>+day+<span style="color: #483d8b;">&quot; folder&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #dc143c;">os</span>.<span style="color: black;">mkdir</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">store_root</span>+year+<span style="color: #483d8b;">&quot;/&quot;</span>+month+<span style="color: #483d8b;">&quot;/&quot;</span>+day<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">isfile</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">store_root</span>+fname<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">and</span> day <span style="color: #66cc66;">!=</span> curday:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; move<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">store_root</span>+fname<span style="color: #66cc66;">,</span> <span style="color: #008000;">self</span>.<span style="color: black;">store_root</span>+year+<span style="color: #483d8b;">&quot;/&quot;</span>+month+<span style="color: #483d8b;">&quot;/&quot;</span>+day<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; count +<span style="color: #66cc66;">=</span><span style="color: #ff4500;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;==&quot;</span>+<span style="color: #008000;">str</span><span style="color: black;">&#40;</span>count<span style="color: black;">&#41;</span>+<span style="color: #483d8b;">&quot;== moved file &quot;</span>+fname+<span style="color: #483d8b;">&quot; to &gt; &quot;</span>+<span style="color: #008000;">self</span>.<span style="color: black;">store_root</span>+year+<span style="color: #483d8b;">&quot;/&quot;</span>+month+<span style="color: #483d8b;">&quot;/&quot;</span>+day<br />
<br />
<br />
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'__main__'</span>:<br />
&nbsp; &nbsp; astmon <span style="color: #66cc66;">=</span> AstMonFLSorter<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; astmon.<span style="color: black;">main</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></div>
<p>Вот как-то так.. Есть замечания или предложения, или может есть ошибки? Пишите все поправим..</p>
]]></content:encoded>
			<wfw:commentRss>http://sincore.ru/archives/219/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Grub2 и framebuffer в Debian</title>
		<link>http://sincore.ru/archives/215</link>
		<comments>http://sincore.ru/archives/215#comments</comments>
		<pubDate>Mon, 02 May 2011 10:05:21 +0000</pubDate>
		<dc:creator>Valor</dc:creator>
				<category><![CDATA[Desktop environment]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Администрирование]]></category>
		<category><![CDATA[Памятки]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[framebuffer]]></category>
		<category><![CDATA[grub2]]></category>

		<guid isPermaLink="false">http://sincore.ru/?p=215</guid>
		<description><![CDATA[Ахтунг!!! Не надо ничего менять в /boot/grub/grub.conf , это не наш метод. Разрешение ЖК моего ноутбука 1280&#215;800, не забываем его сменить на свое! Для начала открываем  /etc/default/grub и ищем строку: GRUB_GFXMODE=800x600 Правим ее немного, что бы получилось: GRUB_GFXMODE=1280x800@32 # ниже &#8230;<p class="read-more"><a href="http://sincore.ru/archives/215">Читать далее &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><span style="text-decoration: underline;"><strong>Ахтунг!!!</strong></span> Не надо ничего менять в <em>/boot/grub/grub.conf</em> , это не наш метод.</p>
<blockquote><p>Разрешение ЖК моего ноутбука 1280&#215;800, не забываем его сменить на свое!</p></blockquote>
<p>Для начала открываем  <em>/etc/default/gru</em>b и ищем строку:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">GRUB_GFXMODE</span>=800x600</div></div>
<p>Правим ее немного, что бы получилось:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">GRUB_GFXMODE</span>=1280x800<span style="color: #000000; font-weight: bold;">@</span>32<br />
<span style="color: #666666; font-style: italic;"># ниже добавляем строку</span><br />
<span style="color: #007800;">GRUB_GFXPAYLOAD</span>=1280x800x32</div></div>
<p>Теперь лезем в <em>/etc/grub.d/00_heade</em>r ищем там строку:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;x<span style="color: #007800;">${GRUB_GFXMODE}</span>&quot;</span> = <span style="color: #ff0000;">&quot;x&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span style="color: #000000; font-weight: bold;">then</span> <span style="color: #007800;">GRUB_GFXMODE</span>=800x600x32 ; <span style="color: #000000; font-weight: bold;">fi</span><br />
<span style="color: #666666; font-style: italic;">#меняем разрешение на свое и ниже добавляем еще одну</span><br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;x<span style="color: #007800;">${GRUB_GFXPAYLOAD}</span>&quot;</span> = <span style="color: #ff0000;">&quot;x&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span style="color: #000000; font-weight: bold;">then</span> <span style="color: #007800;">GRUB_GFXPAYLOAD</span>=1280X800x32 ; <span style="color: #000000; font-weight: bold;">fi</span></div></div>
<p>В самом конце файла ищем строку</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">set</span> <span style="color: #007800;">gfxmode</span>=<span style="color: #800000;">${GRUB_GFXMODE}</span></div></div>
<p>и ниже добавляем</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">set</span> <span style="color: #007800;">gfxpayload</span>=<span style="color: #800000;">${GRUB_GFXPAYLOAD}</span></div></div>
<p>Сохраняем и запускаем <strong>update-grub2</strong>.</p>
<p>Удачи.</p>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 52px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">﻿</div>
]]></content:encoded>
			<wfw:commentRss>http://sincore.ru/archives/215/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hiberante multi instance &#8211; работа с несколькими БД.</title>
		<link>http://sincore.ru/archives/203</link>
		<comments>http://sincore.ru/archives/203#comments</comments>
		<pubDate>Fri, 29 Apr 2011 05:55:34 +0000</pubDate>
		<dc:creator>Valor</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Hibernate]]></category>

		<guid isPermaLink="false">http://sincore.ru/?p=203</guid>
		<description><![CDATA[Мемориз так сказать,  не так часто нужно на практике, но все же.. JBoss AS 6.0.0 HibernateUtils.java public class HiberanteUtils &#123; private static final Logger _log = Logger.getLogger&#40;HiberanteUtils.class&#41;; private static final SessionFactory nagiosSessionFactory, asteriskSessionFactory; static &#123; try&#123; nagiosSessionFactory = new Configuration&#40;&#41;.configure&#40;&#34;hibernate-nagios.cfg.xml&#34;&#41;.buildSessionFactory&#40;&#41;; &#8230;<p class="read-more"><a href="http://sincore.ru/archives/203">Читать далее &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Мемориз так сказать,  не так часто нужно на практике, но все же..</p>
<p>JBoss AS 6.0.0</p>
<p><strong>HibernateUtils.java</strong></p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:450px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HiberanteUtils <span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> Logger _log <span style="color: #339933;">=</span> Logger.<span style="color: #006633;">getLogger</span><span style="color: #009900;">&#40;</span>HiberanteUtils.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> SessionFactory nagiosSessionFactory, asteriskSessionFactory<span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">static</span> <span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">try</span><span style="color: #009900;">&#123;</span><br />
<br />
nagiosSessionFactory <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Configuration<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">configure</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;hibernate-nagios.cfg.xml&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">buildSessionFactory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
asteriskSessionFactory <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Configuration<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">configure</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;hibernate-asterisk.cfg.xml&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">buildSessionFactory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Athrowable+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Throwable</span></a> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
_log.<span style="color: #006633;">error</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Initial SessionFactory creation failed.&quot;</span>, ex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aexceptionininitializererror+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">ExceptionInInitializerError</span></a><span style="color: #009900;">&#40;</span>ex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> SessionFactory getNagiosSessionFactory<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #000000; font-weight: bold;">return</span> nagiosSessionFactory<span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> SessionFactory getAsteriskSessionFactory<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #000000; font-weight: bold;">return</span> asteriskSessionFactory<span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Соответственно <strong>hibernate-nagios.cfg.xml</strong> , <strong>hibernate-asterisk.cfg.xml</strong> должны лежать в class path..</p>
]]></content:encoded>
			<wfw:commentRss>http://sincore.ru/archives/203/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Notes@ Jetty 7-8 Eclipse WTP Adapter</title>
		<link>http://sincore.ru/archives/183</link>
		<comments>http://sincore.ru/archives/183#comments</comments>
		<pubDate>Tue, 08 Mar 2011 08:09:06 +0000</pubDate>
		<dc:creator>Valor</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Jetty]]></category>
		<category><![CDATA[WTP]]></category>

		<guid isPermaLink="false">http://sincore.ru/?p=183</guid>
		<description><![CDATA[Дабы не забыть в будущем оставлю линк.]]></description>
			<content:encoded><![CDATA[<p>Дабы не забыть в будущем оставлю <a href="http://wiki.eclipse.org/Jetty_WTP_Plugin/Jetty_WTP_Install" target="_blank">линк</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://sincore.ru/archives/183/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian NumLock trouble</title>
		<link>http://sincore.ru/archives/180</link>
		<comments>http://sincore.ru/archives/180#comments</comments>
		<pubDate>Wed, 22 Dec 2010 11:41:08 +0000</pubDate>
		<dc:creator>Valor</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Памятки]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[Debian]]></category>

		<guid isPermaLink="false">http://sincore.ru/?p=180</guid>
		<description><![CDATA[Угораздило меня нарваться на иксовый баг чёрт его знает какой давности.. причем баг сей не очевиден и вроде даже не совсем баг (да.. вот такой вот каламбур).. Короче, суть в том, что если нечаянно нажать Shift+NumLock , то цифровая консоль &#8230;<p class="read-more"><a href="http://sincore.ru/archives/180">Читать далее &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Угораздило меня нарваться на иксовый баг чёрт его знает какой давности.. причем баг сей не очевиден и вроде даже не совсем баг (да.. вот такой вот каламбур).. Короче, суть в том, что если нечаянно нажать Shift+NumLock , то цифровая консоль переходит в режим управления курсором, а так как при каждом нажатии клавиш 8,6,2,4 курсор сдвигается на один пиксел, заметить сей трабл не просто, по симу первая мысль приходящая в голову это БАГ..</p>
<p>Для поличения сей пичали нужно жмакнуть  Shift+NumLock еще раз..</p>
<p>ЗЫ.. Как мне подсказали интернеты.. данная &laquo;фича&raquo;, есть не что иное как не плохой  способ подосрать ближнему ибо неплохо функционирует при не активных иксах (т.е. в разлогиненном состоянии).</p>
]]></content:encoded>
			<wfw:commentRss>http://sincore.ru/archives/180/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gnome-terminal как фон рабочего стола..</title>
		<link>http://sincore.ru/archives/169</link>
		<comments>http://sincore.ru/archives/169#comments</comments>
		<pubDate>Fri, 12 Mar 2010 01:03:49 +0000</pubDate>
		<dc:creator>Valor</dc:creator>
				<category><![CDATA[Desktop environment]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Gnome]]></category>

		<guid isPermaLink="false">http://sincore.ru/?p=169</guid>
		<description><![CDATA[Захотелось странного..  Хочу что-бы консоль была фоном рабочего стола.  Не отвлекаясь на преамбулы, возьмемся за решение поставленной задачи. На просторах интернетов набрел на занятный тузлец Alltray (AllTray &#8211; Dock any program into the system tray.) , полистав man &#8211; понял, &#8230;<p class="read-more"><a href="http://sincore.ru/archives/169">Читать далее &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Захотелось странного..  Хочу что-бы консоль была фоном рабочего стола.  Не отвлекаясь на преамбулы, возьмемся за решение поставленной задачи.</p>
<p>На просторах интернетов набрел на занятный тузлец Alltray (AllTray &#8211; Dock any program into the system tray.) , полистав man &#8211; понял, что для решения нашей задачи оно может сгодиться.</p>
<p>И так решение.</p>
<p>В качестве эмулятора терминала берем стандартный для Gnome &#8211; Gnome-terminal, дистрибутив Debian..</p>
<p>Для начала малость подрехтуем сам gnome-terminal:</p>
<ol>
<li>Создаем новый профиль.</li>
<li>Отключаем отображения верхнего меню.</li>
<li>Отключаем полосы прокрутки.</li>
<li>Увеличиваем буфер строк (для удобства).</li>
<li>Выкручиваем до упора прозрачность фона терминала.</li>
<li>Подгоняем цвет консольных шрифтов под цвет фона рабочего стола.</li>
<li>Остальное по вкусу..</li>
</ol>
<p>Устанавливаем alltray</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">viktor@viktor-laptop:~$ </span><span style="color: #c20cb9; font-weight: bold;">apt-get install</span> alltray</div></div>
<p>Ну и финальный штрих в авто-запуск (тут неважно как именно, важна суть..) добавляем следующую строку:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">alltray <span style="color: #660033;">--show</span> <span style="color: #660033;">--sticky</span> <span style="color: #660033;">--skip-taskbar</span> <span style="color: #660033;">--no-alltray</span> <span style="color: #660033;">--notray</span> <span style="color: #660033;">-x</span> <span style="color: #660033;">-g</span> +<span style="color: #000000;">800</span>+<span style="color: #000000;">0</span> <span style="color: #660033;">--geometry</span> 1024x600 gnome-terminal <span style="color: #660033;">--window-with-profile</span>=s</div></div>
<p>Лично я добавлял ее в Система-&gt;Параметры-&gt;Запускаемые приложения.</p>
<p>Да и пару слов об опциях alltray..</p>
<ul>
<li>show – не сворачивать при запуске</li>
<li>sticky – отображать на всех рабочих столах</li>
<li>skip-taskbar – убрать приложение из панели задач</li>
<li>no-alltray – убрать заголовок alltray</li>
<li>notray – не показывать значёк в трее</li>
<li>x – убрать декорацию окон</li>
<li>+800+0 – позиция окна на рабочем столе (первое – горизонталь, второе – вертикаль)</li>
<li>geometry 1024&#215;600 &#8211; разрешение рабочего стола (это если нужно растянуть терминал на весь рабочий стол, иначе просто указываем нужную геометрию окна терминал)</li>
<li>window-with-profile=s &#8211; это уже параметр gnome-terminal говорящий о том, что при запуске нужно заюзать профиль &laquo;s&raquo;, который мы создали выше.</li>
</ul>
<p>Ну вот и все.. Перезагружаем иксы и ликуем..</p>
<p>Все эти выше описанные манипуляции выполнялись на Asus EeePC 1005 с Debian Sqeeze и Gnome 2.28.1..</p>
<p>Пользователей KDE, Xfce, etc..  очень прошу оставить свои комментарии по поводу различий и нюансов в реализации данной фичи.</p>
<p>Скрины на память&#8230;</p>
<p style="text-align: center;">
<div id="attachment_170" class="wp-caption aligncenter" style="width: 594px"><a href="http://sincore.ru/wp-content/uploads/2010/03/12.png"><img class="size-full wp-image-170 " title="alltray" src="http://sincore.ru/wp-content/uploads/2010/03/12.png" alt="" width="584" height="342" /></a><p class="wp-caption-text">Терминал как фон рабочего стола</p></div>
<div id="attachment_175" class="wp-caption aligncenter" style="width: 596px"><a href="http://sincore.ru/wp-content/uploads/2010/03/13.png"><img class="size-full wp-image-175" title="13" src="http://sincore.ru/wp-content/uploads/2010/03/13.png" alt="" width="586" height="342" /></a><p class="wp-caption-text">Терминал как фон рабочего стола</p></div>
<p style="text-align: center;">
]]></content:encoded>
			<wfw:commentRss>http://sincore.ru/archives/169/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

