2011年12月7日水曜日

thisによりオブジェクト自身を参照するときの注意点

@dankogaiさんが書かれた怠翻 - JavaScriptでありがちな9つのシマッタ のthisのくだりが参考になったので忘れないようメモ。

オブジェクト自身に紐づいた子オブジェクトをthis.~~で定義し、それをさらに別の子オブジェクトの中で呼び出すとundefinedになってしまう。var selfにthisを代入することで、別の子オブジェクトの中でも呼び出すことが可能になるとな。




2011年12月5日月曜日

JavaScriptの等価演算子(==)と厳密等価演算子(===)の違い

"=="は型を自動変換して比較してくれるので便利だが、型も含めて厳密に比較したい場合は"==="を使う。




2011年12月3日土曜日

OpenCVをMacOSX(Lion)にHomebrewでインストールしてXcode4で実行するまで

Lionの環境にOpenCVを入れる。

OSXバージョン:10.7.2
Homebrewバージョン:0.8

参考サイト:HomebrewとXcode4でつくるOpenCVの環境


インストール


まずはHomebrewでOpenCVをインストール。

%brew install opencv


無事インストール完了。以下のディレクトリにインストールされた。

/usr/local/Cellar/opencv


Xcode4でサンプルを実行


新規プロジェクトを[Apprications]>>[Command Line Tool]で作成。

サンプルコードはopencv.jpからビデオ入出力のサンプルコードをmain.cにコピペする。

実行するとヘッダーファイルcv.hが見つからないとエラーがでる。

Xcodeの左側のProject navigatorで、プロジェクトファイルを選択するとビルド関連の設定が行える画面になる。

ヘッダーのパスを指定するのは[Build Setting]タブ>>[Search Path]グループ>>[Header Search Paths]。ヘッダファイルがインストールされている以下を設定する。

/usr/local/Cellar/opencv ※Recursiveにチェックをつける

実行すると今度は、リンクエラーが起きる。OpenCVのライブラリとのリンク設定を[Build Phases]タブで行う。[Link Binary With Libraries]に実行に必要なライブラリを登録する。今回は

libopencv_highgui.dylib

だけで大丈夫。実行成功。サンプルアプリの終了は[ESC]。



2011年12月2日金曜日

スマートフォンビジネスサミットの個人的まとめ

イベント詳細ページ:http://atnd.org/events/22098
Twitterハッシュタグ:#smartphone_summit

ぜんぜんまとまってないですが個人的に興味を持った企業の話しを書いときます。


テクノード

代表アプリ:Touch The Numbers、うろおぼ絵17、らくがきライブ
無料アプリで広告で収益化するビジネスモデル。

なぜ広告モデルか?

  • 無料で配れるから母数最大化 => カジュアルアプリが多いから、有料だと母数を手放す
  • 継続した収益 => 売り切りだと初動が収束=収益の収束

段々と広告効果(コンバージョン)が重用になりつつある。広告主が期待した効果を出す必要がある。そのためには・・・広告と親和性の高い企画をする。開発者は面白いものを作りたい!と考えるが、これだけが先行すると広告としてもったいない。初から広告を走らせることを意識しないと思ったより効果がでない。

どうやるか? - 2つの手段

①起動回数を増やす => 短時間に何回もリピートするアプリに親和性!
②滞在時間を伸ばす => 一回立ち上げたら長く遊ぶ。(らくがきライブ、うらおぼ絵17)

どちらも得られる効果は同じ
あるユーザーの7日間 : 毎日5回起動 = 週2回10分間起動

クリック率も大事
平均で0.3%。1%を目指す
ただし、ミスクリックを誘発はオススメしない。ユーザーが離れる。むしろ防止に努める。Touch The Numbersでちょっと広告の位置をずらすだけで倍位変わる。ミスクリックが増えてしまう。

ヒットの形

1.ベストセラー(Touch The Numbers、うろおぼ絵17)
2.ロングセラー(Touch The Numbers、らくがきライブ)

比較
収益性は : 瞬間1位 < 長期間200位

ベストセラーは売り方次第。ロングセラーは内容。

開発Tips

2人のディレクターを立てるのがおすすめ
・マーケティング担当
・クオリティー担当

プロデューサー、とディレクターだと力関係が偏る。2つを兼ね揃えたものを生み出すにはどちらかに偏る訳にはいかない。1人で兼務すると自分の得意な方どちらかに偏ってしまう。

One Strong Point

ここだけは負けない!というものを持っていると良い。テクノードでは「触ってて気持ちいい!」を意識している。



ビーワークス 〜 ついあなたが「なめこ」を栽培してしまう理由


モチベーションを上げる効果

・キャラの造形
・コンプリート要素
・図鑑の説明 おもしろい

モチベーションを下げない要素3つ(外には見えないがこだわっている)

