わたねこコーリング

野良プログラマ発、日々のアウトプット

【macOS】ダウンロードフォルダにフォルダアクションを設定して自動整理する

TL;DR

日々のダウンロードで乱雑になりがちな macOS のダウンロードフォルダですが、ここにフォルダアクションを設定することで、古いものを自動削除させるという小ネタです。ずっと前に同様のネタを、シェルスクリプト + crontab で解決する方法で書きましたが、トリガを crontab からフォルダアクションに変えただけで、やってることはだいたい同じですw

手順

  1. Automator を起動して、「ファイル」>「新規」から、書類の種類で 「フォルダアクション」 を選択。
  2. 画面上部の「フォルダアクションは、次の場所に追加されたファイルやフォルダを受け取ります:」のプルダウンから、対象にしたいフォルダを選択。
  3. 画面左側のライブラリから「ライブラリ」>「ユーティリティ」> 「シェルスクリプトを実行」 を右側のワークフローエリアにドラッグ&ドロップ。
  4. 設定を以下のように変更。
    • シェル: /bin/zsh
    • 入力の引き渡し方法: 「引数として」
  5. 表示されているコードをすべて消去し、以下のコードに書き換える。

    # フォルダアクションのトリガーとなったファイルから、対象フォルダのパスを取得
    TARGET_DIR=$(dirname "$1")
    # 30日以上経過したファイルをゴミ箱に移動(フォルダ内のファイルやフォルダは辿らないように -maxdepth 1 を指定)
    find "$TARGET_DIR" -maxdepth 1 -mtime +30 -exec mv {} ~/.Trash/ \;
    


  6. Command + S で保存。名前は「30日経過ファイルをゴミ箱へ」。
  7. これでダウンロードファイルを保存するタイミングでフォルダアクションが実行され、直近30日以内のものだけが残るようになります。

    最近はちょっとしたことなら AI がすぐに答えを出してくれるので、本ブログでやっているような小ネタ系アウトプットはあまり意味が無いんじゃないかとポストが滞りがちですが、その AI もネットから学習している訳なので、持ちつ持たれつなのかなぁと自分を納得させつつ書きましたw

【matplotlib】如何にして私はライブラリの使用を止め、ローソク足を自分で描くことにしたか

TL;DR

matplotlib でローソク足グラフを描く場合は mplfinance のようなライブラリを使うのが定石な訳ですが、色々な理由から結局自分で作図処理を書くようになった、という話です。

経緯

