По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Само слово состоит из двух частей - Dev (Development), то есть разработка и Ops (Operations) - эксплуатация.
Разработка и эксплуатация. Ок, запомнили. Но что это конкретно? Танец? Напиток? Профессия?
Не совсем, девопс - это модель взаимодействия тех, кто пишет код с теми, кто этот код заставляет работать - раскатывает в продакшн, управляет серверами, сетью и вот этим вот всем. Такая профессия называется ДевОпс-инженер
Любая компания, которая делает деньги на разработке программного обеспечения, хочет быстро расти, быть технологичнее и быстрее своих конкурентов, при это не забывать о наличии печенек и вкусного чая на кухне в офисе.
У серьезных компаний большая и сложная инфраструктура: куча серверов, коммутаторов, маршрутизаторов, и все это еще и раскидано географически по миру. А чтобы код их приложения заработал у пользователей, без лагов, багов и задержек, нужно учесть кучу факторов!
До появления методологии DevOps, при разработке, могли возникать случаи, когда что-то не работает, или работает не так, как хотелось бы:
«Мой код превосходен, а сервера сконфигурированы хреново, а еще ваша сеть, кхм-кхм, - говно» - говорит разработчик
«Сеть работает отлично, задержка в пределах нормы, а вы там что то наговнокодили» - парирует администратор
И понеслась. У сетевого администратора не хватало компетенций и информации о том как надо настраивать сервера, в результате чего приходилось подключать для этого разработчиков, у которых в свою очередь не было компетенций админов.
Короче, ДевОпс инженер это по сути системный администратор который работает с программным обеспечением, серверами и сетью, а также понимает как происходит процесс разработки и умеет программировать. Новый виток эволюции админа, который умеет больше и, конечно, получает больше денег.
Девопс исключит перекидывание мячика из отдела разработки к администраторам, значительно ускорит релизы новых фич и исправлений в продукте, откроет дорогу к легкому масштабированию и повышению надежности инфраструктуры, превратит вашу разработку в полноценный конвейер, даст прохладу, влажность и, скорее всего, силу земли
Итак, вот базовые вещи, которые должен знать девопс инженер:
Легко ориентироваться в Windows и Linux операционных системах - кстати, по ним у нас есть собственные курсы и никто не помешает тебе пройти бесплатный вводный урок по ссылке.
Нужно знать сетевые технологии на уровне Cisco CCNA - вот это совпадение! У нас также есть большой курс по сетевым технологиям, который поможет тебе познать самые нужные сетевые аспекты работы DevOps.
ДевОпс должен знать инструменты для управления конфигурацией и автоматизации серверов Chef, Puppet, Ansible.
И уметь писать скрипты. Ну минимум на Python. Зачем это надо? Как раз чтобы работать с этими инструментами.
Этого достаточно, чтобы уже получать в среднем по РФ 100-200 тысяч рублей!
Ну и как видавшие девопсов добавим, что будет отлично так же знать:
Про непрерывную интеграцию и доставку (CI/CD) – сборка и тестирование конечного продукта (Jenkins, TeamCity, Bamboo)
Распределенный контроль версий (Git, Mercurial, Subversion, CVS)
Контейнеризацию и оркестровку (Docker, Kubernetes, Docker Swarm)
Управление инфраструктурой как кодом (Puppet, Chef, Ansible, Salt)
Виртуализацию (Vagrant, VMware)
Подробнее об этих и других инструментах можно прочитать в этой статье.
Сетевой гигант не может не заметить происходящее в мире, и, в связи с этим, Cisco решила смягчить свои условия выдачи временных версий продуктов, вплоть до очень щедрых 90 дней. В статье я хочу описать все возможные продукты от Cisco, которыми можно начать сейчас пользоваться или задуматься о покупке - ведь кризис это не только тяжелое и несчастливое время, но и шанс что-то поменять. У Cisco есть несколько спецпредложений по двум основным направлениям: безопасность и коллаборейшн. Важный нюанс: те предложения, которые будут описаны ниже актуальны только для России.
Что можно попробовать из продуктов инфосек от Cisco
Первое и самое главное - Cisco AnyConnect
Так как весь мир стремительно переходит на удаленку, вопросы обеспечения безопасного удаленного доступа выходят на первый план. Итак, что может предложить Cisco? В первую очередь - это щедрое предложение Cisco AnyConnect (AC это, наверное, самый популярный VPN клиент в мире).
Если у вас уже есть Cisco ASA, но вы не покупали лицензии на AnyConnect, а тут вдруг вам резко приспичило, у вас есть возможность самостоятельно получить их для вашей ASA на ресурсе cisco.com/go/license . Для этого нужно пройти по ссылке, войти в ваш аккаунт и выбрать на лицензионном портале All Licenses. Далее выбрать пункт Demo and Evaluation, Security и наконец AnyConnect Plus/Apex(ASA) Demo License and Emergency COVID-19 License
Далее введите серийный номер вашего устройства и количество пользователей.
Важно: сначала уточните аппаратный максимум по кол-ву VPN подключений на вашем устройстве. К примеру для популярной ASA5506-X этот показатель равен 50 юзерам.
Далее указываете ваш почтовый адрес, нажимаете Submit и вуаля - вам на почту приходит ключ лицензии. Соответственно, если у вас несколько устройств, операцию можно повторить несколько раз.
На вашем устройстве переходите в режим конфигурации путем ввода conf t и применяете ключ (5 октетов) путем ввода команды activation key %ваш полученный ключ%.
Если хочется чувствовать себя в безопасности даже без VPN и корпоративных средств защиты - Cisco Umbrella
Следующее предложение - это DNS сервис от Cisco, но с очень толстым и богатым функционалом аналитики сверху. Если говорить очень просто, то Umbrella не даст вам зайти на заведомо вредоносный сайт или обратиться к командному центру через DNS вирусу-шифровальщику. Процесс настройки в базовом случае очень прост и заключается либо в смене DNS на вашем домен-контроллере или маршрутизаторе. Кроме того, Umbrella также можно использовать в виде модуля AnyConnect - таким образом, ваши пользователи всегда будут под защитой. Для получения достаточно зайти по ссылке https://signup.umbrella.com/
Важно: не забудьте поставить галочку "I confirm that this account is for business purposes."
После этого вам придет ссылка на активацию 14-дневного триала, но вы можете запросить его продление на 90 дней путем отправки письма на security-request@cisco.com - там вам быстро ответят на русском языке.
Надоел Скайп или хочу узнать что такое Cisco Webex
Cisco Webex Meetings - это широко известная платформа для веб-конференций, и ее сейчас также можно получить в виде триала на 90 дней! Но процедура для России выглядит менее автоматизированной - для получения триала вам нужно обратиться к вашему аккаунт-менеджеру в Cisco (или к партнеру Cisco, у которого есть специализация по Collaboration) и запросить триал.
Процесс настройки крайне прост и не займет много времени, а удовольствия вы получите море. На этом все, надеюсь было полезно и интересно.
Когда мы только начинаем изучать 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]