uitspitss blog

プログラミングと音楽とエッセイ ※記載内容は個人の見解であり、所属する組織とは一切関係がありません。

retryするデコレータ

失敗してもretryするデコレータを書いてたら、頭の体操みたいなコードができました。 機能要件は、試行の最大回数と試行の時間間隔をデコレートするときに指定できるように…

それから、下記のコードはf文字列を使っているので python3.6+です。

from functools import wraps
from time import sleep, time

def retry(count=0, delay=0):
    def _retry(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            _delay = delay
            _time = time()
            for c in range(count):
                print(f'time: {time()-_time:.1f}')
                success = func(*args, **kwargs)
                if success or c == count-1:
                    break
                sleep(_delay)
                _delay *= delay
            return success
        return wrapper
    return _retry

try_count = 0
@retry(count=3, delay=1.5)
def unstable_func(threshold):
    global try_count
    try_count += 1
    print(f'try count: {try_count}')
    return True if try_count > threshold else False

if __name__ == '__main__':
    print(f'unstable_func is {"succeeded" if unstable_func(3) else "failed"}')
    print()
    print(f'unstable_func is {"succeeded" if unstable_func(3) else "failed"}')

実行結果は

time: 0.0
try count: 1
time: 1.5
try count: 2
time: 3.8
try count: 3
unstable_func is failed

time: 0.0
try count: 4
unstable_func is succeeded

実際に使うときは、ちゃんとしたライブラリを使いましょう!

openFrameworksでプロジェクション

f:id:uitspitss:20170314020609j:plain

はじめに

2014年のクリスマス前に、openFrameworksを使って、プロジェクションをやりました。 今更ながら、記事にまとめます。

個人的には、コードも含めて載せたいところですが、 今までコードを載せるための作業をしようとして、公開ができていなかったので、 この記事では、コードは載せずに簡単な解説や製作に使用したaddon、参考にしたページなどを書きたいと思います。 2年ちょっと前に開発したもので、addonなどはもっと適したaddonが出ていることもあったりすると思いますので、 そのあたりは参考程度に読んでいただいた方がよいかもしれません。

続きを読む