Wantedly peopleのサマーインターンに行っていました

はい

という訳でWantedlyのサマーインターンに行っていました。驚くべきことにPerlはメインで動いてないです。

wantedlyinc.com

行くまで

ちょっと前に「本採用の逆求人だと思って行ったらインターンの逆求人だった」サポーターズの逆求人イベントに行ったのですが、そこで id:izumin5210さんとid:yjmkzkさんとお話する機会があり、サーバーサイド側でやっていることが面白そうだったので応募するぞ!!! となりました。応募後は一度リモートで面談をして、そこで決定という感じです。

あの回のサポーターズのイベントにいたid:sosodemonaiくんやid:sathoeku先生もインターンにいたので、なかなかおもしろかったです

golangは書いてないのでなぜOKだったのかはよくわからないですが「おもしろPerl沖縄県民採用」みたいな感はあった

インターン先の印象

はてななどのインターネットコンテンツをよく見る僕にとっては

  • 「よく増田で見かける」
  • 「定期的にxxxxしている」
  • 「意識高そう」

などというイメージがありました。

実際に3週間体験してみると、上2つに関しては現在は大丈夫かなぁという気がしています。 意識高そうなのは社風がクレバーに行こうみたいな感じだったので、ビジネスサイドの人などはそう思っているような雰囲気を感じました。とはいえエンジニアとしてやっていきするにはかなり良い環境じゃん...!!という感じを受けました。行ってみると違うね。

エンジニアの皆さんは、なんかこうエンジニアだったので非常に安心しました。おしゃれな人が多かったので「これが白金台か…」となっていました。都会って怖いね。

配属先

Wantedlyインターンは就業形なので人々はよしなにチームにアサインされます。 僕はWantedllyPeopleのバックエンド(サーバーサイド)でエイッとしていました。

Peopleは様々なマイクロサービスで構築されており、主にrailsgolangが頑張っています。

rails側もちょっと触りましたが、rails側は主にid:sosodemonaiくんが触っており、僕はひたすらgolangの方のあるマイクロサービスに関わっていました。 マイクロサービスは様々なものがあるのですが、僕はpeopleの通知をよしなにするマイクロサービスをエイっとやってバーンとしていました。メインはgolangで、たまにrailsrubyのライブラリにPRを出すなどの生活をしていた世界観です。あとは社会人必須のスプレッドシートも書きました。

メンターは id:izumin5210さんで、隣の席でHHKBとMagic Trackpadを使い、vimとAlfredを凄まじい勢いで使役していたので「これがプロか....!!」となっていました。

チームには他にid:qnighyさんや@Altechさんもいて、凄まじい人間が多かったです。id:qnighyさんはPRのレビューが「教科書かな...」という感じで書いていて、隣で見ていてすごかったです。よくわからないですが、たまに踊っているらしいです。

なおid:izumin5210さんには、「僕が日に日に(id:anatofuzの)ディスプレイの上の仮面ライダーを増やしていく行為を目撃する」、「プロティンを無限に飲む人と、玄米茶を一日4Lは飲む僕に挟まれる」などの体験を提供することになってしまい、非常に申し訳なく今は思っています....。次からは玄米茶は一日2Lくらいに止めようと....

👆これらが近場のセブンで買った仮面ライダーです

Perl

基本的に僕はPerlMongerなのでPerlを書きたいのですが、残念ながらWantedlyにはPlackアプリケーションはありませんでした。切ない。

ですが特定のテストでsed的な使われ方をしているのが1件あるらしいので、実質Perl企業でした。 という訳で僕も業務中に git add しない程度の脱法Perlを着服していました。

トータルで5件くらい書いていましたが、うち1件を書いていたところメンターのid:izumin5210さんに検挙される事案が発生しました。

別にRubyGolangがメインの企業でPerlを書いたからと行って市中引き回しとか、白金台の高級住宅街でピンポンダッシュをさせられるなどの怒られは特に無かったので安心ですね。

個人的にはワンライナーでシュッとPerlを書くと落ち着く感があり非常に心理的に良かったです。 なおPerlを初週は業務中にPerlを書かなかったので、日曜日にPerlのライブラリにPRを送っていました

