2012年9月30日日曜日

英会話学校の価格破壊


Skype英会話が流行っている。
昔の人は従来型の、部屋を構えて正社員の講師が一対一で教えるスタイルを想起するかもしれないが、今はSkype一つで家から英会話ができてしまう時代。


これはもう一過性のものではなく、今後のスタンダードになると思われる。
最大の要因は価格差。


私は、マンツーマンを謳った従来型の英会話学校を2社ほど回った。
プランとして提示されたのはどちらも1回(50分)あたり8000円程度。
一方でSkype英会話の方は1回(25分)200円程度。

分単位で比較して、20倍も価格差がある。
Skype英会話が出せるこの価格競争力は人件費と固定費が劇的に低いということがある。
明らかなことではあるが以下の3点は明確な差になっていると思う。

- 店舗を構える必要がない
- フィリピン人のアルバイト講師は給与が安くて済む
- 予約システムが使いやすい(Web上ですべて済む)

また、受講者側にもメリットがある。
- 時間がフレキシブル(24:30まで講義がある)
- 圧倒的安さ


まだまだサービスの悪さがあったり、講師の当たり外れがあるところがあるが、
低価格で、夜遅くに英会話をしたいニーズを完全に掴んでいると思う。

Androidのソースコードを落としてくる作業


低レイヤーのドライバ等を実装する身としては、Androidのソースコードから学ぶものが多いはず!
そんなきっかけで今日はAndroidのソースコード落とす方法の備忘録。
殆どここ↓みればわかるんだけど
http://greety.sakura.ne.jp/redo/2012/02/windowsandroid.html

とりあえずまとめてみる。


うちのPC環境はWindows7 + Cygwinな環境です。
gitインストールしたあと、以下のコマンドを実行して超待つだけ!超!

$ mkdir android_source
$ cd android_source
$ git init
$ git clone https://github.com/OESF/OHA-Android-4.0.3_r1.0.git

ツリーまるごと落とすのでかなり時間かかります。

2012年9月29日土曜日

第2回関西ソーシャルゲーム勉強会

関西ソーシャルゲーム勉強会なるものがあったので参加してきました.
以下そのまとめ&備忘録


■日本マイクロソフト 砂金信一郎 様
ソーシャルゲームにおけるAzureデザインパターン

- クラウドガールのプロデュース
 クラウディアさんは知らなかった...

- Windows Azureの概略
 マイクロソフトが提供する安心・安全なクラウドサービス
 ベンチマーク先がAWSで,あとだしジャンケンでより良い物を提供
 Azureデータセンター基盤への投資
 Azureは国内でも様々な会社で採用されている
 エンタープライズ系だけでなくエンタメ系の利用が目立つ
 クレカがあれば90日間は無料でできる.
 本人の承諾なしに課金がスタートすることはないので安心
 VMがGUIで簡単に立ち上げられる
 開発言語を選ばないよう,SDKすべて提供されている

- ソーシャルゲーム向けの応用
 システムの運営だけがしたくて運用は任せたい小規模な会社でも便利
 キャンペーンもので一時的に必要な場合も効率的
 例)FFXⅢのキャンペーン,カプコンのドラゴンズドグマ
 mixiクリスマスの運用は前年度と変わらないユーザー数(250万ユーザー)

- Windows Azureの変革
 - PotterMore:RPG仕立てになったオープン後数日で100万ユーザー,1.1億PV/日
 - BigData Hadoopにも近日対応


■サイバーエージェント 山田元基 様
 ソーシャルゲーム開発パッケージ化とネイティブアプリ開発

- 開発したゲームの紹介
 東京ガールズスナップ:ガラケー向けゲーム,3ヶ月で実装,MongoDBを利用
 天空のクリスタリア :スマホ向けゲーム,2012年6月リリース,Ajax多様

