batchのブログ

知見の備忘録

Sansanのモバイルアプリ開発1Dayインターンシップに参加してきた

タイトルにあるように,Sansanさんのモバイル開発の1Dayインターンシップに参加してきました.


集まったのは6名で4名がiOS,僕を含めた2名がAndroidというような感じでした.


開発だけでなく,最初にSansanがどのような会社なのかという説明を結構詳しくしていただき,今までなんとなく「物理媒体の名刺を便利に管理するためのサービスやってんだろうなあ」という感じでした.


たしかにやっていることはそんな感じで間違ってはいないのですが,Sansanさんは「出会いからイノベーションを生み出す」ということを目指してビジネスをしている会社です.


そして,イノベーションがどう起こるかというと,やはりビジネスの世界から今までAppleだったりGoogleだったりがイノベーションを起こして世界を変えてきたわけです.


AppleだったりGoogleは,もともとスティーブ・ジョブズスティーブ・ウォズニアックというような感じで2人の人が起業して始まっていることが多いです.


そしてその2人の出会いは共通の知人からの紹介だったりととても偶発性の高いものが多いのだそう.


ということは,そのビジネスの世界での人と人のネットワークをいい感じにマッピングしたりしてまとめられたら,これからイノベーションを生み出すであろうタックの生成を今までは偶発的なものでしかなかったものをいかに必然的なものにできるかというところに繋がる.


それで,ビジネスシーンで人と人が関わり合うきっかけになるのは殆どの場合,名刺交換である.


というところからSansanさんがやっているサービスは名刺を取り扱ったものが多いというわけです.


めちゃめちゃ奥が深くてここまでで,このインターンシップ参加してよかったと思いました.



自分もなぜその企業がその事業をする必要があって,その事業を世の中に展開することでどれくらいの人をハッピーできるかというところはすごい気にして企業を見ていたので,その部分でいうとSansanさんは事業に対しても熱い思いがある人がおおいイメージでみんなで絶対成し遂げる使命感みたいのも感じられて自分の中ではすごいいい会社だなと思いました.





あとは,司会の人事の方が言っていたことがすごい印象的だったのでメモ.




企業選びをするとき,その企業の福利厚生だったり社内制度を「それは成果を生み出すためのものであるかどうか」という視点で見るといいよということでした.


僕の解釈では,技術カンファレンスに行く費用だったり,技術系の資料を購入する費用を会社が負担してくれるという制度は,いかに新しい技術をキャッチアップして自分たちのプロダクトにいい感じに組み込められるかにつながると思います.これは,新しい技術はどんどん組み込んでいこうということではなく,新しい技術の中でも自分たちのつくっているプロダクトと組み合わせるとパフォーマンスがあがったり,成果を生み出せるものに繋がると思うので,それは成果を生み出すためのものであるという解釈です.


しかし,たとえば社内にベッドがあっていつでも休憩しますとか(本当にあるかはわからないし適当です)は,今までの自分は「休めていいな,最高じゃん」とかすぐ思っちゃうタイプでしたが,それが成果を生み出すためのものであるかどうかと言われれば微妙な気がします.たしかに,よく寝てから仕事をすればだらだら眠いまま仕事をするよりは成果上がりそうな気もしますが,さっきの技術系の費用を負担してくれるという制度と比べるとちょっと違う感じもします.


そういう感じでその会社の社内制度が良さげなのかどうかというのは,今後就活する中で一つの指標として見ていこうかなと思えたのでここもこのインターンシップに参加してよかったなというところです.


実際にやって学んだことについては,自分で解釈して整理して説明できるようにしたいと思います.

あんざいゆき氏講演!Androidエンジニアの成長戦略【Caraquri TechNight #5】に参加してきた

あんざいゆき氏講演!Androidエンジニアの成長戦略【Caraquri TechNight #5】に参加してきました.
caraquri.connpass.com


あんざいゆきさんは,AndroidエンジニアとしてGDE(Google Developer Expert)に認定されている日本には2人しかいないうちの1人でとてもすごい方です.
google-developers.appspot.com


このブログでは僕の印象に残ったものをメモ程度に残そうと思います.
しっかりとした記事はほりすくんのをご覧ください.よくまとまっています.
kurutabrog.hatenablog.com


この講演では,Androidのことのみならず,英語もしっかり勉強しようねだったり,継続は力なりだからとりあえず続けることを頑張ろうだったり,未来の自分のためにOUTPUTしてこうとかだったり,色々刺激がもらえる講演でした.


Androidに関しては,AndroidAndroidで学ぶことがたくさんあるからAndroidの中でも,UIに興味あるからそこ攻めるとか,設計好きだからそこ極めるとか,得意分野つくるといいよという話があり,僕はもともとAndroidの開発に興味を持ったきっかけが「Material Designなんかいいな」だったし,今まで作ったアプリも結局UI凝ったものを作っていたのでこれからもUIとかその辺にフォーカスを当てて詳しくなっていこうと思っています.

もちろんMVVMとかDaggerとかそのへんも最低限知識と技術力はつけようと思っています.


それと,講演で一番共感できて印象に残ったのはOUTPUTについてですね.

僕もあんざいさんと全く同じことを考えていて今こうやってブログを書いたりしています.

あんざいさんが言っていたのは,未来の自分のためにブログを書いたりOUTPUTしよう.そのときに他人の反応は期待せずに,たとえばブログを書いたらPV数気にしたり,アプリを公開したらDL数気にしたり評価気にしたりはしないでおこう,全ては自分のため.というような話をしていて本当に共感しました.

自分もブログを書きたいなとか思っていましたが,他人が読むようなことを考えると綺麗な文章を書こうとしてなかなか手が進まずOUTPUTできていませんでしたが,他人が読んだりすることは二の次でブログ書いたり,ポートフォリオ作って公開したり,色んなイベント参加しようと思ったりと今半年くらい続いています.


