Питонические атаки
رفتن به کانال در Telegram
Всяческие заметки про программирование на Python и другие весёлые истории.
نمایش بیشتر1 299
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-37 روز
-1130 روز
آرشیو پست ها
1 299
Слышал, что ещё не все познали радость использования тайп хинтов в своих больших программах на питоне. Поэтому держите хороший вводный видос на эту тему от Łukasz Langa (Вукаш Ланга!).
Хотя этому выступлению уже 5 лет и типизация в питоне за это время ушла очень далеко, вся информация всё ещё актуальная, потому что основные принципы не поменялись. Сейчас в основном только доуточняются разные краевые случаи.
И я наконец понял, почему
List[str] несовместимо с List[Optional[str]].
https://www.youtube.com/watch?v=Mn4AOttRmpI
#typing1 299
И если у вас на гитхабе что-то ценное лежит, то вы на всякий случай склонируйте себе эти репо. Ходят слухи, что гитхаб начал блокировать аккаунты россиян.
https://habr.com/ru/news/t/661113/
1 299
httpie — популярный консольный curl-like HTTP-клиент, написанный на питоне — потерял 54k звёзд на гитхабе из-за глупой ошибки. Репо входил в топ-80 самых популярных репо на гитхабе. 🤦♂️
Короче, можно пойти и снова поставить им звёздочку: https://github.com/httpie/httpie
Вот тут постмортем: https://httpie.io/blog/stardust
1 299
Опубликовали статистику скачиваний с python.org за последний год. Вычислено на основе access-логов.
Больше всего оттуда качают предсобранные установщики для Windows, но много и тех, кто скачивает просто исходники (это, вероятно, линуксоиды и маководы с pyenv и тому подобным). Чуть-чуть есть и людей, которые скачивают предсобранные установщики для macOS.
Python 2.7 держится по популярности примерно на уровне 3.6.
Для Windows самая популярная с большим отрывом версия интерпретатора сейчас — 3.10.
Но при этом в исходниках нет такого явного фаворита — качают все версии и 2.7, и с 3.6 по 3.10 примерно одинаково. Причём больше всего качают 3.7, а меньше всего 3.10. Может быть дело в том, что в современных линуксах обычно есть свежий питон, а более старые версии приходится откуда-то ставить? (А я обычно в любом случае ставлю все нужные мне версии из pyenv — системный питон лучше вообще не трогать, пусть спокойно себе лежит).
Там же в треде есть и ссылки на похожие исследования за 2020 и 2019.
https://discuss.python.org/t/python-download-stats-for-march-2022/14908
1 299
Что думаю по этому поводу.
Во-первых, использовать стандартные решения — это хорошо и удобно. Все уже привыкли использовать гитхаб. У большинства есть там аккаунты. Все уже научились писать свои мысли в маркдауне. Удобно ссылаться из пулл-реквестов в ишьюсы, и наоборот. Есть API, и уже написана куча разных скриптов и браузерных плагинов, которые позволяют делать с гитхабом практически что угодно. Есть собственная удобная CI платформа.
Во-вторых, централизация — это плохо. Появляется единая точка отказа. Хоть они в последнее время и няшки, но всё равно — Microsoft начинает иметь слишком много влияния над опенсорсом. Такие перекосы обязательно рано или поздно выльются в проблемы. Например, мир разоссорится ещё сильнее, в США придумают очередные какие-нибудь весёлые ограничения для жителей недружественных стран, а GitHub (американская компания) будет обязан подчиниться.
А в-третьих — спасибо, что переехали не в Jira!
1 299
Миграция из BPO в GitHub Issues заняла больше времени, чем ожидалось, но она наконец-то завершена.
BPO переведён в read-only режим.
Новый питонячий баг-трекер теперь находится здесь: https://github.com/python/cpython/issues
1 299
Vim-like браузер на питоне.
Ладно-ладно, это, конечно, не совсем правда. Там под капотом QtWebEngine, который по сути Chromium и написан он на C++. Тем не менее, вся обвязка вокруг непосредственно отображения страницы написана на питоне.
Сразу хочу предупредить, что если вы не большой фанат горячих клавиш, командной строки и работы напильником и изолентой, то вам не зайдёт. Это браузер с очень минималистичным интерфейсом (страшненький), и чтобы научиться им управлять нужно немножко сойти с ума (вим), зато позволяет сёрфить веб (почти) без мышки.
Из коробки есть блокировщик рекламы и прочие мелкие приятности. Можно просто брать и пользоваться. Но истинный экстаз, конечно, достигается лишь после кропотливой настройки всего этого дела под себя. Например, я прикрутил к браузеру свою парольницу в Bitwarden, и каждый раз радуюсь как дитя, когда нажимаю хоткей, а оно заполняет за меня формочку авторизации 🤩
Короче, сижу на этом уже полгода, годная гиковская дурь.
https://github.com/qutebrowser/qutebrowser
1 299
Многие пользовались возможностью импортировать синтаксис из будущего (
from __future__ import …), но задумывались ли вы когда-нибудь ОТКУДА на самом деле приходит этот синтаксис? Ведь если мы можем получить фичи из будущего, значит кто-то в будущем должен отправлять их в прошлое?
Документ описывает установку для отправки синтаксиса в прошлое на основе наработок по «потоковому накопителю» доктора Эмметта Брауна.
https://peps.pythondiscord.com/pep-2241/
#pep1 299
Вижу, что многие пользуются black, isort или как минимум форматируют код в PyCharm. Инструменты хорошие, но они ориентируются на устаревший PEP8, поэтому в ближайшее время придётся подыскивать им замену.
Опубликован черновик нового стайл-гайда PEP 9001, который через какое-то время станет обязательным для соблюдения:
https://peps.pythondiscord.com/pep-9001/
#pep
1 299
А давайте устроим перекличку. Кто чем пользуется для форматирования кода? И форматируете ли вы код вообще?
1 299
Конфетку не желаете?
(На самом деле конфеты не существует. Мы живём в симуляции, птицы — это дроны, а конфета — это просто 3D-модель, нарисованная кем-то в Blender)
https://www.reddit.com/r/Python/comments/rgaoy7/comment/hoiw67v/?utm_source=share&utm_medium=web2x&context=3
1 299
Для GitLab такая фича тоже обсуждается, ставьте свои пальцы вверх вот сюда:
https://gitlab.com/gitlab-org/gitlab/-/issues/31423
#git #gitlab #blame #black
1 299
А если кому нужна такая же фича в веб-интерфейсе BitBucket, то голосуйте за нашего кандидата вот здесь:
https://jira.atlassian.com/browse/BSERV-12730
#git #bitbucket #blame #black
1 299
Если вдруг кому нужна такая же фича в локальном консольном Git или в GUI, типа PyCharm или VSCode, то вот как это делается:
git config --local blame.ignoreRevsFile .git-blame-ignore-revsНужно выполнить после клонирования репозитория. К сожалению, самостоятельно Git находить этот файл пока что не научился. #formatter #git #blame #black
1 299
Ещё одна новость про форматирование.
Одна из популярных причин, почему люди не в восторге от идеи внедрить форматтер кода в свои старые проекты — это замусоривание истории изменений. Появляется царь-коммит, который изменяет весь код сразу, и
git blame бессилен пробиться через него к более старым изменениям. Получается, с точки зрения Git, человек, запустивший Black, становится автором всего проекта 😅
Начиная с версии 2.23.0 (это 2019 год) Git поддерживает возможность игнорировать некоторые коммиты в git blame, что как раз и решает эту проблему.
Крутая новость в том, что GitHub теперь тоже в своём Blame View научился игнорировать такие коммиты. Создаёте специальный файлик, записываете туда хэши своих коммитов с форматированием кода и вуаля!
https://docs.github.com/en/repositories/working-with-files/using-files/viewing-a-file#ignore-commits-in-the-blame-view
#formatter #github #git #blame #black1 299
Многие уже приняли за норму форматирование кода разными тулзами (
black) и сортировку импортов в алфавитном порядке с разбиением на группы (isort).
А что если начать сортировать ещё и весь остальной исходный код?
https://github.com/bwhmather/ssort
ssort сортирует функции и классы, ставя их после того, от чего они зависят. Получается, что вверху файла находятся самые низкоуровневые функции, от которых всё зависит, а внизу файла — самый главный высокоуровневый код. Прям как завещал дядюшка Боб.
> Makes old fashioned code navigation easier, you can always scroll up to see where something is defined, and reduces bikeshedding.
#formatter #tool1 299
Кстати, да. Правильно произносить
[ˈwukaʂ]. Где-то видел вариант произношения как woo cash. Даже не знаю, как это написать русскими буквами, но это либо "Укаш", либо "Вукаш".
Вот видео: https://www.youtube.com/watch?v=rCDVnyb8k-U1 299
Радостно видеть, что тайп-чекинг в питоне развивается каждый год, и решает всё больше различных проблем. Вот сейчас дошли и до безопасности.
В 3.11 добавят тип
LiteralString, который может принимать любые строки, собранные из строковых литералов. Можно взять любые литералы, как угодно их скомпоновать друг с другом, и в итоге всё равно получится тип, совместимый с LiteralString. Но если подмешать туда любую строку, которая не хранится в коде программы, а поступает извне, то это уже не может быть LiteralString.
hello = "Здравствуй"
world = "прекрасная планета"
# совместимо со StringLiteral, потому что строчка составлена целиком из литералов в коде
s1 = f"{hello}, {world}!"
# не совместимо, потому что примешивается что-то извне, не литерал
name = input("name: ")
s2 = f"{hello}, {name}!"
Зачем такой тип нужен? При помощи него можно запретить передавать в "опасные" функции, подверженные различного рода инъекциям, строки, включающие пользовательский ввод. Это просто будет ошибкой на уровне системы типов. Таким образом, написать уязвимый код с SQL, shell, XSS, SSTI или какими-либо ещё инъекциями станет немножко сложнее. Для этого всего лишь нужно, чтобы в библиотеках важные места были помечены этим типом, и, конечно же, чтобы пользователь время от времени запускал тайп-чекер. На выполнение программы это всё никак не влияет.
Пока что это предложение поддерживается только в тайп-чекере pyre.
https://peps.python.org/pep-0675/
#pep #typing