- ソーシャルゲーム開発のパッケージ化
 現状:スマートフォン特化,カードゲーム増加,標準搭載機能の増加
 →パッケージ化に向けて,ゲームノウハウの共有->ライブラリ/APIの開発を行う
  ・ライブラリAPI一覧
   ガチャ,ショップ,ランキング,招待機能,トレード,掲示板 . . . 
   (サイバーでは開発は全部Java)

 - HTML5でのWebアプリケーション開発
  ・WebViewを利用したネイティブアプリ開発
   PhoneGap : クロスプラットフォーム用の開発フレームワークを利用

■KLab 黒井春人 様
- Jenkinsの導入
 -> 既知の話.サーバー構築が面倒らしい.

- 組織の変化を許容する
 急成長するソーシャルゲーム開発会社は人の移動が激しい
 人の出入りに柔軟に対応したい

■LTで引っかかったキーワード列挙
- Googleトレンド:話とほぼ関係ないけどこんなのあったのか面白い.
- iOS,iPadアプリ開発,Objective C:開発やったことないけどアプリを実装しよかな.







2012年9月25日火曜日

GAE for python の環境設定をしたときの備忘録


GAE for python はDjangoっていうフレームワークを使って簡単にウェブサイトが作れるお!
って情報を、今日本屋で立ち読みしてた。
とりあえずローカルで動かして確認して、デプロイするところまでをやってみました。
以下その備忘録!



まず、そもそもPython2.7とGoogleAppEngineは入れてたので以下の2点のみで環境設定が済んだ。


1.EclipseにPyDevを入れよう

 ※Eclipseは日本語化しておりませんのであしからず

・Help -> Install New Softwareを選択
・Work with の欄に ”http://pydev.org/updates”を入れて”Add”を選択し、インストール


2.PythonのインタプリタをEclipseで設定しよう

PyDevインストール後に、GAEのプロジェクトを作成しようとすると、
「Project interpreter not specified」
と怒られるので、インタプリタのパス設定が必要。

設定は、、
メニューバー -> Window -> Preferences -> PyDev -> Interpreter - Pythonを選択肢、Pythonのインタプリタ(python.exe)を選択しApplyを押下!

以後は新規のプロジェクトを作成してRun

・メニューバー -> File -> New -> Otherを選択
・ PyDev Google App Engine Projectを選択し Next
・GAEのディレクトリを入力
Run As -> PyDev: Google App Run

でローカルで動きます。
確認方法は、ブラウザから http://localhost:8080 にアクセスするだけ。


3.デプロイで公開しよう

・GAEでApplicationを作成
・Eclipseで先ほど作成した名前と同じプロジェクトを右クリックして
 PyDev:GoogleAppEngine -> Uploadを選択。
・Googleのメールアドレスとパスワードを求められるのでそれを入力すればデプロイ完了。
確認方法は、、
http://アプリ名.appspot.comにアクセスする。


2012年9月23日日曜日

Developers Summit 2012 Kansaiにいったときのまとめ


名称Developers Summit 2012 Kansai (通称:デブサミ関西)
会期2012年9月14日(金)
会場神戸国際会議場 5F(兵庫・神戸) アクセス5Fレイアウト
主催株式会社 翔泳社
お勧めする方技術者、ソフトウェア開発者、システム開発者、ネットワーク管理・運用者、IT教育担当者、 ITマーケティング・セールス担当者、IT関連部署マネージャ、プロジェクト関連マネージャ
参加費無料


完全にミーハー精神で及川さんの話を聞きに行きました!
以下それのまとめ。


Google及川さん:

■chromeのプロジェクトに学ぶAgileでScaleするソフトウェア開発  // 及川卓也 @Google

- クラウド時代のソフトウェア開発

大規模ソフトウェア開発
 大規模ソフトウェアって?
  -> みどりの窓口,発電所,社会インフラを支えるシステム
 
  ウォーターフォールモデル
  plan design implementation stabilization release


- 大人数開発で必要になってくることが工程管理(ガントチャート)

 大規模なものを小さい単位に分ける
  Googleではチームが小さい(5人程度)
  不必要なドキュメントの生成やコミュニケーションを減らすため.
  できるだけ少人数にして権限を移譲する
  小さいチームではテーマを共有することが大切

 Branch管理,
 Test: Priorityが低いものについては修正するか否かをしっかり検討する
 Release: 回収はありえない

