• По-быстрому слепить Android-приложение на Python (Kivy?). Стоит ли?

    Посоветовать действительно много чего:
    • Kivy довольно простой инструмент для создания мобильного приложения. Насколько я читал, проблема больше в сборке бинарных пакетов для мобильные ОС. Для Android есть buildozer, с которым люди испытывают проблемы. В Хабре есть статья про его настройку
    • Мобильное приложение для управления - не сложная задача. Логика очевидно будет на сервере, а клиент можно сделать и на современных Javascript фреймвоках. Не зацикливайтесь на языках и технологиях, самое важное в сроках и качестве исполнения.
    • Не тратьте много времени на мелочи. Кроме минимального мобильного клиента и сервера, Вам не мало времени придется провести за проработкой протокола обмена, способе и виде хранения, оптимизации и отладке всего этого и т.д. Быстро создайте прототип, путь и не самый красивый, а позже украшательство можно внести.
    • Из практических советов: В мобильном клиенте можете сильно "затормозится" на реализации хороших графиков. Можно значительно упростить, если воспользоваться готовыми html виджетами. Для python есть довольно популярный Dash. В мобильном клиенте можно показывать через html контейнер.
    • При работе с железом хорошо бы использовать очередь в том или ином виде. Советую очень хорошую реализацию очереди на Python: dramatiq. Для крупного проекта RabbitMQ или NATS
    • Для создания сервера на Python очень рекомендую molten. Проект хоть и молодой, но стабильный и очень продуманный и современный. P.S. есть интеграция с dramatiq с коробки.

    Самому приходилось писать на Python решение для умного дома, так что знаю о чем пишу.
    Ответ написан
    1 комментарий
  • Какие хранилища артефактов есть, чтобы по событиям на хранилище запускать job?

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

    Не понятно, чем связаны сборка и деплой у Вас?
    Я считаю, что связаны они тем, что оба являются стадиями или по другому этапами в непрерывной интеграции (CI).

    И в чем порочность, которая требует разрыва?
    На этапе сборки происходит к примеру компиляция, линковка, ... результатом является docker образ. Который на этом же этапе помещается в хранилище артефактов т.е. docker registry (docker push). На этапе деплоя, происходит подключение к серверу и доставка артифакта с хранилища (docker pull) и запуск (docker run) к примеру.

    Почему я считаю, что эти этапы прямую не связанны?
    Между сборкой и деплоем в непрерывной интеграции принято вставлять этап тестирования и даже профилирования (нагрузочного тестирования) иногда. И в зависимости от результатов тестирования цепочка этапов(pipline) может прерваться. Выполнения деплоя может и не быть. В чем собственно и цель непрерывной интеграции от старого подхода, когда собирали и доставляли на производство. Цель: доставлять жизнеспособный продукт потребителям непрерывно.
    Ответ написан
  • Какую выбрать систему оркестрации для докера?

    Судя по Вашему описанию, Вам и в правду не нужен кластер.

    через файлы конфигурации, как в кубернетс ... перезапуск при падении как в кубернетс

    Это называется инфраструктура как код. Для простых задач достаточно элементарный bash скрипт (srv-up.sh & srv-down.sh, make file, ...) или docker-compose.

    обновление без простоя

    Для этого посмотрите связку docker+nginx+consul+consul-template. В интернете много статьей, примеров и т.д.
    Работает так:
    • Есть сервис. nginx (srv-v.1 в конф.) -> srv-v.1
    • Выходит вторая версия продукта и строится образ srv-v.2 и доставляется на сервер
    • Запускаем образ srv-v.2 на сервере
    • Состояние сервера: nginx (srv-v.1 в конф.) -> srv-v.1
      srv-v.2
    • consul обнаружит srv-v.2 в докере, что в свою очередь обновит конфигурацию nginx и сделает nginx reload (не перезагрузка)
    • Состояние сервера: nginx (srv-v.1, srv-v.2 в конф.) -> srv-v.1
      \ ->srv-v.2
    • Останавливаем srv-v.1 или удаляем srv-v.1 со списка серверов в consul
    • consul обнаружит остановку srv-v.1 в докере, что в свою очередь обновит конфигурацию nginx и сделает nginx reload (не перезагрузка)
    • Состояние сервера: nginx (srv-v.2 в конф.) ->srv-v.2

    Можно обновить запуском к примеру через bash скрипт: upgrade-srv.sh srv-v.1 srv-v.2
    или то же через CI
    Ответ написан
    Комментировать
  • Как принято делать правильное развертывание docker через ansible?

    подскажите, в чем я неправ? Может быть, нужно это как-то иначе использовать?
    Какие сейчас практики применяют?


    Вы не совсем поняли. Ansible был когда docker и в помине не было. И отвечал задачам подготовки сервера к доставке(deploy) продукта (настройка окружения, установка зависимостей, ...) и непосредственно развертывания продукта. Так же некоторое применение было в обслуживании серверов (обновление сертификатов, установке патчей, ...).

    Сейчас в пост докеровском веке, отпала необходимость в установке и настройке зависимостей на сервере, изоляции сервисов (chroot, ...), ... Зависимости и сам продукт доставляются на сервер в готовом виде, т.е. уже развернутом и настроенном. В этом идея контейнеров. Это не от того, что docker играет на том же поле что Ansible, а потому что подход контейнеризации избавил Ansible от некоторых функции.

    Что не предоставляет docker? Это установка самого docker-а на сервере и запуск поверх него готовых контейнеров. Для этого, по прежнему необходим инструмент, можно тот же Ansible.

    P.S. Относительно недавно недавно избавил себя от использования Ansible, в пользу Fabric. По причине тяжеловесности Ansible для простых задач. Хотя обновленный Fabric стал лучше, но по прежнему не идеален (описание в императивном стиле, ...). Условно идеальным средством могут служит инструменты для оркестрации docker: Swarm и Kubernites, но не для простых сайтов и маленьких проектов.
    Ответ написан
    Комментировать
  • Разработка канбан-доски (pet-проект) для опыта. Технологии, фреймворки?

    tim_leon, Вам понадобится два технологических стека:
    • Стек для фронтенда стройте в зависимости от своих навыков и области применения. Планируете только веб сайт или мобильное приложение? Для веб сайта порекомендовал бы что то из современных фреймворков (Angular, React, Vue) и делать SPA. Для мобильных приложении выбор между нативной разработкой(Java, Kotlin, Swift, Objective C) и кросплатформенной (NativeScript, ReactNative, ...).
    • Для бекенда ограничении практический нет. Выбирайте, то что Вам больше знакомо или не знакомо(желание приобрести навык). Бекенд для Kanban доски довольно тривиальная задача


    Выбор Вами Electron-а предполагает разработку Desktop приложении, и это когда они не в тренде. Выбор между Javascript, Java, Kotline и C++ пугает своей неопределенностью. Уточните, в каких языках у Вас есть опыт, и можно будет выбрать.

    Какие есть способы хранения элементов этой доски

    Рекомендую сначала определиться с сущностями, которые будут присутствовать в Вашем проекте. К примеру: пользователи, проекты, доски, карточки и т.д. Далее определить их свойства (атрибуты): проект > наименование, дата создания, автор, ... Текстовые данные хранить в БД, медиа файлы можно файлами в ФС. Таким образом появится задачи для выполнения, которую необходимо сделать.

    Для образования и совмещения в голове Kanban и разработку ПО, советую книгу "Пользовательские истории. Искусство гибкой разработки ПО".

    P.S. Сам пользуюсь ZenKit, но если бы задался целью разработать свою программу для Kanban-а, то выбрал бы Vue+SPA для клиента и Python или Golang + MongoDB для сервера. Выбор исключительно из того, что обладаю опытом в выбранном стеке. Для мобильного Nativescript+Vue.
    Ответ написан
    Комментировать
  • Как теория графов применяется в программировании?

    Человек Паук, для новичка программиста при обучении основ программирования в теории графов нет необходимости. Это я Вам говорю, как дипломированный математик прикладник с опытом работы в индустрии разработки ПО.

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

    Для новичков, рекомендую "потреблять легкую пищу" при обучении. Основы алгоритмов, методологии программирования (хотя бы императивный подход и ООП), практические навыки работы с инструментами программистов (tooling: IDE, линтеры, VCS, инструменты для сборки и/или упаковщики), технологии (http, ajax, сериализация, ...), ...

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

    На практике, много где применяется:
    1. Не понимая основ графов, можно запросто запутаться и испортить репозитории в git. Точно так же понадобится для анализа дерева зависимостей и разрешения проблем связанных с ним (смотри).
    2. При отладке программ и профилировании зачастую приходится смотреть AST.
    3. Нахождение путей, определение цикличностей и т.д. понадобятся, когда Ваши данные хорошо подходят для представления в качестве графов. К примеру социальные сети, GPS навигация, множество абстракции в компьютерных играх и т.д.
    Ответ написан
    Комментировать
  • Есть ли какой-нибудь блокнот для сохранения кода?

    Вставлю свои 5 копеек.
    Gist несомненно полезная и хорошая вещь, но моему мнению, больше подходит для складывания рабочих отрывков (snippets). Что Вы используете в повседневности, а не для заметок.
    Есть специальный род программ для программистов для ведения заметок.
    По совету уважаемого Umputun-а приобрел Quiver

    P.S. К сожалению Quiver только для платформы MacOS. Поискал и нашел, что и для Windows и Linux есть нечто подобное. https://www.makeuseof.com/tag/best-note-taking-too...
    Ответ написан
    1 комментарий
  • Чем можно воспользоваться для создания text-based user interface в Python?

    Я для себя нашел picotui
    Все необходимое для создания приложении, вроде Norton Commander или Turbo Pascal, имеется. Удобная и с примерами.

    А как сделать символы из символов :
    Например мне хочется создать таймер и сделать вывод чисел как в termdown.

    Я так понимаю Вам нужно python-cfonts Совсем недавно нашел. И можно использовать с чем угодно. Сам собираюсь использовать с picotui
    Ответ написан
    Комментировать
  • Как убрать зелёные отступы и пробелы в nano?

    Советую использовать micro в качестве редактора в консоли. Перешел на него после nano и доволен как слон. На сайте есть список возможностей. Установка предельно проста, один бинарный файл, который можно переписать в /bin после скачивания curl https://getmic.ro | bash

    Можно менять тему, если не понравился тот, что по умолчанию. Я так понимаю, это для Вас важно.
    Плюс человеческие горячие клавиши:
    Выделение шифтом
    Копирование и вставка по Ctrl+C и Ctrl+V
    Выход Ctrl+Q, сохранение Ctrl+S
    Использование табов, установка плагинов, подсветка синтаксиса, ...
    Ответ написан
    1 комментарий
  • PermissionError: [Errno 13] Permission denied. Что делать?

    Не сработало скорее всего из за того, что "\" это спец. символ. Используется для обозначения таких вещей как конец строки (\n), табуляция (\t). В Вашем случае, скорее всего пыталась понять что значит \д, \G и т.д. Для написания символа \ в строках используют \\.
    В зависимости от версии Python может быть проблема и в кодировке пути. Т.к. есть различие русских символов в UTF8 и cp1251 которая используется обычно в Windows.

    Я бы написал так:
    import os
    from shutil import copyfile, rmtree
    
    SOURCE = 'D:\\домашка\\G_ Arhangelskiy_-_Time_Draive\\G_ Arhangelskiy_-_Time_Draive'
    DESTINATION = 'D:\\домашка\\G_ Arhangelskiy_-_Time_Draive\\G_ Arhangelskiy_-_Time_Draive — копия'
    
    files = [f.path for f in os.scandir(SOURCE) if f.is_file()]
    for file in files:
        copyfile(file, DESTINATION)
    rmtree(SOURCE)


    Как опытный разработчик на Python могу дать совет:
    • Повторяющиеся значения выделить в отдельную переменную (лучше было бы в константу, но в Python нет констант). Это по поводу пути исходника, которую я выделил в SOURCE (есть такое соглашение, когда неизменяемые переменные пишут заглавными)
    • Для удаления пути рекурсивно, есть rmtree в модуле shutils, а так же os.scandir более удобен чем os.listdir
    • Установите линтер (flake8) и настройте свой редактор на использование его. По коду видно, что не используете линтер
    Ответ написан
    Комментировать
  • Низкая производительность компьютера, я полный профан, не знаю с чем это связано?

    У Вас две проблемы, хоть они и связаны. Первым делом нужно устранить проблемы. Вопросом производительности заняться после устранения ошибок, т.к. без наличия проблем это будет исключительно оптимизация.

    Проблемы бывают аппаратные и программные. Советы по диагностике аппаратных проблем:
    • Проверьте температуру процессора, мат. платы, видеокарты и т.д. в штатном режиме. Проследите не происходит ли перегрева.
    • Как советовал dollar, проверьте оперативную память. В компьютерах брендов утилита для проверки памяти зачастую встроена в BIOS. Или создайте загрузочный диск на USB носителе или CD/DVD с дистрибутивом LInux (Ununtu, ...). Практических во всех в меню загрузки есть Memtest
    • Посмотрите отчет S.M.A.R.T. о своем диске, возможно происходит деградация диска. В интернете можно бесплатно скачать утилиты для просмотра информации о SMART

    Программные проблемы:
    • Посмотрите журнал ошибок WIndows (Панель управления > Администрирование > Просмотр событий). Службы Windows записывают туда отчет о своей работе. Красными кружочками обозначены проблемы и указывается код ошибки, это поможет найти способ его устранения
    • В консоли (cmd) запустите проверку диска на ошибки. chkdsk c: /f /r Скорее всего потребуется перезагрузка для начала проверки
    • Помимо своего штатного антивируса просканируйте бесплатными сканерами других производителей (cureit, ...). Любой хороший антивирус определяет к примеру 90-97% вирусов, но у разных производителей базы вирусов чуть отличается. Сомнительные файлы проверьте через сайт www.virustotal.com
    • Не советую пользоваться утилитами для чистки и оптимизации проблем. Положительным в ним является то, что не требуется знания для их использования. Негативным фактором служит то, что помимо исправления проблем они вполне могут их и порождать. И еще устанавливает вместе с собой множество ненужных рекламных программ и даже вирусов

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

    В дополнении к словам Roman T, добавлю:
    Backdoor это не вирус, а скорее троянский конь. То есть, он не внедряется на Ваш сервер самостоятельно, а заносится вручную. Людям с переизбытком гормонов не сидится на месте, и они сканируют сеть через сканеры уязвимостей.

    Подскажите, пожалуйста, как мне это все проконтроллить,
    чтобы такого больше не повторялось?

    Так как нарушителям нужно сначала обнаружить уязвимость на Вашем сайте, они ведут поиск уязвимых сайтов посредством сканеров (специальных программ).
    1. Воспользоваться теми же сканерами уязвимостей, чтобы знать свои же ошибки и устранить их. Установите их и просканируйте свой же сайт.
    2. Сканеры могут просматривать наименование и версии Вашего ПО или пробовать отправляя множество пробных запросов на сервер. Это информация нужна, т.к. есть база данных уязвимостей конкретных движков с указанием версии. То есть, если удалить информацию о ПО (наименование движка, версию, ...) с и других мест и отлавливать пробные запросы с последующей блокировкой IP адресов нарушителей, то можно значительно усложнить жизнь им. Для блокировки посмотрите fail2ban и статьи по нему, но к сожалению только если у Вас VPS на хостинге.

    3. Так же если у Вас VPS, то установить и настроить инструменты для обнаружения rootkit. Я раньше использовал Rkhunter и chkrootkit. Даже, если на Ваш сервер будет внедрена "зараза", то при периодическом сканировании, система оповестит Вас об угрозе
    4. Ну и наконец, для того, чтобы совершенно избавиться от подобных случаев, нужно сайт перевести на статику. Есть генераторы статических сайтов для удобства( Hugo, Ghost, Pelican, ...). Если нужен гладкий переход, то можно комбинировать: modX админка -> Обновление контента -> Генерация статического сайта -> Веб сервер раздает только статический сайт. Возможно есть расширение для modX и статья по его настройке
    Ответ написан
    Комментировать
  • Как назвать простейший класс?

    Автору посоветовал бы использовать паттерн декоратор (decorator) и назвать его к примеру Timer для класса или timer (timeit, ...) для функции(если в Вашем языке функция это first class citizen) как предлагал Валерий Глуховцев.

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

    Почему я считаю, что измерение времени не достойно полноценного существования как отдельного класса?
    • Класс предполагает порождение экземпляров. Которые в свою очередь будут вызываться в методах, когда мы хотим что то измерить? Это уже сильная связанность, которую следует избегать. А так же, в какой то мере увеличит code complexity score
    • Вы написали:
      В коде есть объект, единственное свойство которого это длительность его существования

      Сами слова говорят, что цель такого объекта слишком мало для отдельной сущности. Это, наверное, "Одержимость элементарными типами" в концепции Код с запашком

    Ответ написан
    Комментировать
  • Почему скрипт, запущенный через systemd, зависает?

    Советую запускать сервисы на Python через Supervisord (по старинке) или Circus, и предусмотреть в коде частные случаи.

    Причина: В реальной жизни есть масса тонкостей, такие как наличие зависимых сервисов и порядок запуска, отсутствие доступа к сети, отсутствие прав к ФС, сети и т.д., ... Указанные продукты позволят настроить многие из указанных моментов, а так же как указал Pavel Denisov timeout для них и логирование.

    Если не хотите вводить еще одну зависимость в свой продукт, то в файле описания сервиса systemd, можно указать некоторые правила для запуска сервиса
    Ответ написан
    Комментировать
  • Sublime text 3 ошибка при роботе с питоном?

    megaPonshik, Stanislav Pugachev прав. Файл банально не сохранен. Нужно отметить, что ответ Stanislav Pugachev верен
    Ответ написан
    Комментировать
  • Как добавить field в serialization?

    Не советую так поступать. И совет Сергея это антипаттерн. Токены в запросах принято отправлять в заголовке http запроса, а не в теле.
    Стандарт: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14...

    Найдите соответствующий middleware для Django в соответствии с Вашим видом токена, который значительно упростит Вашу жизнь. Для экзотики можно написать и свой middleware
    Ответ написан
    Комментировать
  • Реализации на Python?

    По поводу Jython согласен.
    А Illia Nezhyhai не прав. Cython != CPython. CPython действительно реализация языка, но Cython - это самостоятельный язык, синтаксисом напоминающим микс Python и C.

    >>> Зачем они нужны?
    Cython используют часто для написания компилируемых расширении для Python.
    Преимущество в повышении производительности и понижении потреблении памяти.
    Но может служить и для написания самостоятельных программ.
    Подробнее: https://ru.wikipedia.org/wiki/Cython
    Ответ написан
    Комментировать
  • Как загрузить nuxt app на vps сервер?

    Сначала банальности:
    1. Проверить наличие nuxt в package.json.
    Возможно на локальной машине устанавливали так:
    npm install nuxt // без ключа --save
    Зависимость не прописалась в package.json и не устанавливается на сервере
    2. nuxt требует node >=6.11
    Если не поможет:
    3. Проверить не было ли ошибок при установке зависимостей npm install
    Есть issue по поводу этого: https://github.com/nuxt/nuxt.js/issues/3039
    Выход: переход на yarn
    Ответ написан
    Комментировать