GoFのデザインパターンのSingletonをおさらいしてみた

GoFのデザインパターンのSingletonをおさらいしてみました

Singletonはクラスのインスタンスが1つしか存在させたくない時や、使いまわせるインスタンスは使いまわしてnewのコストを減らすのに使ったりします

phpで書くとこんな感じ


class Singleton
{
    private $_id;

    protected function __construct()
    {
        $this->_id = md5(date('r') . mt_rand());
    }   

    public static function getInstance()
    {   
        static $instance = null;
        if ($instance === null) {
            $instance = new static;
        }   
        return $instance;
    }   

    private function __clone()
    {   
    }   

    private function __wakeup()
    {   
    }   

    public function getId() {
        return $this->_id;
    }   
}

class SingletonChild extends Singleton
{
}

$one = Singleton::getInstance();
echo $one->getId(), PHP_EOL;
$one = Singleton::getInstance();
echo $one->getId(), PHP_EOL;

$two = SingletonChild::getInstance();
echo $two->getId(), PHP_EOL;

コンストラクタをprotectedにすることでnewできなくして
__cloneをoverrideしてprivateに
__wakeupをoverrideしてprivateにすることで
インスタンスのコピーも作れなくなります
1度つくられたインスタンスを保持して使いまわします
継承クラスでは別のインスタンスになります
参考) http://ja.phptherightway.com/pages/Design-Patterns.html

auのキャリアメール(@ezweb.ne.jp)を転送する

auのガラケーとsimフリーのスマフォ2台持ちですが
キャリアメールに気づかないことが多々ありました..

そこでauのキャリアメールを、GmailやYahooメールに転送しようと思ったら簡単でした
http://csqa.kddi.com/posts/view/qid/k1112050108

2件まで転送先が設定できます
Yahoo!コミュニケーションメール(@yahoo.ne.jp)には届かないのはなぜだろう..(あきらめました)
追記)迷惑メールとしてブロック、また、転送でなりすましメールと判定されてるようでした

調べてたら勝手に携帯に設定して浮気調査とかに使うそうで..こわいこわい

Android公式サイトのトレーニング「 Adding the Action Bar」をAndroid Studioしてみた

Android公式サイトのトレーニング「Building Your First App」をAndroid Studioしてみた
につづき「Adding the Action Bar」をAndroid Studioしてみました
http://developer.android.com/intl/ja/training/appbar/index.html

「Building Your First App」ではそのままアプリができましたが、今回はそのままできるようにはなってないようです
Android Studio 0.8.9 でやったときの差とコメントを書いていきます
※ 後半、めんどうだったので省略してます

Adding the Action Bar
Action Barの説明

Setting Up the Action Bar
-> Support Android 3.0 and Above Only
<uses-sdk .. はbuild.gradleにある

-> Support Android 2.1 and Above
対応予定がないので、今回は飛ばした

Adding Action Buttons
Action Buttonsの説明

-> Specify the Actions in XML
プロジェクト作成時にBlank Activityを選ぶと、デフォルトではmenu/my.xmlがAction Barの設定になる
英語でroomは、使える場所、余地

@drawable/ic_action_search がないため追加する
resフォルダを右クリック、New、Image Asset
(Android Studioをインストールしたディレクトリ) /sdk/platforms/android-19/data/res/drawable-ldpi/ic_search_category_default.png
を選択、Resource Nameをつけて追加

-> Add the Actions to the Action Bar
Android Studioではデフォルトの
[java]
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.my, menu);
return true;
}
[/java]
で動作する

-> Respond to Action Buttons
Action Buttonをタップすると、onOptionsItemSelected()が呼ばれ、IDで区別して動作を作成する

-> Add Up Button for Low-level Activities
API level 16以上だと戻るボタンの実装は簡単でManifest.xmlに親のアクティビティを指定するだけでいい

Styling the Actin Bar
Androids’s style and themeを使えば、action barのスタイルがかえられる

-> Use an Android Theme
android:themeは<application>や<activity>ごとにつけられる

-> Customize the Background
For Android 2.1 and higher
は飛ばしました

res/values/themes.xmlでなくres/values/styles.xmlを参照
drawableで色をしているがファイルがない(自分でつくる?)

CustomizeActionBarThemeがPreviewウィンドウで反映されない?
と思いましたが、Emulatorで動かすと効いてました
Preview画面では上部のThemeをCustomizeActionBarThemeに変更すると反映されます

-> Customize the Text Color
android:titleTextStyleでAction Barのスタイル指定
android:actionBarTabTextStyleでActionBarTabのスタイル指定
android:actionMenuTextColorでAction Barのテキストカラー

MyActionBarTitleText、actionBarTabTextStyleでActionBarTab内の
TextColorを設定するとそちらが有効になる(actionMenuTextColorよりも)

