# Эталонная реализация idec
Andrew Lobanov(tavern,1) — All
2019-07-17 10:26:27


Давненько уже я начал работу над сабжем, но некоторые события жизни и длинный отпуск существенно замедлили события. Сегодня я, вроде как, закончил вчерне всё. Доступно это добро тут https://gitlab.com/spline1986/idec

Очень бы хотелось услышать замечания и рекомендации от многоуважаемого All =)

# Re: Эталонная реализация idec
Difrex(dynamic,1) — Andrew Lobanov
2019-07-17 12:10:43


AL> Очень бы хотелось услышать замечания и рекомендации от многоуважаемого All =)
Сделал ПР.

Замечания:
* Не импортируй звездочки из модулей
* Форматирование строк через % устарело
* PEP8

+++ At work. idec.el/0.1

# Re: Эталонная реализация idec
Andrew Lobanov(tavern,1) — Difrex
2019-07-17 13:29:05


AL>> Очень бы хотелось услышать замечания и рекомендации от многоуважаемого All =)
Difrex> Сделал ПР.
Difrex> Замечания:
Difrex> * Не импортируй звездочки из модулей
Difrex> * Форматирование строк через % устарело
Difrex> * PEP8

Спасибо. Разберусь что к чему и смержусь/пофикшу.

Пора уже действительно писать как для людей, а не как для себя =)

# Re: Эталонная реализация idec
Difrex(dynamic,1) — Difrex
2019-07-17 13:31:55


И еще. Генерация authstring в points.txt отстой.
Т.к. зная имя пользователя, мы всегда можем получить его строку авторизации.

Сделал ПР.

+++ At work. idec.el/0.1

# Re: Эталонная реализация idec
Andrew Lobanov(tavern,1) — Difrex
2019-07-17 16:50:00


Difrex> И еще. Генерация authstring в points.txt отстой.
Difrex> Т.к. зная имя пользователя, мы всегда можем получить его строку авторизации.
Difrex> Сделал ПР.

А вот это по существу уже совсем. Спасибо.

# Re: Эталонная реализация idec
Andrew Lobanov(tavern,1) — Difrex
2019-07-17 17:49:28


Difrex> Сделал ПР.

Кстати, так как я учусь только, то лучше мне просто указывать на недочёты и ошибки, чтобы я сам разбирался и делал всё. Особенно что касается стиля, так как хороший стиль чужими патчами не выработаешь =)

# Re: Эталонная реализация idec
Difrex(dynamic,1) — Andrew Lobanov
2019-07-18 08:28:39


> Особенно что касается стиля, так как хороший стиль чужими патчами не выработаешь =)
Ок, по стилю :)

Общие рекомендации:

* Код должен быть по 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

# Re: Эталонная реализация idec
Andrew Lobanov(tavern,1) — Difrex
2019-07-18 09:39:39


>> Особенно что касается стиля, так как хороший стиль чужими патчами не выработаешь =)
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 это сила =)

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

# Re: Эталонная реализация idec
Andrew Lobanov(tavern,1) — All
2019-07-24 05:17:14


Много чего доделал и доработал в сабже. Также написал простенький idec-txt под шумок. И переписал скрипт отсылки файлов в фэхи.

Всё это лежит вот тут:

* https://gitlab.com/spline1986/idec - эталонная нода;
* https://gitlab.com/spline1986/idec-txt - скрипт для отпрафки файлов в фэхи;
* https://gitlab.com/spline1986/idec-utils - тут я собираюсь возродить свои скрипты для idec, но пока тут только скрипт для отправки файлов.

Если есть желание и время, буду признателен, если потестируете или сделаете замечания по README хотя бы =)

PS: Да. Докстринги я до сих пор не прописал. Это на очереди.

# Re: Эталонная реализация idec
Andrew Lobanov(tavern,1) — All
2019-07-24 09:29:34


Теперь idec-txt поддерживает слайсы. Вроде как, теперь он вполне себе POC клиентской части полноценный.

# Re: Эталонная реализация idec
Difrex(dynamic,1) — Andrew Lobanov
2019-07-24 14:43:52


> сделаете замечания
filter() - это встроенная функция python.

Т.е. делая так
from api import filter

Ты ее переопределяешь.

# Re: Эталонная реализация idec
Andrew Lobanov(tavern,1) — Difrex
2019-07-25 05:33:31


>> сделаете замечания
Difrex> filter() - это встроенная функция python.
Difrex> Т.е. делая так
Difrex> ====
Difrex> from api import filter
Difrex> ====
Difrex> Ты ее переопределяешь.

Спасибо. Переделаю.

# Re: Эталонная реализация idec
vit01(mira, 1) — Andrew Lobanov
2019-08-02 17:51:09


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

# Re: Эталонная реализация idec
vit01(mira, 1) — vit01
2019-08-02 18:17:46


Попытался запустить на рабочем сервере своём ii-net.tk и обломался, потому что там проставлен HSTS, и браузер ни в какую не хочет пускать по обычному http, форсируя защищённое соединение.

Нужна поддержка сертификатов.

В той же Gitea всё это продумано до мелочей, хз, как с этим bottle себя ведёт.

+++ Отправлено через IDEC Mobile
+++ GNU/Linux, Android, physics, MLP:FIM

# Re: Эталонная реализация idec
Andrew Lobanov(tavern,1) — vit01
2019-08-12 04:51:39


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

Нет смысла в эталонной реализации. Как и вебморда не нужна.

# Re: Эталонная реализация idec
Andrew Lobanov(tavern,1) — vit01
2019-08-12 04:51:40


vit01> Попытался запустить на рабочем сервере своём ii-net.tk и обломался, потому что там проставлен HSTS, и браузер ни в какую не хочет пускать по обычному http, форсируя защищённое соединение.
vit01> Нужна поддержка сертификатов.
vit01> В той же Gitea всё это продумано до мелочей, хз, как с этим bottle себя ведёт.

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