東京にインターンシップで来ていて,いろいろなイベントに参加すると「OUTPUTは大切」ということに行き着く話を何度も聞くのでやっぱり行動したりするOUTPUTは大切だし,これからも絶対続けていこうと思っています.

そして,あんざいさんが今回の講演でAndroidを学習する上でのおすすめの本をたくさん教えてくれたので,気になるものから手を出して読んで学習していこうと思います.

Kotlin Fest2019に参加してきた

f:id:batch08:20190829192602p:plain

今回は完全に未来の自分のための備忘録.


初めてこれだけ大きなカンファレンスに参加してきました.


色々な企業さんがブースを出していてプロダクトを触れたり,色々お話を聞けたり本当に楽しかったです.


ぶっちゃけ,セッションのほとんどは恐らく自分の事前知識が足りず,内容は理解できなかったです.


また来年も参加してどれだけ理解できるようになっているかが今から楽しみだし,参加して理解して自分の力にできるように頑張っていこうと思います.


本当にみんな気軽にお声をかけてくださったり,学生も気軽に話せて,同い年なのにすごい技術力がある学生もいてとても刺激になった.


次はぜひ,DroidKaigiに参加したい.

CA Tech Dojo Androidアプリ(Kotlin)編に参加してきた

f:id:batch08:20190817234145p:plain

タイトルにある通り,8/5~8/16までCyberAgentさんのサマーインターンに参加していたため,最近ブログ更新が滞っておりました.


まじで最高だった.



絶対この先忘れられないというか,忘れることが難しいくらいの笑いあり涙ありのエモいインターンだった.


自分のための備忘録としてはもちろん,Androidわからないなりに自分はこうやったみたいなことをOUTPUTとして残そうと思います.単純にOUTPUTしないで自分の中で本インターンシップの経験をINPUTだけで終わらせて,後で「なにしたんだっけな」と思い出せないと辛いしもったいないと思いました.

このインターンシップを,この素敵な会社を少しでも多くの人に知ってほしいという気持ちも込めて書きます.



文字数が1万文字を超えてしまいすごい量の記事になってしまいましたが,自分がこのインターンでやったこと,感じたことなどはできるだけ全て書いたつもりです.
量も量なので,興味のある方だけ読んでいただければと思います.こんな人もいるんだな程度に.



序論-インターンシップに参加するまでの経緯-

インターンシップに申し込むまでの経緯をここでは書きます.

なぜこの企業にインターンシップを申し込んだか

なぜこの企業のインターンシップに申し込んだかという理由は,数多くの周りの技術力がある優秀な先輩方がCyberAgentさんに入社していたため,ずっとどんなところだろうと気になっていました.
また,AbemaTVを始め数多くの有名なプロダクトを生み出しているあんな会社でインターンできたらやべえなという憧れみたいなのもありました.

個人的な話でいうと,今年の12月で終了してしまうAmeba Piggは中学時代に狂ったように友達とやっていました.学校終わった後も「じゃあPiggでね!」みたいな感じが当たり前の時代でした.Piggで友達と話したり当時付き合っていた彼女と部屋に鍵をかけてイチャイチャ2人で話していたりと青春時代に大変お世話になったサービスでした.そんなこともあり,思い入れ深い企業でもありました.

なぜCyberAgentから用意されているインターンシップの中からTech Dojo Androidアプリ(Kotlin)編を選んだか

僕は今まで,Processingから始まり,C言語Java,Swift,JavaScript,Goなど様々な技術を触ってきました.故に,「得意な技術はなんですか?」と聞かれた時に,自信を持って「これです!」と言えるものがなく,就活までにはそれをつくりたいとずっと思っていました.

そこで,先日参加したハッカソンでFlutterでアプリを作り,Material Designに惹かれて自分の興味が出てきたAndroidアプリ開発を人材不足してるらしいし,今後はやっていこうかな・・・?と思ってすこし触っているところでした.



そこで学内で行われたイベントや自分で調べて本インターンシップの存在を知り
www.cyberagent.co.jp



募集要項を確認
f:id:batch08:20190817234217p:plain







募集対象を見て

f:id:batch08:20190817234536p:plain







これは行くしかないと思いました.




ちょうど,申し込みをするくらいの時期に自分の中で,

  • 毎日GitHubに草生やそう
  • 人が読むということは二の次で,技術的にもなんでもいいから後で自分が振り返れるようにまずは備忘録としてどんどんブログ書いてこう

などしていて,かなり自ら行動するOUTPUTを意識して積極的にやっている時期で,本インターンシップも,「別にお金かかるわけじゃないし申し込みだけでもするか」「CyberAgentとか周りの優秀な先輩も行ってて自分なんかがいくとこじゃなさそうだけど学生のうちにそういうとこ行ってボコスカにやられて挫折を味わっとこう」という気持ちからOUTPUTとして行動しようと思い,申し込みました.



きっと以前のままの僕だと「CyberAgentかあ,絶対技術ごりごりで自分が関わるような世界じゃない,やめとこう」とか思って申し込んでなかったと思います.

選考について

選考はまず,ESを出して面接を受けて合格という流れでした.
先程も言ったとおり,OUTPUTを積極的にやっていこうと思っている時期でESにはブログのURLも載せ,面接では人事の方(僕らのアイドルななさん(@utsu_nana))が実際にブログに目を通して下さっていて,「CAもそういう自分からアウトプットしていく文化大切にしている会社ですごい合っていると思いますよ」と言われてその場で合格を頂いて参加するという流れになりました.

ほんとにOUTPUTは大切.INPUTだけでは周りの現実世界は何も変わらない.
実際本インターンシップもOUTPUTして他の人に見えるようなことをしていなかったら受かってなかったと今でも思っています.



