2009年10月12日月曜日

早速iPhoneアプリ開発~Hello World!~

macで早速iPhoneアプリの開発をやってみた。

プログラミングのはじめといえば"Hello World!"

参考資料はこちら
若干グロテスクなデザインですが、こういうちょっと砕けた本のがわかりやすい。

言語構造とかデータや関数の関連とかまだまだよくわかってないけど1時間弱くらいでHello Worldとタップして何かしらのアクションがとれるアプリの作成が完成。
(一番時間がかかったのはmacの使い勝手がわからなかった当たりかもw)

プログラムの背景は今後理解してけばいい。


基本的にはアプリ開発方法としてはプログラミング的開発方法と、GUI的開発方法の2種類があるらしい。
開発スピード的にもGUI的開発の方がよさげと思われ。

また、アプリは下位互換性が保証されているので基本的に下位OS用のSDKで作成したアプリは上位のOSでも動く。が、逆は偽なり。当たり前か。
上位OS用のAPIを使いたい場合は対象ユーザの動向を見てからですね。

mac book air導入&Snow Leopardでのemobile設定

mac book airデビューしました!

うっすいPC欲しくてさ。
iPhoneアプリ開発とかちょっと興味あってさ。

ついに導入していしまいました。
新卒半年でためたお金が完全パァですよ、全くもう。


とはいえ導入したのは1週間前。
ネット環境としてemobileを使おうと思ってたんだけど、Snow Leopardはemobileの設定上の不具合があるみたいでなかなか導入できていませんでした。

とはいえ導入がそんなに難しかったわけじゃなくてその時間が取れてなかっただけなんですけどね。
以下の通りにやれば何のその。

http://www.kbuild0231.org/2009/08/29/snowleopard_d02hw_clearinstall/


これで電車の中でもカフェでも。
自分の好きなところがオフィスになるわけだね。

楽しみ♪

2009年10月11日日曜日

集合知プログラミング勉強中。

集合知プログラミングについて勉強中です 参考:集合知プログラミング
集合知プログラミングとは、多数のデータが存在する中から有益な情報を得るための手法の一つで、簡単にいえばみんなが好きなものは僕も好き。似たような人が好きbなものは僕も好き。みたいなそんなプログラミング(若干語弊あるか?)。

以下は使えそうかなと思われるな技術についていくつかまとめてみました。

①クラスタリング


あるデータ群があった時に自動的に分類を行うための技術。
データ群が何かしらの属性を持ち、その属性を数値化できるとき、この手法を適用することができる。
クラスタリングを行う手法としては、k平均法や階層型クラスタリングが主流。
k平均法に比べ、階層的クラスタイリングのほうが汎用的で使い勝手がよさそう。
教師なし学習の1つ。

②ベイジアン分類器


あるデータ群があった時に、そのデータが分類されるべきカテゴリ名までわかっている時、ベイジアン分類器が有力。
基本的には教師となるデータ群があり、それらデータ群を元に分類器のパラメータ調整を行うことで分類器が完成する。
分類器完成後は未学習のデータであっても分類を行うことができる。これを汎化という。教師あり学習の1種。

③ニューラルネットワーク


あるデータ群があった時に、そのデータが分類されるべきカテゴリ名までわかっている時、分類器を作るための手法の一つ。
つまり、ベイジアン分類器とできることとしては同じ。
ニューラルネットワークはその名の通り、ニューラル、すなわち神経細胞のネットワークを模倣した数学モデルにて構築される。

ベイジアン分類器との違いは、ベイジアン分類器がデータ群を線形に切り分けるのに対して、ニューラルネットワークはより一般化した形の任意の関数にて切り分けることができること。すなわちより複雑なデータ分類器を構築することが可能。

一方、ベイジアン分類器に対する弱みも複数存在する。

ネットワークの規模を決める定量的指標が存在しない。
ある一定の経験則に基づく中間層や入力層の決め方は存在するが、データセットの統計上の特徴に左右される。

また、ベイジアン分類器はトレーニングの速度と、巨大データセットに対する問い合わせ速度に強みを持つ。高速演算が必要な局面にて効果を発揮する。
また、分類のされ方がニューラルネットワークではわかりにくいのに対して、ベイジアン分類器は統計情報に基づくためわかりやすい。

③決定木分類


あるデータ群があった時に、そのデータが分類されるべきカテゴリ名までわかっている時、分類器を作るための手法の一つ。
これもベイジアン分類器やニューラルネットと同様のデータセット群を分類するために用いられる。

