ぱろっと・すたじお

技術メモなどをまったりと / my site : http://parrot-studio.com/

とあるプログラマの転職記録

別なBlogでそれっぽいことを書きまくっているので今さらですが、
3月から新しい会社で仕事をしております(`・ω・´)

ギリギリまで引き継ぎをしていたため、相当に有休が余りまくりでしたが、
技術者は私一人でしたので、「あとはよろしく」ってわけにも・・・
(在籍中の後半は別なグループ会社の仕事を主にしてました)

で、この手の記事にありがちな「前の会社の実績」とか、
「新しい会社でやること」とか、
私のような無名の技術者の場合はどうでもいいですよね?

むしろ、「私が(読者ならば)知りたいこと」は、
具体的な転職の経緯とかノウハウだと思うので、
その辺をメモしておこうかと...φ(・ω・`)

転職のきっかけ

今までの転職はほぼ仕事への不満100%でしたが、
以前の職場は楽で給料も良かったので、
その意味での不満はありませんでした

ただ、「世間一般の会社」がやっていることに対し、
どんどん遅れていっていることが不安になりまして(´-ω-)

それでも十分な利益が上がっているので、
会社としては問題ないのかもしれませんが、
私個人のレベルではちょっとな・・・と

他に稼げる手段もないので、エンジニアとして一生食っていくという覚悟でやってますが、
基本的な部分でめんどくさがりなので、
過剰なコストを払って「一流」*1になる気はありませんc(・ω・`c )っ *2

ただ、「いざ仕事を探す時に、選択肢がない状況」にはしたくないので、
そのギリギリのラインは維持できるようにと考えていて、
そろそろそれを下回るな・・・というあせりがあったのです

いくらプライベートでいろいろ作っていたとしても、
やはり実務実績がないと説得力に欠けるわけで、
「今の世間一般的な経験」を積む必要があるだろうと

まあ、それでも元の会社が楽なのは事実で、
年齢で面接に通らない可能性も十分にあったので、
元の会社に残る選択肢を残しつつの転職活動でした

ただし、この「技術者としての理由」は半分で、
「プライベートな理由」もかなり大きいのですが、
それはきっかけになった本だけ紹介するに留めます(´・ω・)っ

ロースおじさんのとんかつQ&A その悩み、豚に相談した?

ロースおじさんのとんかつQ&A その悩み、豚に相談した?

すべてはモテるためである (文庫ぎんが堂)

すべてはモテるためである (文庫ぎんが堂)

エージェントの紹介と書類選考

転職を決める1年前、最近の流れを見るため、
転職エージェントに会って情報を流してもらっていたのですが、
本気で転職すると伝えて仕切り直したのが10月末です

過去の転職でも、特に理由がない限りは転職エージェントを利用しています

企業のHPで募集をしてないって場合でも、
エージェント経由だときっちり募集していたりしますし、
なにより各種調整を代行してくれるってのがとても楽です

書類の提出から面接日程の調整はもちろん、
入社前の条件調整とか、お断りの連絡とか、全部代行してくれます
業務と並行で転職活動をするならとても便利だと思います(`・ω・´) b

もちろん、入りたい会社が最初から決まっているとか、
誰かに誘われたから転職するって場合は不要です
あくまで「漠然とどこかに行きたい」という場合に利用するものです*3

で、早速まとまった数の企業を紹介してもらいまして、
各企業について個人的にじっくり調べまくり、
書類を出し始めたのが11月の頭でした

紹介されたのは流行のゲーム系と普通の業務系で半々くらいで、
この時点ではどちらとも決めていなかったので、
単純に企業情報を調べて「良さそうなところ」に出してみました*4

あと、ずっと前から目をつけていた会社の求人も、
エージェント会社のDBにあったので、
こちらも個人的な興味で出してみました

まあ、最終的に入ったのがそこなのですが・・・Σ(・ω・ノ)ノ

面接のもろもろ

書類を出した時点では、「そこそこの数通るやろ」と油断していたのですが、
予想以上の数蹴られまくったので、相当にあせりましたΣ(゚Д゚;≡;゚д゚)

