2012年12月14日金曜日

Hardware Accelerated Execution Manager

MacでAndroidのエミュレーターを爆速で動かす
http://dev.classmethod.jp/smartphone/build-fast-android-emulator/
http://bowz.info/4159
みたいな記事があったのでやってみました。

Mac Book Pro 15inc Retina
Mac OSX 10.8.2

最初は普通にエミュ起動してもっさりー

そいえば以前爆速エミュの記事見た!

てかWindows時代にも一回試してるしやってみよう

エミュ起動時にOS落ちるorz

っとなって結局Hardware Accelerated Execution Managerを消そうと思った時に意外と削除系の記事が無くて困ったので備忘録。
てかMacってpkg系のアンインストール方法ってOSから提供されてないのね(´・ω・`)
んで
http://ho-ki-boshi.blogspot.jp/2010/01/pkg-snow-leopard.html
とか見て消そうと思ったけどなーんか怖い。
その時にふと上記URLの手順上出力されたリスト見てたらアンインストール用のスクリプト入ってたorz
そらIntelさんぐらいになったらそれぐらい入れておくわな…w
って事で備忘録兼ねてメモメモ

sudo /System/Library/Extensions/intelhaxm.kext/Contents/Resources/uninstall.sh

実行後は綺麗にアンインストールされ、エミュレータも起動するようになりました。
結局爆速できなかった(´・ω・`)
まぁ近いうちにやってくれることを期待して待ってます。

2012年9月20日木曜日

AndroidのSpinnerのダイアログ画面をonStopとかで閉じる方法

Androidの標準パーツであるSpinnerはタップしたらダイアログが出せたりしてとっても便利ですがその出てくるダイアログの制御が出来ない。
主に画面を閉じた時に自動的にダイアログも閉じて欲しかったのですが上手くいかないので調べてみたら以外と記事なかったのでメモ書き。

  1. @Override  
  2. protected void onStop() {  
  3.     super.onStop();  
  4.     ViewGroup content = (ViewGroup) findViewById(android.R.id.content);  
  5.     Spinner spinner = (Spinner) findViewById(R.id.spinner);  
  6.     content.removeView(spinner);  
  7.     content.addView(spinner);  
  8. }  

記事にするほどでも無かったかな…。
Spinnerのソースコード見てみるとダイアログ自体は

  1. private SpinnerPopup mPopup;  

として持ってるんだけどこれ自体を触ってる場所はままあるんだけど

  1. dialog.dismiss();  

を実行してるのが

  1. protected void onDetachedFromWindow()   

なので一旦ViewGroup内から削除→再追加としてあげるとスルッとうまくいきます。
まぁこんな特殊な使い方するぐらいなら自分で作るなりカスタマイズするなりした方が良いかも。

業務的に使う時の参考にでもしてください。

2012年7月5日木曜日

Eclipse4.2にてコード補完候補が出なくなった時の対処

コード補完(ctrl + space)を押して補完選択の窓は出てくるけど対象リストが出てこず
ウィンドウの左下ぐらいに赤字で「使用可能なコンプリート機能はありません」とか出て
結構困ったので一応メモ

ウィンドウ>設定>Java>エディター>コンテンツ・アシスト>拡張
の画面にある「'default'コンテンツ・アシスト・リストにあるプロポーざるの種類を選択します」
項目の「Javaプロポーザル」のチェックを入れる

これだけで再び一覧出ました。
以前は入ってたのかな…?
3.5系から使い続けてたワークスペースなので変な設定が残ってたのかもしれませぬ。
お困りの方は是非一度ご確認をー

2012年4月10日火曜日

Android標準のギャラリーアプリを利用し画像選択からトリミングし背景に設定するまでのサンプル

ある程度のVerではこれで動作確認しました。
ただ、IS03に標準搭載されてるcom.cooliris.mediaギャラリーのPiscaオンラインアルバムから選択された画像はトリミング出来ませんでした。
なんか毎回オンラインから取得しているみたいでローカルにキャッシュファイル持ってないのかな?
Uri返してくれないので非対応。

動かない機種とかあったらご連絡頂けるととってもアリガタヤー

