金を使う

最高の夏を終えて買った

SQLアンチパターン

SQLアンチパターン

パーフェクトJavaScript (PERFECT SERIES 4)

パーフェクトJavaScript (PERFECT SERIES 4)

パワーボールは来月くらいに買う

はてなインターンという人生最高の夏

mackerel.io

はてなインターン2017に参加しました

はてなインターン応募してくれ!!!というレポート記事です

来るまで

以前

id:cohalz

2年前くらいから某社で動いてるプロダクトのScala(PlayとかLiftとか)に触り始めた感じの人間で,

あとは動いてるものだとこのbotがあって,それ以外にやってきたことはいろんな言語の機能見たりとか,コードのレビューなんかも複数の所でやってたりしてた

はてなインターン自体の応募理由としてははてなブックマーク等は使っていたし,Twitterで前々からフォローしてた人多数がめっちゃ行ってたので行きたいと思ってた

とはいえ今年になるまで応募していなかったのは自身のレベルが足りないと思っていたからで,そんなときに去年に行われた夜の合同説明会に参加して次は応募しようと思った

cdgh.connpass.com

事前課題

そんなこんなで受かったあとはコースごとに指定された事前課題を解いて提出するよう指示が来る

MackerelチームではScalaとJavaScriptが指定されて,どちらもLTSV形式をパースして集計を行うことや,JavaScriptだとDOM操作も使ってテーブル表示・検索などの機能を実装するという課題

これらの実装の他にテストを書くのも課題として含まれていて,言語機能やその言語でのテスト環境を事前に把握することができる課題になっている

JavaScript課題では検索機能の課題は自由に作成してよいという指示が入っていて,好きだったり最新のフレームワークを使うのも可能

なので余裕があればただの課題と思わずに色々工夫までできると良かったと後で気付いた

京都

前半過程

11時から13時まで毎日入れ替わりで社員の方が講義をして,昼休憩が終わった14時から課題を進めるという形式

14時から退社時間の19時まで5時間もあるし課題なんてすぐ終わるだろうと思っていたけれど,満足の行く実装を終えるには時間が足りないくらいだった

何故かと言うと課題は毎日関連があるようにできており,下手な設計・実装をすると次に影響が出てしまうからである

以下講師の方と内容紹介

  • id:stefafafan Scalaによるプログラミングの基礎
    OptionやEither,forやimplicitなど実用で使う部分が中心

  • id:Windymelt Scala によるデータベースプログラミング
    ScalaでDBを扱う際のライブラリの紹介やDB設計,レイヤ化アーキテクチャなど

  • id:motemen ScalaによるWebアプリケーション開発
    Scalatraを用いてURL設計,View,Controller,それに対するテスト追加

  • id:masawada はてな教科書JavaScript編
    ES6中心の言語仕様,DOM,非同期,Ajax,jQuery,フロントエンド設計,NodeJS

  • id:syou6162 Web開発におけるコンピュータサイエンス - 機械学習編
    何故Web開発で機械学習を導入するのか,簡単な例,難しい例でどのように特徴量を決めていくのか

  • id:takuwolog id:akawakami デザイン講義
    課題解決の手順の話やより良く伝えるためにどのような考えをするべきか

  • id:masayoshi インフラ講義
    「インフラ」という大きな括りではなく部分に分けて,何故このサービスはこんな構成/実装になっているのか等

  • AWS講義・ハンズオン
    AWSのサービス紹介と前半過程の初週で作ったWebサービスをAWSを使ってデプロイするまで

  • id:chira_rhythm55 サービス企画
    様々な方法で問題を洗い出し,考えた企画を周りにアピールするためにどのようにやっていくか

というような講義を受けてそれに対応する課題を実装し翌日にレビューを貰う形

課題自体は機械学習で一旦終わり,2週目は提出した課題の直しをする余裕があるようになっている

前半過程の最終日には,今までの課題で作ったWebサービスをさらに拡張し新しく何か機能を追加したものを発表するというイベントがあり,自分はWeb Speech APIを使って音声入力をできるようにした

他の人がレベル高いものを作っている中で5位と言う結果に

上位の人はほんとうにすごい機能追加をしていて,自分ももっと事前に構成を練って設計をしておくと良かったなぁと後悔

