пятница, 17 апреля 2026 г.

Псевдопеременные в Kamailio

 


 

 http://www.kamailio.org/wiki/cookbooks/5.0.x/pseudovariables#tu_-_to_uri

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

$$ - маркер псевдопеременной
$$ - представляет символ '$'

$_s(format) — Оценить динамический формат
$_s(format) - возвращает строку после оценки всех псевдопеременных в формате

    $var(x) = "sip:" + $rU + "@" + $fd;

    # эквивалентно:

    $var(x) = $_s(sip:$rU@$fd);
$ai — заголовок URI inP-Asserted-Identity
$ai — ссылка на URI в заголовке запроса P-Asserted-Identity (см. RFC 3325)

$adu — URI дайджеста аутентификации
$adu — URI из заголовка Authorization или Proxy-Authorization. Этот URI используется при расчете ответа HTTP Digest.

$aa - Алгоритм аутентификации
$aa - алгоритм из заголовка Authorization или Proxy-Authorization.

$ar - область аутентификации
$ar - область из заголовка Authorization или Proxy-Authorization

$au - Имя пользователя авторизации
$au - пользовательская часть имени пользователя из заголовка Authorization или Proxy-Authorization

$ad — домен авторизации пользователя
$ad - доменная часть имени пользователя из заголовка Authorization или Proxy-Authorization

$aU - Аутентификация всего имени пользователя
$aU - полное имя пользователя из заголовка Authorization или Proxy-Authorization

$Au - Имя пользователя Acc и область/домен
$Au - имя пользователя для учета. Это выборочная псевдопеременная (унаследованная от модуля acc). Он возвращает имя пользователя и область авторизации ($au@$ar), если они существуют, или From URI ($fu) в противном случае.

$branch(имя) - Атрибуты ветки
$branch(name) - ссылка на атрибут 'имя' ветки

Эта псевдопеременная дает вам доступ только к «дополнительным веткам», а не к «основной ветке». Например, если для одного и того же AoR зарегистрировано 3 клиента, после lookup() у вас будет один контакт в «основной ветке» и две «дополнительные ветки». С помощью $branch() вы можете получить доступ к дополнительным веткам, к основной ветке можно получить доступ с помощью $ru и $du. (Примечание: в branch_route нет различия между основной и дополнительной ветвями — branch_route будет вызываться один раз для каждой из них.)

«Имя» может быть:

uri - вернуть uri ветки
dst_uri — вернуть uri назначения (адрес следующего прыжка)
path - вернуть вектор пути для ветки
q - вернуть значение q ветки
send_socket - возвращает сокет, который будет использоваться для отправки ветки
count - вернуть количество ветвей
flags - возвращает значение флагов ветки
ruid - вернуть ruid ветки (Записать внутренний уникальный ID из usrloc)
PV может использовать индекс для доступа к указанной ветке: $(branch(name)[index])

Пример:

$вар ( я ) = 0 ; 
в то время как ( $var ( i ) < $branch ( count ) ) 

   xlog ( "$(branch(uri)[$var(i)]) \n " ) ; 
   $var ( i )  = $var ( i )  +  1 ; 
}
Начиная с версии 3.1.0, вы можете присваивать значение каждому атрибуту. Индекс можно использовать для обновления конкретной ветки:

$ ( филиал ( атрибут ) [ индекс ] )  = значение ;
Если индекс отсутствует, используется первая ветвь. Если индекс равен -1, используется последняя ветвь.

Присвоение $null атрибуту uri приведет к удалению ветки, для остальных атрибутов просто будет установлено значение null.

$ ( ветка ( uri ) [ 2 ] )  =  "sip:test@kamailio.org;transport=sctp" ;
$br - первая ветвь запроса
$br - ссылка на первую ветку запроса

Это переменная R/W, вы можете присвоить ей значения прямо в конфигурационном файле (добавит новую ветку).

$bR - все ветки запроса
$bR - ссылка на все ветки запроса

$bf - флаги ветки
$bf - ссылка на флаги ветки 0 ветки (RURI) - десятичный вывод

