2013年12月11日水曜日

Mac: Eclipseのメモリ使用量を変更(エミュレータが起動できない)

Androidのアプリを作っていたら

Unable to execute dex: GC overhead limit exceeded
というエラーがでてエミュレータが起動できない症状がでました。
eclipse.iniもすぐには見つからなかったのでメモします。

[eclipse.ini]を開く
eclipseのアイコンを右クリック->パッケージの内容を表示->Contents->MacOS->eclipse.ini



Windows版はアイコンと同じフォルダにeclipse.iniがあります。

[eclipse.ini]の編集
-XX:MaxPermSize=256m
-Xms40m
-Xmx384m

-XX:MaxPermSize=1024m
-Xms512m
-Xmx1024m

のように変更し、Eclipseを再起動すると設定が反映されてエミュレータが起動できました。




2013年12月3日火曜日

Macでパスを通す(Xampp-MySQL)

MacにXamppをいれてMySQLのコマンドを有効にさせる設定。

1. sudo vi /etc/paths
で開き
/Applications/xampp/xamppfiles/bin
を一番下に記載する。

2. ターミナルを閉じて、再度開いて
mysql -u root -p を実行するとログインできる

2013年12月2日月曜日

App Inventorサーバ構築

Googleから提供されていたApp Inventorがオープンソースになったので、ローカルでサーバを構築できるようになりました。

必要なもの
・Oracle Java SE(JREでなくJDKが必要)

設定
1.Oracle Java SEをインストールします。そして、java.exeが使えるように環境変数を設定してください。※環境変数の設定については様々なサイトで説明されているので、省きます。

2.取得済みのファイルを展開します。オススメはCドライブ直下です。

AI4A-Configsは執筆時点でV1.4.7です。

これで設定終了です。

3.展開したフォルダ内のcmdファイルを起動
・Buildサーバ
C:\V1.4.7\AppEngine\launch-buildserver.cmd


・AppInventorサーバ
C:\V1.4.7\BuildServer\startAI.cmd

上記2つのcmdファイルを起動します。

AppInventorサーバ側:情報:The admin console is running at http://localhost:8888/_ah/admin

Buildサーバ側:Server Running

と表示されていれば成功です。

Webブラウザからhttp://localhost:8888/
にアクセスするとAppInventorサーバが利用できます。


2013年10月18日金曜日

Google App Engine:アプリケーションのアップロード

Google App Engine:アプリケーションのアップロードをするときのメモです。

1.Google Accountを取得、利用登録をしておく
2.https://appengine.google.com/ の管理コンソールにログインし、[
Create Application」をクリック


3.アプリケーションの情報を入力します。
Create Applicationボタンをクリックします

4.EclipseでAppエンジンにデプロイをクリックします。

App Engine プロジェクト設定をクリックします
先ほどのアプリケーションIDを入力します。

配置をクリックします。


アプリケーションIDを下記のURLに置き換えてアクセスします
http://application-id.appspot.com/ 
※注 アプリケーションIDの前に「1.」がつきました。
これでないとエラーになってしまいました(後で調べる)

今回はjspからスタートだったので
1.fe2011s8.appspot.com/FE2011S_8.jsp のようにアクセスしました

無事に実行ができました

2013年10月15日火曜日

Google App Engine for Javaの環境設定

授業で利用するGAE for Javaの設定メモです。

1.Eclipseの設定
ヘルプ->新規ソフトウェアのインストール->追加
GAE
 http://dl.google.com/eclipse/plugin/4.2 (4.2はバージョン)
・Google plugin for Eclipse
・SDKs
をチェック、インストール

2.プロジェクトの作成
プロジェクト->Google->Webアプリケーション・プロジェクト
 
プロジェクト名:TestGAE01
パッケージ名:jp.sangi.testgae01
 
※Google web tool kitのチェックを外します(使いません)
 
プロジェクトが作成されたら実行してみます。
 
