2010年8月29日日曜日

androidアプリとiphoneアプリを開発して思ったこと その2

~スマートフォンアプリはお金にならない。とりあえず冷静になって現実を見ろ ~の巻

iphoneアプリやandroidアプリは基本儲かりません。
最近、iphoneアプリでお金を稼ぐ灘の高校生が話題になりましたね
でも、メディアが取り上げるのは極一部の人です。しかもこれは陽の部分。
実際、iphone長者とかになれるのは、プロ野球選手とか、作家とかになるくらいの確率なのが現実だと思います。

さらに、androidアプリの場合はもっとひどいです。
iphone長者になった人はいても、android長者になった人は聞いたことがありません。


最近の記事で、androidの「Advanced Task Manager」を作成したアプリの開発者は、年間10万ドル以上を稼ぐ見通しだということですが、iphoneアプリに比べるとだいぶ規模が落ちますね。
 しかも、このアプリは、androidの市場シェアがiphoneの市場を越えた海外市場での話です。
日本国内でのシンデレラストーリーはまだ存在してません。

それもそのはず、androidMarketの現状は以下のような状況なのです。

  • 50の壁。有料アプリの76%は販売本数50本未満にとどまる。
  • 99の法則。有料アプリの値付けの最頻値は0.99ドルと安価。次が1.99ドル。値付けへの下方圧力は強い。
  • 30の事実。実体験では、有料アプリのキャンセル(返品)率は34%と高い。
  • 有料アプリの比率は43%。
  • 英語圏が圧倒的に優勢。コメントの分布を見ると、英語によるコメントが81.3%、日本語によるコメントは1.1%。アクティブユーザーは英語圏に集中している。
  • ドル建てが優勢。有料アプリの値付けは、ドル建て、円建てなどを選べるが、ドル建てが70.86%、ユーロが13.89%、UKポンドが9.20%、円が6.05%.
  • 日本が強いのはコミック。コミックのカテゴリでは円建てアプリが54%と過半数を越えている

参考データ:http://hoshi.air-nifty.com/diary/2010/08/android76500992.html

とんでもなく、厳しい数値ですね。スーパーブラックマーケットです。
現状では、とてもビジネスとしてなりたっているとはいえません。
今androidアプリの開発を行うのは、未来への投資であり、ボランティアだと割り切るくらいの覚悟が必要です。

 このようなぺんぺん草も生えてないような状況にも関わらず、これからはandroidの時代だ!と言い切る識者の多いこと多いこと。根拠はなんなのでしょうか?

Googleというブランドを脊椎反射に信仰してるだけなのではないでしょうか。


私に言わせれば、androidはまだ時期尚早のプラットフォームです。
確かに、androidは一技術者・開発者として見ると、iphoneの10倍くらい魅力があります。
でも、ユーザー視点でみると、買う理由がないと思います。
androidはOSが3.x位になってようやくiphoneとまともに戦えるようになるのではないでしょうか。

ちょっと長くなってしまったのでこの続きは次回にします。
せっかくなので、次回はandroidアプリを中心にお話をしていきたいと思います。

Related Posts Plugin for WordPress, Blogger...

2010年8月24日火曜日

Scalaの勉強9

今日はclassとobjectの扱い方を学ぶ
・対応したクラスとオブジェクトを、コンパニオンクラス・コンパニオンオブジェクトと呼ぶ。
コンパニオンクラスをもたないオブジェクトは、スタンドアロンオブジェクトと呼ぶ。

スタンドアロンオブジェクトでmain関数がよべない…。
scalaプログラムを実行するには、
スタンドアロンシングルトンオブジェクトの名前を指定するとかなんとか。よくわかんね~。
だが、objectを作成して実行すると成功。
動いても概念がわからないので、なんか納得いかない。

・applicationトレイトなるものがmainの代わりになるようだ。
ただし、
コマンド引数がとれない
マルチスレッドプログラムで使えない
というデメリットがあるそうだ。

・型はjavaとほぼ一緒だが、シンボルリテラルなるものがある。よくわからんので放置。
これはある程度理解してから、本を買って理解したほうがよい。



