うちぱらめも

I will be back...(デデンデンデデン)

# CyberAgentのインターンシップに参加しました

9月7日から9月30日までCyberAgentインターンシップである, CA TechJobに参加してきました。
そのことを簡単にまとめます。

自分が配属されたのはAbema TVの広告のチームでした。


経緯

このインターンシップに参加するにあたって、面接が2回ありました。
1回目の面接は人事面接で、やってきたこと、やりたいことなどの話を主にしました。
ここで僕は、バックエンドかあまり経験は無いが、インフラ周りをやってみたい!などの話をした記憶があります。
面接の終わり頃にその場で1回目の面接の合格を頂きました。面接でその場で合格を頂いたのが初めてで、すごいスピード感でとても驚きました。  

2回目の面接は現場面接で、受け入れ部署のエンジニアの方と面接を行いました。
過去の参加記事などに合った通り、やりたいことを大切にしているんだという印象を受けました。


参加にあたって

自分は元々CyberAgentの子会社でアルバイトをしており、入社にあたっていろいろと問題が起きて人事や労務の方に大変ご迷惑をおかけしました🙇
ありがとうございました🙇


子会社でアルバイトなどをしている場合は面接の時にちゃんと伝えましょう!!!


やったこと

やったことは、「世界を変えるCI改善」という題で、CI/CDの調査・検証・テスト導入などを行っていました。

元々動いていたDroneにいくつか問題があり、それを改善するための活動を行っていました.

調査・検証を行った技術としては
- Drone
- Tekton
- Prow
- GitHub Actions CI/CD
- Argo
- ...

などを調査・検証を行っていました。

期間的にもテスト導入を行えるものが1つが限界そうということになり、最終的にテスト導入を行ったのは Prow + Tekton です。

ProwとTektonに関しては別の記事に書こうと思います。


学んだこと

調査・検証を行う上で、KubernetesやDocker, CI/CD周りの知見はとてもついたと思います。
また、就活に向けてキャリアの話や会社の話などいろいろな話を聞くことができてとても学びになりました。


インターン期間中

会社から歩いて5分くらいのシェアハウスの住んでいました。
10月からは無くなるとのことなので、いいタイミングだったな〜〜と思います。

休日はカンファレンスや推しのイベントに参加していました。
沖縄だとほとんど行けないため、とても良い休日になりました。

インターン期間中のツイートです.
twitter.com


インターンを終えて

めちゃくちゃ学びの多い1ヶ月でした!
新しいことなどにも挑戦させてもらえる環境、というのを感じた気がします。

反省としては、もっと早い段階で質問などをしていければ良かったなと思います。
もっと早い段階で見切りをつけるということを意識していかないといけないと感じました。


最後に

配属されたチームの方や、人事の方、関わってくれた皆さん本当にありがとうございました!🙇
この学びを活かして、今後も精進していきます。

responderでboundaryを含んだform valueが取得できない

タイトル通りです. responderでform valueを取得するコードを書いたときに,boundaryを含むmultipart/form-dataリクエストを投げると,parseに失敗し,正しく値を取得することができません.

Enviroment

versionは以下になります。

responder 1.3.1

Example

import responder

api = responder.API()

@api.route("/")
async def hoge(req, resp):
    req.media = await req.media()

if __name__ == "__main__":
    api.run(port=8080)

boundaryを含まないrequest

import requests

URL = "http://127.0.0.1:8080"
payload = {
    "user": "test_user",
    "password": "hoge",
}

r = requests.post(URL, data=payload)
print(r.text)  # => {"user": "test_user", "password": "hoge"}

boundaryを含むrequest

import requests

URL = "http://127.0.0.1:8080"
files = {
    "user": (None,"test_user"),
    "password": (None, "hoge"),
}

r = requests.post(URL, files=files)
print(r.text)  # => {" name": "\"password\"\r\n\r\nhoge\r\n--3dec707edd260e174530419810e62f2c--\r\n"}

curlなどでmultipart/form-dataのrequestを投げると, form valueのみでもboundaryがついてくるので, APIを作ってcurlでテストしていたりしたらハマると思います。

$ curl -X POST -F "user=test_user" -F "password=hoge" localhost:8080

対応策

prを出してmergeされたので,GitHubからpip installすると使えるようになります。 https://github.com/taoufik07/responder/pull/367
https://github.com/taoufik07/responder/pull/378

8/22追記

pypiに新しいversionが登録されたようなので、pip installで行けると思います.

WSLでproxy環境と非proxy環境の切り替えをいい感じに切り替える

WSL、使っていますか?

僕は稀に使っています。
proxy環境下にいるときに、terminalでhttp_proxyを切り替えるのってめんどくさいですよね。

なのでここではWSL環境でhttp_proxyなどをいい感じに切り替える方法を紹介します。

qiita.com

この記事のWSL版です。

スクリプト

上の記事ではSSIDを取得する際に、 nmcli を使っていたためWSLでは動かすことができませんでした。
なので、SSIDを取得するためにWindowsnetsh というものを叩いて取得することにしました。

#!/bin/sh

proxy=環境にあわせたproxy_address
switch_tori=proxy環境下のssid

function set_proxy() {
    export http_proxy=$proxy
    export https_proxy=$proxy
    export ftp_proxy=$proxy
    export all_proxy=$proxy
    git config --global http.proxy $proxy
    git config --global https.proxy $proxy
    git config --global url."https://".insteadOf git://
}

function unset_proxy() {
    unset http_proxy
    unset https_proxy
    unset ftp_proxy
    unset all_proxy

    git config --global --unset http.proxy
    git config --global --unset https.proxy
    git config --global --unset url."https://".insteadOf
}

function get_ssid() {
    echo `netsh.exe wlan show interfaces | awk '$1~/SSID/{print $3}' | awk 'NR==1'`
}

echo `get_ssid`

if [ "`get_ssid`" = "$switch_tori" ]; then
    echo -e "\e[31mSwitch to proxy for school network\e[m"
    set_proxy
else
    echo -e "\e[36mUnset proxy settings\e[m"
    unset_proxy
fi

この記事と違うところは get_ssid の中の部分です。 もともと grep してそれを awk しようと思っていたのになぜかpermissionで怒られるのでこれに落ち着きました...

さいご

WSL2楽しみですね。
awkが2つに分かれてしまったのがつらいので、シェル芸に強い人がいたらまとめる方法教えてくれると嬉しいです。