🤖AGI BI eval, GPT 5.6
Привет, я Андрей @ab0xa, bi / de / java dev Анализ данных и визуализация, интересные ссылки, вакансии, уроки, юмор) и личный опыт Стек технологий Python, Java, SQL, Tableau, Knime, Yandex.Облако, Yandex DataLens
Канал «Это разве аналитика?» подключен к сервису MaxGate. Контент автоматически синхронизируется между Telegram и мессенджером MAX.
Подключить кросспостинг«Это разве аналитика?» - канал из категории «Бизнес», подключенный к сервису кросспостинга MaxGate. Публикации канала синхронизируются между Telegram и мессенджером MAX, а на этой странице собраны ссылки на обе версии канала.
Сейчас у канала 4 679 подписчиков суммарно в Telegram и MAX. За последние 26 дней в истории MaxGate учтено 14 публикаций, поэтому перед подпиской можно оценить не только размер аудитории, но и регулярность обновлений.
Чтобы подписаться, используйте кнопки «Открыть в MAX» и «Открыть в Telegram» в верхней части страницы. У отдельных постов ссылка может быть доступна в обоих мессенджерах или только в одном из них, если MaxGate получил такой URL из истории обработки.
Ребят, тут Авито регистрацию на свой первый CTF открыл с призами до 300 000 рублей на команду 📍 AvitoTech устраивает CTF онлайн с денежным призовым фондом, мерчем и интересными тасками! Регистрация команд уже открыта по ссылке, а ниже собрали инфу, что предстоит делать во время HoneyBadger CTF AvitoTech. Возьмите на себя роль медоеда, проверьте защиту пчелиного улья и найдите все скрытые уязвимости в сотах. Чего ждать от турнира: тасков на веб-уязвимости, инфраструктурных мисконфигов, анализа скомпилированного кода, расследования инцидентов, слабостей шифров, всего, что требует хакерской смекалки. И розыгрыша мерча, помимо основного призового фонда. Важно: CTF не только для спецов по кибербезопасности — есть отдельная лига для всех, кто любит разбираться, как устроены IT-системы 🐝
Внутри питона есть ЕЩЕ виртуальные машины Мы все знаем, что сам питон - одна большая стековая виртуальная машина, которая выполняет опкоды. Их мы можем посмотреть через 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 до стратегического планирования. Контент может пригодиться опытным аналитикам и менеджерам, которым надо говорить с командой на одном языке. Смотри готовые выпуски и подпишись на новые — телеграм-бот пришлёт уведомление о новом видео! Посмотреть, что там интересного