Yearly Archives: 2022

2022-02-23 ,

Emacsから気象庁の天気予報にアクセスする

Emacs上で気象庁の天気予報を取得するものを作りました。

misohena/el-jma: Emacs Interface for Japan Meteorological Agency Data

例によってorg-modeのagenda上にも天気を表示できます。

org-modeのAgenda Viewに表示された天気予報
図1: org-modeのAgenda Viewに表示された天気予報

気象庁の提供するデータについては次のTweetを始め色々な資料がありました。

実際に天気予報を取得するにあたって、一番理解が難しかったのが予報区に関する知識でした。東京の天気を知りたかったら東京のコードを使ってデータを取得するだけなんじゃないの? と思いきや、事情はもう少し複雑でした。

天気予報のデータは概ね都道府県単位に近い区分(府県予報区)毎に取得(ダウンロード)できるのですが、そのデータの中はさらに場所が細分化されています。東京であれば、東京地方、伊豆諸島北部、伊豆諸島南部、小笠原諸島といった具合です。このサブエリアを一次細分区域と呼びます。東京都と言ってもこれらを一緒くたにはできませんから当然な話です。

それで済むかと思いきや、気温のデータだけ別のエリアコードが使われています。調べたところ、最低気温と最高気温の予報はアメダス観測所の地点のものが発表されており、そのアメダス観測所の名前とコードが使われています。東京の場合は、東京、大島、八丈島、父島といった具合です。それぞれ一次細分区域と対応していますが、一つの一次細分区域に複数のアメダス観測所がある府県もあります。

これで終わりかと思いきや、週間天気予報はまた別なエリア分けが使われています。気象庁|週間天気予報の解説には次のような記述があります。

「府県週間天気予報」は原則として府県予報区ごとに予報していますが、東京都と鹿児島県では、常に予報区内の区域を細分して予報しています(東京都は、東京地方と伊豆諸島と小笠原諸島に、鹿児島県は、鹿児島県(奄美地方除く)と奄美地方に、それぞれ細分)。また、季節を限定して区域を細分している予報区もあります。

基本的には週間予報は府県予報区単位の荒い予報ということになっているようですが、地形的・季節的な要因で多少細分化されています。

この週間天気予報で使用する区分けは府県予報区とも一次細分区域とも異なります。府県予報区や一次細分区域と同等になる区域は同じ名前やコードが使われていますが、どちらとも一致しない区域は独自の名前やコードが使われています。この区分けには明確な用語の定義が見当たらなかったので、とりあえず「週間予報区域」と呼ぶことにしました(今から思えば「府県週間予報区」くらいだったかなとも思いますが)。JSONの中ではweekと書いてあることが多いです。

一次細分区域と異なる範囲になるのでその下の選択すべきアメダス観測所も変わってきます。ただ、この週間予報区域に対応するアメダス観測所は一つのみに限定されるようです。

というわけで、場所を指定するのに五つもコードを指定しなければならなくなっていますがお許しください。一応 jma-forecast-area-read コマンドでコードを調べられるようになってます。市区町村から調べられればより良いのですが、その辺りは今後の課題と言うことで。

天気予報の取得方法については https://github.com/misohena/el-jma/blob/main/docs/how-to-get-jma-forecast.org にもメモを残しておきました。具体的なデータ例も https://github.com/misohena/el-jma/tree/main/example-data にあります。

2022-02-22

2022年春の新番組