スキル的には十分だとしても、年齢や希望年収*5で折り合わないケースが思ったより多く、
逆に面接にこぎ着けたのは「年齢よりもスキル重視」の会社だと思ってます

実際、どの面接でも私のBlogやGitHubリポジトリを「その場で」チェックしてました

「普段Rubyを書いているようですが、C#は触ったことありますか?」という質問に、
「書いたことがあります」と答えるのと、
「書いたことがあり、GitHubにコードがあります」では、全く印象が違いますからね

もちろん、どんな雑なものでもUPしておけばいいってものではありませんが、
普段からいろいろ書いておくのは有利に働くはずです(`・ω・´)

それに、最近の会社でgitを使わないってことはほぼないはずで、
GitHubにコードがあるということは、
最低限の使い方を知っているという証明にもなります

あとはやはり、過去にやったLTの資料とかも役に立ちました*6
あれの話をしつつ、ほとんど雑談のように面接が進んだ会社もあります

一方で、最初に面接を受けた会社は、私自身の心構えも十分でなく、
聞かれて当然の質問にあせって真っ白になるという事態に陥りまして(lll゚Д゚)

他にも鋭い質問が飛びまくり、これはやばいと思ったものの、
後半うまく取り戻したおかげで、その面接は突破したのですが・・・

面接が終わった後、今の人が「社長」だと教えられましたΣ(゚Д゚)ガーン

他の面接に比べると、これが最初にして最大の難関でしたが、
この会社は先ほども書いた「前から興味のあった会社」であり、
面接の翌日には内定をいただき、結果的にその会社に入っております

選考プロセスの違いについて

会社によって選考プロセスが違うため、
先ほどのように1回の面接で内定が出る会社もあれば、
Webテスト等々を経由してやっと面接、という会社も少なくありません

規模の大きい会社ほどプロセスが長いため、
結果的にある会社の一次面接が、
最初に内定が出た会社の回答期限前日って状況だったりもΣ(゚Д゚)ガーン

書類を出す順番を考えるべきだった気がしますが、
かといって出すのが遅れて募集が終わってしまってもあれですし、
こればっかりは巡り合わせとしか・・・

規模の違う会社を同時に志望する場合、
書類を出す順番をある程度調整した方がいいかもしれません

会社を決めた基準

最初に面接を受けた会社から内定が出て、
その回答期限が11月末だったのですが、その段階で私はこのような状況でした

  • 内定:2社
  • 1次面接突破:2社
  • 1次面接待ち:1社

このうち、4社がゲーム関連で、1社がWebサービスの会社です
他にもWebサービスの会社はいろいろ出したのですが、
ここ以外は全部書類で蹴られましたΣ(゚Д゚)ガーン

で、個人的に悩んでいたのが、内定を取った2社(A/B社)と、
まだ面接が先の1社(以下C社)の3社でした

C社のゲームはめちゃくちゃはまっていたのもあり、
入れるなら本気で入りたいと思ってはいたものの、
実際にどのような業務でスキルを生かせるのかが不明確でした

一方、A社は「ゲームプログラマ」としての採用であり、
B社は技術面で有名で、やはりゲームのプロジェクトで採用の予定でした
しかも、どちらの会社もメインの言語がRubyでした

相当に悩んだ結果、A社とB社については、
ゲームの内容で決めることにしまして、実際にプレイしてみた結果、
私好みのゲームを作っていたA社を選択しました

仕事とプライベートは切り離していますが、
どうせ作るなら自分でもやりたいと思うゲームがいいですからね
B社ゲームはどちらかというと「普通の人向け」だったので

問題はまだ面接してないC社ですが、
面接前に「ゲームプログラマの採用か否か?」という基準を決めました

C社の面接ではゲームへの愛を相当に語りまくりまして、
またそういう人が好きな会社であることもわかっていたわけですが、
だからこそ、ゲームそのものの要求技術レベルが高いのもまた事実です

面接の中で「採用するとしたらどのようなポジションか?」と聞いたところ、
やはりバックエンド周りとのことで、仕方なく今回はあきらめました(´・ω・`)

