読者です 読者をやめる 読者になる 読者になる

LINE Winter Internship 2017に参加してきた

もう終わってから結構経っちゃいましたけど、LINE株式会社にてインターン生してました。

line-hr.jp

守秘義務だの何だのあって、実際に何やったのよとか、書いたコードはどんなだとかは書いちゃダメなので、次回以降応募しようか迷ってる人に向けて流れとかを書き残して置こうと思います。

めっちゃ長文かつ感想というか個人的なものが大量に入ってるんで、適当に読み飛ばしてください。

 

 

応募

まずはインターンについて知る必要があります。(このフェーズはツイッターとかブログとかでいいんですけど、)僕はISUCON6決勝で、LINEの社員さんとお話した時に「うちのインターン来ない?」みたいに誘われました。学生一位取った直後でビールも結構飲んでて、かなり気が大きくなってたと思います、「いいっすよー!」みたいに答えた覚えが微かにあります・・・(ほんとごめんなさい、めっちゃ失礼ですね・・・)。

「あ、でも僕LINE使ってないですけどいいですか?」ってのもついでに聞きました。ついでとか言いながら、かなり重要な事ですけど。そもそも僕、LINEのコミュニティって苦手で、「てかLINEやってる?」に代表されるあのリア充感というか、雰囲気がどうにも肌に合わない。ツイッターフェイスブックでいいやーって人です。大学の学科LINEがあって、そこに入るためだけにLINEアカウントを持っていましたが、そのグループLINEで「Skypeとか他のやつに移行しない?」とか発言するくらいには使ってない人でした。スマホ新しくしてからはアプリを入れず、その前のスマホ(sim無し)でたまに連絡チェックしてるくらいのユーザーでした。こんな僕でしたが、「いいですよー、是非応募してください!」って社員さんが言ってくださったので、「じゃあ応募しますね!」って返事しました。

次に応募です。ISUCONから帰ってしばらく経って、「LINEがインターン募集するぞ、しかも報酬は40万/月」ってのがTwitterのTL(タイムライン)に流れてきました。実はこの時、応募するのをかなり迷いました。そもそも力が足りてなさすぎてて、行ったとしても迷惑だろうってのが僕の中であったからです。でも応募するって言っちゃったし、もし実力足りてなけりゃ選考のどっかで落としてくれるだろ~、受けるだけ受けるか~って軽い感じでとりあえず応募しました。

まずあるのは書類選考です。もう結構経っちゃっててどんなのが出たのか全然覚えてませんけど、簡単に自己紹介とかしたような気がするようなしないような。作ったものとか。なんか通っちゃったらしくて、次の審査の技術テスト受けてください~ってメールが来ました。

技術テスト、3つの項目に別れていて、それぞれWeb上で答える形式でした。一つ目が応用情報午前問題みたいなやつで、時間内に絶対終わんねえよって問題数出されるのでひたすら4択だか5択だかを答えます。僕はたまたま応用情報受けた直後だったってのもあって、時間が足りない事以外は問題なくいけました。その次にあるのが、簡単な競プロみたいなプログラミング問題です。一行もコード書けない人を弾く的な意図らしく、ABC(AtcoderBeginnerContest)のC問くらい?の難易度だと思います。それもアルゴリズムの知識とかは特に必要でなく、どちらかと言うと実装ゲーって感じでした。ここで問題となるのが使用できる言語。あくまで問題が競プロっぽいってだけで、競プロではないので、言語指定とかあるわけでして。たしか、「Java,Python(2 or 3),node,Perl」の中から選べ的な感じだったと思います。これでこのLINEという会社がどんな人材を求めてるのか、薄っすらと見えてくるというものです。しかし困った当時の僕。「(得意言語の)C++PHPもGoも使えない!」ってなって、まだこの中だと書けそうなJavaで挑みました。制限時間の最初1/3を「JavaのPackageがわかんなくてコンパイル出来ねえ!」って溶かしたり、「Javaであれってどうやるんだ!?」みたいなのの連続で、「C++PHPなら一瞬で書けるのにぃ!(※要検証)」って言いながらなんとか書きました。最終提出ではテストケース一個だけ通らないところまで行き、制限時間が少し過ぎてからそのラスト一個も通るように直しましたがそっちは提出間に合わず・・・。「あーこれは落ちましたわー」って思いながら三つ目の項目、自己アピールを書きました。

しばらく経って格通。「なんでや!」って思いながらも、「面接来て下さーい」って書いてあったので、「よし、最後は東京旅行や、華々しく散るぞー」って日程調整して面接に行きました。面接はクリスマスの直後くらいでしたね。今だから言えることとして、面接前日から当日朝まで京都で日本酒たらふく飲んでて(お猪口換算で21杯、一万くらい使ったらしい?)、その後京都駅から東海道本線18切符で渋谷駅まで行きました。途中の駅でリバースもして、「ああこれが僕の限界か・・・」などと。お酒でリバースしたのはこの時が初めてで、ようやく限界を知れた喜びが強かったくらい狂っていたのを覚えています。お酒をたらふく飲んだ後に電車に揺られる、特に211系みたいに微妙に古くて揺れる電車だと激しく気持ち悪いことがわかりました(自明)。面接で提出する書類を確認した所ちょっとした不備が見つかったので、大船あたりからグリーン車で渋谷まで乗って(机の確保)、夕方渋谷についてすぐに面接。少しだけ体調回復したもののまだ気持ち悪さが残ってる中、就活で答えそうな、「超デカいリアルタイムに動くデータで遊びたいです!」的な事を話して、「こういう時、君ならどーする?」って聞かれたのに幾つか答えました。あと「東京で暮らすことに問題ない?」とか、「Javaに親殺されたりしてない?(意訳)」とか聞かれました。これで落とされたら仕方ないなーって出来でした。終わった後は開放感から、御殿場線乗りつぶししに戻って(あたしって、ほんとバカ)JR東海全線乗りつぶし達成、そのあと東京で友達と遊んで帰りました。

1月に入ってしばらく経って、電話にて格通。簡単に最後の確認(本当に来れるか等)された上で、いつからいつまでインターンするかをできるだけ早く決めてくれって言われました。卒論発表の直後の月曜からお願いしますと連絡し、めでたくインターン生になれることになりました。

 

労働環境

さて、もうすでにかなり長くなってますけど、まだまだ続きますよ。どんどん読み飛ばしてください。次は労働環境について。

  • 待  遇:
    ・4週間コース:報酬40万円
    ・8週間コース:報酬80万円
    ※遠方からの参加の場合、希望と審査により宿泊代を支援します。
    ※交通費全額支給
    ※期間中、定められた日数内であればお休みいただくことは可能です。
    ※勤務時間10:00~18:30(休憩1時間)

ってサイトには書いてありますけど、詳しく書きますね。

まず「これだけ報酬が多いと、いろいろ他で払わないといけないものがあるのでは?」って最初に思うかもしれませんが、報酬は報酬なので、普通に振り込まれます。