Это переменная R/W (вы можете присвоить ей значения прямо в конфигурационном файле)

$bF - Флаги ветвления
$bF - ссылка на флаги ветки 0 ветки (RURI) - вывод в шестнадцатеричном формате

Это переменная R/W (вы можете присвоить ей значения прямо в конфигурационном файле)

$bs - размер тела
$bs - размер тела

$ci - Идентификатор вызова
$ci - ссылка на тело заголовка call-id

$cl — длина содержимого
$cl — ссылка на тело заголовка content-length

$cnt(pv) - Подсчитать количество pvs
$cnt(avp) - вернуть количество avp

xlog ( "$$avp(x) fount $cnt($avp(x)) раз \n " ) ;
$conid — идентификатор TCP-соединения
$conid — идентификатор TCP-соединения, по которому поступило текущее сообщение, для TCP, TLS, WS и WSS. Установите значение $null для SCTP и UDP.

$cs-CSeq
$cs — ссылка на порядковый номер в заголовке cseq. Метод в заголовке CSeq идентичен методу запроса, поэтому используйте $rm для получения метода (работает также для ответов).

$ct - Заголовок контакта
$ct - ссылка на тело заголовка контакта

$cT — тип контента
$cT - ссылка на тело заголовка content-type

$dd - URI домена назначения
$dd - ссылка на домен назначения uri (без порта)

$di - URI заголовка перенаправления
$di — ссылка на URI заголовка Diversion

$dip - Параметр "конфиденциальность" перенаправления
$dip - ссылка на значение параметра «конфиденциальность» заголовка Diversion

$dir - Параметр "причина" отклонения
$dir — ссылка на значение параметра «причина» заголовка Diversion

$dic - параметр "счетчик" переадресации
$dic - ссылка на значение параметра «счетчик» заголовка Diversion

$dp - URI порта назначения
$dp - ссылка на порт назначения uri

$dP - Транспортный протокол URI назначения
$dP - ссылка на транспортный протокол получателя uri

$ds - Целевой набор
$ds - ссылка на целевой набор

$du — URI назначения
$du - ссылка на uri назначения

Если функцияlouse_route() возвращает TRUE, uri назначения устанавливается в соответствии с первым заголовком Route. $du также устанавливается, если функция lookup() модуля 'registrar' находит контакт(ы) за NAT. Вы можете установить $du на любой SIP URI .

sip: kamailio.org
 sip: pbx123.kamailio.org; транспорт = udp
 глоток: [2001: DB8:: 33: 2]: 5980; транспорт = TLS
Это переменная R/W (вы можете присвоить ей значения прямо в конфигурационном файле)

Чтобы сбросить $du:

$ду = $нуль;
$fd — из домена URI
$fd - ссылка на домен в URI заголовка From

$fn - От отображаемого имени
$fn - ссылка на отображаемое имя заголовка From

$fs - Принудительный сокет
$fs - ссылка на принудительный сокет для отправки сообщений (если есть) в виде proto:ip:port

Это переменная R/W (ей можно присвоить значения прямо в конфигурационном файле). Транспортный прототип можно не указывать при присвоении значения, и в этом случае он берется из URI назначения сообщения.

$ft - Из тега
$ft - ссылка на параметр тега заголовка From

$fti - Начальный тег From
$fti — ссылка на параметр тега заголовка «От», как это было в исходном запросе (например, первоначальном ПРИГЛАШЕНИИ).

Значение тега From в начальном запросе может быть в теге To, если запрос в рамках диалога отправляется вызываемой стороной. Эта переменная определяет, кто отправил запрос в диалоговом окне, и возвращает правильное значение, которое было в теге From запроса, инициирующего диалог.

Он экспортируется модулем rr и должен использоваться после `loose_route()`. Параметр append_fromtag должен быть установлен в 1, чтобы эта переменная возвращала правильное значение.

$fu — из URI
$fu - ссылка на URI заголовка From

Это переменная R/W (вы можете присвоить ей значения прямо в конфигурационном файле)

