По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Данная тема наиболее важная из всех пред идущих, в ней пойдет речь об управлении пакетами. Установка, удаление, обновление пакетов. Поиск пакетов и их зависимостей. Получение полной информации о пакетах. Dpkg утилита управления пакетами в Debian системах и во всех операционных системах которые от нее пошли это mint, Ubuntu и другие. Утилита достаточно большая и работать с ней не очень удобно, поэтому обычно предпочитают использовать более распространённый пакетный менеджер apt. Сама утилита имеет большое количество ключей, в добавок значение ключей зависит от регистра ключа. Заглавная буква в ключе или прописная, имеют разный функционал. Основные ключи: -I перечень пакетов в системе; -L перечень файлов в пакетах; -s информация о статусе пакета; -S поиск пакета, содержащего данный файл; -i установка пакета; -I информация о пакете в файле *.deb; -r простое удаление пакета; -P удаление пакета вместе с конфигурационными файлами. Dpkg-reconfigure переконфигурация пакета. Можно сказать, что это мастер настройки пакета. Полезная утилита. Теперь посмотрим, как это работает вводим dpkg --help: Dpkg сложная низкоуровневая утилита, имеет кучу настроек, на скриншоте приведен вывод справки по ней. Если мы просмотрим внимательно то, в конце справки мы увидим рекомендацию использовать менеджер управления пакетами apt или aptitude. Утилита dpkg используется для каких-то очень тонких настроек пакетов. Можно посмотреть список установленных пакетов в системе dpkg -l . В системе их установлено их достаточно много, поэтому для поиска нужного использовать grep. dpkg -s mc посмотрим статус пакета midnight commander. И видим, что пакет mc, он установлен, размер его, архитектуру (разрядность), зависимости. Используя, ключ S, мы можем посмотреть в какой пакет входит данная программа. Программа mc входит во множество пакетов. А вот, например, /bin/ls входит в базовые утилиты ядра, о чем вы можете убедится, набрав команду с ключом S, т.е в базовый состав любого дистрибутива Ubuntu. Можем посмотреть более подробно работу с пакетом, для этого можно скачать какой-нибудь пакет, например, webmin небольшая графическая утилита для управления unix сервером. Скачиваем и кладем, например, в /opt. Переходим в директорию, где находится наш пакет cd /opt, далее мы можем посмотреть информацию по данному пакету dpkg I /opt/ webmin_1.955_all.deb. Мы можем увидеть версию пакета и краткое описание, в котором говорится, что при установке будет установлен вебсервер и мы получим через него управление к базовым сервисам. Установим пакет dpkg i /opt/ webmin_1.955_all.deb. dpkg не умеет ставить зависимости именно этим он плох. Есть ключи, которые позволяют ставить зависимости, но по умолчанию он не умеет. При установке система выдала ошибки, на то что необходимые зависимости не установлены, но набирая информацию о пакете можно увидеть, что пакет webmin уже установлен. Но он не будет работать т. к. зависимости необходимые для работы не установились, но сам dpkg его установил. Можно его удалить командой dpkg r webmin, т. к. мы конфигураций не писали и ничего с данным пакетом не делали, если бы мы уже поработали необходимо было бы удалять через ключ p. После этой команды если посмотреть статус пакета, то мы увидим deinstall т.е удален. Еще можно посмотреть команду dpkg-reconfigure. Используется для переконфигурирования пакетов. Например, можно реконфигурировать временную зону dpkg-reconfigure tzdata. Таким образом открывается удобный мастер и мы можем прям налету изменить параметры пакета. Еще надо сказать, что у dpkg , есть свой конфигурационный файл. Располагается он /etc/dpkg/dpkg.cfg APT APT Advance Packaging Tool Программа для работы с пакетами в Debian системах. Продвинутый пакетный менеджер, причем иногда используется в дистрибутивах, основанных на Mandriva. В основном используется несколько утилит: apt-get - утилита для скачивания и установки пакетов; apt-cache утилита для поиска пакетов; aptitude - утилита полного управления пакетами с опцией псевдографики; Для работы с пакетным менеджером нам так же понадобится понятие репозитория. /etc/apt/source.list - список репозиториев. Вот так у нас выглядит файл справки по apt-get --help. У программы, как видно есть свои ключи. Теперь попробуем сделать apt-get update данная команда обновляет список всех репозиториев, команда проверяет, какие новые места появились откуда можно скачать обновления, т.е. просто обновляется информация об источниках обновлений. Если мы хотим поискать обновление пакетов и их установить, то мы используем команду apt-get upgrade. Данная команда проверяет все установленное ПО на наличие обновлений и, если находит предлагает установить обновление. Данную процедуру рекомендуется делать, сразу после установки свежей Операционной системы. В дальнейшем перед данной операции обязательно сделайте Резервную копию данных! Для установки любого дополнительного программного обеспечения мы можем воспользоваться apt-get install gmail-notify. Для удаления мы можем использовать ключ remove. При инсталляции программного обеспечения зачастую ставится куча зависимостей, которые необходимы для корректной работы основного программного пакета, а при удалении с ключом remove данные зависимости остаются. Для того чтобы очистить систему от неиспользуемых зависимостей рекомендуется использовать ключ apt-get autoremove. Теперь мы можем посмотреть apt-cache, как работает. Для начала справку. apt-get help Это инструмент для поиска информации в двоичных файлах, у него тоже есть куча настроек и ключей. Попробуем воспользоваться поиском. apt-cache search gmail ищем все пакеты, где может встречаться "gmail". Мы можем посмотреть информацию по какому-либо пакету например: apt-cache show gnome-gmail. Утилита показывает размер, название, кто произвел, архитектура и краткое описание пакета. С помощью команды и ключа apt-cache depends gnome-gmail мы можем посмотреть от каких зависимостей зависит пакет. Т.е. без каких пакетов программное обеспечение работать не будет. Мы можем посмотреть обратные зависимости apt-cache rdepends gnome-gmail т.е. кто зависит от данного программного обеспечения. Далее посмотрим утилиту aptitude. Данная утилита по умолчанию не идет и ее необходимо установить apt-get install aptitude. Посмотрим справку по данной утилите aptitude help. Так же мы можем увидеть, что это такая же программа по управлению пакетами как apt-get и apt-cache. Те же самые команды и ключи, за исключением того, что здесь есть графика и мы можем написать aptitude и попасть в графическую оболочку. Можно зайти, например, в не установленные пакеты и установить, что необходимо. Для этого необходимо встать на интересующий пакет и нажать знак плюса и нажимаем g, для произведения действия. Для выхода из графического режима используем q. Теперь рассмотрим репозитории, то место, где хранится вся информация о пакетах, которые мы можем использовать скачивать обновления и сами пакеты. Это как в windows есть центральный узел обновления windows update, так и в Linux есть узлы , как родные , так и сторонние для обновлений. Смотрим cat /etc/apt/sources.list Вот в таком виде хранятся репозитории в Ubuntu, которые подключены. Хранилища пакетов. У нас есть 2 вида указателей. Deb файлы исходники и deb-src файлы исходники. Далее у каждой строчки указателе есть ссылка в интернете и далее описание дистрибутива. Далее есть несколько видов репозиториев. Main - это основной репозиторий. Не требует установки дополнительных пакетов и является официально поддерживаемым от производителей Ubuntu. Есть пакеты, которые помечены restricted это пакеты, которые содержат частично свободное программное обеспечение, т.е. не полностью свободное программное обеспечение. Есть еще universe это дистрибутивы Ubuntu управляемые сообществом официально не поддерживаются, но есть куча энтузиастов. Есть пакеты multiverse - это пакеты, которые не соответствуют политики свободно распространяемого программного обеспечения. Ничего не мешает нам дописать свои репозитории. Это можно сделать через специальную команду из консоли или просто отредактировав файл. Это необходимо делать, когда у нас есть, какое-либо программное обеспечение, которое не обновляется в составе операционной системы. Если мы добавили репозиторий самостоятельно, то обязательно необходимо сделать apt-get update. Для того, чтобы операционная система перечитала список репозиториев.
img
Model-View-Controller - популярный шаблон программирования, где логика приложения делится на три различных компонента. В этой статье расскажем о роли компонентов архитектуры MVC, начнем с короткой истории, а далее покажем, как её можно использовать в приложении. История паттерна Model View Controller Модель MVC была впервые представлена в 1979 году учёным Трюгве Миккьелем Хейердалом Реенскаугом. Он хотел придумать решение, как разбить сложное пользовательское приложение на более мелкие управляемые компоненты. Шаблон MVC был впервые использован в языке программирования Small Talk. Изначально шаблоне хотели назвать «Model-View-Editor», но затем оно было изменено на «Model-View-Controller». В 1980-х и начале 90-х годов шаблон MVC использовался главным образом в настольных приложениях. Но к концу 1990-х годов она стала довольно популярной в разработке веб-приложений. В современных веб-приложениях шаблон MVC является популярным архитектурным дизайном для организации кода. Ниже приведен список нескольких популярных веб-фреймворков, использующих шаблон MVC: Ruby on Rails ASP.NET MVC Laravel Angular Какие три компонента включает в себя MVC? Шаблон программирования MVC состоит их трёх следующих компонентов: Model – отвечает за логику данных, лежащую в основе приложения View – это видимая часть приложения, то с чем взаимодействует пользователь Controller – работает как мозг приложения и обеспечивает связь между моделью и видом Как шаблон MVC работает в веб-приложении? Чтобы лучше понять, как работает шаблон MVC, лучше всего показать его в демонстрационном приложении. Это приложение стека MERN (MongoDB, Express, React, Node) своего рода помощник менеджера офиса и отображает таблицу недавно нанятых тренеров средней школы. Он также показывает, какие тренеры не сдали тесты на туберкулез, не прошли вакцинацию от Covid, не заполнили резюме и не прошли проверку. Менеджер может отправлять напоминания по электронной почте тем тренерам, у которых отсутствуют документы. Компонент Model Модель отвечает за логику данных нашего приложения. Мы используем MongoDB для базы данных тренеров. Для начала определяем свойства, которые будут применены к каждому тренеру в базе данных. У каждого тренера есть свойства name, email, program, application, backgroundCheck, tbTest и covidTest. const coachSchema = new Schema({ name: { type: String, trim: true, maxLength: 32, required: true }, email: { type: String, trim: true, maxLength: 32, required: true, unique: true }, program: { type: String, trim: true, maxLength: 32, required: true }, application: { type: Boolean, required: true }, backgroundCheck: { type: Boolean, required: true }, tbTest: { type: Boolean, required: true }, covidTest: { type: Boolean, required: true } }, { timestamps: true }) type: Boolean представляет значение true или false для свойств приложения, backgroundCheck, tbTest и covidTest. Если у тренера одно из этих четырех свойств, помечены как false, это означает, что они не завершили процесс найма. Создаем семь записей для нашей базы данных тренеров, и эта информация хранится в MongoDB Atlas. Ниже приведен пример одной из записей базы данных. Компонент "контроллер"" будет взаимодействовать с базой данных и получать необходимую информацию для отправки компоненту представление. Компонент View Компонент View (вид, представление или вью) отвечает за все визуальные аспекты приложения. Для отображения данных пользователю мы использовали React. При первой загрузке приложения на экране отображается приветственное сообщение. При нажатии кнопки «View Dashboard» происходит переход к таблице тренеров и списку отсутствующих документов. Компонент Вид не взаимодействует напрямую с базой данных, поскольку это делает наш контроллер. Контроллер предоставляет эту информацию компоненту представление, чтобы ее можно было отобразить на странице. Вот как выглядит код, когда представление выполняет вызов выборки (fetch) для получения данных от контроллера: await fetch('https://mvc-project-backend.herokuapp.com/coaches') Затем мы используем метод map(), чтобы пройтись по списку тренеров и отобразить их имена, адреса электронной почты и программу в виде таблицы. coachData.map(data => ( <tr key={data._id}> <td>{data.name}</td> <td>{data.email}</td> <td>{data.program}</td> </tr> )) Для отображения раздела отсутствующих документов мы отправляем запрос к бэкнэду и получием список тренеров, которые не заполнили анкету, не сдали тесты на туберкулез, не привиты от Covid и не прошли проверки. Для отображения имен для каждой категории снова используется метод map(). Если нажать кнопку «Send reminder email», эта информация будет отправлена React-ом на бэкэнд. Контролер отвечает за отправку сообщения электронной почты и обмен информацией с компонентом представление о том, отправилось ли сообщение. На основе информации, которую он получает от контроллера, во View отображается сообщение об успехе или сообщение об отказе. Компонент Controller Контроллер взаимодействует с компонентами «Модель» и «Представление» и выполняет все логические операции для нашего приложения. Этот раздел кода был построен в Node.JS и Express. Контролер получает полный список тренеров из «Модели» и отправит эту информацию в «Представление». Контролер также отвечает за фильтрацию через «Модель» и предоставление списка тренеров, которые не сдали необходимые документы. Все эти данные отправляются в «Представление», чтобы их можно было отобразить пользователю. Что касается функциональности электронной почты, то «Контролер» перед отправкой проверяет валидность адреса электронной почты. Для отправки электронных писем использована Nodemailer: transporter.sendMail(mailOptions, (err) => { if (err) { console.log(`Applications: There was an error sending the message: ${err}`) res.json({ status: 'Email failure' }) } else { console.log(`Applications Success: Email was sent`) res.json({ status: "Email sent" }); } }) Если сообщение электронной почты успешно отправлено, пользователь получает уведомление, и сообщение электронной почты отображается в почте демонстрационной учетной записи. Если при отправке сообщения возникает ошибка, то «Контроллер» посылает эту информацию в «Вид», чтобы пользователю отобразилось уведомление об ошибке. Заключение А в заключение повторим пройденное: Model-View-Controller - популярный шаблон программирования, используемый для разделения логики приложения на три различных компонента. Хотя шаблон MVC первоначально использовался в настольных приложениях, в конце 1990-х он стал популярным в разработке веб-приложений. Модель отвечает за логику данных, лежащую в основе приложения. Представление - это то, что пользователь видит в приложении и взаимодействует с ним. Контроллер действует как мозг приложения и взаимодействует с моделью и представлением. Веб-инфраструктуры, использующие шаблон MVC - это Ruby on Rails, ASP.NET MVC, Laravel и Angular.
img
Как и любая современная АТС, Asterisk имеет свою встроенную систему хранения истории звонков - CDR (Call Detail Record). Она используется для снятия статистики, ведения отчетности, прослушивания вызовов или подсчета биллинговых показателей. В Asterisk для этого создана база данных asteriskcdrdb, в которой существует таблица cdr. Давайте рассмотрим как пользоваться данной таблицей и ее структуру. [root@asterisk]# mysql // подключаемся к MySQL После успешного подключения, необходимо выбрать для работы базу данных asteriskcdrdb: mysql> use asteriskcdrdb; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed Давайте убедимся, что у нас есть таблица cdr. Выполним это, как указано ниже: mysql> show tables; +-------------------------+ | Tables_in_asteriskcdrdb | +-------------------------+ | cdr | | cel | +-------------------------+ 2 rows in set (0.00 sec) На данном этапе мы убедились, что у нас есть база данных asteriskcdrdb, в которой находится таблица cdr. Давайте попробуем посмотреть входящие звонки из города за сегодня (дата написания статьи 18 марта 2016 года), в период с 12:00 до 12:10, т.е за 10 минут: SELECT `dst` , `src` , `duration` , `calldate` , `recordingfile` FROM `cdr` WHERE `calldate` >= '2016-03-18 12:00:00' AND `calldate` <= '2016-03-18 12:10:00' AND LENGTH( `src` ) >3; +-----+-------------+----------+---------------------+----------------------------------------------------------------+ | dst | src | duration | calldate | recordingfile | +-----+-------------+----------+---------------------+----------------------------------------------------------------+ | 113 | 84991111111 | 140 | 2016-03-18 12:00:36 | external-113-84991111111-20160318-115933-1458291573.157155.wav | | 104 | 89162222222 | 81 | 2016-03-18 12:01:33 | external-104-89162222222-20160318-120133-1458291693.157169.wav | +-----+-------------+----------+---------------------+----------------------------------------------------------------+ 2 rows in set (0.00 sec) В вышеуказанном примере, в SQL запросе указано LENGTH( `src` ) >3. Столбец ‘src’ – показывает номер звонящего (source - источник). Это сделано для того, чтобы исключить внутренние звонки, так как у нас используется трехзначная нумерация. Тем самым, мы получаем в результате данные, с которыми затем можем работать. Например, отправить на почту в виде отчета. Ниже рассмотрена структура таблицы cdr в базе данных asteriskcdrdb: Столбец Пример значения Описание calldate 2016-03-18 12:00:36 Дата и время звонка clid "Oleg Ivanov" <84991111111> В данное поле попадает полное CallerID (CLID, CID), которое состоит из имени и номера звонящего. Это доступно только для считывания. src 84991111111 Номер звонящего в конструкции CallerID (CNUM). Это доступно только для считывания. dst 113 Номер назначения для звонка. Это доступно только для считывания. dcontext CustomContext1 Контекст для обработки. Это доступно только для считывания. channel SIP/0002B2356854-a34bh3ef Канал, через который поступил звонок dstchannel SIP/0004F6675969-97836bb0 Канал, через который ушел исходящий звонок lastapp Dial, Busy, Congestion Приложение, которое последним отработало этот вызов перед попаданием в таблицу cdr lastdata SIP/0004F6675969,30,tT Аргумент, который был передан приложению, которое отработало вызов последним (lastapp) duration 75 Количество секунд от начала (отметка start) до окончания вызова (отметка end) billsec 67 Количество секунд от ответа (отметка answer) до окончания вызова (отметка end). Данное значение всегда меньше значения duration, и отражает длительность самого разговора, что важно для подсчета стоимости. disposition ANSWERED, BUSY, NO ANSWER, FAILED Результат звонка amaflags OMIT, BILLING, DOCUMENTATION, Unknown Метка Automatic Message Accounting (AMA) – автоматический учет стоимости вызова. accountcode 23232 Идентификатор аккаунта. Данное значение пустое по умолчанию, и определяется параметрами конкретного пользователя. uniqueid 1458291693.157169 Уникальный идентификатор звонка userfield - Пользовательское поле. Здесь можно передавать что угодно, добавляя данные в этот столбец при работе с вызовом внутри контекста обработки. did 4996491913 DID (Direct Inward Dialing). На основании DID вызова на Asterisk осуществляется его маршрутизация (это значение приходит от провайдера). recordingfile external-113-84991111111-20160318-115933-1458291573.157155.wav Имя файла, содержащего запись разговора. В данном имени можно проследить путь к файлу в файловой структуре сервера. cnum 84991111111 Номер звонящего в структуре CallerID. cnam Oleg Ivanov Имя звонящего в структуре CallerID. Теперь, когда вы понимаете принцип формирования запросов к базе данных и ее структуру, вы можете без труда формировать собственные отчеты. Например, ежедневный отчет о количестве входящих звонков за текущий день на почту. Это реализуется средствами php скрипта и добавления расписания через cron. Поговорим об этом в следующей статье
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59