後半過程

後半に入ってからはid:ktr_0731と2人でMackerelチームに配属され,
id:itchynyさんがメンターとなって開発を進めていった

2人ペアでチーム配属というのは本当にいいシステムで,二人でAPI設計をした後にサーバサイドとフロントエンドに分かれて機能開発をしたり,
こっちはControllerのテスト書いてるからそっちはModelのテスト書いてほしいみたいなことがどんどんできる

2週間で新しく開発した機能は6つ

  • メタデータの一覧API
  • アラートを閉じた時の通知の強化
  • 最後に共有したチャンネルを保存してセット
  • アラートを監視の種類で絞りこめる
  • アラートで通知したチャンネルを表示
  • グラフ共有でメトリックを指定

リリースブログ記事はこちら mackerel.io mackerel.io

と,個人的にはかなり爆速で機能を開発して,手応えはあったものの最終成果発表は4位と悔しい結果に

他のチームを見てみると

  • ブログチームは画像を選択順に貼り付け,横並び貼り付け,キャプション追加 staff.hatenablog.com
  • 大規模チームは次世代サーバ監視システムとその可視化 developer.hatenastaff.com
  • iOSアプリはクイックブックマーク機能とその後のあわせて読みたい機能の実装 bookmark.hatenastaff.com

とめちゃくちゃ便利になっていて完敗

とはいえ社内でもMackerelを触っている人から「めちゃくちゃ便利になった!」との声を頂いて,めちゃくちゃ嬉しかった

自分で書いた便利機能が実際にリリースされてユーザから感謝されるっていう体験は本当にいい体験で,本当にあっという間に2週間が過ぎてしまった

期間中の出来事いろいろ

毎日の話

  • ホテルはオフィスから徒歩2分ほどのハートンホテル京都
  • ホテルは一人部屋で洋食バイキングと和食が朝食
  • 10時30分までにオフィスに来て11時から開始
  • 13時からまかないランチの時間で,社員の方と話しながら食べてその後時間までソファのある場所で一緒にイカしたり等
  • オフィスには本やボドゲもいっぱいあって色々できる
  • 定時が19時で前半過程は21時まではメンターも残っているのでその時間までは作業が可能
  • 後半過程では19時過ぎて作業を続けるということはほとんどなくて,ゆっくりしてから夕食食べに行っても21時くらいにはホテルに着いてるような感じ
  • 夕食はオフィスにピザや寿司が届いたり,すき焼きや寿司や焼肉に連れてってもらえる会があったり
  • その他にはチームの人にお店に連れて行ってもらったりで一度も財布を出していない日の方が多いんじゃないかという感じで詳しくは以下のアルバム photos.app.goo.gl

まとめ

来る前と比べてどう変わったか

  • 経験があった部分はより確かな知識へ
    前半過程では講義と課題のフィードバックによって,よりレベルの上がったコードが書けるようになった
    後半過程でもDB設計やMVC,テストを実際のプロダクトを見ながら実装できたことは大きな力になった

  • Webサービスの上から下まで見通せるようになった
    末端の部分であるインフラやデザインの部分を知ったことで,インフラエンジニアやデザイナと話す際の共通言語を増やすことができた
    プロダクトにおいてなぜこんな構成になっているのか,なぜこんなデザインなのかをより意識できるようになった

参加を考えている人へ

応募はしよう

応募しないと受からない

Perl書いてないからとか知識足りなさそうだから応募しないという理由はまったくなくて,前半過程ではWebサービス開発のために特定の言語を選んでいるだけでそこは本質ではない
事前課題では3週間くらいは余裕があるし事前に良書の紹介もあったりSlackにも入れるので質問ができる

逆にはてなインターンのためにPerlとかScalaやろうかなと思っている人がいたら注意したいのは,カリキュラムは毎年変わるので来年もその言語がある保証はないということ

インターンに行く前のスキルで特に役に立ったのは,Webサービスがどのように動いているかという知識と,規模の大きいコードを読む・書くという経験の2つ

あとは応募開始したら早めに応募をすることで早めに面談,合否がわかることもあるので複数インターンに応募したい人は特に早めに,それに締め切りギリギリの応募も印象良くない

