外資系企業でプログラマーを10年やってわかったこと(1)

こんにちは。

自己紹介の欄にも簡単に書いてありますが、2015年3月まで、ほぼ10年(正確には9年5ヶ月)某アメリカの外資系企業でプログラマー(社内での呼び名はソフトウェアエンジニア)をやらせていただきました。その時のことをつらつらと綴ってみました。

中途採用なら学歴に関係なく採用される。ただしタイミングが超重要

自分は転職(中途採用)で採用していただきました。自分は私立大学の付属高校に通っていたこともあり、一般受験などはせずに普通の?私立大学の物理学部に通い、修士までいました。

しかしこのとき新卒で就職活動をしたとき、あまりにも希望の企業に入れないのでびびりました。「最近は学歴あまり関係ないよ」って誰かが言ってたんですけど、気のせいですよね。自分も若かったので、信じていました。まず学歴でフィルターされているのは当たり前です。学歴フィルターがされていない企業は、人気のない企業です。

しかたなく某日本企業に入社しましたが、3年もたずに転職活動を始めてしまいました。(2005年)

転職活動は、たしかリクナビNEXTにエントリーしたら、転職エージェントの方がいろいろ候補を持ってきてくれるので、非常に楽でした。有給をとって面接試験に行くのは気が引けましたがよい思い出ですね。

そのエージェントの方にいろいろ紹介していただき、5社くらい面接をやりました。結果、日本企業は受からなかったのですが、外資系企業2社から内定をもらいました。

そのとき自分にとって幸運だったのは:

  • 勤めていた企業は残業代はちゃんとくれていたので年収はわりと高かった
  • 英語は昔から得意だった (当時TOEIC865点)
  • ゲームのコンテスト入賞の経験がある

といったあたりを評価してもらえたことです。

見事なまでに日本企業には採用してもらえなかったのは、自分が話が下手なこともあるのですが、なんといっても学歴が足りなかったのだと思います自分の経験では、外資系企業の中途採用は、学歴は新卒採用の時ほどは重視していないようです。

入社後、中途採用の方が後から何人も入ってきましたが、募集は年中行われているわけではなく、アメリカの親会社からの許可が出ている期間のみなので、運良くそのような期間に応募すると、採用される確率が高くなります。

転職活動と恋愛はタイミングが非常に重要です。

英語で仕事ができるかどうかは慣れ。しかし上限は努力次第

外資系なので、電話会議や出張などで英語をつかう機会がたくさんありました。

入社当時英語は得意だと思っていましたが、電話会議に出ても相手が何を言っているのかほとんどわかりませんでした。恥ずかしくて会社辞めようかと思いました。

しかたないので「英語が苦手な変な日本人」を演じます。すると相手も「ああ、こいつは英語にがてなんだな。よし、ゆっくり話してあげよう」となります。

そんな感じで悔しさで枕をぬらす毎日を、1年くらいつづけると、だんだん彼らの会話が理解できるようになっていきました。今思えば聞き取れなかったのは、英語だけの問題ではなく、そもそも社内用語になれていなかったのも大きな原因でした。

もう1つは、自分はアメリカ人のきれいな英語に慣れ過ぎていて、インド人や中国人の独特の発音に対応できていませんでした。そのあたりになれていったことも、理解できるようになった一因です。

同じ職場にいる同僚も、中には英語が苦手という人もおり、確かにその人が書く英語のメールとかは文法が間違えだらけなのですが、電話会議などはちゃんとこなされていました。結局、英語で仕事ができるかどうかは、TOEICの点数とかで測れず、慣れているかどうか、だと思います。

ただし、英語がびっくりするほどうまい人もいて、いろいろ聞いているとそういう人は相当勉強しているようです。ただ英語で仕事ができるだけにとどまらず、英語ですごく仕事ができるようになるには、慣れだけでは不十分です。

ある日突然クビになることはない。しかし評価が悪いと転職を勧められる可能性はある

よくアメリカの企業などで、「ある日上司に呼び出され、解雇を告げられて、その後席に戻ることも許されずに会社を追い出された」という話を聞きます。

自分がいた会社は、資本はアメリカのものでしたが、会社は日本のものでしたですので、日本の法律(労働基準法)が適用されます。なので、上記のような「ある日とつぜんクビ」は日本ではできないようです

自分のいた会社は労働組合がありました。しかし日本の外資系企業には、労働組合がないところもあるそうです。自分のスキルに自信がある人にとっては労働組合にはあまり必要性は感じないと思いますし、そういう人材が外資系企業に集まっているわけなので、労働組合はあってもなくてもいいかなと思います。

そうは言っても、成果主義はかなり徹底していました。毎年目標を立てて、年末に達成度合いを上司に報告します。上司がそれを見て評価を出し、評価が良いと基本給があがりますが、評価があまりにも悪いと、基本給が下がることもありました。さらに基本給が下がるような評価を連続で受けると、「転職支援」をもちかれられます。これは受けるかどうかは選択できますが、こうなってしまうともう出世の道は閉ざされています。

同僚同士ライバル意識が高くて職場はいつもピリピリしている、なんてことはない

外資系企業と聞くと、みんな成果をあげようと必死で、同僚同士でも足の引っ張り合いをしているようなイメージがありますが(自分だけ・・・?)そんなことは全くありませんでした。よかった。

