1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

OpenSource панель на Python

Тема в разделе "Оффтопик", создана пользователем InterVi, 23 сен 2016.

  1. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    Ковыряю уже 3 месяца, результат - ядро вроде работает (протестировано не вдоль и поперёк). Нормального клиента пока нет, только DebugMode, в котором ручками нужно писать запросы в формате JSON.

    Суть:
    Нормальные ПУ платные, из бесплатного - либо калл, либо кастрированные демо версии. Их главная проблема заключается не только в проприетарщине, но и в цельности, из-за которой не добавишь свои плюхи без головной боли. Я хочу эту ситуацию изменить.

    MCPowerPanel - это не цельная панель. Она состоит из ядра, в котором реализована поддержка плагинов, что позволяет расширять функционал как угодно. В ядре есть сервер на сокетах, к которому подключаются клиенты, которые могут быть любые - прога, веб, приложение на андроид. И всё это в моих планах, но пока не осилен даже сносный консольный клиент. Таким образом, у MCPP изначально большой потенциал.

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

    Документация есть, можно поизучать. А вот использовать будет проблемно. Репо:
    https://bitbucket.org/InterVi/mcpowerpanel
    Как общаться с панелью - в client-server.html, второй файл это дока по модулю.
    https://bitbucket.org/InterVi/mcppplugins
    Тут будут все плагины, которые я буду писать для MCPP. Пока что есть только один плагин, который рестартит или стопит сервер в нужное время.

    Хотелось бы выслушать дельные замечания от опытных питонистов, если кому не лень.

    Коммитов наверно не будет до допила клиента - код выложил чтобы показать одному человеку, поэтому оглашаю, раз уж такое дело. И нормальной справки для простых юзеров, это всё потом.
     
  2. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    всем настолько насрать?
     
  3. MrBrikster

    MrBrikster Активный участник Пользователь

    Баллы:
    78
    Имя в Minecraft:
    MrBrikster
    Идея достойная. На python'е аналогов, кажется, нет. Насчёт питонистов: мне кажется, на этом форуме профессионалов практически нет.
     
  4. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    3к строк в одном файле, не ок. Дели по файлам, а то без слёз не взглянешь. Команды надо сплитить на субкоманды, обработчики которых вынимаются по имени команды. По хорошему надо подписать типы аргументов и возвращаемого значения каждой функции. Пути надо строить через os.path.join, а не приплюсовыванием сепаратора.
     
  5. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    По сколько принято? Я думал в питоне как раз любят тонны кода в одном модуле.
    Коротенький пример можно? И почему так, как сделано сейчас - плохо? Мне бы хотелось по максимуму избавится от игрушек для программистов.
    А вот это уже лишнее, навеянное всякой Java. Там в некоторых местах возвращаются разные типы, это значит, что мне придётся городить костыли на пустом месте ради непонятно чего.
    Это да, не дочитал доку. Стыдно, исправлю.

    Благодарю за советы :good:
     
  6. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Тонны кода в одном модуле клепают для скриптов выполняющих одну задачу, а не для панелей управления.
    Тонны кода в одном файле обычно идут от любителей баша, для которых питон - ещё один скриптовый язык.


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

    Если не подпишешь типы - через какое-то время будешь проводить 90% времени в отладчике пытаясь вспомнить что и в каком случае возвращается. Плюс сторонним разработчиками придётся делать то же самое.
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Что мешает писать на cpp и выложить сурсы?
     
  8. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    Хорошо, это исправлю. Но не знаю к полноценной альфе или к бете, мне бы клиент допинать сначала. Насчёт последнего - попробую решить более подробными комментами, потому что костыли, всё преимущество динамической типизации теряется.
    cpp - C++? Я не мазохист, чтобы проделать ту же работу в 10 раз дольше и сложнее ради дрочева на ЯП. Питон для данной задачи самое то.
    @Shevchik а есть верный путь как выкинуть костыли? Класс Container, метод main - там даже отмечено. Если сделать потоки, они просто виснут намертво.
     
  9. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Значит что-то делаешь неправильно. Но что смотреть впадлу, ибо я пишу под jython, и использую классы из стандартной java библиотеки для многопоточности, и не имею проблем с GIL.
     
  10. PYRO

    PYRO Активный участник Пользователь

    Баллы:
    78
    Как уже писали выше, стоит заняться декомпозицей.
    + покрыть бы это все тестами, коль в паблик положил
    + обработка ошибок кривых импортов,

    Есть интересная утилита кстати, качни через пип да затести на своих файлах, сразу получишь развернутое "фи" по стилю кода (Спойлер: нашлось не менее 1700 случаев плохого стиля кода)
    Код:
    pip3 install prospector
    prospector <your-file> -s veryhigh
    После декомпозиции уже более-менее можно будет прокомментировать код
    По-хорошему, тебе бы какой-то приватный сервис code-review заюзать для таких целей
     
    Последнее редактирование: 24 сен 2016
  11. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    Когда пишешь в одиночку здоровую херню, на это просто времени не остаётся.
    А где кривые импорты?
    Как и ожидалось, это кривое говно не умеет в импорт, который теперь нужен из-за декомпозиции. И pdoc тоже не умеет, приплыли.

    Можешь какой генератор посоветовать? Очень плохо на питоне с этим. pydoc говно страшное, pdoc отвалился из-за импортов, для sphinx я заколебусь rst файлы ручками писать. Остальные пробовал, ничего путного.
    Декомпозицию частично выполнил, можете посмотреть. Разработка на некоторое время приостановится из-за посыповшегося винта, но слава яйцам исходники не пострадали.
     
  12. PYRO

    PYRO Активный участник Пользователь

    Баллы:
    78
    [​IMG] , главное - лень перебороть:)
    Крипта отвалится, если не поставлена в питон
    Посмотрел нынешний код импортов: все как-то плохо, магия с переходом в директории - адище.
    Импортировать можно так:
    [​IMG]
    Не приходилось использовать генераторы документации, обычно все ручками

    Совет: используй PyCharm для написания проектов такого уровня. Да даже маленькие скрипты, и то приятнее видеть нормально оформленными:)
     
  13. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    Ну это там звёзды, а если надо 3 класса? Посмотри в плагине, удобно же одно слово вместо всего пути. Это всё проблемы IDE, которая не понимает.
    У меня есть мечта написать свой генератор, питоновый синтакис ведь не так трудно разобрать. Такой язык хороший и такие неприятные грабли...
    Ок, заценю. Но для питона слишком умные IDE подбешивают.
    А где там не нормально? Отступил от PEP 8 в некоторых моментах для удобства, вот например не вижу смысла после каждого двоеточия на новую строку переходить, когда там мелочи.

    Можешь чего посоветовать с костылями в Container?
     
  14. PYRO

    PYRO Активный участник Пользователь

    Баллы:
    78
    У питонистов горит с несоблюдения PEP8, исключениями могут являться специфичные сишные библиотеки, по типу PyQt -> (у меня горит:))

    DocStrings я пишу в соответствии с форматом rest, pycharm заранее собирает скелет для них, в итоге sphinx может их даже нормально скушать
    [​IMG]

    Еще пару слов про импорты, я так понимаю, модули друг без друга не работают. Тогда можно в __init__.py импортнуть все подмодули, а затем импортировать папку как модуль. Вообще - импортирование весьма интересная и глубокая тема, по которой стоит читать доки, описывающие как делать это концептуально правильно

    Я сразу начал писать в PyCharm, так что сразу пришлось писать нормальный по стилистике код)
    Можно уйти конечно в vim, но есть риск не вернуться


    Про костыли:
    - лучше ловить что-то конкретнее, чем BaseExeption
    - метод _start лучше разбить на методы, слишком много недокументированных функций внутри, ну или вообще вынести его в отдельный класс, 870 строк кода в файле - это ненормально)
    - тяжело читать плохо именованные переменные, for ss in s - вырвиглазый пример
    - чтобы судить о логике, нужно больше декомпозиции, пока сложно что-либо сказать
     
  15. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    В main_ это, там отмечено. Посмотри как например субпроцесс убивается. Если создать поток, который ожидает ивент - он просто зависнет. Можно тут что-то сделать, или так оставить из-за GIL?
     
  16. PYRO

    PYRO Активный участник Пользователь

    Баллы:
    78
    гугли select, как мне известно, им можно решить проблему лока потоков, (я не использовал, я не знаю как и что там)
     
  17. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    Так там для файловых дескрипторов, например для сокетов. С сокетами всё норм, проблема именно в сраных иваентах. Ладно, я уже придумал титановый костыль, который будет чуть лучше деревянного. На основе функции time_limit по примеру GIL - он ведь по 5мс лочит потоки.
    Обновлено. Титановый костыль правда не вышел, но кое-что сделано. Дальше вряд ли буду декомпозицию проводить, ибо бред в 500 строках не разобраться, да и глупо, например тот же _start из Container всё равно отдельным процессом стартует, будь он классом а не методом, всё равно доступа к его элементам небыло бы.

    Есть у кого идеи по поводу клиента? Нужно консоль сделать и чтоб текст не уплывал. Обычными средствами он уплывает, а Textpad из curses не поддерживает русский.
     
  18. Heiwen34

    Heiwen34 Старожил Пользователь Заблокирован

    Баллы:
    123
    Skype:
    HentaiZ
    Имя в Minecraft:
    HentaiZ
    @InterVi напиши сурвач на питоне :/
     
  19. BrainRTP

    BrainRTP Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    BrainRTP
    Шо цэ за шайтанама? Что за панель? Типа RCON управление или что...??
     
  20. Автор темы
    InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    Выложил текущий прогресс. Дело несколько застопорилось, из-за того что я пишу нормальный генератор документации, который не ограничивает использование возможностей языка, как то убогое говно, которое кроме как брать готовое из __doc__ само ничего не может.

    Для меня самое гадкое дело - писать клиент. Может у кого-то есть желание?
    шапку не осилил, да?
     

Поделиться этой страницей