ブラウザでアクセスします。 
 
 リンクをクリックすると
となります。
 
 
Google web tool kitにチェックを入れた場合もやってみます。
同様にプロジェクトを作成します。
 
実行します。
実行画面にリンクが表示されるのでダブルクリックします。


ダブルクリックすると
GWT Developer Plugin
を求められるのでchromeに追加します。

ブラウザが開いて実行画面になります。
 

※ただし非常にアプリが重たく、ハイスペックなPCが必要となります。


※GAEをEclipseで実行すると、下記のようなメッセージが出力され実行できない事象が発生しました。
Usage: [options]
[対応方法]
実行設定を削除する。
1.プロジェクトを選択 → 右クリック → Propertiesを選択
2.Run & Debug Settingを選択
3.右ペインにある設定を全て削除する。

参考:http://blog.livedoor.jp/kotani08/archives/51888874.html

2013年10月4日金曜日

Ubuntu12.04.2の環境設定

授業で利用するUbuntuイメージ作成メモです。

1.Virtualboxをダウンロード:インストール
2.ubuntu-ja-12.04.2-desktop-i386.isoをダウンロード
3.新規仮想ディスクを作成し、2のイメージを指定しUbuntuをインストール
4.コピペができるよう上のメニューから「Guest Additionsのインストール」をして、再起動
5.デバイス->クリップボードの共有->双方向にする
4.Terminalの開き方がわからない。Dashホームで「terminal」といれると「端末」が出てきた。

[Javaのインストール]
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-jdk7-installer
$ java -version
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) Client VM (build 24.0-b56, mixed mode)
でOKです。

[Eclipseの設定]
1. eclipse-java-kepler-SR1-linux-gtk.tar.gz をダウンロード
2.展開し、できたEclipseフォルダごとホームディレクトリに移動(日本語がディレクトリにはいらないように)
3.起動してHelloWorldを実行してみる

[MySql、phpMyAdminの設定]
$ sudo apt-get install mysql-server
$ sudo apt-get install phpmyadmin
$ sudo ln -s /usr/share/phpmyadmin /var/www
$ sudo service apache2 restart
http://localhost/phpmyadmin/ でアクセスできればOK


[VDIのコピー]
コマンドプロンプトで、Virtualboxのフォルダに移動
cd "C:\Program Files\Oracle\VirtualBox"
コピーを実行
VBoxManage clonevdi "C:\Users\mizuno\VirtualBox VMs\Ubuntu12.04.2\Ubuntu12.04.2.vdi" "C:\Users\mizuno\VirtualBox VMs\Ubuntu12.04.2\Ubuntu12.04.2-1.vdi"

ちなみにこのDVIは5.6GとなりDVDに書き込めず困りました。
ZIPにしたところ2.8Gになり、DVDでの配布ができました(100人にはUSBメモリが足らない)

2013年6月8日土曜日

Java:ClientLoginでGoogle認証

JavaでGoogle認証するには3つの方法があります。


1.ClientLogin
2.AuthSub
3.OAuth

この中でClientLoginをやってみました(OAuthがGAEなどで主流ですが、訳ありです)。

(i) GData ライブラリの追加
https://code.google.com/p/gdata-java-client/downloads/list
gdata-samples.java-1.47.1.zipをダウンロードして展開します。

(ii)Eclipseでプロジェクト作成
例えば
プロジェクト名:Prog_google
パッケージ:なし(つけてもOK)
クラス名:ClientLogin

ビルドパスから外部Jarファイルの追加で先ほど展開したgdata->java->lib の必要なものをインポートします(必要なものがわからなければ全部インポートしてください)

(iii)クラスの作成
以下のコードをクラスに書きます


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.*;
import java.util.StringTokenizer;

public class ClientLogin {

          /**
           * URL used for authenticating and obtaining an authentication token.
           * More details about how it works:
           * http://code.google.com/apis/accounts/AuthForInstalledApps.html
           */
          private static final String AUTHENTICATION_URL = "https://www.google.com/accounts/ClientLogin";