本編-インターンシップでやってきたこと-

インターンシップでは,初日に「こういうアプリをこのインターンではつくりますよ」というような課題を与えられて初日から開発がスタートするというものでした.

参加したのは,16人.


f:id:batch08:20190818172255j:plain
最終発表後の様子



最初は緊張で全く話さなかったメンバーでしたが,今となってはみんな友達以上の関係です.僕はそう思っています.
たった2週間の間だけ一緒にいたメンバーでしたが,今後忘れることは絶対にないです.



インターンシップは4人ごとにテーブルが分けられて,それぞれのテーブルに1人ずつメンターさんがつくという感じでした.


僕がいたテーブルを担当したメンターさんはぐみお(@gumioji)さん.19卒でCyberAgentに入社した方で,歳も近く本当に最高のメンターさんでした.
接している感じ全く新卒感がなく,尊敬できる最高のメンターさんでした.


テーブルによってまちまちでしたが,メンターさんは常にいるというわけではなく,業務の合間に数時間程度来て下さり,わからないことがあったら質問できるという感じでした.



実際に与えられた課題はこんな感じ

  • 自分の情報(名前,GitHubアカウント,Twitterアカウント)を入力する画面があって自分の情報を含んだQRを発行する
  • 他人のQRを読み取って,リストに追加して見れるようにする.このとき外部のQRコードリーダーアプリから自分のアプリを呼び出すようにする
  • リストには読み取った情報を表示して,何かしらの方法で他人のGitHubTwitterのページにWebViewで表示できるようにする

最終的なOUTPUTとして,初めて真面目に作ったAndroidアプリで恥ずかしい気持ちもあるのですが,作ったものを特別に見せたいと思います.



テーマはCyberAgent



myapp



アプリアイコンはメンターのぐみおさんのアイコンに.
基本的な色もCyberAgentのロゴの色コードを抽出して使い,起動画面やリスト表示などにAbemaくんを多用しました.
テーマでも言ったCyberAgentはそこにとどまらず,上のTabLayout,リスト表示のRecyclerViewのアニメーションはそれぞれ,CyberAgentで現在も活躍されているogaclejapanさん,wasabeefさんがつくったライブラリを用いてテーマであるCyberAgentを実現しました.
github.com
github.com



個人的に,RecyclerViewのitemにCardViewを使ったあたりがかわいいUIになってお気に入りです.自分の情報を入力するEditTextの部分は自分がもとから好きで興味があったMaterial Designを適用してhintとerrorをいい感じに表示するようにしたとこも気に入ってるところ.

同じライブラリや,同じアニメーションを使っている人が他に誰もいなかったのでアイデンティティを出せたかなと思っています.



インターンの詳細な内容

ここからは後で自分が見返した時に,「あの時の自分そんなことしてたんやなあ」と思い出したいので,インターンシップでやったことを技術的な実装のことや,印象に残ったことなどを時系列順に詳細を書きます.

1日目

どっきどきでAbema Towersへ.
最初はみんな緊張していて全然弾けた感じはありませんでした.
課題が発表されてからはゴリゴリ開発を始めました.
基本的なAndroid Studioの使い方,Activityの遷移の仕方,EditTextの使い方などはインターンシップ前に予習しており,初日は特につまづきもしなかったので他の人ともあまり話さずゴリゴリ開発していました.

このときから周りでちらほらFragmentというワードが出てたりしたのですが,この時僕はまだちょろっと触ったことある程度であまり良くわかっていなく,いきなりそこに手を出してずっと動くものが手元にない状態が起きるのが不安に思ったのでまずはActivityから始めることに.
あとで時間があればFragmentをしっかり調べて移行しようと考えていました.

この自分自身のレベルを把握して,できるところから手を出しステップアップする工程を選択したのが最終的にすごい評価されて良かった.

夜は,たまたまエレベーターで会ったインターン生2人とご飯に行って打ち解けた.
2人とも文系大学にいる人で今年4月からとか半年前くらいからプログラミング自体を始めて,Javaを触った流れでAndroid始めたらしい.「プログラミングはほんとゲームみたいで楽しいよなあ」とか言っててなんかプログラミング始めた4年前を思い出して新鮮な気持ちにもなりました.いい刺激でした.

2日目

この日も,もくもく開発してた.
ランチは11Fの食堂でうつわに入ればもりもり入れられるカレー食べました.めちゃめちゃ美味しかった.それと,同じ階にローソンがあって東京の暑いところで外でなくてもコンビニ行けるのやばと純粋に思いました.周りは一面ガラスで外が見えて開放的な空間でうちの大学みたいでいいなあと思いました.

3日目

この辺で課題で出された仕様を半分くらい終えた段階で,他にこんな感じにしたいなあという課題で出された以外のことがポンポン浮かんだので忘れないようにissueに書いて優先順位つけて管理しようと思ってやり始めました.
これも最終的にメンターさんやエンジニアの方にめちゃめちゃ評価されてやってよかった.
この日のランチは僕らのアイドル人事のななさんと外食して,めちゃめちゃオシャレなお店でパスタ頂きました.美味しかった.

4日目

ここらへんでかなりインターン生同士は打ち解けてました.もう既にインターン生13人くらいで飲み会やったりして平日で明日もあるのに二次会とかまでして飲んだりしてました.
実装面では周りでちらほらMVVMとかっていう言葉が飛び交っていて,Dojoでそんな単語が出てくると思ってなかったので,結構ビビりました.
名前聞いたことあるくらいしかなかった自分にはレベル高いなあしか思ってませんでした.
一応気になって理解できるように調べ始めはしました.
この日のランチは実際にCAでAndroidエンジニアとして働いているogaclejapanさんを始め強いエンジニアの方とお話ししながら食べました.
このインターンシップの課題を考えたのもogaclejapanさんだそう.

5日目