Обратите внимание, что изменение заголовка From: может нарушить обратную совместимость с устройствами SIP 1.0.

$fU - из имени пользователя URI
$fU - ссылка на имя пользователя в URI заголовка 'From'

Это переменная R/W (вы можете присвоить ей значения прямо в конфигурационном файле)

Обратите внимание, что изменение заголовка From: может нарушить обратную совместимость с устройствами SIP 1.0.

$mb - буфер сообщений SIP
$mb - ссылка на буфер сообщений SIP

$mf - Флаги
$mf - ссылка на флаги сообщения/транзакции, установленные для текущего SIP-запроса

Это переменная R/W (вы можете присвоить ей значения прямо в конфигурационном файле)

$mF - Флаги в шестнадцатеричном формате
$mF - ссылка на флаги сообщения/транзакции, установленные для текущего SIP-запроса в шестнадцатеричном формате.

Это переменная R/W (вы можете присвоить ей значения прямо в конфигурационном файле)

$mi - идентификатор SIP-сообщения
$mi - ссылка на идентификатор SIP-сообщения

$ml - длина SIP-сообщения
$ml - ссылка на длину SIP-сообщения

$mt - Тип сообщения SIP
$mt — возвращает 1, если sip-сообщение является запросом, возвращает 2, если sip-сообщение является ответом.

$od — исходный R-URI домена
$od — ссылка на домен в исходном R- URI запроса.

$op - Порт в оригинальном R-URI
$op - ссылка на порт оригинального R- URI

$oP - Протокол оригинального R-URI
$oP - ссылка на транспортный протокол оригинального R- URI

$ou — оригинальный R-URI
$ou - ссылка на исходный URI запроса

$oU — имя пользователя в оригинальном R-URI
$oU — ссылка на имя пользователя в исходном URI запроса.

$pd — Домен в URI заголовка P-Preferred-Identity
$pd — ссылка на домен в URI заголовка P-Preferred-Identity запроса ( см. RFC 3325)

$pn — отображаемое имя в заголовке P-Preferred-Identity
$pn — ссылка на Display Name в заголовке P-Preferred-Identity запроса (см. RFC 3325)

$pp - идентификатор процесса
$pp - ссылка на идентификатор процесса (pid)

$pr - Протокол полученного сообщения
$pr или $proto - протокол полученного сообщения (udp, tcp, tls, sctp, ws, wss)

$pU — пользователь в URI заголовка P-Preferred-Identity
$pU — ссылка на пользователя в URI заголовка P-Preferred-Identity запроса (см. RFC 3325)

$pu — URI в заголовке P-Preferred-Identity
$pu — ссылка на URI в заголовке P-Preferred-Identity запроса (см. RFC 3325)

$rb - Тело запроса/ответа
$rb - ссылка на тело сообщения

$rc - Возвращаемый код
$rc - ссылка на возвращаемый код последней вызванной функцией

$реткод - то же, что и $rc

$rd - Домен в R-URI
$rd — ссылка на домен в URI запроса (без порта) или на специальную строку пространства имен URN (см. RFC 2141)

Это переменная R/W (вы можете присвоить ей значения прямо в конфигурационном файле)

$rdir(key) - Запрос направления
$rdir(key) - получить направление запроса в диалоге.

Направление «вниз», если отправлено вызывающим абонентом, и «вверх», если отправлено вызываемым абонентом.

Ключ может быть:

id - возвращаемое значение является целым числом: 1 - для направления вниз по течению, 2 - для направления вверх по течению
имя — возвращаемое значение представляет собой строку: «вниз по течению» или «вверх по течению»
Пример:

if ( $rdir ( name ) == "upstream" )  { 
  xlog ( "запрос был отправлен вызываемым пользователем \n " ) ; 
}
Переменная экспортируется модулем rr , и параметр append_fromtag должен быть включен. Переменная должна использоваться после функции loss_route().

$re — URI заголовка Remote-Party-ID
$re — ссылка на URI заголовка Remote-Party-ID

$rm - метод SIP
$rm - ссылка на метод запроса. Работает также для ответов (используя заголовок CSeq)