          private String EMAIL ;
          private  String PASSWORD;
          private String SERVICE;

        public static void main(String[] args) {
          ClientLogin cl = new ClientLogin(args[0], args[1], args[2]) ;
          System.out.println(cl.authenticate());
        }

        public ClientLogin(String email, String password, String service){
                this.EMAIL = email;
                this.PASSWORD = password;
                this.SERVICE = service;
        }

          /**
           * Retrieves the authentication token for the provided set of credentials.
           * @return the authorization token that can be used to access authenticated
           *         Google Base data API feeds
           */
          public String authenticate() {
            // create the login request
            String postOutput = null;
            try {
              URL url = new URL(AUTHENTICATION_URL);
              postOutput = makeLoginRequest(url);
            } catch (IOException e) {
              System.out.println("Could not connect to authentication server: "
                  + e.toString());
              System.exit(1);
            }

            // Parse the result of the login request. If everything went fine, the
            // response will look like
            //      HTTP/1.0 200 OK
            //      Server: GFE/1.3
            //      Content-Type: text/plain
            //      SID=DQAAAGgA...7Zg8CTN
            //      LSID=DQAAAGsA...lk8BBbG
            //      Auth=DQAAAGgA...dk3fA5N
            // so all we need to do is look for "Auth" and get the token that comes after it

            StringTokenizer tokenizer = new StringTokenizer(postOutput, "=\n ");
            String token = null;

            while (tokenizer.hasMoreElements()) {
              if (tokenizer.nextToken().equals("Auth")) {
                if (tokenizer.hasMoreElements()) {
                  token = tokenizer.nextToken();
                }
                break;
              }
            }
            if (token == null) {
              System.out.println("Authentication error. Response from server:\n" + postOutput);
              System.exit(1);
            }
            return token;
          }


          /**
           * Makes a HTTP POST request to the provided {@code url} given the provided
           * {@code parameters}. It returns the output from the POST handler as a
           * String object.
           *
           * @param url the URL to post the request



           * @return the output from the Google Accounts server, as string
           * @throws IOException if an I/O exception occurs while
           *           creating/writing/reading the request
           */
          private String makeLoginRequest(URL url)
              throws IOException {
            // Create a login request. A login request is a POST request that looks like
            // POST /accounts/ClientLogin HTTP/1.0
            // Content-type: application/x-www-form-urlencoded
            // Email=johndoe@gmail.com&Passwd=north23AZ&service=gbase&source=Insert Example

            // Open connection
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();


            // Set properties of the connection
            urlConnection.setRequestMethod("POST");
            urlConnection.setDoInput(true);
            urlConnection.setDoOutput(true);
            urlConnection.setUseCaches(false);
            urlConnection.setRequestProperty("Content-Type",
                                             "application/x-www-form-urlencoded");

            // Form the POST parameters
            StringBuilder content = new StringBuilder();
            content.append("Email=").append(URLEncoder.encode(EMAIL, "UTF-8"));
            content.append("&Passwd=").append(URLEncoder.encode(PASSWORD, "UTF-8"));
            content.append("&service=").append(URLEncoder.encode(SERVICE, "UTF-8"));
            content.append("&source=").append(URLEncoder.encode("Google Base data API", "UTF-8"));

            OutputStream outputStream = urlConnection.getOutputStream();
            outputStream.write(content.toString().getBytes("UTF-8"));
            outputStream.close();

            // Retrieve the output
            int responseCode = urlConnection.getResponseCode();
            InputStream inputStream;

            if (responseCode == HttpURLConnection.HTTP_OK) {
              inputStream = urlConnection.getInputStream();
            } else {
              inputStream = urlConnection.getErrorStream();
            }

            return toString(inputStream);
          }

