ノンプログラマー・プログラミング・ガイド

ほぼ独学。もはやおっさんになりかかってからプログラミングの勉強開始。HTML、CSS、JavaScript、SQL、PHP、Javaがなんとなく解る。Joomla!とandroidで書いたプログラムを配布中。iPhoneアプリ作りたいからMacくれ(下さい)。

カテゴリ: プログラミング

ローカルの設定

ローカルの設定は、phpMyAdminフォルダーにあるconfig.inc.phpを書き換える必要があります。

こんな感じに書かれているので
/*
 * First server Localhost
 */
$i++;

/* Authentication type and info */
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['AllowNoPassword'] = true;

/* User for advanced features */
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = '';

/* Advanced phpMyAdmin features */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['relation'] = 'pma_relation';
$cfg['Servers'][$i]['table_info'] = 'pma_table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma_column_info';
$cfg['Servers'][$i]['history'] = 'pma_history';
$cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
$cfg['Servers'][$i]['tracking'] = 'pma_tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma_userconfig';


/* * AWSのサーバーを追加する */ $i++;


/* あとは、サーバーの設定値を入力していく */ //$cfg['Servers'][$i]['auth_type'] = 'http'; //$cfg['Servers'][$i]['auth_type'] = 'config';
このあとに$i++を追加して、サーバーの設定値を入力すれば、ローカルにあるサーバー情報を残したまま、AWSのサーバーを追加できます。

/*
 * AWSのサーバーを追加する
 */
$i++;

/* Authentication type and info */
$cfg['Servers'][$i]['auth_type'] = 'config';

/* サーバーのURLを入力 */
$cfg['Servers'][$i]['host'] = 'xxx.xxxxx.xxxxx.rds.amazonaws.com';
//ポートは、何もいじってなければ、3306 $cfg['Servers'][$i]['port'] = '3306'; /* データベースを作成したときのユーザー名*/ $cfg['Servers'][$i]['user'] = 'username';
/* パスワード */ $cfg['Servers'][$i]['password'] = 'パスワード';
$cfg['Servers'][$i]['extension'] = 'mysql'; $cfg['Servers'][$i]['AllowNoPassword'] = false;

 これで、PhpMyAdminにアクセスすると、サーバーの選択が可能になります。続きを読む



笑顔評価アプリ SmileScore

_r2_c3
OpenCV使って、笑顔を評価するアプリ作りました!無料です!使ってください!笑顔検出して、エッジを検出して、目頭、目尻、口の端の点を検出してるんですが、なかなか大変だった・・・。うまく評価できない場合も多々あります。まぁ、しゃーない。



笑顔認識でシャッターをきるSmilePics

_r2_c3bbbbbbbbbbb
こちらも同じくOpenCVを使って、笑顔認識でシャッターをきるAndroidアプリです。有料(150円)です。(このブログへの応援の意味を込めて、買ってくれる素敵な人がいっぱいいるんじゃないのかとこっそりと思ってます)。




Androidデバイスは、Nexus7しか持ってないので、携帯でテストしてないんですよね・・・・。たぶん、きっと動くはず・・・。

自分のアプリからウェブサイトを開く方法です。なんかのページでもいいし、Google PlayのURLでもオッケーです。Google PlayのURLを指定すると、そのままGoogle Playのアプリが開くみたい。

Intent httpIntent = new Intent(Intent.ACTION_VIEW);
httpIntent.setData(Uri.parse("https://play.google.com/store/apps/details?id=com.hssmiles.smilepics"));

startActivity(httpIntent); 

インテントにURLを渡してやるだけ。簡単 

共有ボタンは、アプリのテキストをTwitterでツイートできるようにしたり、Google+を使って投稿できるようにするボタンです。Androidのデフォルトのギャラリーアプリなんかにも仕込んであります。

Android4.0(API14)以降だと、Actionbarを使ってできるみたい(詳細→Adding an Easy Share Action)ですけど、ここでは、暗黙のインテント(?)を使って共有ボタンを仕込みたいと思います。結構簡単。