①時間の使い方
・最初のなめこが映える瞬間の時間に苦労
・気持ちよさ 
・はえすぎない、はえなすぎない
・なめこフードの時間配分(15分〜8時間の5段階、コストにも差)
・いつみてもOKだから時間にしばられない

②スキマを埋めろ
・30秒で最大のユーザー体験を(起動→収穫→たのしい)
・すくないインプットでたくさんのアウトプットを
・起動するための障壁を下げる

③アップデート
・図鑑を増やすだけでボリュームアップ(グラフィック、テキスト、発生率調整のみ。コスト小。ユーザーの満足度高)
アップデートの効果:150万DL数のとき70万ユーザー(約半分)のユーザーのアクティビティ回復
・アップデートの告知で効果を最大化
・既存ユーザーが長く楽しめる
・新規ユーザーへのアピール(更新しますよ)
・離脱防止
・SNS拡散を狙う



カカオトーク

・全世界3000万ユーザー
・216ヶ国(12言語対応)
・8億メッセージ/日
80%アクティブユーザー(1日35回アプリを起動、一人あたり51分くらい使っている、トップ10%の人の使用時間:6時間以上)

8割韓国、残り2割のうち:25%日本、25%US

さらなる挑戦
・アプリ内にバナーを入れる予定はない
・スマホ時代になって何が変わったのかをずっと考えている
・どうしたらスマホでトップになっていけるかをベースに考えている

2012年カカとも1億人を目指している

韓国では1位、2位を続けている どうやったら売れるか考えたことはない
ジャパンが課題。韓国は別枠。グローバルで勝負する。このままではブームで終わってしまう。いかに新規ユーザーを獲得するか、アプリの魅力が大事。韓国では無料でSNSというだけで魅力だが日本では別。

あとは3千万のユーザーがいかにアクティブに使うか
世界は変わっていく。
メジャープラットフォームとして何があるべきか
①楽しみ ②お得
というキーワードをいかにアプリに組み込めるか。
①新しい絵文字を韓国でリリース。iPhoneでベスト3位に上がっている。より楽しく使うためのツールと考えていたが利益もでた。
②クーポン、無料電話

繋がるのは人だけではない

Plusカカとも

プラスになる新しい友だち:好きなブランド、アーティスト、芸能人、お店と友達に

3つのタイプ
・情報配信
・クーポン
・応募型のクーポン

12月に日本でもスタート

ソーシャルコマースを否定するわけではないが、クーポンを提供しても、今空いてる席を埋めたいという時に客は来てくれない。そのために、リアルタイムにプッシュできる広告が必要。
通常2割の常連が8割の売上に貢献している。通常のクーポンでは主に新規客を開拓する目的だが、Plusカカともでは常連にもっと来てもらう。

アーティストがなぜカカオで?
・距離感を大事にしている
・今控え室で何をやっているかをファンは知りたいはず



パンカク 〜 グローバル戦略


パンカクのこれまで

・iphone,andoridゲーム開発
・SDK Pankia開発
・米国→グローバルマーケット

LightBike
・SF好きのアメリカのギークに刺さり
・ちょっとした空き時間に遊べて
・友達と対戦できる(対戦のやり方も面白く、話題性)

LightBike2

Pankiaの機能

対戦、wifi,bluetooth、対戦相手選択、友達招待、ランキング複数,期間設定、アイテム管理(アプリ内販売・カテゴリ分け・詳細画面も簡単設定)アップデートの必要なくアイテム更新、social graphコネクト、UIにHTML・CSS・JSを利用しカスタマイズが簡単など多くの機能を提供

対応OS:iOS, Android

Promotion機能
・既存アプリのアクティブユーザーに対して全面広告を表示
・新規リリースアプリのリリース日にユーザー誘導
・多言語対応:英語、日本語、他
・ユーザー数拡大中:1000万ユーザー獲得までの日数(Pankia:1年6ヶ月、FB:2年8ヶ月、Tw:2年7ヶ月)

米国ランクイン続々

Game Developperとしては
実は日本有数の米国スマホ向けリッチなソーシャルゲームデベロッパー


パンカクのこれから

・最優先:Pankiaのユーザー数拡大

そのためには何でもやる

iOSか?Androidか?
両方に対応しているが、自社で出すならiOSに力を入れる

理由:
Androidの人気?
・iPhoneを使いたくない理由があるユーザーが使う、iPhoneの代替物
・自由の代償が大きい

Android端末は安い?
・メーカーは変な機能、本質的でないスペックで差別化をしてしまう
・Androidは1モデルあたりの普及台数が非常に少ない

iPhoneの方が圧倒的な価格競争力を持ちうる
マーケット
米国のみを狙う

なぜ?
・カナダ、イギリス、オーストラリアは勝手についてくる
・アジアの英語圏との多い地域も。インド、シンガポール、インドネシア

