Как стать автором
Поиск
Написать публикацию
Обновить
386.14

Python *

Высокоуровневый язык программирования

Сначала показывать
Порог рейтинга

Готов пример приложения для https://pypi.org/project/targeting-platform/ (библиотека с общим интерфейсом к разным DSP (те которые "A demand-side platform")).

Это в продолжение https://habr.com/ru/posts/829114/

Пример тут: https://gitlab.com/dsp6802915/targeting_platform_example_simple - в реадми описано все что есть сказать - не буду здесь повторяться.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

🤖 The future of CAD (BIM) data processing in Construction is already here!

Instead of working with complex closed or parametric data (the quality of which we have to check in special BIM tools), in the future we work with open structured data, which is an ideal source for RAG, LLM, ChatGPT. To work with LLM models and ChatGPT you need properly prepared data.

Dataframe data obtained from various CAD (BIM) formats is the ideal fuel for modern tools. Pandas is ideal for LLMs due to its robust data processing, efficient indexing, and flexible formatting. It cleans, tokenizes, and normalizes data, supports advanced data retrieval, and structures data in LLM-compatible formats.

Examples of requests for using structured CAD (BIM) data in ChatGPT:

🤖Group the data in Dataframe by "Type Name" while summarizing 
the "Volume" parameter - you can show the result in any kind of graphs and documents
🤖 “Check the values in the volume parameter for all items in "Category"
 - "OST_Walls" and output the list of IDs with null values” - native IDs 
can be displayed later in Revit
🤖 “Check if "Category" "OST_Doors" has parameters that are responsible
for width and length and output element types that do not have such parameters”

⚡️ Instead of using a whole zoo of BIM tools, we now validate and process data directly in ChatGPT.

After getting the results in ChatGPT, we copy the resulting Python code into Pipeline in any Python IDE

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Готова реализация для The Trade Desk (TDD) — как и обещал. Актуальная версия.

Пока это «классическая» реализация (с новым подходом что‑то у TTD не задалось). Когда и если они сделают рабочим новый подход (задание локации и времени в парах через BidLists) я обновлю код.

Теперь библиотека умеет вычитывать, устанавливать, очищать и валидировать таргетинг для трех платформ (DV360, Meta, TTD) с единым интерфейсом. При установке опций будут создаваться дубликаты в системах DV360 и Meta — это необходимо когда вы задаете много географических точек (лимиты платформ на объем информации). Внутри методов реализовано кэширование для операций чтения (get_...) и установка блокировок для операций изменения (set_..., clear_... и т. д.). Кэширование актуально для Meta — чтобы не словить Rate Limit на частых операциях получение информации. Блокировки более актуальны для DV360 и TTD — там операции по созданию дубликатов и установке таргетинг опций относительно длительные (но блокировка только внутри библиотеки работает — внешние системы все еще могут изменить тот же элемент системы — для этого у вас есть интерфейс валидации, который поможет проверить что в системе сохранено то, что вы хотели установить).

Базовый набор операций — как вызывать и что возвращает можно посмотреть в интегрейшен тестах — ссылка.

Пользуйтесь, задавайте вопросы.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Добавлена полная реализация для Google DV360 и Meta Marketing API - https://pypi.org/project/targeting-platform/. Теперь вы можете вычитывать targeting (geospatial part), управлять статусами плейсментов и устанавливать targeting options.

Это развитие https://habr.com/ru/posts/824528/ - следующий на добавление The Trade Desk (там есть задержка - пока они переходят на другую реализацию и в проекте мы пока ее тестируем).

Пока библиотека полностью синхронная (будет изменено в будущем) и без оптимизации трансформаций данных - это если кто напишет комментарий с замечанием/пожелание. Работа с самими DSP максимально оптимально делается (по рекомендациям самих платформ).

Продолжение - https://habr.com/ru/posts/829114/

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Периодически даю подобные задачки на интервью для джунов, и, к сожалению, далеко не все дают правильный ответ. А вы сможете?