課題や発表は全力で!!!

毎日の課題で講評があり,他のインターン生のコードを見ることができる

同じインターン生のコードを見るというのは刺激的で

  • 事前課題のJavaScript課題
  • JavaScript課題のマウスストーカー作成
  • 機械学習でよりよい特徴量を抽出しF値で競うコンペ
  • 前半過程の自由課題
  • 後半過程の最終成果発表

などなどいくつも機会がある

この機会のお陰で自分の実力を発揮して良いものを作るチャンスになるし,他の人を見て参考にしたり高めていく気持ちになる

なので体調を崩さない程度に全力でやっていくといいと思う

おわり

という感じで何もかもが最高の環境で最高の夏を過ごすことのできるはてなインターン是非応募してくれ!!!

あわせて読みたい

syfm.hatenablog.com

hogashi.hatenablog.com

ishikawa-pro.hatenablog.com

snowman-mh.hatenablog.com

k3ntaroo.hatenablog.com

anatofuz.hatenablog.com

bookmark.hatenastaff.com

オタクはすぐ熊本に行く

この記事は PMOB Advent Calendar 2016 の 25 日目の記事です.

 

12/10~12の3日間熊本に行ってました.

12/11にMission Day Kumamotoが開催されるのでそれに合わせて行ってきました.

 

missiondaykumamoto.splashthat.com

 

熊本空港に着くとくまモンがお出迎えしてくれました.

 

f:id:cohalz:20161213220036j:plain

 

空港から市内へ...ではなく,ちょうど12/10から青春18きっぷが利用可能だったので,博多の近くまで電車で行きました.

博多ラーメンもスープからめちゃ美味くて,明太子もふんわりとしてて美味しかったです.

 

 

 

そんでもって12/11から熊本散策開始しました.

熊本城入り口の城彩苑というところで,ペットボトル3000本を使った熊本城を見たり,

 

 

熊本の郷土料理を食べたりしました

 

 

 

 

熊本城ではかなりの部分が通行止めになっていたんですが,その理由は現地を歩いてみればすぐわかりました

 

f:id:cohalz:20161213221307j:plain

 

 

 

f:id:cohalz:20161213221422j:plain

 

まだまだ復旧の目処が立ちそうにない状況でした.

 

市内の街は路面電車が走ってたり美味しいラーメン屋が多く立ち並んでいたり,古いゲームが置いてある店があったりと中々珍しいものを見れました.

 

 

 

 

 

 

熊本ではふっこう割で元の旅行代金の半額近くが割り引かれるのでかなり安くいけます.

2泊3日の飛行機とホテルの料金で合計1万6000円ほどで行けたのでかなりお得です.

ふっこう割は今年中で終わりますが,もし都合が付く人がいればぜひ熊本へ!

ぼくも散歩しました

この記事は PMOB Advent Calendar 2015 の 25 日目の記事です.

 

散歩エントリが羨ましいのでTwitterから散歩の記録を取ってきました(写真のあるもののみ載せてます) 

 

1月2日 奈良公園

 

1月4日 彦根

 

1月5日 熱田神宮

 

1月6日 小田原

 

1月8日 忍城

 

1月10日 横須賀・猿島

 

2月2日 越生

 

2月8日 浅草

 

2月9日 滑川町 

 

2月16日 大平山

 

2月23日 東京電機大学千葉ニュータウンキャンパス

 

3月2日 東村山

 

3月7日 町田

 

3月15日 鶴見

 

3月22日 養老

 

3月23日 樽見

 

3月25日 奈良

 

3月28日 京都

 

3月29日 大阪

 

3月30日 姫路

 

3月31日 岡崎

 

4月5日 江ノ島

 

4月5日 東松山

 

4月7日 横須賀

 

5月3日 長瀞

 

6月13日 ときがわ町

 

6月20日 仙台

 

6月21日 石巻

 

6月27日 東京都庁

 

7月4日 横浜

 

7月5日 秋葉原

 

7月30日 お台場

 

8月3日 鴻巣

 

8月16日 東京ビッグサイト

 

8月24日 横須賀

 

8月29日 伊香保

 

9月2日 松戸

 

