写真集

Camera:Panasonic LUMIX DMC-LX3
Vine Linux と Ubuntu の設定方法など

Android Emulator を KVM で高速化して起動する

2012-05-28 18:04:50 | Android
Android Emulatorの高速版( Configuring Virtual Machine Acceleration )を試してみました。

Configuring VM Acceleration on Linux

  1. Android SDK Manager Android 4.0.3 (API15)と Android 2.3.3 (API10)には、Intel x86 Atom System Image があるので、追加インストールします。
    Windows の場合は、Intel Hardware Accelerated Execution Manager も必要です。

  2. Android Virtual Device Manager (Tools Manage AVDs...)
    • Name:Android403API15x86
    • Target:Android 4.0.3 - API Level 15
    • CPU/ABI:Intel Atom (x86)
    Android Virtual Deviceを作成します。

  3. 起動用のScriptを作成してEmulatorを起動します。
    $ gedit avd403x86
    ----------------------------------------------------------------------------------
    #!/bin/sh
    android-sdk-linux/tools/emulator -avd Android403API15x86 -qemu -m 512 -enable-kvm
    ----------------------------------------------------------------------------------
    $ chmod a+x avd403x86
    $ ./avd403x86

Windowsはこちらを参照


Ubuntu 12.04 で KVM 仮想環境を構築する

2012-05-28 17:09:06 | Ubuntu

Ubuntu 12.04で仮想環境を構築してみました。
Remote Desktop に spice を使用します。
VirtualBoxより速いですね。

  1. パッケージ
    1. qemu-kvm
      仮想環境
    2. qemu-kvm-spice
      spice
    3. libvirt-bin
      仮想APIと仮想シェル(virsh)
    4. virt-manager
      仮想マシンマネージャー
    5. python-spice-client-gtk
      仮想マシンのグラフィカルコンソール用SPICEクライアント
    パッケージをインストール
    $ sudo apt-get install qemu-kvm qemu-kvm-spice libvirt-bin virt-manager python-spice-client-gtk


  2. ブリッジネットワークを作成します
    $ sudo gedit /etc/network/interfaces
    /etc/network/interfaces
    ----------------------------------
    # The loopback network interface
    auto lo
    iface lo inet loopback
    
    # The primary network interface
    #auto eth0
    #iface eth0 inet dhcp
    
    auto br0
    iface br0 inet dhcp
            bridge_ports eth0
            bridge_fd 9
            bridge_hello 2
            bridge_maxage 12
            bridge_stp off
    ----------------------------------
    
  3. 一般ユーザでもvirt-managerとvirshを使用できるように、libvirtd と kvm グループにアカウントを登録します。
    $ sudo gpasswd -a userName libvirtd
    $ sudo gpasswd -a userName kvm

  4. 仮想マシンマネージャーを起動します。
    $ virt-manager


Ubuntu 12.04 で AMD Radeon HD5400 fglrx をロードさせる

2012-05-26 23:42:58 | Ubuntu


xserver-xrog-core と xserver-common のバージョンが上がった原因なのかな。
AMD Radeon HD5400 Catalystd Driver fglrx をロードしなくなって X Serverが起動しなくなった。
vesa に変えても起動しない。

$ modprobe fglrx && sudo lightdm
でログイン画面が表示される。
$ modprobe fglrx && startx
でデスクトップ画面が表示される。
$ sudo gedit /etc/X11/xinit/xinitrc
-----------------------------------------
#!/bin/sh

#2012-05-26 ati amd Radeon-HD5400
/sbin/modprobe fglrx


# /etc/X11/xinit/xinitrc
#
# global xinitrc file, used by all X sessions started by xinit (startx)

# invoke global X session script
. /etc/X11/Xsession
-----------------------------------------

/sbin/modprobe fglrxを追加して、X Serverが起動してログイン画面が表示されるようになった。


/etc/X11/xorg.conf のデバイスをロードさせるには、BinaryDriverHowto/ATIを参照しました。
$ sudo aticonfig --initial
で作成したxorg.confに
$ sudo gedit /etc/X11/xorg.conf
------------------------------------------
Section "Module"
	load "dri"
EndSection
Section "Device"
	Identifier  "aticonfig-Device[0]-0"
	Driver      "fglrx"
	BusID       "PCI:1:0:0"
EndSection
------------------------------------------
$ sudo ln -s /usr/lib/dri /usr/lib/xorg/modules/dri

load "dri"を追加して、/usr/lib/dri/fglrx_dri.soのシンボリックをモジュールに作成します。
こうするとxorg.confのデバイスドライバを読み込むようになります。
いままではモジュールになにも書かなくても勝手に読んでいたんですけどね。
#2012-05-26 ati amd Radeon-HD5400
#/sbin/modprobe fglrx

コメントアウトしても、ドライバーを読み込むようになり、無事にX Serverが起動してログイン画面が表示されるようになりました。


Android アプリのボタンクリック処理 OnClickListener

2012-05-06 12:04:30 | Android
Android アプリのボタンクリックのイベントやハンドラのコールバック処理は、Activityのインナークラスにして、まとめておくと見やすいです。

source github


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        btnLoginAlert = (Button)findViewById(R.id.btn_loginAlert);
        btnLoginAlert.setOnClickListener(new LoginAlert());
        etResponse = (EditText)findViewById(R.id.ed_response);
        nicoMesssage = new NicoMessage();
        nico = new NicoRequest(nicoMesssage);
    }

    class LoginAlert implements OnClickListener, Handler.Callback ,OnReceiveListener {
    	@Override
		public void onClick(View v) {
    		key();
    		//ログインボタンをdisableにする
        	btnLogin.setEnabled(false);
        	btnLoginAlert.setEnabled(false);
        	
    		final Handler handler = new Handler(this);
    		nicosocket = new NicoSocket(nicoMesssage);
    		nicosocket.setOnReceiveListener(this);
    		
    		new Thread (new Runnable(){
    			public void run() {
    				nico.loginAlert(email.getText().toString(),password.getText().toString());
    				nicosocket.connectCommentServer(nico.getAlertAddress(), nico.getAlertPort(), nico.getAlertThread());
    				Message message = handler.obtainMessage(R.id.btn_loginAlert);
    				handler.sendMessage(message);
    			}}).start();
		}
    	
    	@Override
		public boolean handleMessage(Message msg) {
    		if(nicosocket.isConnected()){
    			new Thread(nicosocket.getAlertSocketRun()).start();
    			btnLogin.setVisibility(View.GONE);
    			btnLoginAlert.setVisibility(View.GONE);
    		}else{
    			Toast.makeText(getApplicationContext(), "アラートログインに失敗しました", Toast.LENGTH_SHORT).show();
    			//ログインボタンをenableにする
    	    	btnLogin.setEnabled(true);
    	    	btnLoginAlert.setEnabled(true);
    		}
			return true;
		}
    	
		@Override
		public void onReceive(String receivedMessege) {
			etResponse.append(receivedMessege + "\n");
		}	
    }