投稿者: ken kentan

Summer Internship 2019 @ Recruit


「Recruit Internship for Specialist 2019 -ENGINEER/DATA ENGINEER-」に参加してきました。

きっかけ

「リクルートのエンジニアインターンはいい」と聞いたので参加することにしました。

色々見ていると、インターン生に要求されるレベルが高いことがバンバン伝わってくるので参加したらかなり成長できるなと感じた点が大きいです。

選考

基本的な流れは ES -> コーディングテスト -> 人事面接 -> 最終面接 だったと思います。

ESはフォーマットが決まっていたので、時間をかけてちゃんと書きました。辛かったです。

コーディングテスト

CSの知識を問うものからSQLやアルゴリズムの問題がありました。一度使ったことがあるプログラミングテストツールで安心した記憶があります。

面接

人事面接は、作ったアプリについてや趣味など一般的な面接でした。大阪からWeb面接で受けました。

最終面接は東京本社に受けに行きました。詳細は控えますが、今までに受けたことがない形式で楽しかったです。開発アルバイトの実務経験が役に立ちました。

内容

実際に参加する前に、事前面談といった形でどういった案件に参加するかの説明がありました。ESでは「Androidエンジニアとしてやっていきたい」「ソフトウェアアーキテクチャや設計について学びたい」と書いていたので、インターンではモバイルアプリの開発に参加することになりました。ちなみに、参加後も定期的に「やりたかったことをやれてるか?」みたいな質問があるので、案件が合わないなと思っても後から調整してくれるみたいです。すごい。

僕が所属したのはリクルートライフスタイルでじゃらん(にゃらんが可愛い)などのサービスを開発している所でした。

取り組んだこと

具体的には、●●●に●●●を●●●ため●●●を用いてスクラッチで開発するといったことをしていました。●●●に触れるのは初めてだったのでキャッチアップが大変だったのを覚えています。

LT

インターン期間中に社員の方とインターン生が参加するLT会が2回ほどありました。

僕はLTをしたことがなかったのですが、せっかくの機会なので初LTをしました。趣味でやっているMinecraftマルチサーバについて話しました。比較的評判が良かったので嬉しかったです。今後も機会があればLTやっていきたいですね。

過去の参加記を見てるとTシャツとか貰えたみたいですが今回はありませんでした。残念。

ランチ

インターン生には一定額ランチ代が設定されているようで、チームの方に「こんな人と話してみたい」って投げるとシュッとランチが設定されます。すごい。

Androidエンジニア、Backendエンジニア、Mgrなど様々な方と話すことができました。これがめちゃくちゃ面白かったです。

感想

僕がいたのは比較的少人数なチームだったので設計について議論しながら実装できたので非常に面白かったです。また、日頃はAndroidやKotlinしか書いていないので他のフレームワークを使うのは非常に新鮮でした。

また、インターンランチで様々なロールの方にキャリアについて話を聞けたことで自分のなりたい将来像がかなり明確になりました。

この将来像をベースに、どういったキャリアを進めばいいのかを考えれるようになったのは大きな収穫でした。

また、リクルートは部署によってかなり雰囲気が違うみたいなので、そういった雰囲気を知れればよかったかなと思いました。

学んだこと

文章を書くのが辛くなってきたので箇条書きで許してください。

  • 設計を学ぶとは「設計で何を解決したいかを理解すること」
  • MgrとEMは対極にあるものではない
  • リーダーシップは大事、チームを引っ張るようなエンジニアになりたい
  • 組織の特徴によって求められるリーダーシップは違う

最後に

メンターの方、チームの方、人事の方、色々な方にとてもよくして頂きました。インターンに参加した目的を達成できただけでなく、多くの学びを得ることができました。

1ヶ月間、本当にありがとうございました。

Summer Internship 2018 @ mercari

8/1-8/31の1ヶ月間、メルカリのサマーインターンに参加してきました。

動機

学部4年になり、卒論もあるので今年はインターンは参加しないかなと考えていました。しかし、実際にインターンの応募期間が始まって先輩たちが楽しそうにしているのを見て、気がついたらエントリーをポチッと…

その後、趣味で開発したAndroidアプリをフルスクラッチでリファクタリングしていた時期が重なり、「Android+ソフトウェアアーキテクチャを学びたいな」と考えていました。

mercanの記事にiOSのリファクタリングの話が出ていて、もしかしたらAndroid版も新しいアーキテクチャに沿った開発が行われているのでは!?と希望を抱き応募。

