OTUS IT News – Telegram
OTUS IT News
7.2K subscribers
4.33K photos
302 videos
5 files
4.29K links
Экспертный контент по востребованным технологиям 2025 года: от разработки и аналитики до искусственного интеллекта и облачных решений.

Более 170 курсов+

🗓 Расписание бесплатных ОУ: https://otus.pw/24Da/
🦉 Голосуй за канал: https://news.1rj.ru/str/boost/Otusjava
Download Telegram
#devops #otus #terraform #infrastructureascode #iac
Мониторим изменения с Terraform
Применение практики Infrastructure as Code становится проще вместе с использованием инструментов класса Terraform, которые позволяют декларативно описать инфраструктуру в виде кода и тиражировать окружения.
Непосредственно сам Terraform обладает функцией планирования изменений, которая примечательна еще и тем, что с ее помощью можно следить за вручную сделанными изменениями в инфраструктуре или изменениями, сделанными злоумышленником. Для этого достаточно периодически выполнять команду terraform plan -detailed-exitcode, рекомендуется создать регулярно запускаемую автоматически задачу в CI-системе. Если код выхода команды:
0, то команда завершилась успешно, изменений нет;
1 - команда завершилась с ошибкой;
2 - команда завершилась успешно, есть изменения.
А что делать если у вас уже есть вручную настроенная инфраструктура, но вы не используете terraform? Начните с описания наиболее важных компонент и используйте terraform import, он сохранит текущее состояние описанной инфраструктуры относительно которого уже можно будет мониторить изменения.
Научиться использовать Terraform и практике Infrastructure as Code вам помогут эксперты из Экспресс 42 на курсе” DevOps практики и инструменты” http://otus.ru/lessons/7?utm_source=telegram&utm_medium=internal&utm_campaign=devops&utm_content=deppost&utm_term=04.08
Проходите вступительное тестирование и присоединяйтесь!.
Мы хотим уже на следующей неделе (в понедельник и четверг) провести два Дня открытых дверей на курсе DevOps.Мы уже говорили, что курс по DevOps ведет группа суперских инженеров из Экспресс 42. Они постарались и придумали классный механизм розыгрыша бесплатных мест на курсе среди тех, кто прошел вступительное тестирование. Поэтому на грядущих Днях открытых дверей будем не просто доставать зайца из шляпы - будем крутить "машинку Левенштейна", чтобы найти участников розыгрыша с самой сильной подсознательной любовью к DevOps :) Подробнее можно прочитать тут: https://habrahabr.ru/company/otus/blog/334888/
Так что будет интересно!