mplfinance は確かに便利でよく出来ています。ティピカルなグラフだったら数行のコードを書くだけでグラフ作成ができちゃいます。が、日常の投資活動で思いついたアイディアを試したり検証したりする過程では、グラフにもちょっと変わった要素を盛り込むことがしばしばです。そうなると、人懐っこかった mplfinance はとたんに融通の利かないブラックボックスに変貌してしまいます。グラフの背景や軸のラベル等で少しだけヘンテコなことがしたいだけなのに、ドキュメントと首っ引きで方法を調べてはトライ&エラーを繰り返し、挙げ句はソースコードをガッツリ読む羽目になったりで、30分のつもりだった作業が半日仕事になっちゃってもうヤダー(泣

コード書いた

そんな場面を何度も経ているうちに、「ローソク足、自分で描いたほうが早くね?」となった訳です。面倒な作業になるかと思っていましたが、実際取り掛かってみると案外簡単に実現できちゃいました。書いた関数(↓)は20行程でローソク足作画以外は何もしません。それ以外のプロットの書き加えや軸周り、グリッド、レイアウト等のアドホックな作画は関数外で都度々々書けばいいじゃん、というコンセプトです。

# ローソク足プロット
def plot_candle(ax, x, o, h, l, c):
  # Y軸の長さ(ピクセル数)を調べる
  _, y_axis_pixel = get_axis_pixel(ax)
  # Y 軸幅を算出してローソクの最小高さを決めておく
  candle_height_min = (max(h) - min(l)) / y_axis_pixel * 1.1
  # X 軸プロット数
  x_len = len(x)
  # ローソク足の色
  color = ['green' if o[n] < c[n] else ('red' if o[n] > c[n] else 'black') for n in range(x_len)]
  # ローソクの高さと底辺位置
  y = [abs(o[n] - c[n]) for n in range(x_len)]
  bottom = [min(o[n], c[n]) for n in range(x_len)]
  # ローソクが必ず作画されるよう、高さと位置を補正
  for n in range(x_len):
    if y[n] <= candle_height_min:
      y[n] = candle_height_min
      bottom[n] -= candle_height_min / 2
  ax.bar(x, y, bottom=bottom, color=color)
  # 上ヒゲ
  ymin = [max(o[n], c[n]) for n in range(x_len)]
  ymax = [h[n] for n in range(x_len)]
  ax.vlines(x, ymin, ymax, color=color)
  # 下ヒゲ
  ymin = [l[n] for n in range(x_len)]
  ymax = [min(o[n], c[n]) for n in range(x_len)]
  ax.vlines(x, ymin, ymax, color=color)

コードにコメントしてありますが、ローソク本体は棒グラフの bar() で、ヒゲは vline() で分けて描くだけです。ただ、|終値 - 始値| がゼロまたは非常に小さい場合でもローソク本体を消失させずに描く必要があるので、そこだけは少し頭を使いました。

めでたしめでたし

このやり方に移行したら、グラフ作画に纏わるストレスが軽減されて投資活動の QOL (?)が向上しました。イェイ✌ コードや実行結果なんかは下記の Google Corab からどうぞ。

colab.research.google.com

2025年第4四半期 プライムビデオで観た音楽系コンテンツ

あけましておめでとうございます。このところブログ更新が滞っていますが、せめてこのシリーズだけはとがんがって書きました。四半期高齢じゃない恒例、ネタバレ御免の音楽系コンテンツ寸評でつ。

スージーQ(字幕版)

'70年代に活躍した元祖女性ハードロッカー、スージー・クアトロの伝記映画。思ってたより音楽的なバックボーンを持ち、成功に飢えていたことや、英国に渡って下積みからのし上がり欧州圏で人気を確立(主要ヒット作はこの時期)したこと、'80年代以降もフェードアウトせずにミュージカルや女優等フィールドを変えて強かに生き残ってきたこと等、「へぇー」連発の見応えある作品でした。2019年は久々のソロアルバムを出すなど再評価の年だったらしく、それに合わせて作られたっぽいですね。尚、リアルタイムで聴いていた頃に好きだったのは「48 クラッシュ」でした。

ロックは淑女の嗜みでして シーズン1

お嬢様女子校に素性を隠して通う庶民出自の JK が、ドラムを叩くと人格が変わる同級生と出会い、いちどは捨てたはずのロックギターに再びのめり込んでいくお話。バンドメンバー全員が各々抱える宿痾からの解放を願ってロックに向かい合っている割には、「べき」「でなくちゃ」を求めすぎて逆に不自由になってない? サウンドへの快感欲求に忠実で、言葉は無意味だとインストに向かうあたりは、なんか理解できたりします。ていうか、ギターと人物のサイズ比や演奏時の手の描写が不自然なのがいちばんのめり込めない理由だったりして。

GET ACTION!!

1993〜1996年に活動した4ピース邦パンクバンド Teengenerate のドキュメンタリー。全く知らないバンドだったけど、本作で聴く音も特に刺さる感覚を持てず、何だか'80年頃のニューウェイブっぽい古臭さを感じてしまいますた。それぞれの楽器が勝手にガチャガチャと猛スピードで転がっていくような演奏は確かにパンクなんだろうけど、きっちりボトムから音を積み上げて生まれるグルーヴに慣れた耳にはちょっと辛い… 結成当初から英語で歌い、単身欧米ツアーに乗り出し現地でカルトな人気を獲得したというのは勇者感ありますね。題名は、'94年セカンドアルバムのタイトルから。

ジョン・レノンポール・マッカートニー ソングブック 1957―1965

ビートルズデビューから「ラバー・ソウル」の頃までの、レノン=マッカートニーのソングライティングをテーマにしたドキュメンタリー。クラウス・フォアマンや、職業音楽人達が好き勝手に論じているけど、音楽技法についての言及は浅くてせいぜいブルーノートが云々という程度で、映像や音源も目新しいものは無く、凡庸な出来という印象。

ジョン・レノンポール・マッカートニー ソングブック 1973―1980

後編はビートルズ解散後からの10年間におけるそれぞれの軌跡。前編同様、ソングライティングを技法的に分析する箇所はごくわずかで、よく知られたエピソード中心の語り口は他のドキュメンタリーと似たりよったりな内容。出演者が好き勝手なことを放言するシーンがどうにも鼻につくし、何一つ掘り下げられていないという辛口評価になりますた。

2025年第3四半期 プライムビデオで観た音楽系コンテンツ

2025年も残り3ヶ月。どうも最近は長いコンテンツを見る気力が減退気味で、プライムビデオのウォッチリスト消化が全然捗りません。という訳で今回も3本だけですが、ネタバレ御免の音楽系コンテンツ寸評でつ。

Rolling Stone ブライアン・ジョーンズの生と死

初期ストーンズの中核メンバーだったブライアン・ジョーンズのドキュメンタリー。周辺者へのインタビューは、毀誉褒貶のバランスを取るように配置されている印象で、中立的ではあるかも知れませんが制作者のアティチュードが見えてこない気がします。全体的に腰が引けていて薄味というか、物足りない印象。

ナイトクラビング:マクシズ・カンザス・シティ

NY パークサウスアベニューに1981年まであった、ミュージシャンや芸術家の屯するナイトクラブ兼レストランのドキュメンタリー。ウォーホルが通い詰め、NY ドールズ等多くのバンドが巣立っていったので、パンクや UG 専門のイメージがあるけど、J・レノン、G・ハリスン、ミック・ジャガー等メインストリームの大物ミュージシャンも通っていて(暴露話が面白いw)、デビュー直後のキッスも出演してたらしいです。MTV が始まった年に終焉したのも何やら暗示的。

METALCA メタルカ

ロックバンド・ミーツ・ゾンビなカルト風味邦画。本番に弱すぎるロックボーカル女子が野良ゾンビと出会い、そのデスボイスに魅入られて状況を突破して行く… というと魅惑的なプロットのように思っちゃうけど、結論から言うとビミョー… というかハッキリ言って全然面白くない。まず劇中のバンドも音楽も全然メタルじゃないのでまずそこで肩透かしを食らうし、展開や演技も全く振り切れてなく古い邦画のように高湿度でベタベタしてるし、これといって笑う処も無いし、てな感じでさっぱり楽しくないのです。なんだか貶しすぎで後味が悪いので、この映画の魅力を語ってくれる方がいたらコメント欄に反論をそうぞ。

銘柄テキスト選択+ワンアクションで「株探」表示する Chrome 拡張機能を書いてみた

TL;DR

ネット記事をブラウジングしていたら気になる企業や株式銘柄を見かけたので、それについて「株探」や「Yahoo! ファイナンス」等で調べてみた、というユースケースが日常茶飯事的にあります。その時の、テキストをコピー→「株探」等のサイトを開いてペーストして選択、というような作業が煩わしく、コンテクストメニューから「XXX を『株探』で表示」、みたいな Chrome 拡張無いかな… という欲求を何とかしてみたという話です。

作った

という訳で、Chrome 拡張機能は初めてでしたが、書いてみました。と言っても開発物は非常にシンプルで、以下の短い2ファイルだけです。

Chrome 拡張機能には、パッケージ情報を記したマニフェストファイル manifest.json のバンドルが必要なので、まずそれから。こんな感じです↓。実装する機能に応じて、permissions に必要な権限を明記してやるあたりで理解と知識が必要かと。

{
  "manifest_version": 3,
  "name": "クイック株探",
  "version": "0.1",
  "permissions": [
    "activeTab",
    "contextMenus",
    "scripting"
  ],
  "background": {
    "service_worker": "background.js"
  }
}

あともう1つはプログラム本体の background.js 。選択状態のテキストを取得して、それが銘柄コード(0〜9,A〜F からなる4桁の英数字)っぽかったら「株探」の銘柄チャートページへ、そうでないなら検索結果ページを、新しいウィンドウ(タブ)で開くだけです。

// 拡張機能がインストールされたときにコンテキストメニューを作成
chrome.runtime.onInstalled.addListener(() => {
    chrome.contextMenus.create({
        id: "openKabutanWithSelected",
        title: "選択した銘柄を株探で表示する",
        contexts: ["selection"]
    });
});

// コンテキストメニューがクリックされたときの処理
chrome.contextMenus.onClicked.addListener((info, tab) => {
    if (info.menuItemId === "openKabutanWithSelected") {
        // 選択されたテキストを取得し、内容に応じて株探の適切なページを開く
        const selectedText = info.selectionText;
        chrome.scripting.executeScript({
            target: { tabId: tab.id },
            func: (text) => {
                if (/^[0-9A-F]{4}$/.test(text)) {
                    window.open('https://kabutan.jp/stock/chart?code=' + text);
                }  
                else {
                    window.open('https://kabutan.jp/search/?q=' + encodeURIComponent(text));
                }
            },
            args: [selectedText]
        });
    }
});

使い方

  1. 適当なフォルダ(例:quick-kabutan)を作って、上記の2ファイルを保存。
  2. Chromechrome://extensions/ を開く。
  3. 右上の「デベロッパーモード」を ON にする。
  4. 左上メニューから「パッケージ化されていない拡張機能を読み込む」をクリックして、ファイルダイアログにて上記で作ったフォルダを指定して、拡張機能をインストールする。
  5. 適当なウェブページで上場企業名や、その銘柄コードを選択して、マウス右クリックでコンテクストメニューをポップアップさせ、「選択した銘柄を株探で表示する」を選択。

所感

冒頭に Chrome 拡張機能開発は未経験だと書きましたが、以前だとそんな時は調べ物と試行錯誤で結構な時間を取られたもんですが、今は AI 先生が全部代行してくれる勢いで助けてくれるので数時間で済んでしまいました。便利さを実感するとともに危機感もヒシヒシと感じてますw

尚、開発物一式を Chrome ウェブストアで配布することも考えたのですが、特定企業のウェブサイトに誘導するアプリがレギュレーション的に問題ないのかの確認をはじめ、諸作業が面倒そうだったので今回は見送りました。この記事への反応次第では、汎用性を持たせる方向でレベルアップさせ、ストア公開を目指しても良いかなーと思ったりしてます。

2025年第2四半期 プライムビデオで観た音楽系コンテンツ

バイオグラフィー:KISSTORY 地獄の軍団

2023年のファイナルツアーをもって活動を停止した KISS の軌跡を追ったドキュメンタリー。前後編合わせて3時間弱と見ごたえあり。ジーン・シモンズとポール・スタンレーがバンドの柱であることは何となくレベルで知っていましたが、ここまで深い絆で結ばれていたとは。持続力で言えば、レノン=マッカートニーをとうに超えています。渇望した成功の果てに、正気を保てず壊れていったエース・フレーリーとピーター・クリスを責める気にはなれず、よくもまぁ忍耐して踏みとどまれたものだと、誰もがジーンとポールを称賛したい気持ちになるのでは。オリジナルメンバー達と現メンバーのトミー・セイヤー、エリック・シンガーに加え、デイヴ・グロール(フー・ファイターズ)、トム・モレロ(レイジ・アゲインスト・ザ・マシーン)のインタビューもツボを押さえていてイイですねー。

D.O.A.(字幕版)

セックス・ピストルズの米ツアー映像を中心にした、ロンドンパンクの最盛期を伝える作品(1981年)。ナレーションやアーティスト側へのインタビューも無く、ドキュメンタリーというよりは映像集かもだけど、そんなそっけない作風が逆にパンクっぽい。ピストルズ以外には、デッド・ボーイズ、シャム69、ジェネレーションX等。短いけどシド&ナンシーの楽屋裏映像も貴重かも。

ウィズ (字幕版)

オズの魔法使いミュージカル映画(1978年)。主演はダイアナ・ロス(細っ)で、カカシを演じるのはソロとして羽ばたく直前のマイケル・ジャクソン(あどけなっ)。原作に沿って友情と信頼を軸にしたストーリーは予定調和路線だけど、キャストが全て黒人なことや、スラム街→遊園地廃墟→ビジネス街と現代 NY の風景そのままながらもどこか非日常感のあるオズの国など、映像美術な側面の魅力が大きいのではと思ったり。

Hosono House 年代記 〜 時の移ろいを地理院地図で眺める

HOSONO HOUSE」と言えば1973年、はっぴぃえんど解散後の細野晴臣氏が居を構えていた狭山市の米軍ハウスで録音した初ソロアルバムで、時代とともに評価は高まる一方の名盤な訳ですが、その跡地を「聖地巡礼」してみたという動画を拝見しました。こりゃー面白いw


www.youtube.com

私が「HOSONO HOUSE」を聴いたのは大学生だった1980年頃で、それほど程なくして上京したのですが、その頃には未だ存在していた訳ですね。いやー、行ってみりゃよかった⋯ そんな悔恨がきっかけで、地理院地図の時系列表示で過去半世紀程の変遷を追ってみました。旧 HOSONO HOUSE 地点の URL は、
https://maps.gsi.go.jp/#18/35.850813/139.398938/&base=std&ls=std%7Cgsi-compare-photo&blend=0&disp=11&lcd=gsi-compare-photo&vs=c1g1j0h0k0l0u0t0z0r0s0m0f1 になります。操作方法などは過去記事の「地理院地図の時系列表示で遊んでみたら面白かった」をどうぞ。

(過去記事での)田舎の実家周辺を調べた時は古い時代の空撮写真は2枚しかありませんでしたが、さすがに首都圏は切れ目なく記録が残ってますな。何となくですが、日本全体が1980年代を堺に風景が変わってしまったような印象。

せっかくなのでスクリーンショットを繋げてスライドショーにしてみました。こちらもどうぞ。

【付記】地図マーカーに使った細野氏の写真は、WIKIMEDIA COMMONS の下記 URL から Creative Commons ライセンスに準拠して使用させて頂きました。

File:Hosono Haruomi from "No Smoking" at Opening Ceremony of the Tokyo International Film Festival 2019 (49013189233).jpg - Wikimedia Commons