9月5日 松本

 

 9月6日 大阪

 

9月7日 甲府

 

9月12日 天王洲アイル

 

9月14日 青梅

 

9月18日 幕張

 

9月20日 上福岡

 

10月24日 横浜

 

11月15日 草津

 

11月21日 東京大学駒場キャンパス

 

11月21日 電気通信大学

 

12月11日 沖縄

 

12月12日 沖縄

 

12月13日 沖縄

 

お金がない 

Abaddonについて

この記事は Ingress Advent Calendar 2015 の 19 日目の記事です.

 

自己紹介

埼玉県で活動しておりますcohalzです.

f:id:cohalz:20151219220709j:plain

 

沖縄へ

沖縄へは前日金曜日の午前11時に到着しました.

土曜日日曜日はチームの人とIngress三昧になることを予想してソロで沖縄を楽しんでました.

首里駅付近で首里そばという店に行き,首里城へ行ったりなどしました.

当日計測前

受付開始が9時だったのが8時30分に早まったこともあり早めにホテルを出ました.

事前に買うパックは,Rareを買うつもりでしたがだいぶ出遅れたためRareが売り切れだったのでVery Rareパックにしました.

Rareは受付が2列でしたが,Very Rareは1列だったので順番とか少し混乱してた気もします.

 

Very Rareはリストバンドが他とは見た目も違っていて,アフターパーティーの特別席や頒布会の優先購入,MUFGカプセルくじができるという特典付き.(優先購入については知りませんでした)

f:id:cohalz:20151219222933j:plain

 

頒布会は今までのAnomalyに比べてあまり並んでなかった印象がありました.

個人的な感想としては,今回の受付で頒布する方がとてもスムーズでよかったと思います.

 

台湾のブースでバッジを買いました.

レゾが台湾の形してるのがとても可愛いです.

f:id:cohalz:20151219223546j:plain

 

MUFGカプセルくじ,自分は外れましたが

Very Rareパックを30個買った人は当たったらしいです...

 

f:id:cohalz:20151219230355j:plain

 

計測中

C1は担当ポータルの耐性管理をしていたら@mehoriさんが同じ場所の担当だったらしくびっくりしました,基本的には計測中US打っていましたが色は変わらず...

C2はクラスタ外のvolatileポータルを抑えるため耐性管理している人を見つける作業から入りました.たまたま連絡の取れる人が通りがかったため管理を続けそのまま抑えました(緑AGはいませんでした)

C3はGORUCKの人たちの集合場所が担当だったため,耐性管理が無駄になってからのスタートでした.計測時間中はGORUCKの人たちはいなくなったものの,着々と緑CFが貼られ10分間落とせず取られました.

C4はC3担当の近くにクラスタ外のvolatileポータルがあったので,それを取るつもりでしたが緑AGが見当たらなかったため近くのvolatileも取りに行こうと走り回りました.

Ingressのために体を鍛えることを決意しました...

 

青AGに比べて緑AGの数がとても多くて,京都以上に厳しい戦いでした.

コツコツと貯めていたUS8が400本消えていきました...

 

アフターパーティー

オープニングのエイサー踊りから非常に盛り上がりました.

非常に小さい子どももしっかり太鼓を持ち踊りながら叩いていたのは非常にびっくりしました.

f:id:cohalz:20151219230920j:plain

 

その後はいつもの立川こしら師匠.

モバイルバッテリーの持ちすぎで手荷物検査に引っ掛かったなどの「足を引っ張ったAG」ネタは結構ウケました.

 

f:id:cohalz:20151219232419j:plain

 

その後はIngress流行語大賞というコーナーの一つに伊藤園の「ガ茶」が選ばれたり,

株式会社ナイアンティックの社長村井さんが出てきたりなどのコーナーが有りました.

f:id:cohalz:20151219233335j:plain

f:id:cohalz:20151219233507j:plain

 

Enlightenedの勝利の瞬間.緑にライトアップされました.

 

f:id:cohalz:20151219233642j:plain

 

結果発表が終わり,解散というところでADAから「Hack this portal.」というメッセージが聞こえ,ポータルをハックするとmediaが.

f:id:cohalz:20151219234101p:plain

 