После двух Дней открытых дверей мы закроем запись на курс и уже 14 августа DevOps группа начнет занятия. Если вы хотите гарантированно попасть в этот набор (ведь после Дней открытых дверей мест может не остаться) - проходите вступительное тестирование и присоединяйтесь к группе: http://otus.ru/lessons/7/?utm_source=telegram&utm_medium=internal&utm_campaign=devopspost&utm_term=deadline
Многие верят, что 13 – несчастливое число!
К черту суеверия 😉! Нашим 13-м партнером стал Яндекс - одна из самых высокотехнологичных, именитых и желанных компаний для разработчиков.
Мы подписали соглашение о сотрудничестве с Яндексом, а, это значит, что лучших выпускников Яндекс пригласит на собеседования. И это так здорово - ведь теперь у наших студентов стало еще больше шансов получить работу мечты – заниматься действительно интересными задачами в одном из самых современных и комфортных офисов в команде настоящих профессионалов и менять мир к лучшему!
#devops #otus #terraform #infrastructureascode #iac
Разработка приложений с использованием Docker
При разработке цифрового продукта часто одной из самых больных тем является выкатка его обновлений и новых версий. Связано это обычно с тем, что среда, где пишется код, отличается от той, где происходит его тестирование, которая в свою очередь может отличаться от боевой среды, где этот код должен работать и приносить прибыль компании. Примерами таких отличий могут быть разные версии зависимых библиотек, установленных программ и самого языка программирования.
Технология контейнеризации предлагает решение проблемы “ничего не знаю, работает на моей машине”. При помощи контейнеров мы можем упаковать сам код и все его зависимости в единый пакет, который затем будет запускаться и работать одинаково на всех средах. Достигается это за счет изоляции работы контейнеров в операционной системе на различных уровнях. В частности, изоляция на уровне файловой системы позволяет нам избежать постоянных конфликтов версий.
Docker является ведущей платформой по созданию и управлению контейнерами. Начать пользоваться контейнерами очень просто. Docker имеет свое публичное хранилище имиджей DockerHub, которые используются для запуска контейнеров. Там можно найти нужный вам имидж и воспользоваться командой docker run <image-name> для запуска контейнера. Естественно, что перед запуском команды, нужно установить сам Docker.
Чтобы запустить собственное приложение в Docker контейнере, используйте Dockerfile. Например, вот такой простой Dockefile может содержать описание приложения, его зависимостей и требуемую команду для запуска.
FROM python:3.6.0-alpine
RUN pip install flask pymongo
ADD python/ src/
WORKDIR /src
EXPOSE 5000
CMD ["python3", "app.py"]
Если хотите узнать больше о работе с Docker контейнерами, то приходите к нам на курс “DevOps практики и инструменты”. http://otus.ru/lessons/7?utm_source=telegram&utm_medium=internal&utm_campaign=devops&utm_content=deeppost&utm_term=09.08
Там мы детально изучим процессы разработки с использованием Docker и Docker Compose, оркестрацию с Kubernetes и Docker Swarm и еще многое другое!
#deepjava #otus
Принято считать, что многопоточность (multithreading) одна из самых сложных тем в программировании. Давайте разберемся сегодня, что именно в ней сложно, и почему так много разработчиков делают ошибки при разработке приложений, которые работают более чем в одном потоке.

Начнем с того, что в многопоточности… просто. Очень просто, по крайней мере в Java, создать еще один поток. Что такое поток в Java? Как и все остальное, поток в Java это объект. Создать объект потока совсем не сложно: Thread thread = new Thread(); Что в этом объекте особенного? То, что у него есть методы start() и run(). Если, например в методе main(), вызвать у объекта потока метод start(), то через некоторое время у него будет вызван метод run(). И этот вызов будет иметь новый Stack и команды метода run() могут быть выполнены физически в одно и тоже время, что и команды метода main(). То есть… в другом потоке. И в этом первая сложность многопоточности -- поток это объект и поток это последовательность команд. Команд метода run() объекта потока.

Вторая сложность многопоточности в непредсказуемости порядка некоторых событий. Допустим вы создали 10 новых потоков, пронумеровали их и вызвали у них методы start(). Будут ли методы run() этих объектов выполнены в той же последовательности что вы задали при нумерации? Вообще говоря -- нет. То, в какой последовательности будут выполнены методы run() решает… операционная система. И у вас есть только очень опосредованные способы влияния на порядок выполнения (например, через приоритеты).

Ну и самая большая сложность многопоточности это взаимодействие потоков. Если у вас есть задача, которую можно сделать в отдельном потоке, не дожидаясь ее завершения и игнорируя ее результат (например: записать что-то в лог; послать по UDP данные; обработать запрос пользователя, прочитать ответ в базе и отправить пользователю), то многопоточность это легко и весело.

