2011年1月28日金曜日

Facebook Creditという仮想通貨 ~錬金術は銀行からエンジニアへ~

最近、FaceBookの動きが活発です。
今年は本格的にFacebook Creditを導入する計画らしく、個人的にとても注目しています。

お金の価値は、金額ではなく信頼性にあります。
5億人を超えるユーザーがいるFacebook Creditという仮想通貨の信頼性が高まれば、そこらへんの新興国の通貨より価値が出てくる可能性もあります。

今後は、各社のスマートフォンにNFCが対応していきます。それは、Facebook Creditとスマートフォンが連携し、現実の通貨として利用できる時代の到来を予感させます。
 
 日本では、FaceBookはあまり使われていないのが現状です。私もユーザ登録はしていますが、周囲の人が使ってないので、やはり利用頻度は低いです。
 しかし、これがFacebook Creditの導入により、コンビニやスーパーの決済で利用できるようになったら、話は別です。
 Facebook CreditがスマートフォンのNFCにより管理が可能となり、現実世界で利用できるようになれば、FaceBookはあっというまにSNSのNo1プラットフォームに躍り出るでしょう。
これは十分にありえる話です。セブンイ○ブンとか普通にやりそうですw。
 もしそういう動きが起これば、私はすぐにFaceBookのアプリを作ります。サービスの課金は当然Facebook Credit。財政破綻が予想される日本円は使いません。リスク分散としても申し分ないです。税金は…かかるのかな??この場合どう計算するのでしょうかね。

 そのうちに、日本円で三千万の家が、二千万FaceBook Creditで売り出されるような時代がくるのかもしれません。(私は法律には疎いのでこれが法に違反しているかどうかはわかりません)。そうなればちょっとした世界通貨ですね。paypalはお役ご免です。
 
上記の事柄が現実になった世界では、エンジニアの目指すキャリアの最終目標も変わってきます。これまでは作成したサービスを浸透させて、巨万のお金を「得る」のが普通でした。しかしこれからは、サービスを浸透させて、お金を「作る」という時代が到来です。

こうなれば現在の銀行による世界支配の時代を終わりにできるかもしれません。
銀行のビジネスモデルは、みなさんが既に理解している通り、お金を貸して利子や手数料を稼ぐというものです。
 これはものすごく洗練されたビジネスモデルです。
 利子は100万円を110万や、時には150万円へと増やします。しかも、元手の100万円は、お客から集めたお金です。
 つまり銀行とは、お客のお金をお客に貸し出し、利子や手数料で稼ぐというビジネスです。よくITを実態のない虚業といって批判する人がいますが、銀行に比べたら全然です。
 銀行は借金という負債を、人の金で生み出す究極の虚業です。

 色々とよくない話もあるFacebookですが、世の中を大きく変えてくれるんじゃないかという期待があります。
Facebook Creditのような仮想通貨が広まれば、私たちの働き方・企業のあり方も大きく変わるでしょう。特に、WEBは若い世代の利用が中心で、既得権だらけの老年層や政治家の理解が浅いというのは大きな利点です。彼らが理解できないうちに、世の中のルールを変更してしまうことが可能だからです。

新興国の急速な発展で世の中の構造が変わってきていますが、こういった場でも徐々に世の中は変わってきています。
「英語の社内公用語化は失敗する」「ほとんどの人は英語が必要ない」
とかいっている日本は平和というか暢気ですよね。
間違いなく、世界は新しい方向へと向かっています。

Related Posts Plugin for WordPress, Blogger...

2011年1月26日水曜日

Android Tips keyboardの挙動メモ

keyboardの特定ボタンを押した場合に、特定のアプリを呼び出すという実装を試しました。
キーボードアプリとして、Googleのサンプルキーボードアプリを実装しました。
その際、調査のため色々といじくりまわしたので後学のためにメモを残します。
今後役に立つかは微妙ですが…私はキーボードアプリを作る気ゼロなので。

・Keyクラス

キーボードのキーの文字とポジションを描写するクラスである

qwerty.xml

<Row>
<Key android:codes="99" android:keyLabel="c"/>
<Key android:codes="118" android:keyLabel="v"/
</Row>


というqwerty.xmlがあるとすると、
キーボードの「c」を押下した場合、

KeyboardViewListenerを実装したクラスの
public void onKey(int primaryCode, int[] keyCodes) メソッドの
primaryCodeで

99

が取得できる。

また、
public boolean onKeyDown(int keyCode, KeyEvent event) メソッドの
keyCodeは

31(KeyEvent.KEYCODE_C)

が取得できる。

EditText上にカーソルがある状態でキーボードを押下すると、

onKey()

が呼ばれるようだ。

エミュレーターのキーボードを押すと
onKeyDown()

translateKeyDown()

onKey()
の順番で呼び出される。

onKey()以降でメイン処理が行われているようだ。

スペースキーを押すと、
onKey()

sendKey()
と呼び出される。

onKey()の中では、isWordSeparator()がtrueになる。
isWordSeparatorはstrings.xmlのword_separators属性で指定している。
InputConnectionクラスのcommitTextメソッドで、word_separators属性で指定した文字を設定している。

以降は、自分のやりたかった処理。
キーボードの「a」が押された場合に、他アプリのHelloWorldを呼びだす(aの文字はテキストエリアに挿入しない)。