-> Customize the Tab Indicator
drawableのものが色々足りない
ページ上部のYou should also readのところの
Android Action Bar Style Generator
でダウンロードして持ってこれる

名前つけずにダウンロードすると同じファイル名になる
unzipして、プロジェクトのresディレクトリに放り込む

Tab Indicatorを作るのが面倒だったので、省略..

Overlaying the Action Bar
hide()やshow()でAction Barを隠したり出したりできるが再描画が走るので効率がよくない
overlay modeで解決できる

-> Enable Overlay Mode
–> For Android 3.0 and higher only
android:windowActionBarOverlayをtrueに指定すればoverlay mode

–> For Android 2.1 and higher
飛ばしました

-> Specify Layout Top-Margin
overlay modeのとき、Action Barのしたに常にlayoutを出すならマージンを指定
android:paddingTop=”?android:attr/actionBarSize”

ドットインストールを使ってAndroidアプリ開発をしてみた

ドットインストールのAndroidアプリの講座をみてみました
まだあんまりないAndroid Studioでのサンプルで助かりました
覚えられることと、ポイントをメモします

ドットインストールの有料会員しか見れないものがほとんどです

Androidアプリ開発入門

http://dotinstall.com/lessons/basic_android
(覚えられること)
開発環境の構築
ログの出し方
クリックイベントの書き方

Androidレイアウト入門

http://dotinstall.com/lessons/basic_android_layout
(覚えられること)
LinearLayout
RelativeLayout
FrameLayout

(ポイント)
fill_parent/match_parent、で親要素めいいっぱいに広がる
match_content、で内容の大きさで広がる
gravity/layout_gravity、で位置を変更
layout_weight、でオブジェクトの大きさを比率で設定

Androidでおみくじアプリを作ろう

http://dotinstall.com/lessons/omikuji_android/
(覚えられること)
RelativeLayoutの画面の作り方
プログラムの書き方

(ポイント)
R.layout.activity_my
はresディレクトリ>layout>activity_my.xmlの参照

アクションバーを消す
AndroidManifest.xml
android:theme=”@android:style/Theme.Holo.Light.NoActionBar

Androidで姓名診断アプリを作ろう

http://dotinstall.com/lessons/namescore_android
(覚えられること)
2つ目の画面の作り方、データの渡し方
入力値のチェック、画面へアラートを出す

(ポイント)
EditText.setErrorでEditTextに警告が出せる
Toast.makeTextで下のほうに出る警告が出せる
AlertDialog、AlertDialog.Builderでポップアップの警告が出せる
Intentをつかって、違う画面を呼び出せる

Androidでストップウォッチを作ろう

http://dotinstall.com/lessons/stopwatch_android
(覚えられること)
時刻の差の取り方
Timerによる画面の値の更新

(ポイント)
SystemClockで時計の値がとれる
Timerで定期的に実行できる
画面の値の更新はシングルスレッドでする必要があるためHandlerで行う
SimpleDateFormatで時刻表示のフォーマットをする

Androidでウェブブラウザを作ろう

http://dotinstall.com/lessons/browser_android
(覚えられること)
ウェブブラウザがAndroidアプリ内で動かせる
メニューの増やし方
タイトルバーの文字の変更

(ポイント)
WebViewを使ってウェブブラウザを実装できる
インターネット通信をする許可をManifestファイルに書く
 
デフォルトではJavascriptが無効になる

Androidリストビュー入門

http://dotinstall.com/lessons/basic_android_listview
(覚えられること)
ListViewの使い方
ArrayListの使い方(動的配列)
HashMapの使い方(動的配列)
Classの作成
ViewHolderクラスをつくって、処理の高速化
setTag、getTagの使い方

(ポイント)
ListViewでwrap_contentは動作が重いため、match_parentに
ViewとのやりとりはAdapterでおこなう
setOnItemClickListnerでクリックイベントを設置
setEmptyViewでデータがないときのView
HashMapはSimpleAdapterを使う
BitmapFactory.decodeResourceでBitmapをセット
独自クラスのAdapterは独自Adapterでする
ViewLaout は画面に表示するぶんのViewだけ用意、スクロールすると画面からでたViewを再利用してViewを表示する
(最初から画面からはみでたViewは用意しない)

Androidでクイズアプリを作ろう

http://dotinstall.com/lessons/basic_android_listview
(覚えられること)
テキストファイルの読み込み
デバッガの使い方
画面の追加の仕方

(ポイント)
Intentで画面を呼び出す
startActivity(intent)で次の画面が起動
android:launchMode=”singleTask”で次の画面を起動しても一つの画面
元のActivityの戻るとonNewIntent()が呼ばれる