Profile cover photo
Profile photo
Oleg Nechaev
79 followers
79 followers
About
Oleg's posts

Всем привет!

Вопрос: возможно ли сделать красивее повтор куска кода?

Хочется так:

with repeat_on_deadlock:
result = db.gen_key()
db.query(result).commit()
return result

но with вроде как не позволяет повторный вызов (или как-то можно?),
можно сделать через декоратор, но придется заворачивать в функцию, а это +1 стек, а в python 2 нет nonlocal, прийдется костыли для внешних переменных (result) делать.

(repeat_on_deadlock содержит try-except)

или как можно лучше сделать?


Кто знает, возможно ли определить как был вызван декоратор?

@mydec
def fn()....

или

@mydec()
def fn()...

или

mydec(fn)

Сейчас используются все 3 вида и приходится угадывать по аргументам.


Post has attachment

Привет всем!

Есть короткая форма для?:
> if obj is True or obj is False or obj is None:

Хотел сделать так:
> if obj in [True, False, None]:

но оно дает другой результат.

Всем привет!

Вопрос по asyncio.

Есть что-то типа tcp прокси на asyncio, есть ли возможность не принимать подключение до того как не произойдет подключение к конечному серверу?

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


Всем привет!

Есть вопрос по клиентской части, заказчик хочет что-бы все было реалтайм, т.е. все изменения были видны у всех моментально. Изменения будут рассылаться через websockets.

Например список пользователей, если изменилось имя какого-то пользователя, то во всех местах где оно отображается, должно моментально поменяться.

Варианты:
1) Сервис с глобальным список пользователей, т.е. везде где используется конкретный пользователь ссылка всегда ведет на один и тот же объект.
Плюс в том что, достаточно поменять значение в одном месте.
Минусы в том что любой виджет по ошибке может закараптить объект, так же изолированые виджеты не узнают, что объект изменился.

2) Сервис всегда отдает клон объекта (иммутабельность*), и что-бы узнать об изменениях нужно использовать листенеры или pubsub.
Минус в том что нужно обкладывать подписками все подрят, пользователь может иметь ссылки на другие объекты и каждый виджет должен это все мониторить, итого один небольшой виджет должен сделать 10-20 типов подписок, а то и больше.

3) FRP, но в проекте ангуляр 1, это наверно будет помесь ужа с ежом.

Какие ещё есть варианты, какие лучше?

Я думаю о 2-м варианте, но как-то сделать автоподписки.


Ещё одна идея на обсуждение:

Использование уникальных идентификаторов в пределах БД/Проекта, а не в пределах таблицы/коллекции. Посредством хранения типа в идентификаторе. Для данных на которые могут ссылаться.

Например ид для пользователей 10000000001, 10000000002, 10000000003...
ид для товаров: 20000000001, 20000000002

т.е. использовать числовой префикс для типа, это лучше чем текстовый префикс "user:1, user:2, user:3" т.к. число лучше хранится, передается и индексируется.

Что дает:
Сейчас каждый крупный проект использует schemaless данные, json, массивы и т.п., данный подход позволит ссылаться непосредственно на конркетный объект, без доп. указания типа.

Можно будет делать generic функции: get_object_by_id(id), get_name_by_id(id), шаблоны {{userId | loadName}} / {{productId | loadName}}

Теги: [1001, 5002, 9003] - в одном массиве удобно хранить и индексировать разные типы, наример [Автор, Отдел, Товар1, Товар 2, Клиент]

Когда есть разные типы со схожими возможностями, например когда можно продать: товар, ресурс, услугу (разные типы и таблицы/коллекции), не нужно дополниткльно указывать что же там продали.

Что думаете?

Всем привет!

Полу-филосовский вопрос,

Есть функция которая получает аргументы и возвращает результат (относительно чистая функция).

В качестве аргумента можно передать массив/объект, т.е. изменяемый объект.

В результате работы функции, она может изменть входящий объект, а может и не изменить, зависит от реализации.

Если я планирую переданный объект использовать после вызова функции, то объект не должен быть изменен внутри функции.

Тут 2 пути:
1) Клонировать объект перед тем как передать в функцию
2) Функция должна сама клонировать объект если там есть код который может изменить входящий аргумент

Какой подход лучше/правельней?

Нюансы и аргументы:

0) Мы не значем меняет ли функция аргументы или нет, мы просто вызывает нужный функционал, даже если не меняет сейчас, то её могут отрефакторить.

1) Как бы, если мне нужно в данном месте неизменяемость, то контроллировать это самому, т.к. это нужно мне а не функции. Но если все время клонировать в каждой такой ситуации, то это может привести к затратам памяти и потерей скорости. Тем более не каждая функция меняет аргументы.

2) Если полагаться на то что функции сами будут клонировать аргументы, то можно напороться на баги если очередная функция не будет клонировать, а просто изменит аргумент.
Так же если в каждой такой функции делать клонирование аргумента, то это затраты памяти и скорости, ведь клонирование не всегда нужно.

Кто что думает?

Post has attachment

Post has attachment
Wait while more posts are being loaded