tateren’s diary

何か書きたくなった時に使う

一文字一回縛りで最長のIIDXの曲名をワンライナーで調べる

経緯

折角なので(?)ワンライナーで確認してみた。

ルール

(多分)

  • 使用可能文字は /[A-Z ]/
  • 半角スペースは何回でも使用可能

確認用ワンライナー

音ゲー曲ならなんでも良かったぽいけどとりあえずIIDX公式のスコアデータCSVを使った。

$ awk -F, '$2 ~ /^[a-zA-Z ]*$/{print toupper($2)}' 1418-9974_dp_score.csv | grep -Pv '([A-Z])(?=.*\1)' | awk '{print length($0), $0}' | sort -nr
13 BLUST OF WIND
12 MUSIK LOVERZ
12 GLITCH NERDS
11 SPACE FIGHT
11 CLEOPATRYSM
11 BAD ROUTINE
10 STAR FIELD
10 SCHLAGWERK
10 SABER WING
10 NEW LIGHTS
10 LOVE MAGIC
10 IN THE SKY
10 HYPERSONIK
10 HONEY TRAP
10 BRAVE GLOW
9 VERFLUCHT
9 TOGAKUSHI
9 THE LIMBO
9 SUN FIELD
9 PINK ROSE
9 ON THE FM
9 NPC WORLD
9 NIGHT SKY
9 KONZERT V
9 GOLD RUSH
9 FLY ABOVE
9 BRAVE OUT
9 BLUE RAIN
9 AGNUS DEI
8 SYMBOLIC
8 STARMINE
8 SHURIKEN
8 SEPHIROT
8 PUNISHER
8 OUTBREAK
8 NO TEARS
8 MAX LOVE
8 HYPERION
8 FOREPLAY
8 DYNAMITE
8 DISCLOZE
8 BOUNDARY
8 ABSOLUTE
7 TRANOID
7 THUNDER
7 SIGMUND
7 ROUTING
7 ROCK IT
7 PHOENIX
7 LOVE KM
7 JOURNEY
7 INVOKER
7 HOWLING
7 EMPATHY
7 ECHIDNA
7 DAISUKE
7 AMNOLYS
7 AIRFLOW
6 VULKAN
6 VOXANE
6 VOX UP
6 VALGUS
6 UMBRAL
6 TRACES
6 SWITCH
6 SATURN
6 REFLUX
6 QUAKES
6 PRESTO
6 MOSAIC
6 LIGHTS
6 ICARUS
6 GUILTY
6 GARDEN
6 GAMBOL
6 FLOWER
6 EXUSIA
6 ELISHA
6 CRADLE
6 CLIONE
6 CINDER
6 BROKEN
6 BREATH
6 BLOCKS
6 ANSWER
5 VENOM
5 STOIC
5 SPICA
5 SMILE
5 SHION
5 SHADE
5 LINUS
5 IDOLA
5 HYENA
5 HOLIC
5 HADES
5 EVANS
5 BLAME
5 BE OK
5 ATHER
5 AEGIS
4 VEGA
4 SYNC
4 SNOW
4 RISE
4 REAL
4 RAIN
4 ODIN
4 MINT
4 LUCY
4 JACK
4 I AM
4 DROP
4 CREW
3 ZED
3 NZM
3 NEU
3 LOW
3 LAB
3 KEY
3 BAG
3 ACT
2 IX
1 X
1 V
1 F
1 D
1 A

Light and Cyber じゃないやんけ!って思ったけど正しい表記は Light and Cyber… なのでアルファベット縛りにすると弾かれていた。

おまけ

全文字版