このへんで出された課題の仕様が完成し,あとはActivityでやっているとこを全部Fragmentに置き換えようかなとかRecyclerViewを使ったリスト表示が結構ダサかったのでCardView使っていい感じにしたいとか色々issueに書き起こしてました.
本当はDBの非同期処理をCoroutines使ってやりたいなとか,かなり汚いコードを書いてたのは自分でもわかってたのでMVVMとかにいい感じに適用させたいなとかもissueに書いてたのですが,結局調べるだけ調べて概念は理解して実装はインターン後にやることにしました.

この日のランチは同じテーブルの4人とメンターのぐみおさんと行きました.他のテーブルのメンバーもメンターさんとそれぞれランチに行っていて,ぐみおさんが「あのテーブルはいいとこいっとるな」とか言ってましたが,僕らのテーブルが恐らく1番お値段的にも内容的にもいいとこ行ってましたよ…

めちゃめちゃおいしかったです。連れて行ってくれてありがとうございました。


休日の間

インターン中の休日は祝日もあり,三連休ありました.
ここで色々実装しようかなとか考えていたのですが,ほとんど何も進みませんでした.
ここで初めて,実際に会社に行って同じくらいのレベルのみんなと教え合ったり集中して開発していた環境が最高の環境だったことに気づきました.
1人での開発は全然集中できず,ただ天気の子見に行ったり休日満喫して終わってしまいました.

6日目

RecyclerViewをいい感じにしようとしていて,CardViewをRecyclerViewに入れようと色々やっていました.
休日の間にxmlの今までよくわかっていなかったConstraintLayout,LinearLayout,FrameLayoutなどの意味を完全に理解したので,CardViewの中のComponentは全てxmlを直接書いてLinearLayout使って仕上げました.ここでもAbemaくんを使ってCyberAgent感を出しました.周りのみんながGitHubAPI叩いてアイコン画像を取ってきて設定していて自分もやろうと思ったのですが,周りと被るのが嫌だなと思ったのと充分満足いくかわいいデザインに仕上がっていたのでこのままでいきました.
LinearLayoutで作ったCardViewのレイアウトはこんな感じ

f:id:batch08:20190818010259p:plain
f:id:batch08:20190818010312p:plain

たしか,このへんでMVVMのことやDataBindingのこと,LiveDataのことCoroutinesのことなどを調べて理解しようとしていて公式ドキュメントを漁って読んでたのですが全然色々理解できず,時間だけを溶かしてしまった感じがしてちょっと病んでました….

7日目

ActivityをFragment化しようと思って色々調べてました.
周りのみんなは結構Fragment使っていて,BottomNavigationViewを使っているイメージだったので自分は違う感じで行きたいなと思い,TabLayoutを使うことにしました.
そこで調べていると,先日ランチでお話したogaclejapanさんが作ったSmartTabLayoutを見つけて「絶対これ使って最終日の発表で本人の前で使いましたって言いたい」と思いました.
最終日の懇親会でも本人とお話したのですが,数年メンテナンスがされていなく,UsageもJavaで書かれていて自分にとっては使うのが結構しんどかったです.自分のアプリに組み込むまでも恐らくなんだかんだ6時間以上くらいは迷走し,リポジトリを舐め回すように眺めて試行錯誤の末,自分のアプリに組み込むことができました.
でも本当は,TabのところにTab名だけでなく,アイコンも入れたかったのですが自分には高度すぎて断念しました…


お昼は新卒のAndroidエンジニアの方とランチをしたのですが,印象に残ったのがマッチングエージェントでタップル誕生を開発しているエンジニアの方でした.
なぜマッチングサービスの部署に行こうと思ったのか聞いたころ,自分が作ったサービスで人が出会って結婚まで行ったらすごい嬉しいし夢ですみたいなことを言っていて思っていた数十倍素敵な理由が返ってきてすごい感動しました.
僕はマッチングサービス系は「出会い系アプリ」というイメージが凄く強く,なにか一歩距離を置いてしまっている感じがあってアプリもインストールしたことがなかったのですが,「出会うはずのなかった人同士を繋ぎ合わせるアプリ」へと印象が変わってUI面でも勉強したいと思いインストールしちゃいました.
みんなも是非使ってみてください.素敵なアプリです.
tapple.me



実装の話に戻ると,メンターのぐみおさんが「EditTextのとこデフォルトだとダサいよな」という話をしていて自分がもとから興味があったMaterial Designを使ったEditTextの実装方法があることを教えてくれたので夜にホテルでそれを実装しました.これもxmlいじるだけですぐにできるかなと思ったのですが,Qiitaを見てそのままやるだけでは実装できず,ごちゃごちゃxmlファイルやkotlinファイルいじって試した末なんとかできました.
あれはほんとにいちいちEditTextの上とかに何を入力するか示すTextViewを表示しなくてもhintがいい感じにアニメーションで動いて表示できるのでレイアウトがシンプルになってとても良いです.

8日目
このあたりでFragment化ができて,RecyclerViewにもCardViewをいい感じに適用できていたのですが,RecyclerViewをスクロールしたときに動きが単調で,あたかも最初からセットされていた画像が流れてくるだけみたいでイマイチだなと思っていたのでスクロールしたときのアニメーションをつけたいなと考えていました.
自分で調べてみたものの,実装方法がよくわからなかったのでメンターのぐみおさんに聞いたみたところ,CyberAgentで働いているwasabeefさんが作ったrecyclerview-animatorsを教えてもらい,このときに「テーマはCyberAgentにして,UIも使うライブラリもCyberAgent感をもりもりに詰め込んで最後発表しよう」と決断しました.wasabeefさんのライブラリもREADMEが全部英語で書かれており,理解に苦しみましたがなんとか自分のアプリに組み込めてogaclejapanさんのライブラリも含め,CyberAgentをもりもりに詰め込むことができました.wasabeefさんのライブラリは最近つくられたもので,Kotlinで書かれていたのでわかりやすかったです.