          /**
           * Writes the content of the input stream to a String.
           */
          private String toString(InputStream inputStream) throws IOException {
            String string;
            StringBuilder outputBuilder = new StringBuilder();
            if (inputStream != null) {
              BufferedReader reader =
                  new BufferedReader(new InputStreamReader(inputStream));
              while (null != (string = reader.readLine())) {
                outputBuilder.append(string).append('\n');
              }
            }
            return outputBuilder.toString();
          }


}
もとはここからhttp://gcs-admin-toolkit.googlecode.com/svn/trunk/src/apiinsert/ClientLogin.java

(iv)実行
これを実行するには3つの引数が必要です。
this.EMAIL = email;
this.PASSWORD = password;
this.SERVICE = service;
これがmain関数の引数になっています。

Eclipseでmain関数の引数を指定するには、実行->実行構成->引数を指定します。
第1引数がメールアドレス、
第2引数がパスワード
第3引数がサービス名です。
サービス名は図のようになっています。
 

これで実行して認証がうまくいけば、トークンが返ってきます。
ダメな場合はエラーが表示されます。
この認証後、トークンを使ってサービスを利用できます。




2013年4月22日月曜日

Windows8でVirtualBoxを動かす際の注意点おぼえがき

Windows8でVirtualBoxを動かし、仮想でCentOSをインストールした際に困ったことを書いておきます。

CentOSを全て設定した後、再起動時にエラーが出て起動できなくなってしまいました。

そこで、VirtualBoxをフルスクリーンモードに切り替えて再起動すると、先ほどのエラーが起きなくなりました。

エラーで落ちている人はフルスクリーンモードを試してください。

2013年3月1日金曜日

AmazonEC2でのディスク容量の変更

AmazonEC2でディスク容量が足らなくなった場合に増やす方法です。
EBSを外付けでやる方法もありますが、同じディスクの容量を変更する場合です。

1.インスタンスを一旦ストップし、AMIを作成する。
2.AMIを選択してLaunch
3.Storage DeviceのところでEditをクリック

4.Volume Sizeでサイズを指定して「Save」(忘れやすいです)

5.後はもろもろ決めて起動します。
6.最後にSSH等でログインして
# df
で確認すると変わっていません。

# resize2fs /dev/sda1

を実施すると変更されます。dfでチェックするとちゃんと変わっています。

Ubuntu12.04 Java6インストール方法

Android4.0を起動するために、Java6が必要になったのでインストール方法を書いておきます。

$sudo add-apt-repository ppa:webupd8team/java

$sudo apt-get update

$sudo apt-get install oracle-java6-installer

インストーラーを使ってインストールします。
$java -version

java version "1.6.0_41"
Java(TM) SE Runtime Environment (build 1.6.0_41-b02)
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01, mixed mode)

これでインストール完了です。

ちなみにバージョンの切り替えは以下のコマンドで行います。
$sudo update-alternatives --config java



2013年2月20日水曜日

ガウスの消去法 Javaライブラリ

ガウスの消去法をJavaで解かせるためのライブラリです。
下記リンク内にEclipse用のプロジェクトがあるので、参考にして下さい。
https://docs.google.com/a/sangi.jp/file/d/0B5hI-TWePsTWa3RDSjY4NHlHM1U/edit?usp=sharing

以下ソースコードです。


package Gauss_lib;

//1.Gauss_libクラスのオブジェクト生成
// Gauss_lib gauss_lib = new Gauss_lib(n);//次元数nをコンストラクタに設定
//2.係数行列の引き渡し
//double T[][] = {{2,4,2,8},{4,10,3,17},{3,7,1,11}};
//gauss_lib.setT(T);//係数行列の引き渡し
//3.計算用エンジン呼び出し
//gauss_lib.gauss();//ガウスエンジン呼び出し
//4.解を得る
//x = gauss_lib.getx();//解を取り出す