次に宿泊代を支援とのことですが、私の場合はマンスリーマンションを会社に借りていただきました。駅から近く、その最寄駅からもオフィスのある渋谷まで乗換なしっていう超好立地のマンションでした。部屋もひとり暮らしする分には文句なしにいい部屋でした。地方学生にはありがたすぎる支援です。

f:id:Goryudyuma:20170506025501j:plain

(一枚だけ入った直後に撮った写真があったので貼っておきます。なお、年によってマンスリーマンションだったり他だったりするようですので、あくまで私の例ということでお願いします。)もちろん会社からの支援ですので、特にお金取られたりとかはなかったです。強いて言うなら生活用品少しだけ揃えました。家電は一通り揃っていたのですが、食料品とかシャンプーとかは流石になかったので。

交通費全額支給、たしかにされてました。インターンの往復とか、面接の往復とかも新幹線代出てました。

次は期間中の休みの制度ですね。これ、有給です。20日の勤務日のうち、2日までなら有給として休んでいいよ~って言われました。それ以上休むなら給与から天引、らしいです。まあ僕の場合有給一回も使わなかったので、関係なかったのですが。普通は学校行事等どうしても休まざるを得なくても大丈夫にするような制度らしく、インターン中に休むのはもったいなさすぎると感じていた僕には必要ない制度でした。

勤務時間、10:00~18:30ですね。残業とかないの?とかは気になりますが、むしろ残業しようとしてると怒られます・・・。てか怒られました・・・。インターン生は超ホワイトでしたね。社員さんの中には、僕より早く来て僕より遅く帰る人もいて、社会人すごいってなってました。もちろん人それぞれで、僕より遅く来られる人も結構いらっしゃったり。

さて、ここからは書いてないこと。

まず、一人一台、PC貸与があります。インターン前に、「/^(MacBookPro (13|15)inch (JIS|US)keyboard | Windows)$/の中から選んで!」ってメールが来たので、ちょっと迷って希望を伝えた所、「MacBookPro2016 15inch US keyboard」がきました。(この記事をあなたがいつ読んでるのか知りませんが、出てから半年たってないモデルです。)Macをメインで使ったことがなく、またUSキーボードもメインで使ったことがなかったので、挑戦してみた感じです。Macに慣れるのに少し時間がかかりましたけど、慣れた後は普通に使いこなしてました。

それから一人一台、Dell4Kディスプレイが貸与されます。これも結構便利に使ってました。コード読むのも何するのも楽でした。

あとは机や椅子、各種社内ツールのアカウント、オフィス入館証などをもらいました。

朝ごはん、早く行けば無料でおにぎりがもらえたりします。昼はカフェで弁当が安く買える他、社員さんと外にもよく食べに行っていました。その節はごちそうさまでした。夜は惣菜買ってきて食べたりが多かったですが、飲み会形式で社員さんと食べたり、最後の方は仲良くなった他のインターン生と飲みに行ったりしてました。てな感じで、健康的な(不健康的な?)食生活を送ってました。基本夜型の僕が昼型になってた点も特筆すべき事案かもしれません。

 

やったこと

次は具体的にインターン中何してたかについて。最初に書いたように、コードを貼ったりすることはそもそもできないのですが、Web上で公開されてる範囲で答えると、JavaのSpring-bootってやつでWebサイトみたいなのを作ってました。実はこんなスライドがありまして、

www.slideshare.net

(僕の見た範囲でも)LINEってJavaの会社って言っても過言じゃないくらい使われてました。後はいわゆる歴史的な経緯から、Perlも少し。

とまあ軽く言語の話題に触れたところで、インターンの流れを。

まず2月24日に卒論発表を終えて、その土曜日に新幹線で移動。関東の友人たちと遊んだあとマンスリーマンション入居。足りない物をリストアップし、買い出しなどをする。インターン一週間目は、オリエンテーションの後、支給されたMacに慣れること、環境に慣れること、Javaに慣れることなどを目標にしながら、社内のGithub Enterpriseのコードを眺めるなどしていた。社内特有の用語なども多く、自分で調べたり質問したりしてた。社内会議などにも参加させてもらい、いろんなところで取ってるデータがまとめられて共有されてて、大企業はここまでやるんだって思った。土日はICTSCってコンテストに2日とも引っ張り出されたので、特に休めずインターン二週目突入。初めてプロジェクトを持ち、ガリガリコーディングしていく。自分の力がどんどん発揮できて、(どの週も楽しんでやってたけど、この週は特に)楽しくて楽しくて仕方がなかった一週間だった。この後の土日は半日寝て半日遊ぶって感じで、ゆる~く過ごした。三週目、しっかり休めたのもあって少しだけクールダウン、企画の人やデザインの人とも話し合いながら担当プロジェクトをほぼ完成させた。同時にもう一つ仕事やってみることになった。四週目、一個目のプロジェクトの改善点が上がってきてはちょこちょこっと直しながら、2つめの仕事をこなしていたが、壁にぶつかる。仕様上の問題で、すぐには解決できそうになかったので、解決できそうな手法を一応提示して降りることになった。これを完成まで見れなかったのはとても残念。これにてインターン終了、翌日長野へ帰りました。

(どこまで書いて良いのか怪しいので安全マージン取ってかなりボカした結果、すごくわかりづらい文章になっていますね・・・)

 

報酬の使いみち

結構な額をもらっちゃったんで、使っていきたいのですが実はまだ手を付けてなかったりします。PC買うぞって決めたのは良いものの、まだどれにするか迷ってます。インターン中ずっとMac触ってましたけど、Windows(とサーバーで使ってるUbuntu)に慣れてる身からして、Macじゃなくても別にいいやってなりました。ここ、深く掘り下げると宗教戦争勃発してしまうのであんまり話したくないです(笑)。とりあえずいいパソコンを探して、今の5年目に突入したメインノートマシンを置き換えようと企画してます。「どんな高いノートパソコン買ったところで40万もいかんだろ?」って意見がありますけど、たしかにその通り(これは嘘で、40万超えのモンスターノートPCもあるにはありますが・・・。僕はいらないです・・・)。余ったお金でPC買いたいです。「ノートPC買うのにまたPC買うの?」ってなりますけど、こっちはデスクトップでそこそこの性能が出せるやつがいいですね。軽くて持ち運びが楽で充電持つノートPCと、性能の出るデスクトップ、一気に二台!大人買い(?)!買いたい!というわけで、今鋭意選定中です。

 

最後に

終わってから記事書くまで期間が空いたのは、文章書く気が起きなかったからですごめんなさい・・・。給料も振り込まれて修了記念の盾も届いて、もうここで書いとかないと一生書かないなと思ったので、頑張って書きました。(相も変わらず長文ごめんなさい。)