記録
勉強時間
1:00minites
ネットのみの情報だと、これ以上の理解は厳しいかな。やっぱ本が必要だ。 Related Posts Plugin for WordPress, Blogger...

2010年8月23日月曜日

Scalaの勉強8

今日は2Dレイアウトライブラリーの勉強

・ファクトリーメソッド
インスタンスの生成をサブクラスに委ねる。
前に勉強したのに完全に忘れてます…。

・宣言だけで定義のない抽象メソッドは、abstract修飾子はつけなくてもよい。

・空括弧省略メソッドは、フィールドで定義してもよい。また、空括弧省略でフィールドや
メソッドを区別しない使えるようにすることを、「統一形式アクセスの原則」という。

違いは、
一般的に、フィールドで実装すると初回に計算結果を保持するので、値の呼び出しが早い分メモリを確保してしまう。
メソッドであれば、毎回計算するので呼び出しに若干時間がかかる分メモリを節約できる。

・クラスのメソッドの実行方法をまだ勉強してなかった・・・。今まで全部objectでやっていた。
だが、違いがわからないと厳しくなってきたので、メモ。
http://d.hatena.ne.jp/plasticscafe/20100610/1276142337

・javaと違って静的メンバー(staticな変数やメソッド)がもてない。代わりにシングルトンオブジェクトをもっている。scalaは完全なオブジェクト指向だから…らしい。



記録
勉強時間
1:00minites
学習に利用しているサイト
http://d.hatena.ne.jp/plasticscafe/20100609/1276056014
よくわからないことが多すぎる。初心者本を購入して、それで基礎を固めるべきかな。
体系立ててやらないときつい Related Posts Plugin for WordPress, Blogger...

androidアプリとiphoneアプリを開発して思ったこと その1

~スマートフォンアプリで起業を勧める愚かな評論家様達~の巻

オリジナルのandroidアプリを公開してから約一ヶ月半。最初のupdateも終了し、
次なるandroidアプリとiphoneアプリの開発にとりかかっています。

会社の仕事のほうでも半年以上androidアプリとiphone(ipad)アプリ開発には色々と関わっているので、色々なことがわかってきました。というわけで、現時点でのスマートフォンアプリの現状について何回かにわけてちょっと語ってみたいと思います。

まず思うのは、最近のiphoneの人気の凄さです。私はxperiaを利用しているのですが、周囲の人はほとんどiphoneを使っています。これから買う予定だという人も多いです。まあ、これは当然です。xperiaユーザの私が言うのもなんですが、はっきりいって現在のandroid端末とiphoneでは勝負になりません。開発していて端末を触ってると、断然iphoneのほうが完成度が高いことがわかります。私がxperiaを使ってるのは、電波の問題だけで、プラットフォームの完成度としては、現時点(2010/08/19)では、androidは話になりません。このことはまたあとで詳しく掘り下げます。

そして、最近ではipadも発売され、現在apple様は超バブリーです。猫も杓子もiphoneとipadを大絶賛。
macユーザーでありながらxperiaを使っている私は、疎外感を感じてしまいます。

そしてこのブームにのっかっているのが、偉く賢い評論家様や、企業コンサルタント様達です。アップルのビジネスモデルを大絶賛し、iphone,ipadアプリで起業をする大チャンスだと声高に叫んでいます。
そして、さらにその中にandroidアプリも加えて、
「今が起業の大チャンスだ。世界にうってでよ、若き日本人達よ!」と
煽っています。

そんな熱い状況を見て私は思うのです。
「実際に現場で物を作らない(作れない・作った事のない)人間は、言うことだけは立派だな」
と。
まあ、それが評論家やコンサルタントのお仕事なわけですけどね。

半年以上にわたるiphoneアプリやandroidアプリの開発でわかったことがあります。それは、
「現在のスマートフォンアプリ開発では、appleとgoogle以外が金を稼ぐのは難しい」
ということです。

