Привет, я Андрей @ab0xa, bi / de / java dev
Анализ данных и визуализация, интересные ссылки, вакансии, уроки, юмор) и личный опыт
Стек технологий Python, Java, SQL, Tableau, Knime, Yandex.Облако, Yandex DataLens
Привет, я Андрей @ab0xa, bi / de / java dev
Анализ данных и визуализация, интересные ссылки, вакансии, уроки, юмор) и личный опыт
Стек технологий Python, Java, SQL, Tableau, Knime, Yandex.Облако, Yandex DataLens
Ребят, тут Авито регистрацию на свой первый CTF открыл с призами до 300 000 рублей на команду 📍
AvitoTech устраивает CTF онлайн с денежным призовым фондом, мерчем и интересными тасками!
Регистрация команд уже открыта по ссылке, а ниже собрали инфу, что предстоит делать во время HoneyBadger CTF AvitoTech.
Возьмите на себя роль медоеда, проверьте защиту пчелиного улья и найдите все скрытые уязвимости в сотах.
Чего ждать от турнира: тасков на веб-уязвимости, инфраструктурных мисконфигов, анализа скомпилированного кода, расследования инцидентов, слабостей шифров, всего, что требует хакерской смекалки. И розыгрыша мерча, помимо основного призового фонда.
Важно: CTF не только для спецов по кибербезопасности — есть отдельная лига для всех, кто любит разбираться, как устроены IT-системы 🐝
«Это разве аналитика?» - канал из категории «Бизнес», подключенный к сервису кросспостинга MaxGate. Публикации канала синхронизируются между Telegram и мессенджером MAX, а на этой странице собраны ссылки на обе версии канала.
Сейчас у канала 4 679 подписчиков суммарно в Telegram и MAX. За последние 24 дня в истории MaxGate учтено 13 публикаций, поэтому перед подпиской можно оценить не только размер аудитории, но и регулярность обновлений.
Чтобы подписаться, используйте кнопки «Открыть в MAX» и «Открыть в Telegram» в верхней части страницы. У отдельных постов ссылка может быть доступна в обоих мессенджерах или только в одном из них, если MaxGate получил такой URL из истории обработки.
23.0626.0629.0602.0705.0708.0711.0714.0716.07
Число постов
2
1
0
15.0716.07
Внутри питона есть ЕЩЕ виртуальные машины
Мы все знаем, что сам питон - одна большая стековая виртуальная машина, которая выполняет опкоды. Их мы можем посмотреть через dis:
>>> import dis
>>> dis.dis('x + y')
0 RESUME 0
1 LOAD_NAME 0 (x)
LOAD_NAME 1 (y)
BINARY_OP 0 (+)
RETURN_VALUE
Можем получить список всех опкодов, можем вызвать их оптимизации и посмотреть на результат с оптимизациями.
Но! Внутри CPython есть и другие виртуальные машины. Сегодня поговорим про ту, которой все мы всегда пользовались, но не знали, что она - виртуальная машина.
pickle
Да, не удивляйтесь. Встроенный протокол сериализации в питоне работает благодаря отдельной стековой виртуальной машине. Давайте посмотрим.
>>> class User:
... def __init__(self, username: str, tags: list[str]) -> None:
... self.username = username
... self.tags = tags
... def __reduce__(self) -> tuple[type['User'], tuple[Any, ...]]:
... return (type(self), (self.username, self.tags))
Создадим обычный класс и запиклим его объект:
>>> import pickle
>>> user = User('sobolevn', tags=['python', 'tg'])
>>> pickle.dumps(user, protocol=0)
b'c__main__\nUser\np0\n(Vsobolevn\np1\n(lp2\nVpython\np3\naVtg\np4\natp5\nRp6\n.'
Обратите внимание, что в разных протоколах значение будет разное:
>>> pickle.dumps(user, protocol=1)
b'c__main__\nUser\nq\x00(X\x08\x00\x00\x00sobolevnq\x01]q\x02(X\x06\x00\x00\x00pythonq\x03X\x02\x00\x00\x00tgq\x04etq\x05Rq\x06.'
Всегда необходимо тестировать, что pickle работает для всех версий от 0 до pickle.HIGHEST_PROTOCOL для ваших объектов, которые поддерживают такой способ сериализации.
Что внутри?
Можно, глядя на значения, подумать, что там просто лежит какой-то бинарный формат сериалиации. Однако, там лежат опкоды виртуальной машины для сериалиации объектов. Их можно задисить:
>>> import pickletools
>>> pickletools.dis(pickle.dumps(user, protocol=1))
0: c GLOBAL '__main__ User'
15: q BINPUT 0
17: ( MARK
18: X BINUNICODE 'sobolevn'
31: q BINPUT 1
33: ] EMPTY_LIST
34: q BINPUT 2
36: ( MARK
37: X BINUNICODE 'python'
48: q BINPUT 3
50: X BINUNICODE 'tg'
57: q BINPUT 4
59: e APPENDS (MARK at 36)
60: t TUPLE (MARK at 17)
61: q BINPUT 5
63: R REDUCE
64: q BINPUT 6
66: . STOP
highest protocol among opcodes = 1
Сравните, как будет отличаться вывод для другого протокола, например пятого.
И окажется, что все "случайные" символы на самом деле просто так же обозначают опкоды. Теперь мы умеем их читать.
Мы можем найти все опкоды и посмотреть их доки:
>>> pickletools.opcodes[25].code
']'
>>> pickletools.opcodes[25].doc
'Push an empty list.'
И мы даже можем оптимизировать байткод pickle для более быстрой сериализации / десериализации.
Прям полностью настоящая ВМ :)
Вот за счет чего мы можем с помощью pickle сериализовать любой Python объект (почти), а с помощью других средств - получается сильно сложнее.
Обсуждение: Знали о такой детали реализации? Знаете ли вы как работает pickle сам по себе? Зачем нужны протоколы и версии? Или сделать отдельный пост про детали работы? Знаете ли вы, что pickle - фундаментально небезопасный протокол? И нельзя запускать чужие дампы, только свои доверенные?
Загадка: кстати, какие еще виртуальные машины внутри CPython вы знаете? Я назвал только одну из нескольких. Заходите в комменты за ответами, правильные - покажу завтра.
Присаживайся на диван к аналитикам Авито 👀
Команда AvitoTech запустила проект «Диванная аналитика». Это серия материалов, где специалисты из Авито рассказывают, как принимают решения в одной из крупнейших экосистем страны.
Если ты работаешь с данными, то вот 3 причины зайти на лендинг прямо сейчас:
1️⃣ Все выпуски опираются на реальный опыт — аналитики рассказывают о том, что уже применили у себя и что сработало.
2️⃣ Царит приятная атмосфера: по сути, все видео — это недушные мини-лекции с наглядной презентацией.
3️⃣ Разбираются разные темы — от ML до стратегического планирования.
Контент может пригодиться опытным аналитикам и менеджерам, которым надо говорить с командой на одном языке.
Смотри готовые выпуски и подпишись на новые — телеграм-бот пришлёт уведомление о новом видео!
Посмотреть, что там интересного
DBX
Так ли уж много надо для счастья на сегодняшний день? Полный бак бензина, хороший велик и... Чтобы хоть одна sql-ide показывала миллисекунды для datetime колонок в StarRocks!
Я очень люблю сообщества и неформальное общение. Там порой случайно можно узнать что-то интересное, способное поменять твои привычки в работе и сделать картинку вокруг чуточку лучше.
И вот недавно думали тряхнуть стариной и провести новый DBT митап с Алмазом, и он случайно обронил в разговоре dbx. Выглядит интересно, пошел смотреть что это такое.
Да, вся IDE поместилась в 15 мегабайт с поддержкой почти всех бд, которые сейчас есть на рынке. Но эти 15 мегабайт, конечно же, не включают в себя JDBC драйвера для вертики или хайва, например. А вот StarRocks включен в поставку по умолчанию. И то, с чем не справились ни JB с их убер зоопарком, ни DBeaver с аналогом - вот на скриншоте сверху.
А еще в DBX на маке работает cmd+enter для выполнения запросов, что благополучно сломали уже год как в DBeaver.
А еще там есть MCP для всех ваших коннектов и готовое how-to интеграция с курсором и клодом (и остальными). Который впрочем не работает на маках с арм :)
И еще рендеринг тупит и если быстро листать виртуальные столы - то видишь белый экран примерно пару секунд после перехода.
Но ладно, за миллисекунды и хоткеи все можно простить. Теперь это мой топчик. Спасибо, Алмаз :)