Решил добавить полезные программы и расширения для работы с базой данной SQLite.
Она очень популярна для использования программ как для Android так и для Python/Django, PHP. Лично мне очень нравится расширение для Firefox, очень удобно с ним работать. Возможно и вам, что-нибудь понравиться.
Читать
Главный «Секрет» стабильного заработка.
О том, КАК СИЛЬНО Вы мечтаете решить материальные проблемы, погасить ненавистные кредиты, увеличить зарплату и ЗАЖИТЬ по-человечески — знаете только Вы.
Не позволяйте потоку забот похоронить свою мечту о лучшей жизни под тяжестью ежедневной рутины. Читать
Мониторинг состояния Asterisk с помощью MonAst
Осмотр возможностей
MonAst позиционируется разработчиками как инструмент мониторинга, который действует как панель оператора для Asterisk. Распространяется по лицензии BSD. Проект написан с использованием Python (демон для связи с Asterisk по AMI), PHP, JS (AJAX).
Из возможностей просмотра (в режиме real-time) — следующее:
- Работа с несколькими серверами (с помощью переключения между ними)
- Многопользовательский режим с указанием прав доступа
- Отображение пользователей и пиров (SIP, IAX, DAHDI, Khomp, etc…)
- Отображение активных каналов и вызовов (с именем канала и CallerID)
- Каналы конференции (с отображением подключённых пользователей)
- Припаркованные звонки (Parked Calls)
- Очереди (с отображением статистики, участников и ожидающих клиентов)
Из возможностей выполнения операций:
- Выполнение (инициация) вызовов
- Трансфер вызовов
- Сброс вызовов
- Паркование вызовов
- Прослушивание звонков (Spy Calls)
- Приглашение участников в конференцию
- Удаление участников конференции
- Добавление пользователей (или пиров) как участника любой очереди
- Удаление участников из очереди
- Постановка и снятие с паузы участников очереди
- Выполнение CLI команд
Как видно — список возможностей достаточно обширный.
Установка
Подопытной системой у нас будет чистая Ubuntu 10.10 с базовыми программами и обновлениями. MonAst не обязательно ставить на хосте с Asterisk. У меня, к примеру, MonAst стоит локально на ноутбуке — и я прекрасно мониторю все наши 6 серверов с Asterisk.
Прежде чем приступить к установке MonAst — пробежимся по требованиям.
Так как демон, с помощью которого происходит обмен между Asterisk и MonAst (посредством AMI — Asterisk Manager API) написан на Python, то первым делом проверяем его присутствие в системе:
it@ubuntu-test ~ $ python --version
Python 2.6.6
Если видим нечто подобное — значит все в порядке. Если по каким то причинам его нет — выполняем команду:
it@ubuntu-test ~ $ sudo apt-get update && sudo apt-get install python
Двигаемся дальше.
Так как все это будет отображаться через web-интерфейс, то нужно иметь установленный http сервер с поддержкой php, а так же php-pear. Если ранее данного комплекта не стояло — выполняем команду (дополнительно поставим mc — для удобства навигации и редактирования):
it@ubuntu-test ~ $ sudo apt-get install apache2 php5 php-pear mc
Ну и напоследок — установка зависимостей для обсуждаемого продукта. Этот список у нас невелик:
- Twisted Python 10.1+
- zope.interface 3.6+
- Starpy SVN-Trunk
- PHP PEAR Packages: (HTTP_Client)
Пакет zope.interface уже стоял в системе (был в наличии из коробки).
Ставим пакет HTTP_Client:
it@ubuntu-test:/usr/src$ sudo pear install HTTP_Client
WARNING: "pear/HTTP_Client" is deprecated in favor of "pear/HTTP_Request2"
WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-update pear.php.net" to update
WARNING: "pear/HTTP_Request" is deprecated in favor of "pear/HTTP_Request2"
WARNING: "pear/Net_URL" is deprecated in favor of "pear/Net_URL2"
downloading HTTP_Client-1.2.1.tgz ...
Starting to download HTTP_Client-1.2.1.tgz (10,202 bytes)
.....done: 10,202 bytes
downloading HTTP_Request-1.4.4.tgz ...
Starting to download HTTP_Request-1.4.4.tgz (17,109 bytes)
...done: 17,109 bytes
downloading Net_URL-1.0.15.tgz ...
Starting to download Net_URL-1.0.15.tgz (6,303 bytes)
...done: 6,303 bytes
downloading Net_Socket-1.0.10.tgz ...
Starting to download Net_Socket-1.0.10.tgz (5,429 bytes)
...done: 5,429 bytes
install ok: channel://pear.php.net/Net_URL-1.0.15
install ok: channel://pear.php.net/Net_Socket-1.0.10
install ok: channel://pear.php.net/HTTP_Request-1.4.4
install ok: channel://pear.php.net/HTTP_Client-1.2.1
Как видим — в процессе установки говорит об устаревании пакета и предлагает поставить более новый:
it@ubuntu-test:/usr/src$ sudo pear install HTTP_Request2
Пакеты Twisted и StarPy будем ставить из исходников. Но при установке выявились еще зависимости, которые и исправляем (попутно перейдем в режим суперпользователя):
it@ubuntu-test:~$ sudo su
root@ubuntu-test:~$ cd /usr/src/
root@ubuntu-test:/usr/src# wget http://pypi.python.org/packages/source/T/Twisted/Twisted-12.0.0.tar.bz2#md5=cf49a8676c21c50faf1b42b528049471
root@ubuntu-test:/usr/src# wget http://downloads.sourceforge.net/project/starpy/starpy/1.0.0a13/starpy-1.0.0a13.tar.gz
root@ubuntu-test:/usr/src# tar -xvf Twisted-12.0.0.tar.bz2
root@ubuntu-test:/usr/src# tar -xvf starpy-1.0.0a13.tar.gz
root@ubuntu-test:/usr/src# apt-get install build-essential gcc-4.5 libssl-dev python-dev
root@ubuntu-test:/usr/src# cd Twisted-12.0.0
root@ubuntu-test:/usr/src/Twisted-12.0.0# python setup.py install
Если видим надпись «Finished processing dependencies for Twisted==12.0.0» — значит установка прошла успешно и переходим дальше. Если выскакивает ошибка — то скорее не хватает какого-то компонента. Проверте по списку — все ли зависимости установлены? Идем дальше:
root@ubuntu-test:/usr/src/Twisted-12.0.0# cd ..
root@ubuntu-test:/usr/src# cd starpy-1.0.0a13
root@ubuntu-test:/usr/src/starpy-1.0.0a13# python setup.py install
root@ubuntu-test:/usr/src/starpy-1.0.0a13# cd ..
Ну и самый главный виновник торжества. На момент написания актуальная версия — 3.0b4:
root@ubuntu-test:/usr/src# wget http://downloads.sourceforge.net/project/monast/Monast%20for%20Asterisk%201.4%2C%201.6%20and%201.8/3.0b4/monast-3.0b4.tar.gz
root@ubuntu-test:/usr/src# tar -xvf monast-3.0b4.tar.gz
root@ubuntu-test:/usr/src# cd monast-3.0b4
root@ubuntu-test:/usr/src/monast-3.0b4# ./install.sh
В процессе установки скрипт задаст пару вопросов относительно путей. Если предложенные им варианты устраивают — соглашаемся. Иначе прописываем свои данные. Я лишь изменил путь, куда ложатся .php файлы
MonAst HTML path [/var/www/html/monast]: /var/www/asterisk/monast/
Может показаться что на этом установка закончена. Но не тут то было. Стартовый скрипт /etc/init.d/monast ставится лишь для систем SuSE, RedHat, Debian, Gentoo, Slackware, FreeBSD. Но не Ubuntu и ей подобные. Потому копируем скрипт от Debian и добавляем его в автозагрузку:
root@ubuntu-test:/usr/src/monast-3.0b4# cp contrib/init.d/rc.debian.monast /etc/init.d/monast
root@ubuntu-test:/usr/src/monast-3.0b4# chmod 755 /etc/init.d/monast
root@ubuntu-test:/usr/src/monast-3.0b4# update-rc.d monast defaults 91 60
Вот теперь установка у нас окончена. Можно переходить к настройке.
Настройка
Перво наперво нужно выполнить настройку самого Asterisk, дабы сабжевое ПО могло успешно подключится и обмениваться информацией. На сервере с Asterisk переходим по пути /etc/asterisk/ и правим файл manager.conf. Если серверов несколько — делаем подобные поправки на нужных.
root@asterisk ~ $ mcedit /etc/asterisk/manager.conf
;
; AMI - The Asterisk Manager Interface
;
[general]
enabled = yes ; Активируем AMI
port = 5038 ; Порт, по которому к данному сервису будет подключаться MonAst
bindaddr = 0.0.0.0 ; Прослушиваем все интерфейсы в системе для принятия подключения
displayconnects = yes ; Показывать в консоли Asterisk о факте подключения
webenabled = no ; Выключаем встроенный в Asterisk static_http
allowmultiplelogin = yes ; Разрешаем вход вход под одним и тем же пользователем с разных мест.
timestampevents = yes ; Добавлять метку времени для событий
; debug = on ; Можно включить отладочный режим для сообщений AMI
[monast_user]
secret=qwerty123 ; Пароль для подключения
deny=0.0.0.0/0.0.0.0 ; Запрещаем подключение с любого адреса
permit=127.0.0.1/255.255.255.0 ; И постепенно разрешаем нужные
permit=192.168.1.10/255.255.255.0 ; Так разрешаем конкретный хост
permit=192.168.2.0/255.255.255.0 ; А вот так можно разрешить подсеть
writetimeout=100 ; Таймаут для посылки команд
; Разрешения для данного пользователя. Можно указать all, но так наглядней
read=system,call,log,verbose,command,agent,user,config,originate,reporting
write=system,call,log,verbose,command,agent,user,config,originate,reporting
После чего перезагрузим конфигурацию Asterisk для модуля manager:
root@asterisk$ asterisk -rx "manager reload"
На этом настройка Asterisk закончена. Переходим к конфигурации самого MonAst’а.
Файл с параметрами находится по пути /etc/monast.conf. Его и правим. Скажу наперед — сложностей в настройке не возникло, приведенные в файле комментарии четко описывают тот или иной параметр. Но для примера приведу свой пример файла
root@ubuntu-test:/usr/src/monast-3.0b4# cd /etc/
root@ubuntu-test:/etc# mcedit monast.conf
# Copyright (c) 2008-2011, Diego Aguirre
# All rights reserved.
##
## Global Section
##
[global]
# Bind client connetions on host:port
bind_host = 127.0.0.1 ; Разрешаем подключения с локального хоста
bind_port = 5039 ; Порт для подключения к демону.
# Use client autentication on browser
auth_required = true ; Указываем сто аутентификация обязательна
## ===================================
##
## Servers Definitions
##
[server: Server1] ; Параметры для первого сервера
hostname = 192.168.1.1
hostport = 5038
username = monast_user
password = qwerty123
# Default user context
default_context = default
# Context to use in transfer calls
transfer_context = default
# Context and prefix for meetme
meetme_context = default
meetme_prefix =
[server: Server2] ; Параметры для второго сервера
hostname = 192.168.2.1
hostport = 5038
username = monast_user
password = qwerty123
# Default user context
default_context = default
# Context to use in transfer calls
transfer_context = default
# Context and prefix for meetme
meetme_context = default
meetme_prefix =
## ===================================
##
## Peers Definitions
##
[peers]
# sort peers (options: channel, callerid)
sortby = callerid
# default show/hide
default = show
# hide peer when default = show
;<Server Name>/SIP/user-1 = hide
# show peer when default = hide
;<Server Name>/SIP/user-2 = show
# always show peer.
;<Server Name>/SIP/user-3 = force
# force CallerID (only in forced mode)
;<Server Name>/SIP/user-4 = force,Diego Aguirre <5555>
# Create peer groups
;<Server Name>/@group/Group 1 = SIP/user-1,SIP/user-2
;<Server Name>/@group/Group 2 = SIP/user-3,SIP/user-4
## ===================================
##
## Meetmes / Conferences Definitions
##
[meetmes]
# default show/hide
default = hide
# hide meetme when default = show
;<Server Name>/1234 = hide
# show meetme when default = hide
;<Server Name>/1234 = show
# always show meetme
;<Server Name>/1234 = force
## ===================================
##
## Queues Definitions
##
[queues]
# defualt show/hide
default = hide
# show queue queue01
;<Server Name>/queue01 = show
# show queue queue02 with display name Support
;<Server Name>/queue02 = show,Support
# hide queue queue03
;<Server Name>/queue03 = hide
# Map Member name
;<Server Name>/@member/SIP/user-1 = Diego Aguirre <5555>
## ===================================
## Define users and roles to use on auth_required is set to true
## roles must be:
## originate : user can originate, transfer, park and drop calls
## agent : user cans add, remove, pause and unpause members on queues
## command : user can execute asterisk cli commands
## spy : user can start a spy
[user: admin] ; Мего-админ
secret = SuperPuperDruper
roles = originate,queue,command,spy
servers = ALL
[user: manager] ; Пользователь с возможностью просмотра обеих (всех) серверов
secret = password
roles = originate
servers = ALL
[user: server1] ; Пользователь с возможностью просмотра одного (первого) серверов
secret = 12345
roles = originate
servers = Server1
[user: server2] ; Пользователь с возможностью просмотра и выполнения команд на одном (втором) сервере
secret = 54321
roles = originate,command
servers = Server2
Сохраняем изменения и перезагружаем демон:
root@ubuntu-test:/etc# /etc/init.d/monast restart
Все. Можно подключаться и проверять. Открываем браузер и в строке адреса вбиваем: http://localhost/asterisk/monast/
Если ставили «auth_required = true» то вводим логин, пароль — и наслаждаемся рабочим инструментом 🙂