初週は「CrazyPerlBoy」とジョジョに出てきそう、もしくは浦沢直樹が風呂敷を広げて回収しなかった漫画のタイトルみたいな呼ばれ方をしていましたが、最終週には「Perl太郎」と呼ばれるに至りました。 やはり本名で呼ばれない

Golang

インターン中は基本的にgolangを書いていました。僕にとってgolangは処理系を多少読んだことがあるのと、Tour Of Goを多少やったことがある程度だったので、ちゃんと書いたのは初めての体験でした。

3週間くらい書いて、3割くらいはPerlに似ているのではないかと気づいたので、実質Perlを書いていました。

とはいえ静的言語を触るのは久々(C言語も静的だけど..!!)なので、「循環参照を起こして破滅」、「ポインタを使うのか実態をいれるのか焦る」、「ひたすら同じインタスタンスを連れ回す」、「エラーチェックを忘れる」、「便利パッケージの存在を知らずすべて気合で実装してしまう」などの破滅ポイントを一通り体験してきました。

作業が「破滅!!!!!!」となると、どこからともなく id:izumin5210 さんがシュッとPRにコメントしたり、ペアプロをしてもらい、最終的にはプロジェクトで使っている処理をある程度ならすっとかけたのでよさみがありました。かなり勉強させていただきました、ありがとうございます。vscodeペアプロ機能便利ですね。

他にはslackに雑に質問を書いたら皆さんから早く反応していただいて、そういう面でも良かったです。なお社内用語としては、「いい話」「なるほど」「たしかに」などはやはり使われていましたが、頻繁に「かわいそう」というワードも使われていました。

なおwantedly社内の会議室にはだいたいapple tvが置かれていて、人々がシュッと画面をうつしていたのが印象的でした。ただ会議室によっては異常に寒いところや、「なぜか日を追うごとに椅子が増えていく会議室」などがあり、都会って怖いなと思いました。

触れた技術としては名前だけ聞いたことがあった「gRPC」や「gRPC-gateway」、例のマイクロサービスなどをモリモリ触ったので実際にサービスを展開しているコードきっかけに、技術に触れる事ができて非常に面白かったです。

後は個人的にlldbやgdbを使っている影響で、ひたすらdlvを使っていましたが、たまにdlvが使えないケースがあり、そういうケースでもGitHubだけでコードを追ってしまう人々を見て、すごいな...などと思ったりもしていました。僕もそうなりたいですね。

くらし

インターン期間中は社の方に取っていただいた渋谷のマンスリーマンションに滞在していました。コインランドリーも徒歩一分だったので非常に便利でした。

毎日山手線で通勤していたのですが、時間を間違えるとそこそこ人がいるので人間って怖い....シムシティしたい....と思っていました。ちなみに初めてiphone walletにいれたSuicaを使ったのですが、非常に便利でした。我々がほしいのはおサイフケータイだったのだ...。

PRがmergeされたら、帰宅ルートの道玄坂HUBに行くのを気持ちとして頑張っていたので、2週目はわりとHUBに行っていた気がする。よくわからないですが3回通ったらメイヤーになりました。どうでもいいですが、朝の渋谷は通勤するリーマンが多いのに夜の渋谷はおもしろ人間が多いですね…。定期的にメルトダウンしている人間と、敗戦処理(リバースしたものを処理する人)を見た気がします。都会怖い...

東京に居たのでPerlコミュニティの人々と飲んだり、ちょうど東京にいたid:kaoru1615くんと飲んだり、id:mackee_wさんにビルコンに連れて行ってもらいました。ありがとうございました。

あとは秋葉原とらのあなで薄い本を見ていたら沖縄太郎さんとエンカウントし、そのままジャンク品を漁る->メイドバーに連れて行かれる->ラズパイを購入するという謎の行いをしていました。なんだったんだ。

ランチ

ランチですが、やはり社が白金台なので単価は高めです。 インターン生同士で交流をするイベントで、「白金台のちょっといいランチ」マップを貰ったのですが、行こうとしていた店が休みだったり、単価が2000円スタートだったりと、色々と都会って怖いなという案件がありました。

とはいえ目黒まで行けばある程度は安いのと、日によっては社でまかないランチ(paypayやkyash、クレカなどで払うと食べれる)などがあったので、生存していく事は出来るぞという感じでした。

仕事の進め方

