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

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

Позднее Ctrl + ↑

bash -> zsh

Ruby-скрипт для конвертации истории bash в zsh, Ctrl-C / Ctrl-V с просторов Гитхаба.

#################################################################
# = This script transfers bash history to zsh history
# = Change bash and zsh history files, if you don't use defaults
#
# = Usage: ruby bash_to_zsh_history.rb
#
# = Author: Ankit Goyal
#################################################################

# change if you don't use default values
BASH_HISTORY_FILE_PATH="#{ENV['HOME']}/.bash_history"
ZSH_HISTORY_FILE_PATH="#{ENV['HOME']}/.zsh_history"

# Read the bash history file
bash_hist_file = File.read(BASH_HISTORY_FILE_PATH)

# Get the list of commands from bash history hile
command_list = bash_hist_file.split("\n")

# Open the zsh history file
zsh_hist_file = File.open(ZSH_HISTORY_FILE_PATH, "a")

# Get timestamp required for zsh history file format and update the history file
time = Time.now.to_i
command_list.each do |command|
  time += 1
  zsh_hist_file.write(": #{time}:0;#{command}\n")
end

# Close the file
zsh_hist_file.close
 Нет комментариев    118   2020   полезности   программирование
 Нет комментариев    223   2020   образование   программирование

[Идея] Авто-плейлист Spotify/AppleMusic из ближайших концертов в твоём городе

Хочу следующий флоу:

  • сервис парсит артистов и их концерты в  с заданного списка сайтов и формирует тебе плейлист,
  • ты слушаешь плейлист и если тебе понравилась группа/трек, то идёшь на веб-страницу, смотришь концерт этой группы и покупаешь билеты,
  • когда концерт прошёл — трек удаляется из плейлиста.

Выглядит как автоматический мониторинг ближайших концертов прямо в ушах.

Возможность потыкать API Spotify/AppleMusic/GooglePlayMusic.

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

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

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

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

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

 Нет комментариев    349   2019   идея   программирование

Особенности 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 для задания кастомного пути одной из либ.

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

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

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

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

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

WWDC 2019

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

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

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

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

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

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

 1 комментарий    222   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, чтобы больше на таком не попадаться.

 Нет комментариев    140   2019   питон   программирование
Ранее Ctrl + ↓