インターン中、社員さんには本当にお世話になりました!またいつか、一緒に仕事出来たらうれしいです!ありがとうございました!

 

インターン中に撮ったお気に入りの写真、貼っときますね。

f:id:Goryudyuma:20170506044313j:plain

 

@社員さんへ

出しちゃダメそうな情報は出してないつもりですけど、もし万が一漏れてたら至急

馬 (@Goryudyuma) | Twitter

 まで連絡ください。できるだけ早く消します。

セキュリティ・キャンプ2016 応募用紙

どうも、馬です。

なんか2017年セキュリティ・キャンプ全国大会の募集が始まった事により、

www.ipa.go.jp

 

去年以前にセキュリティ・キャンプに行った人の応募用紙がまとめられてるスプレッドシートができる事態になっています。

 

というわけで、僕も流れ的に晒して、スプレッドシートに載ろうと思います。

 

ただし一つ注意点。

晒してるみなさんはプロの人達ばっかで、それに比べて僕の応募用紙はみすぼらしいものとなっています。他の方と比較されると、どうしても劣って見えるかと思いますが、その点ご容赦ください。

 

問題文

https://www.ipa.go.jp/files/000053055.pdf

 

 

共通問題 【1-1】:https://063.jp/location2/  (今は動かしてない)
今いる場所から近い順に駅を表示するアプリを作りました。GPS情報が変わることをトリガーに情報を更新しているので、移動している時に、リアルタイムに一番近い駅を出せます。また、最寄り地点リストは、線路情報から、一番近い線路を出すことができます。このアプリにより、今どの路線に乗っていて、次の駅まで何mくらいあって、周辺の鉄道はどんな路線があるのかなどが簡単にわかるようになりました。
技術的な自慢としては、駅情報は約3万件、線路地点情報は約100万件のデータベースの検索を、一般的な土地では1秒以内に終わらせられるようにチューニングした点です。
また、googlemapへの表示も、なめらかにカーブが表示されるように工夫しています。

共通問題 【1-2】:サーバー側はPHP7でAPIが動いています。このAPIにリクエストを送ると、APIは駅情報などを保存しているMySQLに対してクエリを発行し、帰ってきたデータをJSON形式でクライアントに返します。
クライアント側はReact.jsで書かれています。また、表示をきれいにするために、bootstrapも用いています。

共通問題 【1-3】:組み終わったあとにブログ記事を書きました。
http://goryudyuma.hatenablog.jp/entry/2016/02/05/225848

共通問題 【2-1】:データベースの正規化がよくわからなかった。具体的には、正規化する目的、正規化するにはどうすればよいのか、正規化のメリットデメリットなど。
共通問題 【2-2】:ネットの記事を読み漁った。書籍では「理論から学ぶデータベース実践入門(奥野幹也)」を読んだ。また、実際に正規化を試してみたりした。
共通問題 【2-3】:正規化する目的は、同じデータを同じカラムにデータそのもののまま入れることを防ぐことにある。一つのデータを更新したい時に、データがそのまま入っている状態だと、そのデータと同じものをすべて更新しないといけない。しかし、そのデータそのものが入っているところにリンクとして入れておき、データそのものは別のところで持っておくことで、更新は一回ですむ。正規化する基準としては、同じデータが複数同じカラムに入っていて、更新がかかる可能性があるとき。メリットとしては更新時に一回のみ更新すれば良くなること、デメリットとしてはテーブルが増えてしまうので、きちんとドキュメント化しておかなければ管理できないほどテーブルが増えてしまうこと。
共通問題 【3-1】:5-A サーバー運用におけるパスワード管理
普段、自分はVPSを運用している。その上で動いているサービスや、他のところで動いているサービスには、パスワード認証が使われている物が多い。これからさらに自分が扱うサーバーの数は増えていくことが予想され、扱うパスワードも増えるであろう。まさにこの講義でパスワード管理の問題点と対処法を学び、自分の力としたい。

2-C 人工知能セキュリティ
詳細にも述べられている通り、人工知能に関するセキュリティと言われてもなにも思い浮かばないので、とても惹かれた。人工知能機械学習は様々な分野で使われており、自分も興味がある。確実に自分の知らないことを講義してくださると思うので、楽しみにしている。

3-A Webアプリケーションの脆弱性の評価と発見
Webアプリケーションを運用する上で、脆弱性は特にあってはいけないものだ。自分で作るときは自分で分かる範囲では対策するが、自分が知らない脆弱性については対処しようがない。個人レベルでしか脆弱性があるかチェックできないので、本講義を通して、より実践的な脆弱性の発見の手法を身につけ、今動いているWebアプリケーションや今後作るWebアプリケーションにおいて、脆弱性を発見して理解し、対処していきたい。

共通問題 【3-2】:今まで、自分はセキュリティに対して一種の恐怖感を持っており、例えばアプリケーションを作る際、できるだけ個人情報となりうるものは保存しないように徹底していた。個人情報を持ちたくないがために、作りたいと思ったアプリケーションの仕様そのものを変えたこともあるくらいである。自分程度が組むアプリケーションなら、脆弱性など有って当然だと思っていた。もし流出したら・・・と考えると、どうしても保守的な考え方になってしまっていた。しかし、そろそろわがままも言えない状態になってきていて、個人情報の保存に手を出さざるを得なくなりそうだ。もし可能ならば、セキュリティキャンプに参加し、セキュリティ脆弱性について知識をつけ、自信を持った上で今後のサーバー運用やアプリケーションの開発に挑みたい。
選択問題 【1】:
選択問題 【2】:
選択問題 【3】:
選択問題 【4】:プログラム(C++)

-----------


#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>

#define DEBUG 0

struct FRH {
        char Magic[3];
        char Source[21]; /* null(‘\0’) terminated ascii strings */
        char Destination[21]; /* null(‘\0’) terminated ascii strings*/
        uint32_t DataLength; /* min 0, max 4,294,967,295 */
        char *Data; /* null(‘\0’) terminated ascii strings */
};

//デバッグ用の出力関数
void show(FRH now) {
        std::cout << "Magic       :" << now.Magic << std::endl;
        std::cout << "Source      :" << now.Source << std::endl;
        std::cout << "Destination :" << now.Destination << std::endl;
        std::cout << "DataLength  :" << now.DataLength << std::endl;
        std::cout << "Data        :" << now.Data << std::endl;
        std::cout << std::endl;
}

//条件1のチェック
bool checkCondition1(FRH now) {
        if (now.Magic[0] == 'R' && now.Magic[1] == 'H') {
                return true;
        } else {
                return false;
        }
}

//条件2のチェック
bool checkCondition2(FRH now) {
        std::string S = now.Source;
        transform(S.begin(), S.end(), S.begin(), ::tolower);
        if (S == "rise-san" || S == "cocoa-san") {
                return true;
        } else {
                return false;
        }
}