//
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);

//テキストを指定
shareIntent.setType("text/plain");

//タイトルの指定
shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Title");


//メッセージ本文の入力
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Message");

//アプリの一覧を表示
startActivity(Intent.createChooser(shareIntent, "Select App"));	

TwitterやGoogle+なんかは、うまく表示されるんですけど、Facebookは、なんでか文章が挿入されません。いろいろと試してみたんですけど、なにかしらのリンクのみは反応するみたい・・・。EXTRA_TEXTでhttp://cuuma.publog.jpとリンクのテキストをいれると、ちゃんとリンクは表示されます。が、他にテキストをいれても渡されません・・・。結果、よくわかりません・・・。

 

Activity間の値の受け渡しでは、Intentに値を渡してやって、呼び出し先のActivityからIntentの値をとってやるってなやりかたがあるんですが、面倒くさいです!ちょっとした値の受け渡しならいいんですけどね。どーすればいいのかと考えたところ、こんなやりかたがあるのかと・・・。シングルトンとか呼ばれるやつなのかな・・・?


解決策 値を保持するstaticなクラスを作る

値を保持するクラスを作ってやればいいのかと。DataHolderのインスタンスはひとつだけ作成するようにして、常にDataHolder.getInstance()から呼び出すようにすれば、データはひとつのインスタンス内に保持されます。たぶんきっとこんな感じ。
public class DataHolder{
	
	
	static DataHolder _instance = null;
	
	/**
	 * 常にこのメソッドから呼び出すようにする
	 * 
	 * 
	 * @return
	 */
	static public DataHolder getInstance(){
		if(_instance==null){
			_instance = new DataHolder();
		}
		return _instance;
	}
	
	
	
	String test ="AAAAAAAAAAAAAAAAAAAA";
	
	public String getTestString(){
		return test;
	}
	
	public void setTestString(String txt){
		this.test = txt;
	}
}
 
たとえば、Activity Aで、こんな感じで値を渡してやれば、
DataHolder holder = DataHolder.getInstance();
holder.setTestString("Passed String on Activity A!");

Activity Bでは、こんな感じで値を取れます。
DataHolder holder = DataHolder.getInstance();
holder.getTestString();

まず、Activity AでgetInstanceを呼び出したときには、_instanceは生成されていないので、新しく作られます。で、その_instance内に値を渡してます。次に、Activity BでgetInstance()で呼び出した_instanceは、ActivityAで作成した_instanceが残っているので、Ativity Aの_instanceと同じものです。

細かく言うと、A->B->Aって戻った場合は、最初のAで作成したDataHolderが残ってるので、値を初期値にするようなメソッドが必要な場合もあるのかと・・・。まぁ、しらね。



 で、ここまでは、普通に思いついたんですけど、いろいろみているとなにやらApplicationなるクラスが用意されている模様です。このクラスを拡張したほうが、もっと永続的にデータが保持されるぜwwwwってコメントを見かけたんですけど、真偽不明。Android DevelopersのReferenceには、Applicationのクラスは、ほぼ使う必要ねーよって書かれてるし・・・。アプリのContextが取れるのがいいのかな・・・?

Applicationを拡張して、値を保持するクラスを作る


ほぼ一緒。違いは、Applicationをextendsしてるだけです。
public class DataHolder extends Application{
	
	
	static DataHolder _instance = null;
	
	/**
	 * 常にこのメソッドから呼び出すようにする
	 * 
	 * 
	 * @return
	 */
	static public DataHolder getInstance(){
		if(_instance==null){
			_instance = new DataHolder();
		}
		return _instance;
	}
	
	
	
	String test ="AAAAAAAAAAAAAAAAAAAA";
	
	public String getTestString(){
		return test;
	}
	
	public void setTestString(String txt){
		this.test = txt;
	}
}

あと、manifest.xmlのapplicationのnameをクラス名にしてやる必要があるみたい。
    <application
        android:name=".DataHolder"  >



 

このページのトップヘ