この日のランチは人事と外食part2で,ごってぃ(@masagotty)さんと一緒にランチしました.
ななさんによると,色んな学生をそこに連れて行っているというおすすめのお店らしく,肉とチーズが美味しいお店でした.
そこで,牛カツカレーとただのチーズケーキではない(めっちゃおしゃれな名前してたけど横文字すぎて忘れてしまった…)を食べさせていただきました.どちらもおいしかったですが,甘党の僕にはチーズケーキが最高に美味しかったです.ありがとうございました.

最終日

この日は最終発表とその資料作りで時間を使ったのでほとんどなにも開発はできませんでした.実装する時間は2時間ほどあったのですが.アプリのアイコンの変え方がわからずずっと苦戦して時間が吸い取られました.どうしてもアプリのアイコンをぐみおさんのアイコンにしたかった…
でも最後には変え方がわかって変えられてよかったです.

そして最終発表は,ライブラリこういうの使いましたって書くスライドでogaclejapanさんが聞く前でogaclejapanさんのSmartTabLayout使いましたって言ったときに会場で少しウケてアピールして良かったなと思いました.


そして最終発表が終わった後,優秀だった人には賞が渡されることになっており1人優秀賞に選ばれました.選ばれた彼は1日目の夜に一緒にご飯に行った2人のうちの1人で,所属が文系の学部で半年程前からプログラミング自体を始めたのにも関わらず,設計を意識して開発していたりモダンなライブラリをふんだんに使っていて本当にすごいと思いました.成長スピードが半端じゃない.僕も見習わないと.

その発表が終わった後,優秀賞とは別にピックアップしたい人がいるということで特別賞が用意され,見事それに選ばれてしまいました.
周りは今ままでSwiftがっつりやってきた人や,サーバーサイドがっつりやってきた人などすごい人ばかりで,全く自分がなにか賞をもらうほどに浮き出ていたとは思っていなかったので本当に驚きました.
大学に入ってから個人でなにか賞をもらうような人前で目立つことがなかったので,本当にいい思い出となり自分の自信にも今はなっています.

f:id:batch08:20190818223857j:plain
発表後の懇親会の様子


インターンシップを終えた今,自分が考えたこと

まず,インターン中の実装は設計なんか考えておらず,とてつもなく汚いコードを書いて,Kotlinの文法もわかっていない状態でした.
そんな自分が本インターンシップに参加した16人の中で特別賞に選ばれた理由としてメンターのぐみおさんがおっしゃっていたこととしては,「GitHubでissueをたててその中で優先順位をつけて自分がやるべきことをリスト化した上で順番に実装していく進め方がとても良かった」「最初から自分のレベルを把握していきなりFragmentから実装するのではなく,Activityから入りレベルを上げるようにFragmentに変えていく流れが良かった」「これからも同じ流れで開発続けると伸びそう」とのことでした.


僕は,日常的に読みたいビジネス書を読んだり,研究したり,開発したり,英語勉強しようかなとか思ったり,見たい映画見たりなど,やりたいことがたくさんあり,それを忘れてしまう事も多いです.そこで,普段からTrelloでTodo管理をする癖があり,それに似たような感覚で今回やりたいことを忘れないようにissueに起こしただけなので,自分の中では評価されるようなことをした実感は全くありませんでした.
なので受賞された時は正直,ただissue立ててcloseしてただけでいたってそんな難しいことはしてなかったんだけどなあ…と思っていました.
でも懇親会のときに実際に他のエンジニアの方にも話を聞いたのですが,自分の進め方をOUTPUTとして残しておくことはあとで自分が振り替えれるという意味でも,チーム開発する面では新規メンバーが参入してきたとき,どういう進め方でプロジェクトを進めているのかすぐにわかるという意味でもすごい大切なことらしい.

自分が当たり前だと思ってやったことは,仕事で開発をする上ではすごい大切なことだったということを色んなエンジニアの方と話すことで理解することができました.
インターンを終えて,実は自分は結構重要なことをしてたんだなと思う反面,それが自分の中で当たり前と思ってやったことなのでまだまだ自分にはやれる,伸びしろしかないなと思いました.


インターン中,3連休は先程も書いたとおり,1人ではあまり集中できませんでした.
しかし,連休が明けてからは「CAの人がつくったこのライブラリを絶対使いたい」という気持ちが強かったり,またそれを実装できたりと時間を忘れて開発していました.
大学の周りの優秀な先輩でも同じようなことを言っている人がいて,今までは自分には体感できていないことだったのですが,今回のインターンに参加してみてAndroidアプリ開発が自分にとって時間を忘れてやってしまうような楽しい技術だと気づくことができました.


序論でも書いたようにずっと自信を持って「これが得意です」と言える技術が実際の就活の時までに欲しいと考えているときに本インターンに参加しました.これからは就活の時に「得意な技術はAndroidアプリ開発です」とドヤ顔で言えるように引き続きAndroidアプリ開発を続けて行こうと思っています.

謝辞

インターンシップ全体をまとめてくださった人事のななさん,お世話になりました.
インターン中は開発に専念しつつ,社内見学,作業中にBGMかけたいなど僕らインターン生がしたいと言ったことは全て叶えてくれたと思います.不満はひとつもなかったです.ありがとうございました.今回のインターンでCAさんが恐らく期待している,Androidエンジニアの普及に精一杯応えていきたいと思います.
そして,メンターのぐみおさん.本当に本当に汚いコードだったのにもかかわらず,細かいとこまで見てコードレビューしてくださり,ありがとうございました.また,リポジトリのissueにまで目を通して頂き,結果だけでなく開発の進め方まで見て評価して頂き本当に感動しました.今回褒められた部分は個人の開発であっても継続して癖として続けていきます.