最終的な学習結果が、決定木と呼ばれるツリー構造になるのが特徴。
データセット群を学習させると、最終的にはYes/Noゲームを自動的に生成するようなイメージ。
学習済みモデルの解釈が最も直観的にわかりやすい。
学習済みモデルの解釈が非常にわかりやすい。
また、非常に重要な要素がツリーのトップに出てくることが他の分類木に対する強みといえる。

2009年8月7日金曜日

railsでdebugが楽にできるようになりました ~ruby-debug

ruby-debugが便利。

今までは、デバッグを行うときに、流れるログを見ながら

p "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"


なんてものを目印にエラーがどこで出ているか、
また、関連個所に変数の値が正しいかどうかを表示させながらデバッグをしていたわけなんですけれども、ruby-debugを使うと便利。
止めたいところで止めてくれるから。
そこでいろんな変数を見ることができるから。

以下設定手順。

1.gem install ruby-debug
2.処理を途中で止めたい部分で、「debugger」と記述。viewの場合は「<% debugger %>」を記述。
3.実行
4.debuggerと書いたところで一時停止するので、そこでデバッグ用のコマンドを叩く。

以上。

デバッグ用のコマンドは以下のものを使うと便利そう。
list: ソースの表示
var: local ローカル変数一覧表示
pp: 変数名 変数の表示
frame: コールスタック表示
step: ステップイン実行
next: ステップオーバー実行
cont: 実行再開

WISH2009がおもしろそう。

前々から気になってたTokurikiさんのWISH2009の一般参加申し込みが始ってるようです。
http://blog.tokuriki.com/2009/08/wish2009_2.html


WISHの略は
Web
Innovation
SHare

知名度が低いけれども可能性のあるサービスや端末が飛躍するきっかけを与えようというのが目的。

NikkeiBPNet、ITmedia、TechCrunch、CNETなど、非常にメジャーどころのメディアさんたちがメディアスポンサーになってるあたり、かなり注目度も高いんじゃないかと思ってます。

日本からこういうサービスが出るようになるといいなと思いますし、
こういう場で堂々と発表できるサービスを自分で立ち上げていけるといいですな。

WISH2009

2009年7月10日金曜日

Web立ち上げのリアルな声を聞くのはおもしろい。

Web立ち上げ勉強会というものに参加してきた。

いかにして新規のWebサービスを立ち上げるか、そしてそれを広めていくかということに対して、参加者のWeb立ち上げ経験者が意見交換を行うというもの。

リアル体験談は非常に興味深し。


・仮説を立てたらしっかりと検証を行うこと。
・初期ユーザの獲得には人脈力が大きくすること。
・初期ユーザの獲得はひたすらプッシュ!
・プッシュするにしても効果の高いプッシュをすべき
・リアルな情報が信頼感を向上させる
・初期の流行ってる感が重要
・初期の流行ってる感はスタープレイヤーを置くことで対処
・スタープレイヤー以外の一般プレイヤーは見せないくらいでいい。
・コミュニティ系サイトは炎上する
・炎上した際に炎上したままにするか炎上を削除するかは両者ともに意義がある
・その際、提供したい価値を考え、軸をブラさないようにすることが重要
・プレスリリースは効果が大きい。
・プレスリリースの際にも方法論はある。
・異業種交流会でライターさんと知り合いになっておく
・月曜の朝一にプレスのお願いを出すといい、など。

などなど。
備忘録的に書きました。


グループワークでtwitterの新しいサービスを考えるということで
taxtter
というものを発表してきました。

反応はいまいち。。

2009年7月1日水曜日

[Rails]findメソッドとfind_by_idメソッドの微妙な違い

モデルが参照するテーブルのレコードで、存在しないidものにアクセスしようとすると、その戻り値がfindとfind_by_idで違うことについて。

dataテーブルのidカラムが1~9まで埋まっているものとしよう。
このとき、id = 5のものにアクセスしようとすると、

Data.find(5) # => datasテーブルの5番目のDataモデルインスタンス
Data.find_by_id(5) # => datasテーブルの5番目のDataモデルインスタンス
Data.find(5) == Data.find_by_id(5) # => true


同じものが返ってきます。
一方、id = 10のデータにアクセスしようとすると、そんなインスタンスはなく、

Data.find(10) # => # ActiveRecordNotFound
Data.find_by_id(10) # => nil


返ってくるものが違うんですね!