Важное замечание. В режиме «без аутентификации» все, кто работают в панели оператора MonAst — имеют полные права, т.е. являются «суперпользователями». А как мы знаем «Оружие, данное в неумелые руки, может навредить». Будьте внимательны.
Так же в файле /var/www/asterisk/monast/lib/config.php находятся параметры адреса и порта, где работает демон monast.py, параметры отображение вкладок debug и cli, а так же некоторых не менее интересных параметров.
Обзор возможностей
Теперь же пробежимся по возможностям данного программного продукта.
После входа на web-интерфейс мы видим несколько вкладок. А если быть точнее:
- Mixed Pannels — Вкладка с практически всем разделами сразу. Удобство заключается в том, что можно отобразить лишь нужные и, не переключаясь, видеть необходимую информацию в одном месте.
- Peers/Users — Просмотр и управление достуными пирами и пользователями.
- Meetme Rooms — Просмотр и управление конференциями
- Channels/Calls — Просмотр и управление активными вызовами и поднятыми каналами.
- Parked Calls — Просмотр и управление припаркованными вызовами
- Queues — Просмотр и управление очередью звонков
- Asterisk CLI — Командная строка Asterisk. Если у пользователя есть права выполнения команд в консоли, то именно здесь можно ввести нечто схожее с «core show version» 🙂
Разобраться в возможностях не составляет труда и, возможно, даже лучше будет если Вы сами пробежитесь и опробуете доступные функции — так вы четко будете понимать что и как работает. Но я все таки опишу парочку интересных из них 🙂
Originate call (инициирование вызова). Из названия функции ясно — можно соединить внутреннего абонента с каким либо номером (если он, номер, сможет обработаться Вашим dialplan’ом). Для выполнения функции нужно нажать правой кнопкой мыши (далее по тексту — пкм) на нужном аккаунте и выбрать соответствующий пункт. В появившемся окне вводим нужный номер и, вуаля — у выбранного человека звонит телефонный аппарат, он берет трубку и Asterisk соединяет его с выведенным нами номером. Так же можно перетащить мышкой один аккаунт на другой и, согласившись — инициировать соединение между ними.
Meetme Rooms (комната конференции). Перейдя в данный раздел можно управлять уже созданными конференциями, либо создать новую и пригласить туда определённых участников. Для создания своей конференции — переходим в соответствующий раздел, нажимаем «Create Dynamic Meetme» и в окне вводим запрашиваемую информацию. Нажали «Ок» — и процесс пошел-поехал 🙂
Spy (прослушивание вызова). Что она делает? Из названия можно понять — дает возможность подключится к выбранному разговору и прослушать речевой поток. Функция может быть полезна при использовании в call-центрах для контроля и проверки агентов. При этом в процессе разговора собеседники даже не подозревают о факте прослушивания. По крайней мере я, тестируя данную возможность, никакого сигнала или уведомления не слышал. Для того, чтобы пользователь панели имел право на прослушивание — нужно чтобы в поле roles его прав доступа присутствовало spy. Потому для того, чтоб ограничить использование данной функции с нехорошим умыслом — включайте аутентификацию для доступа к панели и давайте права на ее использование только доверенным для этого пользователям. Начальнику отдела, например 🙂
Заключение
MonAst, как и альтернативные проекты с подобной функциональностью (FOP, Links и пр.) однозначно имеет право на существование и, соответственно, использование в рабочем процессе.
Простота использования, относительная лёгкость в установке и настройке, мониторинг нескольких серверов с одного места — все это, в большинстве случаев, будет более чем достаточно.
Ссылки
- Официальный сайт проекта: http://monast.sourceforge.net/
- Страница проекта Twisted Python: http://twistedmatrix.com
- Страница проекта Starpy for Twisted: http://sourceforge.net/projects/starpy/
Установка Asterisk 13 на Debian 8
В сегодняшней статье мы расскажем, как установить Asterisk 13 на Debian 8
Установим зависимости, которые будут необходимы для корректной работы Asterisk
apt-get install -y build-essential autoconf libncurses5-dev libssl-dev libxml2-dev libsqlite3-dev libmysqlclient-dev curl mpg123 libxml2 libxml2-dev libaudiofile-dev subversion sox libsox-fmt-all uuid-dev libjansson-dev libiksemel-dev libssl-dev libtiff5-dev mysql-client libmyodbc lame linux-headers-`uname -r` mysql-server mysql-client
При установки у вас нужно будет задать пароль для пользователя root в MySQL