Проблемы начинаются когда несколько потоков хотят взаимодействовать между собой через общую память. Например, если один поток пишет данные, а другой читает. То есть, один меняет общий объект, а второй, в это же время, обращается к полям общего объекта. Ошибки приложения, которые при этом происходят, относят к одному из двух типов: race condition и memory consistency errors. Что это, и как с ними бороться, мы рассмотрим в следующем посте, а более подробно на нашем курсе http://otus.ru/lessons/1?utm_source=telegram&utm_medium=internall&utm_campaign=java&utm_content=deeppost&utm_term=10.08 Присоединяйтесь!
Сегодня вечером мы проведем второй День Открытых дверей на курсе DevOps.
Мы уже писали о том, что для второго Дня Открытых дверей наши преподаватели приготовили невероятно классную модель розыгрыша бесплатных мест на курсе: победителями розыгрыша станут обладатели самой сильной подсознательной любви к DevOps :) В общем, будет весело!
Приходите на День Открытых дверей: узнайте больше о культуре DevOps и курсе в OTUS, задайте свои вопросы преподавателю, следите за розыгрышем.
А если вы хотите принять участие в розыгрыше - проходите вступительное тестирование. Времени осталось совсем мало!
http://otus.ru/lessons/7/?utm_source=telegram&utm_medium=internal&utm_campaign=dod2devops
Сегодня на втором Дне открытых дверей определились победители розыгрыша бесплатных мест на курсе DevOps.
Победителями розыгрыша стали: Леонтьев Игорь и Гринёв Игорь.
Поздравляем!
Как это было можно посмотреть тут: https://www.youtube.com/watch?v=2hRdbt9Fbno
Ошибки использования Ansible
#devops #otus #ansible #infrastructureascode #iac
Ansible одна из самых простых систем управления конфигурацией, она использует декларативное описание конфигурации в YAML формате. Эта простота имеет и обратную сторону медали - используя Ansible без понимания принципов IaC, можно легко скатиться в создание своих bash скриптов, только на Ansible. Чем это плохо? Использование Ansible как bash не обеспечивает идемпотентность. Отсутствие идемпотентности выражается в том, что повторный запуск конфигурационного скрипта может зачастую приводить к неожиданным результатам. В то время, как идея систем управления конфигурацией как Ansible, состоит в том, чтобы привести систему в соответствие с декларативным описанием и не применять конфигурацию дважды для тех компонент, которые уже находятся в требуемом состоянии.
Например:
- name: устанавливаем Apache (используя модуль yum, определенной версии)
yum:
name: httpd-2.4.6-67.0.1.el7
- name: устанавливаем Apache (пытаемся использовать Ansible как bash)
shell: "yum -y install httpd"
Другой частой ошибкой можно назвать отсутствие четкой структуры каталогов с описанием инфраструктуры. Это может быть как сваливание всех YAML файлов в один каталог, так и несогласованное командное взаимодействие, когда один инженер предпочитает одну схему размещения кода, а другой - другую, и в итоге все выглядит хаотичным и весьма сложным для понимания и внесения изменений. Для избежания этого необходимо следовать “Best Practices”, описанным в документации, а также выработать и использовать в команде единый подход к структуре каталогов.
Еще одной характерной для всех систем управления конфигурацией проблемой является их использование для одноразовой настройки системы. Например, мы хотим применить изменение в каком-нибудь файле конфигурации и запускаем плейбук вручную один раз. Для эффективного применения IaC необходимо применять описание инфраструктуры на регулярной основе для обеспечения заданного состояния окружений.
Научиться использовать Ansible и практику Infrastructure as Code вам помогут эксперты из Экспресс 42 в курсе DevOps практики и инструменты, курс стартует уже в понедельник! Присоединяйтесь!
http://otus.ru/lessons/7?utm_source=telegram&utm_medium=internal&utm_campaign=devops&utm_content=deeppost&utm_term=10.08
Завершается посадка на очередной рейс обучения в OTUS курс “DevOps - Практики и инструменты”
Мы провели Два дня открытых дверей, по традиции определили 4 счастливчика, выигравших бесплатные места в группе, рассказали о "фишках" DevOps в постах #deepdevops, создали профессиональное сообщество для успешно прошедших вступительное тестирование, где можно общаться на профессиональные темы. Мы активно знакомили пользователей с нашим продуктом и рассказывали, почему мы больше, чем просто обучающие курсы, отвечали на вопросы и делали много-много всего (в том числе подписали соглашение с 13 партнером, таким важным и долгожданным, как для нас, так и для обучающихся), чтобы наши студенты получили хорошие знания и возможности профессионального и карьерного роста.
Новая группа начинает занятия в понедельник! Это значит, что ближе к вечеру понедельника мы закроем возможность оплаты и присоединения к группе. В группе остались последние места - еще есть совсем немного времени, чтобы успеть присоединиться! http://otus.ru/lessons/7?utm_source=telegram&utm_medium=internal&utm_campaign=devops&utm_term=lastcall
У нас отличная команда преподавателей - инженеров компании Экспресс 42, и мы искренне рады за наших новых студентов - им точно не будет скучно + у них есть возможность личной профессиональной дискуссии с преподавателями - профессионалами своего дела! Мы желаем ребятам успеха и уверены, что курс им понравится!
Совсем скоро - в конце августа и сентябре наши первые выпускники курса Java пойдут на собеседования. Мы с нетерпением ожидаем этого события - ведь мы уверены в своих выпускниках и знаем, что их ждут отличные карьерные перспективы!
Доброе утро, друзья!
Рады сообщить о продолжении набора на курс Python для web разработки!
Старт намечен на 16 сентября - вас ждет 4 месяца обучения, за это время прокачаем и подтянем самые необходимые скилы, структурируем уже полученные знания и потренируемся выполнять боевые задачи под руководством Ильи Лебедева, разработчика с более чем шестилетним стажем в области.
И, в связи с продолжением набора, ловите еще одну заметку #deeppython #deepwebdev #otus
Слышали о GraphQL? Если нет, то давайте вкратце разберем, что это такое и зачем оно нужно.
GraphQL – спецификация протокола для общения фронтенда и бекенда. Чтобы получить данные, нужно отправить запрос на сервер, указав, какие именно данные в каком формате нужны. Например, чтобы получить посты указанного пользователя, можно сделать такой запрос:
posts(user_id=42, is_draft=False) {
noscript,
published_at,
text,
tags {
noscript,
url
}
}