もし、A社の回答期限までにC社の内定が出ていれば、
相当に悩んだと思うし、C社を選んだ可能性も十分にあったのですが、
こればっかりはタイミングですかね・・・

実際に入社してみて

ということで、12月頭には入社が決まっていたのですが、
元の会社の引き継ぎに時間がかかることがわかっていたため、
2月いっぱいまで待ってもらいまして、3月から入社しております(`・ω・´)

1週間過ごしてみての感想は、良くも悪くも「想定した通り」であり、
やはり事前に細かく調べておいたのは正解だったな・・・と

その他、もっと細かいもろもろは、
今月末開催の「NetGamers.dev.talk」あたりで聞いてください(´・ω・)っ


NetGamers.dev.talk #2 - TwiPla

追記

ゲーマーの視点から今回の転職を書いたのがこちら(´・ω・)っ


好きなものを好きと言い続けると・・・ - あるネットゲーマーの日常

*1: GoogleとかAmazonとか、外資系に入れちゃうレベルの実力

*2: 別に「有名な会社」に入れば幸せとは思ってないので・・・

*3: 余談ですが、一応知りあい経由で打診されたことはあるのですが、一度目は全く転職を考えておらず、二度目は新しい会社の入社直前でしたΣ(・ω・ノ)ノ これもまたタイミングですかね・・・

*4: あとは、スキルセットが合わないのを承知で、「普段お世話になっている会社」にも出しましたが、予想通り書類で蹴られました(´・ω・`)

*5: といっても、前の会社の1割以上減で提示したのですが、それだけ前の会社がゆるいってことかもしれません

*6: やはり関数型のあれは評価されました http://www.slideshare.net/parrotstudio/gunmaweb-5-20110514

モバイルブラウザでクリックの動作が遅い問題の対応(改善編)

相変わらず開発を続けている「チェンクロパーティーシミュレーター」ですが・・・


Get our light! - チェンクロパーティーシミュレーター

・・・昨年末に「部分的でもいいからスマフォ対応が欲しい」という要望をいただきまして

「パーティーを編集する仕組み」として考えると、
スマフォの狭い画面ではいろいろ設計が面倒なのですが、
「データを見るだけ」であれば、専用の画面を作ればいけるかなと

「データを見るだけモード」は元々ToDoに入れて放置していたのですが、
今回の要望とあわせ、イメージが湧いたので、
現在ごりごりと実装しております...φ(・ω・`)

まあ、裏のAPIは同じでViewを差しかえるだけですので、
大雑把なプロトタイプはすぐに完成し、
試しにサーバに突っ込んで実機テストしてみたのですが・・・

・・・いろいろ動作が怪しすぎて、使い物になりませんでした(´・ω・`)

どうもクリック周りの動作が怪しいのです
最初の2回くらいはまともなのですが、
そのうちイベントが取れなくなり、最後には固まるという・・・

そもそも、タブレットで動作させた時にも、
クリック周りで怪しい動きがあったのですが、
見なかったことにしていたんですよね・・・Σ(・ω・ノ)ノ

今回はそういうわけにいかないので、いろいろ調査してみたところ、
たぶん「Hammer.js」が原因、というところに行き着きました

そもそもこのライブラリをなんで使ったのかというと、
タブレットのブラウザでクリック動作が遅かったからなのです


「チェンクロパーティーシミュレーター」を公開しました - ぱろっと・すたじお

Hammer.jsはいろいろなイベントを実装する上で、
クリックの動作も改善していたわけですが、
「汎用的にいろいろ作り込まれていて、影響が大きい」のも事実です

最初のうちはHammer.jsでいろいろやろうとしていたのですが、
今使っているのは結果的に「クリックの反応速度改善」だけであり、
もっと軽いのはないのか・・・と調べ始めました

そして見つけたのがこちらです(´・ω・)っ