中国、アジアは?
・中国の先にグローバルはない
・米国の先にグローバルがある
・米国市場もまだまだ未熟で攻略の余地がある
・*大量の広告費は必要

日本は?
・日本を考慮してはいけない
・日本と米国のマーケットは全く別物
・ぜひ自分の目でiTunesストアを比較して欲しい

ウェブか?アプリか?
 => アプリ

・米国向けに作るなら
HTMLはダメ、Unityは良い
*ゲーム以外でのアプリ内のHTML活用は有り

アメリカのユーザーはiPhoneをゲーム機だと思っている!

日本にいながら米国でランクインするタイトルを作れるか?
パンカクの答え:「変態が世界を変える」

・変態=やりすぎてしまう人
・のめり込む才能がある
・すきですきでやりすぎてしまうことを仕事にすると無敵
・その才能が日本人にはある

向こうに行って合わせるより、日本で尖ったものをつくる!

2011年11月20日日曜日

新米プログラマが何をすべきなのか



結論は出てないけど最近悩んでいることを書いとく

どういう成長がしたいかによっても変わるが、一般的に良いエンジニアと言われるようになるには、新米プログラマはどんなことを意識してどんなことを学ぶべきなのか?

ここでいう新米プログラマとは、プログラミング言語の入門本をクリアして簡単なモノをひと通り作れるけどセキュリティとか最適化とかちょっと突っ込んだことは無知なレベルを想定しています。

僕がまさにその新米プログラマなのです。


よく聞くのが、「一つのことに集中した方が成長が早いし、一つのことを極めた方が他のことを習得するスピードも早くなる」という意見。例えば、Javaの習得に集中してJavaを使えば何でも作れるってくらいになってから他の言語を勉強した方が、JavaとJSとrubyを同時に勉強するより生産性が高い。

でも実際の開発では、Javaでサーバー側を作っていてもフロントはJS。何か一つの言語を極めようとしてもモノを作ろうとしたら、その言語+HTML+CSS+JS+DB+OOP+shell+バージョン管理+その他の開発環境などなど重要度は違えど色々同時に勉強する必要があります。新米は覚えることが多くて混乱します。

マルチタスクは必至

だからと言ってプログラミング言語まで色々やると必要なレベルまで習得するのが遅れますよね。最近感じています。「開発の時間」と「勉強の時間」を作るべきところを「開発の時間」と「別の言語での開発の時間」というタスクになっています。

現在興味の赴くまま、サーバーをJava・フロントをJSで開発しつつ、同じJSってことでTitaniumでアプリでも作りつつ、rubyやscalaなんかをかじってみようかなとか考えています。色々誘惑がありますよね。

今は割りきって色々つまみ食いしちゃってます。モチベーションも継続するし、楽しいです。

しかし、このままだと確実に一生一流になれぬまま器用貧乏になりますね。僕は習得は得意ですが、追求は苦手です今のところ。どこかで一つ殻を突き破らねば。プロのエンジニアになるには得意分野を見つけて、深いとこまで追求しないとダメですよね。

はじめは、どんなものがあるのか色々つまみ食いして回って、来年4月あたりから殻を破るべく選択と集中をしようかなと考えています。




2011年11月8日火曜日

ボスからのアドバイス


ソーシャルゲームの開発も佳境に入ってきたところで、ボスのアドバイスを再確認しておきます。できるエンジニアはみんなやっているらしい。


1.事前にやるべきことをブレークダウンする


ひと通り機能を作ってみて、何をすればどう動くかが分かってきたら
今後は事前に計画を立ててみましょう。
  • テーブル設計
  • URL設計(機能を実現するのに必要なアクション)
  • アクションごとにどんな処理をするか


2.リファクタリングは仕様が決まってから


プロトタイプを作る→関係者でレビューする→仕様を固め修正する→リファクタリングする。
(答えがないので、泥沼にはまりがち。ゴールはキレイなコードを書くことではなく、動くコードを継続的に改善すること)


3.事前、事後にプラクティスを頭に入れる


どの言語にもだいたいベストプラクティスを書いた本があります。JavaだったらEffective Javaとか。コードを書く前、書いた後は、それらのプラクティスが頭に入りやすい鉄が熱い状態です。新しい開発のイテレーションに入る前後に1時間でもいいので、時間を割いて、コードを書く時間を濃くしましょう。


4.連絡と相談をマメにする


何をやろうとしているか上司が把握出来るレベルで連絡と相談をしましょう。やり方は自由。口頭でちょくちょく話かけてもいいし、日報につまっているところ、やろうとしていることを詳しく書いてもいい。伝える工夫をする!

ボスの前の会社の人事部長の話ですが、1週間に1時間の定例報告では全然仕事が進まなかった社員が1日10分の報告会をするようにしたらみるみる仕事が進むようになったそうです。話すことで頭が整理させることもあるので、効果的なコミュニケーションで生産性をあげていこう。