$rmid - ID метода SIP
$rmid - возвращает внутреннее целочисленное представление типа метода SIP.

$route_uri — URI в заголовке первого маршрута
$route_uri — возвращает строку с полем URI в первом заголовке Route

$rp - Порт в R-URI
$rp - ссылка на порт R- URI

Это переменная R/W (вы можете присвоить ей значения прямо в конфигурационном файле)

$rP - Протокол R-URI
$rP - ссылка на транспортный протокол R- URI

$rr - фраза причины ответа SIP
$rr - ссылка на фразу-причину ответа (текст после кода ответа)

$rs - код ответа SIP
$rs - ссылка на статус ответа (код статуса, код ответа, код ответа)

$rt — URI ссылки
$rt - ссылка на URI заголовка refer-to

$ru - URI запроса
$ru - ссылка на URI запроса (адрес в первой строке SIP запроса)

Это переменная R/W (вы можете присвоить ей значения прямо в конфигурационном файле)

$rU - Имя пользователя в R-URI
$rU — ссылка на имя пользователя в URI запроса или на идентификатор пространства имен URN (см. RFC 2141)

Это переменная R/W (вы можете присвоить ей значения прямо в конфигурационном файле)

$ruid - Запись внутреннего уникального идентификатора
$ruid — внутренний уникальный идентификатор записи для записи о местоположении, выбранный вызовом registrar:lookup().

$rz - Схема URI R-URI
$rz - возвращает схему R- URI , возможные значения: sip, sips, tel, tels и urn, ошибка парсинга схемы R- URI должна быть отражена значением: none

$Ri - полученный IP-адрес
$Ri - ссылка на IP-адрес интерфейса, на который был получен запрос

$Rp - Полученный порт
$Rp - ссылка на порт, где было получено сообщение

$sbranch(attr) — Статическая ветка
$sbranch(attr) - класс переменных, позволяющий управлять значениями атрибутов для статической ветки. Статическая ветвь — это внутренняя структура, которая используется функциями sbranch_push_ruri() и sbranch_append() из модуля pv , обеспечивая большую гибкость при обновлении атрибутов ветви R- URI (первой), а также дополнительных ветвей (например, для параллельного разветвления).

Attr может быть любым из поддерживаемых значений для класса переменных $branch(attr) — подробности см. выше.

Пример использования:

sbranch_reset ( ) ; 
$sbranch ( uri )  =  "sip:127.0.0.1:5080" ; 
$sbranch ( dst_uri )  =   "sip:127.0.0.1:5090" ; 
$sbranch ( путь )  =   "sip:127.0.0.1:5090, sip:127.0.0.1:5094" ; 
$sbranch ( send_socket )  =   "udp:127.0.0.1:5060" ; 
sbranch_set_ruri ( ) ;
$sf - флаги скрипта
$sf - ссылка на флаги скрипта - десятичный вывод

$sF - флаги скрипта
$sF — ссылка на флаги скрипта — вывод в шестнадцатеричном формате

$si - исходный IP-адрес
$si - ссылка на IP-адрес источника сообщения

$sp - Исходный порт
$sp - ссылка на исходный порт сообщения

$stat(имя) - Статистика
$stat(name) - возвращает значение элемента статистики, указанного в 'name'

$su - Исходный адрес как URI
$su — возвращает представление исходного адреса (ip, порт, proto) в виде SIP URI . Если протокол UDP, то он не добавляется (будучи транспортным протоколом по умолчанию).

Его значение выглядит так:

"sip:ip:port" -- если протокол UDP
"sip:ip:port;transport=proto" -- если протокол не UDP
Обратите внимание, что WS и WSS представлены как transport=ws, что соответствует RFC IETF для SIP через WebSocket.

$sut — исходный адрес как полный URI
$sut — возвращает представление исходного адреса (ip, порт, proto) в виде полного SIP URI . Прото UDP также добавляется в качестве транспортного параметра.

Его значение выглядит так:

"sip:ip:port;transport=proto"
$td — в домен URI
$td — ссылка на домен в URI заголовка «Кому»