- クラウド
 クラウドにおいてはデバイス側のソフトウェア更新が要らない
 低いデプロイメントコスト
 Release後も,ダウンしないかどうかが懸念事項
 ユーザーのトラフィックに対応できるか

- クラウドの開発サイクル
 Launch & Iterate : 何回も反復する.はじめから完璧を求めない
 完成度が許容出来るレベルのものを作成し,
 反応を見て改良を加えることで完成度を高めていく
 仮説と実証を繰り返していく
 VersionLess: 利用者はバージョンを意識することがない
 リニアな形で進化を遂げていく

- Chromeのプロジェクトの歴史
 ブラウザは情報の受発信.静的な情報のやり取り html
 chrometimemachine
 バージョンアップという概念を無くしたい

- オープンソースプロジェクトの紹介サイト
 ohloh
 ChromeのS:Simplicity, Security
 Reviewerにレビューしてもらわない限りコミットされない
 chromium-dev@googlegroups.com  
 irc.freenode.net/#chromium
 chromium.org -> for developer

- 徹底した自動化
 Buildbot: Continuous Build
  Test: Patchをsubmitする人がtest作成も行う
 TryServer: パッチをすべてのプラットフォームでBuildし,
       それをパスしてからレビュー

- オープンソースプロジェクト
 徹底した自動化+優良な市民



■ 関西から世界に通用するスマートフォンサービスの開発 // 川端雄補 @Cyber Agent

- スマートフォンサービスの開発
  http://goo.gl/nnShl
  JS: node.js
  DB: MySQL, NoSQリ HTML5 -> 速度が必要な部分はnative.

  流通を考えるとマーケットに載せるのは大切
  開発サポート:Jenkins,Redmine,新しめの部分はsubversion,Githubのエンタープライズ版

  アクセスログ解析: Hadoop, GoogleAnalytics

  9/29 ソーシャルゲーム勉強会

- スキルセットの最新化
  その時々で求められる価値を学び続ける


「実はユーザ評価下がってる!スマフォアプリ開発の罠」 ~組込みの観点からの解決方法、省電力、UIX~ // 杉本礼彦@ブリリアントサービス

- NFC Lab Farm Box
 NFC QUEST: ブースでカード配布して参加者が魔王を倒すゲーム.3人でないと倒せない
 街コン: NFC街コンツクール
 変わった商店街:六角橋
 ARO android -> AT&T univ

 都心部の基地局は繋がらない
  → アプリが頻繁に制御信号を送信している
  → 制御信号送信回数を減らす
  → 消費電力が下がり,アプリの評価が下がらない



京大情報学OBが京大フェス2012にいってきたときのまとめ


京大フェス2012に行ってきました。
想像以上に良かった!俺の3000円は無駄じゃなかった!
最後のほうは意識飛んでしまったけど。。。


京大フェスは4構成で、
Session1: 新しい挑戦だけが、世の中を変える
-> ベンチャー社長の人生振り返り、どんな挑戦をしてきたか。なにが自分を変えたのかについて話されてました。

Session2: 次はこうなる!時代を見通すヒント
-> 岡田斗司夫さんのお話しか聴いてなかったけど、大衆の視点とは違った鋭い視点でのおもろい話してた。このセッションのテーマと内容が合ってるのかは謎。

Session3: OBプレゼンテーション
-> 京大を出て、様々な業界で活躍されてるOBの話。

Session4: 受けてみたい、京大白熱授業
-> 瀧本哲史さんと、北川智子さんのお話。



以下、講演中にとったメモ。


Session1: 新しい挑戦だけが、世の中を変える


孫泰蔵@MOVIDA JAPAN CEO:

- 人生を変えたきっかけ
 Yahoo創業者との出会い
 若くして必要な情報を必要な人に提供する使命を持って、世の中に新しい価値を提供しているのに刺激を受ける

