subject: Эталонная реализация idec
      17.07.2019 12:26
      
        
            Andrew Lobanov (tavern,1)
        
      
       
       
      Давненько уже я начал работу над сабжем, но некоторые события жизни и длинный отпуск существенно замедлили события. Сегодня я, вроде как, закончил вчерне всё. Доступно это добро тут https://gitlab.com/spline1986/idec
Очень бы хотелось услышать замечания и рекомендации от многоуважаемого All =)
      --------------------------------------------------------------------------------
    
      subject: Re: Эталонная реализация idec
      17.07.2019 14:10
      
        
            Difrex (dynamic,1) => hbP5IRIAcSOAvZOA8yQ9
        
      
       
       
      AL> Очень бы хотелось услышать замечания и рекомендации от многоуважаемого All =)
Сделал ПР.
Замечания:
* Не импортируй звездочки из модулей
* Форматирование строк через % устарело
* PEP8
+++ At work. idec.el/0.1
      --------------------------------------------------------------------------------
    
      subject: Re: Эталонная реализация idec
      17.07.2019 15:29
      
        
            Andrew Lobanov (tavern,1) => ZoH4AonznjtwMZcWOiCu
        
      
       
       
      AL>> Очень бы хотелось услышать замечания и рекомендации от многоуважаемого All =)
Difrex> Сделал ПР.
Difrex> Замечания:
Difrex> * Не импортируй звездочки из модулей
Difrex> * Форматирование строк через % устарело
Difrex> * PEP8
Спасибо. Разберусь что к чему и смержусь/пофикшу.
Пора уже действительно писать как для людей, а не как для себя =)
      --------------------------------------------------------------------------------
    
      subject: Re: Эталонная реализация idec
      17.07.2019 15:31
      
        
            Difrex (dynamic,1) => ZoH4AonznjtwMZcWOiCu
        
      
       
       
      И еще. Генерация authstring в points.txt отстой.
Т.к. зная имя пользователя, мы всегда можем получить его строку авторизации.
Сделал ПР.
+++ At work. idec.el/0.1
      --------------------------------------------------------------------------------
    
      subject: Re: Эталонная реализация idec
      17.07.2019 18:50
      
        
            Andrew Lobanov (tavern,1) => 8OraFJ96eE12ckSocYyQ
        
      
       
       
      Difrex> И еще. Генерация authstring в points.txt отстой.
Difrex> Т.к. зная имя пользователя, мы всегда можем получить его строку авторизации.
Difrex> Сделал ПР.
А вот это по существу уже совсем. Спасибо.
      --------------------------------------------------------------------------------
    
      subject: Re: Эталонная реализация idec
      17.07.2019 19:49
      
        
            Andrew Lobanov (tavern,1) => 8OraFJ96eE12ckSocYyQ
        
      
       
       
      Difrex> Сделал ПР.
Кстати, так как я учусь только, то лучше мне просто указывать на недочёты и ошибки, чтобы я сам разбирался и делал всё. Особенно что касается стиля, так как хороший стиль чужими патчами не выработаешь =)
      --------------------------------------------------------------------------------
    
      subject: Re: Эталонная реализация idec
      18.07.2019 10:28
      
        
            Difrex (dynamic,1) => qw8Ggp4SRCWsVpBln05J
        
      
       
       
      > Особенно что касается стиля, так как хороший стиль чужими патчами не выработаешь =)
