en
Feedback
OTUS: программирование и карьера в IT

OTUS: программирование и карьера в IT

Open in Telegram

Канал для быстрого карьерного роста в IT: опыт практиков, актуальные технологии и инструменты, чтобы быть впереди коллег и привлечь внимание руководителей. Иногда шутим! 🔔Включайте уведомления, чтобы не пропустить!

Show more
7 345
Subscribers
-224 hours
+47 days
+1230 days
Posts Archive
#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

13 сентября в 20-00 по Мск у нас состоится День открытых дверей курса Python для Web-Разработки! Присоединяйтесь к нам в онлайн режиме - из любой точки мира - будет интересно и полезно! Познакомимся с преподавателем расскажем о проекте, о курсе и программе, ответим на все вопросы, и разыграем бесплатное обучение. Программа курса ориентирована на тех, кто уже уверенно владеет основами и хочет прокачаться до уровня middle/senior. Научимся выполнять боевые задачи бекенд-разработки: писать поддерживаемый код, выполнять рефакторинг, проектировать схему базы данных и взаимодействие с ней, организовать работу с ошибками и профилирование, проектировать и развивать схему взаимодействия с клиенсайдом, проводить код-ревью и писать тесты. Проводить День открытых дверей будет преподаватель Илья Лебедев - евангелист Moscow Python, преподаватель курсов Learn Python, сооснователь сервиса Devman.оrg. Помимо Python 3 (на основе которого разработана программа курса) Илья будет рассказывать всякие интересности про Автотесты, работу с API и много всего прочего, нужного хорошему Веб разработчику! Продолжительность курса - 4 месяца. Традиционно по результатам обучения лучших студентов пригласят на собеседования компании-партнеры. Старт занятий намечен на 16 сентября!! Знакомьтесь с программой, проходите вступительное тестирование и присоединяйтесь к нам! https://clck.ru/Bm85k

Доброе утро. друзья! В рамках набора на наш курс "Python для Web - Разработки" ловите полезную статью :) https://habrahabr.ru/company/otus/blog/337108/

#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

#otus #deepwebdev Представьте, что вы разрабатываете модель данных для вашего приложения. Дело ответственное: скоро модель обрастёт другим кодом и для изменения модели придётся переписывать существенную часть приложения. Ошибки при проектировании модели дорогого стоят. Рассмотрим несколько правил, которые позволят снизить количество ошибок. Во-первых, лучше использовать названия из предметной области для моделей и полей. Так, чтобы эксперт в предметной области смог всё понять. О том, как работает приложение этому эксперту знать не нужно: до бизнес-логики дело пока не дошло. Во-вторых, не стоит придумывать новые сущности для упрощения модели. Иногда хочется придумать промежуточную сущность, которая не имеет смысла в предметной области, но позволяет проще уложить данные в хранилище. Это почти всегда плохая идея: новый термин начинает плохо дружить с существующими сущностями, а при реализации бизнес-логики приходится добавлять всё новые и новые костыли. Не говоря уже о том, что придётся всем объяснять смысл нового термина. В-третьих, не нужно упрощать связи. Если у поста может быть много авторов, не надо делать одного потому что в сервисе предусмотрен только один автор. Завтра это требование поменяется и жизнь существенно усложниться. А пока не поменялось, количество лишнего кода можно существенно сократить, но не на уровне модели. Выше перечислены три самые частые ошибки при формировании модели данных. Эти же утверждения лежат в основе Domain Driven Design.