内容は,ADAが「Enlightenedよ,私に何をしたのですか?」という悲痛なメッセージが流れ続けるというもの.

Resistanceとしては心が痛みます.

 

各地で使われていたNiantic Beaconが気になってStoreを開いたら

「ANOMALY PACK」なるものが売られていることに気が付きました.

f:id:cohalz:20151219234744p:plain

 

せっかくなので買っちゃいました...

f:id:cohalz:20151219234837p:plain

 

ミッションデイ

メダルはPersepolisの時にもらいましたが,どうせ沖縄を巡るしやろうということでミッションデイもやりました,

国際通り付近のミッションと泊大橋と奥武山公園,漫湖公園で計9つのミッションをやりました.

また,美栄橋駅に向かう際にジュンク堂を見つけてしまいIngress公式小説を買ってしまいました...

泊大橋ミッションでは海も見ることができました.

やっぱり色が違いますね.

f:id:cohalz:20151219235923j:plain

 

 

というわけでAbaddon沖縄非常に楽しめました.

Ingressがなかったら沖縄を始めいろんな場所を巡って楽しむことはなかったと思います.

ありがとうございます.

もぶぴーについて

この記事は PMOB Advent Calendar 2015 の 19 日目の記事です.

 

もぶぴーとは?

TLのツイートからマルコフ連鎖で文章を組み立てて呟くbot

f:id:cohalz:20151219214115p:plain

ようするにしゅうまい君

 

twitter.com

 

ちなみにTwilogとaclogに登録済み

http://twilog.org/MOBP_

http://aclog.koba789.com/MOBP_

 

そもそもマルコフ連鎖とは

ツイートを形態素解析して4つ(3つでやるのが主流?)ごとの組を作りDBに保存

例: ツイートが「もぶぴーとかいうやつなんだ」なら

(もぶぴー, とかいう, やつ, な)

(とかいう, やつ, な, ん)

(やつ, な, ん, だ)

をDBに保存する

f:id:cohalz:20151219211818p:plain

ツイートする際は最初のレコードを適当に選び,4つ組の最後の単語で始まるレコードを探して繋げる

(もぶぴー, とかいう, やつ, な) が最初に選んだレコードなら,「な」から始めるレコードをランダムに選んで文章を繋げる

下の画像で(な, 言葉, 覚え, ちゃっ)を選んだ場合であれば「もぶぴーとかいうやつな言葉覚えちゃっ」という文字列が作られる

このように探していき,最後の単語が空のレコードを引くまで続け文字列を作っていく

 

f:id:cohalz:20151219212903p:plain

 

で,なにをどうした

まずフォーク

takuti/twitter-bot · GitHub

 

mecab-ipadic-NEologdが使いたかったので形態素解析にIgoではなくMeCabを使うよう変更

 

大量のTweetを保存するためにDB(MySQL)を使用

 

何か障害あった場合に自動で再起動するために,起動時に前のプロセスを終了させるように

 

 生成された文章が長くなった場合は,数回再試行して短いツイートが出たらそれを使うように

 

リプライで貰った単語に対応した返答するために,リプライ内容に含まれる名詞からランダムに選びレコードの1番目と2番目の単語と一致するレコードを探して最初のレコードを見つけている

見つからなかった場合はランダムに選ぶように

起動時にTLの単語を拾ってツイートするのもその応用

 

マルコフ連鎖する際,ランダム取得するためにMySQLでorder by rand()するととても遅くなってしまう(全件取得)ため,where句に rand() <= 定数 limit 定数を追加してある程度のランダム性を犠牲にして速度を向上(普段いじっているのは定数パラメータ調整が多い) 

 

リポジトリはこちら 

cohalz/MOBP · GitHub

ナブラ演算子ゲームを遊びました

この記事は PMOB Advent Calendar 2015 の 7 日目の記事です.

 

先日東京大学第66回駒場祭にてナブラ演算子ゲームを手に入れたのでサークルで遊んでみました(PMOB要素終わり).

 

 ナブラ演算子ゲームとは

 

こちらのリンクに説明が書いてあります.

 

nablagame.com

 

ここではルールの説明はせず各カードの雑感を書きます.

0 (枚数: 2)

言わずと知れた最強カード.