あと、一番大きいのが「自分の持っているAndroid知識を全部ぶつけたらどのくらいの成果が出せるか」気になって仕方がない。周りにAndroidエンジニアがいないので、自分の価値が分からないでいました。

選考

募集職種は13種と多く、その中でも自分は、”Software Engineer(Android)”に応募しました。

理由は、自分の中で「Androidが一番詳しく、アウトプットを出せる」かなと。

選考の流れとしては

レジュメ・履歴書提出→技術テスト→面接

でした。特に変わったこともなく、無事合格できました。

印象

一番印象に残っているのは「アウトプットを出す」を求められたこと。1ヶ月と短い期間でいかにアウトプットを出すかを常に考えていた気がします。

他の参加記でも言われていますが、「インターンだから~」といった制約が一切ないので自信を持ってvalueを出せる環境があると感じました。

余談で、オフィスが非常に過ごしやすいのと無限自販機が最高によかった。

内容

配属されたのは、メルカリJPのAndroidアプリのチームでした。

インターン用にタスクが用意されているのではなく、実際に業務を行っていく形です。「実際の開発業務」を行えるのは本当にいい。

具体的には、採用しているアーキテクチャに沿って設計し、実装に落としていく作業をずっと行っていました。ソフトウェアにおける設計だけでなく、「正しいリリースフローはどういったものか」「PRにはレビュワーに対してコンテキストを残す」などチーム開発で重要な多くの学びを得ました。また、Koltinについて新しい知見を得ることができました。一番印象に残っているのはKotlin Fest に参加したことで、非常に感謝しています。

動機としてあった「自分の持っているAndroid知識を全部ぶつけたらどのくらいの成果が出せるか」については、十分達成できたと考えています。Androidについての知識は十分あると思えるようになった一方で、コンテキストを十分残すといった課題も見つけることができました。ソフトウェア設計においては、設計書の作成やレビューを通して多くのインプットがあり、まさに「自分の価値を知る、高める」インターン内容でした。

感想

自分の好きなプラットフォームで業務ができるのは最高に楽しかった。一日中Android Studioを開いてるって最高じゃないですか!?気がつけば1日・1週間が終わってる感覚に陥っていました。

メンターランチやチームビルディングを通して他のエンジニアの方とお話をすることもでき、今後のキャリアを考えていくために非常に参考になりました。また、アウトプット出す1つの方法として「ブログを書くこと」も再確認できたかなと。

今後は、今回得たインプットを積極的にアウトプットしつつ今しかできない様々なことに挑戦していこうと考えています。

メルカリが入っている六本木森ビル

Kotlin Fest 2018 に参加してきた

個人のブログを書くのはかなり久々ですね。久々に技術的な記事になります!

8月25日にあったKotlin Fest 2018に参加してきました。

なぜ参加したか

昔から趣味でAndroidアプリサーバープラグインをKotlinで開発しているのでKotlinコミュニティに参加してみたいと思っていた。(地方学生はつらい)

Kotlin Fest 2018 には無料の学生枠が10人あったのですが、申し込み開始1時間後にはすでに埋まっていてチケットを取れずにいたところを、インターン先のメルカリさんに相談したところスポンサー枠でチケットを頂きました。ありがとうございます!

ちなみに、メルカリはKotlin Fest 2018の「ことりスポンサー」です。

オープニングセッション

非常に大きい会場だったのですが、私が開始時刻ギリギリに着いた時にはほとんどすべて埋まっていました。(スライドの色飛びがすごい)

  • Kotlinの歴史
    • 2011/07に発表
    • マイルストーン形式で小出しリリース
    • 2016/02にv1.0がリリース
    • coroutineはv1.1から登場
  • 日本Kotlinユーザーグループ
    • JKUG
    • 勉強会やSlackチャンネルを運用
  • 意外とサーバーサイドKotlinの導入事例は多い
  • Kotlinを知る
    • 「Kotlinを愛でる」は「Embracing Kotlin」の訳
    • Kotlinの哲学
      • 実用主義
      • 簡潔
      • 安全
      • 相互運用性
  • Kotlinの公式チュートリアル Kotlin Koans
  • Kotlin Guides
    • スタイルガイドの確認にお世話になるところ
  • KotlinのWebフレームワーク Ktor

感想

Kotlinの歴史は、最近Androidプラットフォームの公式言語になった程度だったのですが、v1.0は2016年だという驚きがありました。

