• Что делать дальше?

    На Тостере много раз задавался этот вопрос с разными формулировками. Сначала стоит прочитать
    лучшие ответы на эти вопросы. Никому, из умелых и ценящих свое время, не хочется повторяться.
    Я неоднократно писал про начало на этом сайте.

    и единственное, что понял, что нужно обязательное знание ООП

    В Python нет "продвинутой" ООП, и изучение ООП в случае Python не должно занять много
    времени (по сравнению с Java и тем более C++). Более или менее больших организациях,
    элементы ООП используются, чтобы упорядочить большой код (классы) и еще в силу привычки.
    Мир потихоньку уходит от ООП, в маленьких проектах просто в процедурное
    программирование и в функциональное программирование. Поставьте себе в очередь,
    после изучения ООП, функциональное программирование.
    Ответ написан
    Комментировать
  • Можно ли как то запускать python скрипт каждые 30 минут не используя cron?

    Нужно перемешивать посты модели django каждые 30 минут. Возможно ли это сделать без использования крона?

    Для лучшей практики, не нужно ничего перемешавать. Связано с тем, что, не нужно путать представление данных и сами данные. Данные не должны меняться, лишь представляться посетителю в разных последовательностях. В MVC, мы не меняем модель, для изменения представления у нас есть View.
    Я не пишу на Django, но воспользовался поиском и вот одно из решении
    Ответ написан
    Комментировать
  • Где научиться алгоритмам?

    Почитай книгу «Грокаем алгоритмы. Иллюстрированное пособие для
    программистов и любопытствующих». В нем примеры приводятся на
    Python и объясняются приведенные Вами термины.

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

    Касательно Python, если не приходилось изучать/писать программы с
    использованием стандартной библиотеки collections, то советую
    посмотреть внимательно. Есть реализация множества алгоритмов,
    которые необходимы в жизни при работе. Избавит Вас от повторного
    написания этих алгоритмов.
    Ответ написан
    Комментировать
  • Как поставить python 3.4 на флешку?

    Предложу Вам использовать pyenv. Сам как раз для подобных случаев использую.
    Позволяет установить различные версии Python и при необходимости переключаться
    между ними. Использую для тестирования в своих пакетов в различных версиях Python

    Если у Вас windows, то придется использовать портированный на него pyenv-win
    Сам этот порт не использовал, т.к. использую MacOS.

    Использование:
    pyenv install --list  <---- Список доступных для установки версии
    pyenv install 3.4.6  <--- Установка Python 3.4.6
    pyenv versions  <--- Список доступных для переключения версии
    pyenv local 3.4.6  <---- Переключение на Python 3.4.6
    python -V  <---  Проверка текущей версии
    pyenv local system <--- Переключение обратно на Python установленый в ОС
    python -V  <---  Проверка текущей версии
    Ответ написан
    Комментировать
  • ПО для fullstack dev под линукс все есть?

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

    Для нарезки psd и верстки, вместо Photoshop, можно использовать Gimp, inkscape, ...
    практический на всех платформах.
    Сам Photoshop можно запустить через CrossOffice, Wine, ... на Linux.

    Как вообще окружение линукс для fullstack?

    Тысячи специалистов успешно выбрали в качестве основной ОС Linux, но учтите, что
    придется переучиваться
    Ответ написан
    Комментировать
  • Обязательно ли использовать try/else?

    Ваши варианты не ошибочны, но есть несколько моментов для осмысления.
    Судя по наличию return, у Вас функция возвращает текст. Какое поведение Вы предусмотрели
    в случае неудачного завершения операции requests.get? И на каком уровне Вы намерены
    обрабатывать ошибки. Никто не может сказать Вам, как правильно, пока не узнает контекст
    Вашей задачи. Может Вы выберите стратегию: "падать как можно раньше" и вызвав панику
    завершите приложение, запишите в лог и перейдете к следующему url или что то еще.

    Предложу Вам третьи вариант:
    try:
        html = requests.get(url, headers=self.headers)
    except Exception as e:
        print('Root page parse is failed', e)
        # Ваши инструкции для ошибочной ситуации
    return html.text

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

    P.S. Если будет время, то виды исключении лучше обрабатывать явно, а не
    ловить их все в один блок. Так можно прописать несколько стратегии для
    разных случаев сбоя.
    Ответ написан
    5 комментариев
  • Какую библиотеку Python использовать для управления приложениями?

    frendri, используй pywinauto или более высокоуровневый pyautogui

    Вот статья с Хабра на русском.
    Будут сложности, пиши в комментарии, отвечу. Прежде чем задавать вопросы, прочтие статьи
    в интернете и конечно официальный сайт библиотеки, попробуйте написать что нибудь.
    Если будете использовать pywinauto, то неизбежно придется по минимуму изучить
    устройство Windows программ. pyautogui должен быть менее требователен по квалификации,
    но так скажем "более толстая" библиотека.

    P.S. Со своего опыта могу сказать: нужно было автоматизировать нажатие в программе написаной
    на FoxPro для создания отчетов. Использовал pywinauto. Большинство действии без проблем сделал,
    но некоторые действия не давались из за того, что не мог узнать идентификаторы некоторых кнопок.
    Выкрутился отправляя нужное количество нажатии на TAB для переключения на нужную кнопку и
    SPACE для нажатие. Есть и более хипстерский способ, использовать распознавание по контрольной
    картинке элемента окна (pyautogui), но его не приходилось использовать
    Ответ написан
    3 комментария
  • Почему получение данных в python socket останавливается?

    Drovosek01, то как Вы написали веб сервер не годится для реальных задач. Вам легче и лучше было бы переписать сервер используя библиотеку или фреймворк (bottle, falcon, flask, ...). Но если целью стоит изучение работы сокетов, то:
    1. Ваш сервер однопоточен и блокируемый. Причина может крыться в этом, т.к. браузер вполне может соединяться с веб сервером параллельно в несколько потоков. Посмотрите примеры неблокируемого режима сокет сервера и/или используйте нити (threads). Если будет сложно, как я и писал переходите на высокоуровневое программирование.
    2. Причина остановки может быть пассивное закрытие сокета из за TTL к примеру. Проверяйте работы сокетов не на высоком уровне(Chrome), а на низком используя WireShark. Т.к. у Вас не отлаженный низкоуровневый код.
    3. И по поводу возможного TTL, способ которым Вы создаете страницу, уж простите, ужасный. Хотя бы перепишите возврат шаблонов в таком виде:
      def index():
          with open(os.path.join(dir,'templates/index.html'), encoding='utf-8') as template:
              buffer = template.read()
          while True:
             yield buffer
      Чтение с диска на кажде соединение, даже если у Вас SSD, это как то черезчур там более в таком простом случае
    Ответ написан
    1 комментарий
  • Какая NOSQL СУБД максимально быстрая с вертикальным масштабированием для многотерабайтной базы?

    mspain, вот некоторые мысли:
    1. не рассматривали возможность разделения возможностей хранения и поиска по разным БД? Очевидно, что накладные расходы по поддержанию работы двух БД приведут к понижению производительности. Но это в случае синхронной работы. Если характер нагрузки на БД хранения не равномерна, то выставив приоритетность (не только CPU, но и RAM, ...) на хранение, добьемся высокой производительности сохранения записей. Менее приоритетная индексация будет совершаться при снижении нагрузки на основное хранилище. Из плюсов: высокая скорость загрузки, использование специализированного БД для поиска с его плюсами. Из минусов: отложенная индексация из за сравнительно низкой производительности индексации, система распределения нагрузки в ОС или отдельная всегда имеет некоторую интерность в жизни -> будет не так идеально как я описал, но приближенно
    2. Индексация по расписанию. Если в работе допустимо отставание индексов поиска, то во время пониженной нагрузки (ночью, ранее утро, выходные, ...) производить индексацию в единственном БД или в БД для поиска.
    3. Eventual consistency. Если людские ресурсы и компетенция позволяет, то можно собрать конвеер по сглаживанию нагрузки на основе системы очередей. Использование очереди в памяти, и запись в БД в воркерах. По настоящему отличной производительности можно добиться, если добавить логику по выставлению приоритетов запросам, использования паковки схожих запросов, а так же предварительной обработки запросов бизнес логикой. Не подойдет, если характер загрузки данных это пакетный импорт (batch import) огромных данных, а при неравномерной нагрузке будет отлично работать. Минусы, конечно есть: это очередь в памяти и его надежность. Т.е. durability.

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

    --------- UPDATE ---------------
    Почитал комментарии и Ваши ответы.
    4 связанные строки. Поиск по любой из четырёх должен возвращать остальные три. В Монге это выглядит как

    "k" : [ "string1", "string2", "string3" ], "v" : "string4",

    Может и key-value СУБД так умеют?

    1. Это выглядит странно. Вы на каждую строку ведете 16 вариантов записи в Mongo?
    Если да, то не нужно этого делать. В Mongo есть мульти индексы. Т.е. можно так:
    > db.col1.save({'data': ['string1','string2','string3','string4']})
    > db.col1.ensureIndex({'colors':1})
    > db.col1.find({'data': {$in: 'string3'}})
    { "_id" : ObjectId("63cc78f97cf77dc2a2e54e18"), "data" : ["string1", "string2", "string3", "string4"] }
    Это по поводу формата данных.
    2. Будет хорошее улучшение в способе загрузки:
    https://www.khalidalnajjar.com/insert-200-million-...
    Почитал комментарии и Ваши ответы.
    4 связанные строки. Поиск по любой из четырёх должен возвращать остальные три. В Монге это выглядит как

    "k" : [ "string1", "string2", "string3" ], "v" : "string4",

    Может и key-value СУБД так умеют?

    1. Это выглядит странно. Вы на каждую строку ведете 16 вариантов записи в Mongo?
    Если да, то не нужно этого делать. В Mongo есть мульти индексы. Т.е. можно так:
    > db.col1.save({'data': ['string1','string2','string3','string4']})
    > db.col1.ensureIndex({'colors':1})
    > db.col1.find({'data': {$in: 'string3'}})
    { "_id" : ObjectId("63cc78f97cf77dc2a2e54e18"), "data" : ["string1", "string2", "string3", "string4"] }
    Это по поводу формата данных
    2. Будет хорошее улучшение в способе загрузки:
    https://www.khalidalnajjar.com/insert-200-million-...
    Предлагаю Вам, считывать Ваш файл и в Unix pipe форматировать в CSV или TSV далее в mongoimport.
    Ответ написан
  • Не записывает в файл?

    Артем Марш, в коде полно ошибок:
    1. После первой строки не нужен отступ(4 пробела перед for ...)
    2. Не понятно, какая необходимость извлекать сведения из словаря в переменные? (name = item['first_name'], ...)
    3. Дуплицирование кода
      print('|', name, lname, '|', 'id' + str(iduser), '|', 'Пол:', sex, '|', '==>', online)
      . Во всех случаях одно и то же, и поэтому печать на экран можно вывести из блока if sex == 1
    4. Запись в файл лучше оформить через контекст, т.е. через with
    5. И самое главное!
      Сам файл создался, но записей в нем нету.
      . Файл Вы открываете на запись, а не на добавление. Получается при каждом проходе цикла файл перезаписывается без сохранения предыдущих результатов. Режим для добавления строк в файл:f = open('result.txt', mode='a')
    6. Проверка связанная с полом, несколько переусложнена. Лучше подобные проверки выводить в функции для чистоты кода. Не буду писать подробнее, т.к. потребует еще большего времени для объяснения


    По поводу вопроса в комментарии к ответу Сергей Горностаев:
    1. Какой смысл в преобразовании str в bytes при записи?(.encode('utf-8')) Чтобы при чтении преобразовать обратно в строку Unicode?! По мне, так логичнее так и хранить в Unicode. При открытии файла на запись указать кодировку:
      with open('result.txt', encoding='utf-8') as f:
          ...

    2. Ошибка TypeError: sequence item 3: expected str instance, int found выводится, т.к. аргументами метода join должны быть коллекция из строк(str). А переменная iduser типа int(целое число). Нужно преобразовать перед передачей в join: '\t'.join([ name, lname, online, str(iduser)])

    Вот код для записи:
    with open('result.txt', encoding='utf-8', mode='a') as f:
        f.write('\t'.join([ name, lname, online, str(iduser)]))

    или
    f = open('result.txt', encoding='utf-8', mode='w')
    for item in group['items']:
        ...
            f.write('\t'.join([ name, lname, online, str(iduser)]))
        ...
    f.close()


    P.S. И маленький совет не связанный с ошибками. Формат в котором Вы записываете в файл напоминает CSV. Поменяйте:
    1. расширение файла на csv
    2. разделитель вместо таба(/t) используйте точку с запятой (;)
    3. и первыми строчками можете добавить заголовки для полей (расшифровка полей)

    И можете смотреть в файл в табличных редакторах(Excel, ...), подвергать в них анализу, сортировке, ...
    Ответ написан
    3 комментария
  • Как стать разработчиком Python?

    Здравствуйте david240,
    Хороший у Вас вопрос. Разработчик - это кто программирует на производстве. Если хотите короткий ответ: устройтесь на работу разработчиком. В индустрии начальный уровень сотрудников называют Junior (джуниер, некоторые сокращают до джунов). И конечно, это самый действенный совет, т.к. есть множество вещей которые не освящают книги, курсы, ... Компании занятые производством программного обеспечения сами заинтересованы в квалифицированных специалистах, и помогут подтянуть Ваши навыки при желании и усердии с Вашей стороны.
    Ситуации бывают разные и желания. Если Вы хотите стать независимым разработчиком или сначала хотите повысить свои шансы на трудоустройство в крупную компанию, то:
    1. Заведите в учетную запись в одном из сервисов предоставляющих хранение репозитории (github, gitlab, bitbucket, ...). Освойте git, и выложите свои лучшие учебные, рабочие и иные проекты на этих сервисах. Цель: Ваши работы в этих сервисах скажут о Вас лучше любых резюме. А отсутствие учетной записи в подобных сервисах подействует на Вашу потенциальную репутацию хуже, чем не очень удачные работы или начальный уровень Ваших работ. В нашей индустрии уже давно это стало нормой. Как говорит Линус Торвальдс: Talk is cheap, show me the code!
    2. Разумеется Вы будете волноваться о невысоком уровне Ваших начальных работ в Вашем репозитории. Постепенно улучшайте свои работы, выкладывая обновления. Хороший специалист все равно выявит Ваш уровень с вероятностью 100% при собеседовании. Следите, чтобы Ваши работы в репозитории отражал Ваш реальный уровень. Читайте книги, смотрите доклады с конференции (PyCon, Moscow PyCon, ...), проходите курсы(Udacity, Udemy, Code Academy, ...), ... С обретением новый знании и навыков, обновляйте свой код в репозитории
    3. Почитайте книгу "Чистый код" Роберта Мартина. Как его обычно называют, дядя Боб, практик к которому прислушиваются даже специалисты высокого уровня. Его книги и доклады дают качественный материал для становления специалистом в области разработки программного обеспечения.
    4. Уделяйте внимание не только техническому аспекту нашей специальности. Повышайте свою продуктивность через изучение гибких методологии (Agile), организацию своих дел (GTD, ...), повышайте своих коммуникативные способности, ... Разработчики в большинстве своем интроверты, но не то чтобы работодателям это нравилось. Нужно работать над собой в широком смысле этого слова.

    И напоследок скажу, не обязательно все что я написал освоить за короткий срок. Лучше ориентируйтесь и готовитесь к долгосрочной перспективе. И удачи в Ваших начинаниях!
    Ответ написан
    Комментировать
  • Redis, ZMQ, etc. Можно ли одновременно реализовать что-либо на подобие pub/sub и queue?

    Посмотрите внимательно на dramatiq. В качестве брокера в этом фреймворке можно использовать RabbitMQ, Redis или для легковесности брокер с хранением в памяти
    Ответ написан
    Комментировать
  • Какие книги по хакингу python 3 посоветуете?

    Не стоит отбрасывать книгу из за того, что она написана с примерами на Python 2.7. Самое ценное, что можно почерпнуть из подобных книг - это подход к взлому, а не синтаксис языка программирования.
    Начинайте изучение не со стороны программирования, а со стороны уже известных уязвимостей. Есть скучный на вид сайт OWASP, который является настоящим кладом для специалистов по компьютерной безопасности. Есть в интернете и переводы.

    Я не говорю, что программирование не нужно учить, учите по началу раздельно техники взлома и защиты(1) и программирование(2). Через какое то время, если хватит терпения, "пазл в голове" сложится. Книг на данную тематику не очень много, ведь не каждый специалист пишет книги. Ищите книги и материалы более широко, не обращая внимания на язык программирования. Уязвимости что подходят для низкоуровневых языков (assembler, C, C++, ...) практический все подойдут для всех остальных представителей и т.д. А так же знание об уязвимостях не помогут без хорошего базового знания программирования
    Ответ написан
    Комментировать
  • Можно ли использовать глобальные переменные в классе?

    Если a и b - это не изменяемые переменные (в Python нет констант), то допустимо. Без реального примера кода не возможно понять применение.

    В приведенном Вами примере никакого смысла нет. a и b в первом примере - это локалные переменные, т.е. можно сказать с коротким временем жизни. Без использования self не произойдет привязки к экземпляру класса (не станут атрибутами). Помимо атрибутов экземпляров, есть еще и атрибуты класса.
    Ответ написан
    Комментировать
  • Как нажать несколько кнопок одновременно на selenium python?

    Очевидно Вы ошиблись, одновременно нажать не получится, только последовательно.
    Вот пример, как нажать последовательно:
    from selenium import webdriver
    
    driver = webdriver.Edge()
    driver.get('https://www.avito.ru/moskva/nedvizhimost')
    all_buttons = driver.find_elements_by_xpath('//button[@class="recommendations-show-more js-recommendations-show-more"]')
    for button in all_buttons:
        button.click()

    По моему, имя класса для выборки можно сократить, главное чтобы выбирал уникальные кнопки. Библиотеку BeautifulSoup не нужно использовать, т.к. Selenium имеет средства для парсинга. Можно ознакомится в документации.

    FIXED: Была ошибка в строке поиска. Забыл закрыть ковычки и скобку ( "] )
    Ответ написан
    4 комментария
  • Какие приложения создать для новичка Vue.js?

    Изучаю vue посмотрел несколько курсов, почитал документацию, создал обычный todo list на vue, что писать дальше идей нету =(

    Посоветую добавить функционал в свой вариант todo list, написать тесты, улучшить визуальную составляющую, превратить чисто клиентское приложение в клиент-серверное(можно без бекенда, к примеру через Firebase), ... По функционалу, к примеру, можно добавить возможность создания многоуровнего списка задач, выставления тегов, автоархивирование задач по времени устаревания, заполнение задач по шаблонам (по подобию snippet), разделить списки задач на личные и рабочие, ... Если создавать клиент серверное решение, то появится возможность создавать списки задач для совместной деятельности, синхронизация между устройствами, ...
    К чему все это. Надо учиться доводить проекты до логического конца, приобретать навыки в рефакторинге, учиться улучшать проект и поддерживать на плаву. Такой подход поможет приобрести практические навыки, которые востребованы на рынке труда, а не научиться фрагментарным знаниям и навыкам. "Погружение в глубину", так скажем, приблизит Вас к миру разработок ПО практикуемые в крупных компаниях и экспертов в программировании. Выходите за рамки стандартных шаблонов обучения, доработайте идею проекта и совершенствуте чистоту Вашего кода.
    И напоследок, если в Вы это еще не сделали:
    • Освойте распределенную систему хранения версии - git. Зарегистрируйтесь на одном из популярных сервисов (Github, Bitbucket, GitLab, ...), если хотите, то можно выложить проект даже как open source
    • Начните писать тесты для свох программ. Недавно вышел перевод популярной книги "Тестирование компонентов Vue.js с помощью Jest". Есть так же хорошая стандартная документация на русском языке по тестированию в Vue
    • Пригласите в свой проект друзей и/или знакомых. Не обязательно программистов: переводчиков, дизайнеров, бухгалтеров, юристов и т.д. Будет не скучно и проект обогатится новыми идеями.
    • Идея "Eating your own dog food". Начните использовать свою программу для ведения личных дел или к примеру на работе. Опять же, "подсадите" своих родственников и друзей на Вашу программу. Так Вы не устаните улучшать программу и разработка ускорится в разы.
    Ответ написан
    1 комментарий
  • Как докер запускает другие операционные системы?

    Контейнеры используют тоже ядро, что и хост

    Тут chupasaurus прав

    Но в остальном ...
    Если вы не имели в виду под "другими ОС" разные дистрибутивы Linux, то ответ - гипервизор + виртуалка с нужной ОС.

    В docker гипервизора и виртуальной машины и в помине нет. Совершенно другая технология. Можете почитать Wikipedia ту же. Поэтому приложение гостевой системы на самом деле исполняется как процесс в основной системе. Совершенно не возможно использовать ОС кроме GNU/Linux и/или разных архитектур(гость-хост) в docker принципе. Под Windows работа docker реализована была в старых версиях на основе виртуальной машины с Linux и Linux подсистемы в новых версиях (docker и Windows).

    Как работает docker не для кого не секрет. Подробности можно найти в интернете
    Ответ написан
    5 комментариев
  • Pip3 ссылается на Python3 ранней версии, почему?

    Думаю очевидно, Python 3.4 не был обновлен в системе, а был установлен рядом. Такое случается, когда для данной ОС не было выпущено обновление Python. python3 был переопределен, а pip3 ссылается на системный Python.
    Есть несколько решении:
    • Начиная с Python 3.4 pip в виде модуля встроен в сам Python. И может вызываться к примеру так: python3 -m pip install request. Можете использовать, будет работать как надо
    • Иногда иметь разные версии Python полезно. К примеру тестировать свою программу с различными версиями CPython. Рекомендую pyenv для *nix систем. Переключает версию Python используемую в системе, позволяет для отдельного проекта закрепить версию Python, а так же удобно устанавливать различные версии
    • Добавить alias в системный профиль оболочки: alias pip3='/Путь/к pip3/от Python 3.4'. Это переопределит pip3 в системе и будет вызываться правильная версия.
    Ответ написан
    Комментировать
  • Что исправит в коде, что бы в ответе было не только число, но и текст?

    В Вашем коде немало ошибок:
    1. print('Ваш идеальный вес', 'x') выведет символ `x`, а не переменную x
    2. Строки print('Ваш идеальный вес') + 'x' и print('Ваш вес должен составлять') + x ошибочны. print является встроенный функцией для печати на экран, и аргументы должны передаваться внутри скобок. И конечно, переменная x должна писаться без кавычек
    3. Есть несколько не существенных ошибок по стилистике языка Python, которые не влияют на работу

    Вот, как бы я написал то же:
    print('Ваш идеальный вес по формуле Брока')
    while True:
        height = input('Ваш рост в сантиметрах: ')
        if height.isdecimal():
            height = int(height)
            break
        elif not height:
            return
        else:
            print('Введите рост в виде числа или нажмите Enter для выхода')
    if height <= 165:
        weight = height - 100
        print('Ваш идеальный вес {} кг'.format(weight))
    elif height <= 175:
        weight = height - 105
        print('Ваш идеальный вес {} кг'.format(weight))
    elif height >= 176:
        weight = height - 110
        print('Ваш вес должен составлять {} кг'.format(weight))
    Ответ написан
    Комментировать
  • Какие минусы и особенности есть у python kivy для Android/ios разработки?

    С уважаемым Fian не соглашусь.
    • В целом, разницы в производительности с React Native вовсе нет. Это не мое мнение, и не является секретом. В Хабре, Readit и т.д. неоднократно обсуждалось.
    • С мнением на счет лучшего функционала, так же необосновательны. Технологии на котором основывается работа Kivy и React Native одна и та же. Различие в способе запуска, это CPython и Javascript движок (V8 или что там). Количество готовых библиотек для Python, наверное, даже чуть больше чем для JS. И там и там можно напрямую обратиться к API операционной системы, в случае чего.
    • Для корпоративных приложении и production решении важна поддерживаемость решения. Между Kivy и JS фреймворками (React Native, NativeScript, ...), к сожалению, разница не так велика. И отстает от Native решении. У Kivy недостаток в наличих хороших примеров и документации, а у React Native плохая стабильность продукта (сам был свидетелем и не раз обсуждалось в интернете)
    • Хоть Kivy весьма не плоха, и хоть имею более 10 лет опыта с Python, но для себя решил использовать NativeScript+Vue. Решение хоть и молодое, но из за Vue фантастический удобная и за счет NativeScript постабильнее React Native
    • Слежу за развитием Kivy, и готов переидти на него после появления лучшего бинарного сборщика(не нравится buildozer) и развития UI фреймворков для него (KivyMD, ...)
    В чем плюсы и минусы kivy? Что должен знать перед началом изучения/разработки? Какие есть подводные камни, особенности?

    Все зависит от специфики Вашего приложения. Тема слишком обширная. Для создания строгого дизайна в виде форм используйте вместе с KivyMD. Для игр и приложении для обучения, где важна графика, Kivy и так очень хороша.
    Могут возникнуть трудности при сборке бинарных пакетов для мобильных ОС. Для Android есть buildozer, с которым люди испытывают проблемы. В Хабре есть статья про его настройку. А так же серия статьей про сам Kivy.
    Для процесса обучения одними советами не обойтись: читайте книги по данной тематике, зарегистрируйтесь и подпишитесь на нужные темы в dev.to/, не ограничивайтесь только программированием - изучайте сам процесс разработки (Agile, рефакторинг, тестирование, ...)
    Ответ написан
    Комментировать