По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Всем привет! Иногда настаёт момент, когда необходимо удалить FreePBX или Asterisk. Например, для того чтобы использовать сервер, на котором они были установлены для других приложений или для того, чтобы начать всё «с чистого листа» после неудачного обновления/установки/манипуляций с конфигурационными файлами. Поэтому в данной статье, мы покажем как правильно удалить FreePBX 13 версии и Asterisk версии 13.7.1. Удаление FreePBX Внимание! Описанные ниже действия полностью удалят FreePBX с вашего сервера без возможности восстановления. Поэтому рекомендуем сделать резервную копию Внимание! Данные действия удалят только FreePBX, но оставят Asterisk. Однако, если Вы устанавливали Asterisk из источников и затем ставили на него FreePBX, то после удаления, настройки Asterisk не восстановятся. Первое, что необходимо сделать – это подключиться к нашему серверу по SSH, далее есть два способа удаления FreePBX: Найдите или перезагрузите с помощью SVN файл ./install_amp и просто запустите следующую команду: ./install_amp --uninstall Удалите FreePBX и его компоненты вручную, данные действия применимы только на системах CentOS: Удаление таблиц MySQL Подключаемся к MySQL с правами root’а: mysql -u root Инициируем удаление таблиц asterisk и asteriskcdrdb: DROP DATABASE asterisk; DROP DATABASE asteriskcdrdb; Выходим из MySQL: exit; Придаем забвению файлы, связанные с FreePBX, прописав следующие команды: rm /usr/sbin/amportal rm -rf /var/lib/asterisk/bin/* rm -rf /var/www/html/* rm /etc/amportal.conf rm /etc/asterisk/amportal.conf rm /etc/freepbx.conf rm /etc/asterisk/freepbx.conf rm -f /etc/asterisk/*.conf На этом всё. Можете быть уверенными, что от FreePBX не осталось и следа… При попытке зайти на web-интерфейс, вас ожидает ошибка 404. Однако, Asterisk всё ещё доступен и работает. Удаление Asterisk Внимание! Описанные ниже действия полностью удалят Asterisk с вашего сервера без возможности восстановления. Поэтому рекомендуем сделать резервную копию рабочей системы. Для того, чтобы удалить Asterisk, первым делом необходимо остановить процесс, связанный с ним и удалить соответствующие модули. Обычно необходимо остановить сам процесс Asterisk и связанные с ним процессы DAHDI (на более ранних версиях – Zaptel). Но не торопитесь останавливать DAHDI, он нам ещё понадобится. Остановим Asterisk: service asterisk stop Затем необходимо удалить драйверы, использующиеся DAHDI. Для того, чтобы проверить какие драйверы загружены – используем команду: lsmod | grep dahdi Видим, что DAHDI использует много подмодулей, все их необходимо удалить по порядку и завершить процедуру удалением самого DAHDI. Вводим следующие команды: Останавливаем процесс: service dahdi stop Отключаем модули: modprobe -r wctc4xxp modprobe -r wctdm24xxp Повторяем для всех модулей, а в самом конце: modprobe -r dahdi Теперь приступаем к удалению Asterisk. Как только команды, которые описаны ниже будут введены – обратного пути нет: rm -rf /etc/asterisk rm -f /etc/dahdi.conf rm -rf /var/log/asterisk rm -rf /var/lib/asterisk rm -rf /var/spool/asterisk rm -rf /usr/lib/asterisk Готово, теперь Asterisk полностью удалён с Вашего сервера. Надеемся, что данная статья Вам помогла.
img
Появившись на рынке, API произвел настоящих прорыв и навсегда изменил процесс синхронизации информации между различным программным обеспечение. В данной статье мы с вами рассмотрим, что собой представляет интерфейс программирования API, область его применения в сфере написания приложений, примеры его использования и возможные варианты применения API в различных разработках. API (Application Programming Interface) представляет собой совокупность различных инструментов, функций, реализованных в виде интерфейса для создания новых приложений, благодаря которому одна программа будет взаимодействовать с другой. Основной задачей создания API была дать возможность программистам существенно облегчить задачу при разработке различных приложений за счет использования уже готового кода (какой-либо стандартной функции, процедуры, структуры или постоянного значения, которые будут в последующем выполнятся в конечном продукте). API определяет возможную функциональность, которую определенная программа в форме библиотеки или модуля сможет осуществлять, при этом API позволяет абстрагироваться от способа реализации функционала. Различные компоненты программы благодаря API получают возможность взаимодействия друг с другом, формируя при этом, как правило, среди компонентов определенную систему ранжирования, где абсолютно все компоненты, которые выше по рангу используют информацию из более низких по рангу компонентов, которые также используют информацию из нижестоящих рангов. Чем хорош API и где он используется? Следует отметить, что именно по схожему алгоритму сформированы протоколы передачи данных по сети Интернет, где любой уровень использует функционал нижестоящего уровня передачи данных тем самым предоставляя необходимую информацию и функциональные возможности вышестоящему. Интернет протоколы схожи по смыслу с понятием API, являясь абстракцией функциональности, только в одном из случаев суть заключается в передаче данных, а во втором о взаимодействии приложений между собой. Хорошим примером API может быть Twitter, интерфейс посредствам которого способен предоставить Вам информацию, относящуюся к твитам пользователя, кого он читает, кто является его подписчиками, что является небольшой частью реальных возможностей, которые любой желающий сможет осуществить, используя как собственный, так и любой сторонний API. Использование API в наше время Хорошим примером использования API может служить процесс быстрой регистрации в различных приложениях используя аккаунт любой из предложенной социальной сети, когда посредствам специального API социальной сети (например, Вконтакте, Facebook) сторонние компании получают возможность использовать специальный код и API для предоставления Вам оперативного и упрощенного доступа к их продукту. Компания Google за счёт использования API дает потенциальную возможность разработчикам различных приложений использовать интеграцию информации из своих сервисов на своих платформах. Благодаря этому вы сможете просмотреть видео, взятое из видео хостинга YouTube.com прямо внутри приложения. Большое количество коммерческих компании предлагают API в качестве уже готового к использованию продукта. Так, американская компания Weather Underground зарабатывает за счёт продажи доступа к своему API для оперативного получения метеорологических данных в любой точке нашей планеты. В заключении статьи следует отметить то, что в наше время невозможно создать качественные и полезные сервисы без использования библиотек API поскольку они необходимы как программистам для написания программного обеспечения и приложений, так и различным сервисам для предоставления услуг по обслуживанию клиентов и с каждым годом роль и область применения API только расширяется.
img
Когда мы только начинаем изучать Python, мы закладываем некоторые вредные привычки при написании кода, о которых мы можем даже не подозревать. Вы можете написать код, который сработает сейчас, но может не сработать в будущем, или вы можете использовать какие-то хитрые ходы вместо встроенной функции, которая могла бы облегчить вашу жизнь. У большинства из нас сохранились не одна из тех вредных привычек при программировании на Python, что формируются в период первых месяцев обучения. Отличная новость в том, что вы можете с легкостью искоренить их, прочитав приведенный ниже текст. 1. Использование import * Каждый раз, когда нам становится лень, то возникает соблазн импортировать все необходимое из модуля с помощью from xyz import *. Это не самый лучший подход по многим причинам. Кот несколько из них: Это может оказаться неэффективно: если в модуле очень много объектов, то вам придется долго ждать, пока все импортируется. Это может вызвать конфликт имен переменных: когда вы используете *, то вы понятия не имеете, какие объекты вы импортируете и как они называются. Как же с этим бороться? Импортируйте либо какой-то конкретный объект, либо весь модуль целиком. # Using import * # Bad from math import * print(floor(2.4)) print(ceil(2.4)) print(pi) # Good import math from math import pi print(math.floor(2.4)) print(math.ceil(2.4)) print(pi) 2. Try/except: отсутствие указания исключения в блоке «except» Я очень долго пренебрегал этим. Сложно посчитать, сколько раз Pycharm давал мне понять (этими противными подчеркиваниями), что не нужно использовать «голое» исключение. Это идет в разрез с рекомендациями PEP8. # Try - except # Bad try: driver.find_element(...) except: print("Which exception?") # Good try: driver.find_element(...) except NoSuchElementException: print("It's giving NoSuchElementException") except ElementClickInterceptedException: print("It's giving ElementClickInterceptedException") Проблема «голых» исключений заключается в том, что оно будет перехватывать исключения SystemExit и KeyboardInterrupt, что затрудняет прерывание программы с помощью Control-C. В следующий раз, когда вы будете использовать try/except, укажите исключение в блоке except. 3. Не использовать Numpy для математических вычислений Очень часто мы забываем, что в Python есть множество пакетов, которые могут значительно облегчить нашу жизнь и сделать ее более продуктивной. Одним из таких пакетов является Numpy – пакет для математических вычислений. Numpy может помочь вам вычислять математические операции быстрее, чем циклы for. Допустим, что у нас есть массив random_scores, и мы хотим получить средний балл тех, кто не сдал экзамен (score>>dict_countries.keys() dict_keys(['USA', 'UK', 'Canada'])>>>dict_countries.values() dict_values([329.5, 67.2, 38]) Проблема тут заключается в том, что мы не всегда используем их должным образом. Например, мы хотим просмотреть словарь и получить ключи. Вы можете использовать метод .keys, но знаете ли вы, что ключи можно получить, просто перебирая словарь? В этом случае использование метода .keys будет излишним. # Not using .keys() properly # Bad for key in dict_countries.keys(): print(key) # Good for key in dict_countries: print(key) Кроме того, можно придумать некоторые хитрости для получения значений словаря, например, с помощью метода .items(). # Not using .items() # Bad for key in dict_countries: print(dict_countries[key]) # Good for key, value in dict_countries.items(): print(key) print(value) 7. Никогда не использовать генераторы (или использовать их всегда) Генератор предлагает более простой синтаксис при создании новой последовательности (списка, словаря и т.д.) на основе уже определенной последовательности. Допустим, мы хотим перевести все элементы в нашем списке countries в нижний регистр. И хотя вы могли бы это сделать просто с помощью цикла for, но также вы можете упростить работу при помощи генератора списка. # Bad countries = ['USA', 'UK', 'Canada'] lower_case = [] for country in countries: lower_case.append(country.lower()) # Good (but don't overuse it!) lower_case = [country.lower() for country in countries] Генераторы – это очень полезно, но не злоупотребляйте ими! Помните правило Дзен Python: «Простое лучше, чем сложное». 8. Использование range(len()) Одни из первых функций, которые мы изучили будучи новичками – это range и len, поэтому не удивительно, почему многие люди имеют дурную привычку писать range(len()) при переборе списков. Допустим у нас есть два списка: countries и populations. Если мы хотим пройтись по обоим спискам одновременно, то, вероятнее всего, вы воспользуетесь range(len()). # Using range(len()) countries = ['USA', 'UK', 'Canada'] populations = [329.5, 67.2, 38] # Bad for i in range(len(countries)): country = countries[i] population = populations[i] print(f'{country} has a population of {population} million people') И хотя это в принципе выполняет свою работу, вы все равно можете упростить задачу, воспользовавшись enumerate (или, что еще лучше, воспользовавшись функцией zip для сопряжения элементов из обоих списков). # OK for i, country in enumerate(countries): population = populations[i] print(f'{country} has a population of {population} million people') # Much Better for country, population in zip(countries, populations): print(f'{country} has a population of {population} million people') 9. Форматирование с помощью оператора + Вероятно, одна из первых вещей, которую мы изучаем в Python, - это то, как соединять строки с помощью оператора +. Это полезный, но не самый эффективный способ соединения строк в Python. Помимо этого, это не очень красиво – чем больше строк вам нужно соединить, тем больше операторов + вы будете использовать. Вместо этого вы можете воспользоваться f-строкой. # Formatting with + operator # Bad name = input("Introduce Name: ") print("Good Morning, " + name + "!") # Good name = input("Introduce Name: ") print(f'Good Morning, {name}') Преимуществом f-строк в том, что они полезны не только для конкатенации, но и для других целей. 10. Использование изменяемых значений в качестве значений по умолчанию Если вы включите изменяемое значение (например, список) в качестве параметра функции по умолчанию, то увидите нечто неожиданное. # Bad def my_function(i, my_list=[]): my_list.append(i) return my_list>>> my_function(1) [1] >>> my_function(2) [1, 2] >>> my_function(3) [1, 2, 3] В приведенном выше коде каждый раз, когда мы вызываем функцию my_function, список my_list сохраняет значения из предыдущих вызовов (а мы, скорее всего, хотим инициировать пустой список при каждом вызове функции). Чтобы избежать такой проблемы, мы должны установить этот параметр my_list равным None и добавить условие if как показано ниже. # Good def my_function(i, my_list=None): if my_list is None: my_list = [] my_list.append(i) return my_list>>> my_function(1) [1] >>> my_function(2) [2] >>> my_function(3) [3]
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59