//条件3のチェック
bool checkCondition3(FRH now) {
        std::string D = now.Destination;
        transform(D.begin(), D.end(), D.begin(), ::tolower);
        if (D == "chino-chan" || D == "chino") {
                return true;
        } else {
                return false;
        }
}

//条件4のチェック
bool checkCondition4(FRH now) {
        std::string S = now.Source;
        std::string D = now.Destination;
        transform(S.begin(), S.end(), S.begin(), ::tolower);
        transform(D.begin(), D.end(), D.begin(), ::tolower);
        if (!(S == "cocoa-san" && D == "chino")) {
                return true;
        } else {
                return false;
        }
}

//条件5のチェック
bool checkCondition5(FRH now) {
        std::string data = now.Data;
        if ( ( int)data.find("BlueMountain") != -1 ||
                        (int)data.find("Columbia") != -1 ||
                        (int)data.find("OriginalBlend") != -1) {
                return true;
        } else {
                return false;
        }
}

//条件6のチェック
bool checkCondition6(FRH now) {
        std::string data = now.Data;
        if ( (int)data.find("DandySoda") == -1 &&
                        (int)data.find("FrozenEvergreen") == -1) {
                return true;
        } else {
                return false;
        }
}

int main() {
        //ファイルとして開く
        std::ifstream fin("pyonpyon.rh", std::ios::in | std::ios::binary);
        if (!fin){
                std::cout << "ファイルが開けません" << std::endl;
                return 1;
        }

        FRH now;

        //順番に処理する
        while(fin.readsome(now.Magic, 2)) {
                fin.readsome(now.Source, 20);
                fin.readsome(now.Destination, 20);

                //4byte読み込んでuint32_tに変換する
                now.DataLength = 0;
                char x[4];
                fin.readsome(x, 4);
                now.DataLength = 0;
                for (int i = 0; i < 4; i++) {
                        now.DataLength <<= 8;
                        now.DataLength += x[i];
                }

                //文字数+1だけメモリを確保する
                now.Data = new char[now.DataLength + 1];
                fin.readsome(now.Data, now.DataLength);

                //flagが一度でもfalseになればREJECTED、ならなければPASS
                bool passflag = true;
                if(passflag && !checkCondition1(now)){
                        passflag = false;
                }
                if(passflag && !checkCondition2(now)){
                        passflag = false;
                }
                if(passflag && !checkCondition3(now)){
                        passflag = false;
                }
                if(passflag && !checkCondition4(now)){
                        passflag = false;
                }
                if(passflag && !checkCondition5(now)){
                        passflag = false;
                }
                if(passflag && !checkCondition6(now)){
                        passflag = false;
                }

                if(passflag) {
                        std::cout << "PASS" << std::endl;
                } else {
                        std::cout << "REJECTED" << std::endl;
                }


                if(DEBUG) {
                        show(now);
                }

                delete now.Data;
        }
}

-----------

以上プログラム

実行結果

-----------

PASS
PASS
REJECTED
PASS
REJECTED
PASS
PASS
REJECTED
PASS
REJECTED
PASS
REJECTED
PASS
REJECTED
REJECTED
PASS
REJECTED
PASS
REJECTED
REJECTED
REJECTED
PASS
REJECTED
PASS
REJECTED
REJECTED
REJECTED
REJECTED
PASS
REJECTED
PASS
REJECTED
REJECTED
REJECTED
REJECTED
REJECTED
PASS
REJECTED
PASS
REJECTED
REJECTED
REJECTED
REJECTED
REJECTED
REJECTED

-----------

以上実行結果

選択問題 【5】:OSとは、ハードウェア(物理的なもの)を操作する仮想的なインターフェースだ、と考えています。汎用OSでは、さまざまなメーカーが製造する部品の合作である現在のコンピューターを、共通のインターフェースで操作できるようにしようとしたものであり、逆に組込みシステムは、自分の会社の製品に特化して無駄な機能は取り除き、必要な機能のみにすることで、メンテナンスしやすくしたり保存に必要になる容量を少なくしたり、コストを下げたりできます。しかし最近、一台のハードウェアに対応するOSは一つである必要性はないという考え方が主流になってきました。マルチブートで複数のOSを一台のハードウェアに入れて、好みや役割により使いたいインターフェースを選ぶなどもできます。また、動いているハードウェアに対応するOSの上に、仮想的にハードウェアを作り対応するOSを動かす、バーチャルマシンもできてきました。
OSがハードウェアを操作するので、OSそのものには様々な機能が備わっています。OSがCPUをどのように使うのかを決め、OSがメモリをどのように使うのかを決め、OSがマウスやキーボードをどのように使うのかを決めます。OSはコンピューターのすべてを操作する頭脳の役割を果たしています。

選択問題 【6】:IDとパスワードを入力して認証ということは、どこかにデータベースがあり、そこでSQLが使われていると考えました。そこで、SQLインジェクションに対するセキュリティテストを行います。SQLインジェクションがもし成功すると、データの改ざんから個人情報の取得まで、幅広くダメージが与える事が可能です。一度でも信頼を大きく失ったアプリケーションは、今後使われることはないでしょう。これはとても大きな損害で、実際に問題になっています。
セキュリティテストテストですが、まず、IDやパスワードの入力欄に、「'」(シングルクォート)や「`」(バッククォート)などを入れて送信します。もし入力文字列をエスケープせず、文字列結合によりSQLを生成している場合、ここで何かしらのエラーや予期せぬ結果が出ます。
つぎに、入力欄に、「%」(パーセント)や「_」(アンダーバー)などを入れて送信します。入力文字列に適切なエスケープがされていなければ、ワイルドカードとなるのでこちらも予期せぬ結果が出力されるでしょう。

選択問題 【7】:
選択問題 【8】:
選択問題 【9】:マイナンバーカードは、本人とマイナンバーを紐付ける大切なカードである。別人に送られてはいけない。自分なら、カードの申請時に住所に誤りがないかをチェックしてもらい、情報が確認取れ次第、本人限定受取で郵送されるというクレジットカードの送付と似たシステムにするだろう。郵送時の誤りは極力抑えられるとして、申請時に誤りが入りにくいようにしなければならない。マイナンバーカードが発行されるのは、マイナンバーが発行された後なので、発行したい人はすでにマイナンバーを手元に持っているはずである。よって申請時には、マイナンバーと、氏名年齢などの個人を特定できる情報を要求し、データが一致していた時に申請が通るようにする。ネット弱者にも配布できるように、市役所などの窓口でも申請はできるようにしなければならないが、これはこの申請手続きの代行である。
選択問題 【10】:
選択問題 【11】:

 

 

(メールそのままコピってきた)

 

以上です。自分でもなんで通ったかあんま分かってないし、その分今後に期待されてるのかなと勝手に思ってます。今後とも、精進いたします。

終結

この記事は、kstmアドベントカレンダー25日目(最終日)の記事として書かれました。

qiita.com

 

まずは、25日間、一日も落とすことなく終えることができました!お疲れ様でした!