→ 早期にロールモデルとなる人に出会うことが成長につながる


- アントレプレヌールとは
 技術革新や規制緩和によって起きる変化に気づき,社会を変えること
 新しい価値を創るにあたり,変化はチャンスである.

- これからWebサービスを作るなら
 英語で作れ。なぜなら世界中がマーケットとなる。不得意な英語だと言葉数は減り、ビジュアルにサービスが構築される点が良い。なぜなら言葉に頼った説明はユーザビリティを低下させるからだ。
 「知ってるから通じる」がガラパゴス化に繋がる

- Think Big
 物事は大きく捉える
ex) サグラダファミリア:一代ではできない大きな仕事




クリストファー・テイト@ コネクトフリー CEO:

- コネクトフリー株式会社の事業(ex:ジュンク堂書店の事例)
  書店内に無線LANを提供し、店内の書籍を検索できる仕組みを構築。
 地元に密着したローカルな広告を打つことでペイするビジネスモデル。

- be the first person to solve the problem
いい環境で,失敗を早くすること


徳谷智史 @ Egg FORWARD 代表:

- なんか就活セミナーっぽい内容
 時間を忘れて取り組めるものは何か?
 その理由は何か?
 これらの答えに「モノ」がないはず.モノに充実を感じることはないから.

- 身の回りで親しい人は誰か?
 人は周囲の人に似てくるもの
 新しいチャレンジをしたいならチャレンジしてる人の回りにいるべき




Session2: 次はこうなる!時代を見通すヒント



岡田斗司夫 @ 評論家:

 成功には理由がない.理由があるのであれば皆成功している
 失敗には理由がある.失敗した人は理由がすぐに言える
→失敗の理由を遠ざけて成功の法則を求めていくと結局平凡になる


---------------------------------------------

ごめんなさいこの辺から集中力途切れました。。。


Session3: OBプレゼンテーション

小野邦彦 @ 坂ノ途中 CEO:


Session4: 受けてみたい、京大白熱授業




Callback関数を知らん人がまず理解すべきことのまとめ。