Доброе утро, друзья! Рады сообщить о продолжении набора на курс Python для web разработки! Старт намечен на 16 сентября - вас ждет 4 месяца обучения, за это время прокачаем и подтянем самые необходимые скилы, структурируем уже полученные знания и потренируемся выполнять боевые задачи под руководством Ильи Лебедева, разработчика с более чем шестилетним стажем в области. И, в связи с продолжением набора, ловите еще одну заметку #deeppython #deepwebdev #otus Слышали о GraphQL? Если нет, то давайте вкратце разберем, что это такое и зачем оно нужно. GraphQL – спецификация протокола для общения фронтенда и бекенда. Чтобы получить данные, нужно отправить запрос на сервер, указав, какие именно данные в каком формате нужны. Например, чтобы получить посты указанного пользователя, можно сделать такой запрос: posts(user_id=42, is_draft=False) { title, published_at, text, tags { title, url } } GraphQL обладает плюсами для всех участников. Для фронтендеров есть много оберток вокруг этого протокола, которые существенно упрощают создание различных компонентов. Это радикально снижает количество кода, который нужно написать и упрощает время реализации интерфейса. Для бекендеров плюс в том, что благодаря единой точке входа, можно гибко и просто управлять кешированием, удобно собирать данные из разных источников и собирать разные части данных на разным машинах. И тем и другим удобно то, что вместо большого количества ручек API с разными параметрами, отражающими предметную область, теперь есть только одна, которая позволяет гибко указывать, какие данные нужны, а какие – нет. Graphene – реализация этой спецификации на Python - подробности которой будем разбирать в программе курса - проходите вступительное тестирование и присоединяйтесь! http://otus.ru/lessons/9?utm_source=telegram&utm_medium=internal&utm_campaign=webdev&utm_term=deeppost21.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 пойдут на собеседования. Мы с нетерпением ожидаем этого события - ведь мы уверены в своих выпускниках и знаем, что их ждут отличные карьерные перспективы!

Ошибки использования 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

Сегодня на втором Дне открытых дверей определились победители розыгрыша бесплатных мест на курсе DevOps. Победителями розыгрыша стали: Леонтьев Игорь и Гринёв Игорь. Поздравляем! Как это было можно посмотреть тут: https://www.youtube.com/watch?v=2hRdbt9Fbno

Совсем скоро начинаем второй День Открытых дверей по DevOps. Присоединяйтесь! https://www.youtube.com/channel/UCetgtvy93o3i3CvyGXKFU3g/live

Сегодня вечером мы проведем второй День Открытых дверей на курсе DevOps. Мы уже писали о том, что для второго Дня Открытых дверей наши преподаватели приготовили невероятно классную модель розыгрыша бесплатных мест на курсе: победителями розыгрыша станут обладатели самой сильной подсознательной любви к DevOps :) В общем, будет весело! Приходите на День Открытых дверей: узнайте больше о культуре DevOps и курсе в OTUS, задайте свои вопросы преподавателю, следите за розыгрышем. А если вы хотите принять участие в розыгрыше - проходите вступительное тестирование. Времени осталось совсем мало! http://otus.ru/lessons/7/?utm_source=telegram&utm_medium=internal&utm_campaign=dod2devops

#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 #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 и еще многое другое!

Многие верят, что 13 – несчастливое число! К черту суеверия 😉! Нашим 13-м партнером стал Яндекс - одна из самых высокотехнологичных, именитых и желанных компаний для разработчиков. Мы подписали соглашение о сотрудничестве с Яндексом, а, это значит, что лучших выпускников Яндекс пригласит на собеседования. И это так здорово - ведь теперь у наших студентов стало еще больше шансов получить работу мечты – заниматься действительно интересными задачами в одном из самых современных и комфортных офисов в команде настоящих профессионалов и менять мир к лучшему!

Совсем скоро начинаем первый День открытых дверей по DevOps. Присоединяйтесь: https://www.youtube.com/channel/UCetgtvy93o3i3CvyGXKFU3g/live

Мы хотим уже на следующей неделе (в понедельник и четверг) провести два Дня открытых дверей на курсе 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

#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 Проходите вступительное тестирование и присоединяйтесь!.

Сегодня на втором Дне открытых дверей определились победители розыгрыша бесплатных мест на курсе Web Разработчик на Python. Победителями розыгрыша стали: Сухих Алексей и Фокин Александр Поздравляем! Как это было можно посмотреть тут: https://www.youtube.com/watch?v=op7RFcRONl0

Чуть больше, чем через час Совсем скоро мы начнем второй День Открытых дверей на курсе WEB разработчик. В программе рассказ о курсе, ответы на вопросы, розыгрыш бесплатных мест среди тех, кто успешно сдал вступительное тестирование. Присоединяйтесь: https://www.youtube.com/channel/UCetgtvy93o3i3CvyGXKFU3g/live