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 себя ведёт.
Зачем это эталонной реализации? Кто-то будет её юзать в боевых условиях?
--------------------------------------------------------------------------------