GraphQL обладает плюсами для всех участников.
Для фронтендеров есть много оберток вокруг этого протокола, которые существенно упрощают создание различных компонентов. Это радикально снижает количество кода, который нужно написать и упрощает время реализации интерфейса.
Для бекендеров плюс в том, что благодаря единой точке входа, можно гибко и просто управлять кешированием, удобно собирать данные из разных источников и собирать разные части данных на разным машинах.
И тем и другим удобно то, что вместо большого количества ручек API с разными параметрами, отражающими предметную область, теперь есть только одна, которая позволяет гибко указывать, какие данные нужны, а какие – нет.
Graphene – реализация этой спецификации на Python - подробности которой будем разбирать в программе курса - проходите вступительное тестирование и присоединяйтесь! http://otus.ru/lessons/9?utm_source=telegram&utm_medium=internal&utm_campaign=webdev&utm_term=deeppost21.08
#otus #deepwebdev Представьте, что вы разрабатываете модель данных для вашего приложения. Дело ответственное: скоро модель обрастёт другим кодом и для изменения модели придётся переписывать существенную часть приложения. Ошибки при проектировании модели дорогого стоят.
Рассмотрим несколько правил, которые позволят снизить количество ошибок.
Во-первых, лучше использовать названия из предметной области для моделей и полей. Так, чтобы эксперт в предметной области смог всё понять. О том, как работает приложение этому эксперту знать не нужно: до бизнес-логики дело пока не дошло.
Во-вторых, не стоит придумывать новые сущности для упрощения модели. Иногда хочется придумать промежуточную сущность, которая не имеет смысла в предметной области, но позволяет проще уложить данные в хранилище. Это почти всегда плохая идея: новый термин начинает плохо дружить с существующими сущностями, а при реализации бизнес-логики приходится добавлять всё новые и новые костыли. Не говоря уже о том, что придётся всем объяснять смысл нового термина.
В-третьих, не нужно упрощать связи. Если у поста может быть много авторов, не надо делать одного потому что в сервисе предусмотрен только один автор. Завтра это требование поменяется и жизнь существенно усложниться. А пока не поменялось, количество лишнего кода можно существенно сократить, но не на уровне модели.
Выше перечислены три самые частые ошибки при формировании модели данных. Эти же утверждения лежат в основе Domain Driven Design.
#otus #deepwebdev
Итак, у вас есть приложение. Оно запущено в бою, используемо, и вы хотите знать, какие части приложения за какое время работают. Не сломалось ли чего? Как себя ведут технические и бизнес-метрики. Желательно всё это смотреть в красивом интерфейсе и в реальном времени.
Рассмотрим один из возможных вариантов для реализации этой задачи.
Значения нужных параметров можно хранить в InfluxDB – хранилище данных для временных последовательностей. В него можно класть данные по http-API и получать данные, делая запросы на языке, похожем на SQL. Конечно, есть обёртка вокруг API на Python.
Что отслеживать? Во-первых, время выполнения кода основных обработчиков нашего сервиса целиком и отдельных важных его частей. Количество кода будет небольшое – достаточно написать декоратор или менеджер контекста для отправки метрик в InfluxDB. После этого можно заняться мониторингом бизнес-метрик: отдельно записывать количество регистраций, заказов услуг, прочитанных статей в справке.
Теперь нужно визуализировать эти данные так, чтобы было видно, насколько хорошо всё работает. Для этого хорошо подходит Grafana – гибкое средство для визуализации и мониторинга, которое умеет брать данные из InfluxDB. Оно же умеет сообщать о том, что какие-то параметры вышли за допустимые границы.
На курсе “Python для WEB-разработки” мы разберём, как оптимизировать эту схему для высоконагруженных систем, не превратив при этом систему мониторинга в свалку графиков,а также когда и чем это решение лучше использования Zabbix. Присоединяйтесь, будет интересно! http://otus.ru/lessons/9?utm_source=telegram&utm_medium=internal&utm_campaign=webdev&utm_term=deeppost31.08
13 сентября в 20-00 по Мск у нас состоится День открытых дверей курса Python для Web-Разработки! Присоединяйтесь к нам в онлайн режиме - из любой точки мира - будет интересно и полезно!
Познакомимся с преподавателем расскажем о проекте, о курсе и программе, ответим на все вопросы, и разыграем бесплатное обучение.
Программа курса ориентирована на тех, кто уже уверенно владеет основами и хочет прокачаться до уровня middle/senior.
Научимся выполнять боевые задачи бекенд-разработки: писать поддерживаемый код, выполнять рефакторинг, проектировать схему базы данных и взаимодействие с ней, организовать работу с ошибками и профилирование, проектировать и развивать схему взаимодействия с клиенсайдом, проводить код-ревью и писать тесты.