public class Gauss_lib {
//フィールド
int n;
//配列の初期化
double [] x; //解
double [][] T ;//係数行列格納用配列
//コンストラクタ
public Gauss_lib(int n){
this.n = n;
x = new double[n];//解を代入する配列
T = new double[n][n + 1];//係数行列
}
public int getN(){//数値を出力
return n;
}

public double[] getx(){//解の受け渡し
return x;
}
public void setT(double[][] n){//係数行列の受け渡し
T = n;
}

public  void gauss() {
        int i,j,k,l,pivot;
        double p,q,m;
        double b[] = new double [n + 1];

        for(i=0;i<n;i++) 
        {
                m=0;
                pivot=i;

                for(l=i;l<n;l++) 
                {
                        if(Math.abs(T[l][i])>m) //i列の中で一番値が大きい行を選ぶ 
                        {   
                                m=Math.abs(T[l][i]);
                                pivot=l;
                        }
                }

                if(pivot!=i)    //pivotがiと違えば、行の入れ替え 
                {                          
                        for(j=0;j<n+1;j++) 
                        {
                                b[j]=T[i][j];        
                                T[i][j]=T[pivot][j];
                                T[pivot][j]=b[j];
                        }
                }
        }

        for(k=0;k<n;k++) 
        {
                p=T[k][k];              //対角要素を保存
                T[k][k]=1;              //対角要素は1になることがわかっているから

                for(j=k+1;j<n+1;j++) 
                {
                        T[k][j]/=p;
                }

                for(i=k+1;i<n;i++) 
                {
                        q=T[i][k];

                        for(j=k+1;j<n+1;j++) 
                        {
                                T[i][j]-=q*T[k][j];
                        }
                        T[i][k]=0;              //0となることがわかっているところ
                }
        }

/*解の計算*/
        for(i=n-1;i>=0;i--) 
        {
                x[i]=T[i][n];
                for(j=n-1;j>i;j--) 
                {
                        x[i]-=T[i][j]*x[j];
                }
        }
}
}

2013年2月8日金曜日

UbuntuでEclipseが立ち上がらなくなったときの対応

Ubuntu上でEclipseを動かしていると急に起動出来なくなるときがあります。
その場合はワークスペースを切り替えると起動できますが、毎回切り替えも大変です。

まずワークスペース内の「.metadata」ディレクトリを削除します。
そのあとUbuntuを再起動すれば大丈夫のようです。

2013年1月31日木曜日

AmazonEC2で作成したAndroidアプリを実機にインストールする方法

AmazonEC2で作成したVPS(Windows)ではUSBデバッグ接続ができません。
そこでAmazonEC2側でapkを出力して、Dropboxで端末側と共有して、端末側でインストールできる様にします。

1. Dropboxの準備
AmazonEC2側と端末側(タブレット)で同じアカウントでログインし、同期しておきます。

2. AmazonEC2側:Eclipseからapkファイルの出力
出力したいプロジェクトで右クリック
->Android Tools -> Export Signed Application Package

-> Projectを確認

->  Create new keystone を選択。key名を入力(例えばsample key)、パスワードを入力

-> Key Creation で例えば図のように入力します(パスワードは上と同じ)

-> Dropboxを指定してapkを作成します。
-> あとは作成されたapkを端末側で同期してクリックしてインストールします。
もちろん端末側で「不明なアプリをインストールする」設定が必要です。

既にkeyは作成したので、次からはこのkeyを指定して行います(パスワードは同じ)

2013年1月21日月曜日

Nexus7ドライバ手動インストール方法

Nexus7のドライバがWindowsUpdateから自動的にダウンロードできない事態が発生したので、手動インストール方法を書いておきます。

1.下記URLより、AndroidSDKをダウンロードします。
  http://developer.android.com/sdk/index.html

2.AndroidSDK内のAndroidSDKマネージャーを起動し、[Extras]内にある[Google USB Driver]へチェックを入れてインストールします。

3.ドライバをインストールした後、デバイスマネージャーを開き[adt-bundle-windows-x86\sdk\extras\google\usb_driver]にドライバが存在するので、こちらを指定してインストールします。