むしろみんな自分に自信があるから、余裕たっぷりで、何を聞いても丁寧に答えてくれます。嫌がらせをされるようなら、むしろ大したものです。

ただし上記は職場での話なので、裏では何を言われてたり、嫌がらせをされているかも知れませんが、それは日本企業でも同じところです。

外資系企業でもエンジニアの待遇はそんなにすごくない。金融機関はすごいらしい

よく外資系企業だと「新卒から年収1千万超え」などという話を聞きますが、少なくとも自分の経験したエンジニアという職種ではそんなことはありません。外資系金融機関は、がちで新卒から年収1千万、平均年収3千万円とかあるらしいですね。うらやましい。

(つづく・・・)

なんだかプログラマーっぽいことを書く前に長くなってしまったので、今日はここまでにしておきます。後日つづきを書こうと思います・・・。

 

キュリー夫人がラジウムを取り出した手順

こんにちは。

先日キュリー夫人を題材にしたゲーム『ラジウム・クリッカー』(iOS版Android版ブラウザ版を公開したのですが、その際に夫人が実際にどんな業績でここまで有名になったのか調べました。

詳しく調べた割にはゲームに生かせたのは本当にほんの一部なので恐縮ですが、せっかくなのでまとめてみました。

※化学は正直専門外なので、詳細については自信のない部分があります。記述に不正確な点などがあればご指摘等いただければ嬉しいです。
※1943年に公開された映画『キュリー夫人』のスクリーンショットを使用しています。映画公開から70年以上経過しているので権利的な問題はないはずですが、問題あればご指摘ください。

背景

1898年当時、ウランとトリウムが放射性を持つことは知られていましたが、キュリー夫妻はウラン鉱石の1つであるピッチブレンドが、ウラン単体よりも強い放射性を持つことに気づきました。そこでピッチブレンドには「未知の元素が含まれており、その元素は強い放射性を持つ」との仮説を発表しました。しかし学会の見解は、

新元素ならばその原子量が明らかでなければならないと考えていた。そのためには純粋な新元素の塊を得なければならない。
出展 マリ・キュリー – Wikipedia

というものでした。ここから、夫妻の「ラジウムの分離作業」が始まります。

原料の調達

ピッチブレンドは、ウランを含んでおり比較的高価で、さらに夫妻はピッチブレンドにほんのわずかしか含まれない物質を分離しようとしていたので、大量のピッチブレンドが必要でした。

必要な量(数トン)のピッチブレンドは高価で、研究費から捻出することは不可能だったので、しかたなくボヘミアの鉱山でウランを分離した後に廃棄されていた残渣(のこりかす)を使用することにしました。残渣であれば無償で譲り受けることができました。

10

分離工程

鉱石の粉砕

後の化学的処理の準備として、鉱石に含まれる各成分が露出するように原料を細かく砕きます。夫妻が入手した残渣の場合、この行程はすでに実施済みでした。

硫酸によるウランの抽出

ピッチブレンドの主な成分である酸化ウランを、硫酸で溶かし出します(抽出)。コーヒー豆を細かく砕いて、お湯でコーヒーを抽出するのに似ています。夫妻が入手した残渣の場合、この行程はすでに実施済みでした。

苛性ソーダによる煮沸処理(硫酸成分の除去)

ここから先が、夫妻の行った作業です。

まずピッチブレンド鉱石からウランを抽出する際についてしまった硫酸成分を除去する必要があります。(ラジウムなどのアルカリ土類金属と硫酸の化合物は、常温では酸にもアルカリにもほとんど溶けないため)

硫化物を、苛性ソーダ(水酸化ナトリウム)と煮沸することによって希塩酸に溶解する形に変えます。

80

水による洗浄(水溶性不純物の除去)

全行程を通して何度も行われていたようなのですが、ラジウムが水に溶けない状態の際、しばしば徹底的に水による洗浄が行われます。これにより、水に溶ける成分(例えばマグネシウムの硫化物など)が除去されます。

全行程に対して言えることですが、ある分離行程1回で100%完全に分離できるとは限りません。その場合は必要に応じて同じ行程を(時にはさかのぼって)何度も実行する必要があります。

アルカリによる洗浄(ケイ素、アルミナの除去)

水による洗浄では除去できない一部の要素(ケイ素、アルミナ等)は、「アルカリによる洗浄」によって除去します。水で洗っても落ちない汚れを石鹸水で洗い流すのに似ています。

希塩酸による溶解(銀、鉛、ビスマス等の除去)

ラジウム塩はここで希塩酸に溶けるため、
飼料をとかし、濾過します。溶け残ったものは除去されます。

炭酸ソーダによる中和(カルシウム、バリウム、ラジウムの分離)

希塩酸の溶液に炭酸ソーダを加えて煮沸することで、アルカリ土類金属(カルシウム、バリウム、ラジウム)の炭酸化合物が生成されます。

90

ここまでの処理で、ほぼカルシウムバリウムラジウムの3成分の混合物にまで絞れてきているはずです。

強塩酸によるカルシウムの除去

アルカリ土類金属であるカルシウム・バリウム・ラジウムは性質がよく似ているため、ここまでの行程では分離されていません。

ある条件のもとでは、塩化カルシウムは強塩酸に溶けますが、塩化バリウムと塩化ラジウムは溶けません。その性質を利用し、カルシウムを除去します。

分別結晶法によるバリウムの除去

最後に塩化バリウム塩化ラジウムの分離ですが、結晶化する速さは軽い元素の方が速いという性質があるので、その性質を利用しました。

100

塩酸の濃度により、バリウムやラジウムが結晶化するので、溶液の結晶化した部分から溶液を作ると、ラジウムの濃度が低くなっていくので、ラジウムの濃度がほぼ0になった溶液は廃棄する、という作業を繰り返したものと思われます。

夫妻はこの分別結晶によるバリウムとラジウムの分離だけで数年費やしたそうです。

120

ゲームに・・してみた・・・?

このキュリー夫妻の苦労を少しでも追体験できるゲームを作ってみたい・・・』と思って作成してみたのが前述の『ラジウム・クリッカー』だったのですが、ただ単純にクリックするだけの単純作業が辛いだけのネタゲーになってしまいました・・。

 

screen568x568『ラジウム・クリッカー』(iOS版Android版ブラウザ版

以前タマゴをクリックするだけのゲームが流行ったので、その流れで流行るかも、って思ったんですけど、流行らなかったですね。

最後に

軽い気持ちで調べ始めたのですが、自分の化学的な基礎のなさや資料の少なさもあり、正直いまだに完全には理解できていない気がしてます。まずは高校時代の化学から復習しなおそうかと真剣に考えてます・・・。

参考文献

 

学習漫画とか大人が読んだ方が数倍面白い

こんにちは。

先日 Amazon で「ニュートン」と「ガリレオ」の学習漫画をポチってしまいました。こんなの店頭では絶対に衝動買いしないので、Amazon の新規顧客開拓力はすごいです。

CI-5rj7VAAAIkvJ

もともと「キュリー夫人」と「アインシュタイン」は持っていたので、この集英社の世界の伝記の物理学者系は制覇ですかね。(「ノーベル」「エジソン」とかは微妙なところ)

怒られない程度に中身を紹介します。

 

まずニュートンのほうから。

有名な、りんごが落ちるのを見て、万有引力の法則を着想するシーン。

FullSizeRender-2

 

「ニュートンと言えばりんご」なのは小学生にも浸透しているかもしれませんが、この月がりんごと同じように地球に向かって落ちているという考え方は、正直、小学生には理解できません。

このあたり、高校卒業後くらいに読むと「なるほど」と思えるのですが、残念ながらそのころには学習漫画とか読まなくなっている人が多いです。

次にニュートンの理論をまとめた本「プリンキピア」出版のために、ハレーすい星で有名なエドモンド・ハレーが奔走しているシーン。

FullSizeRender-3

小学生が「ふーん」と読み飛ばすであろうこの何気ないページに、ものすごい要素が詰め込まれています。

  • フックがニュートンの発見を、自分のアイデアを使っていると主張していたこと
  • ハレーがニュートンとフックの間と取り持ってなんとかことを収めたこと
  • 出版費用は資産家のハレーが肩代わりしたこと
  • 王立協会の事務局長だったハレーが、無給だったこと

自分はニュートンについてかなり調べたことがあるので、この漫画を監修した先生もよく調べているのがよくわかります。

小学生だけに読ませておくのはもったいない!

 

FullSizeRender-1

 

 

つづいてガリレオのほう。

自分はガリレオについてはあまり知らなかったので、これは驚きの連続でした。

まず、少年ガリレオが、アリストテレスと盲信する先生に質問するシーン。

CI_Op1OUwAAO_uXCI_Op1QVEAAL1r8

 

当時の人々が1800年前に書かれた本の内容を、自分で確かめもせずに信じ続けていた態度に疑問をもつ姿が格好良いです。

つぎに、ガリレオが当時発明されたばかりの「望遠鏡」を初めて空に向けて観測を始めたころの描写。

CI_U3s3UwAEdjwl

 

「そうか、きのうまでは木星のむこう側にかくれていたにちがいない!」

 

地動説を裏付ける事実に次々に気づいていくガリレオ。

当時彼がどんな思いで観測を続けていたのか・・・。思いを馳せて、感動して泣きました。(年をとると涙腺がゆるくて・・・)

 

小学生は絶対、これ読んでも泣きませんよ。

そして宗教裁判。

CI_aE56UcAA877N

ガリレオは現実的な人なので、死刑を避けるために地動説について宣伝することをやめると誓います。

 

しかし宗教裁判のあともこりないガリレオwwww

CI_cMvsUEAAGDlr

 

このとき書かれた「天文対話」という本が、ローマ法王庁の逆鱗に触れて「禁書」に指定され、ガリレオは「破門」とされます。

その天文対話も、今では英語版なら無料で読めます。良い時代になりました!!

Dialogue Concerning the Two Chief World Systems
by Galileo Galilei (1632)

http://law2.umkc.edu/faculty/projects/ftrials/galileo/dialogue.html

dialogue

日本語版は岩波文庫から出ているようですね。(リンク貼りますが、アフィリエイトではありません! (^^;)

天文対話<上>(岩波文庫) – Amazon

51lCyZJmblL._SX352_BO1,204,203,200_

 

ガリレオの破門が解かれるのはなんと350年以上のちの1992年になってからです。

 

以上、個人的なおすすめですが、まずは漫画で大まかな流れをつかんで、より詳しく知りたくなったら専門書を読むと良いと思います。

 

 

 

 

ブログ始めて1ヶ月が過ぎたのでページビュー(PV)公開してみます

2015年6月4日に当ブログを公開してからほぼ一ヶ月経ちましたので、どれくらいページビュー(PV)があるのか公開したいと思います。

統計には Google アナリティクス を使用してます。(他にあるのかな・・・)

pv

 

2015年6月合計で

8,341 PV

でした。

そのうち 5,053 PV (60.6%) は6/19〜6/22の4日間のPVです。

 

Screen Shot 2015-07-03 at 12.30.29 PM

 

Togetter(炎上)効果すごい・・・。

「会社作らなくていいからゲーム作りなさいと言われた(泣」とブログに書いたら→「正論」「当たり前だ」 – Togetter
http://togetter.com/li/836973

7月も何か起こらないとPVはかなり落ち込むはずなので、何かやらかさなくちゃいけないんですかね・・・。

 

あとは、何も投稿しないと100PV/日くらいなのが、新規投稿すると、200PV/日くらいにはなっている気がするので、やはり一般論だと思いますが、コツコツ投稿しないとダメなのかなと言う感じです。

また、ブログのPVが増えるとアプリのダウンロード数も多少増えていました。

最近思うのは、アプリがダウンロードされるには、アプリがよくできているだけでは不十分で、「誰が作ったのか」が非常に重要な気がしてきました。

 

とりあえず自分は「会社作ろうとして右往左往しているアプリ開発者」キャラでいきます・・・。

 

Cocos2d-x 公式ソースコードに自分のバグフィックスが取り込まれた

先日 Cocos2d-x の一部、Cocos2d-JS のバグ(彼らは仕様と言うかもしれない)を見つけたので、修正案を GitHub 上で公式に提案(プルリクエスト)してみました。

結果、取り込んでもらえましたので、その時やったことを紹介します。

バクの内容

JS の機能の一つに、JavaScript 側から Objective-C の関数が呼び出せるというものがあります。Cocos2d-JS v3. 6.1 現在、その引数が BOOL 型だったときに値がうまくわたらないので、NSNumber型 を使わなければならないという制限がありました。

[参考]
HOW TO CALL OBJECTIVE-C FUNCTIONS USING JS ON IOS/MAC
http://cocos2d-x.org/docs/manual/framework/html5/v3/reflection-oc/en

JavaScript には int と float の区別はなく、数値は “number” 型なので、int や float はNSNumber を使わなければならないのはよいです。しかし JavaScript でも bool は “boolean” 型があるので、NSNumber を使わなければならないのは違和感がありました。

ソースコードを確認したところ、以下の部分で JavaScript から受けた引数を NSInvocation の引数に変換しているのですが、数値も bool も区別せずに処理していました。

<cocos2d-x/cocos/scripting/js-bindings/manual/platform/ios/JavaScriptObjCBridge.mm>

[gistcode data_gist_id=”d694618edd6f08a811a3″ data_gist_highlight_line=”114″ data_gist_line=”110-119″]

これを isKindOfClass を使い、bool の時だけ特別扱いします。これで BOOL 型を引数とする C++ の関数を、修正することなく呼べるようになりました。

[gistcode data_gist_id=”0b75dc16272371a4e2a5″ data_gist_highlight_line=”114-125″ data_gist_line=”110-129″]

やったこと

バグを見つけるまではよくあることですが、今回は修正案を公式に提案するところまでやってみました。会社のコードとかではよくやってましたが、天下の Cocos2d-x 公式レポジトリに修正案を出すのは緊張します。変な日本人と思われたくない。

修正のコミット

前述の修正を、自分のローカルレポジトリでコミットし、GitHub の自分のクローンしたレポジトリ(自分の場合はshinhirota/cocos2d-x)に push しておきます。

プルリクエスト

フォーク(クローン)してある自分のレポジトリで修正のコミットを済ませていれば、Web上で簡単にできます。Cocos2d-x の開発元は中国の会社なので、レポジトリの管理も中国人エンジニアが行っているようです。詳しいコミットの説明を、英語(か中国語)で添える必要があります。

ss

ss2

説明はマークダウンで記述できるので便利です。十分な説明を書かないと英語で質問メールが来て、それに返事をしたりして時間がかかるか、最悪、無視される恐れがあります。

 

自分の場合は「こんな問題があって、このように直したら動作しました」のようなことを、サンプルコードを添えて、30分くらいかけて書きました。100行の説明より1つのサンプルコードです。

Screen Shot 2015-07-02 at 11.27.30 AM

 

プルリクエストを登録すると、レポジトリの管理者に通知が行くので、運が良ければあとは何もしなくてよいです。

自分の場合は、最初 Cocos2d-x とCocos2d-JSのレポジトリが統合されていたのをしらずに Cocos2d-JS のほうにプルリクエストを登録したら「Cocos2d-xのほうに登録してくれ」と言われてしまいましたが、あとは何もせずにすみました。

Cocos2d-x の管理者が、担当者にレビューを依頼し、その担当者のオーケーが出たので管理者がメインブランチである “v3” にマージしてくれました。やった!

 

 

Fixed iOS/JS-Bind callStaticMethod() with bool arg
https://github.com/cocos2d/cocos2d-x/pull/12598

Screen Shot 2015-07-02 at 11.58.35 AM

Cocos2d-JS の次のバージョン (v3.6.2?) には取り込まれるはずなので楽しみです。

[2015年8月27日 追記] 本修正が Cocos2d-x v3.8 (JSの一部がxに統合されたため、x からのリリース) に取り込まれてリリースされました!

まとめ

Unity人気に押され気味の印象がある Cocos2d-x/JS ですが、オープンソースであると言うのは Unity にはない魅力ですね!

「3日でプロトタイプ作る」とツイッターで宣言したらやばかった

こんにちは。

先日勝手にひとりで修羅場を迎えていて、かなりやばい状態でした。顛末をまとめました。

宣言 – 6/23(火) 20:00

 

先日ブログにて『さいたま市の創業相談会に行ったら「まず会社作らなくていいからゲーム作りなさい」と言われた』と報告したところ、Twitter/Togetter 上で予想以上の反響(炎上?)をいただきました。

そこで勢いで、以下のようにTwitterで、3日以内にプロトタイプを公開しますと宣言してみました。

この時点で全く何もできていませんでした。

複雑な気持ちなのですが、結構リツイート(14リツイート)していただきました。それで「あ、皆さんに認識された」と言う感じがしました。この感じがあとで重くのしかかることになろうとは・・・。

このときの計画

 

72時間しかないので、午後8時にツイートした直後から、全力疾走が始まりました。「3日あるから明日からやるかあ〜」なんて言ってられません。

このときに考えていた大まかなスケジュールは以下のとおり:

 

6/23 20:00
 〜6/24 20:00 基本システムがざっくり動作するようにする
 〜6/26 20:00 時間のある限り改善

 

最初の24時間で、基本的な部分は作ってしまうつもりでした。

手を広げすぎると全体的に中途半端な印象になってしまうので、規模は小さくても整っているものを目指すため、このような時間配分を考えました。

内容は?

 

正直、作ろうと思っているゲームは何種類かあるので、宣言するまで確定していませんでした。しかしもう迷っている時間はないので、一番やりたかった過去作品(PRINCIPIA)のリメイクに決めました。

この選択が正しかったかどうかはわかりませんが、ゲーム開発はどうせやってみないとわからない要素が大きいので、これ以上悩んでいたら悩みすぎだと感じていました。

今回の宣言が契機になって前に進めたのは自分にとっては良かったです。

 

最初は調子良かった

 

時間とともによぎる不安 – 6/24(水) 20:00

  最初のざっくりとした計画のとおり、最初の24時間で基本システムを動くように突き進んでいました。過去作品プリンキピアに、スマホゲーム的な科学者コレクション的な要素を取り入れようとしていました。 が、メイン画面を作ってみて、  

 

「あれ、これ、思ったより面白くないんじゃないか・・・・」  

 

と感じ始めてしまいました。 ここからがやばいです。 元職業プログラマーなので、仕様が決まっていればとりあえず動くものを作るのはそれほど大変ではないです。 しかしそもそものゲームシステムについて悩み始めてしまったら、最悪、永遠に悩み続けることができるレベルの話です。それを、明後日公開すると宣言しているものに対して悩み始めてしまったら、普通、無理です。 この時点で、だいたい24時間経過していました。 72時間しかないのに、24時間かけて作ったものを捨てて、さらにいままで数ヶ月(ぼんやりと)考えていたシステムの修正を行い、48時間で作り上げなくてはならなくなりました。これは正直不可能です。このときは「どうやってあやまろうかな・・・」と考え始めていました。  

 

方針転換

 ああ、あんなこと宣言するんじゃなかった、と思い始めましたが、実は今年1月くらいからぼんやりと(だらだらと)期限がないから真剣に考えていなかったことを、今回期限を区切ったことで、やっと真剣に考え始めただけのことでした。 そもそも会社辞めてまでやろうとしてることは何だっけ? とか自分会議が始まってしまいました。 悩んだ結果、 最大の目標は自分の作品を公開することであり、たとえそれが事業的に失敗してもそれは別の問題。そもそも絶対に事業として成功する作品など、経験不足の自分に作れるはずがないので「むしろ自然体で作るべきだ」との考えに至りました。

 

宣言した期限は伸ばせない・・

  そもそも上司と約束したのでもなく、まして顧客と契約書を交わしたわけでもないので、この作ります宣言は法律的な効力は何もないです。あやまってしまうこともできました。 しかしそれをやってしまうと、今後の発言(ツイートなど)への信頼性が著しく落ちてしまうはずなので、それは絶対に避けるつもりでした。 ただ、そもそも自分のツイートなんて誰も見てないに等しいので、そこまできにする必要もなかったかもしれませんが、宣言を結構リツイートされていたので、潜在意識的には「すごい見られている」と思っていたんだと思います。 

最終日 – 6/26(金)

 

見積もりが甘くて思ったほど作れてない・・

 

  これは会社員時代から同じだったので、一生治らないのかもしれませんが、自分は見積もりが甘いです。会社員時代は、自分の感覚の2倍の期間の見積もりを出してだいたい当たっていました。 正直、3日間あればもっと作り込めると思っていましたが、だめでした。ちょっと人様に見せられるようなレベルには到達していませんでしたが、宣言を守ることを重視して、公開に踏み切りました。

見切り発車で公開 – 20:00

 

そんなこともあり、当初イメージしていた規模からすると50%くらいで、完成製品版の5%くらいしか作れませんでしたが、公開に踏み切りました。

プロトタイプと呼べるかどうかはさておき、企画の意図を伝えるには役に立つものができたと思います。

↓現在も公開中ですので、興味がある方は以下のリンクからどうぞ

年内リリースを目指して企画中のアプリの導入部分を公開します

感想

「まあ大変だろうな」と予想はしていましたが、途中で悩み始めたことで修羅場が待っていました。この3日間はよく眠れませんでした・・・。

24時間全力で頑張るのは結構できるのですが、今回のような宣言をすると72時間全力で頑張れてしまうので、相当きついです。3倍ではなく3x3=9倍くらいきつかった気がします。

しかしいままでずっと真剣に考えてこなかった企画の部分を集中的に検討できたので、ものすごい前進しました。

自分で目標を立てて、ツイッターで宣言すると、実際どれだけ見られているかどうかは不明ですが、ものすごいプレッシャーになりました。逆境に身を置きたい方にはオススメです。

 

 

 

年内リリースを目指して企画中のアプリの導入部分を公開します

経緯

皆様

先日ブログにて

さいたま市の創業相談会に行ったら「まず会社作らなくていいからゲーム作りなさい」と言われた

と報告したところ、Twitter/Togetter 上で予想以上の反響(炎上?)をいただきました。

耳が痛いアドバイスを多数頂き、そのなかで「動作するプロトタイプを作るべき」というものがありました。

そこで勢いで、以下のようにTwitterで、3日以内にプロトタイプを公開しますと宣言してみました。

この時点で全く何もできていませんでした。まじで。

ですので、それから今までほぼ自宅にこもって72時間作業していました・・・・。一度でかけましたが。

ともかく72時間で作ったものなので、完成するはずもないですが、どういうゲームを作りたいかは伝わってくれるとうれしいです。

ゲーム情報

タイトル:PRINCIPIA PERFECTUS (プリンキピア・ペルフェクトゥス)

Screen Shot 2015-06-26 at 7.50.25 PM

↓こちらをクリックするとゲームがブラウザ内で起動します↓
PRINCIPIA PERFECTUS

説明:17世紀のヨーロッパを舞台にした科学者シミュレーションゲームです。15年前に公開したゲーム「PRINCIPIA」の「完全版」として、当時盛り込めなかった要素の追加、グラフィック・音楽の一新を行い、現在のスマートフォンアプリとして市場価値のあるレベルまで作り上げます。

動作環境:本プロトタイプはブラウザ上で動作しますが、最終的にはスマートフォンアプリになる予定です。

素材について:画像はインターネット上でダウンロードしてきたものと、手書きのものがあり、製品レベルではないですがご容赦ください。

効果音は一部魔王魂様のサイトからダウンロードしたものを使用しています。

今後

2015年中にリリースするべく活動をしていく予定です。とくにグラフィックをどのように調達するかいま検討中ですが、がんばっていきます。

 

 

 

Cocos2d-JS で広告を表示する (iOS編) その2

Cocos2d-JS で広告を表示する (iOS編) その1で単純な表示の方法を紹介したので、今回は位置の調整、表示/非表示を行う手順をまとめます。

Cocos2d-JS が生成するプロジェクトファイルは Interface Builer / Storyboard を使用していないので、ここでも使用しませず、ソースコードのみで実現します。

使用した環境

OS: Mac OS X 10.10.3
Xcode: 6.3.2
Cocos2d-JS: v3.6.1
Google Mobile Ads SDK iOS: 7.3.1

位置の調整

固定の位置で良い場合は、GADBannerView の frame プロパティ を設定すれば反映されます。以下は、画面の下部中央に配置する場合の例です。

<./ios/AppController.mm>

    {
        GADBannerView *gadView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];

        gadView.adUnitID = @"ca-app-pub-3940256099942544/2934735716";  // Official Test ID
        gadView.rootViewController = viewController;
        [gadView loadRequest:[GADRequest request]];

        [viewController.view addSubview:gadView];

        // gadView を画面下部の中心に配置
        CGRect contentFrame = viewController.view.bounds;
        CGRect bannerFrame = gadView.frame;
        bannerFrame.origin.y = contentFrame.size.height - bannerFrame.size.height;
        bannerFrame.origin.x = contentFrame.size.width / 2 - bannerFrame.size.width / 2;
        gadView.frame = bannerFrame;
    }

ただし画面回転に対応したり、親ビューがレイアウトを変更したりする場合、ビューコントローラーの viewDidLayoutSubviews メソッドをオーバーライドするなどの対処が必要ですが、ここでは省略します。

うまく動作すれば、広告が画面の下部中央に表示されます。

実行結果Screen Shot 2015-06-21 at 1.27.51 PM

表示/非表示

やっと Cocos2d-JS 特有の話になります。

ゲームなどで、タイトル画面では広告を表示し、ゲーム中は広告を非表示にしたりしたいことがあると思います。そのために、まずは JavaScript から C++ の関数を呼ぶ必要があります。Cocos2d-JS では JavaScript 側に jsb.reflection.callStaticMethod という関数が用意されています。名前の通り、スタティックメソッドしか呼びだせません。

C++側

まずC++側で、任意のクラスのスタティックメソッドを用意します。

そのためのクラスを作っても良いですが、ここでは変更を少なく抑えるため既存のクラス AppController isAdVisible と setAdVisible というスタティックメソッドを追加します。

C++側では、戻り値、引数として BOOL, 数値 (NSNumber), 文字列 (NSString) が使用できます。ただし現在の Cocos2d-JS の実装の制限として、BOOL の引数を受ける場合、NSNumber* で受けて boolValue に変換しないとうまく動作しないので注意してください。(将来改善されるかもしれません)

<./ios/AppController.h>

@interface AppController : NSObject <UIAccelerometerDelegate, UIAlertViewDelegate, UITextFieldDelegate,UIApplicationDelegate>
{
    UIWindow *window;
    RootViewController    *viewController;
}

// 追加
+ (void) setAdVisible:(NSNumber*) isVisible;
+ (BOOL) isAdVisible;

@end

<./ios/AppController.mm>

// gadView をローカル変数ではなくスタティック変数にする
static GADBannerView* gadView = nullptr;
@implementation AppController
 :
(中略)
 :
+ (void) setAdVisible:(NSNumber*) isVisible {
    gadView.hidden = ([isVisible boolValue] == false);
}

+ (BOOL) isAdVisible {
    return gadView.hidden == false;
}

@end

JavaScript側

Cocos2d-JSのサンプルのメニューボタンを押したときに、先ほど作成したC++ のメソッドを呼び出し、表示/非表示をトグルできるようにします。

<./src/app.js>


var HelloWorldLayer = cc.Layer.extend({
    sprite:null,
    ctor:function () {
        //////////////////////////////
        // 1. super init first
        this._super();

        /////////////////////////////
        // 2. add a menu item with "X" image, which is clicked to quit the program
        //    you may modify it.
        // ask the window size
        var size = cc.winSize;

        // add a "close" icon to exit the progress. it's an autorelease object
        var closeItem = new cc.MenuItemImage(
            res.CloseNormal_png,
            res.CloseSelected_png,
            function () {
                cc.log("Menu is clicked!");

                // 現在の表示状態を取得
                var isVisible = jsb.reflection.callStaticMethod(
                    "AppController",
                    "isAdVisible"
                );

                // 表示/非表示を設定
                jsb.reflection.callStaticMethod(
                    "AppController",
                    "setAdVisible:",
                    isVisible == false
                );

            }, this);
        closeItem.attr({
            x: size.width - 20,
            y: 20,
            anchorX: 0.5,
            anchorY: 0.5
        });

        var menu = new cc.Menu(closeItem);
        menu.x = 0;
        menu.y = 0;
        this.addChild(menu, 1);

うまくいけば右下のメニューボタンを押すたびに広告の非常/非表示が切り替わります!

Screen Shot 2015-06-21 at 7.16.56 PMScreen Shot 2015-06-21 at 1.27.51 PM

参考

HOW TO CALL OBJECTIVE-C FUNCTIONS USING JS ON IOS/MAC
http://cocos2d-x.org/docs/manual/framework/html5/v3/reflection-oc/en

 

Cocos2d-JS で広告を表示する (iOS編) その1

こんにちは。Cocos2d-JS で広告を表示したときの手順をまとめます。

概要

今回は、とりあえず AdMob を表示するまでをまとめます。実際のアプリに組み込む場合、位置の調整、表示・非表示などの制御が必要だと思いますが、それについては次回以降。

使用した環境

OS: Mac OS X 10.10.3
Xcode: 6.3.2
Cocos2d-JS: v3.6.1
Google Mobile Ads SDK iOS: 7.3.1

手順

ただ単にバナー広告をずっと表示していればよい場合は、JavaScript 側ではなにもせず、iOS 上の Objective-C++ 側の View に AdMob の GADBannerView を貼り付ければよいです。

JavaScript (Cococs2d-JS) とは関係のない話になってしまいますが、以下のように AdMob を組み込みます。

AdMob SDK をダウンロード

以下のページから googlemobileadssdkios.zip をダウンロードし、解凍します。

Downloads | Mobile Ads SDK | Google Developers
https://developers.google.com/mobile-ads-sdk/download?hl=ja#downloadios

Screen Shot 2015-06-19 at 9.56.32 AM

zip の中身はこのようになっています。

Screen Shot 2015-06-19 at 10.05.38 AM

Xcode プロジェクトに追加

広告を表示したい Cocos2d-JS プロジェクトに含まれる Xcode プロジェクトに、ダウンロードした SDK を追加します。

(参考:Cocos2d-JS のサンプルを動かしてみる (iOS編))

Xcode でプロジェクトを右クリックし、[Add Files to “xxxx”…] を選びます。

Screen Shot 2015-06-19 at 10.20.48 AM

先ほどダウンロードし、展開しておいた GoogleMobileAds.framework を選びます。この際、Copy items if needed のチェックはON、Added folders は Create groups、Add to targets は xxxxx iOS のみチェック、にします。

ss

Framework の追加

AdMob 公式ページの最新の手順では @import 文を使えば Framework は自動的に追加されると書かれていますが、Cocos2d-JS/x のプロジェクトでは Objective-C++ (.mmファイル) を使っているからわかりませんが、@import がうまくいきませんでした。

ここでは手動で Framework を追加する方法でやります。以下の Framework を プロジェクト設定からリンク対象に追加します。

  • SystemConfiguration
  • StoreKit
  • MessageUI
  • EventKitUI
  • EventKit
  • AdSupport
  • CoreTelephony
  • CoreMedia

Screen Shot 2015-06-20 at 8.58.00 AM

AdView 表示コードを追加

最低限、AppController.mm に以下のコードを追加すれば AdMob 広告が表示されます。

./ios/AppController.mm

 

#import "GoogleMobileAds/GADRequest.h"    //追加
#import "GoogleMobileAds/GADBannerView.h" //追加

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    // didFinishLaunchingWithOptions 内に以下のコードを追加
    {
        GADBannerView *gadView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];

        gadView.adUnitID = @"ca-app-pub-3940256099942544/2934735716";  // Official Test ID
        gadView.rootViewController = viewController;
        [gadView loadRequest:[GADRequest request]];

        [viewController.view addSubview:gadView];
    }

}

 実行結果

うまくいけば画面左上部に AdMob のテストバナーが表示されます。

Screen Shot 2015-06-20 at 9.36.59 AM

次回「状況に応じて表示/非表示を切り替える場合」についてまとめる予定です。

参考

AdMob iOS ガイド (オフィシャルドキュメント)
https://developers.google.com/mobile-ads-sdk/docs/admob/ios/quick-start?hl=ja

 

さいたま市の創業相談会に行ったら「まず会社作らなくていいからゲーム作りなさい」と言われた

こんにちは。

会社辞めてゲーム作家になろうとしている者です。

 

収入はないですけど、毎日が新しい。

 

本日(2015年6月18日)さいたま市主催の創業相談会に参加してきました。高い住民税納めてるんだから住民サービスは受けないと損ですよね。

さいたま市では毎月第三木曜日に創業相談会を開催しているそうで、毎月ポストに入っている「市報さいたま」で見つけました。会社員時代はこんなの読んでる時間ぜんぜんなかったですけど市報とか読んでみるもんです。

CGfZgnkVAAADQPA

 

なんか2つ似たようなのがあって「二重行政」の感じもしなくもないですがとりあえず左のやつに受付開始初日の6月3日(水)の朝一で電話してみました。

すると、難なく予約をゲットできました。

目的

自分の企画したゲームを世に送り出すのが目的です。よく言えばクリエイター志向ですかね・・・。他のことは手段でしかないです。なので「IT社長になって大儲けしたい」というような起業家志向ではないです。

準備

とりあえず本買いました。挿絵のない本は読めない性分なので漫画です。

CGGl4XXVIAAKkXX securedownload

主人公のはるかちゃんが「おばあちゃんの漬物をみんなに食べてもらいたから居酒屋を始める」という熱いストーリーです。

 

はるかちゃん・・・アツい・・・。

 

いろいろ似たような本も読んだのですが、この手の本は「自分の店を出したい」という話が多いです。おそらく毎月の出費、売上などが読みやすくて事業計画などが立てやすいからのようです。自分のようなゲームアプリを作って売る、のような場合、売上が全く読めないので事業計画を立てるのがかなり難しいと感じました。というか、ゲーム売るなんて、ギャンブルですよね?

そうは言っても何も準備しないと、せっかくの相談会で話も弾まないと思い、事業計画書はでっちあげて持って行きました。

Screen Shot 2015-06-18 at 10.10.31 PM

ざっくり言うと書いたのは以下のようなこと。

 

  • ゲーム作りたくて、熱い思いで会社辞めました
  • 第一弾として、4人x4ヶ月でスマホアプリを製作する資金を調達したい
  • 製作には自信あり、プロモーションなど事業運営は自信ない

 

テンプレートは以下のサイトから無料でダウンロードできました。

bizocean(ビズオーシャン)-すべてのビジネスコンテンツを無料に!

http://www.bizocean.jp/

当日

指定されたさいたま中央図書館(浦和駅のパルコ8階)に行くと、10人くらい入れそうな会議室に、中小企業診断士の方1名と、さいたま市の職員と思われる方2名が、自分の話を聞いてくれました。相談料無料。お得。

とりあえず自己紹介などしつつ、自分のゲームに対する熱い思いを語り、すでに会社を退職して活動していることなどを説明したあと、「とりあえず第一弾として、4人x4ヶ月の規模でアプリを作って勝負したい。その為の資金が欲しい」ようなことを伝えました。

すると中小企業診断士の先生から帰ってきた答えは「銀行はそんなに簡単にはお金を貸さない。特に実績面があまりないようなので、まずは小規模で開発して結果を出してからの方がよい」と言ったものでした。(実際にはもっといろいろ会話があったのですが、結論としてはこんな感じだったと思います。)

また「会社を作るメリットも、今の時点ではあまりなさそう。まずは全力でゲームを作って、実績にするのがよいのでは」とも言われました。

まとめると「まず会社作らなくていいからゲーム作りなさい」というメッセージでした。

orz

いや、なんというか、的確すぎるアドバイス。

感想

ゲームを作る為に会社作ろうと思っていろいろ調べていましたが、ゲームを売るのは当たり外れの激しい世界で、誰にでもできることではありません。なので、実績がないのにやる気だけをアピールしても世間は理解してくれません。

正直自分は15年くらい前にコンテストで入賞したことがあるだけの過去の人なので、いまから参入しようとしたらゼロからのスタートです。

なんとなく会社作ったらどこからともなくお金がやってくると思っていましたが、そんなことはありません。

こつこつ実績を積み上げるしかない。

明日くらいから本気出します。

1 3 4 5 6 7