Запустим и включим автозагрузку MySQL
/etc/init.d/mysql restart systemctl enable mysql
Переходим в /usr/src/ скачиваем, распаковываем и компилируем pjproject
cd /usr/src wget http://www.pjsip.org/release/2.4.5/pjproject-2.4.5.tar.bz2 tar -xjvf pjproject-*.tar.bz2 rm -f pjproject-*.tar.bz2 cd pjproject-* CFLAGS='-DPJ_HAS_IPV6=1' ./configure --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr make dep && make && make install
Устанавливаем DAHDI
cd /usr/src wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz tar xvfz dahdi-linux-complete-current.tar.gz rm -f dahdi-linux-complete-current.tar.gz cd dahdi-linux-complete-* make all && make install && make config
Устанавливаем LibPRI
cd /usr/src wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz tar xvfz libpri-current.tar.gz rm -f libpri-current.tar.gz cd libpri-* make && make install
Устанавливаем SpanDSP
apt-get install -y libspandsp2 libspandsp-dev
Теперь можно перейти к установке Asterisk 13
cd /usr/src wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
Распаковываем
tar xvfz asterisk-13-current.tar.gz rm -f asterisk-13-current.tar.gz cd asterisk-13*
Начнем установку Asterisk 13. Необходимые модули устанавливаем командой make menuselect.
contrib/scripts/get_mp3_source.sh contrib/scripts/install_prereq install ./configure make menuselect
По большей части, все необходимые модули уже включены. Вы можете что-то добавить или удалить. как минимум нужны следующие компоненты