そのまま基底にすることはできないが,×カードと同時に相手の場の基底に作用させることで一つの基底を必ず消すことができる.

忘れがちだが,0 ÷ (基底) も可能であるため÷でもコンボが可能.

2枚しかないので計画的に.

1 (枚数: 2)

0よりかは地味だが基底に追加することで命をつなぐことができる.

1 ÷ (基底) により,1 / xのような微分に強い基底を作るという事もできる.

実は2枚しかないので単純に基底に追加するのはやめた方が良いかもしれない.

x (枚数: 8)

最も枚数が多い関数カードであり,一階微分で死なないのが特徴である.

単純に基底に追加するも良し,掛けたり割ったりして攻守ともにできるカード.

x^2 (枚数: 3)

ラプラス演算子を使われても生き残るカード.

xを積分することでx^2になることから線形従属ルールにより1枚退場されることが多いであろう不憫な関数. 

sin(x) (枚数: 3)

微分(特に2階)に強いカードその1.

0の極限には弱いがx / sin(x)やsin(x) / xとすると1が残るため狙うと良い.

振動するため±∞の極限攻撃の対象にできないのもポイント.

cos(x) (枚数: 3)

微分(特に2階)に強いカードその2.

0の極限にも耐えられるうえ,±∞の極限にも強い.

xと掛け合わせるとlim supやlim infにも耐えられるが,0の極限には弱くなってしまうので注意. 

e^x (枚数: 3)

微分積分が効果ない上に0の極限にもなんとか耐えられるカード.

logを作用させることでxとなり弱体化する.

× (枚数: 5)

基底と関数を掛けるカード.

様々なカードと組み合わせて強化弱体化が可能なため万能. 

÷ (枚数: 5)

基底と関数を割るカード.

割る順番は指定できるため,意外と強化に使いやすい.

枚数は多めのためあらかじめ分数の関数の性質を調べておくと吉か.

f^-1 (枚数: 2)

基底の逆関数を取るカード.

複雑化する関数もあるため使いどころが難しい.

逆三角関数の性質あまり調べてません...

√ (枚数: 2)

基底の平方根を取るカード.

強制的に-∞の極限から守る事ができる上,高い次数の基底に作用させるという手もある.

負数の扱いには慎重に. 

lim +∞(枚数: 2)

+∞の極限を取るカード.

振動さえしなければ収束か発散をするためかなり強いカード.

定義域に正が含まれない関数はめったに作れないため安定して効果がある.

lim -∞(枚数: 2)

-∞の極限を取るカード.

同じく強いカードではあるが,定義域に負が含まれない関数にも使えないため注意.

lim 0 (枚数: 3)

cos(x)およびe^x関連の基底でなければ収束発散で退場させることができる.

退場できないカードについてもあらかじめxを掛けあわせておくということで対処できる.

lim+∞ sup (枚数: 1)

基底の上極限を取るカード.

振動していても使えるため,実質すべての関数を退場及び定数化できる(はず?).

1枚しかないため計画的に.

lim+∞ inf (枚数: 1)

基底の下極限を取るカード.

こちらも実質すべての関数を退場及び定数化できる.

d/dx (枚数: 8)

微分させることができるカード(連続使用可).

1を0にさせることもあれば線形従属させて退場もある.

手札にこのカードが多い場合は連続使用して手札を一新させるという事もあり. 

∫ (枚数: 10)

実はこのゲームにおいて一番多いカード.

知識がある人は積分を使って耐性のある関数を作ることができるかもしれない.

自信がない場合はwolframalphaを使って何になるか確認した方がいいかも. 

∇ (枚数: 10)

∫と同じく10枚のカードであり,自他どちらかのすべての基底を1階微分する.

強力で枚数も多いが,それまでに微分耐性のある基底を作成できると流されずに済む.

∆ (枚数: 2)

自他どちらかのすべての基底を2階微分するカード.

場の基底が1,xになった時に使うと勝つことができるため,一番意識を向けないといけないカード.

2枚しかないため枚数の把握が余計な手を減らす第一歩かもしれない.

 

という感じです.

鳩山の人は遊びましょう.

有識者に質問

xsin(x)とかって微分したら基底って増えますか?