$ awk -F, 'NR>1{print toupper($2)}' 1418-9974_dp_score.csv | grep -Pv '([^ ])(?=.*\1)' | awk '{print length($0), $0}' | sort -nr
16 即席!脳直★ミュージックシステム
16 少女アリスと箱庭幻想コンチェルト
16 LIGHT AND CYBER…
14 カジノファイヤーことみちゃん
13 デッドボヲルDEホームラン
13 お命ちょうDAI!90113 PUNCH LOVE 仮面
13 M1DY FESTIVAL
13 BLUST OF WIND
12 エディブルフラワーの独白
12 MUSIK LOVERZ
12 MAGIC & LOVE
12 GLITCH NERDS
12 BLAZE IT UP!
11 恋は白帯、サンシロー†
11 天空脳番長危機十六連打
11 黒髪乱れし修羅となりて
11 君のハートにロックオン
11 SPACE FIGHT
11 CLEOPATRYSM
11 BAD ROUTINE
11 2 TRIBE 4 K
10 恋は白帯、サンシロー
10 衰色小町メランコリア
10 仮想空間の旅人たち†
10 それは花火のような恋
10 うさ☆かめ 大戦争!
10 STAR FIELD
10 SCHLAGWERK
10 SABER WING
10 NEW LIGHTS
10 LOVE MAGIC
10 IN THE SKY
10 HYPERSONIK
10 HONEY TRAP
10 BRAVE GLOW
9 煉獄のエルフェリア
9 電人、暁に斃れる。
9 星屑ディスタンシア
9 幻想系世界修復少女
9 共犯へヴンズコード
9 仮想空間の旅人たち
9 ミッドナイト堕天使
9 WITH YOU…
9 VERFLUCHT
9 TOGAKUSHI
9 THE LIMBO
9 SUN FIELD
9 ROUTE 80S
9 PINK ROSE
9 ON THE FM
9 NPC WORLD
9 NIGHT SKY
9 KONZERT V
9 GOLD RUSH
9 FLY ABOVE
9 BRAVE OUT
9 BLUE RAIN
9 AGNUS DEI
9 ABSOLUTE†
8 不沈艦CANDY
8 純真可憐デザイア
8 時空トラベローグ
8 とろぴかる倶楽部
8 サヨナラ・ヘヴン
8 こっちを向いてよ
8 WISE UP!
8 VOX RUSH
8 SYMBOLIC
8 STARMINE
8 SHURIKEN
8 SEPHIROT
8 PUNISHER
8 OUTBREAK
8 NΦ CRIME
8 NO TEARS
8 MAX LOVE
8 HYPERION
8 HOWLING†
8 FOREPLAY
8 DYNAMITE
8 DISCLOZE
8 BOUNDARY
8 ABSOLUTE
7 未来のプリズム
7 少年は空を辿る
7 子供の落書き帳
7 狂イ咲ケ焔ノ華
7 トリカゴノ鳳凰
7 デンドロビウム
7 オルタネイトΒ
7 X-RATED
7 TRANOID
7 THUNDER
7 SIGMUND
7 ROUTING
7 ROCK IT
7 QUAVER♪
7 PHOENIX
7 LOVE KM
7 JOURNEY
7 INVOKER
7 ICARUS†
7 HOWLING
7 EMPATHY
7 ECHIDNA
7 DR.LOVE
7 DAISUKE
7 CLIONE†
7 AMNOLYS
7 AIRFLOW
6 牧神笛吹きて
6 天空の夜明け
6 星をこの手に
6 十六夜セツナ
6 獅子霞麗ノ舞
6 共鳴遊戯の華
6 駅猫のワルツ
6 タシカナモノ
6 VULKAN
6 VOXANE
6 VOX UP
6 VALGUS
6 UMBRAL
6 TRACES
6 SWITCH
6 SATURN
6 REFLUX
6 QUAKES
6 PRESTO
6 PLAN 8
6 O/D*20
6 NASTY!
6 MOSAIC
6 LIGHTS
6 ICARUS
6 GUILTY
6 GARDEN
6 GAMBOL
6 FLOWER
6 EXUSIA
6 ELISHA
6 CRADLE
6 CLIONE
6 CINDER
6 BROKEN
6 BREATH
6 BLOCKS
6 ANSWER
6 250BPM
5 旅人リラン
5 創世ノート
5 九尾狐夜行
5 リグレット
5 ヨシダさん
5 マチ子の唄
5 バビロニア
5 たからもの
5 セロトニン
5 かずあそび
5 ΕΛΠΙΣ
5 VENOM
5 STOIC
5 SPICA
5 SMILE
5 SHION
5 SHADE
5 NO.13
5 LINUS
5 IDOLA
5 HYENA
5 HOLIC
5 HADES
5 EVANS
5 BLAME
5 BE OK
5 ATHER
5 AEGIS
5 532NM
4 明鏡止水
4 命の標本
4 白露の風
4 童話回廊
4 中華急行
4 嘆きの樹
4 蒼い衝動
4 千年ノ理
4 聖人の塔
4 疾風迅雷
4 華蝶風雪
4 下弦の月
4 ラクエン
4 まほろば
4 ヒマワリ
4 たまゆら
4 タイトル
4 VEGA
4 SYNC
4 SNOW
4 SHOX
4 S!CK
4 RISE
4 REAL
4 RAIN
4 ODIN
4 MIRA
4 MINT
4 LUCY
4 JACK
4 I AM
4 DXY!
4 DROP
4 CREW
4 AO-∞
4 AO-1
3 卑弥呼
3 梅雪夜
3 忍恋花
3 津軽雪
3 大桟橋
3 雪月花
3 刃図羅
3 少年A
3 罪と罰
3 紅牡丹
3 ユミル
3 エコ爺
3 ZED
3 NZM
3 NEU
3 LOW
3 LAB
3 KEY
3 G59
3 BAG
3 B4U
3 ACT
3 .59
2 朧†
2 陽炎
2 廿†
2 虹色
2 蛇神
2 月光
2 鬼天
2 革命
2 海神
2 禍根
2 火影
2 音楽
2 V2
2 R5
2 R3
2 IX
2 G2
11111 廿
11 X
1 V
1 F
1 D
1 A
1