Ок, по стилю :)
Общие рекомендации:
      * Код должен быть по PEP8.
      * Хорошо бы иметь краткий докстринг в каждой функции -- это полезно, для того, чтобы
        сразу понимать, что эта функция делает, для показа доков в Емаксе и для автогенерации
        документации на код в том же Sphynx. У меня, например, настроена CI так, что ПР, где
        нет докстрингов, не принимаются.
      * Никогда не импортировать * из модулей.
      * Не переопределять имена функций в переменные. Что я имею в виду:
        В файле points.py(а возможно и в других, не копал еще сильно) есть функция `hsh()',
        которая генерирует authstring. Так вот в нескольких других местах ты создаешь строковые
        переменные с таким же именем. Это может привести к неочевидным последствиям.
        Пример:
====
def h(x):
    return x * x
def some_method(func):
    val = get_val_from_rest_api()
    return func(val)
if __name__ == "__main__":
    h = "Template: {}"
    # Тут дальше идет какая-то логика
    # А под конец хотим вызвать какой-либо метод передав в него
    some_method(h
    # Получаем исключение, т.к. вместо функции мы передали строку
====
      * Использование python-black по желанию -- это бескомпромиссный форматировщик кода.
        Работает четко и круто.
Как облегчить себе жизнь и ваще не париться по поводу стиля:
Ставишь из своих репов autopep8, flake8, python-black, pip.
Настраиваешь Емакс: https://paste.lessmore.pw/hojecuqece.lisp
Теперь всю работу по форматированию кода, а так же комплиту, прыжкам в методы, и.т.д будет делать
за тебя GNU Emacs :)
+++ At work. idec.el/0.1
      --------------------------------------------------------------------------------
    
      subject: Re: Эталонная реализация idec
      18.07.2019 11:39
      
        
            Andrew Lobanov (tavern,1) => V9tRZjnwgxnLEX481X0f
        
      
       
       
      >> Особенно что касается стиля, так как хороший стиль чужими патчами не выработаешь =)
Difrex> Ок, по стилю :)
Difrex> Общие рекомендации:
Difrex>       * Код должен быть по PEP8.
Уже переделал этот момент.
Difrex>       * Хорошо бы иметь краткий докстринг в каждой функции -- это полезно, для того, чтобы
Difrex>         сразу понимать, что эта функция делает, для показа доков в Емаксе и для автогенерации
Difrex>         документации на код в том же Sphynx. У меня, например, настроена CI так, что ПР, где
Difrex>         нет докстрингов, не принимаются.
Это у меня в TODO было давно =)
Difrex>       * Никогда не импортировать * из модулей.
Да. Я уже усвоил это. Если импортировать только нужное, то получается гораздо нагляднее и безопаснее.
Difrex>       * Не переопределять имена функций в переменные. Что я имею в виду:
Difrex>         В файле points.py(а возможно и в других, не копал еще сильно) есть функция `hsh()',
Difrex>         которая генерирует authstring. Так вот в нескольких других местах ты создаешь строковые
Difrex>         переменные с таким же именем. Это может привести к неочевидным последствиям.
Этот момент я ещё не проработал, но ошибка весьма очевидна, если подумать. Спасибо =)
Difrex>       * Использование python-black по желанию -- это бескомпромиссный форматировщик кода.
Difrex>         Работает четко и круто.
Пока я просто прогнал все файлы через pep8 и исправил все замечания. Ну и форматирование исправил с оператора форматирование на метод форматирования. Правда пока не тестировал чего я там наделал, зато исправил пару критичных багов попутно =)
Difrex> Как облегчить себе жизнь и ваще не париться по поводу стиля:
Difrex> Ставишь из своих репов autopep8, flake8, python-black, pip.
Difrex> Настраиваешь Емакс: https://paste.lessmore.pw/hojecuqece.lisp
Difrex> Теперь всю работу по форматированию кода, а так же комплиту, прыжкам в методы, и.т.д будет делать
Difrex> за тебя GNU Emacs :)
Как раз собирался гуглить как это сделать. GNU Emacs это сила =)
Спасибо за полезные советы и рекомендации. Давно пора было мне упорядочить свой стиль и перестать разводить бардак в коде.
      --------------------------------------------------------------------------------
    
      subject: Re: Эталонная реализация idec
      24.07.2019 07:17
      
        
            Andrew Lobanov (tavern,1) => PWEPSP2R5DW1qwISS5BT
        
      
       
       
      Много чего доделал и доработал в сабже. Также написал простенький idec-txt под шумок. И переписал скрипт отсылки файлов в фэхи.
Всё это лежит вот тут:
* https://gitlab.com/spline1986/idec - эталонная нода;
* https://gitlab.com/spline1986/idec-txt - скрипт для отпрафки файлов в фэхи;
* https://gitlab.com/spline1986/idec-utils - тут я собираюсь возродить свои скрипты для idec, но пока тут только скрипт для отправки файлов.
Если есть желание и время, буду признателен, если потестируете или сделаете замечания по README хотя бы =)
PS: Да. Докстринги я до сих пор не прописал. Это на очереди.
      --------------------------------------------------------------------------------
    
      subject: Re: Эталонная реализация idec
      24.07.2019 11:29
      
        
            Andrew Lobanov (tavern,1) => 1YgHm9aB2ceVsT9PNjF2
        
      
       
       
      Теперь idec-txt поддерживает слайсы. Вроде как, теперь он вполне себе POC клиентской части полноценный.
      --------------------------------------------------------------------------------
    
      subject: Re: Эталонная реализация idec
      24.07.2019 16:43
      
        
            Difrex (dynamic,1) => 1YgHm9aB2ceVsT9PNjF2
        
      
       
       
      > сделаете замечания
filter() - это встроенная функция python.
Т.е. делая так
====
from api import filter
====
Ты ее переопределяешь.
      --------------------------------------------------------------------------------
    
      subject: Re: Эталонная реализация idec
      25.07.2019 07:33
      
        
            Andrew Lobanov (tavern,1) => fuOsvdn6ECehFNGcRawI
        
      
       
       
      >> сделаете замечания
Difrex> filter() - это встроенная функция python.
Difrex> Т.е. делая так
Difrex> ====
Difrex> from api import filter
Difrex> ====
Difrex> Ты ее переопределяешь.
Спасибо. Переделаю.
      --------------------------------------------------------------------------------
    
      subject: Re: Эталонная реализация idec
      02.08.2019 19:51
      
        
            vit01 (mira, 1) => hbP5IRIAcSOAvZOA8yQ9
        
      
       
       
      AL> Очень бы хотелось услышать замечания и рекомендации от многоуважаемого All =)