Add-ons: format_mp3. Если будите использовать связку с mysql и собиарть cdr то следуюет добавить res_config_mysql,app_myql,cdr_mysql
Core Sound Packages: CORE-SOUNDS-EN-(GSM), CORE-SOUNDS-RU-(GSM), CORE-SOUNDS-EN-(WAV), CORE-SOUNDS-RU-( WAV)
Extras Sound Packages: EXTRA-SOUNDS-EN-GSM, EXTRA-SOUNDS-EN-WAV
Продолжим установку
make && make install && make config && make samples && ldconfig
Сделаем Русский язык по умолчанию:
sed -i 's/defaultlanguage = en/defaultlanguage = ru/' /etc/asterisk/asterisk.conf sed -i 's/;language=en/language=ru/' /etc/asterisk/*.conf
Создаем пользователя и даем права
adduser --system --group --home /var/lib/asterisk --no-create-home --gecos "Asterisk PBX" asterisk
chown -R asterisk:asterisk /var/lib/asterisk/ chown -R asterisk:asterisk /var/log/asterisk/ chown -R asterisk:asterisk /var/run/asterisk/ chown -R asterisk:asterisk /var/spool/asterisk/ chown -R asterisk:asterisk /etc/asterisk
Раскомментируем в /etc/default/asterisk
AST_USER="asterisk" AST_GROUP="dialout"
Запускам Asterisk
service asterisk start
Видеолекции курса Java
Видеолекции курса Java.
Лектор: Алексей Владыкин.
Рекомендуемая литература по курсу:
Первоисточники:
Лекция 1. Введение в Java.
- История и эволюция Java
- Особенности Java
- Разновидности Java
- Экосистема Java
- Неформальное знакомство с языком
- Стандартные инструменты JDK
Скачать: Презентация
Лекция 2. Примитивные типы в Java.
- Примитивные и ссылочные типы
- Тип boolean
- Тип char
- Целочисленные типы
- Вещественные типы
- Преобразование типов
Посмотреть видео на сайте Лекториума
Скачать: Презентация
Лекция 3. Массивы и строки в Java.
- Массивы
- объявление, создание, инициализация, индексация
- одномерные и многомерные, представление в памяти
- java.util.Arrays
- Строки
- строковые литералы
- операции со строками
- java.lang.StringBuilder
- поддержка различных кодировок
- регулярные выражения
Посмотреть видео на сайте Лекториума
Скачать: Презентация
Лекция 4. Объекты, классы и пакеты в Java.
- Основы ООП
- Объявление класса
- Использование класса
- Наследование
- Пакеты
- Модификаторы доступа
- Вложенные классы
Посмотреть видео на сайте Лекториума
Скачать: Презентация
Лекция 5. Управляющие конструкции и исключения в Java.
- Условные операторы (if, switch)
- Циклы (for, while, do)
- Операторы break и continue, метки
- Исключения, типы исключений
- Конструкция try/catch/finally, try с ресурсами, multicatch
Посмотреть видео на сайте Лекториума
Скачать: Презентация
Лекция 6. Стандартная библиотека: java.io + java.nio.file.
- Доступ к файловой системе: java.io.File и java.nio.file.*
- Потоки байт: InputStream, OutputStream
- Потоки символов: Reader, Writer
- java.io.StreamTokenizer и java.util.Scanner
Посмотреть видео на сайте Лекториума
Скачать: Презентация
Лекция 7. Стандартная библиотека: java.util.
- Collections Framework
- Списки
- Множества
- Ассоциативные массивы
- Generics
Посмотреть видео на сайте Лекториума
Скачать: Презентация
Лекция 8. Стандартная библиотека: java.lang.reflect.
- Reflection API
- Аннотации
Посмотреть видео на сайте Лекториума
Скачать: Презентация
Лекция 9. Разработка многопоточных приложений на Java, часть 1.
- Общие сведения о параллелизме
- Управление потоками
- Синхронизация потоков
- Модель памяти
Посмотреть видео на сайте Лекториума
Скачать: Презентация
Демки
Лекция 10. Разработка многопоточных приложений на Java, часть 2.
- Атомарные типы
- Примитивы синхронизации
- Коллекции
- ExecutorService
- ForkJoinPool
Посмотреть видео на сайте Лекториума
Скачать: Презентация
Демки
Лекция 11. Модульное тестирование на Java.
- Основные идеи
- JUnit
- Mockito
- Java Logging API
Посмотреть видео на сайте Лекториума
Скачать: Презентация
Демки
Лекция 12. Разработка сетевых приложений на Java.
- Сокеты
- URI и URL
- Библиотека Netty
Посмотреть видео на сайте Лекториума
Скачать: Презентация
Демки
Дополнительные материалы:
Личная страница лектора курса.
Автор: Roman Brovko
Влияние солнечного ультрафиолета на кожу часть — 1

Под воздействием УФО может образоваться красная сеть из лопнувших капилляров (телеангиэктазии)