それなのに、評論家やコンサルタント様達は、無責任に起業や金を得る千載一遇のチャンスだといい続けてます。
これは銀行預金は金利が低いから、株や投資信託で運用したほうが良いとサブプライム前に言い放っていた腐れ金融マン達と同レベルの戯言です。

というわけで、次回はなぜスマートフォンアプリの開発が金にならないかについて書こうと思います。 Related Posts Plugin for WordPress, Blogger...

2010年8月22日日曜日

androidアプリリリース

androidアプリのversion1.1.0をリリースしました。
変更点が多くて時間がかかりましたが、前より使いやすいアプリになったと思います。
今後も、もっと使いやすいように改良を重ねていくつもりです。
なんか追加機能が欲しいとか、こうして欲しいとか意見がある方は、ブログでもマーケットのコメント欄にでも書き込んでいただけるとフィードバックできてありがたいです。

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

2010年8月19日木曜日

iphoneアプリ開発メモ1

ブログにiphoneプログラミングに関することを書くのは今回が初めてです。

androidアプリのversion1.1.0の開発とテストが終了しました。
問題がなければ、週末にandroid marketにupdateできそうです。

androidアプリは今後もupdateしていく予定ですが、次の新作アプリの開発はandroidだけでなくiphoneにも対応したいので、はじめてのiphone3プログラミングをちょこちょこ読んでは実装しています。

しかし、objective-Cの経験がないので、あいまいな理解な箇所が多いので、詳細objective-C2.0も読み進めながら理解を深めていこうと思います。
以下は、そのメモです。
基本java使いなので、javaと比較しながらのメモ書きです。

3章 「基本的なインタラクションを処理する」のまとめ

@propertyについて
詳細objective-C2.0p286 - P296
宣言プロパティ。
@interface(インターフェース部)で使用する。
javaでいうsetter, getterである。
ただし、@propertyは宣言を行うだけなので、
プロパティがインスタンス変数で実現されているか
どうかは関係ない。
オプションの指定で挙動が変化する。
オプションがない場合は、読み書き可能

はじめてのiphoneプログラミングでは、いきなり
@property(nonatomic, retain) IBOutlet UIWindow *window
とでてきた。
本の中では、この部分が激しく無視されていたが、詳細objective-C2.0
のp293 - p296に詳しく記述されていた。

retainはオブジェクトを保持して設定するオプション。
このオプションはプロパティがオブジェクトで、カウンタ管理方式を利用している場合に指定できる。
iphoneでは、ガーベジコレクションが使えず、リファレンスカウンタ
(参照カウンタ)方式でメモリ管理を行っている(理由はここでは
説明しない)。
なので、iphoneではp295の図12-3setterとgetter構成されることになる。

又、デフォルトでは、assignオプションが指定される。なので、iphone
での実装の場合は、属性としてretainを指定してやらなければばらない
のである。

nonatomicオプションは、同時に実行されるかもしれないメソッド定義をつくるという指示である。このnonatomicオプションを指定しないと、アクセサの定義には@synchronizedというコンパイラ指示子が含まれる。

@synthesizeについて
コンパイラ指示子
インターフェース部で宣言した属性に応じてアクセサが構成される。
@implementation 〜 @endまでのどこかに記述する。
また、通常のメソッドと異なり、インターフェース部に@property
の宣言がなければ、@synthesizeを記述することができない。

実際のインスタンス変数名と異なる名前をプロパティとして外部に提供
することも可能。

メソッドについて
ざっくりとした説明ではあるが、
- (戻り値の型)メソッド名:引数の型
が基本の形。
メソッド宣言で型を指定しないと、id型であるとみなされる。

メッセージ式について
詳細objective-C2.0p18-p19
オブジェクトはどのクラスに属するものでも、idという特別な型で表現される。
id obj;
のように。
これはメッセージ式と呼ばれる。
メッセージに引数がある場合は、コロン「:」をつける。

[sender titleForState:UIContorolStateNormal];

ってな感じ。
二つ以上の引数がある場合は、コロン「:」をつけた別のキーワード
を追加する。あるいは、キーワードなしでコロン「:」だけを追加する。