$tn - для отображения имени
$tn — ссылка на отображаемое имя заголовка «Кому»

$tt - пометить
$tt - ссылка на параметр тега заголовка 'To'

$tti - Начальный тег To
$tti — ссылка на параметр тега заголовка «Кому», как он был в ответе SIP на первоначальный запрос (например, 200ok на начальный INVITE).

Значение тега To в исходной транзакции может быть в теге From, если запрос в рамках диалога отправляется вызываемой стороной. Эта переменная определяет, кто отправил запрос в диалоговом окне, и возвращает правильное значение, которое было в теге To транзакции, инициирующей диалог.

Он экспортируется модулем rr и должен использоваться после `loose_route()`. Параметр append_fromtag должен быть установлен в 1, чтобы эта переменная возвращала правильное значение.

$tu — в URI
$tu — ссылка на URI заголовка «Кому»

$tU - на имя пользователя URI
$tU - ссылка на имя пользователя в URI заголовка 'To'

$Tb - метка времени запуска
$Tb - ссылка на временную метку unix времени запуска kamailio (время загрузки)

$Tf - время в формате строки - кэшировано
$Tf - форматированное время ссылочной строки

Примечание: системное время извлекается только один раз для каждого обработанного SIP-сообщения. Последующие вызовы $Tf для одного и того же SIP-сообщения вернут то же значение.

$TF - время в формате строки - текущее
$TF - форматированное время ссылочной строки

Примечание: системное время вычисляется для каждого вызова $TF. Последующие вызовы $TF для одного и того же SIP-сообщения могут возвращать разные значения.

$Ts — отметка времени Unix — кэшируется
$Ts - ссылка на отметку времени unix

Примечание: системное время извлекается только один раз для каждого обработанного SIP-сообщения. Последующие вызовы $Ts для одного и того же SIP-сообщения вернут то же значение.

$TS — метка времени Unix — текущая
$TS - ссылка на метку времени unix

Примечание: системное время вычисляется для каждого вызова $TS. Последующие вызовы $TS для одного и того же SIP-сообщения могут возвращать разные значения.

$ua - заголовок пользовательского агента
$ua - ссылка на поле заголовка пользовательского агента

$avp(id) - AVP
$avp(id) - значение AVP, идентифицированное 'id'.

$(avp(id)[N]) - представляет значение N-го AVP, идентифицированного 'id'.

 

 

 

четверг, 16 апреля 2026 г.

Памятка по RFC протокола Диаметра

 


Памятка по RFC проткола Диаметра

DIAMETER — сеансовый протокол, созданный, отчасти, для преодоления некоторых ограничений протокола RADIUS. 
Обеспечивает взаимодействие между клиентами в целях аутентификации, авторизации и учёта 
различных сервисов (AAA, англ. authentication, authorization, accounting). 
Является основным протоколом архитектуры IMS.

    Diameter Base Protocol
    RFC 3589 - Diameter Command Codes for Third Generation Partnership Project (3GPP) Release 5
    RFC 4004 - Diameter Mobile IPv4 Application
    RFC 4005 - Diameter Network Access Server Application
    RFC 4006 - Diameter Credit-control Application
    RFC 4072 - Diameter Extensible Authentication Protocol (EAP) Application
    
Архитектура. 
Diameter основан на peer-to-peer (P2P)-модели, 
где каждый узел может выступать как в роли клиента, так и в роли сервер

Транспортные протоколы. 
В отличие от RADIUS, который использует UDP, 
Diameter передаёт данные через TCP или SCTP, 
обеспечивая надёжную доставку и минимизируя потери данных

Структура сообщения. 
Пакет Diameter состоит из заголовка и переменного количества пар «атрибут — значение» 
(AVP — Attribute-Value-Pairs). AVP инкапсулируют протокольно-специфичные данные, 
а также информацию об аутентификации, авторизации или учёте.

Расширяемость. 
Базовый протокол позволяет добавлять новые команды, 
атрибуты или и то, и другое для поддержки новых технологий и сервисов