この記事は、特に技術的にどーとか言う話はナシで、純粋な心でMerry Christmas!と祝いましょう。

ちょっと最初に、ツッコミどころとして残っている所だけ突っ込まさせてください。(これ片付けとかないとオチオチ新年も迎えられない)

 

ツッコミどころ

その一:みんな締切守りすぎ

え、どゆこと!?絶対「記事遅れました~テヘペロ」って人一人くらい出ると思ってたのに!ふつーに締め切り守るとか、外に公開されてるものだからって張り切りすぎでしょみんな!!後から多少の編集したものはあるものの、全日当日夜には記事が公開されてて、「やればできるやん・・・」って思いました。

その二:続きがあると思わせぶりなタイトルの記事

「前半」「その1」とかタイトルに入ってたり、

 タイトルに(技術編)とか付けてしまったので誰か別のも書いてくれると嬉しいなー。

強いkstm部員になるために(技術編) - bgpatのブログ

とか。早く続きが読みたいです!

 

kstmの活動

さて、アドベントカレンダーでだいたいkstmの雰囲気とかわかってもらえたと思います。そうです、kstmとは飲みサーです!

・・・って冗談で言ってますけど、実際そう言っても間違いではないです。もちろん未成年や飲みたくない者に飲ませることはしないですし、節度を持って飲みますけど、それは置いといて。"全員で"何かを成し遂げるってことは少なくて、その場にいたメンバーで「やろうぜ!」って声かけあって、コンテストに参加したりしています。または個人で勝手にやって、記録だけkstmに置いていくとか、最近は多いです。なので、「kstmの"みんな"は普段どんなことしてるの?」って聞かれると、「飲み会です」と答えざるを得ないのです・・・。

 

( 追記:上のことを書いておいたものの、後から検索してみても「kstmは飲みサー」とはアドベントカレンダーのどこにも書いてなかった・・・!誰か一言くらい触れてると思ってたのに・・・!

追記終わり )

 

それはさておき、kstmではコンテストや勉強会などに積極的に参加しています。一例として、去年度の活動記録を貼っておきます。

f:id:Goryudyuma:20161224234411p:plain

(kstmメンバーがコンテストや勉強会に参加する時に、kstmの名前で参加した他に、個人で参加して後からkstmの活動としてこのリストに入れたものがあります。)

今年度はさらに、ICTSCやISUCONなどで、参加しただけにとどまらず結果も残るようになってきました。先輩たちから受け継いできたゆるい雰囲気を維持しながらやるときはやる、っていういいサークルに更に磨きがかかってきたと思います。

 

メンバー募集

最後くらいダラダラ書いても仕方ないので、言いたいこと言ってしまいます。

kstmでは、メンバーを募集しています。信州大学生で、このアドベントカレンダーを見て興味を持った、活動に参加してみたくなったら、是非サークルメンバーにコンタクトしてください!見学だけでも大歓迎です!

 

来年のアドベントカレンダー

来年のことを言うと鬼が笑うと言いますが、笑って過ごせるクリスマスなんていいではありませんか。来年、やるとしたら、今回参加できなかったメンバーや、kstmに関わりのある人なんかを呼んで、もっと盛大に開催できればいいなーと思います。目標はメンバーの被りなし!ってことで、よろしくね、アドベントカレンダー総責任者のugwisくん!(丸投げ)

 

締め

これにて2016年度kstmアドベントカレンダー、終結です。

メリークリスマス!

それと、良いお年を!

来年もよろしく&がんばりましょう!!!

GitHub緑化運動のすゝめ

この記事は、kstmアドベントカレンダー二日目の記事として書かれました。

qiita.com

 

とりあえずまずはこれを見てくれ。

f:id:Goryudyuma:20161201182707p:plain

Goryudyuma (Goryudyuma) · GitHub

 

緑化運動してるとなんか凄そう(に見える)!

 

やり方

  1. GitHubのアカウントを用意します。
  2. 毎日contributeします。
  3. できた!

ルール

自分なりのルールを定めます。できるだけ(自分が納得できる範囲で)低めに設定しとくと長続きします。

例えば僕は、競技プログラミングで簡単な問題を一問だけ解いてcommitってのはありにしてますが、条件として言語はC++以外ってのを定めています。なぜならC++競技プログラミングは慣れてて、簡単な問題だとあまり意味が無いからです。最近はJavaで書いてますが、その前はGolangOcamlで出してた時期もありました。いろんな言語の標準入出力や、簡単なデータ構造の書き方を学ぶことができます。

メリット

・毎日何かしらのコードを書く必要ができる

「継続は力なりぃぃぃ!」を地で行く感じです。

あと、どーしても進捗出したい物があるときに、毎日コードを書く習慣が付いていると一気に楽になります(個人差あり)。

・三日坊主の克服

何を隠そう僕は三日坊主どころか、一日坊主です。「やるぞ!」って思ったら一気に始めて、やる気なくなるまでやって、燃え尽きて終わるってパターンをずっとやってきました。ですが、継続して何かをするということを覚えないと、この先やっていけないと思いました。

今一年半弱緑化運動が続いているこれを見て、僕が三日坊主だと思う人はいないでしょう。完全に克服したとは言えないと思いますけど、ある程度克服したとは言えると思います。

・アピールできる

 他人に自分のGitHubを晒すのに抵抗が全くなくなりました。以前は「大したものを公開していない僕のアカウントなんて・・・」って感じで、あんまり晒したくなかったのですが、今は大したものを公開していないことは変わっていないのに普通に晒せるようになりました。

デメリット

・ダレる。

しょーもないコミットが増えます。同じ緑化運動をしてる人で、毎日ちゃんとした内容で出してる人もいますが、僕にはそんな能力はないので、簡単な競技プログラミングの問題一問だけみたいな日が結構あります。

これだとそんなに意味がないので、なんとかしたいのですが、それ以上にハードル上げて一日でも緑化できない日を作っちゃうと、その後も怠けるのが目に見えてるので、ハードルは低めに設定しています。

・毎日githubにアクセスする必要がある。

ユニコーン出てたりすると辛くなったりします。

あと、旅行などにもパソコンを置いていくっていう選択肢は無くなりました。一泊二日の旅行で、一日目の早朝と二日目帰ってきてから夜にやるってのを一度やりましたけど、二日目何かの事故で帰れなかったら詰むと判明した(それはそう)ので、日帰り旅行以外は持って行くことに・・・。

終わりに

僕がここまでやれてるのは、緑化運動している先輩の存在が大きいです。自分と同じような時間割で動いているような人ができてたなら自分もできるだろうって考えてます。少なくとも院卒業までは。社会人になったら、どこまで忙しくなるかわからないので、とりあえず学生のうちは続けようと思っています。

kstmメンバーなら誰でもできると思うので、誰か同志になってくれないかなー?

codefestival2016 参戦記

