読者です 読者をやめる 読者になる 読者になる

アタシ ポンコツ システムエンジニア

新卒ポンコツSEの成長を描く(予定の)感動のスペクタクル超大作

「アイムF5チャレンジ」で一番出現確率の高い役者はだれか

久々のブログ更新です。。
私は生きてます。。

さて、先日のキャン丁目キャン番地「スタジオキャン」でこんなチャレンジが行われていました。

「アイムF5チャレンジ」

アイムエンタープライズのトップページではランダムでアイム所属タレントの潜在が表示されます。
このページを利用して、加隈さん、大西さん交互にF5(ページリロード)を行い、
先に大西さんの潜在を出した方が勝ちというゲームです。
(説明は動画の19:00頃~)


これを聴いた私は一つ疑問を抱きました。
アイムエンタープライズのトップページで一番出現確率の高い役者さんは誰なんだろう?」



このトリビアの種、要約するとこういうことになります。

「アイムF5チャレンジ」で一番出現確率の高い役者はだれか

早速、アイムエンタープライズトップページのソースを確認してみましょう!
アイムエンタープライズ公式ホームページ



ふむふむ…
どうやら、myrandom(max)という関数を使って表示する役者さんを決定しているようです。。

これを利用して役者さんごとに出現確率を表示するスクリプトを作ってみよう!!

思いついた計算手順

  1. myrandomを100万回呼び出しながらmyrandomの結果をキーに出現回数をvalueにしたマップを作る
  2. 各値を100万で割る

