最初から高級車メーカーになろうと思ってはならない
ツイッターに書こうと思ったが、ふとがっつり書きたくなったのでブログに。
ちなみに僕は車はおろか免許すらもってなく、ただ Top Gear が好きなだけなので車関係で色々間違ってたらごめんなさいorz
今の自分の身の丈にあったものを作る
イギリスの車番組 Top Gear の司会者 Jeremy Clarkson は新しい高級車メーカーが現れる度にこう思うらしい
『また「Ferrari 以上の車を作るなんて簡単だぜ(鼻声)」と勘違いする馬鹿が現れた』と
実際そのとおりでタケノコのように高級車メーカーがぽこしゃか現れては見事に爆発四散していった。
唯一生き残ったのは Pagani Zonda だけだった(多分他にも Noble とか色々あるとは思いますが詳しくないのでorz)
「彼らは高級車を作ろうとはしませんでした」
どの回かは忘れましたが、とある新しい車メーカーを紹介するとき Jeremy はこう言った。
彼らは車の黎明期を彷彿とさせる車を作った。ニッチに食い込むという戦略のもとで。
ゲームでいうとレトロゲーを作るようなもんでしょうかね?
きっとアングリービデオゲームナードみたいな人が絶対買ってくれますよ!そしてバッファローの下痢をかけてくれるでしょう!
Unity はガチバトル。HTML5 は公園での砂遊び
Unity 本体がブラックボックスの塊だったので長いこと避けてたんですが、最近ようやく触ってみました。
Unity は既存のゲームコミュニティよりは遥かにオープンですが、enchant.js(というより 9leap かな?)に比べたらかなりクローズドだと感じました。
Unity は自分も高級車メーカーに仲間入りができるかもしれない。と夢を見させてくれる魔法のアイテムだと思うんです。
だからある程度クローズドになるのは当然だなーと。そりゃみんな必死になりますよね。
自分の商品の生命線とも言えるソースコードを晒すなんてもってのほかだ。
Unity は遊びじゃないんだよ!!!
9leap のようなおもちゃ箱(最大限の尊敬と感謝を込めて)で遊んでる少年・少女(最近では3・40代でも少女扱いらしいですね・・・)には分からない、ほんとうに食うか食われるかの戦いをしている。
どうも楽しくなかった。
それもそのはずで、僕の総合的な能力(僕自身のスキルレベルとかグラフィッカーの人脈とか資金とか)では並み居る強豪たちにガチバトルを挑んで勝てるはずがないのは明らかだった。勝負にすらなってなかった。
Hunters 2 っていう iOS のゲームいくらか知ってるかい?450円なんだぜ?あのクオリチーで。まぁ多分あれは Unity ではないでしょうが。
嘘みたいだろ・・・こんなレベルの相手だらけなんだぜ?いい感じに絶望するだろ?
どうみてもレッドオーシャンです。本当にありがとうございました。
あと、ソースコードを晒さないというのは、誰からもアドバイスを受けられないということになります。
友達や先生のいない僕には致命的で、学ぶ機会がなくなり僕の成長は頭打ちになることは目に見えてました。
そんな答えが見つからない毎日の中、結局僕はプチ鬱(なんにでもプチをつけるないい加減にしろ!!)になってしまいました\(^o^)/
僕の答え
何週間も悩みぬいた末に僕が出した答えは、もう全部オープンソースでいいや。でした。
いいじゃないですが、一銭も稼げなくても、楽しければ。
それを誰かに丸ごと使用されて稼がれても大丈夫だ問題ない(むしろ感謝)
逆にそれが合図なんだと思います。「お前が作ったものに売りさばく価値があると判断する人間が現れ始めたぞ」と。
その時になってから初めてマネタイズについて考えたんでいいと思うんです。その時こそが高級車メーカーに挑戦するチャンスなんだと思います。
それ GPL でイイジャン。というツッコミもあるかもしれませんが、GPL は諸刃の剣。
ゲームを作っていつの日かこじんまりでいいからお金稼ぎたいなーと思うなら最低でも MIT でなくては将来的に自分の首を絞めることになると思いました。(自分で商用利用する場合、使えなくなる可能性が大)
あと誰かにマネタイズを丸投げ(アウトソージング)できたならーという思いも正直少しあります。
誰かが稼いできてくれて分前もらえて生きていけたらなー・・・と(白昼夢)
とまぁーー長々と書いてしまいましたが三行(AA)でまとめますと。
____ / \ / _ノ ヽ、_ \ / o゚((●)) ((●))゚o \ ほんとは働きたくないからなんとかお金を稼ぎたいんだお | (__人__) | \ ` ⌒´ / ____ / \ / _ノ ヽ、_ \ / o゚⌒ ⌒゚o \ でもマネタイズとか考えると無理ゲーすぎて鬱になるお… | (__人__) | \ ` ⌒´ / ____ /⌒ ⌒\ /( ●) (●)\ /::::::⌒(__人__)⌒::::: \ だからもう考えるのをやめて全部オープンソースでだすお! | |r┬-| | \ `ー'´ /
だっておばんばんwwwwwwwww
現実逃避おつwwwwwwwwwww
socket.io のサンプルを heroku で動かしてみる
http://d.hatena.ne.jp/alpha_neet/20120508/1336497694 の続きです。
環境
node | 0.6.12 |
npm | 1.1.4 |
socket.io | 0.9.6 |
nave を使って node をインストール
2012/05/09 の時点で最新の node のバージョンは 0.7.8 ですが、
socket.io 付属のサンプルが 0.7 以上では動かないので、0.6 系をインストールします。
nave install 0.6.13
nave use 0.6.13
curl http://npmjs.org/install.sh | sh
ちなみに nave usemain
socket.io のサンプルを落とす。
cd ~/work(どこでもいい)
npm install socket.io
mv node_modules/socket.io/examples/chat/ .
cd chat
追加ファイル
- .gitignore
node_modules
- Procfile
web: node app.js
変更ファイル
- app.js
@@ -5,7 +5,7 @@ var express = require('express') , stylus = require('stylus') , nib = require('nib') - , sio = require('../../lib/socket.io'); + , sio = require('socket.io'); /** * App. @@ -42,7 +42,8 @@ app.get('/', function (req, res) { * App listen. */ -app.listen(3000, function () { +var port = process.env.PORT || 3000; +app.listen(port, function () { var addr = app.address(); console.log(' app listening on http://' + addr.address + ':' + addr.port); });
- package.json
@@ -1,5 +1,9 @@ { "name": "chat.io" + , "engines": { + "node": "0.6.12" + , "npm": "1.1.4" + } , "description": "example chat application with socket.io" , "version": "0.0.1" , "dependencies": { @@ -7,5 +11,6 @@ , "jade": "0.16.4" , "stylus": "0.19.0" , "nib": "0.2.0" + , "socket.io": "0.9.6" } }
試しにローカルで動かしてみる
npm install
foreman start (or node app.js)
foreman がなければ node app.js で。
http://localhost:5000 か 3000 を開けばチャットが開始されます。
heroku で使える node と npm の version 一覧
http://heroku-buildpack-nodejs.s3.amazonaws.com/manifest.nodejs
http://heroku-buildpack-nodejs.s3.amazonaws.com/manifest.npm
heroku にデプロイしてみる
http://d.hatena.ne.jp/scalar/20120214/1329227856 を参考にしました。
git init
git add .
git commit -m 'first commit'heroku create --stack cedar --buildpack http://github.com/heroku/heroku-buildpack-nodejs.git
git push heroku master
heroku open
上手く動いたら成功。
ローカルに比べて「Connecting to socket.io server」がちと長いかも。
いつまで立っても動かなかったり、エラーが出たら heroku logs を見てみる。
homebrew 管理していた node.js を nave に移す
heroku では公式にサポートしてる node.js のバージョンが 0.4.7 だったり node 自体のバージョンパップも激しいので、すぐ切り替えれるように nave で管理することにしました。
homebrew でインストールした node.js と npm の削除
(注)npm の削除には node.js が必要っぽいので必ず npm から削除しましょう
http://mochizblog.heroku.com/13を参考にしました。
npm uninstall npm -g
$ brew uninstall node
したところ、エラーが出たので、/usr/local/lib/node_modules/npm/uninstall.js を見てみると
// uninstall .. should not delete /usr/local/lib/node_modules/.. var p = path.join(path.resolve(nm), path.join("/", arg))
みたいなこと書いてあったので
var p = "/usr/local/lib/node_modules/'"
こんな感じに直接指定してみたら上手く消せました?(いいのかこれで(汗
nave を入れる
cd ~/lib
git clone http://github.com/isaacs/nave.git
cd ~/bin
ln -s ~/lib/nave/nave.sh nave
適当に ~/lib とか ~/bin とかに入れちゃいましたけど、多分 git clone する場所は ~/.nave が正しいお作法っぽいです。
zsh で nave を使う
http://koexuka.blogspot.jp/2012/04/zshnaveno-such-option-rcfile.html
手抜きすいませんorz
サイコロを二個振って一つ以上1になる確率
小学生かよ!!!というような問題ですが。
きっと僕が小学生のころは覚えてたんですが忘れてしまったので復習しますた!
というか skype で教えてもらったのでそのまま書きました!
最初1が出た場合(A)
最初1が出る確率は 1/6 ですね。こんぐらいは分かりますよね!?(必死)
次はなんでもいいので 6/6 になります。
よって最初1が出て、次はなんでもいい確率は 1/6 * 6/6 = 6 / 36 になりあす。
最初1以外が出た場合(B)
最初1以外が出る確率は 5/6 です。1が出なかったので次は1が出ないとだめです。
1が出る確率は 1/6 です。
よって最初1以外が出て、次に1が出る確率は 5/6 * 1/6 = 5 / 36 になります。
正直どこを掛けるのか足すかあまり分かってない
サイコロを二個振ってどちらかが1でるのは(A)と(B)の場合のみなので、この二つ足します
6 / 36 + 5 / 36 = 11 / 36
よって、「サイコロを二つ振ってどちらかが1になる確率は 11 / 36 である」(きりっ
引いて考えるという手もある
どちらかが1ではあるということは逆に言えば1(36/36)からどちらも1ではない確率を引いたものでもある。
両方1ではない確率は 5 / 6 * 5 / 6 = 25 / 35 になり 36 / 36 - 25 / 36 = 11 / 36 になる。
enchant.js 使ってみた
websocket が凄すぎるので(←遅い)javascript 始めてみました。
適当にどんな感じで開発してるか軽くメモっときます。
もっといい方法があれば教えてください!!
enchant.js
https://github.com/wise9/enchant.js/zipball/master
から落としてきて解凍。なかの examples/shooting/ を適当な作業ディレクトリにコピー
基本僕 Dropbox の下で作業してるので ~/Dropbox/work/js/test とかに移動。
中の index.html をダブルクリックしてシューティングが始まったら成功
cd ~/Dropbox/work/js/test
mv main.js main.old.js
touch main.js
新しい js ファイルを作って、サンプルのシューティングのソース(main.old.js)を見ながら色々弄るといいキガシマス!
http://9leap.net/
あとここにいけば、むちゃくちゃサンプルプログラムあるので大変助かります!
apache
iphone で実機確認が簡単に出来るとマンモスウレピーので mac 付属の apache を使ってみる。
sudo vim /etc/apache2/users/
.conf
.conf
- Options Indexes MultiViews
+ Options Indexes MultiViews FollowSymLinks
プロジェクトファイルは Dropbox の以下にあるのでシンボリックリンクを貼るため設定を変更する。
あとプロジェクトファイルまでのパーミッションが全部 755 になってないとダメっぽいです。
僕の環境だと ~/Dropbox が 755 になってなかったので chmod 755 ~/Dropbox にしました。
cd ~/Sites
ln -s ~/Dropbox/work/js/test/ test
これで、上のメニュー > リンゴマーク > システム環境設定 > 共有 > Web共有 を on にする。
「パーソナル Web サイトフォルダを開く」の上に表示されている URL をクリック。
URL の末尾に /test を追加して表示されたら成功。
PC と同じアクセスポイントの wifi 接続した iPhone で URL を開いて表示できたら成功。
vim & ctags
恥ずかしながら今までタグジャンプ機能的なもの使用してませんでした( ;´。 `;)
こ、こんなに便利ならもっと早く使ってればよかった。。。
- ~/.vimrc
nnoremap <C-[> :pop<CR>
brew update
brew install --use-gcc ctags
cd ~/Dropbox/work/js/test/
ctags -R
これで vim で main.old.js 開いて、適当なところで C-] を押すと定義の箇所にジャンプしてくれます。
C-[ でジャンプ前に戻ります。スゴイ!!
あと、ちょい vim でのインデントが微妙だったので適当の探してきたの使わせて頂きましたorz
http://d.hatena.ne.jp/h1mesuke/20100701/p1 を .vim/indent/javascript.vim に入れるとまぁまぁいい感じに。
tmux
全然 javascript と関係ないですが、いい機会なので自分のレガシーな部分を一新してみました。
brew install tmux
- ~/.tmux.conf
unbind-key C-b set-option -g prefix C-t bind-key C-t send-prefix unbind-key l bind-key C-t last-window unbind n bind-key C-n next-window unbind p bind-key C-p previous-window bind-key c new-window bind-key q kill-server set-window-option -g mode-key vi
javascript の repl 候補
javascript さっぱり分かんないんで、repl で色々試したいなーと思い調べてみました。
他にもオススメあれば教えててくだしあ>ω<b
Chrome Developer Tools
多分これが最強です。
現在作業中のページのタブにフォーカスを合わせて
右上のメニューボタン > ツール > デベロッパーツール をクリック。
下の >= っぽいアイコンをクリックするとコンソールが立ち上がって色々入力できます。
自動補完もしてくれてむちゃ便利です。
あと、作業中のページの js 全てを読み込んだ状態になるので、普通にここで enchant.js のクラスを作ったり出来ます。
scala.swing の PartialFunction の合成っぽいのを Actor でやってみた
https://github.com/scala/scala/blob/master/docs/examples/swing/ButtonApp.scala#L16-L18
https://github.com/scala/scala/blob/master/src/swing/scala/swing/Reactions.scala#L19-L27
こんな感じに reactions に PartialFunction を足していく感じのを actor でも出来たら便利なんじゃないんだろうか?
色んなの reactions に足していけるし!みたいなことを思い付いたので実装してみました
http://d.hatena.ne.jp/yuroyoro/20100705/1278328898
http://www.ne.jp/asahi/hishidama/home/tech/scala/actor.html
を参考にさせて頂きました。
環境
scala | 2.9.1 |
gist
とりあえず気になること
- 10行目の reactions.reduceLeft { _ orElse _ } これはありかなしか。
- もっといい方法はないでしょうか?というかどっかのライブラリでありそう!!