インスタンス生成と初期化
詳細objective-C2.0p20-p21
[クラス名 alloc]
[NSString alloc]
のように記述する。

ただし、このように生成されたインスタンスは、メモリ上に必要な領域が
確保されただけである。なので、通常はこの直後に初期化が必要。

[[クラス名 alloc ] init ];
[NSString alloc] initWithFormat];
のように記述する。

cocoaでは、イニシャライザはinitか、initから始まるメソッド名を
もつものが多い。

デリゲートについて
委譲処理のこと。javaでもadapterパターンなどでよく利用しますね。
UIApplicationの代理として、UIApplicationDelegateを使う。
もっと進んだときに理解を進めるべきかな。


以上。
3章 「基本的なインタラクションを処理する」のまとめの終了。
良い本ですが、本当のプログラム初心者が理解できるかは結構疑問な本だと思います。 Related Posts Plugin for WordPress, Blogger...

2010年8月18日水曜日

Scalaの勉強7

・パターンガードの勉強
記述順が大事

・シールドクラスがある
パターン漏れが防げる

・Option型なるものがある
実際の値を持っているSome()

値が無いことを表すNone
がある

活用方法としては、渡される値がnullになる可能性がありそうな場合はOption型をつかうとよろしい。




記録
勉強時間
1:30minites
学習に利用しているサイト
http://d.hatena.ne.jp/plasticscafe/20100818/1282103955
タプルのところから。まだまだ文法を理解していない。
しかし、railsで自分のサイトを構築する予定だったけど、scalaとliftを使ってGEAを利用して勉強するのもいいかなと思い始めてきた。
どうしようかなあ。設計があるていど終わるまでに決めないと。 Related Posts Plugin for WordPress, Blogger...

2010年8月17日火曜日

Scalaの勉強6

・タプルという概念が存在する
複数の値をカンマ区切りで並べて括弧で囲むと、タプルになる。
_1, _2というようなフィールド名でアクセスできる。
・束縛変数?なるものがある。
つーか、詳細な資料が見つからん。



記録
勉強時間
1:30minites
学習に利用しているサイト
http://d.hatena.ne.jp/plasticscafe/20100817/1282017571
次回はパターンガードの勉強から
ネットだけの勉強では理解が浅く、物足りなくなってきた。
コップ本が欲しいけど、railsの本を買うので今はやめとこう…。もっと知識がついてからだな。 Related Posts Plugin for WordPress, Blogger...

2010年8月16日月曜日

Scalaの勉強5

Listの勉強
・変数にNilを入れてforeachで回しても、javaのようなnullpoiterにはならない。
・値の追加ができない…。is not menber of …とでる。nilを宣言してから追加ができないのか??
時間がないので次回。


記録
勉強時間
40minites
学習に利用しているサイト
http://d.hatena.ne.jp/unageanu/20080518 Related Posts Plugin for WordPress, Blogger...

Androidアプリケーション Junitテストの作り方 ~その2~

開発を行うと、かならず作ることになるのがutilクラスではないでしょうか。
機能テストのやり方は紹介しましたが、普通の単体テストの紹介はまだだったので紹介します。

1、まずは機能テストの時と同じように、テストパッケージを作成します。

2、testクラスを作成します。

テストクラス

public class SampleUitlsTest extends AndroidTestCase {

public void testGet() {
String result = SampleUtils.get();
assertEquals("aaaa", result);
}
}



テストされるクラス

public class SampleUtils {

public static String get() {
return "aaaa";
}

}


このとき注意するのは、AndroidTestCaseを継承していることです。
Utilityはstaticメソッドのテストになると思います。
なので、Activityのライフサイクルをテストする必要がないので、AndroidTestCaseを使用します。

3、あとはAndroid Unit Testを実行すればテストを行えます。 Related Posts Plugin for WordPress, Blogger...

2010年8月13日金曜日

Scalaの勉強4

今日もケースクラスの勉強
・パターンマッチは変数を使ってもできる。
・コンストラクターを使っても可能
これは素晴らしい。
・マッチするパターンがないとMatchErrorの例外をなげる。
・ワイルドカードはマッチ対象全体でなく、パターン内の要素でも使える
これも良い機能。
・Anyを使ったパターンマッチも可能。

