TGI station



Назад

idec.talks :: Эталонная реализация idec
=======================================

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 себя ведёт.

Зачем это эталонной реализации? Кто-то будет её юзать в боевых условиях?
--------------------------------------------------------------------------------