onKeyメソッドに以下の処理を追加した。


public void onKey(int primaryCode, int[] keyCodes) {

if (primaryCode == 97) {
// a押下
String clazz = "co.hoge.sample.Test";
Intent intent = new Intent(Intent.ACTION_MAIN);

int idx = clazz.lastIndexOf('.');
String pkg = clazz.substring(0, idx);

intent.setClassName(pkg, clazz);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);
} else if () {
// 以降変更なし
}

}


とすると、co.hoge.sample.Testが起動する。
加えて、co.hoge.sample側のアプリのAndroidManifest.xmlファイルのIntentFilterに
android:schemeとandroid:hostを指定してやると、なお良い。

以上。 Related Posts Plugin for WordPress, Blogger...

今後プログラマーに求められそうな能力 

前回の言語編に続いて、今回は能力編です。
とはいえ今日取り上げる能力は、プログラマーも他の職業も、そんなに変わらないのではないかと思います。

・コミュニケーション力

当然ですね。人は、一人では生きていけません。
今後はリアルな周囲の人間環境だけでなく、ネットを介した繋がりも重要になり、ソーシャルメディアを活用するのが当たり前になるのではないでしょうか。

・会計(簿記)

ざっくりとしたお金の流れは知っておく必要があると思います。
簿記の資格をとるとか、公認会計士の勉強をするとかいう意味じゃありませんよ。
BS、PL、CFくらいは読めるようにしておきましょうということです。
結構見かけるのは「簿記2級まで取得したけど、内容はもう忘れた」みたいな人。これでは全く意味がないと思います。
おすすめなのは、ちょっとした金額で投資をはじめて、財務諸表に目を通すことです。基本的なことだけ勉強すればいいと思います。

・プレゼン力

自分を売り込む力を鍛えましょう。
日本と違い、グローバル社会では、謙譲の心は美徳じゃないですからね。
とことん攻めるべきです。

・マネジメント

既存の日本の会社の管理職のような、いい加減なマネジメントではありません。
きっちりとした体系だったマネジメントスキルを身につけましょう。

・数学・統計分析

これは今後エンジニアに要求され、なおかつ高給に繋がる能力だと思います。
当たり前ですが、受験勉強の数学ではありません。
3Dで扱うベクトルや行列、ビジネスに有効なデータを抽出する統計分析の力等です。


こんなところでしょうか。
色々ありすぎですね。もちろん全部身につけるなんて無理に決まっています。
時代の流れを読んで、自分の強みに合った能力を身につけるべきです。
ネットの発達と技術の進化で効率的に学ぶことが出来るようになったのに比例して、人に期待される能力はあがる一方になっています。
この傾向はしばらく続くでしょう。
20年を超える先の時代の社会は想像すらつかないので、生涯続けられるスキルを臨機応変に身につけることが必要になってきます。

さてさて、どんな未来が待っているのでしょうか。
でも、必死でくらいついていけば、きっとワクワクで素敵な未来が待っている。そんな気がします。

でわん Related Posts Plugin for WordPress, Blogger...

2011年1月24日月曜日

今後プログラマー(ITw技術者)に求められそうな言語

社会の流れが速すぎるこの頃。
今日は、今後プログラマーに求められる言語についてぼんやりと考えてました。
以下が結論。

・Java

これは必須ですね。すでにCと並ぶ基本言語ですね。

・Objective-C, C、C++等のC系

Objective-CはMac・iphone・ipad次第ですね。ただ、固定ファンが多く、お金が流れる市場がきちんと確立しているので、
趣味のソフトウェアでお金を稼ぐなら、Objective-C,やCに力をいれるほうがいいでしょう。
趣味プログラマーは絶対こっちがおすすめ。

・python

ダークホース。海外のフリーソフトをいじくりまわす人は必要だと思います。

・HTML5, css3, javaScript

多分5年後には、javaを抜いてメイン言語になりますね。まず間違いないでしょう。
javaやCはあくまで、HTML5, css3, javaScriptで出来ないことを実装するための補助的な言語になるでしょうね。
プログラマー的にはあまり想像したくない未来です…。でも、多分間違いないです。

・英語

すでに英語は必須ですね。
そもそも今でもandroid、objective-C、Html5を勉強するには、ある程度できないと話にならないです。
プログラマーうんぬんではなく社会人として必須になるでしょうね。
新卒のTOEICでの足切も本格的に始まるんじゃないでしょうか。

・中国語

職場でも中国の人がだいぶ増えてきました。
今は日本語を話せる中国の方が来てくれていますが、いずれ中国語が必要になるのはもう明らかな状況です。
ネット上の情報も飛躍的に増えてきてるので、中国語の習得は避けられないでしょう。
今の共産中国バブルが崩壊しても、シンガポール、香港、台湾は力を増大させ続けるでしょうから。
ただ、企業が就職要件として必須にするまでは10年くらいは猶予があると思います。
みなさんもちょこっとづつはじめましょう。ピンインからがっつりと。

・スペイン語

20年後先を見るならスペイン語も必要でしょう。
世界の三大言語は、英語・中国語・スペイン語になるのはほぼ決定的です。
ただ、スペイン語は日本語と相性が良いので、英語程習得に時間がかからないのではないでしょうか。
基本文法しかやったことないからわかりませんがw