予選Cでぎっりぎりで通ったので、Finalにいってきた。去年に引き続き二回目。

 


11/26朝。
起きる予定時刻から40分寝坊。
僕「まあ時間余裕を持ってるしね、ちゃんと間に合う新幹線あるの知ってる。」

 

駅につく。
僕「指定席満席・・・?かがやきやから自由席もない・・・?一本あとだと間に合わない・・・?」

 

よし。
僕「グリーン車課金・・・しかたない・・・」

 

というわけで、行きは仕方なく、贅沢にもグリーン車で東京まで行きました。
車内はめっちゃ静かに感じた。椅子も電動で倒れるし、ああこれが上流階級の人たちが味わってる世界か~って思いながら、ウトウトしてた。
新橋ついて、会場まで徒歩。電通本社ビル前通って、ここが例の・・・!ってなった。

会場ついて、交通費精算で、グリーン車の旨伝えると、指定席分は出してもらえるとのこと。差額は自腹。まあ仕方ない、けどよかった。


Final開始。
パーカー取るためには、A~Dまでを完答とEかHの部分点を取れば良いことが配点からわかっていたので、まずはEを読む。
わからん。
全然頭のなかに問題が入ってこなくていたずらに時間だけが過ぎた。
仕方ないのでパーカー諦めてAから開始。
Aはやるだけ。
Bは適当にやったらWAで、もう無理~ってなった。飛ばしてCへ。
CはN+M要素を持つUnionFindして、N人が同じグループに属するかどうかだけを判定すればいいってことがすぐにわかったので実装、AC。
Dは問題はすぐに理解できたけど、よくわからなかった。適当に書いてWA。無駄にかけ2わる2してるところがあって、そこが悪さしてそうだったので考察し直したらAC。
E問題に戻って神のお告げ、「DPを使うのじゃ」ってのに閃いて、実装すれば部分点獲得。パーカー確保。

 

目標達成によりやる気は0に。gdgdタイムライン見て過ごす。

 

いろはちゃんに「観戦してばっかじゃだめ!」って言われたので、

 

B問題通してきた。

 


2000点取ってフィニッシュ。

そのあとの表彰式も、touristすげーってなりながら聞いてた。

午後は適当に回ってた。chokudai先生の解説聞いて、ご飯食べて、秋葉先生のトークライブ聞いて、エキシビジョン。
海外勢がめっちゃタイピング早くてびっくりしながら見ていた。

ってな感じで一日目終わり。今回はホテルみんなばらばらで、僕に割り当てられたホテルは少し遠目のところだった。ここだけは今回のコドフェス、去年との比較で唯一の改悪かな~。まあ200人以上を同じホテルにとか、普通は無理なんだけど、交流を増やすという意味で近いほうが良かったな~と。
スタンプラリーなくしたことにより、いっぱい回らなきゃって脅迫概念みたいなのがなくなって、まったりゆっくりコンテンツ見れたし、海外勢入れたこともすごく良かったと思う。

 

ホテルついてからぼーっとテレビ見てた。「とげ」ってドラマやってて、最終回だったんだけど、めっちゃ超展開な気がした。最初から見てるとフラグとかちゃんとあったのかなー。
ひさびさにドラマ見た気がする。それで寝た。

二日目(11/27)、8時集合だと思って6時半に起きて準備してついたのが7時45分、ついてから開場が8時だと知る。
しばらく待って会場入りして、トーナメント戦開始。

round1、A問題全然わからなかった。でも適当に書いた。案の定WA。
時間も短くてめっちゃ焦ってた。仕方なくB開けてみて、「これ全探索で出せば部分点貰えそう」って思った。
この手の問題はPHPで書くほうが楽そうだったのでPHPで書いた。提出は終了20秒前。
そこからひたすらテストケースTLEになってたので、結果が出るのが終了して他のグループの通過者の発表が終わったあとだった。
200点部分点もらって3位通過。まさか通るとは思ってなかった。

round2、round1で早解きが有利とわかったので、ひたすら早解きする。
Aは1足して2で割るだけで200点。2分弱で通す。
Bはとりあえず回せば200点。400点確保で2位通過。

round3、さすがにもう残るのは無理そうって思いながらとりあえずやってみる。
A、とりあえずDPで行けそうとわかるものの、まずCEが消えず。
あとから見ると、size_tの扱いがVC++gccで違うんだねーって話だった。ちくしょう。
そのあとWAが続く。考察何回かし直して、100点を取る。
B行く時間はなかった。
というわけで、round3は5位でした。残念。

そのあとはご飯食べてLT聞いてた。山の話ときゅうり先生の話とchokudai先生の話、どれもおもしろかった。

UFOキャッチャーでセンスのなさを周りに見せて、お情けで手ぬぐいをもらった。

そして最後のイベント、チーム対抗リレー。去年と同様、レッドブルが配られるので、開始前に飲んで気合い入れた。僕はF問題を担当した。
最初に嘘考察して、 @ki6o4 さんに反例だされて、それ含めて考察、書いたら一発で通った。
自分の担当問題通したあとは他の人の考察手伝う(見てるだけ)みたいなことしてた。みなさん頭良すぎでは・・・ってずっと思ってた。

結果発表と表彰式があって、終わって、自宅に帰った。
新幹線の指定席が何故か26日で取られてて(多分伝達ミス。確認する間がなかったから確認怠ってしまった・・・)、指定席書い直す羽目になったり、新幹線が珍しく遅れたりと、無駄に不幸が続いたけど、なんとか帰宅。

家に帰ってからエキシビジョンのB問題通した。一個だけ通らなくて辛かったけど、よくわからない不正っぽいことして通した。

 

基本はTLに流れてた考察通りやれば行けた。プロ各位に感謝。

 

これで終わり。めっちゃ楽しかった!


来年もがんばって、Finalいっくぞ~~!!

ISUCON6で学生一位取ってきた

2016/10/28 10:37 追記

ふぉのさんが上げてくれたのでリンク 

ISUCON6で学生枠1位取れた時の話.md · GitHub

2016/10/28 10:50 追記

あーちゃんも上げてくれてたものの気づかなかった・・・

リンク。

bgpat.hateblo.jp

 

※やったら長文なので、最後まで読まなくても大丈夫、暇な人だけ読んでね。書いてるうちに長文になっちゃったテヘ

去年と同じく予選の様子から書きまーす。

一応去年の貼っとくね。

 

goryudyuma.hatenablog.jp

 

さて、今年も去年と同じくチーム名はkstm、チームメンバーは去年と変わらず僕とあーちゃん(@bgpat_)とふぉのさん(@fono09)の三人で出た。事前に決めたチーム構成は僕がDB、あーちゃんがアプリケーション、ふぉのさんがインフラって感じ。かなりバランスの良いチームだと僕は思っている。