仕事の進め方ですが、僕はバイト先のid:yasslabと趣味のTwitterの影響で、「とりあえず思考の過程を人々が見れる場所に書いておく」という癖があるので、issueやPRのコメント数が100を超えるものが普通に発生してしまい、wantedllyの僕が見たリポジトリの中では異常な行いをしているものを量産しました。「issueとPRが実質Twitter」と言われました

特に最初のタスクの際は、Golangの先頭が大文字だとコメントを書けというルールを矯正するLinterからの怒られが異常に発生したこともあり、トータルでコメント数が300いって笑顔みたいになっていました。

結果として id:izumin5210さんから、「どこでサポートしたらいいのかわかりやすい」と言われたので良かったかな...と思っています。

一週間目はgolangに慣れてなかったのもあり、不必要にAPIを生やしまくった結果、「使わないから削除しようね...」となり、最終的に定義したinterfaceが満たすべき関数の数が「10 -> 4」くらいに減少したので、YAGNI守っていこうね...となりました。

2週目以降はgolangにも慣れてきたので、色々とエイッとするスピードが多少向上しました。 また社にも慣れてきたので

f:id:anatofuz:20190908104106j:plain

などと言い出す日もありました。楽しかったですね。

持っていってよかったもの

何故かインターンの前にアイコンがプリントされている服を2点発注していたので、それを定期的に着ていったのですが、社内での交流会みたいなタイミングで認識されやすくなるので便利でした。顔写真がアイコンじゃないのでアイコンに自分を近づけると体験として良い。

あとはランチが単価も高ければカロリーも高いので、整腸剤を持参しておいてよかった...という感じです。ハンバーガーとか焼き肉とかが周囲にあるので、午後の業務は整腸剤が無いとぽよぽよしてしまう気がする。

ちなみに水は社にウォーターサーバーがあるのですが、かなり水を飲む太郎なので前半は紅茶、後半は玄米茶をひたすら持っていきました。特に玄米茶は1日3本は買っていたので、白金台のセブンの玄米茶の売上に貢献したと思います。支払いはSuicaでしていました。文明ですね。

成果

まだmergeされてない・別リポジトリのPRもいくつかありますが、mergeされた中ではこんな感じでした。

f:id:anatofuz:20190908104610j:plain

携わっていたpeopleアプリは最終日の前日にインストールしました。

他にはこんな感じです。

打ち上げ

最終日の金曜日がYEPP(Year end pool party)という納会がある関係で、「インターンの打ち上げと修了式を前日の木曜日にするという時空の歪み」を体験しました。

インターンの打ち上げ時では、それぞれのメンターさんから担当の学生に手紙が読み上げられるという感動体験がありましたが、僕だけ「Perl太郎と呼ばれる」というコンテンツがありました。評価としては「楽しそうに仕事している」「スプレッドシートをまとめるなど仕事ができる」「コードを書く筋力がある」と言っていただいた反面、「コンピュータサイエンス的な知識をコードに落とし込むのが弱そう」と言われたので、やっていくぞという気持ちです。

f:id:anatofuz:20190908085925j:plain 👆はインターンの打ち上げででるいい感じのケーキです。(ちなみに人の写真です) Rubyを食べようとするGopherくんです。 なお、このGopherくんは結果として僕が食べたので、「Perlの人間がgolangを食べるというコンプライアンス的に問題のありそうな行い」をしてしまったので心配。

なお金曜日の最終出社日は、セキュリティカードを返却したにも関わらず、社にキャリーケースを忘れるなどをし、id:izumin5210さんに鍵を開けてもらうなどの行いをしました。生活をちゃんとやっていきたいですね。

f:id:anatofuz:20190908105057j:plain
著者近影です

雑記

人生においては3度目のインターンなのですが、2週間以上のインターンに関しては前科があるので、「3週間最後までいれるかな…」と不安がっていましたが、「スケジュールが合えば延長していく?」と言われたり、無事完走できたりしたので良かったですね。ちょっとは成長したかな....。

あとはインターン中にAWSの例の障害が発生したりしていたので面白かったです。

という訳で皆さんありがとうございました!!!

PerlConの渡航費のカンパのお願い

追記(2019/07/08)

カンパのご協力ありがとうございました!!!

目標金額を達成していましたので一旦停止致します!!!

皆さんありがとうございました!!!!!!!!!!!!