と言語に関してはこんな感じではないかと。
つーか、もっと頑張れ日本。できれば、日本で快適に住み続けられる世の中を望みます。
でも、実際はかなり厳しそうですからね。
政府が法人税とかの前に、老人の負担を若者に被せる今の仕組みを変えないとダメでしょうね。
政治家が老人な時点で絶望的かと。

小泉Jrの奇跡に期待するか…。

次回は、言語でなく能力について書いてみようかと思ってます。
でわん。 Related Posts Plugin for WordPress, Blogger...

2011年1月23日日曜日

Android Tips

今後も再利用しそうな実装の簡単なメモ書き

アンドロイド機種端末の取得

String model = android.os.Build.MODEL;

とすると、model変数に端末名が設定される。

ListViewでグループ分けをする

isEnabledメソッドを利用する


class SampleActivity extends ListView {

// ListViewの処理

class SampleList extends ArrayAdapter<ArrayList<String>> {

private Context mContext;
private ArrayList<ContentsCategoryBean> list;

public ContentsCategoryList(Context context, int textViewResourceId,
ArrayList<ContentsCategoryBean> list) {
super(context, textViewResourceId);
this.mContext = context;
this.list = list;
}

@Override
public int getCount() {
return this.list.size();
}

@Override
public long getItemId(int position) {
return Long.valueOf(this.list.get(position).id);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

if (!isEnabled(position)) {
// 処理false
} else {
// 処理true
}

return row;
}

@Override
public boolean isEnabled(int position) {

// 処理
// trueとfalseに分岐して返す

return true;
}
}
}


isEnabledメソッドの中で、列のデータによるグルーピングを行うのがポイント。

TABを画面下に設定する

AndroidのTABを画面下に設定するやり方です。
layoutの構築は、ここではRelativeLayoutを使います。LinerLayoutでも可能ですが、私は使わないのでここでは記述しません。



<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_above="@android:id/tabs" />

<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" />

</RelativeLayout>
</TabHost>



ポイント
・FrameLayoutタグはコンテンツの位置なので、TabWidgetの上に配置する
・Tabを画面下に配置するのだから、TabWidgetタグは当然FrameLayoutの下になる。

以上で~す。 Related Posts Plugin for WordPress, Blogger...

2011年1月19日水曜日

Androd Tutorial iphone風の画面作成 その4

前回は背景や画像の調整を行いました。
今回は文字の調整を行います。

最初は表示タイトルを表示するTextViewのitme_titleから変更しましょう。

文字の調整はstyles.xmlを利用するべきです。layoutのxmlファイルに記述するのは、効率が悪い上に可読性も損なわれるので避けましょう。

styles.xmlはvaluesフォルダ内に作成します。記述内容は以下の通りになります。


<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="itme_title_style">
<item name="android:textSize">20sp</item>
<item name="android:textColor">#000000</item>
<item name="android:typeface">monospace</item>
<item name="android:textStyle">normal|bold</item>
</style>

<style name="itme_explain_style">
<item name="android:textSize">14sp</item>
<item name="android:textColor">#ff0000</item>
<item name="android:typeface">monospace</item>
<item name="android:textStyle">normal</item>
</style>

</resources>


以下に属性の説明を記述します。
android:textSizeはテキストのサイズを指定します。単位はpxでなく、spを使ってください。 spを使うことで、ユーザーが指定したフォントサイズが自動で拡大縮小されます。
スクリーンの解像度と指定したフォントのサイズを端末側でうまく調整してくれるのです。

もっと詳しく知りたい方はhttp://developer.android.com/guide/topics/resources/more-resources.html#Dimension を熟読してください。

android:textColorはテキストの色です。16進数で指定します。

android:typefaceはテキストの書体を指定します。
日本語の場合はmonospaceを指定し、英語はsansを指定するのが一般的です。好みの問題もありますが、これらが一般的には読みやすいとされています。
腕の良いデザイナーさんが近くにいる場合は、その辺をレクチャーしてもらうといいと思います。私はgimpやinkscapeを使って画像の作成もよく行うのですが、周りのデザイナーさんの影響は凄く大きいです。デザインの勉強は、プログラミングにも絶対プラスになります。って話がずれましたね。

android:textStyleはテキストのスタイルを指定します。
boldは太字です。他にはにitalic(斜体)も指定できます。

続いて、このstyles.xmlで指定した文字情報をhome_list.xmlに反映させましょう。以下のように指定します。


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
>

<ImageView android:id="@+id/image"
android:layout_width="100dip"
android:layout_height="wrap_content"
android:adjustViewBounds="true" />

<TextView
android:id="@+id/itme_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
style="@style/itme_title_style" />

<TextView
android:id="@+id/item_explain"
android:layout_width="190dip"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
android:layout_below="@id/itme_title"
style="@style/itme_explain_style" />

<ImageView android:id="@+id/arrow_image"
android:layout_width="35dip"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:adjustViewBounds="true"
android:src="@drawable/arrow_button" />

</RelativeLayout>


赤の部分が変更した箇所です。style="@style/ + 属性名"で設定します。
さて、ビルドして、androidエミュレーターを起動しましょう。

Good!!
うまいこと表示されましたね。