Слабая валидация POST данных. Особенно на тех же файловых эхах
Способ хранения индексов вместе с файлами в фэхах меня тоже немного удивил. Можно попробовать в качестве атаки ввести фэху index и загрузить там файл с названием другой фэхи, тем самым легко затерев всё содержимое последней.
Мои пожелания:
1. Складывать все конфиги, файлы, относящиеся к эхам и файлэхам, в отдельный каталог вроде "data"
Уже часто начал замечать, что при таком подходе гораздо проще делать бэкапы и отделять файлы репозитория от изменяемых файлов.
// все блэклисты и изменяемые конфиги полностью туда
К конфигам удобнее добавить готовые примеры, чтобы ещё быстрее ускорить развёртывание станции.
2. Объединить cli-скрипты в единый интерфейс и запускать вроде
====
idec.py run
idec.py points add Vasya
idec.py stats -f ... -t ...
idec.py stats --help
====
3. Туда же, к cli-интерфейсам. Не надо городить велосипедов к парсингу параметров командной строки, ведь есть модуль argparse из стандартной библиотеки. Он же поможет тебе объединить все скрипты в один
https://docs.python.org/3/library/argparse.html
4. Текстовая БД не единственный тип БД. Я понимаю, что у нас это классика, но в боевых условиях, на десятках тысяч сообщений это не вариант. Только если в виде PoC
+++ Отправлено через IDEC Mobile
+++ GNU/Linux, Android, physics, MLP:FIM
      --------------------------------------------------------------------------------
    
      subject: Re: Эталонная реализация idec
      02.08.2019 20:17
      
        
            vit01 (mira, 1) => xIxlApAKQ84ELKqgrn2j
        
      
       
       
      Попытался запустить на рабочем сервере своём  ii-net.tk и обломался, потому что там проставлен HSTS, и браузер ни в какую не хочет пускать по обычному http, форсируя защищённое соединение.
Нужна поддержка сертификатов.
В той же Gitea всё это продумано до мелочей, хз, как с этим bottle себя ведёт.
+++ Отправлено через IDEC Mobile
+++ GNU/Linux, Android, physics, MLP:FIM
      --------------------------------------------------------------------------------
    
      subject: Re: Эталонная реализация idec
      12.08.2019 06:51
      
        
            Andrew Lobanov (tavern,1) => xIxlApAKQ84ELKqgrn2j
        
      
       
       
      AL>> Очень бы хотелось услышать замечания и рекомендации от многоуважаемого All =)
vit01> Слабая валидация POST данных. Особенно на тех же файловых эхах
Непонятно что именно не так =)
vit01> Способ хранения индексов вместе с файлами в фэхах меня тоже немного удивил. Можно попробовать в качестве атаки ввести фэху index и загрузить там файл с названием другой фэхи, тем самым легко затерев всё содержимое последней.
Можешь привести пример?
vit01> Мои пожелания:
vit01> 1. Складывать все конфиги, файлы, относящиеся к эхам и файлэхам, в отдельный каталог вроде "data"
На боевой реализации конфиги вообще в БД будут
vit01> Уже часто начал замечать, что при таком подходе гораздо проще делать бэкапы и отделять файлы репозитория от изменяемых файлов.
vit01> // все блэклисты и изменяемые конфиги полностью туда
В БД всё.
vit01> К конфигам удобнее добавить готовые примеры, чтобы ещё быстрее ускорить развёртывание станции.
Зачем ускорять развёртывание эталонной реализации. Это же по факту POC.
vit01> 2. Объединить cli-скрипты в единый интерфейс и запускать вроде
vit01> ====
vit01> idec.py run
vit01> idec.py points add Vasya
vit01> idec.py stats -f ... -t ...
vit01> idec.py stats --help
vit01> ====
Нет смысла. Это усложнит чтение исходного кода.
vit01> 3. Туда же, к cli-интерфейсам. Не надо городить велосипедов к парсингу параметров командной строки, ведь есть модуль argparse из стандартной библиотеки. Он же поможет тебе объединить все скрипты в один
vit01> https://docs.python.org/3/library/argparse.html
Про это я пока у Лутца не читал =)
vit01> 4. Текстовая БД не единственный тип БД. Я понимаю, что у нас это классика, но в боевых условиях, на десятках тысяч сообщений это не вариант. Только если в виде PoC
Нет смысла в эталонной реализации. Как и вебморда не нужна.
      --------------------------------------------------------------------------------
    
      subject: Re: Эталонная реализация idec
      12.08.2019 06:51
      
        
            Andrew Lobanov (tavern,1) => SgQXJuMxpHzitVbchJSJ
        
      
       
       
      vit01> Попытался запустить на рабочем сервере своём  ii-net.tk и обломался, потому что там проставлен HSTS, и браузер ни в какую не хочет пускать по обычному http, форсируя защищённое соединение.
vit01> Нужна поддержка сертификатов.
vit01> В той же Gitea всё это продумано до мелочей, хз, как с этим bottle себя ведёт.
Зачем это эталонной реализации? Кто-то будет её юзать в боевых условиях?
      --------------------------------------------------------------------------------