По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
В сегодняшней статье поговорим о модуле Sound Languages, который позволяет создать глобальную языковую настройку для всех голосовых записей оповещения на сервере. Система будет использовать один единственный язык озвучивания, указанный в модуле до тех пор, пока он не будет изменен иными правилами обработки вызовов, такими как: Входящие маршруты (Inbound Routes), Внутренние номера (Extensions), или в модуле Languages (не стоит путать с Sound Languages) Кроме того, модуль позволяет добавлять или удалять дополнительные языковые настройки с разными параметрами кодирования. Доступно несколько стандартных наборов озвучивания голосовых оповещений: Английский (Американский) Английский (Австралийский) Английский (Британский) Испанский Французский Итальянский Японский Русский Система имеет сотни встроенных голосовых оповещений, которые предназначены как для пользователей, так и для абонентов входящих вызовов. Эти записи делятся соответственно на core-sounds и extra-sounds. Настройка Перейдём в интерфейс FreePBX 13 и рассмотрим возможности модуля Sound Languages. Для того, чтобы попасть в модуль, переходим по следующему пути Admin -> Sound Languages. Перед вами откроется список имеющихся core-sounds и extra-sounds Чтобы установить глобальную настройки языка для всех системных голосовых записей, нужно в выпадающем окне справа выбрать Global Language Выбрать необходимый язык из списка, затем нажать кнопку Submit и обязательно Apply Config После чего, все системные голосовые записи будут проигрываться на выбранном языке. Модуль также даёт возможность создать собственный набор системных голосовых записей. Для этого, необходимо создать на сервере специальный “языковой код” (Language Code), который, в свою очередь создаст новую директорию в /var/lib/asterisk/sounds с соответствующим именем. Это позволит выбирать новый набор записей в других модулях. Чтобы добавить новый “пользовательский” языковой набор, необходимо в выпадающем меню справа выбрать Custom Language и нажать + Add Custom Language как показано ниже. Далее присвоить новому набору код и указать описание. После чего при помощи способа drag&drop или кнопки Browse можно загружать новые записи. При необходимости, с помощью опции Convert To можно конвертировать загруженную запись в нужный формат. Новый языковой набор появится в списке А также, его теперь можно установить в качестве глобальной настройки Если зайти на сервер по SSH и проверить директорию /var/lib/asterisk/sounds , то мы увидим там наш новый пользовательский языковой набор “cn” вместе с наборами по умолчанию “en” и “ru” [root@localhost ~]# cd /var/lib/asterisk/sounds [root@localhost sounds]# ls cn custom en intercom.wav ru silence-30.gsm silence-5.gsm [root@localhost sounds]# Можно также посмотреть какие записи уже загружены в новый языковой набор: [root@localhost sounds]# cd /var/lib/asterisk/sounds/cn [root@localhost cn]# ls greetings.wav [root@localhost cn]# Другой способ добавления записей в новую директорию – это использование модуля System Recordings. Если добавлять записи через данный модуль, то они будут добавляться в директорию “custom”, внутри новой пользовательской директории (в нашем случае - cn) [root@localhost cn]# cd /var/lib/asterisk/sounds/cn/custom [root@localhost custom]# ls cn1.wav [root@localhost custom]#
img
Перед тем как начать чтение этой статьи, советуем ознакомиться с материалом про расчет пути по алгоритму Bellman - ford. Алгоритм диффузного обновления (Diffusing Update Algorithm -DUAL) - один из двух обсуждаемых здесь алгоритмов, изначально предназначенных для реализации в распределенной сети. Он уникален тем, что также удаляет информацию о достижимости и топологии, содержащуюся в конечном автомате алгоритма. Другие обсуждаемые здесь алгоритмы оставляют удаление информации на усмотрение реализации протокола, а не рассматривают этот аспект работы алгоритма внутри самого алгоритма. К 1993 году Bellman-Ford и Dijkstra были реализованы как распределенные алгоритмы в нескольких протоколах маршрутизации. Опыт, полученный в результате этих ранних реализаций и развертываний, привел ко "второй волне" исследований и размышлений о проблеме маршрутизации в сетях с коммутацией пакетов, что привело к появлению вектора пути и DUAL. Поскольку DUAL разработан как распределенный алгоритм, лучше всего описать его работу в сети. Для этой цели используются рисунки 8 и 9. Чтобы объяснить DUAL, в этом примере будет прослеживаться поток A, изучающего три пункта назначения, а затем обрабатываются изменения в состоянии доступности для этих же пунктов назначения. В первом примере будет рассмотрен случай, когда есть альтернативный путь, но нет downstream neighbor, второй рассмотрит случай, когда есть альтернативный путь и downstream neighbor. На рисунке 8 изучение D с точки зрения A: A узнает два пути к D: Через H стоимостью 3. Через C стоимостью 4. A не узнает путь через B, потому что B использует A в качестве своего преемника: A - лучший путь B для достижения D. Поскольку B использует путь через A для достижения D (пункта назначения), он не будет анонсировать маршрут, который он знает о D (через C) к A. B выполнит split horizon своего объявления D на A, чтобы предотвратить образование возможных петель пересылки. A сравнивает доступные пути и выбирает кратчайший путь без петель: Путь через H помечен как преемник. Возможное расстояние устанавливается равным стоимости кратчайшего пути, равной 3. A проверяет оставшиеся пути, чтобы определить, являются ли какие-либо из них downstream neighbors: Стоимость C составляет 3. A знает это, потому что C объявляет маршрут к D со своей локальной метрикой, равной 3. A сохраняет локальную метрику C в своей таблице топологии. Следовательно, A знает локальную стоимость в C и локальную стоимость в A. 3 (стоимость в C) = 3 (стоимость в A), поэтому этот маршрут может быть петлей, следовательно, C не удовлетворяет условию выполнимости. C не помечен как downstream neighbors. Downstream neighbors в DUAL называются возможными преемниками. Предположим, что канал [A, H] не работает. DUAL не полагается на периодические обновления, поэтому A не может просто ждать другого обновления с достоверной информацией. Скорее A должен активно следовать альтернативному пути. Таким образом, это диффузный процесс обнаружения альтернативного пути. Если канал [A, H] не работает, учитывая только D: A проверяет свою локальную таблицу на предмет возможных преемников (Downstream neighbors). Возможных преемников нет, поэтому A должен найти альтернативный путь без петель к D (если он существует). A отправляет запрос каждому соседу, чтобы определить, есть ли какой-либо альтернативный путь без петель к D. В C: Преемником C является E (не A, от которого он получил запрос). Стоимость E ниже, чем стоимость A для D. Следовательно, путь C не является петлей. C отвечает со своей текущей метрикой 3 на A. В B: А - нынешний преемник Б. Посредством запроса B теперь обнаруживает, что его лучший путь к D потерпел неудачу, и он также должен найти альтернативный путь. Обработка B здесь не расписывается, а предоставляется выполнить самостоятельно. B отвечает A, что у него нет альтернативного пути (отвечает бесконечной метрикой). A получает эти ответы: Путь через C - единственный доступный, его стоимость 4. A отмечает путь через C как его преемника. Других путей к D нет. Следовательно, нет подходящего преемника (downstream neighbor). На рисунке 9 пункт назначения (D) был перемещен с H на E. Это будет использоваться во втором примере. В этом примере есть возможный преемник (downstream neighbor). Изучение D с точки зрения A: A узнает два пути к D: Через H стоимостью 4. Через C стоимостью 3. A не узнает никакого пути через B: У B есть два пути к D. Через C и A стоимостью 4. В этом случае B использует как A, так и C. B выполнит split horizon свого объявления D на A, потому что A помечен как преемник. A сравнивает доступные пути и выбирает кратчайший путь без петель: Путь через C отмечен как преемник. Возможное расстояние устанавливается равным стоимости кратчайшего пути, равной 3. A проверяет оставшиеся пути, чтобы определить, являются ли какие-либо из них downstream neighbors: Стоимость H составляет 2. 2 (стоимость в H) = 3 (стоимость в A), поэтому этот маршрут не может быть петлей. Следовательно, H удовлетворяет условию выполнимости. H отмечен как возможный преемник (downstream neighbors). Если канал [A, C] не работает, просто рассматривая A: A проверит свою таблицу локальной топологии на предмет возможного преемника. Возможный преемник существует через H. A переключает свою локальную таблицу на H как лучший путь. Распространяющееся обновление не запускалось, поэтому пути не были проверены или пересчитано. Следовательно, допустимое расстояние изменить нельзя. Он остается на 3. A отправляет обновление своим соседям, отмечая, что его стоимость достижения D изменилась с 3 до 4. Как вы можете видеть, обработка, когда существует возможный преемник, намного быстрее и проще, чем без него. В сетях, где был развернут протокол маршрутизации с использованием DUAL (в частности, EIGRP), одной из основных целей проектирования будет ограничение объема любых запросов, генерируемых в случае отсутствия возможного преемника. Область запроса является основным определяющим фактором того, как быстро завершается двойной алгоритм и, следовательно, как быстро сходится сеть. На рисунке 10 показан базовый законченный автомат DUAL. Вещи, входящие в route gets worse (ухудшение маршрута), могут представлять собой: Отказ подключенного канала или соседа Получение обновления для маршрута с более высокой метрикой Получение запроса от текущего преемника Получение нового маршрута от соседа Обнаружен новый сосед, а также маршруты, по которым он может добраться Получение всех запросов, отправленных соседям, когда маршрут ухудшается
img
Для того, чтобы нормально пользоваться инструментом Terraform, нам понадобится текстовый редактор с плагином, понимающим язык разметки Terraform (HCL). Это необходимо для того, чтобы было удобно писать код для поднятия инфраструктуры. На самом деле, код можно писать в каком угодно текстовом редакторе, но наиболее удачно подходит текстовый редактор Atom. Для Windows установка очень простая. Идем на сайт www.atom.io, сайт автоматически определяет версию операционной системы и нажимаем на кнопку скачать. Дальнейшая инсталляция под операционную систему Windows очень простая - запуск файла и нажатие несколько раз кнопки Далее. В случае если мы хотим работать из-под операционной системы Linux, заходя на сайт мы видим, что сайт предлагает скачать нам установочные пакеты в вариации deb и rmp. Но возможно пойти нам и другим путем. Заходим на сайте в документацию, находим Atom Flight Manual. Далее выбираем с левой стороны Installing Atom, а вверху тип операционной системы. Далее мы видим описание инсталляций для разных ОС семейства Linux. Для Ubuntu и для CentOS. При инсталляции на Ubuntu: wget -qO - https://packagecloud.io/AtomEditor/atom/gpgkey | sudo apt-key add - Скачиваем ключ и помещаем в хранилище. sudo sh -c 'echo "deb [arch=amd64] https://packagecloud.io/AtomEditor/atom/any/ any main" > /etc/apt/sources.list.d/atom.list' Обновляем список депозитарий командой apt update, а также обновляем сам репозиторий. Ну собственно и последующая инсталляция непосредственно самого текстового редактора Atom. sudo apt-get install Atom Инсталляция на CentOS в принципе аналогичная. Скачиваем и добавляем ключ. sudo rpm --import https://packagecloud.io/AtomEditor/atom/gpgkey sudo sh -c 'echo -e "[Atom] name=Atom Editor baseurl=https://packagecloud.io/AtomEditor/atom/el/7/$basearch enabled=1 gpgcheck=0 repo_gpgcheck=1 gpgkey=https://packagecloud.io/AtomEditor/atom/gpgkey" > /etc/yum.repos.d/atom.repo' Теперь мы можем воспользоваться пакетным менеджером yum или dnf sudo dnf install Atom sudo dnf install atom-beta Или если установлен альтернативный пакетный менеджер yum или операционная система CentOS 7, можно скачать пакет в rpm формате https://atom.io/download/rpm и установить sudo yum install -y atom.x86_64.rmp sudo dnf install -y atom.x86_64.rpm После данных манипуляций у нас установится текстовый редактор Atom. Конечно, установка имеет смысл на машину с графическим интерфейсом пользователя. Его можно найти по зеленой иконке, как на скриншоте. Далее, самая интересная, часть данной статьи. Если мы просто вставим кусочек кода от TerraForm, то мы увидим, что он ничем не отличается от обычного текста. Все преимущества данного текстового редактора раскрываются в использовании плагинов для Terraform. Для установки плагина, который различает написанный код Terraform, нам необходимо зайти в Edit, в данном открывшемся меню найти Preferences. В следующем открывшемся окне выбираем Install. В правой части после данной операции появляется строка поиска для инсталляции дополнительных пакетов (Plugins). С помощью данного поиска находим пакет по запросу Terraform. Пакетов будет найдено достаточно много. Можно посмотреть описание и версию пакетов и сколько раз был скачен данный пакет. Я рекомендую выбрать пакет language-terraform. Для большинства данного пакета будет совершенно достаточно. Данный пакет дает не только красивую подсветку кода, но и много других функций. Еще для удобства работы можно установить terraform-fmt. Данный пакет не столь популярен, но за то он позволяет удобно форматировать код Terraform при написании. А именно, код будет выравниваться при нажатии сочетания клавиш Ctrl+S для сохранения изменений в файле. Для того, чтобы плагины начали работать, необходимо перезапустить текстовый редактор. И второй важный момент переименовать файл рабочий в файл с разрешением *.tf.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59