次はヘッダーを追加しましょう。アプリケーションのタイトルバーも不要なので削除します。


public class HomeActivity extends ListActivity {

private File sdcardDir = Environment.getExternalStorageDirectory();

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.home);
}

// 以降変更なし

requestWindowFeature(Window.FEATURE_NO_TITLE);が追加されています。
これでアプリケーションのタイトルバーが消えます。
続いてheaderを追加します。画像を用意します。gimpで作成します。

だいぶ色が濃くなってしまいましたね。まあ、ご愛嬌ということでw。
ではheaderをリストの上に配置しましょう。


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg_home"
>


<TextView
android:id="@+id/header"
android:layout_width="fill_parent"
android:layout_height="40dip"
android:text="@string/header_home"
android:background="@drawable/header_home"
style="@style/header_home_style" />


<ListView
android:id="@+id/android:list"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_below="@id/header" />

<TextView
android:id="@+id/android:empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/nodata"
android:layout_below="@id/header" />


</RelativeLayout>


注意して欲しいのは、ImageViewでなくTextViewを利用していることです。
画像に直接文字を記述したheader画像を用意するより、文字のない画像を用意したほうが汎用性があるのでお勧めです。

style="@style/header_home_style"で文字の調整指定を行っているので、styles.xmlに追加が必要です。


<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="itme_title_style">
<item name="android:textSize">20sp</item>
<item name="android:textColor">#000000</item>
<item name="android:typeface">monospace</item>
<item name="android:textStyle">normal|bold</item>
</style>

<style name="itme_explain_style">
<item name="android:textSize">14sp</item>
<item name="android:textColor">#ff0000</item>
<item name="android:typeface">monospace</item>
<item name="android:textStyle">normal</item>
</style>


<style name="header_home_style">
<item name="android:textSize">25sp</item>
<item name="android:textColor">#ffffff</item>
<item name="android:typeface">monospace</item>
<item name="android:textStyle">normal|bold</item>
<item name="android:gravity">center</item>
</style>


</resources>


赤の部分が変更した箇所です。
さて、ビルドして、androidエミュレーターを起動しましょう。

Good!!
うまいこと表示されましたね。
ただこうしてみると、header画像の背景に透過処理は不要ですね。今回は面倒なので、このままにしときますw。実際に作る場合は気をつけましょう。

あとは、個人的に分割線が気になるので、分割線を変更します。


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg_home"
>

<TextView
android:id="@+id/header"
android:layout_width="fill_parent"
android:layout_height="40dip"
android:text="@string/header_home"
android:background="@drawable/header_home"
style="@style/header_home_style" />

<ListView
android:id="@+id/android:list"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_below="@id/header"
android:divider="#696969"
android:dividerHeight="2sp"
/>

<TextView
android:id="@+id/android:empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/nodata"
android:layout_below="@id/header" />

</RelativeLayout>


赤の部分が変更した箇所です。
android:dividerで分割線の色を指定、android:dividerHeightで高さを指定しています。
さて、ビルドして、androidエミュレーターを起動しましょう。

Great!!
色が濃い灰色に変更され、高さも変わりました。
とはいうものの、あまり違いがわからなくなってきたかもしれませんね。
これ以上はキリがないので、これでtutorialは終了です。
というわけで、長いチュートリアルをここまでつきあってくださったみなさん、大変お疲れさまでした。

今回私がこのチュートリアルを作成したのは、普段海外のチュートリアルに色々助けられていて、なにか自分にもできることがないかなと考えたのが発端です。
日本だと、tipsのようなちょっとした情報はたくさんあっても、チュートリアルのような作成に手間がかかる説明は少ないのが現状です。これは日本のエンジニアが置かれている無駄に長い労働環境が影響しているのかもしれません。
ただ、せっかく世界標準のandroidなのだから、こういった文化も世界標準にしていきたいです。

次は番外編でgimpを使ったandroid用画像の作り方なんかできたらなと思います。ちょっとした画像が作成できると、プログラマーは重宝すると思います。 gimpはフリーソフトだし、是非覚えておくといいと思います。

では、このへんで。みなさん素敵なandroid Lifeを。
See you next time.
Bye!

Related Posts Plugin for WordPress, Blogger...

2011年1月13日木曜日

Androd Tutorial iphone風の画面作成 その3

さて、今回は前回作成した画面をブラッシュアップさせていきます。

まずは背景を変更することからはじめましょう。
黒だとiphoneっぽくないですもんね。
ということで背景画像を作成します。ソフトはフリーソフトのgimpを使います。
android開発者なら、photoshopでなく、やはりフリーのgimpでしょう(お金かからないですからね)。
作成した画像は以下のファイルです。



gimpを使った画像ファイルの作成の仕方もそのうちtutorialにする予定ですが、今回は上記のファイルをそのままDLして利用してください。もしくは、他の画像を使って代用するなどしてください。

さて、これをhome.xmlの背景に設定しましょう。ファイルはdrawableフォルダに配置します。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg_home"
>

<ListView
android:id="@+id/android:list"
android:layout_height="fill_parent"
android:layout_width="fill_parent" />

<TextView
android:id="@+id/android:empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/nodata" />

</RelativeLayout>

android:background="@drawable/bg_home"で背景の設定を行っています。