-ImageCropActivity.java
  1. /* 
  2.  * ImageCropActivity 
  3.  * 
  4.  * Android標準のギャラリーアプリを利用して 
  5.  * 画像の選択→選択画像のトリミング 
  6.  * を実行。 
  7.  */  
  8. public class ImageCropActivity extends Activity {  
  9.   
  10.  public final static int ID_IMAGE_GALLERY = 1;  
  11.  public final static int ID_IMAGE_CROP  = 2;  
  12.   
  13.  private int    width    = 0;  
  14.  private int    height    = 0;  
  15.   
  16.  private String   bgimage    = "bg.png";  
  17.   
  18.  ImageView    layout    = null;  
  19.  Button     button    = null;  
  20.   
  21.  @Override  
  22.  public void onCreate(Bundle savedInstanceState) {  
  23.   super.onCreate(savedInstanceState);  
  24.   setContentView(R.layout.main);  
  25.   
  26.   layout = (ImageView) findViewById(R.id.MainRootBgr);  
  27.   
  28.   button = (Button) findViewById(R.id.MainCropBtn);  
  29.   button.setOnClickListener(new OnClickListener() {  
  30.    @Override  
  31.    public void onClick(View v) {  
  32.     // 画像選択アプリの呼び出し  
  33.     Intent intent = new Intent();  
  34.     intent.setType("image/*");  
  35.     intent.setAction(Intent.ACTION_PICK);  
  36.     intent = Intent.createChooser(intent, "Select Gallery App");  
  37.     startActivityForResult(intent, ID_IMAGE_GALLERY);  
  38.    }  
  39.   });  
  40.  }  
  41.   
  42.  @Override  
  43.  public void onWindowFocusChanged(boolean hasFocus) {  
  44.   super.onWindowFocusChanged(hasFocus);  
  45.   
  46.   width = layout.getWidth();  
  47.   height = layout.getHeight();  
  48.  }  
  49.   
  50.  @Override  
  51.  protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  52.   super.onActivityResult(requestCode, resultCode, data);  
  53.   
  54.   if (resultCode == RESULT_OK) {  
  55.    switch (requestCode) {  
  56.     case ID_IMAGE_GALLERY:  
  57.      Uri uri = data.getData();  
  58.   
  59.      Intent intent = new Intent("com.android.camera.action.CROP");  
  60.      intent.setType("image/*");  
  61.      intent.setData(uri);  
  62.      intent.putExtra("outputX", width);  
  63.      intent.putExtra("outputY", height);  
  64.      intent.putExtra("aspectX", width);  
  65.      intent.putExtra("aspectY", height);  
  66.      intent.putExtra("scale"true);  
  67.      intent.putExtra("setWallpaper"false);  
  68.      intent.putExtra("noFaceDetection"false);  
  69.      intent.putExtra(MediaStore.EXTRA_OUTPUT, "");  
  70.      intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.name());  
  71.      intent = Intent.createChooser(intent, "Select Crop App");  
  72.   
  73.      startActivityForResult(intent, ID_IMAGE_CROP);  
  74.      break;  
  75.     case ID_IMAGE_CROP:  
  76.      try {  
  77.       // 一時ファイル場所のUri取得処理  
  78.       Uri mUri = data.getData();  
  79.       if (mUri == null) {  
  80.        String action = data.getAction();  
  81.        if (action != null && action.indexOf("content://") > -1) {  
  82.         mUri = Uri.parse(action);  
  83.        }  
  84.       }  
  85.   
  86.       // uriがしっかりと取れているようなら/files/の領域へコピーして一時保存用削除  
  87.       if (mUri != null) {  
  88.        ContentResolver cr = getContentResolver();  
  89.        String[] columns = { MediaColumns.DATA };  
  90.        Cursor c = cr.query(mUri, columns, nullnullnull);  
  91.        if (c != null && c.moveToFirst()) {  
  92.         // 一時ファイル  
  93.         File ifilepath = new File(c.getString(0));  
  94.         // ローカル保存用ファイル  
  95.         File ofilepath = new File(getFileStreamPath(bgimage).getPath());  
  96.   
  97.         FileChannel ifile = new FileInputStream(ifilepath).getChannel();  
  98.         FileChannel ofile = new FileOutputStream(ofilepath).getChannel();  
  99.   
  100.         // ファイルコピー  
  101.         ifile.transferTo(0, ifile.size(), ofile);  
  102.   
  103.         // クローズ処理  
  104.         ifile.close();  
  105.         ofile.close();  
  106.   
  107.         // 一時ファイルの削除  
  108.         getContentResolver().delete(mUri, nullnull);  
  109.   
  110.         if (layout != null) {  
  111.          layout.setBackgroundDrawable(rntBGImage());  
  112.         }  
  113.   
  114.         Toast.makeText(this"Complete", Toast.LENGTH_SHORT).show();  
  115.        } else {  
  116.         Toast.makeText(this"Miss", Toast.LENGTH_SHORT).show();  
  117.        }  
  118.       }  
  119.      } catch (Exception e) {  
  120.       Toast.makeText(this"Error", Toast.LENGTH_SHORT).show();  
  121.       e.printStackTrace();  
  122.      }  
  123.      break;  
  124.    }  
  125.   }  
  126.  }  
  127.   
  128.  private Drawable rntBGImage() {  
  129.   Drawable drawable = null;  
  130.   try {  
  131.    // 初期化  
  132.    byte[] buf = new byte[1024];  
  133.   
  134.    // 背景ファイル読み込み  
  135.    InputStream in;  
  136.    in = openFileInput(bgimage);  
  137.   
  138.    BufferedInputStream ins = new BufferedInputStream(in);  
  139.    ByteArrayOutputStream bos = new ByteArrayOutputStream();  
  140.   
  141.    // ループさせて読み込み  
  142.    while (true) {  
  143.     int ss = ins.read(buf);  
  144.     if (ss <= 0)  
  145.      break;  
  146.     bos.write(buf, 0, ss);  
  147.    }  
  148.    // Drawableに配列をデコード  
  149.    drawable = new BitmapDrawable(BitmapFactory.decodeByteArray(bos.toByteArray(), 0,  
  150.     bos.size()));  
  151.   
  152.    in.close();  
  153.    bos.close();  
  154.   } catch (FileNotFoundException e) {  
  155.    e.printStackTrace();  
  156.   } catch (IOException e) {  
  157.    e.printStackTrace();  
  158.   }  
  159.   return drawable;  
  160.  }  
  161. }  
