超A&G+の放送URLが有効か確認するスクリプト
先日超A&G+の放送URLが変わったようで*1、録音失敗してから気付くのもイケてないので定期的にチェックする為のスクリプト書いた。
#!/bin/bash STREAM_URL='rtmp://fms-base1.mitene.ad.jp/agqr/aandg2' if [ -z "$(rtmpdump -q -r ${STREAM_URL} -v -B1)" ]; then # IFTTT経由で自分宛てにGmail送信 ifttt.sh gmail checkStreamURL > /dev/null fi
変更前の URL でも接続には成功するし終了コードも 0 が返るし、良い判定方法が分からなかったのでとりあえず1秒録音してサイズをチェックするという力技。
もっと良い方法あったら教えてください。
2018/06/04 追記
rtmp://fms-base1.mitene.ad.jp/agqr/aandg22 に戻った模様
beatmania IIDX のスコアデータCSVの文字について
CANNON BALLERS が稼動したので SINOBUZ のバックアップとしてスコアデータCSVをダウンロードした。
普段は BPICL とかに食べさせてたんだけど自分で中を見るのは初めてだったので文字回りを色々調べてみた。
基本情報
エンコーディングは BOM 付き UTF-8 で改行は LF。
バイト順が固定の UTF-8 には本来 BOM は必要無いんだけど、Excel で UTF-8 の CSV を開くのに必要なので多分そのため。
ソート順
収録バージョン、曲名の順にソートされている。
曲名は Unicode のコードポイント順にソートされている模様。(ゲーム内だとどうだっけ?)
代替文字
公式サイトで焱影が火影に変更されていたことを思い出したので他にも無いか調べてみた。
ゲーム内で表示される本来の表記の曲名リストを入手する方法が思い付かなかったので textage の全曲一覧を拝借してチェックしたところ以下の文字が置き換えられている事が確認できた。
文字 | コードポイント | 使われている曲 | 代替表記 |
---|---|---|---|
¡ | U+00A1 | ¡Viva! | ! |
Æ | U+00C6 | ÆTHER | A |
ö | U+00F6 | Atröpøs | o |
ø | U+00F8 | Atröpøs | o |
Ü | U+00DC | Übertreffen | U |
ä | U+00E4 | Präludium | a |
é | U+00E9 | L'amour et la liberté 旋律のドグマ~Misérables~ |
e |
ê | U+00EA | Raison d'être~交差する宿命~ | e |
♥ | U+2665 | Double ♥♥ Loving Love♥km LOVE♥SHINE Punch Love ♥ 仮面 Raspberry♥Heart(English version) Sweet Sweet ♥ Magic 超!!遠距離らぶ♥メ~ル 表裏一体!?怪盗いいんちょの悩み♥ キャトられ♥恋はモ~モク |
なし |
♨ | U+2668 | ギョギョっと人魚♨爆婚ブライダル | 半角スペース |
焱 | U+7131 | 焱影 | 火 |
曲名しか見てないのでジャンルとかアーティスト名でまだあるかも。
U+0080 - U+00FF は Unicode Block の Latin-1 Supplement で、 ASCII に置き換えていることからこれらのラテン文字を含まない CP932 (≒Shift_JIS) への変換を考慮していると思われる。*1
♥ ♨ 焱 の3文字も CP932 に対応する文字が存在しない。
この置き換えで CP932 との往復変換が可能になっている。*2
$ tail -c +4 1418-9974_dp_score.csv | md5sum f972d768f492db6ce6387bc88e9fcbc0 - $ tail -c +4 1418-9974_dp_score.csv | iconv -f UTF-8 -t CP932 | iconv -f CP932 -t UTF-8 | md5sum f972d768f492db6ce6387bc88e9fcbc0 -
ちなみに Shift_JIS だと ~ (FULLWIDTH TILDE) で変換エラーを起こす。*3
まとめ
- 内部的には Unicode を使っているっぽいが CP932 との変換互換性を考慮している。
- 漢字の置き換えが必要な楽曲は焱影が初だった。(意外)
- どこまで表現可能か気になるので𠮷 (U+20BB7) 田さんとかいたらアーティストデビューしてほしい、そして BMP 外の絵文字を含む曲を作ってほしい。
- 今度覚えてたら筐体で日本語フォルダをソートして眺める。
余談
TЁЯRA の Ё (U+0401) はJIS X 0208 の7区7点、 Я (U+042F) は7区33点に収録されているキリル文字なのでそのまま使用されている。
和文フォントでは全角で表示されるためバランスを考慮してか他の文字も全角になっている。
同様の理由から ULTiMΛTE も全角が使われているが、何故か X↑X↓ も全角だった。(何で?)
リモートのVimからssh越しにクリップボード書き込み
わりと皆やりたがるやつ。
OSC52という端末の制御シーケンスでクリップボードアクセスができるらしい。
端末側の設定
セキュリティ上端末エミュレーターのデフォルト設定では無効になってることが多いとか。
自分が触る範囲だと以下の方法で書込許可設定ができた。
Tera Term
[設定]→[その他の設定]→[制御シーケンス]→[リモートからのクリップボードアクセス]を書き込みのみ(又は読込/書込)
Rlogin
Server Edit Entryで[クリップボード]→[制御コードによるクリップボード操作]→[OSC 52 によるクリップボードの書き込みを許可する]にチェック
Vim側の設定
こういうVim scriptがあった。
コメントにも書かれている通りosc52.vimを任意のパスに保存して、.vimrc内に以下の二行を追記
source ~/path/to/osc52.vim vmap <C-c> y:call SendViaOSC52(getreg('"'))<cr>
ビジュアルモードで範囲選択中にCtrl-Cを押すとローカルのクリップボードに書き込んでくれる。
Tera Termで日本語対応
Tera Termだと日本語をコピーした時に化けてしまった。
色々調べてたらTera Termの中の人のgistを見つけた。
OSC 52 でのクリップボード書き込み (zsh用関数定義) · GitHub
# 漢字コードの扱いは端末依存。
# 例えば Tera Term の場合は現状では変換をまったく行わない為、
# 事前に CP932 に変換する必要がある。
ということで事前にcp932に変換してやるように修正してみた。
diff --git a/osc52.vim b/osc52_for_teraterm.vim index 1cb6931..376347b 100644 --- a/osc52.vim +++ b/osc52_for_teraterm.vim @@ -42,7 +42,8 @@ endfunction " " It's appropriate when running in a raw terminal that supports OSC 52. function! s:get_OSC52 (str) - let b64 = s:b64encode(a:str) + let str = iconv(a:str, &encoding, "cp932") + let b64 = s:b64encode(str) let rv = "\e]52;c;" . b64 . "\x07" return rv endfunction @@ -56,7 +57,8 @@ endfunction function! s:get_OSC52_DCS (str) " The base64 commands with no params will return a string with newlines " every 72 characters. - let b64 = s:b64encode(a:str) + let str = iconv(a:str, &encoding, "cp932") + let b64 = s:b64encode(str) " Remove the trailing newline. let b64 = substitute(b64, '\n*$', '', '')
これでTeraTermからでも日本語がクリップボードに送れるようになった。
RLoginは端末の文字コード設定に応じて解釈してくれるっぽいのでこの修正は不要だった。
TexTageで譜面検索するAlfred Workflow
経緯
ふとした時にAlfredからスッとTexTageの譜面検索したいなと思った。
調査
検索クエリがUTF-8のpercent encodingだったらCustom Searchに追加するだけで簡単に済むんだけど検索結果のURLを見た感じそうではなさそう。
Aで検索してみるとURL末尾が0041になった。
→2バイト固定でUnicodeコードポイントを表してるっぽいのでどうやらUTF-16(BE)みたい?
なので検索文字列をUTF-16BEに変換したのち16進ダンプしたものを http://textage.cc/score/index.html?r211B00_
に結合して開いてやれば良い。
作った
ShellScriptで書くとこんな感じ。
同じことをやるAlfred Workflow
実演
ちゃんと日本語でも動いてて良い感じ。
Kindle本をブクログに自動登録する
経緯
未読管理のために買った本全部ブクログに登録してるんだけど、できるだけ自動で登録したいよねという話。
ブクログにはISBN/ASINコードで本を一括登録する機能があるのでKindle本の注文メールからASINを抽出して投げてやればいけそうな感じがする。
いけた
Gmailを扱いやすそうだったのでGoogle Apps Scriptを使ってみた。
gistd24699fdfaabec9c971c3037279a753f
導入
「Google Drive上に直接作成する」の方法でGoogle Apps Scriptを作成する。
上記のコードをコピペする。(よさげな公開方法がわからなかった)
「ファイル」→「プロジェクトのプロパティ」→「スクリプトのプロパティ」にブクログのログイン情報を設定する。
「リソース」→「現在のプロジェクトのトリガー」で「AutoRegistToBooklog」を適当な間隔で定期実行させる。
初回はGmailのアクセスとか外部リクエストの認証を求められるので、「実行」→「AutoRegistToBooklog」で動作確認してみてね。
まとめ
- 今のところまとめ買いとかしても特に問題無く動いてる。
- ログは実行毎に上書きされちゃうのでどっかに書き出したい。
色々と参考にさせて頂きました。
2016-10-16 追記
予約注文メールからASINを取得できてなかったので修正
2019-11-23 追記
POST時にRefererが必須になっていたので修正
PostgreSQLのDB名一覧を改行区切りで取得する
シェルスクリプト用にシンプルにDB名のみの一覧が取得したくなったんだけど、案外やり方が見つからなかった。
psql -Atc "select datname from pg_database"
Webラジオ録音中tmuxのステータスバーに通知を表示する
録音中にリブートかける悲しみを繰り返さないために。
rec_status.sh
#!/bin/sh if pgrep rtmpdump > /dev/null ; then echo 'REC●' fi
.tmux.conf(抜粋)
set-option -g status-right '#[fg=red]#(rec_status.sh)#[fg=green] %m月%d日(%a) %H:%M '
よさそう
rtmpdumpが起動してるからって録音してるとは限らないって?