レイアウトの変更なので、こまめに確認していきましょう。ビルドして、androidエミュレーターを起動させてみます。

Oh Yeah!!
しかし、リストの中の背景まで変わってしましましたね。
これだと見づらいので、リストの中の背景は白に変更しましょう。
リストの中の背景はhome_list.xmlに設定します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
>

<ImageView android:id="@+id/image"
android:layout_width="100dip"
android:layout_height="wrap_content"
android:adjustViewBounds="true" />

<TextView
android:id="@+id/itme_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image" />

<TextView
android:id="@+id/item_explain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
android:layout_below="@id/itme_title" />

</RelativeLayout>

android:background="#ffffff"を追加しました。
ビルドして、androidエミュレーターを起動します。

Oh Yeah!!
白になりましたね。

だいぶiphoneっぽくなりましたが、まだまだです。
iphoneはリスト列に矢印画像がありますよね。というわけで矢印画像も追加してみましょう。
背景と同じようにgimpで作成します。以下のような画像を作成してみました。

これをリスト画面で表示されるようにhome_list.xmlに追加します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
>

<ImageView android:id="@+id/image"
android:layout_width="100dip"
android:layout_height="wrap_content"
android:adjustViewBounds="true" />

<TextView
android:id="@+id/itme_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image" />

<TextView
android:id="@+id/item_explain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
android:layout_below="@id/itme_title" />


<ImageView android:id="@+id/arrow_image"
android:layout_width="35dip"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:adjustViewBounds="true"
android:src="@drawable/arrow_button" />


</RelativeLayout>

android:id="@+id/arrow_image"を追加しました。画像なのでImageViewです。
ビルドして、androidエミュレーターを起動します。

Oh Yeah Great!!
うまいこと表示されましたね。
さて、ここでは色々な属性を使ったので、重要な属性の説明をしておきましょう。

注意して欲しいのが

android:layout_centerVertical="true"

です。
これを

android:scaleType="center"

としてしまわないようにしましょう。
こうしてしまうと、画像は中央に配置されません。
android:scaleType="center"はあくまで、ImageViewオブジェクト内での配置の位置を決定します。layoutの位置を決定するわけではありません。
一方でandroid:layout_centerVertical="true"はlayoutの中での相対的な位置を示しています。ここでやりたいことはlayoutの中央に配置することなので android:layout_centerVerticalを設定するのです。
慣れないうちは、はまってしまうことが良くあるので注意しましょう。

さて、中央の説明文の文字が画像とかぶっているのが気になりますね。これも修正しておきましょう。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
>

<ImageView android:id="@+id/image"
android:layout_width="100dip"
android:layout_height="wrap_content"
android:adjustViewBounds="true" />

<TextView
android:id="@+id/itme_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image" />

<TextView
android:id="@+id/item_explain"
android:layout_width="190dip"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
android:layout_below="@id/itme_title" />

<ImageView android:id="@+id/arrow_image"
android:layout_width="35dip"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:adjustViewBounds="true"
android:src="@drawable/arrow_button" />

</RelativeLayout>

android:layout_width="190dip"に変更しました。
ビルドして、androidエミュレーターを起動します。

ポイントはandroid:layout_width="190dip"ですね。この辺の値の感覚は慣れが必要です。
単位はspでもうまく動くのですが、layoutにはdipを使用するのが正式です。
このあたりのことは、次回の文字の調整で説明します。

というわけでまだまだ続きます。

Related Posts Plugin for WordPress, Blogger...

2011年1月12日水曜日

Androd Tutorial iphone風の画面作成 その2

今回は、リスト画面を作成していきます。

まず、画面リストに表示するデータのクラスを作成します。 DataObjectクラスという名前で作成します。画面に表示するサンプルデータを5件返すgetDataObjectListメソッドも用意します。

public class DataObject {

public String id;
public String imagePath;
public String itme_title;
public String item_explain;

public DataObject() {
id = null;
imagePath = null;
itme_title = null;
item_explain = null;
}

public ArrayList getDataObjectList() {

ArrayList list = new ArrayList();

DataObject obj1 = new DataObject();
obj1.id = "1";
obj1.imagePath = "cat.jpg";
obj1.itme_title = "猫";
obj1.item_explain = "かわいい猫ですね";

list.add(obj1);

DataObject obj2 = new DataObject();
obj2.id = "2";
obj2.imagePath = "hinaningyo.jpg";
obj2.itme_title = "ひな人形";
obj2.item_explain = "明かりをつけましょぼんぼりに";

list.add(obj2);

DataObject obj3 = new DataObject();
obj3.id = "3";
obj3.imagePath = "kurisumasu.jpg";
obj3.itme_title = "クリスマス";
obj3.item_explain = "まっかなお鼻の。トナカイさんは";

list.add(obj3);

DataObject obj4 = new DataObject();
obj4.id = "4";
obj4.imagePath = "same.jpg";
obj4.itme_title = "鮫";
obj4.item_explain = "海の王者やね";

list.add(obj4);

DataObject obj5 = new DataObject();
obj5.id = "5";
obj5.imagePath = "sentouki.jpg";
obj5.itme_title = "戦闘機";
obj5.item_explain = "ばんばんばんばん";

list.add(obj5);

return list;
}

}

DataObjectクラスに用意した各フィールドに値を格納してリストとして返しています。内容は、