開始日 タイトル 時刻 配信元
× 2022/01/04(火) イロドリミドリ 01:05 dアニメ
2022/01/05(水) テイコウペンギン -   -
× 2022/01/05(水) ハコヅメ~交番女子の逆襲~ 00:00 dアニメ
2022/01/05(水) リアデイルの大地にて 23:00 dアニメ
2022/01/05(水) 東京24区 12:00 dアニメ
× 2022/01/07(金) 終末のハーレム 01:30 dアニメ
2022/01/07(金) スローループ 22:30 dアニメ
2022/01/07(金) ジョジョの奇妙な冒険 第6部 ストーンオーシャン -   -
× 2022/01/07(金) ドールズフロントライン 12:00 dアニメ
2022/01/07(金) からかい上手の高木さん3 02:00 dアニメ
× 2022/01/07(金) CUE! 02:55 dアニメ
2022/01/08(土) その着せ替え人形は恋をする 00:30 dアニメ
2022/01/08(土) 明日ちゃんのセーラー服 01:00 dアニメ
2022/01/08(土) 現実主義勇者の王国再建記 第2期 -   -
× 2022/01/08(土) 怪人開発部の黒井津さん 02:30 dアニメ
2022/01/08(土) 失格紋の最強賢者 23:30? ABEMA
2022/01/09(日) 時光代理人-LINK CLICK- 22:30 Amazon
× 2022/01/09(日) 錆色のアーマ-黎明- 22:30 dアニメ
× 2022/01/09(日) 薔薇王の葬列 23:00 dアニメ
× 2022/01/09(日) フットサルボーイズ!!!!! 23:30 ABEMA
2022/01/09(日) 進撃の巨人 The Final Season 第2クール -   -
2022/01/09(日) 王子の本命は悪役令嬢 01:00 dアニメ
2022/01/10(月) ガル学。Ⅱ~Lucky Stars~ -   -
2022/01/10(月) トライブナイン 22:30 dアニメ
2022/01/10(月) 範馬刃牙(バキ 続編) -   -
× 2022/01/06(木) 最遊記RELOAD -ZEROIN- 00:00 dアニメ
2022/01/10(月) プリンセスコネクト!Re:Dive Season2 -   -
× 2022/01/10(月) 幻想三國誌 天元霊心記 12:00 dアニメ
2022/01/11(火) 賢者の弟子を名乗る賢者 00:00 dアニメ
2022/01/10(月) 錆喰いビスコ 00:30 ABEMA
2022/01/11(火) 天才王子の赤字国家再生術 ? ABEMA
2022/01/11(火) 異世界美少女受肉おじさんと ? ABEMA
2022/01/12(水) オンエアできない! 00:00 dアニメ
2022/01/12(水) BABY-HAMITANG -   -
2022/01/12(水) 漢化日記 -   -
2022/01/12(水) 殺し愛 23:30 dアニメ
2022/01/12(水) 平家物語 12:00 dアニメ
× 2022/01/13(木) オリエント 01:30 ABEMA
2022/01/13(木) ありふれた職業で世界最強 2nd season -   -
2022/01/13(木) あたしゃ川尻こだまだよ 01:30? Gyao!
2022/01/14(金) ヴァニタスの手記 第2クール -   -
2022/01/14(金) ニンジャラ 12:00 dアニメ
2022/01/16(日) 佐々木と宮野 00:00 dアニメ
2022/01/20(木) お昼のショッカーさん      
2022/01/21(金) テイルズ オブ ルミナリア -The Fateful Crossroad-      
2022/01/30(日) リーマンズクラブ 12:00 dアニメ
2022/01/28(金) 地球外少年少女      
2022/01/30(日) 永遠の831      
2022/01/–(-) 闇芝居 十期      
2021/02/09(水) デリシャスパーティ♡プリキュア 00:00 dアニメ
2022-01-22 ,

TermuxでEmacsを使うためにやったこと

Termuxのインストール

次の方法があります。

必ずしもF-Droidアプリは必要なくTermuxパッケージのページから直接apkをダウンロードすることもできます。GitHubからも(Debug版ですが)apkファイルをダウンロードできます。ビルドはそれほど難しくは無いと思います。

署名の問題があるので別の供給元から入手したものは共存できません。切り替えるにはいったんアンインストールが必要です(必要に応じてバックアップすること)。

私は最終的に次の二つを自分でビルドしてインストールしました。

ソースをgit cloneで入手し、既にPCに入っていたAndroid Studioでプロジェクトを開いてRunボタンを押したらすんなり成功しました。

Termuxの分かりにくそうな操作

ドロワー

画面左端から右へスワイプすると、ドロワー(サイドバー)が出てきます。

KEYBOARDを 長押し すると、下部ツールバーの表示状態を切り替えられます。

ツールバーの左スワイプ