未だにへっぽこプログラマーの私が、「Callback関数なにそれ美味しいの?」状態から、
Callback関数、「それはとっかえひっかえされる関数だお(キリッ」ってなるまでにとった行動のまとめ。
ちなみに私、C言語とPythonくらいしか喋れませんので、今回はC言語に特化した内容でお送りします。

※Webから漁ってきた情報から手っ取り早くまとめたものなので間違いもあると思われます。間違った点はゴリゴリ指摘していただけるとマンモスウレピーです。


Callback関数とは?

■プログラム中で、呼び出し先の関数の実行中に実行されるようにあらかじめ指定しておく関数(IT用語辞典より引用)

初心者が読んでもわけわかめだと思います。いきなり定義が頭に入る奴なんていません。
これはまだマシな方でWikipediaの解説なんてクソイミフです。
アホだと自覚してる私は読む気さえ起きません。

完全理解は無理で、ある程度の理解水準に素早く到達して、
「とりあえず実装できる」状態になりましょう。
その後、徐々に理解を深めていく方が学習は早いです。
ここでは3段階で解説して、「とりあえず実装できる」状態になりましょう。

Callback関数を理解するためには、
1:ポインタの理解、2:関数ポインタの理解、3:callback関数のメリットと実装方法
を学ぶ必要があります。


1:ポインタとは?

C言語入門者を悩ませるポインタです。
まずは軽くポインタって何?ってところから。

ポインタ⇔指す人ってわけで、C言語の入門書では以下の様なコメントが書かれてます。

int *p;    // int型を変数を指すポインタ
int data; // int型の変数
p = &data; // pはdataを指す

1行目:
いつも「指す」って何やねんってなります。
私は、ポインタはアドレスを格納する変数だと思ってます。
だからpはアドレスを格納するための変数です。
指すとか意味分かんないからアドレスを格納するただの変数だと思うのです。

2行目:
int data; って書いた瞬間に、メモリ上でプログラムが使える領域に対して「sizeof(int)分の領域をdataが使います!」って宣言したことになります。
イメージは、「空いてる席を見つけて、これ俺の席!」って宣言した感じ。

3行目:
&dataはその領域の先頭を表します。
&は実体の前にくっつけてアドレスに変換し、 *はアドレスの前にくっつけて実体に変換します。
つまり、ここでは pと&dataはアドレス、*pは実体となります。
ポインタに躓いたときはよくコンパイルエラー吐いたんですが、
簡単な話、代入時に両辺がアドレスか、両辺が実体かをチェックすればいいだけなのです。


2:関数ポインタとは?

次に、本題の関数ポインタに移ります。
先ほどint *p;ってかくと「pさんはint型のアドレスを格納する変数だお!」宣言だって言いました。

そこで私のようなアホはこう考えます。
「関数ポインタ」って、読んで字の如く解釈すると関数のアドレスを格納する変数だろ?
じゃぁそれの真似して、
kansuu *p;って書いたら「pさんはkansuu型のアドレスを格納するお!」ってなるんじゃないかって。
でも残念ながらコンパイラさんはkansuu型?なにそれ?しらんわクソが!ってなります。
そもそも関数って返り値、引数、お名前って要素がありますやん?
なんで名前しか教えてくれへんの?あほちゃう?
コンパイラさんはこんな気持ちになることでしょう。
じゃぁそれら3つを定義したkansuu型を定義してあげよう!

架空の関数kansuuさんが以下のように実装されてたとして~、、、
int kansuu(double hoge){
  return 1;
}
C言語では以下のように定義します。
 int (* p)(double); // 返り値 (* ポインタ変数名)(引数の型)
これ覚えるとこです!とりあえず、ここだけは覚えるとこです!
重要なことだから二回言いました。

で、世間ではこういった仰々しい書き方がうざいからtypedefを先っちょにくっつけて、
typedef int (* FUNC_POINTER)(double);
しちゃってから
FUNC_POINTER p; //
とか書きます。
これで、関数kansuuを指すポインタpが定義されました。
ポインタっつーのはアドレスを格納する変数だから、
p = kansuu; は許されます!

これは以下の理由によります。
Cで定義された関数って、プログラムを実行するとメモリ上のどこかに関数の実装部分を確保します。例えば、 void hogehoge(void)って関数を定義すると、その関数の実装部分のアドレスは hogehogeでアクセスできます。
とりあえず、引数・返り値とか関係なく、関数名が実装部分へのアドレスだと思ってください!

てなわけで、p = kansuu;って書くと、
pはkansuu型のアドレスを格納する変数ポインタで、kansuuはkansuuへのポインタ。
両辺はアドレスを意味するからこの式は正しい。
pにkansuuへのアドレスが格納されたんだな!って解釈になります。
まとめると、関数ポインタは、関数の実装部分へのアドレスを格納するための変数なのです。





3:callback関数のメリットと実装方法

とりあえずサンプルプログラム。





後にくっそ重要なこと3つ。

1.引数、返り値が同じ関数のアドレスだったら関数ポインタはなんでも格納できる
2.関数ポインタが指してる関数は、”ポインタ(引数)”で呼び出せる
3.1、2から関数ポインタに格納されてる関数のアドレスによって関数を呼び分けられる

ってことです。
func1,func2は「とっかえひっかえできる関数」だけどそれだとカッコ悪いから我々はそれを
「コールバック関数」と呼ぶのです。
main関数部ではpが格納してる関数アドレスによってfuncは、関数を呼び分けております。
同じように呼ぶだけで処理を変えられるのはメリットだし、
汎用性という観点でも使える技術です。

※ 当ブログは以下のサイトに移転しました。

ここまで読んで参考になったという方は、ローベル本をおすすめします。
良質かつ簡潔にコールバック関数についてまとまっていました!


例えば、アプリ側の開発者に対して、Aボタン押下時に好きな処理を記述させられるようなSDKを設計したい!!とか言う要望にはもってこいですよね。