-main.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/MainRootLnr"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     android:orientation="vertical" >  
  7.   
  8.     <ImageView  
  9.         android:id="@+id/MainRootBgr"  
  10.         android:layout_width="fill_parent"  
  11.         android:layout_height="fill_parent" />  
  12.   
  13.     <Button  
  14.         android:id="@+id/MainCropBtn"  
  15.         android:layout_width="wrap_content"  
  16.         android:layout_height="wrap_content"  
  17.         android:text="CropStart" />  
  18.   
  19. </RelativeLayout>  

2011年8月22日月曜日

CentOS5.6にGit導入→公開(未完成)

鍵生成にはPuTTYgenを推奨

1.インストール
$ wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
$ sudo rpm -ivh epel-release-5-4.noarch.rpm
$ sudo yum -y install git gitosis
$ ssh-keygen -t rsa

2.鍵登録
・PuTTYgenで鍵を生成(※OpenSSH形式じゃないと上手くいかないっぽい点に留意)
$ mkdir /root/.ssh
$ vi /root/.ssh/id_rsa.pub
・「OpenSSHのauthorized_keysファイルにペーストするための公開鍵」の部分をコピーして/root/.ssh/id_rsa.pubに貼りつけ&保存
$ vi /root/.ssh/id_rsa
・PuTTYgen>変換>OpenSSH形式へエクスポートを実行し出てきたファイルの中身を/root/.ssh/id_rsaに貼りつけ&保存
$ sudo -H -u gitosis gitosis-init < /root/.ssh/id_rsa.pub

3.管理ファイルのダウンロード
$ passwd gitosis
Changing password for user gitosis.
New UNIX password:[任意のパスワード]
Retype new UNIX password:[任意のパスワード]

$ mkdir /root/work
$ cd /root/work

$ git clone ssh://gitosis@localhost/gitosis-admin.git
Cloning into gitosis-admin...
The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is bd:24:...:9c:83.
Are you sure you want to continue connecting (yes/no)? [yes]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/root/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /root/.ssh/id_rsa
Enter passphrase for key '/root/.ssh/id_rsa':[空Enter]
gitosis@localhost's password:[↑で設定した任意のパスワード]
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 5 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (5/5), done.

4.管理ファイルの設定
$ cd gitosis-admin
$ vi gitosis.conf

#最下行に以下追加
[group test]
writable = test-dev
members = testuser
#ココマデ

$ vi keydir/testuser.pub
・追加したいユーザーの「OpenSSHのauthorized_keysファイルにペーストするための公開鍵」を貼付け
$ cd keydir
$ git add testuser.pub
$ cd ../
$ git commit -am "Comment" -a
$ git push
Enter passphrase for key '/root/.ssh/id_rsa':[空Enter]
gitosis@localhost's password:[↑で設定した任意のパスワード]

・新規リポ追加
$ cd ../
$ mkdri test-dev
$ cd test-dev
$ git init
$ touch dummy
$ git add dummy
$ git commit -am "Comment"
$ git remote add origin gitosis@localhost:test-dev.git
$ git push origin master:refs/heads/master

2011年5月26日木曜日

VMwareServer から ESXi への移行の際の変換

1:ovftoolのダウンロード
http://www.vmware.com/download/eula/ovf_eula.html

2:コマンドプロンプトで変換
C:\User\test> cd C:\Program Files\VMware\VMware OVF Tool
C:\User\test> ovftool C:\Test.vmx C:\Test.ovf

※もしServerでの利用時にディスクドライブにISO等を読み込んでいた場合は
 変換前に対象部分をvmxファイルから削除しておく。

3:vSphere Clientでインポート
ファイル>OVFテンプレートのデプロイ

ESXi のバージョンアップ

1:VMware vSphere CLIのダウンロード&インストール
http://downloads.vmware.com/jp/d/details/vcli41/ZHcqYmRoaCpiZHd0aA==

2:ESXiのパッチをダウンロード
http://www.vmware.com/patch/download/
※検索対象にESXがあるので間違いに注意
 ダウンロードしたファイル(今回はupdate-from-esxi4.1-4.1_update01.zip)をC:\直下に移動

3:コマンドプロンプト起動
C:\User\test> cd C:\Program Files\VMware\VMware vSphere CLI\bin
 CLIフォルダに移動
C:\User\test> vihostupdate.pl --server 192.168.0.0 --install --bundle C:\update-from-esxi4.1-4.1_update01.zip
 ESXiサーバーのIPを指定とパッチファイルを指定し、インストールの実行

4:ESXiサーバー再起動
3のインストール処理が終了したらサーバー再起動後画面確認でVerチェック