Переснят звук для видео про forkbomb (16 минут).
Есть такой вид DoS-атаки — forkbomb. Запускается процесс, который бесконечно порождает сам себя, пожирая все ресурсы системы. На видео запускается forkbomb внутри docker-контейнера с разными ограничениями (оперативная память, PID-лимиты, cpu). Демонстрируется, что можно сделать в таком контейнере. Показывается применение команд:
— docker run / exec / stop / stats
— lscpu / nproc
— uptime
— free
— top / ps
Будьте осторожны. Неаккуратное обращение с forkbomb чревато ребутом.
#youtube #skills #devfm
Есть такой вид DoS-атаки — forkbomb. Запускается процесс, который бесконечно порождает сам себя, пожирая все ресурсы системы. На видео запускается forkbomb внутри docker-контейнера с разными ограничениями (оперативная память, PID-лимиты, cpu). Демонстрируется, что можно сделать в таком контейнере. Показывается применение команд:
— docker run / exec / stop / stats
— lscpu / nproc
— uptime
— free
— top / ps
Будьте осторожны. Неаккуратное обращение с forkbomb чревато ребутом.
#youtube #skills #devfm
YouTube
Fork-бомба в Docker-контейнере | Forkbomb in Docker
Посмотрим, как ведёт себя Forkbomb (классическая DoS - Denial-Of-Service attack) внутри Docker-контейнера. Рассматриваются bash-forkbomb, разные ресурсы компьютера с Ubuntu (cpu, mem, pid_max), запуск Docker-контейнера с Ubuntu с отслеживанием docker stats…
🔥7👍3
Пятничное развлекательное. Сегодня буковки.
На хабре есть очень крутой автор — Milfgard. Он создал Мосигру и возродил популярность настольных игр в РФ. Занимался много чем, в том числе организацией детских футбольных школ. Сейчас он руководитель в туту.ру и много путешествует.
От души обожаю каждую его статью. Сохраняю их в закладки как "юмор - мотивационное". Milfgard в статьях
— ходит по магазинам,
— разбирает бобров,
— изучает уязвимости в прошивках австралийских животных,
— пишет про образование и системное отличие бессмертной Галадриэль и весьма смертного Арагорна,
— рассказывает про защиту детей от информации на примерах,
— из камер и палок собирает видеоаналитику для детских футбольных школ,
— рассказывает про историю Британской Ост-индской компании,
— про социнжинеринг,
— и кассовые разрывы в бизнесе.
В конце концов, он соавтор трёх книг по бизнесу, которые я очень люблю перечитывать.
А для настроения вам видео — мягкий тетрис. Немного нервирует, но очень расслабляет в результате
#fun #books
На хабре есть очень крутой автор — Milfgard. Он создал Мосигру и возродил популярность настольных игр в РФ. Занимался много чем, в том числе организацией детских футбольных школ. Сейчас он руководитель в туту.ру и много путешествует.
От души обожаю каждую его статью. Сохраняю их в закладки как "юмор - мотивационное". Milfgard в статьях
— ходит по магазинам,
— разбирает бобров,
— изучает уязвимости в прошивках австралийских животных,
— пишет про образование и системное отличие бессмертной Галадриэль и весьма смертного Арагорна,
— рассказывает про защиту детей от информации на примерах,
— из камер и палок собирает видеоаналитику для детских футбольных школ,
— рассказывает про историю Британской Ост-индской компании,
— про социнжинеринг,
— и кассовые разрывы в бизнесе.
В конце концов, он соавтор трёх книг по бизнесу, которые я очень люблю перечитывать.
А для настроения вам видео — мягкий тетрис. Немного нервирует, но очень расслабляет в результате
#fun #books
Telegram
Красные пики
Маленькие истории с лёгкими нотками безумия.
Контакты – @milfgard
Контакты – @milfgard
🔥9
Ранее мы писали, что логгирование значительно лучше отладочной печати принтами.
Вверху сконфигурируем логгер. В fmt внесём структуру записи в лог, в datefmt — формат даты, в style — тип переменных в fmt, у нас выбран format-вид в фигурных скобках.
На 10 строке показан вариант ручной настройки уровня логгера, на 11 уровень берётся из переменной окружения LOGLEVEL, если переменная не существует — то уровень INFO.
В функции add_user мы с уровнем debug пишем какие-то несущественные сообщения, с уровнем info — важные этапы работы, в error пишем ошибки, например, в случае исключений.
Внизу пример вывода. В зависимости от переменной окружения у нас либо подробный лог, либо очень краткий. К каждому нашему сообщению автоматически (согласно fmt вверху) добавлена куча доп информации — уровень сообщения, дата и время, модуль, функция и строка, где сообщение было сформировано.
#python #codereview
Вверху сконфигурируем логгер. В fmt внесём структуру записи в лог, в datefmt — формат даты, в style — тип переменных в fmt, у нас выбран format-вид в фигурных скобках.
На 10 строке показан вариант ручной настройки уровня логгера, на 11 уровень берётся из переменной окружения LOGLEVEL, если переменная не существует — то уровень INFO.
В функции add_user мы с уровнем debug пишем какие-то несущественные сообщения, с уровнем info — важные этапы работы, в error пишем ошибки, например, в случае исключений.
Внизу пример вывода. В зависимости от переменной окружения у нас либо подробный лог, либо очень краткий. К каждому нашему сообщению автоматически (согласно fmt вверху) добавлена куча доп информации — уровень сообщения, дата и время, модуль, функция и строка, где сообщение было сформировано.
#python #codereview
🔥7👍3
Bash отлично подходит для работы с сервером, он неплох для маленькой автоматизации и вообще must-have для изучения. Bash всегда под рукой и приветливо подмигивает тебе своим $. Он позволяет на кончиках пальцев творить великую магию, организуя простые команды в сложные конвейеры для достижения цели. Позже мы разберём фрагменты bash, полезные в хозяйстве.
Но упаси вас Линукс пытаться на bash писать что-то сложное. Как человек, разработавший большую систему (~3к строк) на bash, никому не могу советовать повторять столь неприятный опыт.
В статье Подводные камни Bash (2016, оригинал) вам подробнейшим образом расскажут, почему не надо туда лезть и оно тебя сожрёт.
#skills
Но упаси вас Линукс пытаться на bash писать что-то сложное. Как человек, разработавший большую систему (~3к строк) на bash, никому не могу советовать повторять столь неприятный опыт.
В статье Подводные камни Bash (2016, оригинал) вам подробнейшим образом расскажут, почему не надо туда лезть и оно тебя сожрёт.
#skills
Хабр
Подводные камни Bash
В этой статье мы поговорим об ошибках, совершаемых программистами на Bash. Во всех приведённых примерах есть какие-то изъяны. Вам удастся избежать многих из нижеописанных ошибок, если вы всегда будете...
👍13🔥2😁1
Анализируем размер проекта
Среди метрик качества проекта теоретики выделяют число LOC == lines of code, измеряемое обычно в тысячах.
Для измерения размера проекта в строках кода есть интересный проект cloc, запускаемый в том числе в docker.
Cloc для заданного каталога анализирует все файлики, по расширению и содержимому файлов определяет язык программирования, считает число пустых строк, строк с комментариями и строки кода. На мой взгляд, удобнее бы смотреть на итоговую сумму, но я заставить его выводить total не смог.
А теперь интересное. LOC является очень противоречивой метрикой для контроля. С одной стороны, чем меньше проект, тем лучше. С другой — сокращение размера кода может вредить его читаемости.
#skills #devfm
Среди метрик качества проекта теоретики выделяют число LOC == lines of code, измеряемое обычно в тысячах.
Для измерения размера проекта в строках кода есть интересный проект cloc, запускаемый в том числе в docker.
Cloc для заданного каталога анализирует все файлики, по расширению и содержимому файлов определяет язык программирования, считает число пустых строк, строк с комментариями и строки кода. На мой взгляд, удобнее бы смотреть на итоговую сумму, но я заставить его выводить total не смог.
А теперь интересное. LOC является очень противоречивой метрикой для контроля. С одной стороны, чем меньше проект, тем лучше. С другой — сокращение размера кода может вредить его читаемости.
#skills #devfm
🔥9👍5❤1
Рассмотрим такой код. С помощью requests для заданного логина идём на gitlab.com и проверяем, что вернёт страничка пользователя. Если 200, то пользователь есть и возвращаем True. Если не 200, то пользователя нет или что-то сломалось.
Как это безобразие протестировать? Наш ответ в 22:00 по МСК
#python #codereview
Как это безобразие протестировать? Наш ответ в 22:00 по МСК
#python #codereview
🔥7👍1
Все варианты верны в той или иной степень. Тестировать код со внешними зависимостями действительно неприятно. Можно зафиксировать конкретные имена, что будет довольно грязно. Можно решить вопрос с помощью dependency injection и передать в функцию объект-requests, который умеет опрашивать сервер или имитировать подобное поведение.
Мы же воспользуемся заглушкой (Mock). Это механизм динамической замены функций/классов.
Создаём класс RequestsMock. Всё что он делает — это сохраняет переданный ему status_code.
Делаем with patch, и в этом блоке указанная функция (requests.get) будет подменена на подменный класс. Параметр side_effect многогранен, в нашем случае мы подаём туда список из объектов, и при каждом вызове requests.get будет возвращён очередной экземпляр из этого списка.
Теперь вместо реальной работы с сетью мы используем полностью контролируемое окружение. Можем так json-ы сервера подменять, например.
#python #codereview
Мы же воспользуемся заглушкой (Mock). Это механизм динамической замены функций/классов.
Создаём класс RequestsMock. Всё что он делает — это сохраняет переданный ему status_code.
Делаем with patch, и в этом блоке указанная функция (requests.get) будет подменена на подменный класс. Параметр side_effect многогранен, в нашем случае мы подаём туда список из объектов, и при каждом вызове requests.get будет возвращён очередной экземпляр из этого списка.
Теперь вместо реальной работы с сетью мы используем полностью контролируемое окружение. Можем так json-ы сервера подменять, например.
#python #codereview
🔥12❤1👍1
Английский — основа силы в программировании.
Как бы кому ни хотелось, но без английского невозможно быть в курсе современной тусовки. Топовые материалы, будь то книги, статьи или видео, выходят преимущественно на английском. Эти же материалы появляются на русском с большим запозданием. Изредка запоздание в год-полтора, для других материалов это 3-5 лет. Для многих материалов русскоязычная версия не появляется никогда.
Поэтому английский нужно начинать качать как можно раньше и как можно глубже. Немного помогает англоязычная локаль в играх, интерфейсе операционной системы и программ. Куда больше помогает чтение документации. Не лезьте сразу в stackoverflow, а посмотрите англоязычную документацию по вопросу. RTFM, как говорится. Если лезете в гугл, то ищите на английском.
Интересен аспект "воспринимать на слух английскую речь", но об этом в следующий раз. В этом случае сразу открывается бесконечный спектр англоязычных докладчиков.
ps: судя по крутым репозиториям с нейронными сетями на китайском есть вероятность, что когда-нибудь лидер может смениться. Но сомнительно.
#edu
Как бы кому ни хотелось, но без английского невозможно быть в курсе современной тусовки. Топовые материалы, будь то книги, статьи или видео, выходят преимущественно на английском. Эти же материалы появляются на русском с большим запозданием. Изредка запоздание в год-полтора, для других материалов это 3-5 лет. Для многих материалов русскоязычная версия не появляется никогда.
Поэтому английский нужно начинать качать как можно раньше и как можно глубже. Немного помогает англоязычная локаль в играх, интерфейсе операционной системы и программ. Куда больше помогает чтение документации. Не лезьте сразу в stackoverflow, а посмотрите англоязычную документацию по вопросу. RTFM, как говорится. Если лезете в гугл, то ищите на английском.
Интересен аспект "воспринимать на слух английскую речь", но об этом в следующий раз. В этом случае сразу открывается бесконечный спектр англоязычных докладчиков.
ps: судя по крутым репозиториям с нейронными сетями на китайском есть вероятность, что когда-нибудь лидер может смениться. Но сомнительно.
#edu
👍19🔥3❤1
Как я научился воспринимать английский на слух
Давным давно, в районе 2012 года на площадке Udacity был такой крутой курс Introduction to Computer Science с Dave Evans по построению своего web crawler, то есть такой основы для поискового движка на питоне. Там было 7 огромных глав, в каждой много небольших видео, текстовый материал, вопросы и фрагмент кода для реализации, а в конце — непростой экзамен в виде "запрограммируй по ТЗ". К сожалению, сейчас курс заменили на очень маленький и совершенно невнятный.
Нашёл на ютубе одно из видео курса. Самой ценной для меня частью курса было введение в computer science на английском от человека с хорошей дикцией, рисующего понятные иллюстрации. Почти весь этот материал я уже знал на русском — там было и про основы циклов, и про устройство компа, и про историю жёсткого диска, и про устройство поисковой машины. В процессе я избегал субтитров, чтобы слушать, а не читать.
Такой повтор материала оказался для меня той соломинкой, что переломила спину ослу. После этого курса я смог различать на слух английскую речь. Закрепил понимание английской речи я просмотром любимого сериала House M.D, мультфильмов Футурама и Южный парк.
С тех пор я просмотрел огромное количество материала на английском языке, чего и вам советую. Только вот японский акцент мне никак не даётся, совершенно не могу воспринимать некоторых их представителей.
ps: нашёл у автора страницу этого курса! Там есть ссылка на все PDF и youtube-плейлист. К сожалению, без опросов и интерактивного кодирования всё это не так круто. Да и материал устарел, 10 лет прошло.
#edu
Давным давно, в районе 2012 года на площадке Udacity был такой крутой курс Introduction to Computer Science с Dave Evans по построению своего web crawler, то есть такой основы для поискового движка на питоне. Там было 7 огромных глав, в каждой много небольших видео, текстовый материал, вопросы и фрагмент кода для реализации, а в конце — непростой экзамен в виде "запрограммируй по ТЗ". К сожалению, сейчас курс заменили на очень маленький и совершенно невнятный.
Нашёл на ютубе одно из видео курса. Самой ценной для меня частью курса было введение в computer science на английском от человека с хорошей дикцией, рисующего понятные иллюстрации. Почти весь этот материал я уже знал на русском — там было и про основы циклов, и про устройство компа, и про историю жёсткого диска, и про устройство поисковой машины. В процессе я избегал субтитров, чтобы слушать, а не читать.
Такой повтор материала оказался для меня той соломинкой, что переломила спину ослу. После этого курса я смог различать на слух английскую речь. Закрепил понимание английской речи я просмотром любимого сериала House M.D, мультфильмов Футурама и Южный парк.
С тех пор я просмотрел огромное количество материала на английском языке, чего и вам советую. Только вот японский акцент мне никак не даётся, совершенно не могу воспринимать некоторых их представителей.
ps: нашёл у автора страницу этого курса! Там есть ссылка на все PDF и youtube-плейлист. К сожалению, без опросов и интерактивного кодирования всё это не так круто. Да и материал устарел, 10 лет прошло.
#edu
YouTube
Finishing the Web Crawler - Intro to Computer Science
This video is part of an online course, Intro to Computer Science. Check out the course here: https://www.udacity.com/course/cs101.
👍9🔥2❤1
Пятничное развлекательное. Этим вечером предлагаем вам очередную подборку комиксов от xkcd с лёгким налётом безумия. Про интерес к этому комиксу вы можете почитать в старом посте.
Безопасность
Взгляды на конфиденциальность
Бессонница
Кишечная фауна
Представь себе поляну
Проверка багажа
Путешествие во времени
Свобода слова
#fun #xkcd
Безопасность
Взгляды на конфиденциальность
Бессонница
Кишечная фауна
Представь себе поляну
Проверка багажа
Путешествие во времени
Свобода слова
#fun #xkcd
🔥6❤1👍1
Кино на выходные
Отойдём от комиксов и вспомним классическую комедию Большой Лебовски (1998), строго в гоблинском переводе. Тут и сюжет, и разлетевшиеся на цитаты фразы героев, и собственная философия (привет, дудеизм), и характерные персонажи. Кажется, что этот необычный фильм нельзя не полюбить.
Для истинных ценителей Лебовски можем предложить вам фанатскую теорию от ЧБУ.
Всем надёжных как швейцарские часы планов.
#fun #films
Отойдём от комиксов и вспомним классическую комедию Большой Лебовски (1998), строго в гоблинском переводе. Тут и сюжет, и разлетевшиеся на цитаты фразы героев, и собственная философия (привет, дудеизм), и характерные персонажи. Кажется, что этот необычный фильм нельзя не полюбить.
Для истинных ценителей Лебовски можем предложить вам фанатскую теорию от ЧБУ.
Всем надёжных как швейцарские часы планов.
#fun #films
Кинопоиск
«Большой Лебовски» (The Big Lebowski, 1998)
🎬 Лос-Анджелес, 1991 год, война в Персидском заливе. Главный герой по прозвищу Чувак считает себя совершенно счастливым человеком. Его жизнь составляют игра в боулинг и выпивка. Но внезапно его счастье нарушается, гангстеры по ошибке принимают его за миллионера…
🔥5❤4👍2
Корчеватель ломает науку
Любую нетривиальную задачу по разработке следует начинать с анализа предметной области (наш пример разбора статей в области видеоаналитики) и просмотра доступных альтернатив на github и gitlab. Анализ предметной области по рецензируемым научным изданиям позволяет получить защиту от переизобретения велосипеда, сразу взять хорошее решение и дорабатывать его.
В хорошей научной статье сделан обзор чужих публикаций, выработаны критерии для сравнения и произведено сравнение альтернатив, результаты которого можно переиспользовать. Мы разбирали плохие критерии в статье про выбор ЯП для изучения программирования и хорошие в статье про сравнение брокеров сообщений.
Но не все научные издания одинаково хороши. Как оценить "хорошесть" издания? Неплохой вариант выявления плохих — продемонстрировать, что журнал принимает к изданию фигню. Но просто написать фигню — на наш вариант. Давайте фигню сгенерируем. Так родился Корчеватель, написанный преимущественно на perl проект по генерации псевдонаучных текстов. Он есть на github (без документации, как мы любим). Но результаты хороши — статья с наукообразным текстом, графиками и литературой, которая была неоднократно принята к изданию с положительными отзывами рецензентов у нас и за рубежом. Таким способом можно выявлять плохих рецензентов и ужасные журналы.
Нельзя не упомянуть яндекс.рефераты. Выбираете набор тематик и получаете фрагмент безумного текста. Залипательно. Маркетинг&Математика выдаёт тексты, похожие на половину пресс-релизов компаний:
В соответствии с законом больших чисел, жизненный цикл продукции традиционно определяет рекламоноситель, полагаясь на инсайдерскую информацию. Баннерная реклама, общеизвестно, экономит тройной интеграл.
Организация службы маркетинга раскручивает стремящийся рейтинг. Медиаплан, конечно, консолидирует убывающий рейтинг. Баланс спроса и предложения, не вдаваясь в подробности, раскручивает минимум, оптимизируя бюджеты.
#edu #sudo #devfm
Любую нетривиальную задачу по разработке следует начинать с анализа предметной области (наш пример разбора статей в области видеоаналитики) и просмотра доступных альтернатив на github и gitlab. Анализ предметной области по рецензируемым научным изданиям позволяет получить защиту от переизобретения велосипеда, сразу взять хорошее решение и дорабатывать его.
В хорошей научной статье сделан обзор чужих публикаций, выработаны критерии для сравнения и произведено сравнение альтернатив, результаты которого можно переиспользовать. Мы разбирали плохие критерии в статье про выбор ЯП для изучения программирования и хорошие в статье про сравнение брокеров сообщений.
Но не все научные издания одинаково хороши. Как оценить "хорошесть" издания? Неплохой вариант выявления плохих — продемонстрировать, что журнал принимает к изданию фигню. Но просто написать фигню — на наш вариант. Давайте фигню сгенерируем. Так родился Корчеватель, написанный преимущественно на perl проект по генерации псевдонаучных текстов. Он есть на github (без документации, как мы любим). Но результаты хороши — статья с наукообразным текстом, графиками и литературой, которая была неоднократно принята к изданию с положительными отзывами рецензентов у нас и за рубежом. Таким способом можно выявлять плохих рецензентов и ужасные журналы.
Нельзя не упомянуть яндекс.рефераты. Выбираете набор тематик и получаете фрагмент безумного текста. Залипательно. Маркетинг&Математика выдаёт тексты, похожие на половину пресс-релизов компаний:
В соответствии с законом больших чисел, жизненный цикл продукции традиционно определяет рекламоноситель, полагаясь на инсайдерскую информацию. Баннерная реклама, общеизвестно, экономит тройной интеграл.
Организация службы маркетинга раскручивает стремящийся рейтинг. Медиаплан, конечно, консолидирует убывающий рейтинг. Баланс спроса и предложения, не вдаваясь в подробности, раскручивает минимум, оптимизируя бюджеты.
#edu #sudo #devfm
Telegram
DevFM
Любая работа по программированию начинается с анализа предметной области. Рекомендуется пара этих ресурсов - для русского и английского поиска.
https://cyberleninka.ru
https://www.researchgate.net
https://scholar.google.com/
В начале ищутся самые популярные…
https://cyberleninka.ru
https://www.researchgate.net
https://scholar.google.com/
В начале ищутся самые популярные…
🔥9👍1🌭1
Интеграционные и юнит-тесты — основа стабильности проекта
В статье Антипаттерны тестирования ПО (хабр, 2018, оригинал) автор подробно рассматривает важность юнит- и интеграционных тестов. На понятных примерах поясняются те или иные проблемы, возникающие при развитии проекта. Тут даже про мной любимую цикломатическую сложность есть, ну красота же.
Не забыл автор и про плохие тесты (антипаттерн 5). Тестировать нужно спецификацию, а не реализацию.
Антипаттерн 10 перекликается с трактом баг — задача — ветка — merge request. Если кратко, это работает так. Обнаружили баг — создали задачу (тикет) — создали ветку к этой задаче — реализовали тест, который воспроизводит проблему (и падает, так как проект выдаёт неверное поведение) — починили баг — создали merge request (или pull request в случае github).
#procode
В статье Антипаттерны тестирования ПО (хабр, 2018, оригинал) автор подробно рассматривает важность юнит- и интеграционных тестов. На понятных примерах поясняются те или иные проблемы, возникающие при развитии проекта. Тут даже про мной любимую цикломатическую сложность есть, ну красота же.
Не забыл автор и про плохие тесты (антипаттерн 5). Тестировать нужно спецификацию, а не реализацию.
Антипаттерн 10 перекликается с трактом баг — задача — ветка — merge request. Если кратко, это работает так. Обнаружили баг — создали задачу (тикет) — создали ветку к этой задаче — реализовали тест, который воспроизводит проблему (и падает, так как проект выдаёт неверное поведение) — починили баг — создали merge request (или pull request в случае github).
#procode
Хабр
Антипаттерны тестирования ПО
Введение Есть несколько статей об антипаттернах разработки ПО. Но большинство из них говорят о деталях на уровне кода и фокусируются на конкретной технологии или...
🔥10❤1👍1
Господа, продолжаем покорять круглые числа. Мы перевалили за байт и теперь нас 256.
Делимся с вами всегда актуальным постом Как правильно лгать с помощью статистики (хабр, 2014). Для любителей статистики есть одноимённая книга
#ToTheMoon
Делимся с вами всегда актуальным постом Как правильно лгать с помощью статистики (хабр, 2014). Для любителей статистики есть одноимённая книга
#ToTheMoon
Хабр
Как правильно лгать с помощью статистики
Существуют три вида лжи: ложь, наглая ложь и статистика ( источник ) Есть такой замечательный жанр — " вредные советы ", в котором детям дают советы, а дети, как известно, всё делают...
🔥9👍3❤1
Мы сняли часовой стрим по созданию небольшого проекта на python для начинающих разработчиков. Идея проста — прочитать в csv-файле ФИО и login и проверить существование этого login на gitlab. Но тут vim, проект на gitlab, консольный git, исключения, google docstring, правильная структура проекта и тесты — всё слилось в едином экстазе.
Все покрытые темы — в описании под видео.
#youtube #python #devfm #sudo
Все покрытые темы — в описании под видео.
#youtube #python #devfm #sudo
YouTube
Стрим: python student часть 1 | Stream: python student part 1
Часовой стрим по созданию небольшого проекта на python из консоли и редактора vim с использованием gitlab. В видео раскрыты:
1. создание проекта в gitlab
2. консольную работу в git (git status / add / commit / diff / push), в том числе удобные alias для ускорения…
1. создание проекта в gitlab
2. консольную работу в git (git status / add / commit / diff / push), в том числе удобные alias для ускорения…
🔥20👍4🤯3
В файле requirements.txt обычно собраны необходимые для запуска python-проекта пакеты. Для установки этих зависимостей нужно выполнить команду
Но с ростом числа поддерживаемых проектов появляются конфликты между разными версиями пакетов. Например, одновременная поддержка Django версий 2, 3 и 4 — это кромешный ад. В статье Modern Python Environments приведен обзор систем управления окружением в python, а в конце есть удобная сравнительная табличка.
Какие проблемы есть у requirements?
1. Команда
2. Нет возможности разделять зависимости по средам исполнения. В development-среде нужны тесты и линтеры, которые в production-среде не требуются.
Для управления зависимостями в проектах я использую Poetry. Из интересного, в poetry отказались от привычного нам requirements, решив проблемы так:
1. Основные зависимости проекта хранятся в файле pyproject.toml, все остальные зависимости poetry собирает в отдельном файле.
2. Для разделения зависимостей по средам исполнения в процессе установки пакета необходимо указать соответствующую опцию и в pyproject.toml появится соответствующий раздел. В production-среде вы сможете устанавливать одни зависимости, в dev другие.
Еще в poetry стоит выделить возможность собирать ваш код в питоновские пакеты, дополнительно не описывая установщик setup. Есть и другие интересности, за которыми стоит заглянуть в документацию.
Poetry полезен даже в Docker, обеспечивая возможность переноса зависимостей между этапами сборки в multi-stage builds.
#python
pip install -r requirements.txtНо с ростом числа поддерживаемых проектов появляются конфликты между разными версиями пакетов. Например, одновременная поддержка Django версий 2, 3 и 4 — это кромешный ад. В статье Modern Python Environments приведен обзор систем управления окружением в python, а в конце есть удобная сравнительная табличка.
Какие проблемы есть у requirements?
1. Команда
pip freeze выводит длинную портянку зависимостей проекта. Поддерживать в аккуратном, контролируемом состоянии подобный файл сложно. Никогда нельзя понять, какие из зависимостей являются основными, а какие транзитивными.2. Нет возможности разделять зависимости по средам исполнения. В development-среде нужны тесты и линтеры, которые в production-среде не требуются.
Для управления зависимостями в проектах я использую Poetry. Из интересного, в poetry отказались от привычного нам requirements, решив проблемы так:
1. Основные зависимости проекта хранятся в файле pyproject.toml, все остальные зависимости poetry собирает в отдельном файле.
2. Для разделения зависимостей по средам исполнения в процессе установки пакета необходимо указать соответствующую опцию и в pyproject.toml появится соответствующий раздел. В production-среде вы сможете устанавливать одни зависимости, в dev другие.
Еще в poetry стоит выделить возможность собирать ваш код в питоновские пакеты, дополнительно не описывая установщик setup. Есть и другие интересности, за которыми стоит заглянуть в документацию.
Poetry полезен даже в Docker, обеспечивая возможность переноса зависимостей между этапами сборки в multi-stage builds.
#python
testdriven.io
Modern Python Environments - dependency and workspace management
This article looks at the available tools for dependency and workspace management in Python.
👍9🔥4❤1
Мы давно смотрим и обсуждаем ютуб-канал SOER с крутыми видео, например, о знаниях джун-разработчика, хорошем и плохом коде или чему научил вуз.
С недавних пор ещё следим и за его тг-каналом. Запомнились посты про roadmap, литературу, дизайн систем и "нельзя всё выкинуть и переписать". Автору зашёл наш стрим по python. Ответный реверанс от нас.
С недавних пор ещё следим и за его тг-каналом. Запомнились посты про roadmap, литературу, дизайн систем и "нельзя всё выкинуть и переписать". Автору зашёл наш стрим по python. Ответный реверанс от нас.
🔥11❤1👍1
Пятничное развлекательное. В этот день мы культурно развиваемся. Или деградируем, тут как повезёт.
На эти выходные мы продолжаем подборку любимых фильмов о времени. Все знают классический День сурка (Groundhog Day, 1993) о застрявшем во времени Филе (Билл Мюррей). Кстати, почему главный герой страдает при бесконечном доступе ко времени? Ситуация звучит как рай.
А если добавить к застывшему времени оружие? Есть и такое. Грань будущего (Edge of Tomorrow, 2014) с Томом Крузом погрузит вас в бесконечный боевик. Некоторые сценарные косяки этого фильма отсутствуют в оригинальной книге All you need is Kill, которая вполне достойна прочтения.
Куда менее известен фильм Петля времени (Looper, 2012) с Брюссом Уиллисом и Джозефом Гордон-Левитт. Машина времени используется преступниками как способ убийства без последствий.
#fun #films #books
На эти выходные мы продолжаем подборку любимых фильмов о времени. Все знают классический День сурка (Groundhog Day, 1993) о застрявшем во времени Филе (Билл Мюррей). Кстати, почему главный герой страдает при бесконечном доступе ко времени? Ситуация звучит как рай.
А если добавить к застывшему времени оружие? Есть и такое. Грань будущего (Edge of Tomorrow, 2014) с Томом Крузом погрузит вас в бесконечный боевик. Некоторые сценарные косяки этого фильма отсутствуют в оригинальной книге All you need is Kill, которая вполне достойна прочтения.
Куда менее известен фильм Петля времени (Looper, 2012) с Брюссом Уиллисом и Джозефом Гордон-Левитт. Машина времени используется преступниками как способ убийства без последствий.
#fun #films #books
Telegram
Вестник
Пятничное развлекательное.
Есть такое понятие, как "культурный код". Это объединяющий некоторую социальную группу набор понятий, терминов, отсылок и мемов. В культурный код входят разные художественные произведения. Сегодня поговорим о фильмах.
Вы знаете…
Есть такое понятие, как "культурный код". Это объединяющий некоторую социальную группу набор понятий, терминов, отсылок и мемов. В культурный код входят разные художественные произведения. Сегодня поговорим о фильмах.
Вы знаете…
🔥5❤1👍1
Фиксация зависимостей и вендоринг
Зачастую в файле с зависимостями проекта можно увидеть следующее:
Установится requests самой свежей версией выше указанной. Безобидный значок >= может повлечь множество неприятностей, и есть шанс после очередного обновления словить:
— калечащие изменения из-за отсутствия обратной совместимости
— новые баги используемой библиотеки
— и даже злонамеренные изменения в коде
Поэтому всегда фиксируйте зависимости путём использования == вместо >=. Применяйте это правило не только к requirements. Например, в докер-файле не используйте тег latest и всегда указывайте конкретную версию образа. В статье A developer sabotaged their own libraries (businessinsider, 2022) показаны последствия нежелания фиксировать версии зависимостей.
Конечно, не следует жить на старых версиях. Но периодические обновления зависимостей должны проходить в ручном режиме.
Следующий уровень паранойи — вендоринг. В дополнение к фиксированию версии вы также храните её в своём локальном репозитории. Кстати, в качестве универсального хранилища любых зависимостей можем порекомендовать self-hosted решение nexus (docker, apt, pip и многое другое).
Это выглядит избыточным, но продуктовая разработка с живыми пользователями заставляет смотреть на подобные рекомендации иначе. Прочитайте Protestware on the rise (techcrunch, 2022) об удалении популярного пакета из pypi.
На каком уровне паранойи остановиться — решать вам.
#python
Зачастую в файле с зависимостями проекта можно увидеть следующее:
requests>=2.28.1
Установится requests самой свежей версией выше указанной. Безобидный значок >= может повлечь множество неприятностей, и есть шанс после очередного обновления словить:
— калечащие изменения из-за отсутствия обратной совместимости
— новые баги используемой библиотеки
— и даже злонамеренные изменения в коде
Поэтому всегда фиксируйте зависимости путём использования == вместо >=. Применяйте это правило не только к requirements. Например, в докер-файле не используйте тег latest и всегда указывайте конкретную версию образа. В статье A developer sabotaged their own libraries (businessinsider, 2022) показаны последствия нежелания фиксировать версии зависимостей.
Конечно, не следует жить на старых версиях. Но периодические обновления зависимостей должны проходить в ручном режиме.
Следующий уровень паранойи — вендоринг. В дополнение к фиксированию версии вы также храните её в своём локальном репозитории. Кстати, в качестве универсального хранилища любых зависимостей можем порекомендовать self-hosted решение nexus (docker, apt, pip и многое другое).
Это выглядит избыточным, но продуктовая разработка с живыми пользователями заставляет смотреть на подобные рекомендации иначе. Прочитайте Protestware on the rise (techcrunch, 2022) об удалении популярного пакета из pypi.
На каком уровне паранойи остановиться — решать вам.
#python
Business Insider
A developer sabotaged their own open-source libraries, breaking thousands of apps, in apparent protest of mega-corporations
The two code libraries have been downloaded millions of times and have thousands of software projects depending on them.
👍8🔥3❤1