Kotlin KoansやGuidesなど、Kotlin入門向けの内容だと思いました。また、Kotlinコミュニティの雰囲気もなんとなく感じれた気がします!

 

Kotlin で改善する Android アプリの品質


KotlinはJVM言語なのでJavaとよく比較されるが、なんとなくKotlinの方がいいと言ってるけど具体的にこういう点が優れているよねというお話

  • Androidアプリ品質とは
    • 速い
    • 落ちない
    • 使いやすい
  • 品質とは何か
    • 外的品質要因
      • スピード、使いやすさなどユーザーが認識できるもの
    • 内的品質要因
      • モジュール性、読みやすさなど、外的品質要因以外
  • Effective Javaの多くの項目が言語仕様で対応している
  • Kotlinを使用することで「明瞭で、正しく、再利用可能で、強固で柔軟性があり、保守可能なプログラムを書く」エッセンスが自然と取り入れられる

感想

具体的にKotlinがどういった点でJavaより優れているか知ることができたのがよかったです。スライドを見てもらうと分かると思うのですが、Effective Javaの項目を一つ一つ丁寧に解説されていたのも勉強になりました。

Kotlinアプリのリファクタリングポイント

  • Gradle Kotlin DSL
    • Groovyよく分からない。Kotlinで書きたい。
    • 知っている言語で書くことによってメンテナンス性が向上する
  • 重複した処理
    • 拡張関数が便利 <= わかる
      • 公式が使いそうな命名はしない
    • 乱用には注意
  • Collection
    • Listはimutableとは言い切れない
    • 2つのリストを同時に使い場合は .zip
    • 変換 .mapNotNull
    • N個づつに分割 .withIndex, groupBy
    • 否定はほとんど書き換え可能
  • スコープ関数
    • 処理をまとめることができる
    • ローカル変数が優先されるので注意
    • let/elvis は if/else と等価ではない
  • data class
    • ありえない状態を考慮したくない
      • sealed class, Either, Pair

感想

Kotlinのリファクタポイント、様々な気付きがありました。今まで、Listはイミュータブルだと思ってた。。(基本的にはそう)

data class も、簡単なモデルだと非常に便利ですが、巨大なモデルになると注意が必要になってきますね。全体的に、すぐ使える知見が詰まっていたと思います。

Kotlin linter

  • Linterの使い方や特徴
  • Linterの小スタムルールを作る
  • Linterとは怪しいとこにフラグを立てるプログラム
  • ktlint
    • gradle plugin(ktlint-gradle, kotlinter-gradle)
  • detekt
    • 高機能
    • configファイルで個々にルールの有効を変更可
    • visitは複数のメソッドがある
    • カスタムルールでフォーマットできる
  • android-lint
    • xml, java, kotlin をカバー
    • カスタムルールは googlesamples

感想

はじめて lint の世界を覗いた気がします。IDEなどでいつもオレンジ文字を出してくれるやつはこうやって解析して動いているんだなと知ることができました。

Kotlin コルーチンを理解しよう

  • サブルーチン: 親子
  • コルーチン: お互い対等
  • 一時停止可能な計算インスタンス
  • スレッドに似ているが特定のスレッドに束縛されない
  • 継続状況を容易にかける
  • 継続条件が増えても .await() なのでネストが深くならない
  • どうやって実現してるの?
    • Kotlinで動くならJavaで動くはず
    • コルーチンをステートマシーンにする
    • 中断と再開を状態遷移と見立てる
    • suspend修飾子: コンパイル時に自動的に継続オブジェクト引数が増える
    • suspendにはいくつか拡張関数がある
    • コルーチンビルダー: launch, asyncとか
    • 実行スレッドをコントロールできる
    • launch関数
    • 結果を持たない
    • 開始の開始も変えれる
    • 親jobを渡すことで一斉にcancelとかもできる
    • async 値を返す
    • 例外はlaunchの中でcatchする
    • await(), await() で並列化
    • リトライ: repeat(3) { return@repeat }
  • android-coroutines
    • onActivityResult, PermissionRequest とかあるよ

感想

Kotlin coroutines はよく使っているのですが、イメージとして「謎技術でいい感じにしてくれるやつ」としか思っていなかった。KotlinはJVM言語だからJavaでも書けるよね というアプローチはとてもわかり易かった!Kotlin coroutines は「ステートマシーンの考え方で状態遷移させてるんだよ」って言えるようになりました。

ピンポイントな技術的な話で非常に面白かった。

How to Kontribute (v4 JP)

スライド

