Bluepostech

まじめなことを書きます

【bash】タイトル名に入ったスペースを置換する

タイトルに入ったスペースは、バグの原因のひとつになる。たとえば「I love you.txt」というファイルを「love letter.txt」という名前にリネームするとき、次のようにするとエラーが出る。

mv I love you.txt love letter.txt

なぜならば、単語がスペースで区切られているせいで、bashにとってはmvのあとにオペランドが5つも並んでいることになるからだ。このような場合、引用符で囲めばちゃんと動くようになる。

mv "I love you.txt" "love letter.txt"

でも、正直毎度毎度これをやるのは面倒でもあるし、CUIで処理するにはスペースを全部アンダーバーに置き換えておきたい。そこで組んだコマンドが次だ。

for file in * ; do echo $file ; mv "${file}" `echo $file | sed -e 's/ /_/g'` ; done

このコマンドを一発打てばカレントディレクトリのファイルの名前に含まれるスペースが全部アンダーバーに置き換わる。

とても見難いので、改行してスクリプト形式にすると次のようになる。

for file in * 
do
echo $file
mv "${file}" `echo $file | sed -e 's/ /_/g'`
done

doループはカレントディレクトリにあるすべてのファイルにかけてある。

バッククオートの後ろは、echoでファイルの名前を出して、パイプでsedに渡してスペースをアンダーバーに置換している。

【Zenfone Goでデレステ】プレイについて

アイドルマスターシンデレラガールズ スターライトステージ」はシンデレラガールズの世界をモチーフにした音楽ゲームで、最近SMAPの中居君がCMをしたり、基本無料とは到底思えないクオリティのMVなどで大人気のアプリである。

しかし、このデレステというアプリはきわめて重い。プレイは無料だが、端末との相性によっては動作がカクついたりタッチに反応しなかったりする。しかも2Dプレイだと2011年発売の端末でもプレイできる例や、最近のスマホでも無反応が連発する例もあり、「新しいからできる」というわけでもなく当たりはずれがある。なので機種変を考えているデレステPはネットのわずかな情報を頼りに当たり外れを探るしかなく、気をもむことになる。

そこで今回はそのわずかな情報として、格安スマホの中で、今年4月に発売されたばかりのZenfone Goでのプレイの状況をレビューしようと思う。

まず、デレステ以外の一般の操作についてはまったく問題がなかった。前のスマホが2011年モデルだったからというのもあるが、ほとんどのアプリが快適に動作した。

デレステだが、まず思ったのが、画質が非常にきれいなことだ。2D画像でもほとんど輪郭がくっきりしており、非常にきれいだった。音質については、割としゃかしゃかした印象を受けた。

プレイについて、条件は次の通りでプレイした。
・2D軽量、タップ音あり
・百均のスクリーン保護フィルム
・開発者オプションからGPUレンダリングON、HWオーバーレイOFF

感想についてだが、ノートの動きはスムーズだが、無反応が多い。しかもまったくプレイできないほどではなく、「1曲に1回くらいは無反応が起こるのでフルコンボが難しい」「10曲に1回くらい、数秒無反応になりライブに失敗することがある」とイラッとするような起こり方をする。原因はCPU、タッチスクリーンなど本体にあるのか、安い保護フィルムなのかはわからない。

3D描画について、こちらはきわめて画質もきれいでスムーズに動く。

f:id:bluepost69:20160525013119j:plain

またGoogle playの録画機能でもスムーズに録画でき、少しコマ落ちするがASUSの出しているPCLink機能で録画することもできる。ただ、これはプリインストールされているPCとつなぐ系のアプリとは別のもので、apkからインストールしなければならない。

結論として、プレイ目的で購入するのは勧められない。しかしデレステはマルチログインができるので、すでに快適にプレイできる端末を持っていてMVをきれいな画面で見たいというならよいと思う。僕もMVを見るときはZenfone Go、プレイはLavieTabという風に使い分けている。

2016.07.01 追記:画面保護フィルムを高いものに変えてみたが、それでも無反応は変わらなかった。結論として、この端末でフルコンボは難しいだろう。

【bash】ワンライナーでdoループ

forループはプログラムでは重要な機能だ。「カレントディレクトリ以下のファイル全部に何かする」とか、「findで拡張子が*.pngのファイルを拾ってきてリネームする」とか、そういう「リストに含まれるものに何かする」という局面はよくある。

bashスクリプトでforループをやる場合、いくつか書き方があるようで、基本は以下の通りだ。

for file in $list
do
commands
done

実はこのfor文、コマンドラインでも使うことができる。

$ for file in $list; do commands; done

for文の解説は調べればいくらでも出てくるがワンライナーでの用法はなかなか出てこなかったのでここに書いておく。