Проводить День открытых дверей будет преподаватель Илья Лебедев - евангелист Moscow Python, преподаватель курсов Learn Python, сооснователь сервиса Devman.оrg.
Помимо Python 3 (на основе которого разработана программа курса) Илья будет рассказывать всякие интересности про Автотесты, работу с API и много всего прочего, нужного хорошему Веб разработчику!
Продолжительность курса - 4 месяца. Традиционно по результатам обучения лучших студентов пригласят на собеседования компании-партнеры.

Старт занятий намечен на 16 сентября!! Знакомьтесь с программой, проходите вступительное тестирование и присоединяйтесь к нам! https://clck.ru/Bm85k
#otus #deepwebdev
Многие знают только одну команду у pip – install. Этого часто достаточно, но у этого пакетного менеджера есть и другие классные возможности. Давайте рассмотрим некоторые из них.
pip list --outdated – покажет, какие из установленных пакетов можно обновить.
pip install --user <package> – установит пакет глобально, но в домашнюю директорию. Для этого не нужны права суперпользователя. Не работает в виртуальном окружении.
pip show <package> – показывает информацию о пакете, в т.ч. версию, автора и короткое описание.
pip search <query> – ищет на PyPI пакеты, в названии или описании которых входит поисковый запрос. Очень полезно, например, если вы забываете полное название какого-то пакета.
pip completion --bash >> ~/.profile – эта команда научит bash автодополнению команд. Мелочь, но какая приятная!
Это – только часть приятных бонусов, которые нам предоставляет pip. Если захотите больше – добро пожаловать в официальную документацию или на курс Python для Web Разработки.
Проходите тестирование и присоединяйтесь к новой группе http://otus.ru/lessons/python-dlja-web-razrabotki/?utm_source=telegram&utm_medium=internal&utm_campaign=webdev&utm_content=deeppost&utm_term=07.09
Внимание!!! До старта курса “Python для Web Разработки” остались считанные дни - начинаем уже в эту субботу! Время пройти вступительное тестирование и присоединиться к группе еще есть:
https://clck.ru/BnwYJ
13 сентября в 20-00 по Мск у нас состоится День открытых дверей курса Python для Web-Разработки! Присоединяйтесь к нам в онлайн режиме - из любой точки мира. Познакомимся с преподавателем Ильей Лебедевым, расскажем о проекте, о курсе и программе, ответим на все вопросы, и разыграем бесплатные места в группе, будет интересно!.
Программа курса ориентирована на тех, кто уже уверенно владеет основами и хочет прокачаться до уровня middle/senior. Традиционно по результатам курса успешных выпускников пригласят на собеседования наши партнеры - топовые IT компании.
Научимся выполнять боевые задачи бекенд-разработки: писать поддерживаемый код, выполнять рефакторинг, проектировать схему базы данных и взаимодействие с ней, организовать работу с ошибками и профилирование, проектировать и развивать схему взаимодействия с клиенсайдом, проводить код-ревью и писать тесты.
Преподаватель Илья Лебедев - евангелист Moscow Python, преподаватель курсов Learn Python, сооснователь сервиса Devman.оrg. Знакомьтесь с программой, проходите вступительное тестирование и присоединяйтесь к нам!
Открыт набор в третью группу “Java - Разработчик”, стартуем 14 октября!
Что нового?
Главная новость третьего набора в том, что теперь программу курса для вас будут вести 2 преподавателя, а это значит что вы получите в два раза больше качественного общения, опыта и знаний.
Помимо бессменного Виталия Чибрикова, рады представить для вас второго педагога, Дмитрия Архангельского - специалиста с серьезным кейсом знаний и умений в области.
Недавно завершился первый курс “Java-Разработчик” и успешные слушатели уже получили и приняли первые офферы от компаний партнеров, об этом мы обязательно расскажем подробнее - следите за новостями!
Что осталось прежним?
Качество обучения: авторская программа Виталия Чибрикова, проработанная и успешно прочитанная уже двум курсам, дополненная с учетом вопросов возникающих при работе с аудиторией.
Профессиональное сообщество - куда мы рады будем пригласить прошедших вступительное тестирование. Присоединяйтесь, общайтесь и растите профессионально, обмениваться опытом в кругу единомышленников и профессионалов - бесценно!
Приглашение на собеседования от наших компаний партнеров на вакансии разработчиков уровня middle для успешных выпускников курса.
Удобный формат и график занятий, интересные боевые задачи и прекрасная атмосфера на занятиях и в группах для общения и получения новых знаний. Проходите вступительное тестирование. присоединяйтесь к нам! https://clck.ru/Bnxqs
У нас очень, очень, очень классный редизайн Главной страницы: https://otus.ru/?utm_source=telegram&utm_medium=internal&utm_campaign=java
Никаких абстрактных картинок и фотобанковских фото! Мы украсили каждый курс своей яркой, неподражаемой совой и добавили странице динамики!
Вывели на Главную страницу одну из ключевых ценностей OTUS: наших преподавателей. И, конечно, не забыли и о работодателях.
А еще мы обновили меню, добавили блоки с самыми востребованными разделами и напоминания.
Нам очень нравится! А вам? :)