以上でNexus7のドライバインストールが完了しました。

2013年1月17日木曜日

CentOS6.2でVNC/GNOMEを動かす方法

CentOS5.5の頃と設定方法が若干違うので、書いておきます。

今回の環境
VPS:AmazonEC2
ディストリビューション:CentOS6.2

1.最初にXWindowシステムと各種デスクトップテーマをgroupinstall を使って関連コンポーネントを丸ごとインストールします。

#yum groupinstall "X Window System" "Desktop"

2013/02/28追記------------------------------------------------------------------------------------------------------------
#yum install tigervnc-server をインストールした方が安定するようです。上記のインストールができなかった人はこちらを試して下さい。
------------------------------------------------------------------------------------------------------------

2.VNCサーバをインストールします。
#yum install vncserver

3.VNC接続を行いたいユーザーを指定します。
「1:ユーザー名」にポート番号5901
「2:ユーザー名」にポート番号5902が利用されます。
#vi /etc/sysconfig/vncserver

VNCSERVERS="1:<ユーザー名>"
VNCSERVERARGS[1]="-geometry 800x600 -nolisten tcp"

4.ユーザーを切り替えてVNCのパスワードを設定します。
#su - <ユーザー名>
$vncpasswd
Password:
Verify:
$exit

5.VNCサーバを起動し、xstartupを作成します。
#/etc/init.d/vncserver start

6.VNC利用時のデスクトップをGNOMEに設定します。
#su - <ユーザー名>
$vi ~/.vnc/xstartup

# twm &           #コメントアウト
exec gnome-session & #追加する。

7.自動起動設定
#chkconfig vncserver on

起動確認
#chkconfig --list vncserver
vncserver           0:off   1:off   2:on    3:on    4:on    5:on    6:off

8.VNCの起動
#/etc/init.d/vncserver restart

psコマンドで起動の確認をおこないます 。

# ps ax |grep vnc
4263 ?        S      0:00 /usr/bin/Xvnc :1 -desktop serv200:1 (hoge) -auth /home/hoge/.Xauthority - geometry 800x600 -rfbwait 30000 -rfbauth /home/hoge/.vnc/passwd -rfbport 5901 -fp catalogue:/etc/X11  

これでVNCの設定は終了です。
RealVNCでVNCに接続します。


2013年1月16日水曜日

Your Project contains error s please fix them before running your applicationエラー

Androidを久しぶりに実行すると「Your Project contains error s please fix them before running your applicationエラー」といったエラーが表示されるようになってしまいました。
何回クリーンをかけても同じエラーが出てしまいます。

いろいろ調べてみると、「debug.keystoreの有効期限切れ」ということのようです。
これがどこにあるか、調べるためには『Eclipse』→『ウインドウ』→『Android』→『ビルド』内の『デフォルトデバッグキーストア』へ書かれているパスを調べます。

ここに書かれているファイルを削除し、クリーンした後に再ビルドすると実行可能となります。

Nexus7ドライバセットアップ

Nexus7のドライバは自動的にインストールされますが、自動インストールに失敗することがあります。
そこで、手動でインストールする方法を書いておきます。


Android SDKマネージャーより、「Google USB Driver」を選択しインストールします。


すると、ドライバがインストールされるので、デバイスマネージャより「adt-bundle-windows-x86\sdk\extras\google\usb_driver」を選択し、インストールを行う。
以上でNexus7のドライバをインストールすることができます。

2013年1月1日火曜日

AmazonEC2:SSH接続:公開鍵が変わったときの対応

AmazonEC2ではIPアドレスの付け替えが簡単にできます。
接続先のIPアドレスを変更した場合、公開鍵が変更されて接続できなくなる場合があります。
その場合は
ssh-keygen -R ***.***.*.*(サーバー側IPアドレス)
を実行します。MACで実行したところ、うまくいきました。