広島と岡山に行ってきた。
今回のテーマは、そんなに時間もなかったのでゆるく街を歩いて、食べたいものを食べること。
結果として、「最高」と「正直そこまででもない」が入り混じる、なんともリアルな旅となった。
続きを読む
きっかけは母からのLINEであった。
家の前の道を掃き掃除したら、タバコの吸い殻が落ちていて嫌になったという趣旨のメッセージだ。
この話は、感覚的には「マナーの悪い人がいる」という話で終わりがちだが、
最近は道端でたばこの吸い殻をみることは少なくなった。
そこで、ふと思った家の前でタバコの吸い殻を見つける確率ってどんなもんだろうか。
日本全体で1日に何本くらいタバコが吸われていて、そのうち何本くらいがポイ捨てされ、それが人の住んでいる空間にどう分布するのか
を順番に推定すれば、
自分の家の前の道に、1日あたり何本くらいタバコが落ちるか
を計算できるかもしれない。
もちろん、これは厳密な行政統計から一発で出る量ではない。
ここでは公開統計でデータがある部分と、仮定として置く部分を分けて考える。
映画『さがす』は、行方不明になった父を娘が追うというシンプルな導入から始まりながら、やがて家族の喪失、貧困、介護、死への誘惑へと踏み込んでいくサスペンス映画である。
前半は、娘・楓の視点から父の失踪を追うミステリーとして進み、観客は彼女と同じように「何が起きているのか分からない」不安の中へ放り込まれる。一方で後半は、父・智の視点へと切り替わり、隠されていた真相が少しずつ明かされていく。
その構成は非常に面白い反面、個人的には後半でやや説明しすぎているようにも感じた。前半に漂っていた不気味さや余白が、種明かしによって少し薄れてしまった印象がある。
ただし、ラストだけは別だ。卓球のラリー、父娘の会話、遠くで鳴るサイレン。その曖昧な終わり方には、観客に解釈を委ねる強い余韻が残されている。
この記事では、『さがす』の前半と後半で変化する物語構造、実在の事件を思わせる要素、そしてラストシーンに残された余白について考えていきたい。
続きを読む
AVI形式の動画をループ再生するだけのプレイヤー
将来的には拡張して実験に使いたいけどとりあえずは動画再生するだけものすごくシンプルなもの。
以前記事にしたUSBカメラで録画した内容を再生するというような時に使える。
USBカメラを動作させる記事はこちら。
calciummm.hatenablog.com
コードは以下。
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Simple AVI video player with OpenCV. - Plays the specified file in a loop - Press 'q' to quit """ import argparse import sys import cv2 def main(): parser = argparse.ArgumentParser(description="Simple AVI video player (loops, press 'q' to quit)") parser.add_argument("video_path", help="Path to the AVI (or other supported) video file") parser.add_argument("--window", default="AVI Player", help="Window name (default: AVI Player)") args = parser.parse_args() cap = cv2.VideoCapture(args.video_path) if not cap.isOpened(): print(f"Error: failed to open video: {args.video_path}", file=sys.stderr) sys.exit(1) # Try to get FPS to sync playback speed; fall back to ~30fps if unknown. fps = cap.get(cv2.CAP_PROP_FPS) if not fps or fps <= 1e-3: fps = 30.0 delay_ms = max(1, int(round(1000.0 / fps))) try: while True: ret, frame = cap.read() if not ret: # Reached end: loop back to start cap.set(cv2.CAP_PROP_POS_FRAMES, 0) continue cv2.imshow(args.window, frame) # waitKey returns -1 if no key pressed; lower 8 bits are the actual key code. key = cv2.waitKey(delay_ms) & 0xFF if key == ord('q'): break finally: cap.release() cv2.destroyAllWindows() if __name__ == "__main__": main()
以下では使い方と行ごとにどのような意味を持っているかを観ていく。
言語学バーリトゥードの川添愛先生の本ということで読んでみた。全体としてはエンタメ8割・言語学2割くらいのバランスで、かなり読みやすい一冊。
エンタメ8割言語学2割ということで確かに『言語学バーリトゥード』に比べてもさらにエンタメ寄り。
川添先生の軽妙な語り口は相変わらずで、むしろより強く出ている印象。
個人的にはプロレスネタがもう少し欲しかった。
以下読書メモ。
サマーウォーズを久しぶりに見た。
結論から言うと、全体としては佳作だと思う。
でも、正直ちょっとキツかった。
なんというか、目を背けたくなる瞬間が何度かあった。
昔見たときはそんなことなかった気がするので、これって単純に自分が大人になったということなんだろうか。