Безопасность. 
Хотя Diameter не включает шифрование в базовом виде, 
его можно защитить с помощью системы безопасности транспортного уровня (IPSec или TLS)

Diameter используется в различных сетевых функциях, например:

    Policy and Charging Rules Function (PCRF);
    Home Subscriber Server (HSS);
    Online Charging System (OCS).

среда, 15 апреля 2026 г.

Asterisk AMI скрипт по мониторингу для ZABBIX

 




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

#!/usr/bin/php -q
<?php
set_time_limit(100);
ob_implicit_flush(false);           // Turn off output buffering
error_reporting(E_ALL ^ E_NOTICE);
date_default_timezone_set("Europe/Moscow");
include_once('phpagi-asmanager.php');

define('USER', 'zabbix');
define('PASSWD', 'Pass123');

/*
In file  /etc/asterisk/manager.conf

[zabbix]
secret=Pass123
deny=0.0.0.0/0.0.0.0
permit=127.0.0.0/255.255.255.0
allowmultiplelogin=yes
;displayconnects=yes
read = all,system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate,message
write = all,system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate,message
writetimeout=5000
*/



function dump_events($event_code, $data, $server, $port) {

    switch($event_code){
        case 'successfulauth':
          // Ignore
          break;
        case 'devicestatechange':
          // Ignore
          break;
        case 'challengesent':

          // Ignore
          break;

        default:
          on_display($event_code, $data);
    }
}

function on_display($event_code, $data) {
    $time_now = date('H:i:s');
    print($time_now." Received event:\n".$event_code."\nData:\n");
    print_r($data);
    print("\n");
    return 0;
}


//------------------------------------------------------------------------------

$asm=new AGI_AsteriskManager();
if($asm->connect('127.0.0.1:5038', USER, PASSWD)) {
    $Ar_Req=$asm->send_request('Events',
        array('Eventmask'=>'ON')                  // All Events on
        );
    var_dump($Ar_Req);

    $asm->add_event_handler('*', 'dump_events');  // Event handler
    $asm->wait_response();                        // Wait Events
    $asm->disconnect();
}
else{
    print("Manager not connected\n");
}
exit;

вторник, 14 апреля 2026 г.

magnet-ссылка: что это и зачем?

 


 Magnet-ссылка (magnet: URI) — это гиперссылка, которая идентифицирует файл не по его расположению или имени, 
а по содержанию — по хеш-коду содержимого файла

xt (eXact Topic) — URN, содержащий хеш файла. 
Например, в сетях BitTorrent xt=urn:btih:<info-hash>, 
где <info-hash> — хэш метаданных торрента

dn (Display Name) — имя файла

xl (eXact Length) — размер файла в байтах

tr (TRacker) — URL трекера для клиентов BitTorrent

Ссылка подтверждает, что существует файл, 
который соответствует данному адресу, независимо от места его хранения. 
Для этого из файла по определённому алгоритму генерируется хеш-сумма, 
которая не содержит какой-либо информации о файле, а служит только для его идентификации

В отличии от torrent файлов, magnet является ссылкой которая указывает на содержимое файла (хеш)
Она и не содержит информацию ни о вас или трекере, в ней нет записей о месте где он был скачан/создан

Работает по принципу DHT
DHT (англ. distributed hash table — «распределённая хеш-таблица») — это класс децентрализованных распределённых систем поисковой службы, 
работающей подобно хеш-таблице. Как структура данных, хеш-таблица может представлять собой ассоциативный массив, 
содержащий пары (ключ-значение).

О ней расскажу в другой раз

Добавить в Firefox очень просто 
После нажатия на магнет ссылку появится окно с предложением выбрать программу для открытия данной ссылки. 
Выбираете просто свой торрент клиент

Это решение появилось на заре попыток блокировок торрентов в европе, да-да, не только РКН это любит
В Америке и Европе пытались и пытаются бороться с распространением контента

А по итогу очень интересный инструмент, который был популярен и в локальных сетях

Всем благ

 

 

 

 

 

 

 

 

 

 

 

 

