TGViewer
Channel Public Channel
Питонические атаки

Питонические атаки

@pythonic_attacks

Всяческие заметки про программирование на Python и другие весёлые истории.
Subscribers
1.15K
Photos
184
Videos
4
Links
462

Showing posts older than #209 · Back to latest

Older Posts 20 shown
Post #208 600
В статье есть примеры того, как можно неочевидно удариться об одну из оптимизаций, применяемых в CPython — интернирование. Ну и другие странные, неочевидные примеры.

Хотя случайно так, пожалуй, всё-таки не напишешь.

https://habr.com/ru/post/564804/
Хабр Python: неочевидное в очевидном Введение Изучение любого языка - очень долгий процесс, в ходе которого могут возникать ситуации, когда очевидные с виду вещи ведут себя странно. Даже спустя много лет изучения языка не все и не всегда...
Post #207 508
Круто, что в CPython вообще-то много всяких оптимизаций (и в следующих версиях их будет становиться только больше), но они все практически незаметны. Это надо делать прям что-то из ряда вон выходящее и, скорее всего, неидиоматичное, неправильное, чтобы тебя ударило, например, интернированием строк или чисел, или вырезанным куском недостижимого кода. Про все эти оптимизации узнаёшь только постфактум из статей и веселых видео типа "PyWat".

Хотя теперь я, кажется, начинаю понимать, почему некоторые брейкпоинты игнорируются отладчиком пайчарма, будто их и нет вовсе. Просто так получается, что по какой-то причине эта строка не отображается в байткод, поэтому в рантайме её не существует. Так что это скорее баг пайчарма, который при создании точки останова не учитывает оптимизации, которые будут наложены на этот код, и тем самым позволяет создавать брейкпоинты, которые никогда не сработают.
Post #206 538
Сегодня узнал, что в Python есть оптимизатор, который на этапе компиляции исходников в байткод избавляется от разных тривиальных инструкций. Например, он вырезает недостижимый код (if False: ...) и предвычисляет выражения, состоящие из одних констант (x = 2 + 2 заменится на x = 4).

Кстати, канал на ютубе у Anthony Sottile крутой.

https://www.youtube.com/watch?v=i8uNgEchr20

И вот еще статья про эти оптимизации: https://levelup.gitconnected.com/optimization-in-python-peephole-e9dc84cc184d
YouTube python has an optimizer? (intermediate) anthony explains #316 today I talk about python's peephole optimizer and how it ~optimizes some expressions and branches playlist: https://www.youtube.com/playlist?list=PLWBKAf81pmOaP9naRiNAqug6EBnkPakvY ========== twitch: https://twitch.tv/anthonywritescode dicsord: https…
Post #204 488
Классическая пикча с XKCD по поводу SQL-инъекций.

В документации к psycopg2 велят распечатать эту картинку и повесить над рабочим местом.

https://xkcd.com/327/

#xkcd
Post #203 494
Клиент создаёт в СУБД подготовленное выражение

#meme
Post #202 473
Похоже, в отличие от меня, половина людей все-таки внимательно читает документацию (хотя я так и не нашел, где бы это было упомянуто явно), и знает, что psycopg2 делает client-side binding. Для меня это сегодня стало новостью. Я почему-то был уверен, что psycopg2 просто делегирует подстановку данных в запрос серверу БД через подготовленные выражения.

В целом, наверное, нет особой разницы, где происходит подстановка данных в запрос. Если на стороне клиента это сделано хорошо, то оно может быть точно так же безопасно, как и server-side binding. Но всё-таки остаётся какая-то вероятность, что psycopg2 вычищает/экранирует не все опасные символы из данных. Вот будет веселье-то, если вдруг такое обнаружится. А если данные попадают в уже распаршенный запрос на стороне сервера, то это уже гарантированно, что они не смогут поменять логику запроса (уже слишком поздно для этого).

psycopg третьей версии будет делать server-side binding, хотя для нас (программистов) интерфейс не поменяется.

#psycopg
Post #200 459
Вот так в psycopg2 передаются параметры в запрос. Это называется биндинг. Это правильный способ, так надо делать. Обратите внимание, это не форматирование строк через процент (старая фича языка, но до сих пор поддерживается)!

А если собирать запрос вручную при помощи f-строк или конкатенаций, и где-нибудь забыть заэкранировать значение, которое ввёл юзер, то будут SQL-инъекции, и все ваши данные либо будут безвозвратно удалены, либо будут потом продаваться по аукционам в даркнете. Так не надо делать.
Post #199 3.15K
Если работаете с Python и PostgreSQL, то точно знакомы с psycopg2. Вот уже наверное 15 лет это самый популярный драйвер для постгреса на питоне. Де-факто стандарт.

Циферка 2 в названии указывает на вторую версию. Сейчас автор библиотеки (Daniele Varrazzo) очень активно работает над следующей, третьей версией, написанной с нуля, несовместимой с предыдущей версией, зато с новыми полезными фичами и исправлениями давних решений в плане API и принципа работы.

Например, psycopg3:

* поддерживает async/await из коробки; пожалуй, учитывая позитивный опыт работы с psycopg2, я делаю ставку на этот драйвер для асинхронных приложений (aiopg и asyncpg далеко не идеальны, к сожалению);
* полностью обмазан тайп-аннотациями 🥰;
* умеет делать подготовленные выражения (prepared statements) и курсоры на стороне сервера.

Вот тут можно посмотреть презентацию новой версии от автора: https://www.youtube.com/watch?v=XH5_Hc_BHaE