ftlabs/fastclick · GitHub


JavaScript - FastClickを使った体感応答時間の短縮テスト - Qiita

その名の通り、クリック速度の改善に特化されており、
ライブラリもシンプルで、組み込みやすくなってます

しかも、Hammer.jsと違い、イベントの記述は一般的な
「$(hoge).on 'click'」とかでよく、コードもシンプルで良いです(`・ω・´) b

とはいえ、やはりイベントに割り込んで動作するライブラリのため、
他のライブラリ(盲点なレベルだとBootstrap)等と、
競合しておかしくなる可能性は十分にあります

当たり前のことですが、動作確認はしっかりと(´-ω-)


・・・とまあ、これで終わってもいいのですが、
今回の話には落ちがありまして

サーバに改善版をUPし、実機でテストしてもOKだったので安心していたら、
コードに記述漏れがあり、ライブラリは読み込んでいたけど、
イベントは適用されてない状態でしたΣ(゚Д゚)ガーン

でも、実機でテストしたときにクリックの違和感はなかったわけです
だとすると、元々私が「遅い」と感じたクリックはどこへ・・・
という疑問が湧きます

私のスマフォはAndroidで、ブラウザはChromeですので、
先ほどの実験記事にある「対策済み」のパターンに該当しますし、
元々スマフォでは「編集できない」という表示テストしかしてません

しかし、タブレットiPad miniで、OSは7で留めてますので、
Safariのバージョンはリリース当初と変わってないはずなんですよね・・・

・・・まあ、今まともに動いているからいいかΣ(・ω・ノ)ノ

「Rubyのしくみ」 "10.times do"から始まる冒険

お正月って、あらゆる気力を奪われる時期なわけですよ

長期休みって意味では夏休みも変わらないはずなのに、
世間の空気感も含めて、全力で怠惰になるというか、
ゲームをやる気力すら削がれるというかc(・ω・`c )っ

そのうち布団から出るのすら面倒になり、
布団の中で積んでいた漫画を崩した結果、読むものがなくなり、
ついに積んでいた技術書を崩し始める・・・そんな時期なのでございます

・・・というのがどこまで本当かはともかくとして、
お正月にだらだらと読んでいた本がこちらに(´・ω・)っ

Rubyのしくみ -Ruby Under a Microscope-

Rubyのしくみ -Ruby Under a Microscope-

Rubyist Magazine - 書籍紹介『Rubyのしくみ Ruby Under a Microscope』

「プログラム(言語)とは、結局のところメモリの書き換えである」と、
セガの方もおっしゃっていましたが・・・


「プログラミングを教える」ということ - ぱろっと・すたじお

・・・「言語がどのようにメモリを使っているか?」は、
言語を深く理解する上では重要な概念ですし、
少なくともパフォーマンスチューニングにおいては必須です*1

実際、新人時代からJavaを書いていたものの、
「感覚的に理解した」のはこちらの本を読んだときです

Java 謎+落とし穴 徹底解明 (標準プログラマーズライブラリ)

Java 謎+落とし穴 徹底解明 (標準プログラマーズライブラリ)

この本もJavaのメモリ管理について解説されており、
「参照」とは何なのか、GCは何をしているのかが理解できまして、
それ以降ぬるぽ*2を作り込むことが圧倒的に減りました( ゚д゚)o彡゚

その後、Javaを離れてRubyを書き始めたときも、
最初のうちはJavaっぽいコードを書いていたものの、
本質的にRubyっぽいコードに近づき始めたのは、こちらを読んだときです

Rubyソースコード完全解説
http://i.loveruby.net/ja/rhg/book/

この本・・・というかサイト(RHGと略すらしい)は有名でして、
Rubyを深く知りたい方はたいてい目を通しているはずですが、
どうにも解説しているバージョンが古い、という問題がありました(´-ω-)

その「RHGの現代版」と言えるのが先ほどの本でして、
本質的な狙いはほぼ同じです