全ての型のルートはAny



記録
勉強時間
1hour30minites
学習に利用しているサイト
http://d.hatena.ne.jp/plasticscafe/20100810/1281412749
つぎは先に進む前に、Listの勉強をしよう。
今日でscalaの勉強をはじめて4日目。時間にして計6時間です。
まだまだわからないことだらけです。
はやくフレームワークをいじりたい。playってやつがよさそうです。
まあでも、基礎は大切なので、じっくりやっていきます。 Related Posts Plugin for WordPress, Blogger...

2010年8月12日木曜日

Scalaの勉強3

・scalaは全てがオブジェクトである。

・かっこがない「引数無しメソッド」を定義することが可能

・オーバーライドはjavaと異なり、override修飾子が必須である。

・ケースクラスというものが存在する
クラスインスタンスをつくるのにnewが不要(ファクトリーメソッド)
getterが自動でさせる。オブジェクト変数で値が取得できる
パラメーターをval化(フィールド化)する
パターンマッチをサポートする
パターンマッチはセレクターをmatchキーワードの前におく。


・REPL(対話型実行環境)の実行方法
コマンドプロンプトで
scala
とコマンドを叩く




記録
勉強時間
1hour30minites
学習に利用しているサイト
http://d.hatena.ne.jp/plasticscafe/20100809/1281326371
ネット上のサンプルでは、よく理解できないサンプルが多い。
何の役に立つのかが明白でないのだ。
とりあえず、scalaを触って三日が経過して感じたことは、
rubyとjavaと比較しながら勉強したほうがよくscalaを理解できると思った。
フレームワークを使ったアプリやandroidを作成するには、まだまだかなりの勉強が必要だ。
次は変数を使ったパターンマッチから勉強。 Related Posts Plugin for WordPress, Blogger...

2010年8月11日水曜日

Scalaの勉強2

本日のまとめ

・classはデフォルトのコンストラクターをひとつもつことが推奨されている

・traitという仕組みがある。
Mix-inのための仕組みである。
Mix-inとは、メソッドが実装されたインターフェースみたいなものである。

・import文
好きな位置でスコープを限定してimportできる。

・変数
valは後で変更不可能(javaでいうfinal)
varは後で変更可能

・scalaにはREPLが提供されている。
REPLは対話型の実行環境

・引数なしのメソッドもつくれる


記録
勉強時間
1hour30minites
学習に利用しているサイト
http://codezine.jp/article/detail/5329?p=4
http://homepage.mac.com/takashi_miyamoto/scala/ScalaTutorial.pdf
はじめての概念が多く、結構手こずった。だが、面白い。
次回はtutorialのクラスから再開する Related Posts Plugin for WordPress, Blogger...

2010年8月10日火曜日

Scalaの勉強1

Scalaの勉強

ダイレコの改修が落ち着き次第、iphoneの勉強の傍らに、FaceBookでも何かアプリを作成しようと思っています。
んで、開発言語ですが、scalaを使おうと考えています。
理由は言語思想が素晴らしいのと、androidの開発にも利用でき、今後のメイン言語として活躍してくれそうだからです。
というわけで、まずは基礎から勉強していこうと思います。以下は、防備録を兼ねたメモです。

・scalaのバージョンをチェック

scala -version

・scalaのコンパイル

scalac ファイル名

・返り値

void == Unit(正確ではないが、ざっくりとした意味)

・クロージャー

関数のこと?

・callbackパラメーター

渡される関数がパラメーターを取らず (「()」で示されます)、
返すもの (「=>」で示されます) がない (関数型の値「Unit」で示されます) 場合のみ

・ラムダ式

名前を持たない関数またはサブルーチン。



記録
勉強時間
1hour20minites
学習に利用しているサイト
http://www.ibm.com/developerworks/jp/java/library/j-scala01228.html
リスト 5まで完了。 Related Posts Plugin for WordPress, Blogger...