Начинающий Python-разработчик выполнил свою первую самостоятельную задачу: написал программу для удаления всех чисел меньше пяти из списка. Однако результат работы его программы не соответствует ожиданиям.

Исходный список:

numbers = [1, 2, 5, 11, 3, 111, 7, 27]

Результат работы кода:

[2, 5, 11, 111, 7, 27]

Ожидаемый результат:

[5, 11, 111, 7, 27]

Ваша задача — найти ошибку и предложить собственный вариант решения, а также подробно объяснить что не так с исходным кодом.

Исходный код программы:

numbers = [1, 2, 5, 11, 3, 111, 7, 27]

for i in numbers:
    if i < 5:
        numbers.remove(i)
        
print(numbers)

Ну и на всякий случай: у кандидатов на собеседовании нет доступа к GPT-чатам и поисковикам, решите без подсказок?

Теги:
Всего голосов 6: ↑6 и ↓0+7
Комментарии22

Хвостатое недоразумение покоряет GitHub!

Всё верно, я отметил «лишним не будет» =)
Всё верно, я отметил «лишним не будет» =)

Большинство голосов оказалось за, а поэтому, спешу сообщить о выпуске полной некастрированной репы хвостатой на GitHub!

Для тех, кто в танке, ну или под наркозом, ну или просто пофек: речь идёт о стример-тян из этой статьи

P. S.
Код всё ещё никак не правил, это по-прежнему лютая свалка функций и принтов для отладки, но уж явно в более удобном виде, чем в статье :)

Позже доработаю инструкцию по запуску, чтобы каждый мог сделать свою нейро-тян

(устроим армию нейро-стримерш/ов, чтобы они наводнили ютуб и отправили обычных стримеров на завод😈 шутка, на деле просто выпускаю репу, чтобы таким же гикам, как я, было проще повторить этот опыт; ну и посмотреть на ваши эксперименты)

Теги:
Всего голосов 2: ↑1 и ↓1+1
Комментарии0

Автоматическая игра в BLUM

Если у вас, как и у меня, накопилось много билетов для мини игры в приложении BLUM, но нет времени, чтобы их потратить, попробуйте воспользоваться моим небольшим проектом: репозиторий BLUM_autoclaimer.

Он эмулирует действия клиента на уровне запросов к закрытому API и тратит все билеты, зарабатывая за каждую игру случайное количество очков, но в районе возможного максимума. Каждая игра длится полминуты. Программа завершает работу после того, как все билеты будут использованы.

Для работы программы потребуется токен авторизации.

Пулл реквесты приветствуются. Интересные обсуждения автоматизации подобных проектов в телеграм-канале.

Теги:
Всего голосов 2: ↑1 и ↓1+2
Комментарии4

Разработчики сообщества Fedora вынесли на обсуждение вопрос по поводу удаления Python 2.7 из 41 версии дистрибутива проекта. Фактически из коробки в Fedora 41+ не будет Python 2, кроме PyPy.

Это предложение будет реализовано только в том случае, если оно будет одобрено руководящим комитетом по разработке Fedora.

Пакет Python 2.7 с интерпретатором Python версии 2.7 оставался в дистрибутиве Fedora после окончания выпуска исходной версии (01.01.2020) только для того, чтобы пользователи Fedora могли протестировать своё программное обеспечение на основе версии Python, поставляемой в RHEL 7, CentOS 7 и RHEL 8 и для поддержки остальных пакетов, которые не удалось портировать.

Проект Fedora 41 выйдет в октябре 2024 года, почти через 5 лет после окончания выпуска Python 2.

23 апреля 2024 года разработчики проекта Fedora выпустили стабильную сборку проекта Fedora Linux 40. Релиз Fedora Linux 39 состоялся 7 ноября 2023 года, спустя 20 лет и 1 день после запуска проекта по выпуску популярного дистрибутива Linux.

Теги:
Всего голосов 2: ↑2 и ↓0+3
Комментарии0

Как решить задачу 3Sum на Python: видеоинструкция для начинающих

Давно мы не публиковали «Алгоритмическую качалку» на Хабре — исправляемся. В новом ролике главная по прокачке алгоритмических мышц Альбина показывает, как решить задачу Three Sum на языке Python.