とはいえ、私自身はC言語に明るいわけではなく、
Brainf**kの評価器を作れる程度の知識*3はあっても、
正直YARVの解説は難しすぎて、完全に理解することはできません(´・ω・`)

とはいえ、表面的にでも「何をしたいのか?」は読み取れますし、
5章以降のオブジェクトに始まる一連の話は、
C言語の細かい知識がなくても十分にわかります

Rubyにおいて全てがオブジェクト=メモリの束で管理されているなら、
オブジェクトの構造が理解できれば、Rubyの本質的な部分が、
かなりのレベルで見えてくるんじゃないかと(`・ω・´) *4

そもそもRuby自体(おそらくはLisp等と同じく)、
「概念」とか「理想」がまずあって、それを「実装」している感じで、
その「概念」自体はわりとシンプルで合理的なわけです*5

つまり、「何に使うか?」という「目的」ではなく、
「こういう言語にしたい」という「理想」が起点だと思っているので、
そのあたりの「意図」を読み取れれば、後は応用なのかな・・・と思います

逆に、「概念」や「理想」が先行しているからこそ、
JRubyやRubiniusのような他の処理系も存在できるわけで、
そのあたりの解説も面白いものになってます

「黒魔術」と言われがちなRubyが、
実際のところ「合理性の塊」であることがよくわかるという意味でも、
この本は面白いですし、おすすめします・・・が・・・


・・・やっぱり難しい本だと思います、ええ(´-ω-)

*1:メソッドの呼び出し」すらも、突き詰めればメモリ管理の問題です そのあたりの理解を助けるのに、平山さんの本はとても優れてます

*2: ガッ

