aswww log

エンジニアの技術録。アプリとかウェブとか

AndoroidStudioのAVDのkvmに関わるエラーでハマった件

先の記事、「AndoroidのAVDのためにcpu-checkerしようとしたらmysql-serverがエラー」はそもそも以下のAndroidDeviceManagerでAndroid6.0の端末をクリックした際に以下のエラーメッセージが表示されたことから始まった。

f:id:aswww:20160523215738p:plain

KVM is required to run this AVD.
/dev/kvm is not found.

Enable VT-x in your BIOS security settings, ensure that your Linux distro has working KVM module.

ここにはkvmが無いとのことなのでkvmを以下のサイトを参考にインストール。

How to Install KVM and Create Virtual Machines on Ubuntu

egrep -c ‘(svm|vmx)’ /proc/cpuinfo
sudo apt-get install qemu-kvm libvirt-bin bridge-utils virt-manager
sudo adduser name libvirtd
virsh -c qemu:///system list

ここまで記事通り。ただし、この後のCreating Virtual Machinesでまたエラーが発生。
[New VM]で新しい仮想環境を作ろうとしてもできなかった。Errorの内容は忘れてしまったが、とにかく「kvmを利用できません」みたいな内容だった。
以下のサイトを参考に調べると
KVM と /proc/cpuinfo の微妙な関係 | CUBE SUGAR STORAGE

BIOSのCPUの設定でVMを許可しなきゃいけないらしいのでBIOS起動。
ASUSの場合、BIOSの最初の画面はこんな感じ。

f:id:aswww:20160523225227j:plain

最初は簡易設定画面らしいので[Advanced Mode](詳細設定?)へ移動

f:id:aswww:20160523225319j:plain

[詳細設定]→[詳細]→[CPUの設定]→[Intel VT(Intel Virtualization Technology)]を[有効]に設定。
[退出]→[保存してリセットする]を選択して再起動。

改めてAndroidStudioを起動し、エミュレータを起動したら件のエラーは出なくなった。

Stringの文字列中に複数個の文字列が一個でも含まれている場合、continueする

Q.$taisyoStringの文字列中に"ダメ"または"いらない"文字が含まれている場合、continueするphpプログラムを書きなさい。

A.
phpの文字列検出系関数の中で一番処理効率がいいのはstrpos関数らしいのでできるだけそれを使う。

  • 回答1.一番シンプルif文だけ
const DAME_MOJI="ダメ";
const IRANAI_MOJI="いらない"

if(strpos($taisyoString, self::DAME_MOJI) !== false or strpos($taisyoString, self::IRANAI_MOJI) !== false){
    continue;
}
  • 回答2.php5.6からconstでarray使えるようになったらしいからarrayで定義
const HUYOU_MOJIS = array("ダメ","いらない");

foreach(self::HUYOU_MOJIS as $huyouMoji){
   if(strpos($taisyoString, $huyouMoji) !== false){
        continue 2;
    }
}
  • 回答3.preg_matchで判断。一番短くてすむ
const HUYOU_MOJIS = "ダメ|いらない";

if(preg_match($taisyoString, self::HUYOU_MOJIS) === 0){
    continue;
}
//もちろん3項演算子でも可

and etc...