Будем рады вашим решениям в комментариях, а также лайкам и комментариям на YouTube.

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии0

Автоклейм токенов в Hamster Kombat и HOT Wallet

Возможно я уже кому-то надоел своими попытками автоматизации всякого web3 скама (а может и нет), но в этот раз я написал небольшую, и очень легковесную программу, которая занимается автоматическим клеймом токенов в Hamster Kombat и HOT Wallet. И, как начинающий программист, я не могу не поделиться своим 'шедевром'.

Функционал прост, раз в несколько часов она шлет POST-запросы на API указанных проектов и таким образом собирает монеты, плюс раз в час протапывает хомяка. Всё работает на обычных реквестах, так что для работы программы хватит ресурсов калькулятора. Возможно, кому-то будет интересно, как это работает, да и функционал можно значительно расширить под все возможные ресурсы API.

Репозиторий - Hamster Kombat autoclaimer

Пулл реквесты приветствуются.

Теги:
Всего голосов 4: ↑2 и ↓2+2
Комментарии1

Самый быстрый и простой способ развернуть докер контейнер со своим Python проектом.

Привет. Для того чтоб воспользоваться данным способом у вас должен быть:

  1. VPS сервер

  2. Написанный Python проект

  3. Установленный на сервере Docker

  4. Аккаунт на GitHub

Небольшие настройки.

Для начала в корне проекта необходимо создать Dockerfile. Вот мой пример:

FROM python

WORKDIR /usr/src/app

# Копируем и устанавливаем зависимости Python
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# Копируем все файлы из текущей директории в рабочую директорию контейнера
COPY . .

# Команда запуска контейнера
CMD ["/bin/bash", "-c", "python aiogram_run.py"]
  • Помещаем все данные проекта на свой репозиторий GIT.

  • Заходим на VPS сервер.

  • Создаем там папку

  • Выполняем PULL проекта с GitHub

  • Создаем свой именной образ:

docker build -t my_image_name .
  • Запускаем контейнер:

docker run -it -d --env-file .env --restart=unless-stopped --name container_name my_image_name

В данном примере я запускал телеграмм бота. Он использовал файл .env. Тут вы видите, как привязать env-file к рабочему контейнеру.

Для того чтоб посмотреть на консоль бота достаточно выполнить команду:

docker attach container_name

Для выхода из интерактивного режима воспользуйтесь комбинацией клавиш CTRL+P, CTRL+Q.

Если было полезно – подписывайтесь и ставьте лайки.

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии0

Просто шутка.
Я уже 20 лет плохо сплю (ПТСР), и люблю засыпать под музыку/фильмы/лайв стримы/аудиокниги и пр. Но иногда оно меня будит по ночам. Решил исправить ситуацию. Написал коротенький скрипт, который постепенно сводит звук на ноль:

import re
import subprocess
from time import sleep


LOOK_FOR = re.compile(r'\[(\d+\%)\]')


def decrease_volume(percent) -> int:
    info = subprocess.check_output(
        ['amixer', '-D', 'pulse', 'set', 'Master', f'{percent}%-'],
    ).decode('utf-8')
    return int(LOOK_FOR.findall(info)[0][:-1])


def main() -> None:
    while True:
        print(f'Volume = {decrease_volume(1)}')
        sleep(10.0)


if __name__ == '__main__':
    main()

Ну, забавно, что постепенное затихание даже немного помогает заснуть. Я - на боковую. Всем спокойной ночи

Теги:
Всего голосов 10: ↑10 и ↓0+10
Комментарии6

Возможно кому-то пригодится библиотека с общим интерфейсом к разным DSP (те которые "A demand-side platform"). PyPi - https://pypi.org/project/targeting-platform/

Пока реализовано только для Google DV360, Meta и The Trade Desk (TTD) получение каталогов плейсментов. В ближайшее время будет и непосредственно управление targeting на основе геоинформации (Uber H3 и lat/lng). Библиотека не решает проблемы выбора аудитории, она только поможет универсально выставлять таргетирование по локации и времени.