*3: ネタプログラミング言語クリエイターYouma (Gunma.web #8) - ぱろっと・すたじお

*4: RHGを読んでいても、「Module#prepend」がどう実装されているのかはわからないのですが、この本を読むとすっきりします(`・ω・´) b

*5: 例:「全てはオブジェクトである」「(たとえ演算子であっても)全てはメソッド呼び出しである」etc...

「エンジニアでも恋がしたい」(・・・らしいが、いくらなんでも展開が早すぎるやろ)を解いた件

POH!も4回目ですってよ、奥様(`・ω・´)


マンガ版「エンジニアでも恋がしたい!」〜転職初日にぶつかった女の子が同僚だった件〜|paizaオンラインハッカソン4 Lite

今回は評価点の高低でストーリー分岐する仕組みだったわけですが、
過去3回に比べると、一番簡単な内容だったと思います
たぶん、1回目と同じくらいかもしれません


「女子大生とペアプロするだけの簡単なお仕事」でSSSをとるまでに考えたこと - ぱろっと・すたじお


「女子大生とペアプロ問題」の言語別通過率を分析してみる - ぱろっと・すたじお


天才火消しエンジニア霧島さんのトラップに引っかかった件 - ぱろっと・すたじお

今回は間口を広げるための回だったようで、
ITmedia等でも取り上げられました


プログラミングでストーリーが変わるぞ! Webマンガ「エンジニアでも恋がしたい!」公開 - ねとらぼ

今回の特徴は、3問連続で突破しないといけないところです

しかし、1問目2問目は足切り問題であり、
「職業プログラマがこれを即座に書けないとマジで話にならない」レベル*1で、
3問目の問題が本命です

とはいえ、3問目も100点が取れない場合にヒントが出るため、
その単語でググってアルゴリズムを押さえれば解けてしまいますがΣ(゚Д゚)ガーン

ポイントは「O(mn)」の計算量を、いかにして「O(n)」にするか・・・なのですが、
アルゴリズム自体はすぐ出てくるわけで、
後はどう効率的なコードにするか、だけでしょう*2

今回は簡単なため、私の解答は「続きを読む」に貼っておきます
ぜひ自力で解いてみてください


・・・なお、どうでもいいことですが、
個人的には100点の水着より60点の浴衣の方が好みですΣ(・ω・ノ)ノ



<追記>
CoffeeScriptでも書いてみたのですが、
3問目のTestCase4でエラーになりますΣ(゚Д゚)ガーン

配列のindexが間違っているのかと思って、
デバッグ文とか突っ込んだりしてみたのですが・・・
アルゴリズムは全く同じなんですけどね

*1: それこそ、面接でこれを書いてくださいと言われてもおかしくないレベル

*2: 実際、名前そのものは知らなくても、よく使うアルゴリズムだとは思います というか、使ってたのにな・・・(´-ω-)

続きを読む

今さらOGPとTwitterCardについて調べてみた

Facebookのような「THE・リア充空間」に全く縁のない私ですが、
最近になってやっと「Open Graph protocol」(OGP)というものの存在を知りました


The Open Graph protocol

最近はてなにRO(+α)のBlogを移転して気づいたのですが、
URLを貼り付ける際に開く選択で、「埋め込み形式」ってのがあります

例えばこんな感じで(´・ω・)っ


新しいスマフォゲーを試そう・その1 - あるネットゲーマーの日常

当然、この方が見栄えがいいし、
この形式が並んでいる中に非対応のサイトがあると、
浮いて見えたり目立たなかったりするわけです
(ゲームのBlogで画像多めなので余計に)

なので、「埋め込みが可能になる条件」を調べていて、
たどり着いたのがOGPだった・・・というわけです


「ブログカード」をOGPなどに対応しました。さまざまなWebページをコンパクトに整形して掲載できます - はてなブログ開発ブログ

これを見ると、まだ対応して数ヶ月ってレベルだったんですね・・・
Blog移転が10月だったので、いいタイミングでした(`・ω・´) b

さて、私が最近作っているサイトに、
「チェンクロパーティーシミュレーター」というものがあるのですが、
これもOGPに対応させてみました


Get our light! - チェンクロパーティーシミュレーター

自分のBlogで紹介する際、埋もれてしまうのが気になったので・・・(´-ω-)

とはいえ、対応そのものはタグの追加だけなので楽です

<meta property="og:site_name" content=“サイトの名前" />
<meta property="og:title" content="記事タイトル" />
<meta property="og:type" content="website" />
<meta property="og:image" content="記事画像" />
<meta property="og:url" content=“記事のURL" />
<meta property="og:description" content="記事の概要" />

https://github.com/parrot-studio/cc-pt-viewer/blob/master/app/views/layouts/application.html.erb

今回は1ページしかないので適当に書きましたが、BlogなどのCMSでは、
自動でこのあたりのタグを生成する仕組みにすればいいわけです

・・・と、これだけでも十分だったのですが、
はてなBlogにTweetを貼り付けたところ、このように見えました

post内容の下にBlogの概要が表示されています

おそらくOGPが絡んでいるのだろうと、自分のサイトをpostしてみても、
このようには見えなかったので、調べてみました


Twitterカード | Twitter Developers

このように、タグを追加して「申請」しないとダメだそうで(´-ω-)

とはいえ、OGPに対応しておけば、追加するタグはシンプルです

<meta name="twitter:site" content="@parrot_studio">
<meta name="twitter:card" content="summary">

これだけΣ(゚Д゚)ガーン

申請も面倒なのかな・・・と思ったら、わりと簡単でした
(ただし、反映されるまでに少々時間がかかります)


Twitter Cards利用申請 - Qiita

するとこのようになります

これだけで「できるサイト」っぽくなって素敵ですね(`・ω・´)


最近、(いいか悪いかは別として)ニュースをまとめるサイト・アプリが増えていますが、
そこで「埋もれないために」、このような仕組みに対応することも必要かと思います

例えば、私がよく見ているMSNのニュースサイトはこのようなデザインです

http://www.msn.com/ja-jp/news

少なくともOGPに対応していない限り、
「画像付きの見出し」にはならないはずです

これに気づいただけでも、
はてなBlogに移行した価値があったかな・・・と思ってます



むしろ問題は、「この(技術っぽい)Blog」と「RO(+α)のBlog」、
どっちが「私にとってのメインBlogか?」ってことで・・・Σ(・ω・ノ)ノ