Долгое время у меня в кабинете на столе жил "Куб управления Aqara" — специальный беспроводной пульт умного дома, который разными жестами позволял совершать разные действия. Но по-настоящему различимых работоспособных жеста было всего 4: поворот на 90, поворот на 180, горизонтальное вращение, встряхнуть. Не хватало еще парочки.
И вот Aqara выпустила новую версию. Хотя на самом деле конечно добавить такую функциональность можно было обновлением прошивки, но маркетинг диктует необходимость продать людям тот же продукт ещё раз. В любом случае, "новая версия" умеет понимать, какой гранью вверх она находится, и отстраивать функцию от этого. В оригинале там на каждой грани нарисованы точки, как на игральной кости. Но я использовал этикеточный принтер (на удивление удачная и полезная покупка для дома) и сделал наклейки. Теперь достаточно повернуть куб нужной картинкой вверх и потрясти, тогда будет включена/выключена, например, люстра, открыты/закрыты шторы, включен рабочий компьютер и так далее. Занял все слоты, удобно.
#gadgets#life
#Functions are first-class citizens in Python:
# They can be passed as arguments to other functions,
# returned as values from other functions, and
# assigned to variables and stored in data structures.
»> def myfunc(a, b):
... return a + b
...
»> funcs = [myfunc]
»> funcs[0]
<function myfunc at 0x107012230>
»> funcs[0](2, 3)
5
# Functions are first-class citizens in Python.
# They can be passed as arguments to other functions,
# returned as values from other #functions, and
# assigned to variables and stored in data structures.
»> def myfunc(a, b):
... return a + b
...
»> funcs = [myfunc]
»> funcs[0]
<function myfunc at 0x107012230>
»> funcs[0](2, 3)
5
https://docs.python.org/3/library/subprocess.html
The #subprocess module allows you to spawn new #processes, connect to their input/output/error pipes, and obtain their return codes. This module intends to replace several older #modules and #functions.
#python
https://docs.python.org/3/library/atexit.html
The #atexit module defines #functions to #register and #unregister cleanup functions. Functions thus registered are automatically executed upon normal interpreter termination. atexit runs these functions in the reverse order in which they were registered; if you register A, B, and C, at #interpreter#termination time they will be run in the order C, B, A.