なにより,CyberAgentさん.得意な技術が1つもなく,Tech ChallengeやTech Jobに申し込みをするのをためらっていた僕にここまで成長できるインターンシップを用意して頂きありがとうございました.


最後まで読んでくれた方ありがとうございました.
僕みたいに自分に得意な技術がなかったり,自信を持って言えるような能力がないような学生が実際にインターンシップ申し込んで行動できたりなどしたら大変嬉しく思います.
また,少しでもCyberAgentさんに興味を持ってくれたら今回のインターンシップの恩返しが少しでもできるかなと思うのでそれも嬉しいです.

Ubuntu18.04を入れて最初にやることまとめ

はじめに

最近ライフスタイル系のことばかり書いてましたが,一応エンジニア志望なのでそれっぽいことも記事にしとこうと思います.

先日,なんか重量軽いPC欲しいなあって思っていてなんでもいいから1kg切るPCにLinux

入れて使いたいなあと思っているときに,うちの研究室のボス(担当教員)から教員室に眠っていたVAIO Pro 13を貸して頂きました.

この子,2013年に発売されて少し年季が入っているものの,重量なんと870g!!

この子にUbuntu18.04をWindowsを潰して入れることにし,その過程をまとめたいと思います.

BIOSの起動でつまづいた

VAIOBIOS画面にいくまでは,電源を一回落とし,電源入れ直すときにF3または,F4キーを押しながらするそうですが,どちらもBIOS起動できませんでした.

結論から言うと,VAIO Pro 13のキーボードのFキーが並んでいる上に搭載されている魔法のASSISTボタン.こいつを電源切った状態で押すと勝手に電源が入り,一気にBIOSを起動させることができました.

そこからBIOSの設定をちょっと間違えてなんのOSも起動しないただの870gになりかけましたが,無事Ubuntu18.04入れることができました.

Ubuntu18.04をいれたあとやったことまとめ

魔法のコマンド

$ sudo apt update
$ sudo apt upgrade

まずはzshいれる

$ sudo apt-get update
$ sudo apt-get -y install zsh
$ chsh -s $(which zsh)

起動シェル確認
$ echo $SHELL /usr/bin/zsh とかって表示されればOK

おわり

git入れる

$ sudo apt install git  
 


制作・著作
━━━━━
ⓃⒽⓀ

githubから毎回パスワード聞かれずにリポジトリいじれるようにする