言語は去年に引き続きGolang。何もしなくても速いってのと、去年予選突破した言語だし、使いやすくて速くて、並列も書きやすくてなにより速いってことが特徴の言語だ。クロスコンパイルとか他にも特徴があるけど、ISUCONではあまり関係ないので割愛。Golangはいいぞ。

チャットにはSlackを、タスク管理にはTrelloを使った。チームメンバー全員が所属するものづくりサークルkstmでの今の主な手段がこのSlackで、使い慣れている事が大きい。主に参考ページのURL共有とかに使う。Trelloはとても使いやすい。普通はタグ付けとかして使っていくんだろうけど、僕たちは「umaの仕事」「bgpatの仕事」「fonoの仕事」ってリストを作って、そこにぽんぽん仕事を入れていく感じで使った。Slackと連携していて、Trelloでなにかアクションすると、Slackにも通知が行くので、Trelloを常に見ている必要はないようにした。

 

 

ああ、重要なこと忘れてた、エディタはVimです。

 

予選までにしたことは、主にpixivISUCONで遊んだ練習したことです。INDEX貼ってないテーブルがあって点数伸びて楽しかった。

 

予選はまず、ふぉのさんの遅刻から始まった。彼のマイクロソフトアカウントで登録していたので、彼が来ないことには始まらない。まあよくあることだ・・・とは言え、どーしようもないので緊急事態としてアカウントのユーザー名とパスワードを送ってもらう。もらったあーちゃんがインスタンス建ててスタート。

コード読んでるあいだにふぉのさん到着。大体読み終わったら方針を考える。あーちゃんが一言。「DB消しましょう」・・・僕の仕事が無くなった瞬間だった。

DBを消すって、起動すらしないって方針もあるけど、僕たちはデータベースは一応動かすが、必要なデータはメモリから取って、ユーザーから送られてきたデータはメモリとDBに格納、それで再起動時はデータベースからデータを全部読み込んでメモリに格納する方針。INDEX貼ったような貼ってないようなって感じだけで、それ以外は特にいじらず、あーちゃんが実装していく横で効率的なデータ構造(基本的にはmapだけど、何をキーとするかで効率がだいぶ変わる)考えて口出してた。

あとISUDAとISTARの統合はほぼ僕がやった。無駄に通信してたので、消すに限る。仕事無くなったので恵んでもらった感じだ。ありがたや。

で、今回のターニングポイント、htmlifyをどーするかだけど、とりあえずGolang正規表現は超絶遅いってことは有名な事実なので消す方針、replaceだけでなんとかやるって感じにしようとした。だけどただreplaceを順番に適応させていくと、一度変換したものに対してさらにリンクを貼ろうとするので全然ダメ。というわけで、@はあらかじめ@@に変えた上で、一つの単語を@(id)という風に変換して、あとでリンクに変換するようにした。この辺はほぼあーちゃん考案・実装。これが決め手となった。

ふぉのさんはnginxの設定書いたり色んなとこ見て回ったあとは白ご飯炊いてお茶淹れて鯖缶あけてくれてみんなで食べた。インフラ班はこの辺の面倒までみて大変だなと思いました(小並感)。

再起動試験をしっかりとやって終了。ちょっと不安ではあったものの、これ以上どうしようもない。

 ああ、今年は落ちたかなーと話しながら終わった。

 で、ちょっと経ってから合格通知。予選学生10位(社会人枠に一枠食い込んでくれたので、9位だけど10位)でギリギリ。今年も渋谷行ける~~って喜んだ。

 アルゴリズム、競プロでいろんなものに触れてきたつもりだったけど、アホコラは知らなかった。知ってても使えたかどうかは不明だけど、ちょっと悔しい。strings.Replacerは一度使ったことあったのに、本番中思い出せなくてこっちはマジで悔しい。

 

さて、続いて本戦。

まずは前日(今年も前日かよ!?って全く反省していない感じ)に、ISUCON5Finalの練習をした。あーちゃんがDocker-ComposeFileを作ってくれたので、それで(あーちゃんとんでもなく優秀)。

github.com

いつも使ってる鯖がトラブルで動かなくて、僕のwindowsにDocker建てて動かして見たけど、外からつながらなくて、仕方なくファイアーウォール切って(!!)やると繋がったので、三人でやっていました。この練習でもDocker-Compose使ったくらいには、僕たちはDockerに慣れていたので、本戦に活かせた感じです。

 

本戦当日。

 長野駅行ったらいたあーちゃんと一緒に蕎麦食った。予定時間に来ないふぉのさん。相変わらずだなーと思いながらも、僕はスーツケース持ってて、東京で電車乗り換えダッシュできない(したくない)状態だったので、とりあえず予定の電車で僕だけ先行、ふぉのさんとあーちゃんは次の新幹線で行くことになりました。で、渋谷。渋谷駅やたら広くなっててびっくりした。ああ、またヒカリエ来れた~~って喜んで会場入りした。ちょっと待って会場にてあーちゃんとふぉのさんと無事合流。レッドブル飲んでコンテスト開始!

最初の動画から「は?10万ユーザー同時接続?」ってなって、「これどーすんだ」ってなってました。予選の問題ははてなにちなんだ問題だったので、本戦はpixivかなーと大雑把には話してましたけど、まさかこんな形とは・・・って感じでした。コンテストが始まって、最初1時間位はデプロイできない問題にハマってました。会場全体が。運営大変だなーって話ながら、レギュレーション何回も読んでました。コア数を20から10に落としてつなげるようになったとのアナウンスがあり、もう一度デプロイ。これも失敗したけど、その次のデプロイで成功。まずとりあえずベンチ動かして、次にGolangに変えてまたベンチ。DBのインデックス確認とかしてみるも、どうにもおそそうなところが分からない。

静的ファイルあるので、とりあえずNginx入れようという話になったのと、Reactレンダリングを行うNode鯖もあるねって話、あと画像を予め生成しておいて静的ファイルとして配信したいなって話になりました。あーちゃんはJS大好きマンなので、Node鯖見たいと言い出し、ふぉのさんはいつも通りNginxを入れてイジる、じゃあ僕はというと、DBはいじれるところなさそうだしアプリケーションいじるかーってなりました。と言ってもほとんどいじれるところはなく、Strokeをメモリに載せる作業をしただけでした。あんまり劇的な効果があったようには見えなかったけど。それから静的ファイル生成するはいいんだけど、どのくらいの時間なら大丈夫か確かめようとしてSleep入れてみたけど、めっちゃ小さくしても、ベンチでタイムアウトしちゃってダメだなー、これ静的ファイル吐き出してる間にタイムアウトしそうだなーってなりました。あとはコード読んでる間に気づいたDBのインデックス、一個貼りました。それからMySQLが立ち上がっていなくてもGolangのアプリケーションは、MySQLが立ち上がるのを待つ設定を書いときました。再起動試験が重要なISUCONでは必須ですね。