これでいけるやろ?(適当


~ 30分後 ~

できた!!

var arr = {};
var talentMap = {
	'124': '赤尾 ひかる',
	'79': '秋保 佐永子',
	'119': '天﨑 滉平',
	'108': '雨宮 夕夏',
	'103': '綾瀬 有',
	'1': '飯島 晶子',
	'90': '飯田 友子',
	'35': '石井 一貴',
	'2': '石川 桃子',
	'118': '猪股 慧士',
	'4': '今井 麻夏',
	'5': '今瀬 未知',
	'125': '岩井 映美里',
	'85': '岩澤 俊樹',
	'120': '岩山 ちひろ',
	'6': '植田 佳奈',
	'89': '内田 真礼',
	'109': '内田 雄馬',
	'130': '大塚 剛央',
	'101': '大西 沙織',
	'111': '小澤 亜李',
	'61': '折戸 マリ',
	'102': '花倉 洸幸',
	'110': '柏崎 隼史',
	'127': '加藤 渉',
	'77': '金子 真由美',
	'42': '神原 大地',
	'99': '木野 双葉',
	'12': '釘宮 理恵',
	'74': '桑谷 夏子',
	'105': '小松 奈生子',
	'13': '斎藤 千和',
	'86': '佐倉 綾音',
	'129': '篠原 侑',
	'126': '島田 武幸',
	'43': '下野 紘',
	'121': '杉浦 しおり',
	'94': '洲崎 綾',
	'117': '鈴木 亜理沙',
	'45': '鈴木 達央',
	'78': '芹 亜希子',
	'113': '千本木 彩花',
	'132': 'ソンド',
	'46': '高城 元気',
	'97': '髙野 麻美',
	'16': '高橋 美佳子',
	'80': '髙山 ゆうこ',
	'17': '滝田 樹里',
	'131': '武田 羅梨沙 多胡',
	'81': '巽 悠衣子',
	'68': '田村 睦心',
	'48': '丹沢 晃之',
	'104': '伊達 忠智',
	'119': '続木 友子',
	'19': '綱掛 裕美',
	'67': '利根 健太朗',
	'20': '中原 麻衣',
	'116': '永塚 拓馬',
	'107': '長縄 まりあ',
	'49': '成家 義哉',
	'115': '鳴海 和希',
	'22': '仁後 真耶子',
	'96': '畠山 広信',
	'93': '浜崎 奈々',
	'66': '早見 沙織',
	'64': '日笠 陽子',
	'23': '平田 宏美',
	'75': '藤吉 浩二',
	'122': '本渡 楓',
	'100': 'MAKO',
	'53': '間島 淳司',
	'92': '松尾 絵那',
	'84': '松岡 禎丞',
	'114': '松田 利冴',
	'128': '嶺内 ともみ',
	'123': '三宅 晴佳',
	'29': '矢島 和葉',
	'76': '柳田 淳一',
	'30': '矢作 紗友里',
	'31': '山口 茜',
	'91': '山本 格',
	'33': '吉田 真弓',
	'82': '佳村 はるか',
	'98': 'ルゥ ティン'
}
var challengeCnt = 1000000;
for(var i = 0; i < challengeCnt; i++){
	if(!arr[myrandom(78) - 1]){
		arr[myrandom(78) - 1] = 1;
	}else{
		arr[myrandom(78) - 1] += 1;
	}
}

var maxDetail = {
	continum: -1,
	name: ''
};
var minDetail = {
	continum: 100,
	name: ''
};
var onishi = 0;

for(var key in arr){
	var continum = (arr[key]/challengeCnt) * 100;
	var keyNum = parseInt(key, 10);
	var temp = msgs[keyNum].replace('talent_image/', '');
	var talentIdStr = temp.replace('.jpg', '');
	var talentId = parseInt(talentIdStr, 10);
	var talentName = talentMap[talentId];
	
	if(key == 21){
		onishi = continum;
		console.log(talentName + 'の出現確率: ' + continum + '%');
	}else{
		console.log(talentName + 'さんの出現確率: ' + continum + '%');
	}
	if(maxDetail.continum < continum){
		maxDetail.continum = continum;
		maxDetail.name = talentName;
	}
	if(continum < minDetail.continum){
		minDetail.continum = continum;
		minDetail.name = talentName;
	}
}

console.log('大西の出現確率: ' + onishi + '%');
console.log('出現率の最大値: ' + maxDetail.continum + '%');
console.log('出現率最大の人: ' + maxDetail.name);
console.log('出現率の最小値: ' + minDetail.continum + '%');
console.log('出現率最小の人: ' + minDetail.name);


このプログラムをアイムエンタープライズ公式ホームページからF12を押してコンソールから流し込みます。
結果は下記の通りになりました。

VM9909:119 間島 淳司さんの出現確率: 1.2485%
VM9909:119 洲崎 綾さんの出現確率: 1.2508%
VM9909:119 斎藤 千和さんの出現確率: 1.2531999999999999%
VM9909:119 飯田 友子さんの出現確率: 1.26%
VM9909:119 本渡 楓さんの出現確率: 1.269%
VM9909:119 秋保 佐永子さんの出現確率: 1.2596%
VM9909:119 釘宮 理恵さんの出現確率: 1.3016%
VM9909:119 雨宮 夕夏さんの出現確率: 1.2703%
VM9909:119 undefinedさんの出現確率: 1.2738%
VM9909:119 日笠 陽子さんの出現確率: 1.2630000000000001%
VM9909:119 千本木 彩花さんの出現確率: 1.2718%
VM9909:119 三宅 晴佳さんの出現確率: 1.2581%
VM9909:119 石川 桃子さんの出現確率: 1.2738%
VM9909:119 赤尾 ひかるさんの出現確率: 1.2686%
VM9909:119 猪股 慧士さんの出現確率: 1.2451%
VM9909:119 小澤 亜李さんの出現確率: 1.2939%
VM9909:119 今瀬 未知さんの出現確率: 1.2704%
VM9909:119 岩澤 俊樹さんの出現確率: 1.2671%
VM9909:119 岩山 ちひろさんの出現確率: 1.2392999999999998%
VM9909:119 内田 真礼さんの出現確率: 1.2601%
VM9909:119 今井 麻夏さんの出現確率: 1.2772000000000001%
VM9909:117 大西 沙織の出現確率: 1.2815%
VM9909:119 折戸 マリさんの出現確率: 1.2576%
VM9909:119 木野 双葉さんの出現確率: 1.2845%
VM9909:119 田村 睦心さんの出現確率: 1.2692999999999999%
VM9909:119 桑谷 夏子さんの出現確率: 1.2705%
VM9909:119 岩井 映美里さんの出現確率: 1.2697%
VM9909:119 鈴木 亜理沙さんの出現確率: 1.2519%
VM9909:119 芹 亜希子さんの出現確率: 1.2633999999999999%
VM9909:119 巽 悠衣子さんの出現確率: 1.2724%
VM9909:119 小松 奈生子さんの出現確率: 1.2893%
VM9909:119 中原 麻衣さんの出現確率: 1.2675%
VM9909:119 島田 武幸さんの出現確率: 1.2706%
VM9909:119 伊達 忠智さんの出現確率: 1.2675%
VM9909:119 続木 友子さんの出現確率: 1.2646%
VM9909:119 綱掛 裕美さんの出現確率: 1.2515999999999998%
VM9909:119 利根 健太朗さんの出現確率: 1.2665%
VM9909:119 永塚 拓馬さんの出現確率: 1.2593%
VM9909:119 藤吉 浩二さんの出現確率: 1.2963%
VM9909:119 平田 宏美さんの出現確率: 1.2625000000000002%
VM9909:119 植田 佳奈さんの出現確率: 1.2727%
VM9909:119 加藤 渉さんの出現確率: 1.2676%
VM9909:119 MAKOさんの出現確率: 1.2716%
VM9909:119 松尾 絵那さんの出現確率: 1.258%
VM9909:119 矢島 和葉さんの出現確率: 1.2859%
VM9909:119 ルゥ ティンさんの出現確率: 1.2702%
VM9909:119 松田 利冴さんの出現確率: 1.277%
VM9909:119 佐倉 綾音さんの出現確率: 1.268%
VM9909:119 高橋 美佳子さんの出現確率: 1.2533%
VM9909:119 長縄 まりあさんの出現確率: 1.2584%
VM9909:119 鈴木 達央さんの出現確率: 1.262%
VM9909:119 松岡 禎丞さんの出現確率: 1.2838%
VM9909:119 内田 雄馬さんの出現確率: 1.2621%
VM9909:119 綾瀬 有さんの出現確率: 1.2564%
VM9909:119 石井 一貴さんの出現確率: 1.2536%
VM9909:119 丹沢 晃之さんの出現確率: 1.2697999999999998%
VM9909:119 飯島 晶子さんの出現確率: 1.2769000000000001%
VM9909:119 佳村 はるかさんの出現確率: 1.2697999999999998%
VM9909:119 花倉 洸幸さんの出現確率: 1.2731%
VM9909:119 柏崎 隼史さんの出現確率: 1.2593999999999999%
VM9909:119 金子 真由美さんの出現確率: 1.2553999999999998%
VM9909:119 神原 大地さんの出現確率: 1.2719%
VM9909:119 早見 沙織さんの出現確率: 1.2585000000000002%
VM9909:119 髙野 麻美さんの出現確率: 1.2593999999999999%
VM9909:119 高城 元気さんの出現確率: 1.2715%
VM9909:119 髙山 ゆうこさんの出現確率: 1.2796999999999998%
VM9909:119 滝田 樹里さんの出現確率: 1.2629%
VM9909:119 浜崎 奈々さんの出現確率: 1.2616%
VM9909:119 成家 義哉さんの出現確率: 1.2616%
VM9909:119 仁後 真耶子さんの出現確率: 1.2454%
VM9909:119 畠山 広信さんの出現確率: 1.2652999999999999%
VM9909:119 鳴海 和希さんの出現確率: 1.2772999999999999%
VM9909:119 下野 紘さんの出現確率: 1.2737%
VM9909:119 矢作 紗友里さんの出現確率: 1.2236%
VM9909:119 柳田 淳一さんの出現確率: 1.2687%
VM9909:119 山口 茜さんの出現確率: 1.2844%
VM9909:119 山本 格さんの出現確率: 1.2518%
VM9909:119 吉田 真弓さんの出現確率: 1.277%
VM9909:131 大西の出現確率: 1.2815%
VM9909:132 出現率の最大値: 1.3016%
VM9909:133 出現率最大の人: 釘宮 理恵
VM9909:134 出現率の最小値: 1.2236%
VM9909:135 出現率最小の人: 矢作 紗友里

どうやら、おおよそ1.2%~1.3%の確率でみなさん出現しているようです。

一番出現確率が高かったのは釘宮さんになりました。
くぎゅ~…さすがです。。

逆に一番確率が低かったのは矢作さんになりました。
あぁ~ちょろい復活しないかな…

まとめ

数学とかプログラミングとかわかる人、
まぁそれ以外でも実際にこのプログラムをアイムのページで回してみた人には速攻でバレるとは思いますが、
このプログラム、回すたびに違う結果が返ってきます。

なので、あまりあてにはしないでください。
お便りのネタにしようと思って作っただけなので。。笑

こんなアルゴリズムのほうがいいぞ!とかあったらぜひ教えてください!
以上です。。

SEからゲームプログラマになる方法

はじめに

どうも、ポンコツこと獣蔵です。。

さて、タイトルにも書いた通り、私は

 

2016年9月末付けで新卒入社した電機メーカを退職し、10月一日付けでゲーム屋さんのプログラマになりました!

 

転職の理由は

  • そもそもゲームが好きでゲーム屋さんで働きたかった
  • 前職で、エンジニアとして技術の勉強とかバリバリやりたかったけど、やれ見積もりとか仕様書とかばっかりと格闘させられて飽き飽きしていた

と言う感じです。。

 

で、私の勝手な思い込みかもしれませんが、、私みたいに

「いやぁホントはゲーム屋さんでエンジニアやりたかったんだけどダメでさぁ~、、いまは普通のSEしてるよぉ。。

でも、チャンスがあったらゲーム屋さんのプログラマとかにジョブチェンジしたいなぁ~」

と、思っているそこのアナタ!!(結構いるだろ!!爆)

アナタのために!ポンコツが転職活動でやったことを書き残したいと思います。。

 

転職時のポンコツのスペック

いやいや、言うてお前スーパーハカーだから転職できたんだろ?と疑り深いそこなアナタ!!

せっかくなので転職時のポンコツの履歴書に書いたスペックを晒します。。

アナタ自身のスペックと比較して大したことないことを実感してください。。

あっ、ちなみに私は自分のことをフロントエンド(バックエンド)のエンジニアだと思い込んでます。(合ってるよね??)

経験言語

利用したことのあるフレームワーク

 

とまぁ、こんな感じです。。

いや、実際はこれだけだと履歴書スカスカなので学生の時にほんの少し触ったpythonとかCとかも書きましたが、会話に出せるのは上に書いたやつらぐらいで…

いかがでしょう、、ポンコツが大したエンジニアじゃないことを自覚していただけたかと!(というかそもそもブログの記事自体大した内容書けてないしなぁ…)

 

利用した転職サイト

ポンコツが利用した転職サイトです。。

一応いっておきますがどこの回し者でもないです、はい。。

 

やたら登録してんなぁと思われるかもですが、前職の先輩に言われた言葉で

「転職サイトは自分の市場価値を知ることができるから、転職する気がなくても登録してこまめに自分の覚えた技術を追記して行くと良い」

と言われたのを真に受けて、新卒入社したぐらいから登録しまくってたのでこうなりました。。

 

ちなみに、個人的には@typeはいろいろ細かく設定できて使いやすいと思ってます。。

 

転職活動で成功したなぁと思ったこと

ポンコツが転職活動したときこれはやっといて良かったな、と思ったことについてです。。

すばり、ゲームの履歴書を作ったことです!!

 

ゲームの履歴書とは…

自分がいままでやって来たゲームを一覧にしてついでに一言コメントを書いて履歴書と一緒に提出しました。。

 

これが結構ウケました!笑

これのおかげで、転職活動中に自分が好きだったゲームに携わっていた人にもたまたま会えましたし、ゲーム業界を目指すかたは是非作ってみると面白いかもです。。

 

転職活動で失敗したなぁと思ったこと

ずばり、数打ちゃ当たる戦法を取ったことです。。

 

みなさんご存知のとおり、ソーシャルの大ブームもあって、2016年現在、ゲーム会社って数百社とかあります。。

なので、人材紹介会社とかに行くと、ゲーム会社の求人票をしこたま頂けちゃうわけです。。

 

ポンコツはとりあえず、そーやって貰った求人票に片っ端から応募したわけですが、、

いざ面接でゲーム大好きを語る目の前の応募者があろうことか応募企業のゲームをやったことがないという最悪の事態が起こるわけですよ!!

 

これではいけませんね。。

 

やっぱり、ここら辺に関しては新卒で就活してる時と一緒で企業研究は大事です!

全然知らないゲーム開発会社とかソーシャルの会社とかに応募する場合は少なくとも一本はその会社のゲームを軽く語れる程度にやりましょう。。

 

就業形態について

内定をいただけたときの話です。。

 

ゲーム業界の会社はまぁ広義のIT業界なので、普通のITの会社のように派遣や契約社員という就業形態もあります。。

 

自分は転職活動で3社ほど内定を頂けましたが、どれも契約社員としての内定でした。。

 

前職では正社員で次は契約社員と聞くと聞こえは悪いかもしれませんが、少なくとも自分のいまいる職場はリーダー各の人以外は契約や派遣、アルバイトの社員で回っています!

 

また、契約社員には賞与が無いというイメージがあるかもですが、自分のいる会社に関してはタイトルの売り上げ次第で契約社員にも賞与が出ます!

まぁ、売り上げが悪ければ出ないわけですがそれは一般企業なら正社員でも当たり前の事ですよね。。

 

なので、契約社員と正社員の間には契約期間が設けられている、と言う点しか違いがありません。。

 

まぁ、あくまで自分の入社した会社の話なので、内定をいただけた際にそれぞれ確認してほしいわけですが…ご参考までに。。

 

おわりに

という訳でポンコツが転職活動で見たこと、聞いたこと、やったこた、体験したことをつらつらと書き上げました。。

 

これは私の勝手な思い込みですが、

いま私は20代な訳ですが、多分私が60とかになる頃には年金とか雀の涙程度にしかもらえなくて、70, 80になっても働かなきゃ生きていけないんじゃないかなって思います。。

 

そんなとき、自分が楽しいと思えない仕事をだらだらと続けていくのは耐えがたい苦痛になるんじゃないかなとか考えるわけです。。

 

おそらく、残りの余生、家よりも会社にいる時間が長いのなら、仕事が楽しい方が絶対にハッピーです。。

 

幸いなことに私はプログラムを書くことが好きです。。

自分が考えたシステムが自分の考えた通りに動く様を見るのが好きです。。

自分の考えた仕組みに良かれ悪かれTwitterとかで反応があるのはとても嬉しいです。。

 

そんなわけで、ゲーム屋さんのプログラマになれて私はとても幸せなのです。。

 

と、言うわけで

以上、ポンコツの転職体験記でした。。 

 

なにか質問とかあればコメントください。。

答えられる範囲でお答えします。。

「target="brank"(blank)」で別タブが開かない

割と稀有な問題に衝突して1時間ぐらい悩んだのでメモします。。

<a href="http://hoge" target="brank"></a>

上の書き方は間違ってます。
正しくは「target="blank"」です。

ですが上の書き方でもchrome, IEでは動作しました。
safariでは動きませんでした。

chrome, IEの優しさに悩まされました。
下記間違いには注意しましょう。

PSO2やってます

たまには趣味の話でも。。

PSO2やってます!
9鯖に2キャラいます。。

ちょっとトーカちゃんっぽく出来そうだなって思ったときに撮ったSSです。。
f:id:ponkotsuSEchan:20160402151549j:plain
f:id:ponkotsuSEchan:20160402151714p:plain

  • 獣蔵 ニュマ子

モナー実装時に追加した子です。。
f:id:ponkotsuSEchan:20160402153931p:plain

見かけたらよろしくお願いします。。

MySQL JDBCではコネクションを繋いだり切ったりしてはいけない

現象

先日こんな例外に遭遇しました。

java.lang.IllegalStateException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The driver was unable to create a connection due to an inability to establish the client portion of a socket.
This is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable.
For Unix-based platforms, see the manual page for the 'ulimit' command. Kernel or system reconfiguration may also be required.
For Windows-based platforms, see Microsoft Knowledge Base Article 196271 (Q196271).

発生環境

インサートをする際にその直前と直後にコネクションの接続と切断をするような
ソースを書いていました。。

インサートは数1000件レベルで発生します。。
めちゃくちゃ重くてパソコン止まりそうになりました…

原因

これの原因についてまとめている方がいらっしゃいましたので紹介します。。

どうやら原因は切ったり繋いだりを連続させて発生させてしまったこと。

プログラムの最初と最後に一回ずつ接続・切断を行うように書き換えたところ
問題解決と同時にプログラム自体の動作も劇的に改善されました!

教訓

  • MySQL JDBCではコネクションを繋いだり切ったりしてはいけない

以上。。

pom.xmlエラー発生時の解決方法

ある日のこと、リポジトリーからwebアプリケーションをチェックアウトすると下記のようなエラーが発生しました。

Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.12.4 from http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact org.apache.maven.plugins:maven-surefire-plugin:pom:2.12.4 from/to central (http://repo.maven.apache.org/maven2): repo.maven.apache.org

とりあえず、エイヤとこのままグーグル先生に投げてみると英語のサイトしか出てこなかったのでここに解決方法を日本語で書きとどめておきます。

解決方法

  1. eclipseをいったん落とす
  2. {ユーザ名}/.m2/repository/org/apache フォルダーをエクスプローラで開く
  3. maven フォルダーを削除する(一応バックアップ等とっておいた方が無難かと)
  4. eclipseを再起動する
  5. エラーを吐いていたxmlを持つプロジェクトを選択して右クリック
  6. Maven>プロジェクトの更新 をクリック

以上でエラーが消えました!

追記(2016/04/11)

会社からEclipseを利用して開発を行っている場合プロキシサーバのパスワード更新等の理由で上記エラーが出ることもあるみたいです。
上の解決方法でダメな場合はEclipseのプロキシ設定,mavenのsettings.xml({ユーザ名}/.m2/repositoryにあるはず)の見直しも行ってみるといいかも。。。

spring3 でjsonをPOSTで受け取る

学生時代はフレームワークなんて使ったこと無かったんで初めてフレームワークを利用しててんてこマイ舞いドリームなんですよ、ホント。。。
ちゅーこって、、spring3でこの前引っかかったのでメモ

やりたいこととしては

  1. クライアント側からPOSTでajax通信する
  2. JSONでHTMLのformタグのデータをサーバに投げる
  3. そいつをサーバ側で受け取ってあれこれ処理

実行環境

クライアント側

  <form id = "searchform" action = "search" method = "POST">
    <!--テキストボックスとかチェックボタンとか-->
    <button id = "searchbtn" type="submit" name = "searchbtn" onclick = "return check()">投げる</button>
  </form>
function check(){

  //テキストボックスの入力チェックとか
  var jsonString = $('form').serializeArray();
  var formData = JSON.stringify(jsonString);
	$.ajax({
		type: 'POST',
		url: '/prototype/searchUser',
		data: JSON.stringify(jsonString),
		contentType: 'application/json',
		datatype: 'json',
		scriptCharset: 'utf-8'
	}).done(function(data){
                //返ってきたときの処理
	}).fail(function(data){
		//返らなかったときの処理
	});
}

  return false;


サーバ側

        @ResponseBody
	@RequestMapping(value = "/search", method = RequestMethod.POST, produces="application/json; charset=UTF-8")
	public void searchFileInfoJson(@RequestBody String json) throws IOException, ServletException {
          //処理をあれこれ
        }

ポイント

  • サーバ側 jsonでの受け取りは@RequestBody Stringで!

 →自作のクラスを指定してそのパラメータに自動で受け取る方法もあるらしいけどうまくいかなかった
 →まぁStringで飛んでくるからこれなら間違いなく受け取ることはできる。。

これが今の僕にできる精一杯でした。
ご査収ください。