А вот здесь инструкция, как можно установить и пощупать бета-версию уже сейчас: https://twitter.com/psycopg/status/1410221901323063299?s=20

#psycopg
YouTube z2d2 07 Varrazzo ENG 20150923 «Тема». Семинар
Post #198 482
Это, конечно, уже давно не новость, но тем не менее.

У робота Spot от BostonDynamics есть Python SDK, позволяющее им управлять. Других SDK производитель не поставляет.

Пожалуй, это даже хорошо, что мой код не ходит. Так безопаснее для окружающих, для меня и для него самого. Добром бы это не кончилось.
Post #197 482
Там есть ещё результаты и по другим языкам, поищите там свой любимый. Вот тут, например, результаты про Rust.

* Большинство проектов всё ещё разрабатываются либо как хобби, либо как пет-проекты. Это объясняет, почему проекты на этом языке чаще всего разрабатываются в одиночку. Только 16% разработчиков пишут на расте на работе.
* Большая часть людей только вкатывается в язык (от 1 до 6 месяцев).
* Большинство разработчиков на Rust пишут код в VS Code. Код часто дебажится принтами, но среди пользователей CLion заметно выше процент использования визуального отладчика.
* Среди разработчиков на Rust намного выше вовлеченность в опен-сорс, чем в среднем по больнице.

#jetbrains
JetBrains: Developer Tools for Professionals and Teams Rust Programming - The State of Developer Ecosystem in 2021 Infographic The State of Developer Ecosystem 2021 is a detailed report about the programming community, which covers the latest trends in languages, tools, technologies, and lifestyles of developers.
Post #195 439
JetBrains опубликовали результаты своего исследования экосистемы разработки за 2021 год.

Кроме ключевых результатов, которые на скриншоте, мне показалось интересным еще вот это:

* 53% питонистов занимаются веб-разработкой, и лишь 31% занимаются дата саенсом и машин лёрнингом (это всё равно заметно больше, чем в других экосистемах).
* О миграции на Python задумываются в основном программисты на языках, задействованных в веб-разработке (JS, TS, PHP, SQL). Питонисты же интересуются миграцией на Go, Kotlin, TS и Rust.
* Гоферы сильнее всего интересуются Rust.
* В Индии самым популярным языком является Python. Да, даже популярнее C++, вопреки распространённым мифам.
* В азиатских странах (Китай, Южная Корея) много джавистов, а в Турции C# заметно популярнее других языков.
* В США средние зарплаты в ~2 раза выше, чем в Канаде и Англии, и в ~5 раз выше, чем в РФ.
* В свободное время программисты больше всего любят играть в видеоигры и программировать. Мы за ЗОЖ (задротский образ жизни), так держать!

#jetbrains
Post #193 499
Если вдруг кто совсем не вдупляет (я и сам пока не до конца вдупляю), что это за AWS Lambda и идеология серверлесс в целом, про которые я там выше упоминал, могу порекомендовать вот этот курс:

AWS Serverless APIs & Apps - A Complete Introduction

Автор Maximilian Schwarzmüller — офигенный чувак. По-моему, самый топовый лектор на Udemy. Когда-то смотрел его курсы по фронтендовым React и Vue, но, как выяснилось, он делает курсы на различные айтишные темы (в том числе есть курсы и про Python). Всегда всё красиво и понятно подано, забавные примеры. Курсы на английском, но воспринимается легко.

Кстати, не покупайте курсы на Udemy за дорого. Если вдруг вам показывает цену 7-10к рублей, то дождитесь распродажи (оно раз в месяц там точно случается), и купите потом за 1к.
Post #191 432
Судя по этому рейтингу, много людей всё ещё гоняет свои функции на Python 2.7. Даже больше, чем на Java и Go. Что ж, теперь их и без того полная невзгод и тягот жизнь станет ещё чуточку сложнее. Сочувствую, но не от всего сердца.

https://www.datadoghq.com/state-of-serverless/#8
Post #190 411
Рантайм Python 2.7 теперь официально депрекейтнут в AWS Lambda. Что это значит?

* Больше нельзя создавать новые функции на питоне 2.7 (проверил в веб-интерфейсе — и правда, такого рантайма просто нет в списке).
* Больше не будет патчей и обновлений. Тех.поддержка будет вас игнорировать, если спрашивать про этот рантайм. Дальше каждый сам за себя.
* Обновлять код существующих функций можно будет еще до 30 сентября. После этого нельзя будет ни создавать, ни обновлять, но всё ещё можно будет запускать.

https://aws.amazon.com/blogs/compute/announcing-end-of-support-for-python-2-7-in-aws-lambda/
Amazon Announcing end of support for Python 2.7 in AWS Lambda | Amazon Web Services On July 15, 2021, AWS Lambda will deprecate Python 2.7 as a supported runtime, formally ending our Python 2.7 support.
Post #189 418
Там, кстати, PyCon Russia 2021 через полтора месяца собирается произойти. Если вдруг что, имейте ввиду. Событие оффлайновое, Московская область. Обещают, что состоится в любом случае.

В программе есть интересные доклады. Например, Никиту Соболева я бы послушал. Ну ничего, через пару-тройку лет как раз моя очередь просмотра выступлений доползёт до 2021 года, и посмотрю на ютубе 😅

https://pycon.ru/program
pycon.ru Программа PyCon Russia Темы и спикеры конференции PyCon Russia - конференции для продвинутых python-разработчиков
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →