0:00 ヒーリングタイム&ヘッドラインニュースを無音で観ながら寝たいが、心配事がありすぎて寝付けない。 テレビを消灯してもずっとイライラしている。

5:10 に目が覚めるがまだイライラしている。ベッド上でゴロゴロして過ごす。

7:55 起床。洗濯開始。朝飯はおにぎり二個。ビッグエーの大きなおむすびは一個でいいかもしれない。 夏なので乾燥を省略するから洗濯が早く終わる。ベランダに干す。 今日は早く外出して、きのうのメールの問題を解消しないとイライラも消えない。

9:00 区役所のハローワーク、福祉課に行く。ここいろいろ面倒なので詳述できない。 電話ボックスを行ったり来たりして、なんとか Hotmail の送信機能を有効化しようと試みたが、徒労に終わる。 職員の携帯電話にコードを送信して、それを確認して、また電話ボックスへ行っている間に制限時間が切れるだろう。 しかし怪我の功名か、早めに就労支援職員と面接ができた。スケジュールも少し動いた。

いったん向島の部屋に戻る。どうするか考える。 汗だくなので上半身を水浴び。ホームレスの経験が生きる。 やはり郵送にするしかない。ハローワーク墨田に行って先方に断りを入れたい。 10:50 USB へ印刷用に文面を編集した版の PDF をコピーし終わる。

正午前にハローワーク墨田に到着。少し待ったあとに昨日の窓口職員と話をする。 交渉の結果、メールでの送付を希望しているほうの一社が郵送を許諾してくれる。いやありがたい。

12:30 ダイソーアルカキット錦糸町店。封筒代 110 円。

13:05 ファミリーマート江東橋一丁目店で USB 棒に保存している各社宛ての送付物をモノクロ印刷。 紙代をケチって履歴書 2 ページを A4 一枚に印刷するなどしたが、やり過ぎかもしれん。

ハローワーク墨田一階ロビーの台で送付物をセットアップ。この直筆作業も面倒だ。

13:35 錦糸町パルコ内郵便局で書類を送付。切手代 240 円。 これはさすがに次回からは電子メール送信に一本化したい。金がたまらん。

13:45 西友錦糸町店。390 円。

  • レーズンロール (5)
  • ポテチ肉じゃが
  • ボデーソープ詰め替え
  • 洗剤詰め替え

オリナス噴水ベンチに移動して休憩。この近傍で涼しいのはここしかない。

ハローワーク墨田に戻って検索端末をいじる。こういうときにいい仕事が入ってはたまらないので確認する。

錦糸町駅のヨドバシカメラに移動。一階売り場で携帯電話を物色する。 しばらくするとセールスの上手い店員が現れて見積もりや情報をくれる。新情報:

  • 最安の契約にはクレジットカードが必要。したがって私には不能。
  • 新規契約には身分証明証が必要と聞いていたが、その具体例を教わる。 いずれにせよ、一度区役所に戻る必要が明らかになる。

今日やれることは全部やった。オリナス噴水ベンチに移動して居眠りして体力温存。

16:30 タイトー F ステーションオリナス錦糸町店で気分転換に遊ぶ。4 クレ。

18:00 カスミオリナス錦糸町店。257 円。食欲がない。

  • 焼きビーフン

18:25 ビッグエー墨田業平店。204 円。

  • レモンブール
  • 小粒納豆 (3)
  • テーブルロール (5)

18:40 向島の部屋に戻る。シティーハンターを観ながら休む。

19:00 晩飯。焼きビーフンで正解だ。レシートの束を片手に日記を書き進める。

19:50 電話ボックスへ向かう。本日三度目。バカだ。 疲れているので情報収集をほどほどにして切り上げるが、airflow 2020 は気になる。

20:30 部屋に戻る。15 分入浴する。上がってテレビのチャンネル予約機能を駆使して寝るまでのプログラムを組む。 今日はもう何も新しいことをしたくない。

Python を少しやる。threading.Event を応用してチー・ポン・ロンのほぼ同時発生時の優先度チェック。 queue.PriorityQueue をイベントキューではなく純粋に優先度付きキューとして使う。

Event などの同期クラスは実は Condition のラッパーなのだな。

ニュースを観ながら麻雀の練習。無心に打ちたい気分だ。

23:00 PC を切り上げる。部屋の照明を切って横になる。

Programming Notes

プレイヤーの一人が discard_tile() を、その他三人が on_discard() をスレッドとして start() する。コードの短さを保つためマジックナンバー多用。

def discard_tile(discard_event):
    """Discard a tile"""

    name = threading.current_thread().name
    print(f'Action: {name} discard a tile')
    discard_event.set()


def on_discard(discard_event, responses):
    "On discarding a tile by another player"

    name = threading.current_thread().name
    discard_event.wait()
    print(f'{name} activated.')

    # 以降、本来は捨牌と手牌を照合して許されるアクションを発動するような
    # 対話的処理を想定している。
    duration = random.random()
    time.sleep(duration)
    if name == 'consumer0':
        print(f'Action: {name} ポン in {duration:03f}s')
        responses.put((1, duration, name, 'ポン'))
    elif name == 'consumer1':
        print(f'Action: {name} チー in {duration:03f}s')
        responses.put((2, duration, name, 'チー'))
    else:
        print(f'Action: {name} ロン in {duration:03f}s')
        responses.put((0, duration, name, 'ロン'))

実行結果は例えば:

Action: producer discard a tile
consumer0 activated.
consumer1 activated.
consumer2 activated.
Action: consumer1 チー in 0.378375s
Action: consumer0 ポン in 0.401497s
Action: consumer2 ロン in 0.766154s
Result: consumer2 ロン

上記コードで responsesqueue.PriorityQueue オブジェクトを使った。 このようなベストしか見ない方式を採用すれば頭ハネ・ダブロン以上が正常に審判できない。 したがってオンライン麻雀ゲームの実装では三人全員のアクションをテストしていると思われる。