Библиотека это переосмысление более чем года работы на коммерческом проекте (код для всех операций уже есть - вопрос переноса в Open Source только вопрос времени). Будет дополнена документации и возможно пример приложения, но на данном этапе как это использовать можно увидеть в интеграционных тестах.

Область применения достаточно специфическая и требует наличия доступов к платформам. Получить самим (индивидуально) такие доступы можно только к Meta; DV360 и TTD только через Technical Account Manager платформ (только если вы уже такие имеете - сможете их использовать).

Пока комментарии и пожелания не принимаются :), но будут учитываться. (Сейчас это полностью синхронная библиотека, реализация максимально ориентировано на работоспособность, а не показать "как я пишу идеальный код". Если будет кем-либо использоваться библиотека, то реализация получит развитие и улучшения, и возможно новые DSP.)

Продолжение: https://habr.com/ru/posts/827828/ https://habr.com/ru/posts/829114/

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Ближайшие события

Энтузиаст с помощью отладчика Telink RP2040 запустил Micropython на невероятно дешёвых умных часах LT716 за $3.

Устройство работает на процессоре Telink TC32 с тактовой частотой 24 МГц, имеет 512 КБ флэш-памяти и 16 КБ ОЗУ, оснащено экраном разрешением 80x160, поддерживает BLE.

Теги:
Всего голосов 3: ↑3 и ↓0+4
Комментарии0

Обновление библиотеки asyncpg-lite до версии 0.3.1.1

Рад сообщить, что библиотека asyncpg-lite обновлена до версии 0.3.1. Все предыдущие версии были удалены и больше не доступны для установки. Для корректной работы, пожалуйста, удалите старые версии с помощью следующей команды:

pip uninstall asyncpg-lite

Чтобы установить последнюю версию, используйте:

pip install --upgrade asyncpg-lite

Актуальная версия: 0.3.1.1

Вы можете найти страницу библиотеки на GitHub по следующему адресу: asyncpg-lite на GitHub.

Что нового в версии 0.3.1.1

В этой версии все методы библиотеки были переписаны. Если ранее библиотека работала исключительно с чистым asyncpg, то теперь asyncpg используется как асинхронный драйвер для взаимодействия с PostgreSQL, а все запросы выполняются через SQLAlchemy.

Причины обновления

Основная причина переписывания библиотеки — улучшение безопасности. Старые версии имели определенные уязвимости, которые теперь устранены.

Подробный разбор новой версии библиотеки я постараюсь опубликовать завтра в формате статьи.

Благодарю за ваше внимание и поддержку!

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Все те кто пользовался библиотекой asyncpg-lite. Сообщаю, что завтра вечером будет выпущено обновление библиотеки asyncpg-lite. В новой версии библиотека будет полностью переписана с использованием SQLAlchemy и asyncpg (в старой версии использовался чистый asyncpg), при этом базовый синтаксис останется практически неизменным.

Такое решение принято из-за ограничений чистого asyncpg в предотвращении SQL-инъекций. Вместо разработки собственного решения я решил воспользоваться проверенными инструментами ORM, которые предоставляет SQLAlchemy, но, при этом, я постарюсь максимально сохранить ту простоту в использовании, которая была в старых версиях asyncpg-lite.

Начиная с версии asyncpg-lite 0.3, библиотека будет основываться на SQLAlchemy и драйвере asyncpg для работы с PostgreSQL. Версии ниже 0.3 будут сняты с доступности для скачивания и установки с завтрашнего дня.

С выходом asyncpg-lite 0.3 настоятельно рекомендуем удалить старые версии библиотеки и установить актуальную.

Вместе с новой версией библиотеки будет опубликована сопроводительная статья, подробно описывающая все изменения в синтаксисе.

Благодарю за внимание! 🚀

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Защищенный контент в Telegram боте с использованием aiogram 3.x

Если вы создаете Telegram бота и хотите обеспечить защиту контента от сохранения, копирования или пересылки, вы можете использовать новую функциональность библиотеки aiogram 3.x. Это особенно полезно, если ваш контент представляет ценность и вы хотите контролировать его дальнейшее распространение.

