Forwarded from commit history
Этап собеседования Machine Learning System Design.
Этот этап попадался в 9 из 10 компаний. Задача - полностью спроектировать ML решение. От определения задачи и метрик, заканчивая деплоем и оптимизацией.
Здесь важный момент. Время собеседования ограничено. Поэтому с одной стороны важно не растекаться по дереву, с другой стороны важно покрыть все этапы решения ML задачи, а в некоторые даже погрузиться вглубь, чтобы показать что шарите.
В этом помогает четкая структура ответа:
1. Problem definition and requirement clarification. Определение задачи и оценка требований.
2. Data. Источники данных, какая разметка, как выглядит сэмпл.
3. Evaluation. Какие метрики, сравнение с бейзлайном.
4. Features and model. Препроцессинг, варианты моделей.
5. Online eval, deploy. Выкатка + АБ.
6. Further actions. Как дебажить/обновлять/улучшать/ускорять/итд модель.
Каждый из этапов более подробно разобран в репе ML design primer.
Порядок подготовки.
+ Посмотреть видео fb, яндекса, полистать гитхаб ml design primer.
+ Сделать себе пробный собес попробовать задизайнить систему из списка.
+ Почитать пару разборов из технических блогов компаний или инженеров. Например, тут или тут
+ Делать моки (mock-interview). Это когда вы созваниваетесь и устраиваете друг-другу пробный собес. Моки можно искать в этом чате.
+ Получаете фидбек с мока и идете качать слабые места, читаете еще статьи или главы из 329s.
Этот этап попадался в 9 из 10 компаний. Задача - полностью спроектировать ML решение. От определения задачи и метрик, заканчивая деплоем и оптимизацией.
Здесь важный момент. Время собеседования ограничено. Поэтому с одной стороны важно не растекаться по дереву, с другой стороны важно покрыть все этапы решения ML задачи, а в некоторые даже погрузиться вглубь, чтобы показать что шарите.
В этом помогает четкая структура ответа:
1. Problem definition and requirement clarification. Определение задачи и оценка требований.
2. Data. Источники данных, какая разметка, как выглядит сэмпл.
3. Evaluation. Какие метрики, сравнение с бейзлайном.
4. Features and model. Препроцессинг, варианты моделей.
5. Online eval, deploy. Выкатка + АБ.
6. Further actions. Как дебажить/обновлять/улучшать/ускорять/итд модель.
Каждый из этапов более подробно разобран в репе ML design primer.
Порядок подготовки.
+ Посмотреть видео fb, яндекса, полистать гитхаб ml design primer.
+ Сделать себе пробный собес попробовать задизайнить систему из списка.
+ Почитать пару разборов из технических блогов компаний или инженеров. Например, тут или тут
+ Делать моки (mock-interview). Это когда вы созваниваетесь и устраиваете друг-другу пробный собес. Моки можно искать в этом чате.
+ Получаете фидбек с мока и идете качать слабые места, читаете еще статьи или главы из 329s.
Forwarded from commit history
Вброшу ссылок про литкод, мб кому пригодится.
В некоторых компаниях есть этап собеседования с алгоритмическими задачами. На собеседованиях ничего сложнее провалидировать скобки не попадалось, но если в стартапе есть ex-FAANG(MANGA) сотрудник, то могут дать что-то и на динамическое программирование. Ну и в компаниях упомянутых это тоже обязательный пункт. Олимпиадным программированием я не занимался, образование у меня не CS, поэтому все необходимые знания берем из интернета.
На литкоде есть раздел обучения, основные темы разобраны норм + есть практика в виде задачек. Для некоторых задач есть формальные доказательства решений и скорости (У меня правда на собесе такое только 1 раз спрашивали).
https://leetcode.com/explore/learn/
Есть переводы статей одного китайца. Оформлена в виде глав. Некоторые темы разобраны лучше, чем на литкоде, например, логика разделения на паттерны бинарного поиска.
https://labuladong.gitbook.io/algo-en/iii.-algorithmic-thinking/detailedbinarysearch
Список задач, покрывающий основные темы. Удобная сортировка по темам, сложности и компаниям + можно отмечать прогресс:
https://seanprashad.com/leetcode-patterns/
Данный список включает в себя задачи из списка blind-75
https://www.teamblind.com/post/New-Year-Gift---Curated-List-of-Top-100-LeetCode-Questions-to-Save-Your-Time-OaM1orEU
+ с курса на educative.
https://www.educative.io/courses/grokking-the-coding-interview
Решения задач, если где-то застряли можно посмотреть вот тут: https://www.youtube.com/watch?v=KLlXCFG5TnA&list=PLot-Xpze53ldVwtstag2TL4HQhAnC8ATf
Объяснения оч четкие и приятный английский. Изложение более интуитивно понятное, чем решения на литкоде и можно посмотреть за ходом мыслей.
Если кто хочет более фундаментальной подход, вот курс Седжвика https://www.coursera.org/learn/algorithms-part1#syllabus (но задания на джаве там)
В некоторых компаниях есть этап собеседования с алгоритмическими задачами. На собеседованиях ничего сложнее провалидировать скобки не попадалось, но если в стартапе есть ex-FAANG(MANGA) сотрудник, то могут дать что-то и на динамическое программирование. Ну и в компаниях упомянутых это тоже обязательный пункт. Олимпиадным программированием я не занимался, образование у меня не CS, поэтому все необходимые знания берем из интернета.
На литкоде есть раздел обучения, основные темы разобраны норм + есть практика в виде задачек. Для некоторых задач есть формальные доказательства решений и скорости (У меня правда на собесе такое только 1 раз спрашивали).
https://leetcode.com/explore/learn/
Есть переводы статей одного китайца. Оформлена в виде глав. Некоторые темы разобраны лучше, чем на литкоде, например, логика разделения на паттерны бинарного поиска.
https://labuladong.gitbook.io/algo-en/iii.-algorithmic-thinking/detailedbinarysearch
Список задач, покрывающий основные темы. Удобная сортировка по темам, сложности и компаниям + можно отмечать прогресс:
https://seanprashad.com/leetcode-patterns/
Данный список включает в себя задачи из списка blind-75
https://www.teamblind.com/post/New-Year-Gift---Curated-List-of-Top-100-LeetCode-Questions-to-Save-Your-Time-OaM1orEU
+ с курса на educative.
https://www.educative.io/courses/grokking-the-coding-interview
Решения задач, если где-то застряли можно посмотреть вот тут: https://www.youtube.com/watch?v=KLlXCFG5TnA&list=PLot-Xpze53ldVwtstag2TL4HQhAnC8ATf
Объяснения оч четкие и приятный английский. Изложение более интуитивно понятное, чем решения на литкоде и можно посмотреть за ходом мыслей.
Если кто хочет более фундаментальной подход, вот курс Седжвика https://www.coursera.org/learn/algorithms-part1#syllabus (но задания на джаве там)
Leetcode
Explore - LeetCode
LeetCode Explore is the best place for everyone to start practicing and learning on LeetCode. No matter if you are a beginner or a master, there are always new topics waiting for you to explore.
Forwarded from Борис опять
Супер доклад Ozon про прогнозирование спроса (за наводку спасибо Анатолию, у которого нет в тг юзернейма, а то я бы его тегнул, чтобы знали героев в лицо!)
https://youtu.be/UThlbrS3AUU
UPD:
Анатолий пообещал постить клевые ссылки сюда: https://news.1rj.ru/str/AspiringDataScience
https://youtu.be/UThlbrS3AUU
UPD:
Анатолий пообещал постить клевые ссылки сюда: https://news.1rj.ru/str/AspiringDataScience
YouTube
Машинное обучение (lightGBM) и теория вероятностей для предсказания продаж / Александр Алексейцев
Приглашаем на конференцию HighLoad++ 2025, которая пройдет 6 и 7 ноября в Москве!
Программа, подробности и билеты по ссылке: https://highload.ru/moscow/2025
________
При поддержке AvitoTech мы впервые публикуем все видео с HighLoad++ 2019 в открытый доступ.…
Программа, подробности и билеты по ссылке: https://highload.ru/moscow/2025
________
При поддержке AvitoTech мы впервые публикуем все видео с HighLoad++ 2019 в открытый доступ.…
Forwarded from Продакт аналитикс
Привет, дорогие мои подписчики 🤗
Продолжаем наш марафон под названием #какворватьсяваналитику и сегодня вашему вниманию представляю подборку материалов по продуктовым метрикам.
https://www.youtube.com/watch?v=JGVd_a3nVbE и
https://www.youtube.com/watch?v=z9CO-WRiREI - хорошие видео от Андрея, где вы обнаружите много чего интересного - от интервью на любой вкус и цвет (и даже со мной) до полезных видео для новичков и не только
https://gopractice.ru/product/added_value_metrics/ - незыблемо актуальная статья от Олега Якубенкова про разницу метрик роста и метрик продукта
https://amplitude.com/blog/product-north-star-metric - руководство от Amplitude по тому, как выбрать целеполагающую метрику (ака метрику полярной звезды) с книжкой внутри
https://towardsdatascience.com/defining-product-metrics-the-ultimate-guide-part-1-of-2-585b8c63fcef - очень люблю материалы этого блога (и этот тоже не исключение) - подробненько о метриках
https://medium.com/the-pm-digest/the-product-metrics-guide-c4a16d5640b6 - неплохой гайд по продуктовым метрикам с фреймворками и даже кое-какими инструментами в помощь
https://medium.com/@ll.ltsnk/how-to-build-a-product-metrics-map-1291ba2226d9 - краткое руководство, вещающее о том, как выстроить карту метрик (не опять, а снова с фреймворками, но повторенье - мать ученья!)
https://medium.com/datainterview/principles-and-frameworks-of-product-metrics-youtube-case-study-ff63257a82d3 - неплохой разбор подхода к продуктовым метрикам
https://medium.com/@userpilot/2022-guide-to-saas-product-metrics-for-product-growth-managers-5c349ffdf9b - познавательная статья про метрики для SaaS
Ну и классика : как-то был такой вот пост-словарик с метриками и, например, такая занятная статья от Mixpanel. Словом, успешного вам погружения в метрики!
Следующий пост будет про интервью и прочие полезности 🙂
#полезности #позапросамстраждущих
Продолжаем наш марафон под названием #какворватьсяваналитику и сегодня вашему вниманию представляю подборку материалов по продуктовым метрикам.
https://www.youtube.com/watch?v=JGVd_a3nVbE и
https://www.youtube.com/watch?v=z9CO-WRiREI - хорошие видео от Андрея, где вы обнаружите много чего интересного - от интервью на любой вкус и цвет (и даже со мной) до полезных видео для новичков и не только
https://gopractice.ru/product/added_value_metrics/ - незыблемо актуальная статья от Олега Якубенкова про разницу метрик роста и метрик продукта
https://amplitude.com/blog/product-north-star-metric - руководство от Amplitude по тому, как выбрать целеполагающую метрику (ака метрику полярной звезды) с книжкой внутри
https://towardsdatascience.com/defining-product-metrics-the-ultimate-guide-part-1-of-2-585b8c63fcef - очень люблю материалы этого блога (и этот тоже не исключение) - подробненько о метриках
https://medium.com/the-pm-digest/the-product-metrics-guide-c4a16d5640b6 - неплохой гайд по продуктовым метрикам с фреймворками и даже кое-какими инструментами в помощь
https://medium.com/@ll.ltsnk/how-to-build-a-product-metrics-map-1291ba2226d9 - краткое руководство, вещающее о том, как выстроить карту метрик (не опять, а снова с фреймворками, но повторенье - мать ученья!)
https://medium.com/datainterview/principles-and-frameworks-of-product-metrics-youtube-case-study-ff63257a82d3 - неплохой разбор подхода к продуктовым метрикам
https://medium.com/@userpilot/2022-guide-to-saas-product-metrics-for-product-growth-managers-5c349ffdf9b - познавательная статья про метрики для SaaS
Ну и классика : как-то был такой вот пост-словарик с метриками и, например, такая занятная статья от Mixpanel. Словом, успешного вам погружения в метрики!
Следующий пост будет про интервью и прочие полезности 🙂
#полезности #позапросамстраждущих
YouTube
ПРОДУКТ в IT. Как рассчитать основные метрики? Просто о сложных формулах
Все знают, что IT повсюду. И все хотя бы раз слышали про метрики IT продуктов. Но не все умеют их различать между собой, знают, зачем они нужны и понимают, как их считать.
ARPU, ROI, ARPPU, DAU, MAU, LTV, Churn Rate, Retention - все звучит как ругательства…
ARPU, ROI, ARPPU, DAU, MAU, LTV, Churn Rate, Retention - все звучит как ругательства…
Forwarded from almosh
вот еще было, особенно интересным кажется список литературы
https://habr.com/ru/post/559394/
https://habr.com/ru/post/559394/
Хабр
Гайд начинающего тимлида
В данной статье хотелось бы помочь разобраться в профессии начинающим тимлидам, или тем, кто об этом только думает.Всё это я проговаривал на вебинаре в Хекслете тут. Однако я уверен, что есть такие...
Forwarded from Phil Delgyado
Из моих статей - лучше уж https://habr.com/ru/company/oleg-bunin/blog/456514/
Forwarded from IT лекции
📌 Асинхронность в Python
#1: Введение - Смотреть
#2: Асинхронность с простыми функциями. Событийный цикл. - Смотреть
#3: Асинхронность на колбэках - Смотреть
#4: Генераторы и событийный цикл Round Robin - Смотреть
#5: Асинхронность на генераторах - Смотреть
#6: Корутины и yield from - Смотреть
#7: Asyncio, async/await - Смотреть
#8: Опять про генераторы - Смотреть
@itlecture
#1: Введение - Смотреть
#2: Асинхронность с простыми функциями. Событийный цикл. - Смотреть
#3: Асинхронность на колбэках - Смотреть
#4: Генераторы и событийный цикл Round Robin - Смотреть
#5: Асинхронность на генераторах - Смотреть
#6: Корутины и yield from - Смотреть
#7: Asyncio, async/await - Смотреть
#8: Опять про генераторы - Смотреть
@itlecture
YouTube
Основы асинхронности в Python #1: Введение
Мои курсы:
Boosty:
https://boosty.to/omolchanov/posts/995a18dd-487b-4000-9b3f-0aafa5e060cd
Patreon:
https://www.patreon.com/posts/karty-vsekh-41011404
Основы асинхронности в Python для начинающих, она же "кооперативная многозадачность".
Речь в этой серии…
Boosty:
https://boosty.to/omolchanov/posts/995a18dd-487b-4000-9b3f-0aafa5e060cd
Patreon:
https://www.patreon.com/posts/karty-vsekh-41011404
Основы асинхронности в Python для начинающих, она же "кооперативная многозадачность".
Речь в этой серии…
Forwarded from ИЦ "ГЕВИССТА"
Общие советы по прогнозированию рядов для учеников и не только
Активно общался на этой неделе с учениками, занимающимися прогнозированием временных рядов. Не спорьте, что лучше работает в вашей задаче, не зацикливайтесь на чем-то одном – бустинге, ARIMA, TFT или DeepAR. Пробуйте разные модели, идя от простых к сложным. Лучше написать метакласс, подать ему на вход разные модели от наивного прогноза до TFT и построить бейслайны. Ну а если хотите бустинг, то и про лес не забудьте, потом часто ребята забывают про метакласс BaggingRegressor, который дает вам сразу несколько методов ансаблирования: бэггинг, пэстинг, случайные подпространства и случайные патчи. Удобнее всего сделать такой метакласс в ETNA, у меня выше в выложенном материале по ETNA примеры есть (можно такой класс сделать на базе функции train_and_evaluate_model()). Иначе кучу времени убьете на тот же бустинг, а потом окажется, что его легко бьет модель сезонного скользящего среднего. Если рядов много, кластеризуйте (евклидово, DTW, по домену – по скорости оборота, по ценовому диапазону, сроку хранения и прочему) и стройте по кластерам.
В прогнозировании большого количества рядов обычно две универсальные ошибки – агрегация там, где нужна сегментация, и сегментация там, где нужна агрегация. Я постоянно привожу пример со скорингом кредитных карт – определяем размер лимита. У вас есть активные пользователи и пассивные пользователи. Для одних утилизация – сильная переменная, для других – слабая, в итоге модель выводит среднее по больнице. Так и в рядах. Взяли – собрали вместе редко покупаемые товары вместе с часто покупаемыми товарами и прогнозируем одной моделью, а лучше выделить в разные сегменты и разными моделями, не только разные наборы гиперпараметров, но надо и разные лоссы пробовать. С бустингом вообще частая ошибка – зацикленность на одном лоссе. Другой пример – пытаемся прогнозировать отдельными моделями втулки и скрепки. Возможно, лучше агрегировать в более общую категорию. Для товаров с редкими продажами обязательно попробовать zero-inflated models.
Джентльменский набор по FE для бейслайна – лаг по горизонту, скользящая статистика – по горизонту, если есть сезонность – компоненты ряда Фурье (период задаете по периодограмме) и календарные признаки для этой сезонности (а не скопом, сделаю-ка я все разом, бустинг сам разберется, так вот не разберется), если есть тренд и применяете бустинг – детрендинг. Но если тренд слабо выражен или затухающий, детрендинг может и навредить. Сразу кучу лагов и скользящих статистик не делаете, у вас на начальном этапе слишком мало информации. Делайте отладку – добавляйте признаки поэтапно и смотрите, как меняются прогнозы. На следующей неделе скину примеры такой отладки.
Если слышите «сейчас встречаю столько статей, посвященных применению (название метода/библиотеки), надо применять именно (название метода/библиотеки)», вспомните про «ошибку выжившего». Да, возможно много статей опубликовано по успешному применению какого-то конкретного метода/библиотеки для рядов. Однако задайте себе вопрос «а сколько статей не было напечатано/свернуто/выкинуто в корзину из-за того, что данный метод не оправдал себя, потерпел неудачу?». Полезно было бы именно эти статьи прочитать, но вряд ли мы их увидим, люди редко делятся проколами, для этого нужна определенная зрелость. Внимательно изучайте свои собственные неудачные проекты по рядам, неудачные соревнования по рядам, ведите failure history и интересуйтесь неудачными проектами по рядам, которые были у коллег, если те готовы делиться.
Активно общался на этой неделе с учениками, занимающимися прогнозированием временных рядов. Не спорьте, что лучше работает в вашей задаче, не зацикливайтесь на чем-то одном – бустинге, ARIMA, TFT или DeepAR. Пробуйте разные модели, идя от простых к сложным. Лучше написать метакласс, подать ему на вход разные модели от наивного прогноза до TFT и построить бейслайны. Ну а если хотите бустинг, то и про лес не забудьте, потом часто ребята забывают про метакласс BaggingRegressor, который дает вам сразу несколько методов ансаблирования: бэггинг, пэстинг, случайные подпространства и случайные патчи. Удобнее всего сделать такой метакласс в ETNA, у меня выше в выложенном материале по ETNA примеры есть (можно такой класс сделать на базе функции train_and_evaluate_model()). Иначе кучу времени убьете на тот же бустинг, а потом окажется, что его легко бьет модель сезонного скользящего среднего. Если рядов много, кластеризуйте (евклидово, DTW, по домену – по скорости оборота, по ценовому диапазону, сроку хранения и прочему) и стройте по кластерам.
В прогнозировании большого количества рядов обычно две универсальные ошибки – агрегация там, где нужна сегментация, и сегментация там, где нужна агрегация. Я постоянно привожу пример со скорингом кредитных карт – определяем размер лимита. У вас есть активные пользователи и пассивные пользователи. Для одних утилизация – сильная переменная, для других – слабая, в итоге модель выводит среднее по больнице. Так и в рядах. Взяли – собрали вместе редко покупаемые товары вместе с часто покупаемыми товарами и прогнозируем одной моделью, а лучше выделить в разные сегменты и разными моделями, не только разные наборы гиперпараметров, но надо и разные лоссы пробовать. С бустингом вообще частая ошибка – зацикленность на одном лоссе. Другой пример – пытаемся прогнозировать отдельными моделями втулки и скрепки. Возможно, лучше агрегировать в более общую категорию. Для товаров с редкими продажами обязательно попробовать zero-inflated models.
Джентльменский набор по FE для бейслайна – лаг по горизонту, скользящая статистика – по горизонту, если есть сезонность – компоненты ряда Фурье (период задаете по периодограмме) и календарные признаки для этой сезонности (а не скопом, сделаю-ка я все разом, бустинг сам разберется, так вот не разберется), если есть тренд и применяете бустинг – детрендинг. Но если тренд слабо выражен или затухающий, детрендинг может и навредить. Сразу кучу лагов и скользящих статистик не делаете, у вас на начальном этапе слишком мало информации. Делайте отладку – добавляйте признаки поэтапно и смотрите, как меняются прогнозы. На следующей неделе скину примеры такой отладки.
Если слышите «сейчас встречаю столько статей, посвященных применению (название метода/библиотеки), надо применять именно (название метода/библиотеки)», вспомните про «ошибку выжившего». Да, возможно много статей опубликовано по успешному применению какого-то конкретного метода/библиотеки для рядов. Однако задайте себе вопрос «а сколько статей не было напечатано/свернуто/выкинуто в корзину из-за того, что данный метод не оправдал себя, потерпел неудачу?». Полезно было бы именно эти статьи прочитать, но вряд ли мы их увидим, люди редко делятся проколами, для этого нужна определенная зрелость. Внимательно изучайте свои собственные неудачные проекты по рядам, неудачные соревнования по рядам, ведите failure history и интересуйтесь неудачными проектами по рядам, которые были у коллег, если те готовы делиться.
Forwarded from DevFM
Подборка базовых материалов для python-разработчиков на 2022 год
Современная разработка требует не только знания языка программирования. Нужно знать язык, типы данных, фреймворки, базы данных, подходы к тестированию, linux и вообще кучу инструментов вроде docker. Совершенно не лишним будут книги, собирающие большую разнородную информацию в понятном и последовательном виде.
Мы сформировали подборку бесплатных материалов из разных областей, которые гарантированно нужны разработчику. Опубликовали на pikabu и VC, кому как удобнее. Поддержите лайком, если годно.
Не нашли крутых материалов для начинающих по Linux. Если знаете такие, поделитесь в комментариях. Планируем ещё несколько подборок по специализациям.
#python #devfm
Современная разработка требует не только знания языка программирования. Нужно знать язык, типы данных, фреймворки, базы данных, подходы к тестированию, linux и вообще кучу инструментов вроде docker. Совершенно не лишним будут книги, собирающие большую разнородную информацию в понятном и последовательном виде.
Мы сформировали подборку бесплатных материалов из разных областей, которые гарантированно нужны разработчику. Опубликовали на pikabu и VC, кому как удобнее. Поддержите лайком, если годно.
Не нашли крутых материалов для начинающих по Linux. Если знаете такие, поделитесь в комментариях. Планируем ещё несколько подборок по специализациям.
#python #devfm
Пикабу
Ответ trdm в «Яндекс и "Цифровые профессии"»
Автор: anetto1502
Forwarded from Записки MLEшника (Egor)
Хочу рассказать о горячо любомом мной инструменте - pre-commit хуках. Начну немного издалека.
Если меня спросят: "В чем сила, брат?", я отвечу: "В унификации и стандартизации". Врядли бы мы достигли текущего уровня развития техники, не стандартизируй предки болты, транзисторы и еще куча всего. Программное обеспечение - не исключение.
Рекомендации по оформлению кода содержатся в PEP8 (стайлгайд к языку). Но лень же каждый раз дотошно редактировать все строки кода. Для автоматизации форматирования кода есть соответствующие инструменты - форматеры (formatters). Например, black (форматирует классы, функции, литералы и др.), isort (сортирует импорты по алфавиту) или pycln (удаляет неиспользуемые импорты). Запустив их по очереди, вы получите отформатированный по код. Чтобы дополнительно проверить на соответствие PEP8, можем запустить flake8 (проверяет, что код соответствует PEP8). Также flake находит неиспользуемые переменные, повтореную инициализацию или просто слишком сложные функции. Красота 🌝
Возник резонный вопрос: "А не многовато всего руками на каждый коммит запускать?!". Ответ убил - pre-commit хуки.
Эти ребята будут за вас запускать весь этот паровоз кода при каждом коммите (пуше, пуле - как настроите). Я влюбился в это с первого взгляда.
Очень советую данный инструмент командам. С момента добавления хуков в репозиторий у нас не было ни одного спора в пиарах по поводу кавычек, переноса строк и тому подобного 💁♀️. Также мы добавили эту проверку в CI, чтобы наверняка.
Также в хуки можно добавить mypy или даже dvc. Например, если хотите делать dvc push на каждый git push.
Тут пример моего конфига, который без особых изменений кочует из проекта в проект. На каждый коммит:
1. Запускает набор хуков из репы pre-commit (форматирует жейсоны, ямли, иксемели, рекваерменты)
2. Запускает pycln (удаляются все неиспользуемые импорты)
3. Запускает black (форматируется код по PEP8. Тут же, например, кавычки заменяются на двойные)
4. Запускает isort (переупорядочивает и сортирует импорты)
5. Запускает flake8 (проверяет, все ли у нас по PEP8. Также покажет, если остались неиспользуемые переменные)
Пайплайн использования такой:
1. Делаете комит
2. Хуки запускаются. Видят, что есть косяки. Редактируют код. Отменяют ваш комит.
3. Добавляете изменения, которые внесли хуки в комит.
4. Делаете комит
Вся эта красота устанавливается в две команды:
Если меня спросят: "В чем сила, брат?", я отвечу: "В унификации и стандартизации". Врядли бы мы достигли текущего уровня развития техники, не стандартизируй предки болты, транзисторы и еще куча всего. Программное обеспечение - не исключение.
Рекомендации по оформлению кода содержатся в PEP8 (стайлгайд к языку). Но лень же каждый раз дотошно редактировать все строки кода. Для автоматизации форматирования кода есть соответствующие инструменты - форматеры (formatters). Например, black (форматирует классы, функции, литералы и др.), isort (сортирует импорты по алфавиту) или pycln (удаляет неиспользуемые импорты). Запустив их по очереди, вы получите отформатированный по код. Чтобы дополнительно проверить на соответствие PEP8, можем запустить flake8 (проверяет, что код соответствует PEP8). Также flake находит неиспользуемые переменные, повтореную инициализацию или просто слишком сложные функции. Красота 🌝
Возник резонный вопрос: "А не многовато всего руками на каждый коммит запускать?!". Ответ убил - pre-commit хуки.
Эти ребята будут за вас запускать весь этот паровоз кода при каждом коммите (пуше, пуле - как настроите). Я влюбился в это с первого взгляда.
Очень советую данный инструмент командам. С момента добавления хуков в репозиторий у нас не было ни одного спора в пиарах по поводу кавычек, переноса строк и тому подобного 💁♀️. Также мы добавили эту проверку в CI, чтобы наверняка.
Также в хуки можно добавить mypy или даже dvc. Например, если хотите делать dvc push на каждый git push.
Тут пример моего конфига, который без особых изменений кочует из проекта в проект. На каждый коммит:
1. Запускает набор хуков из репы pre-commit (форматирует жейсоны, ямли, иксемели, рекваерменты)
2. Запускает pycln (удаляются все неиспользуемые импорты)
3. Запускает black (форматируется код по PEP8. Тут же, например, кавычки заменяются на двойные)
4. Запускает isort (переупорядочивает и сортирует импорты)
5. Запускает flake8 (проверяет, все ли у нас по PEP8. Также покажет, если остались неиспользуемые переменные)
Пайплайн использования такой:
1. Делаете комит
2. Хуки запускаются. Видят, что есть косяки. Редактируют код. Отменяют ваш комит.
3. Добавляете изменения, которые внесли хуки в комит.
4. Делаете комит
Вся эта красота устанавливается в две команды:
pip install pre-commit
pre-commit install
Forwarded from DevFM
Kubernetes в небольших проектах
Для запуска приложения из нескольких компонент применяется docker compose. А с Kubernetes обычно сталкиваешься уже на достаточно больших проектах со сложной сервисной архитектурой.
Современному инженеру следует знать о Kubernetes. Он сейчас применяется повсеместно и позволяет сделать проект надёжным, отказоустойчивым и горизонтально масштабируемым.
Начинается статья с основ: что такое кубер, из каких компонентов состоит и как функционирует. Рассказав базу, автор переходит к инфраструктурным задачам, которые перед ними стоят и то, как кубер помогает их решать.
Среди задач выделяют:
— сбор логов
— сбор метрик
— проверка работоспособности сервисов
— автоматическое обнаружение сервисов
— масштабирование
Для любителей видео формата: доклад.
Для особо любопытных в конце приводятся ссылки на статьи по смежным областям. Нам нравится статья: Лучшие практики CI/CD с Kubernetes и GitLab.
#skills
Для запуска приложения из нескольких компонент применяется docker compose. А с Kubernetes обычно сталкиваешься уже на достаточно больших проектах со сложной сервисной архитектурой.
Современному инженеру следует знать о Kubernetes. Он сейчас применяется повсеместно и позволяет сделать проект надёжным, отказоустойчивым и горизонтально масштабируемым.
Начинается статья с основ: что такое кубер, из каких компонентов состоит и как функционирует. Рассказав базу, автор переходит к инфраструктурным задачам, которые перед ними стоят и то, как кубер помогает их решать.
Среди задач выделяют:
— сбор логов
— сбор метрик
— проверка работоспособности сервисов
— автоматическое обнаружение сервисов
— масштабирование
Для любителей видео формата: доклад.
Для особо любопытных в конце приводятся ссылки на статьи по смежным областям. Нам нравится статья: Лучшие практики CI/CD с Kubernetes и GitLab.
#skills
Хабр
Наш опыт с Kubernetes в небольших проектах (обзор и видео доклада)
6 июня на конференции RootConf 2017, проходившей в рамках фестиваля «Российские интернет-технологии» (РИТ++ 2017), в секции «Непрерывное развертывание и деплой» прозвучал доклад «Наш опыт с...