18 заметок с тегом

программирование

Позднее Ctrl + ↑

[Идея] Бот в Telegram, который мониторит просмотры поста в realtime

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

Получится лучше понять аудиторию, кто когда смотрит посты. У меня есть предположение, что некоторые люди вечером открывают список каналов и смотрят все новости за день. Интересно, сколько таких. Ещё можно мониторить чужие каналы и наблюдать за их подписчиками.

По этим данным нужно построить красивые графики, чтобы сидеть и смотреть на них. Красота.

 Нет комментариев    285   11 мес   идея   программирование

Особенности pip и потенциальная дырка

Не вдаваясь конкретно в библиотеки (это два клиента для keycloak), расскажу о ситуации.

Есть библиотека А и библиотека B. Библиотеки А и  B обе зарегистрированы в pypi под разными именами. Но в setup.py обе экспортируют одинаковые по имени пакеты (параметр packages), которые и буду в итоге отображены в вашем списке пакетов. Как вы думаете, как поступит pip, если указать ему обе библиотеки в зависимостях проекта?

... минутка на подумать ...

Он их смёржит между собой. При этом будет устанавливать одну библиотеку поверх другой, в порядке как в списке зависимостей. Я не нашёл ни в документации ни где-то ещё описания такого поведения. А оно приводит например к следующему:

  • у вас в списке зависимостей библиотека A идёт перед библиотекой B,
  • и там и там есть файл exceptions.py, в котором прописаны исключения,
  • после установки библиотеки B, файл exceptions.py будет из библиотеки B, при этом уникальные для библиотеки А файлы так и останутся на месте и в импортах будет использоваться exceptions.py, который уже от другой библиотеки,
  • как минимум это приводит к конфликтам, ошибкам и дебагу.

Ещё интересным выглядит вектор раскручивания этого до уязвимости: а что, если мы в нашей библиотеке (или в зависимостях нашей библиотеки) пропишем какое-то популярное имя пакета (например Flask) и переопределим поведение? Т.e. любой, кто установит нашу библиотеку не глядя на то, что внутри, имеет шанс запустить у себя наш код не подозревая об этом. Достаточно просто нашу библиотеку в списке зависимостей разместить ниже фреймворка, в который мы лезем.

Мем конечно смешной, а ситуация страшная.

Решил сходить и спросить у знающих людей, как так можно жить. Никита Воронов делает dephell и рассказал, что это не баг, а фича.

Так можно делать отдельные пакеты с плагинами, которые положат себя в папку plugins. Причём много кто это делает, так что поведение уже поздно менять. Про опасность пакетов вообще бесполезно говорить. Уже при установке пакет может в setup.py что угодно сделать. Например, слить твой ssh ключ. Так что недоверенные пакеты устанавливать вообще нельзя. Можно почитать, почему никогда нельзя звать sudo pip install. Проблема в том, что альтернатив нет, а все другие пакетные менеджеры (в том числе и dephell) всё равно внутри зовут pip.

Всё это грустно. Ну и надо думать над тем, как называть пакеты и смотреть, есть ли кто-то уже с таким же именем в pypi. Для решения моего конфликта оказалось проще руками затащить часть одной из либ в проект. Другой найденный вариант — использовать install-options pip’a и prefix для задания кастомного пути одной из либ.

Ну и конечно устанавливайте только доверенные пакеты.

 Нет комментариев    298   1 год   питон   программирование

Баркоды сериала «Чернобыль»

Вспомнил про идею moviebarcode и сделал тоже самое для сериала «Чернобыль» от HBO.
Для каждого кадра серии посчитал средний цвет и выстроил по таймлайну. Сделал всё через OpenCV и Python.
Получилась такая красота:

1:23:45
Пожалуйста, сохраняйте спокойствие
Откройся широко, о Земля!
Счастье всего человечества
Вечная память
 Нет комментариев    397   2019   дизайн   кино   питон   программирование   проекты   сериалы
 Нет комментариев    304   2019   образование   полезности   программирование

WWDC 2019

На идущей WWDC 2019 заметил одну особенно классную штуку на iPadOS: перенос текста жестами максимально похож на операции с вещами в физическом мире. Это действительно движения, которые мы совершаем, чтобы взять и переложить что-либо.
Посмотреть можно на сайте iPadOS в разделе Text Editing.

 Нет комментариев    290   2019   дизайн   программирование

pretty_json_bot: вжух и красиво

Всё чаще нужно посмотреть на какое-то поле в json-ответе, а искать в строке глазами лень. Поэтому написал бота в Телеграм, который выравнивает отправленный ему json. Работает через команду /pretty, можно добавлять в группы.

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

Попробовать: @pretty_json_bot

 1 комментарий    172   2019   программирование   проекты

Запятые и таплы

Долго искал классическую и глупую ошибку. Обстановка такая:

class TestView(View):
    def __init__(self, storage_arg: Storage):
        self.storage = storage_arg,
        ...

    def get_item_name(id):
        ...
        return self.storage.name(id)

self.storage внезапно оказывается tuple<Storage>, хотя storage_arg типа Storage.

Легко догадаться, что проблема в лишней запятой после storage_arg. В питоне код 1, создаст тапл из одного элемента.

Установил расширение для flake8, чтобы больше на таком не попадаться.

 Нет комментариев    98   2019   питон   программирование

Скрипты для очистки данных со stat.gibdd.ru

Написал пару скриптов для исправления координат ДТП.

Процесс состоит из двух шагов:

  • привязка координат ДТП к адресу (он обычно заполняется правильно),
  • проекция координат адреса на ближайшую улицу. Скрипт может не работать в России без VPN.

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

 Нет комментариев    88   2019   городские данные   питон   программирование   проекты