id:一意なキー
imagePath:画像のファイル名
itme_title:表示タイトル
item_explain:表示画像・タイトルの説明

となります。

表示する画像は、/sdcard直下に配置することにします。
EclipseのDDMでsdcardフォルダにドラッグするか、adbコマンドで格納しましょう。
(sampleコードを打ち込む場合は、適当な画像ファイルを上記のファイル名に変えて格納してみましょう)



配置すると上記のようになるはずです。

この時注意して欲しいのは、eclipseに画像をドラッグすると、日本語のファイル名だと失敗します。 adbコマンドだと日本語でもOKなのですが、基本的にファイル名に日本語を利用するのは避けるべきです。

次にリスト行のレイアウトファイルを作成します。 home_list.xmlという名前で作成します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

<ImageView android:id="@+id/image"
android:layout_width="100dip"
android:layout_height="wrap_content"
android:adjustViewBounds="true" />

<TextView
android:id="@+id/itme_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image" />

<TextView
android:id="@+id/item_explain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/image"
android:layout_below="@id/itme_title" />

</RelativeLayout>

ここでは、大まかにタグを配置します。細かい調整は後々行っていきます。
一応RelativeLayoutのタグの説明もしておきましょう。

id/itme_titleで設定しているandroid:layout_toRightOf="@id/image"は imageの右横に配置するという意味です。
id/item_explainで設定しているandroid:layout_toRightOf="@id/image"はimageの右横、 android:layout_below="@id/itme_title"はitme_titleの下。つまり、画像の右横かつ、タイトルの下に配置しています。 あとは、この作成したhome_list.xmlをHomeActivityクラスで呼び出すようにします。

public class HomeActivity extends ListActivity {

private File sdcardDir = Environment.getExternalStorageDirectory();

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
}


@Override
public void onStart() {
super.onStart();
}

@Override
public void onResume() {
super.onResume();
DataObject dataObject = new DataObject();
ArrayList list = dataObject.getDataObjectList();
dataObject = null; // release
setListAdapter(
new HomeListAdapter(this, R.layout.home_list, list));
}

class HomeListAdapter extends ArrayAdapter {
private Context m_context;
private ArrayList list;
private ExecutorService ex;

public HomeListAdapter(Context context, int textViewResourceId,
ArrayList objects) {

super(context, textViewResourceId, objects);
this.m_context = context;
this.list = objects;
}

@Override
public int getCount() {
return this.list.size();
}

@Override
public long getItemId(int arg0) {
return Long.valueOf(this.list.get(arg0).id);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
// 受け取ったビューがnullなら新しくビューを生成
LayoutInflater inflater = getLayoutInflater();

view = inflater.inflate(R.layout.home_list, parent, false);
}

// 表示すべきデータの取得
DataObject item = (DataObject)list.get(position);

ImageView image = (ImageView)view.findViewById(R.id.image);
Log.d("log", sdcardDir.getPath());
image.setImageBitmap(BitmapFactory.decodeFile(
sdcardDir.getPath() + "/" + item.imagePath));

TextView itme_title = (TextView)view.findViewById(R.id.itme_title);
itme_title.setText(item.itme_title);

TextView item_explain = (TextView)view.findViewById(R.id.item_explain);
item_explain.setText(item.item_explain);

return view;
}
}

}

赤字の部分が今回追加したソースコードです。
長いように思うかもしれませんが、やっていることは

ただ単にDataObjectクラスからリストデータを取ってきてhome_list.xmlのオブジェクトに設定している

だけです。
よく利用するパターンなので、何回か写経して覚えておくと良いと思います。

では、ここまでやったことが上手くいっているか、確認してみましょう。ビルドして、androidエミュレーターを起動させてみましょう。すると以下のような画面が表示されるはずです。

Oh Yeah Great Job!!
リストデータがきちんと表示されましたね。

次は画面の細かい調整を行っていきたいと思います。



というわけで、また次回。 Related Posts Plugin for WordPress, Blogger...

2011年1月11日火曜日

Androd Tutorial iphone風の画面作成 その1

androidの開発をしていて、よく言われるのが、

「見た目をiphoneっぽくしたい」

という要求です。
androidなんだから、android推奨のインターフェース (http://dl.google.com/googleio/2010/android-android-ui-design-patterns.pdf) にするべきだと思うのですが、 iphoneのインターフェースが好きなんだという人はかなり多いです。
確かにiphoneのインターフェースは良い出来ですから、気持ちはわからなくもないです。

というわけで、iphoneっぽい画面の作り方を記載しておこうと思います。
これは本当に要求度が高いので、自分でも再利用できるように詳しい記述にしていこうと思っています。多分、結構長くなると思いますが、おつきあいをよろしくお願いします。

では、さっそくはじめましょう。

まずは、プロジェクトを作成しましょう。 androidのversionは1.6以上なら大丈夫ですが、もう2.1以上でもいいと思います。

立ち上げ時に起動する画面を作成します。HomeActivityクラスという名前で作成します。

public class HomeActivity extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
}
}

ListActivityクラスを継承していることに注意してください。

次にlayoutのxmlファイルをhome.xmlとして作成します。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

<ListView
android:id="@+id/android:list"
android:layout_height="fill_parent"
android:layout_width="fill_parent" />