こんにちは id:anatofuzです。

8月の7-9日の三日間にラドビアのリガでPerlConというPerlの国際カンファレンスが開催されます。

PerlCon 2019 | The European Perl Conference in Riga, Latvia

学生のうちに海外カンファレンスには行ったほうが良いという話を聞いており、 以前YAPC::Tokyoで登壇した「レガシーPerlビルド」をベースにPerlCon用にCfPを書いた結果、プロポーザルが通ったのでリガで登壇する予定です。

ですが、ラドビアへの交通費が予想以上にかかってしまい、行くことは可能ですが、今後の大学生活で利用したい資金(下宿先の家賃、生活費などなど)に支障が出てしまう事が考えられます。アルバイトや奨学金などである程度は貯金がありますが、今度無茶な予算の配分になりそうというのが見込まれます。

完全に個人的な事情で申し訳ないのですが、リガ行きの資金をいくらかカンパにて援助していただけると非常に助かります!

勝手なお願いで恐縮ですが、できればご協力をお願いします。

目標金額

  • 合計で30万ほど
  • カンパの金額はおまかせします!

用途

  • リガへの渡航費 + リガでの宿泊費 + Tシャツ費のみに充当
    • リガへの往復渡航費とTPCiR会期中のリガでの宿泊費(3泊4日)以外に利用しません
  • オーバーした分はPerl関連の団体や勉強会などに寄付致します

特典

  • 発表スライドにアイコンが乗って紹介します
  • もちろんこのブログでもご紹介致します
  • アイコン入りのTシャツを作り、それを着てPerlConで発表します

カンパの方法

申し訳ないですが口座振込 or LINE Payでの送金でお願いします。 (kyashなどでは現金化する事が難しく、宿泊費などの支払いで支障をきたす可能性がある為です)

送っていただきたい口座及びLINE Payなどは、個別にお知らせ致しますので、DMかメールなどで連絡をお願いします。

(メールアドレス anatofuz@gmail.com )

備考

  • TPCiR終了後、リガへの渡航費 + リガでの宿泊費 + Tシャツ費及び、支援していただいた金額の収支を公開致します
  • Okinawa.pmなどでPerlConのレポートと支援していただいた皆さんへの感謝のトークをする予定です

mac osのスクリーンショットの形式を変えるコマンドを作る(zshの補完も)

mac osスクリーンショットは、 defaults write com.apple.screencapture type のあとに使う形式をいれることで、作成する形式を変換することができます。

なので下のようなシェルスクリプトをzshrcの中に書いておきます。