こちらはコントリビュートの具体的な手順の説明だったので要約を見るよりスライド↑を見たほうが分かりやすいと思います。(なので要約はナイデス)

感想

発表のプロだと思わせるようなプレゼンでした。(どうすればあんなスムーズに進めれるんだ…)個人的には、初心者から始めやすいチケットが紹介されていたのが知見としてありました。JDKのバージョン4つもいるんですね…

まとめ

こういった技術カンファレンスに参加するのは初めてだったのでとても勉強になりました!特に、コルーチンの話は本当によかった。趣味やインターンでKotlin好きと言えるレベルで書いてはいるのですが、まだまだ知らないことも多いのだと感じることができました。

積極的にKotlinコミュニティに関わっていきたいですね!

できたてサーバー 1.12.1 World of Color Update

できたてサーバー(猫)のバージョンをSpigot 1.12.1にアップデートしました。

それに伴い、幾つかの変更点がありますのでお知らせいたします。

新要素

  • Minecraft 1.11~1.12.1で追加された要素
  • ShopChest (出店プラグイン)

廃止

  • ChestShop (バージョン非対応のため)

 

不具合等を発見した際は当サーバーの公式フォーラムをご利用下さい。

また、後方互換のため、1.9.x以上のクライアントからもプレイ可能ですが、一部の新要素が利用できない可能性があります。ご了承ください。

Dynmapにおけるセキュリティホールについて

Minecraftサーバーでは有名なDynmapですが、アクセス権に関するセキュリティホールがあり、当サーバーでも該当していたので報告します。

DynmapでMySQLを使用している場合、「web/standalone/MySQL_config.php」にSQLサーバーにアクセスするために必要なデータが記述されます。

これには、MySQLサーバーの「ホスト、ポート、ユーザーID、パスワードなど」が含まれており、すべて平文で読み取ることが可能です。

dynmap_mysql_config

 

公式ドキュメントには、導入に関してこのようなファイルが生成されるという記述がなく、挙句の果てには、「standalone」フォルダにフルアクセス権限を与えるトラブルシューティングが載っています。。。

 

このセキュリティホールは、非常に危険で、該当ポートが開いている場合、悪意のあるユーザーがMySQLサーバーにアクセスし、DBを弄ることが可能になってしまいます。また、ポートが閉まっている場合でも、パスワードを使いまわしている場合は、他のサービスが攻撃される可能性があります。

DynmapでMySQLを使用している管理者様は必ず確認してください。私がminecraft.jpにあるサーバーリストで確認したところ、いくつものサーバーがMySQL_config.phpを読み取ることが可能な状態でした。

修正方法

重大なセキュリティホールですが、これはアクセス権を適切に設定することで簡単に修正することが可能です。

Linux系の場合は「standalone」フォルダのアクセス権を644に。

Windows系の場合は「standalone」フォルダのアクセス権を全て拒否(項目が多く、必要な権限について詳しくは特定していません。)することでアクセスすることができなくなります。

また、MySQL_config.phpを読み取ることが可能な状態に合致していた場合は、関連するパスワードの変更を強く推奨します。

 

間違い、質問等があればコメントか@ken_kentanにまでお願いします。また、この件は既に開発者に報告済みです。

Super Cube World アップデート v1.3.20

scw_update_v1320

Super Cube World v1.3.20 をリリースしました。

  • Google Play Games Services | Cloud Save に対応
  • Android Nに対応
  • ステージ読み込みスピードを改善

 

Google Play Games Services | Cloud Save に対応

Google Play Games Servicesにログインしている場合、クラウドを介したセーブデータの同期が可能になりました。

起動時にクラウド上のセーブデータと端末のセーブデータを比較し、クリアしているステージレベルが高い方を優先し、上書きします。

 

ステージ読み込みスピードを改善

ステージ読み込みの際、60fpsを保証できるまで待っていたのを50fpsに引き下げました。

EAGLE Educational License(アカデミックライセンス)を入手する方法

EAGLEにアカデミックライセンスが追加されたと情報を耳にしたのでホームページを確認すると、eagle_plans

。。。!、なんと本当にありました。

 

設計できる基板サイズが160*100mmとフリーライセンスより大きく、学生なら取るしかない。

 

ということで、用意されているフォーラムに情報を入れていると、

eagle_form_err

はい。怒られました。どうやらTLDが「.edu」でないとダメなようです。

ただ、ブログのQ&Aには