まずcloneしてくるときはhttpsではなくssh接続でするのでGitHubのClone or downloadからClone with SSHを選んでcloneする.
SSH keysを作れと言われるので作る
基本的にはこれ(https://qiita.com/shizuma/items/2b2f873a0034839e47ce
まず移動する
$ cd ~/.ssh
次のコマンドで鍵作る
$ ssh-keygen -t rsa
次にGitHubに作ったキーの中身をアップロードするためにクリップボードにコピーする必要がある.その準備を以下のコマンドでする.(https://qiita.com/Kzno/items/6f2fa98256bdffb0fd43)
$ sudo apt-get install xsel
エイリアスを設定してMacと同じように使えるようにする
.zshrcに追記
alias pbcopy='xsel --clipboard --input'
追記したら, $ source .zshrc で変更を反映しておく.
これで準備ができたので下記のコマンドでクリップボードに鍵の中身をコピー.
$ cat ~/.ssh/id_rsa.pub | pbcopy
これでクリップボードにコピーできたのでGitHubに戻って中身を貼り付ける.
適当に名前をつけて保存したら鍵の設定は終わりで
git configの設定
$ git config --global user.email "自分のメールアドレス"
$ git config --global user.name "自分のユーザ名"
下のコマンドでcloneする
$ git clone git@github.com:自分のユーザ名/cloneしたいリポジトリ名.git
これでpushもpullもcommitもパスワード聞かれずにできるようになった

curl入れる

$ sudo apt install curl

Prenzto入れる

$ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"

$ setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done

ここまででhyper再起動するとprenztoが反映されている

prenztoテーマ見てみる

$ prompt -p

ここからすきなテーマ選んで,
$ prompt テーマ名
で設定できる
 
おわり

powerline fonts入れる

これはなんとなくやった

$ git clone https://github.com/powerline/fonts.git --depth=1

インストール
$ cd fonts
$ ./install.sh

必要ないのでcloneファイル削除
$ cd ..
$ rm -rf fonts

 
 

おわり  
 

hyper入れる

公式サイトからまずアプリダウンロードしてくる

.hyper.jsの設定

152行目のplugins:に'hyper-material-theme'を追記

colorsの下に下記の設定を追記

MaterialTheme: {
        // Set the theme variant,
        // OPTIONS: 'Darker', 'Palenight', ''
        theme: 'Palenight',

        // [Optional] Set the rgba() app background opacity, useful when enableVibrance is true
        // OPTIONS: From 0.1 to 1
        backgroundOpacity: '1.0',

        // [Optional] Set the accent color for the current active tab
        accentColor: '#64FFDA',

        // [Optional] Mac Only. Need restart. Enable the vibrance and blurred background
        // OPTIONS: 'dark', 'ultra-dark', 'bright'
        // NOTE: The backgroundOpacity should be between 0.1 and 0.9 to see the effect.
        vibrancy: 'dark'
 },

hyper plugins

officialにある4つくらいのpluginsはまずいれる 下記の設定はすべて~/.hyper.jspluginsに書く

カレントディレクトリ名と,Gitローカルリポジトリの現在のブランチ名が表示されるpluhins
hyper i hyper-statusline

背景透過
hyper i hyper-opacity
 

テーマ設定

これは.zpreztorcに書く.
116行目あたりのところの
zstyle ':prezto:module:prompt' theme '設定したいテーマ名'
今回は,pureを設定したのでこんな感じになる↓
zstyle ':prezto:module:prompt' theme 'pure'

.zshrcの設定項目

日本語対応
export LANG=ja_JP.UTF-8

lsコマンドの結果色変更 export LSCOLORS=gxfxcxdxbxegedabagacad

補完機能を有効にする

autoload -Uz compinit
compinit

補完で小文字でも大文字にマッチさせる
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

同じコマンドをヒストリに残さない
setopt hist_ignore_all_dups

エイリアス

alias la='ls -a'
alias ll='ls -l'

autosuggestions

$ git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
$ source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh

cdしたあとにlsを実行する

cdls ()
{
    \cd "$@" && ls
}
alias cd="cdls"

最後は $ source ~/.zshrc

Mozcプロパティ

句読点の変更

私は,コンマとピリオドにしたいので変更.デスクトップ右上の入力メソッドのところをクリックしてツール>プロパティをクリックしていき,句読点のとこをコンマとピリオドに変更.

スペースの入力

Markdownとかで改行するときとかいちいち日本語入力のときに全角スペースから半角スペースに変えるのめんどくさかったり,基本的に全角スペースって使う場面私の場合なかったのでさっき開いたMozcプロパティのスペースの入力を半角に変更.

デスクトップの見た目をいい感じにする

おもにTweaksを使って設定していく.
まずは,下記のコマンドを打つ.

$ sudo apt update
$ sudo apt upgarade
$ sudo apt-get install gnome-tweaks

デスクトップ

今回はデスクトップをMateriaというテーマにしていく.
下記のコマンドを打つ.

$ sudo add-apt-repository ppa:dyatlov-igor/materia-theme
$ sudo apt update
$ sudo apt install materia-gtk-theme

そうしたら,Tweaksを開いて外観>アプリケーションから今回は,Materia-dark を選択した.

アイコン

今回はアイコンをPaperというテーマのものにしていく.
ここに書いてあるように,下記のコマンドを打つ.

$ sudo add-apt-repository -u ppa:snwh/ppa
$ sudo apt update
$ sudo apt install paper-icon-theme

そうしたら,Tweaksを開いて,外観>アイコンからPaperを選択するとアイコンが変わる.

Gnome Shellの変更

これれで,タスクバーや通知メニューのテーマも変える.
Gnome Shellの拡張機能を使うため,下記のコマンドをを打つ. $ sudo apt install gnome-shell-extensions
実行したあと,Ubuntuを再起動させる.
そうしたら,Tweaksの拡張機能>User themesのチェックを入れる.
Tweaksを開き直して,外観>GNOME Shellが選択できるようになっているのでMateria-darkを選択する.

番外編

Slack入れる

ここからいれる

Android Studio環境構築

Jetbrains Toolboxを入れる.
そのToolboxからAndroid Studio入れればとても楽.
メモリに余裕のあるPCを使ってたら,Android Studioの設定からメモリの設定のところでメモリ設定Maxにする.あとはお好みでIDEのThemeにMaterial Theme適用するようにplugin入れる.

Python環境構築

LinuxにはPython環境がもとから入っているが,バージョンがちょっと古かったりするのでアップデートしてあげる.
今回はあとで管理が楽なようにpyenvを使った.
pyenvインストール
$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | zsh
こっちのほうがいいかも↓
$ sudo git clone git://github.com/yyuu/pyenv.git ./pyenv
インストールしたら以下の内容を.zshrcに追記

export PATH="/home/<user>/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

忘れず, $ source .zshrc
pyenv導入後,今回は $ pyenv install 3.7.6 した.
$ pyenv install 3.7.6 するとき,zipimport.ZipImportError: can't decompress data; zlib not available とかって怒られることがあるので
$ sudo apt-get install zlib1g-dev をやる.これやった上でもう一度 $pyenv install 3.7.6 やってみると入る.
インストールしたあとは, $ pyenv global 3.7.6 でバージョン適用
ちなみに,2020年2月時点で3.8.0をインストールして実行すると No module named '=ctypes' というエラーが起きる.どうやら,$ sudo apt install libffi-dev で解決できるらしいが自分はそれでもエラーが消えなかったので,今回は3.7.6を入れた.
次にpipのインストール.

$ sudo apt install python-pip
$ sudo apt install python-pip python3-pip

pyenvを使ってpython入れるとpipも勝手に入れてくれる.

LaTeX環境構築

基本的にこの記事を参考にした.
aptの準備

$ sudo apt update
$ sudo apt upgrade

LaTeXのインストール

$ sudo apt install texlive-lang-cjk xdvik-ja evince
$ sudo apt install texlive-fonts-recommended texlive-fonts-extra

VS Codeコンパイルできるようにする.
VS Code拡張機能であるLaTeX Workshopをインストールする.
VS Codeのsetting.jsonに書きを追記
テーマをいい感じにするやつとかも入ってる.

{
    "workbench.colorTheme": "Solarized Dark",
    "editor.wordWrap": "on",
    "workbench.iconTheme": "vscode-icons",
    "editor.fontSize": 13,
    "vsicons.dontShowNewVersionMessage": true,
    "gitlens.advanced.messages": {
        "suppressLineUncommittedWarning": true
    },
    // tex setting
    // 引用:https://gist.github.com/khys/ee50f6891ed1825479ed38ba79fbc896
    "latex-workshop.view.pdf.viewer": "tab",
    "latex-workshop.latex.tools": [
        {
            "command": "ptex2pdf",
            "args": [
                "-l",
                "-i",
                "-ot",
                "-kanji=utf8 -synctex=1 -interaction=nonstopmode -halt-on-error -file-line-error",
                "%DOC%"
            ],
            "name": "Step 1: ptex2pdf"
        },
        {
            "command": "pbibtex",
            "args": [
                "%DOCFILE%",
                "-kanji=utf8"
            ],
            "name": "Step 2: pbibtex"
        },
        {
            "command": "ptex2pdf",
            "args": [
                "-l",
                "-i",
                "-ot",
                "-kanji=utf8 -synctex=1 -interaction=nonstopmode -halt-on-error -file-line-error",
                "%DOC%"
            ],
            "name": "Step 3: ptex2pdf"
        },
        {
            "command": "ptex2pdf",
            "args": [
                "-l",
                "-i",
                "-ot",
                "-kanji=utf8 -synctex=1 -interaction=nonstopmode -halt-on-error -file-line-error",
                "%DOC%"
            ],
            "name": "Step 4: ptex2pdf"
        }
    ],
    "latex-workshop.latex.recipes": [
        {
            "name": "toolchain",
            "tools": [
                "Step 1: ptex2pdf",
                "Step 2: pbibtex",
                "Step 3: ptex2pdf",
                "Step 4: ptex2pdf"
            ]
        }
    ],
}

これでOK.

iPhone8からPixel3に移行した話

はじめに

最近Android開発にハマっている

 

 

しかし,iOS端末しか持っていなかったためAndroid端末が欲しくなりAndroid端末といったらPixelしかないでしょうということでAmazonでポチった.

 

AmazonSoftbankSIMロックされてたものを解除したモデルが6万弱で売られていたのでポチった.

 

ついでにGoogle Storeで5000円ちょいする純正ケースが半額セールみたいなのをしていたのでポチる.

 

 

前からデスクにスマホ立てかけたままワイヤレス充電したら通知来た時いちいちスマホに手を持っていかなくても良くなるなと思っていたため,ついでに9504円という魔法の金額がするGoogle Pixel Stand Whiteもポチる.

 

 

 

届く

 

 

 

iPhoneと比べたメリット・デメリットまとめ(個人的感想)

メリット

  • Google Lensちょっとべんり
  • 指紋センサスワイプで通知表示
  • type Cで充電できる
  • インカメラの広角
  • 夜景撮影モード
  • Google Driveの100GBついてきた
  • 時間,日付,気温,通知がロック中表示できる.Googleカレンダーにある次の予定も表示されるの便利
  • Google Photoに画質劣化しないで画像を保存できるプランがついてくる(1年くらい?)
  • ウィジェトでホームをiPhoneよりも自由にカスタマイズできる
  • YouTube Premium入ってると,YouTubeアプリから移動してもピクチャ・イン・ピクチャ的な感じで動画の画面がホームや他の画面でも重ねて表示される(iPhoneではできない)

デメリット

  • スクロール止めるまでにラグがある(今はあんまり起きない)
  • iPhoneみたいにスワイプで前の画面に戻れない
  • 通知が不安定(な気がする)
  • LINEで複数メッセージ来たとき,最後にきた通知しかロック画面で表示できない
  • 充電の減りが早い(気がする)
  • Pixel Stand置いとくと結構熱くなる
  • 対応しているクレカが少ない
  • 指紋センサの効きが悪い(一発でいくことほぼない)
  • iPhoneみたいにすぐアラーム設定できない
  • 横のベゼルが狭い&本体の画面が丸みを帯びているので,握っていると間違ってディスプレイを誤タッチしてしまうことがある

 

結局

べつにそこまで使いづらいってことがない.

それよりも普段自分がChromeだったりGoogle DriveだったりGoogle製品使うことが多いのでそれをGoogleさんのPixelで使えてるっていう気持ちよさのほうが強く勝っている.

 

要は気持ち.

 

つぎはiPhone8とのカメラ性能の違いについて書こうと思う.

マルチメディア、分散、協調とモバイル(DICOMO2019)シンポジウムに参加してきた

DICOMOとは

毎年7月の上旬に全国各地の温泉地で行われる複数の情報処理学会研究会の主催により合宿形式で行われる集まり.

公式ページでは,

DICOMOシンポジウムは、平成9年度の初開催以来、インターネットを中心とした通信技術から、マルチメディア通信、分散システム、グループウェア、モバイルコンピューティング、ITS、ユビキタス、セキュリティやデジタルコンテンツクリエーションに関する分野の研究について、学術的な研究論文のみならず、事例報告、問題提起などの論文も対象として、活発な議論を行ってきました。

とある.

今年の内容は以下の感じ[公式ページから引用]

f:id:batch08:20190707150039p:plain
DICOMO2019開催要領

私も参加して,論文投稿とセッションで12分のプレゼンをしてきました.

どんな感じだったか

行ってきた感想や感じたことを色々書きたいと思います.

行われていたセッションは大きく私も発表した一般のセッション,デモなどを発表しているセッション,外出して会場周辺の観光などをするアウトドアセッション,2日目の夜に行われるナイトテクニカルセッションなどがありました.

いくつか印象に残ったものを紹介したいと思います.

一般セッション

まず今年は参加者が400名ほどいたみたいで学生から教授,企業の方など大勢の人が参加していました.

なので,3日間とも1セッション3~5発表あるものが8セッション並列で行われていてセッションごとに聞きたい発表のあるセッションに移動するというような感じでした.

セッションは研究会の分野ごとにわかれていて自分と同じ研究分野だったり,興味のある分野を聞きに行く感じでした.

ナイトテクニカルセッション

2日目の夕飯のあと,21時半頃から23時過ぎまで行われたナイトテクニカルセッションでは,毎年イグノーベル賞的な面白い研究発表が行われます.
お菓子などが出ていてワイワイ楽しんで聞く感じでした.

さいご

おそらく,日本の情報処理学会に関係するほぼ全ての研究者が集まっていた大きな学会で私の発表でも様々な教授の方々から質問を受けて貴重な意見をもらえたり,似たような研究をしていた他大学の学生と議論できたりとても貴重ないい機会でした.