screenshot-type () {
    if [ $# -ne 1 ]
    then
        echo "require bmp,gif,jpg,pdf,png,tiff"
        return 1
    else
        defaults write com.apple.screencapture type $1
    fi
}

これは、入力がbmp, gif, jpg, pdf, png, tiffであることを仮定し、入力をスクリーンショットが出力する形式として設定します。

とはいえ、常にjpgやpdfを想定している通り打つのはできないので、補完も書いておきます。

#compdef screenshot-type
function _screenshot-type {
    _values 'type' 'jpg' 'png' 'pdf' 'bmp' 'gif' 'tiff'
}

これを _screenshot-type などの名前で $fpathが通っている場所においておきます。

そうすると、zshscreensho-type と入力してtabを打つと、形式が保管されて便利です

ディレクトリ移動と爆速にするzshの設定

みなさん cdしていますか? 私はしています。

ところで普段からzshを使ってcdをすると、補完とかを使ってそこそこ快適にできますが、それでも「普段使うあのディレクトリにパット移動したい…」 などのケースが出てくると思います。

大体この際に対応は、zshにpecoとfast_cdあたりを組み合わせて行う運用ですが、 この場合は fast_cdが覚えているディレクトリ数が少ないため 頑張って移動しようとしても、候補のディレクトリが4つとかいう悲しい状態になります。

ということで、zshを書いていきましょう。 まずは、移動したディレクトリを覚える設定を書きます

export dirfile="$HOME/.dirfile"

function cd {
    builtin cd "$@"
    echo $PWD >>| $dirfile
}       

zshのcdのhookを使えという声もありますが、まずは無難にcdしたら $dirfile に設定しているファイルに、ディレクトリパスを追記していきます。

ちなみに、このファイルを活用すると、コマンド一発で直前のディレクトリに移動するものを書けます。

function hd {
    cd $(cat $dirfile | tail -1)
}

こうしておくと、複数端末を開いてエイヤする際にかなり便利です。

ちなみに $dirfile にゴミがたまってきたら、次のコマンドでuniqにします

function dirfileuniq {
    local new_dirfile=$(cat $dirfile | sort -rn | uniq)
    echo $new_dirfile >| $dirfile
}

はい。そしてディレクトリの移動ですが、どこかの記事で見たpecoの活用術の設定を活用します。

function peco-dir-jmp
{
    which peco z > /dev/null
    if [ $? -ne 0 ]; then
        echo "Please install peco and z"
        return (1)
    fi
    local res=$(cat $dirfile | sort -rn | uniq | peco)
    if [ -n "$res" ]; then
        BUFFER+="cd $res"
        zle accept-line
        else
            return 1
        fi
 }
zle -N peco-dir-jmp
bindkey '^[pz' peco-dir-jmp

こうしておくと、 Ctrl-pzでよしなにディレクトリ移動が可能となります。 便利でしたね。現場からは以上です

zshの環境変数の最近の設定

今まではshでも使えるexportを使っていて

export PATH="$HOME/hoge/bin:$HOME"

なよくあるPATHを通す書き方で書いていましたが、最近はもっぱらzshの構文を利用して

path=("$HOME/hoge/bin" $path)

みたいに書く方法を使っています。 fpathの場合は

fpath=($HOME/hige/bin/
             $HOME/.zsh/bin/
              $fpath)

みたいに数行に渡って書いています。 特にexportと性能がどうこうはないのですが、なんとなく変数設定している感じが出るので、最近はこれで書いています。

brewのgnuplotのオプション指定ができなくなったので対処する

TL;DR

$ brew tap ie-developers/ie
$ brew install ie-developers/ie/gnuplot  --with-cairo  --with-aquaterm

問題点

  • gnuplotbrew(mac osのパッケージ管理ツール)のアップデート時に、オプションを指定が消え去った

  • aquatermとpdf出力を行いたいので、オプションがある時代の設定ファイルをcask である ie-developerに配置しました

解決

昔のオプション指定時代のrubyコードをgitのログから復旧し、バージョンだけ変更する

インストール方法

  • brew tap ie-developers/ie を実行し、 ie-developerをbrewの拡張に加えます
  • brew install ie-developers/ie/gnuplot --with-cairo --with-aquaterm を実行してください (--with-cairoを設定すると、terminalにpdfcairoが追加されpdfで出力できるようになります)

アンインストール

  • brew uninstall ie-developers/ie/gnuplot で削除可能

PyCon Kyushu in Okinawa 2019に「レガシーPython散策」で登壇します

こんにちは id:anatofuzです。

というわけで5月18日のPyConKyushuで登壇することになりました!!

他の登壇者の方はバリバリのPythonistaな方ばかりで、PerlMongerとしては「すまん…」という感じですが、テーマが「HUB」なんで、大丈夫だと思っています!

kyushu.pycon.jp

内容は次の用な感じです

みなさんが普段使用しているPythonのバージョンはいくつですか? Python3.7.3? それとも、まさかPython2系...!?Python3やPython2とバージョンが上がっているということは、つまりPython1が最初は存在していたということです。Python1の処理系のコードがもし存在していたら、ちょっと中身を見てみたくないでしょうか。そして現在のPython3のソースコードの内容も、ちょっと気になりますよね。このトークではPython1やその周辺のレガシーPythonの処理系のコードと、現在のPython3自体のCで書かれたソースコードを眺めながら、Python処理系の雰囲気を探ります。

YAPC::Tokyoに引き続き、レガシーコード散策となっています。

C言語レベルで、Python1.0付近の中で、一体どの様な構造体が、構文解析が走っているかを時間のある限り見ていく雰囲気となっています。

現在のPython3のコードもちらっと出す予定ですので、現在の処理系に興味がある方もぜひお越しください!!

ちなみに内容ですが、相変わらず

  • 無駄な知識が欲しい方
  • 明日役に立たない知識が欲しい方
  • スクリプト言語処理系に興味がある方

などに該当する方が来ていただけると楽しいかと思います!

というわけで当日は僕と握手!!