We have done what Autodesk does for all educational licenses and dropped the cost to $0!  So if you’re a student or a professor at a school or university & using the software for non-commercial applications, you are now entitled to a free copy of EAGLE!

とあるので学生なら取れる!前置きが長くなりましたがここから入手方法です。

セールスに直接メール

サポートにある「[email protected]」に以下のように英語でメールを送ります。

Dear CadSoft

Hi, Im a student of the National University in Japan.

I dont have a .edu email.
But, May I get the Eagle Educational License?

Thanks,
名前

署名

英語弱者で、残念な英文なので適当に書き直して下さい。。

学生だけどアカデミックライセンス欲しいという内容が伝われば大丈夫です。

返信がくるので返信する

しばらくすると、以下のテンプレメールが返ってきます。

Dear Mr 名前!

Thank you for your request for the EAGLE educational license! We are now a part of Autodesk and per policy are pleased to offer free educational licenses to students and accredited educational institutions.

To request your license, please provide us with the following information so I can register and send your license.

First Name:
Last Name:
School Name:
Department:
Title:
Address:
Address:
City:
State:
Country:
Email:
Contact Number:
Postal Code:

各項目を埋めるのですが、おおまかには

First Name 名
Last Name 姓
School Name 学校名
Department 学部or専攻
Title → Student
Contact Number +81電話番号
Postal Code 郵便番号

です。

CadSoft Vertriebからメールがくる

PDFが添付されたメールが来るので、そのPDFのリンクを踏みます。

eagle_pdf

インストールコードのキーファイルをダウンロード

リンクを踏むと

eagle_l_agree

このようなページに飛ぶので、「I agree」します。

eagle_l_code

 

すると、インストールコードを教えてくれるので、↑の黒塗りのコードをコピーして保存して下さい。

次のページでkeyファイルをダウンロードします。(スクショ撮り忘れました)

Eagleのライセンスをあてる

eagle_l_accept

あとは、上記のようにライセンスキーとコードを入れると認証されます。

 

やったね!

eagle_l

できたてサーバー 1.9 Combat Update

1.9_update

できたてサーバー(猫)のバージョンをSpigot 1.9.4にアップデートしました。

それに伴い、幾つかの変更点がありますのでお知らせいたします。

新要素

  • Minecraft 1.9-1.9.4で追加された要素
  • 資源ジ・エンドを追加
  • 資源ジ・エンドを毎日0時00分に自動再生成(NekoTheEnd)

廃止

  • CokkieMonsterプラグイン(Mobs討伐報酬をJobsのみに統一)
  • NTheEndAgainプラグイン(既存ジ・エンドは再生成を廃止し、新規に資源ジ・エンドを設置)
  • Minecraft 1.8.x系からのアクセス互換

 

不具合等を発見した際は当サーバーの公式フォーラムをご利用下さい。

「重要」 できたてサーバーのサーバートラブルについて

日々、マインクラフトサーバーであるできたてサーバー(猫)をご利用いただきありがとうございます。

2016年5月27日、午後9時56分、復旧が完了しました

2016年5月23日、0時45分ごろサーバーのハードトラブルにより、現在すべてのクライアントからアクセスが行えません

サーバーのハード的トラブルについては、現在全力で解決しています。ですが、復旧には早くて数日かかる予定です。

この度は、多大なご迷惑をおかけして申し訳ございません。進展があり次第、このページで告知させていただきます。

 

  • 更新

2016年5月23日、1時10分 取り換えパーツを注文(24日着予定)
2016年5月25日、0時01分 ハードダメージが想像以上に深刻なことが判明し、更に取り替えパーツを発注

Androidゲーム「Super Cube World」をリリースしました

春休みでゲームを開発しリリースするという目標を立てていたのでそれがようやく達成できました。

Super Cube Worldをダウンロード

Androidで動作するUnityエンジンを使用したアーケードゲームです。

SS1

 

前作の「Super Cube 3D」では技術不足のため実現できなかった様々な要素を実装しました。

たとえば、回転する敵や

SS2

 

どこかで見たことがある上から落ちてくる敵。

SS3

 

その他に、一番のお気に入りのジャンプブロックetc…

SS4

 

プログラムを軽量化し、リアルタイムシャドウを動かしたまま旧端末で60FPSを出すことに成功しました。(前作では重すぎてリアルタイムシャドウを断念)

また、アプリサイズも90MBオーバーから27MB(ver1.0.0)を達成。スマホにやさしいアプリになりました。

フィードバックやレビュー等、よろしくお願いします。