最新 追記

ema log


2013年09月14日 [長年日記] この日を編集

_ [Programming] Python のジェネレータによる外部イテレータ

ツリーをトラバースする必要があったんだけど、visitor が無く while 文で順番にたぐるコードを書いた

node = GetRoot()
while node:
    # ガード節
    if condition_is_not_valid:
        # スキップ
        node = GetNextNode(node)
        continue

    # 処理
    proc
    # 次へ
    node = GetNextNode(node)

ただ、これだとガード節を書きたいときに、continue の前に次を取得するコードをコピペしないと駄目で、かといってネストを深くしたくないし、goto 文も無いのでどうしようかなぁと思ったけど、よくよく考えれば外部イテレータに思いあたり。

class ObjectIterator:
    def __iter__(self):
        node = GetRoot()
        while node:
            yield node
            node = GetNextNode(node)

こんな感じのイテレータを用意して、for 文で回せば良かった。すっきり。

for obj in ObjectIterator():
    # ガード節
    if condition_is_not_valid: continue
    # 処理
    proc

なるほど。Ruby だと Enumerable なモンキーパッチで内部イテレータにしたくなるけど、Python だと外部イテレータを書けば良いということか。

お名前 : コメント :


2013年09月16日 [長年日記] この日を編集

_ [Tips] Microsoft Garage Mouse without Borders

ネットワーク越しにマウス/キーボードを共有するソフト。インストールしてすぐ使えた。

以前、Synaptic を使ったことがあるのだけど、Windows 8.1 Preview 入れてたりしてるので、(非公式とはいえ)Microsoft から出てる安心感もあって入れてみた。

同一 LAN 内だと自動的に見つけてくれて、ランダム生成された Security Key 文字列を共有するとつながる様子。位置の入れ替えも簡単。クリップボード共有も問題なし。

マウスを刺している方のキーボードが共有されるようで、マシンAのキーボードでマシンBに入力できるときに、逆にマシンBのキーボードではマシンAに入力できなかったりする様子。このへん細かい仕様は把握してません。

お名前 : コメント :