<TextView
android:id="@+id/android:empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/nodata" />

</RelativeLayout>

layoutのxmlファイルでUIを作成する場合、なるべくRelativeLayoutを使うようにしましょう。後々の修正が楽になります。 javaでのハードコードとか問題外なのでやめましょうね。後で改修する人が泣きます…。

ListViewの下に記述したTextViewタグは、ListViewにデータが存在しない場合に表示されるテキストメッセージです。

android:id="@+id/android:empty"

と指定するのが決まり事です。
表示されるメッセージは、android:text="@string/nodata"と記述したので、 strings.xmlに記載する「nodata」属性が反映されます。 では、strings.xmlファイルを以下のように書きかえましょう。

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">iphone風インターフェース</string>
<string name="nodata">データが存在しません</string>
</resources>

上記のようにすることでデータが存在しない場合に、strings.xmlに記載した「nodata」属性の文字が表示されるようになります。

では、ここまでやったことが上手くいっているか、確認してみましょう。ビルドして、androidエミュレーターを起動させてみましょう。すると以下のような画面が表示されるはずです。



Oh Yeah Great!!
思った通りの動きをしましたね。

さてさて次回は、リストの中身を作成していきましょう。
まだまだ続きます。おつきあいよろしくお願いします。

Related Posts Plugin for WordPress, Blogger...

2011年1月7日金曜日

phoneGap(HTML + CSS + JavaScript)でandroidアプリを作成してみた

phoneGap(HTML + CSS + JavaScript)でandroidアプリを作成してみたのでメモを残しときます。

いきなり結論

現状のversion(0.93)では、使用は控えましょう。

以下、手順と記録です。

使用したphoneGapのversionは0.9.3。
ダウンロードは以下のサイトから行えます。
http://www.phonegap.com/download

まずはお決まりのHello worldを作成してみる。

動作に必要なのは下記の二つのファイルらしい。

phonegap-0.9.3.jar
phonegap-0.9.3.js

とりあえず、普段どおりにeclipseからandroidプロジェクトを動作させる。
androidのversionは1.6を使用する

プロジェクトのrootディレクトリに以下のフォルダを作成してファイルを格納する

/libs/phonegap-0.9.3.jar
/assets/www/phonegap-0.9.3.js

wwwフォルダにindex.htmlを作成
sampleを見る限り、html5で記述するのがよさそう。
ファイルエンコードはUTF-8に設定

index.htmlの内容は
http://wiki.phonegap.com/w/page/30862722/phonegap-android-eclipse-quickstart
のCreating A New Projectのindex.htmlの部分を丸々コピー&ペースト。

続いて、Activityクラスを作成。
チュートリアルだとjarのパスを通す旨が記述されていないが、きっちりと通す必要あり。
通常はActivtyクラスを継承するのだが、DroidGapクラスを継承する。

私の場合、activityクラスを作る場合は「~Activity」としているのだが、「~DroidGap」とするべきなのだろうか…。
とりあえず無視。
setContentViewでなく、loadUrlを利用する。
urlにindex.htmlを指定する。

最後にmanifest.xmlファイルを記述。
http://wiki.phonegap.com/w/page/30862722/phonegap-android-eclipse-quickstart
のsupports-screensから下のtagを全てコピーして貼り付ける。

さらにandroid:configChanges="orientation|keyboardHidden"を追加。
これは指定したイベントが発生した場合に、index.htmlがリロードされないように必要なようである。
縦横対応できないのかな???
よくわからないので、後で要調査。

さて、あとはビルドしてエミュレーターでアプリを実行。仕様osはandroid2.3を利用する。
画像はキャプチャしないけど、うまく動きました。

続いて、apkファイルを作成。
これもいつも通り作成してみる。
と思ったら既にフォルダに出来てた…。自動生成か?keystoreファイルはいらないのか?
これも要調査。

とりあえずapkをインストール。
起動成功。若干もっさりな気がするが気のせいか?いや、気のせいじゃないな。

さらに画像などを組み込んで色々といじってみる。






微妙…。というかandroidでは現状のバージョンでは使い物にならない。
機種ごとに解像度が異なるandroidで、画像サイズの自動調整を行ってくれないのでは利用価値がない。
iphoneなら3と4でhtmlファイルを切り替えて画像対応、もしくはcanvasで画像サイズを切り替えるという手段が使えるので使えなくもないと思う。でも、objective-Cを使ったプログラミングのほうが安全だし、結局は楽。
私がジョブスでもこんなツールで作成したアプリは認めませんね。フリーソフトなら別ですけど…。
批判してごめんよ、ジョブス。あんたが正しい。

つまりのところ、javaScriptで満足のいくアプリが作れるのはまだまだ先のことになりそうです。
でも、待っているよりjavaとobjective-Cを覚えたほうが絶対早いです。
みんなnative言語やろうぜ!!










そんな感じです。

でわん Related Posts Plugin for WordPress, Blogger...

2011年1月5日水曜日

Android Live Wallpaper

仕事でLive Wallpaperの調査と勉強をしたのでメモに残します。
これは想像以上に面白いことができそうな機能です。
オリジナルアプリも作ってみたいと思いました。