下部ツールバーを左スワイプすると、Text Input Viewが出てきます。ここはInput Methodが効くので日本語を入力するのに使えます。私は上部で入力できるように改造したので今はほぼ使っていません。

Volume Up+ソフトキーボード

色々ショートカットが割り当てられています。

Touch Keyboard - Termux Wiki

キーボードまわりの設定

先日書きました。

Termuxでハードウェアキーボードからスムーズに日本語入力したい | Misohena Blog

  • .termux/termux-properties
    • soft-keyboard-toggle-behaviour = enable/disable
    • disable-hardware-keyboard-shortcuts = true
    • bell-character = ignore
    • ctrl-space-workaround = true
  • キーレイアウト問題(CtrlとCaps、BACKSLASH、無変換)
  • Input Methodがらみは独自ビルドで解決

Emacsのインストール

pkg upgrade
pkg install emacs
emacs

普通に起動します!

SSHとGitのインストール

自分の設定を持ってくるためにsshとgitをインストールしました。

pkg install openssh
pkg install git

鍵を作ってサーバに設定。

ssh-agentは .bashrcに . source-ssh-agent を追加するだけ。簡単!

(https://www.reddit.com/r/termux/comments/b8il5p/sshagent_want_to_start_again_when_new_terminal_is/ より)

Emacsの設定を持ってくる

Gitで自分の設定を持ってきて……

git clone --recursive ssh://hogehoge/my-emacs-config.git
cp my-emacs-config/.emacs.el ~/.emacs.d/init.el
emacs

エラー箇所を修正。最近色々判定をサボっていたので少し出ましたが、それほど多くはありませんでした。(display-graphic-p)はnilなのでそのあたりの機能はごっそり無効化。

Termux上で動いているかの判別は次のようにしました。

(setq my-termux-p (not (null (executable-find "termux-info"))))

How to detect in a BASH script that I'm in Termux? : termux によればtermux-toolsパッケージは常に存在すると考えて良いみたいです。他にもパスにcom.termuxという特徴的な文字列が含まれているのでそれをチェックするのも(コマンドを検索するより速くて)良さそうです。

パッケージのインストール。

M-x package-refresh
M-x package-install-selected-packages
C-x C-c
emacs

その他Emacsの修正

emacsclientが動かない

TMPDIR"/data/data/com.termux/files/usr/tmp" なのに server-socket-dir のデフォルト値が "/data/data/com.termux/files/usr/var/run/<uid>" になっているのが原因みたいです。次のようにします。

(setq server-socket-dir
      (and (featurep 'make-network-process '(:family local))
           (format "%s/emacs%d" (or (getenv "TMPDIR") "/data/data/com.termux/files/usr/var/run") (user-uid))))

(emacsclient can not find server socket · Issue #4230 · termux/termux-packagesより)

パッチが当たらなくなったのかな?

browse-urlでブラウザが開かない

(setq browse-url-browser-function 'browse-url-xdg-open)

(How can I make Emacs function 'browse-url-at-point work on a tablet running Android? - Emacs Stack Exchangeより)

browse-url-xdg-openxdg-open コマンドを使います。Termuxから使えるようです。 termux-open-url というコマンドもあります。

Androidのクリップボードと連携する

事前にtermux-apiアプリの導入が必要です。私はtermux-appを自分でビルドしてしまったので、こちらも自分でビルドする必要がありました。

その上でTermux内にもパッケージのインストールが必要です。

pkg install termux-api

そうすると次の二つのコマンドが使えるようになります。

termux-clipboard-set <text>
termux-clipboard-get

Emacsからは xclip というパッケージを導入するとこれらのコマンドを使ってくれるようになります。

M-x package-install xclip
M-x xclip-mode

(Copy/paste between apps and Emacs in Termux · Issue #6266 · termux/termux-packagesより)

sdcardの読み書き

termux-setup-storage を実行し権限を許可。すると ~/storage が追加され、 /sdcard にもアクセスできるようになりました。

その他インストールしたツール

  • pkg install ripgrep : Emacsから検索の際に使用
  • pkg install wget : ファイルをダウンロードするときに使用