Для включения защиты контента достаточно установить флаг protect_content=True при отправке сообщений через ваш Telegram бот. Например:

await message.answer("Ваш текст или контент", protect_content=True)
await bot.send_message(chat_id=message.from_user.id, protect_content=True)
await message.answer_photo(photo=photo_id, caption='Мое описание фото', protect_content=True)

Этот флаг применяется ко всем типам сообщений, включая текстовые сообщения, фотографии, видео и другие медиафайлы. Таким образом, пользователи вашего бота не смогут сохранять изображения, видео или копировать текст непосредственно из диалогов с ботом.

Не забудьте подписаться и поставить лайк, если этот пост оказался полезным для вас!

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии2

GPT-4o в командной строке бесплатно.

 pip install g4f 
from g4f.client import Client 
 
client = Client() 
 
 
def answer(question: str) -> str: 
 
    response = client.chat.completions.create( 
        model="gpt-4o", 
        messages=[{"role": "user", "content": question}], 
    ) 
    return response.choices[0].message.content 
 
def main(): 
    while True: 
        question = input('\nВведите ваш вопрос > ') 
        print(answer(question)) 
 
 
if __name__ == '__main__': 
    main() 

Если что-то непонятно, запустите скрипт и задайте свой вопрос.

Теги:
Всего голосов 5: ↑5 и ↓0+7
Комментарии3

Корректно пишем главный файл телеграмм бота на Aiogram 3.x

Друзья, если вы читали серию моих статей про разработку ботов через aiogram 3, то видели что я там делился структурой своего бота, в частности главным файлом. Внес в него некоторые корректировки:

async def set_commands(commands):
    await bot.set_my_commands(commands, BotCommandScopeDefault())


async def start_bot():
    await set_commands()
    await bot.send_message(amin.id, 'я запущен и готов к работе')


async def stop_bot():
    await bot.send_message(amin.id, 'бот остановлен')


async def main():
    # регистрация роутера
    dp.include_router(start_router)

    # регистрация функций
    dp.startup.register(start_bot)
    dp.shutdown.register(stop_bot)

    try:
        await bot.delete_webhook(drop_pending_updates=True)
        await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types())
    finally:
        await bot.session.close()
      

Функция, которая запускается при старте бота:

async def start_bot():
    # регистрация командного меню
    await set_commands()
    await bot.send_message(amin.id, 'я запущен и готов к работе')

Функция, которая запускается при завершении сессии:

async def stop_bot():
    await bot.send_message(amin.id, 'бот остановлен')

После функции нужно зарегистрировать:

dp.startup.register(start_bot)
dp.shutdown.register(stop_bot)

И затем корректно закрыть сессию с ботом.

Благодарю за внимание. Подписывайтесь и ставьте лайки, если инфорамция была для вас полезной.

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии2

Создание фейковых данных пользователя на русском языке с использованием Python Faker

Для реализации этой задачи будем использовать замечательный модуль python - Faker.

Устанавливаем:

pip install faker

С помощью Faker можно легко создать фейковые имена, адреса, адреса электронной почты, номера телефонов и многое другое. Вот пример функции, которая генерирует такого рода данные:

from faker import Faker


def generate_fake_user():
    fake = Faker('ru_RU')

    return {
        'name': fake.name(),
        'address': fake.address(),
        'email': fake.email(),
        'phone_number': fake.phone_number(),
        'birth_date': fake.date_of_birth(),
        'company': fake.company(),
        'job': fake.job()
    }

Эта функция использует локализацию 'ru_RU', чтобы генерировать данные на русском языке. Результат будет включать в себя все необходимое для тестирования ваших приложений и сервисов.

Если информация представленная выше была вам полезной - добавляйте ее в закладки и ставьте лайки! Ваши отзывы и поддержка мотивируют меня и далее делиться с вами своими знаниями.

Теги:
Всего голосов 3: ↑3 и ↓0+6
Комментарии0

Вклад авторов