他にチームとしてやったことは、Node鯖でTLS処理してたのが重そうだって、Nginxに処理させて、Node側からは抜いたりしました。それから、Golangのアプリケーションにインスタンス一つ、Nodeの処理にインスタンス一つ、MySQLの処理にインスタンス一つ、Nginxの処理にインスタンス一つ、一つのインスタンスは何もしない構成にしました。この2つが点数を伸ばした要因となったようです。あと、終了二時間前くらいから再起動試験を開始しました。その時点で学生一位取ってたのと、このあと急に点数伸ばせるとは思えなかったこと、去年みたいにFailしてしまうのはなんとしても避けたかったことが理由です。最初にrebootコマンド叩いていって、systemctl enable忘れで立ち上がってこないアプリケーションがあった(気づけてよかった・・・)ものの、二回目はちゃんとベンチ通りました。「再起動試験ってrebootコマンドじゃなくてAzureのダッシュボードからやるんじゃね?」って話になり、Azureのダッシュボードからも再起動試験をやり、「インスタンス1,2,3,4,5の順番に再起動試験やったけど、5,4,3,2,1の順番でやると落ちるかもしれなくね?」って話になってその順番でもためしたり、「MySQLが立ち上がる前にGolang立ち上がったらまずくね?」ってなって前述のMySQL立ち上がるまで待つコードを入れてる話したりしました。ここは本当に念入りにしました。

最後30分であーちゃんが「いま第五鯖何も動かしてないけど、この鯖もNode鯖にすればもうちょい捌けそう」とか言い出しましたけど、全力で止めました。点数上げるためにはたしかに必要だし、あーちゃんなら時間内に作業を終わらせられることはほぼ確実でしたが、ここはISUCON本戦、なんとしてでもFailしたくなかったので。そのあとはベンチの点数のうち最後にしたものが扱われるとの記述により、ガチャしてました。二万点超えたところでもう触らないって決めてフィニッシュ・・・ちょっとしたミスで、結局二万点を少し下回ってのフィニッシュでした。来年はこのミス、なんとしてでもなくします(強い決意)。

どうだろうなー、何位かなー。潜っててスコア表示が止まる17時からガンガン点数伸ばしてきそうだなーって話は結構初めの方からしてました。途中社会人枠含めて一位だったときは特に、「あのチームとあのチームは絶対隠れてスコア伸ばしてくる!!」って話を。学生一位、社会人合わせた全体で5位に入ってて本当に良かったです。

ちょっと大きめの金額をもらっちゃったので、ノートPC買い替えたいと思ってます。まだどれにするか迷い中です。

運営の皆さんありがとうございました!来年もこのチームで頑張りたいと思っています。チームメイトに見捨てられないように精進して、来年も本戦行ってなんかしら賞とるぞ!!!

 

 

 

ここから下はただのチラシ裏の落書き。

 

最近ブログ更新してないナーと思った。セキュキャンの3日目まではギリギリ更新できてたけど、グループワークも忙しくなって4日目から先は書けなかった・・・。で、実家帰ってもやる気でなくて、ICTSC6ってコンテストでサークルで出て3位に入るものの、僕は知ってることを手順通りにやった(MySQLの見たことあるエラー文を、その通りに直した)ってだけで特に書くことなし。IBMメインフレームコンテストも名前載るまで(パート2まで)やったけど、それまでもメインフレーム特有の普段と違う手順でいろいろやらないといけなくて、更に問題文も英語になって、更に更に忙しくて、もう無理ぃ・・・ってなってやめた。あとこれ書いてるとき(3日くらい費やしてる。道理で長文になるわけだ)にCODEFESTIVAL本戦出場キメた。けどこれも、やれることやったらなんかギリギリ通ったって感じだ。というわけで、なんだかんだいろいろやってはいたものの、書くのがめんどくさいっていうので書いてこなかったけど、言い訳はここまでにして、今回のは特段衝撃的だったので書こうと思った。

 

僕は今まで生きてきて、一位と言うものが取れた試しがない。仮に取れていたとしても、それはかなり限られた環境での一位で、全国、全世界にはもっともっとすごい人達がいるとわかってて取った一位だ。そんなの一時的には嬉しいけど、ああもっと上には上がいるんだなってなって終わる。運動できるわけでもなく、頭も特段いいわけではない。何か特別な特技も持っていないし、落ちこぼれの一学生だった。今してるサークル長も、みんなどう思ってるかしらないけど、消去法で選んでも僕になる気がするし、勝ち取ったって感じはまったくない。大学の成績も、めっちゃいいってわけではなく落ちこぼれない程度のものだ。そんな僕が、今回学生枠とは言え、全国で一位のチームに名を連ねる事ができたことが、本当に衝撃的だった。一生無理だと思っていた。もう自分でも何書いてるのか分からなくなって来てるけど、とんでもない喜びだったことを察してほしい。(でも社会人枠の人たち倒さないと本当の一位とは言えないよなーってちょっと思ってる・・・無理・・・)。

 

次もがんばるぞ!

セキュリティ・キャンプ全国大会2016参加記 その二

三日目

3-A【Webアプリケーションの脆弱性の評価と発見】

もう使われていない古いバージョンのサイボウズオフィスの脆弱性を探す会

ひたすら「これは見ていいものなのか・・・?」と思ってた・・・ので、詳しくは書けません・・・

CVSSv3なる方法で、脆弱性の分類をして、重要度をきめるらしい。

・・・が、意外とあてにならないものもあるらしく、重要度は低いけど早急にやらないといけないものも多いらしい。

.htmlの中にif文があって驚いたが、10年以上前のものも含まれてるそうなので、闇が深い。

4-A【クラウドセキュリティ基礎】

クラウドでなにができるようになったか?

-> サーバーをポンポン産んだり殺したりすることが可能となった。

-> サーバーはペットから家畜へ。

ここでもCVSS。やはり重要らしい。

AWSでサーバー立てて遊んだりハンズオンしたりした。

5-A【サーバ運用におけるパスワード管理】

100台サーバーがあって、4人管理者がいたら、理想は400個のパスワードがあるべきだが、実際にそんなこと出来るの?って話。

まあ無理なので、じゃあどうしようか。

とある会社で使われているシステムの説明などをしてくださり、とても面白いと思った。

企業プレゼン

なんか正直良くわからなかった・・・

データを分散して、全部合わさらなければ元データは取り出せないので安全ってのはわかった。

これを用いると、仮にPCをなくしたとか言ったトラブルでも、データをとられることはない。

でも、復元できなくなるので、重要な情報はどうすればいいのか。質問してる人もいたが、回答がなんというか、理解できなかった。

グループワーク

順調・・・なのか?

デスマしそう・・・?

ハニーポットハンズオン

お話聞けてよかった、あんな世界もあるんだ。

ちょっと立ててみたいと思ってしまった。

三日目終わって

ああもう折り返しか、楽しいなあ、もっとやりたいなあ!

goryudyuma.hatenablog.jp