超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 に戻った模様

*1:rtmp://fms-base1.mitene.ad.jp/agqr/aandg2 になった

beatmania IIDX のスコアデータCSVの文字について

CANNON BALLERS が稼動したので SINOBUZ のバックアップとしてスコアデータCSVをダウンロードした。

普段は BPICL とかに食べさせてたんだけど自分で中を見るのは初めてだったので文字回りを色々調べてみた。

基本情報

エンコーディングは BOM 付き UTF-8 で改行は LF。

バイト順が固定の UTF-8 には本来 BOM は必要無いんだけど、ExcelUTF-8CSV を開くのに必要なので多分そのため。

ソート順

収録バージョン、曲名の順にソートされている。

曲名は 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↓ も全角だった。(何で?)

*1:公式サイトのエンコーディングShift_JIS

*2:liconv は BOM 付き UTF-8 を処理できないので先頭3バイトを無視している

*3:実装による?

リモートのVimからssh越しにクリップボード書き込み

わりと皆やりたがるやつ。

OSC52という端末の制御シーケンスでクリップボードアクセスができるらしい。

端末側の設定

セキュリティ上端末エミュレーターのデフォルト設定では無効になってることが多いとか。

自分が触る範囲だと以下の方法で書込許可設定ができた。

Tera Term

[設定]→[その他の設定]→[制御シーケンス]→[リモートからのクリップボードアクセス]を書き込みのみ(又は読込/書込)

Rlogin

Server Edit Entryで[クリップボード]→[制御コードによるクリップボード操作]→[OSC 52 によるクリップボードの書き込みを許可する]にチェック

Vim側の設定

こういうVim scriptがあった。

github.com

コメントにも書かれている通り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

www.dropbox.com

実演

f:id:tateren:20170625230211g:plain

ちゃんと日本語でも動いてて良い感じ。

Kindle本をブクログに自動登録する

経緯

booklog.jp

未読管理のために買った本全部ブクログに登録してるんだけど、できるだけ自動で登録したいよねという話。

ブクログにはISBN/ASINコードで本を一括登録する機能があるのでKindle本の注文メールからASINを抽出して投げてやればいけそうな感じがする。

いけた

Gmailを扱いやすそうだったのでGoogle Apps Scriptを使ってみた。

gistd24699fdfaabec9c971c3037279a753f

導入

wp.tech-style.info

Google Drive上に直接作成する」の方法でGoogle Apps Scriptを作成する。

上記のコードをコピペする。(よさげな公開方法がわからなかった)

「ファイル」→「プロジェクトのプロパティ」→「スクリプトのプロパティ」にブクログのログイン情報を設定する。

f:id:tateren:20161003023301p:plain

「リソース」→「現在のプロジェクトのトリガー」で「AutoRegistToBooklog」を適当な間隔で定期実行させる。

f:id:tateren:20161003023553p:plain

初回はGmailのアクセスとか外部リクエストの認証を求められるので、「実行」→「AutoRegistToBooklog」で動作確認してみてね。

まとめ

  • 今のところまとめ買いとかしても特に問題無く動いてる。
  • ログは実行毎に上書きされちゃうのでどっかに書き出したい。

色々と参考にさせて頂きました。

github.com

2016-10-16 追記

予約注文メールからASINを取得できてなかったので修正

2019-11-23 追記

POST時にRefererが必須になっていたので修正