・android2.1以上で実装する必要がある
・xmlは結構煩雑
サービスクラスを作成し、パーミッション「android:permission="android.permission.BIND_WALLPAPER"」の設定が必要
Serviceのintent-filterに/>」を設定する必要がある
meta-dataでLiveWallpaperのリソースを定義。これはres/xml/に作成。wallpaper.xmlとするのが一般的で良いと思う。

ServiceクラスはWallpaperServiceクラスを継承する。

・壁紙の解像度の取得
width:getWallpaperDesiredMinimumWidth()
height:getWallpaperDesiredMinimumHeight()

動きの処理はEngineを継承したクラスを利用する。
EngineはSurfaceViewの使い方とほぼ同じ。androidでゲームプログラミングを組んだことがある人だと、若干とっつき易い。

・各メソッドの動き
onOffsetsChangedが
スライドさせたときに呼びだされている模様
http://d.hatena.ne.jp/hyoromo/20100513/1273768279
上記のサイトで記述されているHomeScreenは違うのではないか?

取得できるoffsetはどれだけ移動したかの値。距離の差。あんま使わなさそう。

xPixelsでは、絶対値の位置が取得できるようである。

値はandroidOS2.3で確認。左端で0、右端で-320。
HomeScreenが右に一つ切り替わると、-80xPixels移動する(加算される)。

なので、0 > 変数 > -80

のような感じで現在のhomeScreenの場所を特定できると思われる。
コーディングしてみたら、やはりうまくいった。
ソースはもっと深く理解して汎用性を持たせてからUPしよう…。汚すぎ。

homeScreenが4の場合は、
HVGAの場合、width(480 × 4)のサイズの画像を用意するといいのだろう。
アプリのようにlayoutでごまかせないので、端末ごとに画像を用意する必要がある。

onOffsetsChangedメソッドで取得された値に応じて、canvasに設定するx(left)値の値を計算する。そして、canvasでxの値を設定してやるとうまく動く。あとはアニメーションを用意すればOKっぽい。

ただし、ずっとスレッドを走らせておくのは電池消費的によくない。。
なので、タッチで動かしたときだけ動作させるのが良いと思われる。

色々なLive Wallpaperアプリを見てみたけど、コカコーラのLiveWallpaperが現在の完成度では一番かな。
 興味ある人は、「cocacola」で検索してダウンロードしてみてはいかがでしょうか。かっこいいですよ。
 OpenGLを使ってグリグリ動かしているんだろうなあ。3Dプログラミングはわからんから、勉強しないといけない。


というわけでメモ終了。 Related Posts Plugin for WordPress, Blogger...

2011年1月4日火曜日

英語が必要な時代へ

半年ほど前、楽天やファーストリテイリングが社内公用語を英語にするというニュースを聞いて、内心アホだと思いました。
 しかし同時に、その頃はスマートフォンアプリの開発を本格的に始めていたので、英語の必要性を強く感じてもいました。
なぜなら、スマートフォン開発の情報は、WEB上では英語が中心だからです。

スタンフォード大のiPhoneプログラミング講座やandroidのgoogleの講座も全て英語です。英語ができると、これらの授業をituneやyoutubeで無料で利用できるのです。これを使わない手はありません。

今後、こういったサービスはどんどん展開されるでしょう。そして、そのサービスが提供される言語は、世界共通語である英語です。英語がわからない…ではどうしようもなくなるのは時間の問題です。

というわけで、英語の勉強にもう少し時間を割いていこうと思います。
とりあえず、lang-8を始めてみました。かなり良いサービスだと思いました。できる限り毎日続けていきたいと思います。
こういった良質のサービスが無料で利用できる時代。
だからこそ、今後はより高度なスキルが求められていくのでしょう。 Related Posts Plugin for WordPress, Blogger...

スマートフォンアプリ開発 個人アプリと企業アプリ

スマートフォンの開発を手がける企業が多くなってきました。
私も今は会社でandroidアプリの開発に携わっています。
そして思うことは、個人で開発するアプリが、企業で開発するアプリに勝つにはアイディアで勝負するしかないということです。

企業の強みは、それぞれの得意分野で分担作業ができることです。
グラフィックを作成するデザイナー、アプリを作成するプログラマー、コンテンツを作成するディレクター。各々の得意とする分野で一つのアプリの作成に注力できます。

一方、個人のアプリ作成は分担作業ができません。
グラフィック、プログラム、コンテンツを自分ひとりで作成しないといけません。なので、企業がリリースしているのと同じようなアプリを作成したのでは、勝負はみえています。
なので、個性・アイディアで勝負することが必要となります。

スマートフォンアプリ開発の良いところは、必ずしも多機能で素晴らしい製品が売れるわけではないということです。むしろ、多機能なアプリは敬遠され、どちらかというと、シンプルなアプリがよく利用され、ダウンロードされます。

だから個人でも十分に勝負ができます。むしろ、継続的に利益を出し続けないといけない企業には、実験的なアプリは作りづらいはずです。

これからはソーシャル化が進み、個人のブランドが特に重要になるでしょう。
アプリを作成することは、個人ブランドを大きく高めてくれるはずです。
まずは、利益を考えないで、個人で作成してみることからはじめてみましょう。
そのうち、色々なことが理解でき、個人におけるスマートフォンの大きな可能性がわかってくると思います。 Related Posts Plugin for WordPress, Blogger...