понедельник, 13 апреля 2026 г.

История связи: мня опредили и мотивировали одновременно

 




     За свою рабочую карьеру, а это пости 20 лет уже, я переучивался раза 3-4,
хотя специализацию не менял
    Первый раз, это прям со студенческой скамьи, все чему учили устароло и
пошел в цифровую и IP-связь, уже шел астериск, передача данных, все в скайпе и тд - это был 2007
В который никто и никогда не вернется :)
    А вот прям переучиваться и жестко пришлось в 15-ом, когда сократили и был кризис и в стране,
и в отрасли. Вот тогда ушел TDM и пришла передача данных, сетевые технологии CCNA и многое другое
Потом докатилось окончательно в 16ом - тогда наступила эта VoIP, полноценный SIP, софтсвич и вот это все
стильное модное. Голос уже перешел в медиа, проводная связь уходит в прошлое
    А сейчас все идет переход дальше, можно сказать WebRTC - теперь все вместе и голос по SIP и видео, и
данные, текст, контент - все это идет одним транспортом, и снова переучиваешься
    Смотря на свои записи, что все пытаюсь по немногу переносить в Интернет, начал писать книгу одним
развитии и истории, как менялся телеком на моих глазах. Думал надо оно нет, как вот сразу попалась книга на глаза про
историю связи, которую здесь и прикладываю на память
    Значит это кому-то надо, значит это не зря

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

воскресенье, 12 апреля 2026 г.

EBITDA - вот эбитда, так эбитда полнейшая

 


 

 

    EBITDA (Earnings before interest, taxes, depreciation and amortization) — это прибыль компании до вычета амортизационных затрат, уплаты процентов по долгам и выплаты прямых налогов. Часто EBITDA называют показателем «грязной прибыли». Измеряют его в деньгах (рубли, доллары, евро).

     Думал такое от меня далеко, а сейчас все чаще и чаще слышу, обсуждается и косвено да, уже касается и меня

   По сути EBIDTA показывает, какую сумму компания может выплатить в качестве дивидендов — то, что как раз важно инвесторам — или пустить на погашение кредитов. 

 

Классические формулы:

  • EBITDA = чистая прибыль + налоги + процентные расходы + износ и амортизация
  • EBITDA = операционная прибыль + износ и амортизация

По сути это вот следующая формула расчёта: 

 

EBITDA = выручка – (прямые затраты + косвенные затраты) – (расходы на оплату труда + социальные налоги, взносы и сборы) – операционные налоги (за исключением НДС и налога на прибыль) + прочие доходы – прочие расходы

 

Повышайте компитенции, чтобы Ваша личная EBITDA только росла

 

 

 

 

 

 

 

суббота, 11 апреля 2026 г.

emupedia.net: ностальгия твоего детства во плоти

 

   Поделюсь сайтом с редро программами, ну конечно в основном играми. Даже пустил скупую мужскую слезу))

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

     Есть нюансы, каждый раз проигрывается все заново так что сидеть и неделями проходить Дьябло первый или Анрыл не выйдет, но удовлетворить ломку по легендарным играм в самый раз

    Для меня в старых играх спрятано нечто большее, чем просто память о том, когда я был вечно молодым, вечно пьяным) При мне была эпоха, когда игры рождались в жесткой ограниченности в ресурсах, а это, как я считаю, и есть залог шедевра. Тогда нельзя было запросить 100500 Гб памяти и терабайты места на хардах, поэтому шли на различные ухищрения, приходилось продумывать каждый ход, вывозить сюжетом. Мультиплеера не было поголовно, а созвониться с соседом - высший пилотаж, чаще с компами ходили или шли в клуб, но это не нынешние игры

    Поэтому если захотите сравнить два разных мира, современный киберпанк и ламповый ЭВМный, то прошу Вас сюда :-) 

  


 



Псевдопеременные в Kamailio

     http://www.kamailio.org/wiki/cookbooks/5.0.x/pseudovariables#tu_-_to_uri Псевдопеременные могут использоваться со многими модулями, сре...