xryuseix’s diary progress

イベント参加記とか,何か進捗でたら書きます

ICPC 2022 国内予選 参加記

概要

チームxmemskyxで参加して66位でした。

Bの考察・実装とCの実装、Dの考察を担当していました。

去年はこちらです。 xryuseix.hatenablog.com

一昨年はこちらです。 xryuseix.hatenablog.com

チームメンバー集め

チームは僕(xryuseix)husky21stくん、M3_cpくんで出ました。

元々僕とM3_cpくん、僕とhusky21stくんがそれぞれ別のサークルで知り合いで、M3_cpくんが青コーダーだったので僕の方からチームに誘いました。勝つつもりでチームを考えていて、僕とM3_cpくんはアルゴリズム・実装寄りの人間で、husky21stくんは茶色でもかなり数学寄りなので誘いました。

本番の様子

環境はこんな感じでした。サークルで3部屋確保する必要があったので、僕のチームはRiSTさんに部室をお借りしてこちらで競技に参加しました。プロジェクターが雰囲気あって楽しかったですw

また、あまり写真には写っていませんが立命館大学情報理工学部サイバーセキュリティ研究室さんより大量のお菓子と飲み物をいただきました(中央右の黄色い箱)。非常に助かりました、ありがとうございます!

ここからはコンテストの様子を時系列順に記載します。

4:18 husky21st「Aとけた」

「おおおおお早ぇ🎉」って感じでした。husky21stくんの5分未満でノーペナは非常にありがたかったです。この時僕はBを担当(実はここ時点で問題文を8割型しか理解できていなかったのは内緒♡)していて、M3_cpくんはCとDを読んでいてくれていました。

Cが数学より問題だったので、husky21stくんとM3_cpくんで軽くCについて考察したのち、husky21stくんはそのままCに取り掛かり、M3_cpくんがDを考えます。

17:15 xryuseix「Bとけたうおおおおおお」

Bは例年のBにしては実装が面倒だったかなと思います。概要はこんな感じです。

N人の参加者が1~Nの数字が2枚ずつ書かれたトランプでババなしババ抜きを行います。隣の人から引くカード(必ず最小のトランプを引くことになっています)は何回ですか?

Nは1000ですが、各トランプに注目すると1周する前に必ずペアができるので、単純にシミュレートしてもO(N2)です。そのまま実装します。

こういう複数人がターン制のゲームに参加し、それをシミュレートする問題は競プロでよく出てくるので、普通に実装しました。

int main() {
    while (1) {
        int ans = 0;
        int n;
        cin >> n;
        if (n == 0) break;
        int left = n;
        vector<set<int>> s(n);
        rep(i, n) {
            int c1, c2;
            cin >> c1 >> c2;
            if (c1 == c2) {
                left--;
                continue;
            }
            s[i].insert(c1);
            s[i].insert(c2);
        }
        int turn = 0;
        while (left > 0 && s[turn].size() == 0) {
            turn = (turn + 1) % n;
        }
        while (left > 0) {
            int next = (turn + 1) % n;
            while (left > 0 && s[next].size() == 0) {
                next = (next + 1) % n;
            }
            ans++;
            assert(s[turn].size() > 0);
            int card = *(s[turn].begin());
            s[turn].erase(card);
            if (s[turn].size() == 0) {
                left--;
            }
            if (s[next].count(card) == 0) {
                s[next].insert(card);
            } else {
                s[next].erase(card);
                if (s[next].size() == 0) {
                    left--;
                }
            }
            turn = (turn + 1) % n;
            while (left > 0 && s[turn].size() == 0) {
                turn = (turn + 1) % n;
            }
        }
        cout << ans << endl;
        assert(left == 0);
        rep(i, n) { assert(s[i].size() == 0); }
    }
}

バグりそうですが、落ち着いて書いてAC。ここで順位表を見ると、多くのチームがまだBをとけていなくてガッツポーズしました。一応弊チームの実装担当として首の皮が繋がりました。(これでペナしてたら土下座するところだったぜ......💦)

あと今日実装しながら思いついたのですが、ICPCはローカル実装なので、できるだけassertは書いた方が良さそうですね。

51:31 xryuseix, husky21st「Cとけたいえええええええええええいい!!!👏」

実は僕がBを解いた17分ごろにhusky21stくんはCの解法を殆ど用意してくれていました。細かいところを軽く(5分くらい)考察して、僕が実装しました。

Cの問題概要はこんな感じ

n+m日のうち、n日間練習を行い、m日間休憩を行います。k日間連続で練習を行う場合はk日目にスコアを2k-1加算し、k日間連続で休憩を行う場合はk日目にスコアを2k-1減算します。スコアを最大化してください。

解法としては

休憩(約k日) 練習 休憩(約k日) 練習 ... 休憩(約k日) 練習練習練習練習練習練習 休憩(約k日)

のように休憩をできるだけ等しく分割し、その間に練習を挟み、1箇所に大量練習を入れます。また、休憩の分割数を全探索しました。

実装は僕がしましたが、この問題は僕よりhusky21stくんがMVPでした。解法の方針だけでなく、等差数列の和や、幾つかの数式の変形を聞いたら一瞬で答えてくれて助かりました。

あと提出直前に「これ、m==0で落ちません?」って言ってくれたのも神でした。

int main() {
    while (1) {
        ll n, m;
        cin >> n >> m;
        if (n == 0 && m == 0) break;
        vll div(m + 1);
        for (ll i = 1; i <= m; i++) {
            ll a = m / i;
            ll mod = m % i;
            ll b = m / i + 1;
            ll b_num = mod;
            ll a_num = i - mod;
            assert(a_num >= 0);
            assert(b_num >= 0);
            ll score = (-a * a * a_num) + (-b * b * b_num);
            div[i] = score;
        }
        ll ans = -LLINF;
        if(m == 0) {
            ans = n * n;
        }
        for (ll i = 1; i <= m; i++) {
            if (i <= 2) {
                if (i == 2 && n == 0) {
                    continue;
                }
                ll tmp_ans = n * n + div[i];
                chmax(ans, tmp_ans);
            } else {
                if (i - 2 >= n) {
                    continue;
                }
                ll one_num = i - 2;
                ll lest = n - one_num;
                ll tmp_ans = lest * lest + one_num;
                tmp_ans += div[i];
                chmax(ans, tmp_ans);
            }
        }
        cout << ans << endl;
    }
}

提出すると一発AC。この時点(51:31)でノーペナ3完30位。これにはチームメンバー総拍手でした👏 (高速ノーペナ3完はマジでマジでマジで×998244353偉かった)

51:31 ~ 3:00:00

ここからが地獄です。大量の嘘解法を生成するマンと人の解法を撃墜するマンを担当しておりました。

僕はDPを推していて最終的な列になるような列の分割の仕方というのは普通に求まりそうで、その中から元の列に復元できるパターンを経路の数え上げに帰着して計算する手法を考えていました。ただ、これの問題はノードが最大N2、エッジがN2くらいあり、枝刈りしてもノードはN * (定数)くらい、エッジがそこそこあり困っていました。

チームでは割と最初の方にM3_cpくんが「必ず区切らなきゃいけないラインがあるよね」という話をしており、そこの共有はできていたのですが、「区切っても区切らなくても良いライン」というのが思い付かず(正確には出ていたが、その解法の判定と正当性が証明できなかった)、想定解法のように行かず残念でした。

このチームなら普通に解けた難易度だったので非常に残念でした......。

感想

チームxmemskyxで参加して66位でしたが、ICPC 2022 国内予選 選抜ルールによると、

チーム数39を最大49まで増やすことがある

と書かれています。おそらく弊チームは選抜ルールで44位頃なので、COVID-19がそれなりに落ち着くことを祈っております🙏

また来年も対戦よろしくお願いします💪

ICPC 2021 国内予選 参加記

今年も参加してきました〜!!(@huskyB4llと@sosamjayo) f:id:xryuseix:20211106000100p:plain

www.yamagula.ic.i.u-tokyo.ac.jp

去年はこちらです

xryuseix.hatenablog.com

コンテスト中の様子

[16:30] 僕「は?サイト繋がらないじゃんwwTwitterみよ〜」

[16:40] 僕「は?B全くわからん.愚直にやっていいんか,なんか上手く判定できる条件あんのかわからん」

[16:55] 僕「B解けたwwwやるだけでしたww」

マクロいっぱいですみませんが,こんなコード書いてました.「変更できるのは列か行か,何列/行目」をペアにしたキューに入れて順に処理してました.

int main() {
    while (1) {
        int h, w;
        cin >> w >> h;
        if (h == 0) break;
        queue<pair<int, int>> q;
        q.push({0, 0});
        vvi v(h, vi(w, INF));
        vi x(w, INF);
        vi y(h, INF);
        x[0] = 0;
        rep(i, h + w - 1) {
            int a, b, c;
            cin >> a >> b >> c;
            v[b - 1][a - 1] = c;
        }
        while (!q.empty()) {
            auto t = q.front();
            q.pop();
            int num = t.se;
            int type = t.fi;
            if (type == 0) {
                // 列を確認
                for (int i = 0; i < h; i++) {
                    if (y[i] != INF) continue;
                    if (v[i][num] == INF) continue;
                    y[i] = v[i][num] - x[num];
                    q.push({1, i});
                }
            } else {
                for (int j = 0; j < w; j++) {
                    if (x[j] != INF) continue;
                    if (v[num][j] == INF) continue;
                    x[j] = v[num][j] - y[num];
                    q.push({0, j});
                }
            }
        }
        bool ans = true;
        rep(i, w) if (x[i] == INF) ans = false;
        rep(i, h) if (y[i] == INF) ans = false;
        YN(ans);
    }
}

この辺りでA担当してたhuskyとsosamjayoがAバグらせ太郎をしてました.

[17:05] husky+sosamjayo「A解けたwww」

この辺りで僕がCを考えてたんですが,"""ヤバさ"""を理解してて困ってました.standingの様子からD狙いに移ります.

[17:10] 僕「Dこれ貪欲で良くね?」

sosamjayoと主に話してて,サンプル2で合わないことがわかります.

[17:15] 僕「Dこれ末尾3つ全探索であとは貪欲で良くね?」

良さそうですが,超怪しいです.saosamjayoとhuskyと三人で本当か検証します.

謎証明により「ヨシ!w」の合図が出ます(※証明間違ってます).提出します→WA

ここからいっぱい嘘解法を考えます.落ちるテストケースが知りたいので,僕作のrimeのようなテストツールを使います.

github.com

(間違えてb_i <= 100だと勘違いしてますが)以下のケースで落ちました...

8
100 8 51 41 30 39 64 16

[18:00] husky「末尾3つ全探索で,末尾3項の(min,max)に含まれる要素は列の中間に,他の要素は前半におけばいいんじゃね?」 要はこんな感じです

8
[100 8] [51 41 30] [39 64 16]
(64-16の範囲外を降順) (64-16の範囲内を降順) (全探索した3つ)

当然のようにダメでした.そのまま嘘を大量に生成してました......

結果

92位でした.C以降が解けなかったのが戦犯です.あーあ.

f:id:xryuseix:20211106000100p:plain

www.yamagula.ic.i.u-tokyo.ac.jp

OSINT 中心の初心者向け CTF・TsukuCTF を開催しました

CTF 概要

タイトル TsukuCTF
コンテスト URL TsukuCTF
Writeup URL TsukuCTF
開催期間 9/11/2021 12:00PM ~ 9/12/2021 11:59AM
参加者 379
問題数 36
運営 14
準備期間 17 日

準備期間

1 年くらい前から SecHack365'20 のトレーニーの間で CTF 開催したいよね〜って話になってました.がいろいろあって開催できず,9/11 に SecHack の全ての年のトレーニーが集まるイベントがあったので,それに合わせて裏開催しようとなりました.当初は SecHack 関係者のみで参加と考えていましたが,もったいないので外部公開しました.

作問レポジトリ(非公開)では 8 月 26 日に僕が first commit をしてたので,準備期間は 17 日と初開催にしてはかなり少ない方だと思います.ただ,SECCON 関係者や他コンテスト主催者などがトレーニーにいたこと,運営にガチプロの人数が多いこと,OSINT は問題によっては作問が楽なことからこの短期間で開催できました.

開発体制

サーバーはトレーニーの個人サーバに CTFd を乗せる形でデプロイしました.この辺は僕はよくわかっていませんが,Y ちゃんプロがうまいことやってくれました(これは天才).

各問題は以下の画像のようなドキュメントを共有しました.ここで一番気をつけているのは,謝ってフラグを参加者に配布しないことです.あとは適当に git 管理しています.

f:id:xryuseix:20210914235636p:plain

また各問題が解けるかちゃんとチェックする必要があるため,作問者(Writer)は PR を作成して,他のその分野が得意な人(Tester)がテストをして,誰か一人がちゃんと(エスパーとかせずに)解けたら merge するという形にしていました.(が,今回 Tester がミスした問題もありすみませんでした.例えば InterPlanetaryProtocol は Tester(うち一名は僕)が目で見てフラグの一致確認をしていたのでフラグミスに気づきませんでした.また logonly も同じような理由で本来 Accept すべきフラグの一つが設定されていませんでした.)

f:id:xryuseix:20210914235633p:plain

本番

まず CTFd の設定をする予定だった僕と Web 系サーバーの起動をする予定だった Y ちゃんが寝坊しました(開始ちょうどに起きました).その影響と直前に Web 系問題の一部に(そこそこまずい)バグが見つかり,修正の影響で 1.5h くらい遅くなりました.あと開始直後に気づいたミスでは,夜の間にデプロイしてた Web 問題(genesis)には Basic 認証をかけていました.しかし,朝は外し忘れました.

これらが終わったあとは問題文やフラグにミスがないか参加者の提出を見ながらチェックします(悪い言い方にすれば公開デバッグ).何人かが監視しながら(僕一人でも開始 3 時間くらいはほとんど見てた)怪しいのは共有してたのですが,どうやら Welcome の問題文や TORItsukushi の問題文が誤解されやすいとわかりました.Welcome に関しては本当に僕らのミスですぐ直しましたが,TORItsukushi はかなり検討しました.というのも以下の変更です(インラインコードは強調するためにたった今加えました).

[from]

文字列 TSUKUSHI を可能な限り何度も取りつくしてください。残った文字列がフラグです。フラグ内に文字列 TSUKUSHI は含まれていません。

[to]

大文字文字列 TSUKUSHI を可能な限り何度も取りつくしてください。残った文字列がフラグです。フラグ内に大文字文字列 TSUKUSHI は含まれていません。

というのもフラグがTsukuCTF{Would_you_like_some_fresh-baked_Tsukushi?}ですが,TsukuCTF{Would_you_like_some_fresh-baked_}の提出が半分以上(体感 7 割くらい)ありました.このままでも問題ないのですが,流石に多いなということで問題文を変更して通知しました.

本番というか準備ですが,今回の一番の戦犯は wildTsukushies, udoneasyタグをつけました.作問陣の中で,OSINT の画像検索問題ではまず google レンズで検索するのが基本みたいな話があり,google レンズやるだけは easy にしようって感じでこのようになりました.ですが,優勝された( 'ᾥ' )さんは一番最後に,2 位のTSGさんと 3 位のSatoooonさんは解かれませんでした.これは決して煽りではありません. (( 'ᾥ' )さんはあえて提出しなかったっぽい気がします.わかりませんが. ←違うようです)

他にも僕はこの辺いっぱいやらかしましたすみません.

  • InterPlanetaryProtocol,Writer は Misc と言ったのに間違えて OSINT として登録して,気づいた時にはコンテスト始まってた.
  • 一問 Writer がフラグにTsukushi{}と書いてて,気づかず CTFd にコピペして登録した.
  • digits で@app.get("/program/digits/")とすべきところを@app.get("/program/digits")としました.これにより/?=にアクセスすると localhost に飛びました.

次回に向けて

僕だけでこれだけ反省点があり,10 人以上の Writer がいるので反省点はかなりありました.次回はこのようなことがないよう一つ一つ対策できたらなと思ってます.
今年アンケートとかで僕の問題で人気だったのは digits, cafe, (簡単な)OSINT っぽいので,来年(?)も同じような難易度帯で出せたらなと思っています(ところで,100 点問題, 500 点近い問題は作りやすいですが,200~300 点あたりの問題ってかなり作るのむずかしいですよね...).

Q&A

TsukuCTFの「つくし」の名前の由来は?

SecHack365 のポスターです.このポスター自体の由来は不明です.

来年は開催するの?

(TsukuCTF 運営ではなく個人の意見です)同じ難易度同じ内容でしたいです.今回 OSINT は場所特定,特に電車が多すぎた上,Google Lens ゲーだったのはかなり反省しています(時間なかった).OSINT と言ってもかなり幅広い内容があるので,次回はもっと幅広く出題したいです.

個人的にお気に入りの問題は?

Writer としては cafe, Tester としては tram です.tram のいいところとして,2 種類の Map を用意して共通点(重なる点)を抽出する的なのは解けると非常に爽快でした.あとは TORItsukushi は「つくしをとり尽くしてください」がクソ上手ギャグだったので,次回もダジャレ問を作ろうかと思います.

コンテストの様子

f:id:xryuseix:20210914235647p:plain f:id:xryuseix:20210914235642p:plain f:id:xryuseix:20210914235638p:plain f:id:xryuseix:20210914235650p:plain

ICPCアジア地区予選2020 参加記

はじめに

競プロの大学生で最も大きな大会,ICPCのアジア横浜地区予選に参加してきました.

icpc.iisf.or.jp

予選の話は↓です

xryuseix.hatenablog.com

時系列順に参加の様子をお話しします.

本番の様子

予定通り,僕(xryuseix),cre_chanはA問題へ,jubileusssはB問題に行きました.

開始直後,A問題はめっちゃ難しく感じた.内容はこんな感じの

NNNの立体空間の中に111のキューブが設置されています 3方向から見えるキューブの配置(二次元平面*3)が与えられるので,その全てを満たす図形が存在するか答えて(N<=100)

僕は復元までが問題だと誤読しててむずいいいいって思ってたけど違ったぜ. ある場所にキューブがある場合,三方面から必ず写っているはずなので,解法としては

x,y,zを全探索してその座標の二次元平面に映るキューブの個数を数えて,それが3の場合は(コピーしておいた別の)二次元平面からキューブを削除,最終的に(コピーしておいた別の)二次元平面にキューブが映ってなかったらOK

ってなった.この問題は割とすぐ思いついて考察も実装もほぼ僕がやったのですが,座標軸バグらせてcre_chanと修正してました.(0:37でAC)

とかデバッグやってる間に気づいたらjubileusssがB解いててはええええええええ天才だってなった(例年だとBかなり難しくないですか?問題は見てませんがむずそう)(0:25AC)

この時点で順位表を確認

f:id:xryuseix:20210317203616p:plain

11位じゃんいけるぞxjubi_chanx!!!(※調子に乗りました)ってなってました.

一般的に難易度シャッフルのコンテストではみんなが解いている問題は簡単そうなので,それから解きます.実際に簡単であることが多いです.

しかし初体験なのですが,この時点C以降の問題は他のチームがほとんど解いておらず,どの問題に行くべきか迷いました.

とりあえずcre_chanはCへ(順に問題を読む予定だった),僕はJへ(なんか二人解いてるので),jubileusssはGかHあたりを読んで無理とか言ってました.

でなんだかんだグダってJが数人解かれたあたりでJを通すムーブになってました. Jはこんな感じの問題

木があって,その中にナッツが置かれています.今いるますの隣にナッツがある場合,ナッツを押し出すことができます.行ける頂点集合の個数を答えてください.(<=1e5)

これのアルゴリズムは言われた通り動かせばいいだけなんですが,場合分けがしんどかったです.Aと同じく,考察実装をメインで僕がやって,デバッグ補佐でcre_chanに手伝ってもらってました.

解法としては

とりあえずdfsで進む.今の位置にナッツがなければdfsを続ける.ナッツがあるとき,ナッツを転がす先が1箇所の時はナッツを転がして,dfsをしたのちに元に戻す.2箇所以上の時はナッツがなかったことにする.0箇所の時はその頂点にこなかったことにする.

って感じでした.これ考察は30分くらいで終わったのに実装で1時間以上バグらせてごめんなさい...って無限になってました.(1:51AC, 3WA)

次にみんなが解いてたGへ

問題はこんな感じ

頂点に重みつきのグラフが与えられる.ある閾値Xとした時,X以下の頂点とXより大きい値の頂点を結ぶ辺を削除し,その後全ての頂点が次数2以下,かつ追加できる辺は頂点の重みがX以下とXより大きいもののみであるような辺を好きなだけ追加する.このときに全ての頂点が連結となるような最小のXを求めなさい

僕らの解法としてはこんな感じ

とりあえず座圧してXを固定する.辺を重み順にソートして,Xを増やしながらUFをした結果を保存しておいて,その後再度連結が可能かどうかを判定する

最後の部分がうまくいかず,グダグダして5WAして終わってしまいました......

f:id:xryuseix:20210317205523p:plain

最後に

みんな強すぎて日本は安泰だなって気持ちと,彼ら彼女らは多分宇宙からきたんだろうなって気持ちと,自分は人類最強かなって気持ちが湧いてきました. 来年も出るので頑張ります.

SecHack365 '20 参加記

SecHack365 参加記

もくじ

はじめに

SecHack365に参加し,修了してきました!!! sechack365.nict.go.jp

f:id:xryuseix:20210307000247p:plain

Q. SecHack365ってなんですか?

若手セキュリティイノベーター育成プログラム SecHack365は、25歳以下の学生や社会人から公募選抜する40名程度の受講生を対象に、サイバーセキュリティに関するソフトウェア開発や研究、実験、発表を一年間継続してモノづくりをする機会を提供する長期ハッカソンです。https://sechack365.nict.go.jp/document/

らしいです.要約すると

  1. ハッカソン×セキュリティ
  2. 一年間かけてものづくりを行う
  3. 日本トップクラスのエンジニアor研究者が 生徒:講師=2:1 くらい指導します

って感じです.さらに主催者は国立研究開発法人情報通信研究機構NICT)&総務省 と,かなりレベルの高い恩恵を得られます.

SecHack365の流れ

この画像の通りです. f:id:xryuseix:20210307001055p:plain https://sechack365.nict.go.jp/document/

応募&選考後,いくつかのイベントウィークがあり,最後成果発表会を行う,といった形です.

トレーナーやトレーニー

トレーナーはここから見ることができます. sechack365.nict.go.jp

ほとんどが国立研究開発法人情報通信研究機構NICT)の方で,それだけでもありがたいのですが,他に大学教授,NTTセキュアプラットフォーム研究所,デロイト トーマツ サイバー合同会社サイボウズ・ラボ株式会社,トレンドマイクロ株式会社など,超一流企業の天才エンジニア/研究者の方々が集まっています.この中には経営者や弁護士(実行委員)などもいらっしゃいます.

トレーニーは後ほど説明しますが,

sechack365.nict.go.jp

この作品一覧にある名前を検索すると色々出てくると思います.有名大学の方,Google Bughunterに認定されている方や,ハッカソンなどで活躍されている方などがいらっしゃいます.

応募時の話 & 作るもの

応募時の話

ここでも似たような話をしています. xryuseix.hatenablog.com

全てはここから始まりました.他の人のツイートを見て興味を持ちました.

SecHackに参加するためには課題を提出して,選考を通らなければなりません.倍率もなかなか高く,正直楽ではありませんでした.

f:id:xryuseix:20210307002547p:plain https://sechack365.nict.go.jp/requirements/index.html

締め切りは6/14ですが募集開始したことを全然知らなかったため,応募して課題が届いたのは6/9でした.選考課題に関してあまり言及できないのですが,色々サーベイしながら応募課題を埋めたので,時間的にはかなり大変でした.しかし,期日前日にはなんとかまとまり,提出できました.つまり,5日間ほぼ缶詰で課題の内容を勉強をしてました...

で,合格ツイートはこれです.ちょっと伸びました♡

コースは研究駆動コースを応募しました.

sechack365.nict.go.jp

理由としてはコースのやることがわかりやすく,かつ自分がやりたかったことに一番適しているからです.院生などに応募されたら僕のような実績無男は厳しいかとは思いましたが,チャレンジしてみることにしました.(なんとなく,受かりやすそうだったからとかは思ってません.ほんとです^^)

つくるもの

応募時に 「ソースコードの盗作を検知できるツールを作成したい」 と伝えました.ちなみに当時,お気持ち的には
(一般ソースコードでの盗作検知は難しそうなので競プロに限定しよう,競プロだけだったらある程度新規性あるしな,上手い感じのアルゴリズム考えればそれなりにうまくいくやろ) くらいのことを考えていました.

最終的にはこんなのができました

f:id:xryuseix:20210307003933p:plain https://sechack365.nict.go.jp/achievement/2020/index.html

ここだけの話,実行委員の某Aさんを詐欺師か何かかと思って電話番号検索した話は内緒です......

集合イベント

雰囲気はオフラインに比べて,悲しい感じでした...

イベントレポートなどはここをご覧ください.

SecHack365 2020 1st Event Week レポート | SecHack365
SecHack365 2020 2nd Event Week レポート | SecHack365
SecHack365 2020 3rd Event Week レポート | SecHack365
SecHack365 2020 4th Event Week レポート | SecHack365

第一回だけはブログも書きました. xryuseix.hatenablog.com

要約します.集合イベントで主にやったことは以下のものになります.

  • あいさつ・自己紹介
  • なんらかのテーマに対しての討論
  • セキュリティに関するお仕事や動向のお話を聞く
  • 作品の進捗報告

などを行いました.定期的に皆さんと会えるいい機会でした.(できれば沖縄とか北海道とか行きたかったです......)

研究駆動コース 輪講

我ら研究駆動コースでは毎週月曜日に輪講を行っていました.輪講はよくある研究室のゼミと同じようなものらしいです(僕は研究室配属前なのでよくわかりませんが...).具体的には進捗報告,論文紹介などを行いました.基本的には一回2時間くらいですが,日によっては4時間くらい長引くこともありました....

とはいえ,SecHackのもっとも成果に直結した,重要な活動はこれだったと思います.何度も言いますが,僕は研究室配属前で研究活動に関しては全くの素人です.SecHackと言う大舞台でありながら,素人でした.ですが,この輪講で研究の進め方や考え方などを少しは理解できたと思います.

ちなみに毎週やったスライドはこんな感じです. f:id:xryuseix:20210308001752p:plain f:id:xryuseix:20210308001816p:plain

これが最終回の画像です.
研究駆動コースの皆さん,一年間ありがとうございました!

f:id:xryuseix:20210308001453p:plain

その他のSecHackでよかったコンテンツ

  • 動画配信

オンラインならではのコンテンツでした.
NICTってどんな組織?/NICT紹介、SecHack365事業目的の説明」,「アイディア発想法その1・その2/発想法」,「習慣化&マンダラート ~ Why x Why x Why ~/習慣化」,「マインドマップを使ってみよう」など,今後のハッカソンに役立つ講義をトレーナーが事前に収録してくださって,いつでも何度も見れる状態になっていました.公開時,僕は少し忙しかったのですが,大学の授業と授業の間に10分ずつ,隙間時間に見れたりして非常に助かりました.

  • 北條先生の存在(コンテンツ?)

北條孝佳先生という弁護士のかたも実行委員としてご協力いただいていました.例えば北条先生による法律に関するセッションもいくつか開催していただけました.

タイトル「SecHack365で作るものについて(1)法律・倫理特別セッション」 内容「不正アクセス禁止法というセキュリティ分野でいろいろするときには無視できない、セキュリティの際に近いところが関係してくる法律について、具体的な例を引いてQ&Aをしながら解説していきます」
出演:園田道夫トレーナー
スペシャルゲスト:北條孝佳様
https://www.jurists.co.jp/ja/attorney/0806.html (typetalkより引用・一部改変)

それだけではなく,例えば私の研究「ソースコードの盗作検知」では著作権に関するアドバイスを手厚くいただきました.特に盗作ソースコードを募集する際,どのように利用規約を作って募集要項を公開するかに関して非常にご意見をいただけました.SecHackならではですが,非常に助かりました.

  • 第四回イベントウィークでのゲスト講演

またゲスト講演のお話ですが,第四回のイベントウィーク12/13ではゲスト講演が行われました.レッドジャーニー代表 市谷 聡啓さんとLINE 愛甲 健二さんです.開発手法やキャリアについての講演を聞くことができました.

オンラインでのトレーニー同士の繋がり

オフラインだったら夜通し開発などに勤しむので,トレーニー同士の繋がりがよくできると思います.今年はオンラインなのでその辺りがかなり懸念されてました.

しかし,オンラインならではの繋がりというものもいくつかありました.例えばオフラインだと「イベントウィーク中にだけ集まる関係」になりがちですが,今年は「オンラインで繋がり続けていることが当たり前」という感じでした.例えばイベントウィーク後にzoomのブレイクアウトルームを開放して,雑な飲み会?をしてました.他にも定期的に忘年会とかこういった会を開いたり,一緒にCTFに出たり作業通話してたりしていました.さらに,何人か誘って京都に集まって開発をする会もしてました.(なんか変に加工したら犯罪集団っぽくなってしまった...)

f:id:xryuseix:20210308022519j:plain

成果発表会

f:id:xryuseix:20210308023257p:plain

最後に,SecHack365一年を締め括る成果発表会を行いました.身内(1月)と外部(3月)で二回行われました.僕はこのようなスライドを作成し...

f:id:xryuseix:20210308023447p:plain

このような感じで動画を作成し,発表しました.

f:id:xryuseix:20210308023635p:plain

また,ポスターも作成しました.

f:id:xryuseix:20210308023857p:plain

一応,こちらで詳しく見ることができます.

sechack365.nict.go.jp

いっぱいあって探すのが面倒ならこっち

https://sechack365.nict.go.jp/achievement/2020/pdf/2020_28.pdf

ポスターに関しては成果発表会で株式会社NTTデータエグゼクティブセキュリティアナリスト 新井悠さんや,国立研究開発法人情報通信研究機構サイバーセキュリティ研究室長 井上大介さんなどにお褒めの言葉をいただきました.ありがとうございます. f:id:xryuseix:20210308024618p:plain

で,なんとかかんとかあって,無事終わりました.

t.co

そのうちこんな豪華な修了証が届くらしいです.やったね.

論文発表

しました.詳しくはこちらです.

xryuseix.hatenablog.com

成果発表会の時にICSSで座長をされてた三菱電機株式会社 木藤圭亮さんから「石川さん学部二年なんだけど,研究発表はそこらのマスター二年より上手かった」と言っていただき,非常に嬉しかったです!

SecHack365で学んだ今後大切にしたいこと

最後に,SecHackで学んだ大切なことを紹介したいと思います.

  1. 迷ったらどっちも試せ 「手法Aと手法Bどちらの方が上手くいくかな...」というシーンがこの一年間で何度もありました.その際トレーナーの方々に相談をしたのですが,その度にこのように言われました.どっちがいいのかなんてやってみないとわからない,わからないからこそどっちもやって良い方を使うが大切なんだと思いました.

  2. トレーナーの気持ちになって考えてみる 実験をする時,輪講の資料を作る時,発表する時,「秋山トレーナーなら〇〇の場合考えましたか?って指摘されそう」とか,「猪俣トレーナーならここの説明をもっと詳しくすべきと指摘されそう」とか,一旦トレーナーの(客観的な)気持ちになって考えると自分の研究のミスや抜け穴などが見えてくると思います.これによって自分の研究がより良いものになりました.

来年のトレーニー・応募者へのメッセージ

これが参考になるかならないかは置いておいて,僕から言えることをまとめます.

  1. 自分の実力は100%記述しましょう.もったいぶるだけ損です.
  2. 学習する習慣を付けましょう.毎日起きたら勉強机の前の椅子に座る習慣を付けましょう.
  3. 研究・開発ネタは保存しておきましょう.不便だったこと,夢の中で出会ったシステムなどどんなことでもメモしておきましょう.応募時にネタがあると非常に良いです.
  4. 応募期限を守るため,締め切り駆動コースに応募しないようにしましょう(?)
  5. 落ちる覚悟で構いません,とにかく応募をしましょう.

おわりに

7712文字も長々とお読みいただきありがとうございました.
SecHack365はセキュリティ系エンジニアを目指す一人の学生が一番輝く,成長する場所でした.皆さんも是非,来年以降応募してみてください!一年間ありがとうございました!!

大学二回生なのに研究会(ICSS)で発表しました

やったことの概要

ICSSで研究内容の発表しました.

www.ieice.org

今回は研究会初発表&初参加にもかかわらず二つの研究を行い,発表しました.

f:id:xryuseix:20210303020337p:plain

一つ目,「仮想背景を使用したリモート会議映像における秘匿された背景の再構築手法」に関しては辻 知希さんと一緒に研究を行い,衛藤将史さん(NICT)・服部祐一さん(セキュアサイクル)・井上博之さん(広島市大)にご指導いただきました.

二つ目,「プログラミングコンテストにおけるソースコードの盗作検知手法の実装と評価」に関しては僕が研究・ICSSでの発表を行い,服部祐一さん(セキュアサイクル)・井上博之さん(広島市大)・猪俣敦夫さん(阪大)にご指導いただきました.

そもそもなぜ研究発表を行ったか

私は6月よりSecHack365(目指せ!セキュリティイノベーター!| SecHack365)に参加しています.記事はこちらです.当初は軽い気持ちで興味ある&今やりたいことができそうという理由で,研究活動をやったことないにもかかわらず研究駆動コースに申し込み,合格しました.

そこで,「プログラミングコンテストにおけるソースコードの盗作検知手法の実装と評価」をテーマとして一年間(正確には250日くらいだった気がする)研究を行っていました.この辺の話は最終成果発表会(SecHack365 2020年度 成果発表会 2021.03.05(金)【ONLINE】 | SecHack365)後にブログを書こうと思います.

「仮想背景を使用したリモート会議映像における秘匿された背景の再構築手法」に関してはこちらの記事(AVTOKYO2020で登壇しました&裏話 - xryuseix’s diary progress)で研究の動機について多少語ってます.

SecHackでは研究の成果をポスター形式で一般公開します.(↓↓つい先日公開されました↓↓↓) sechack365.nict.go.jp

しかし,研究駆動コースとしては研究成果を外部に発表してこそ「研究が完了した」と言えるのではないでしょうか?(異論は認める)

ということで,外部発表をすることにしました.正直自分に出来るかかなり不安で半月くらい悩んだんですが,「指導教官の方々が日本トップクラスの研究者の方々なので,ちゃんと話を聞いてがんばればなんとかなるだろう」とか,「大学のGPAがカスなのでここら辺で実績取っておかないと研究室選びと院進が死ぬ」とか「なんかカッコ良さそう」とかの理由でやることにしました.

なぜICSSで発表したかというと,1月末にSecHackの成果発表が合って,2月の半ばにポスター締め切りがあったわけですが,ちょうどその後のいいタイミングで開催されたからです.ポスター作りながら論文を書いて,二週間後までにスライドと発表原稿や練習を行えるといったスケジュールでした.また,研究会のテーマが本研究とマッチしていたことや,日本語で論文を書いて発表も日本語であることや,SecHack研究駆動コースのトレーナーである笠間さんが幹事をされていることなどがあり,正直この研究会以外は考えられなかったです.(運良ければ沖縄にいけたんじゃないかとかいう話は内緒です)

前日までの話

実はスライドは二日前から作りはじめました. 二日前は大まかなスライド順序とかとだいたいいい感じにスライド作りを行い,前日に細かい整形や発表練習を行いました. 盗作検知の研究に関しては全てを,仮想背景の研究に関してはデザインを担当しました.

発表練習は6~7回*14分行いました.毎回舌が回らなくなって回復しての繰り返しが大変でした. 井上さんと猪俣さんの前で発表デモを行ったのは前日(当日)の24時ごろ,そこでいただいたアドバイスをもとに2時間くらいで修正をして,本番を迎えました.

当日の話

正直言って,発表自体は全く緊張しませんでした.自分としてはちゃんと練習したつもりで,かついろんな方々に励ましのお言葉をいただいていたので絶対に大丈夫って気持ちでした.

しかああああああああああし,質疑応答は話が別です.巷で聞く,「素人質問で申し訳ないのですが〜」「この分野に関しては素人なのですが〜」とかが怖くて,かなり緊張し,噛みまくりでした.ですが,基本質問をしてくださったのは三菱電機の木藤さんで,かなり優しい質問ばかりで非常に助かりました.以前Seccamp全国大会でもお合いしていたので,それもあって非常に安心でした.さらに,他のご質問者は「とっても面白い研究だと思います。」からはじめてくださって,落ち着きました.

↓こんな感じ

プログラミングコンテストにおけるソースコードの盗作検知手法の実装と評価」 f:id:xryuseix:20210303024020p:plain

「仮想背景を使用したリモート会議映像における秘匿された背景の再構築手法」 f:id:xryuseix:20210303024028p:plain

最後に

ご指導してくださった研究駆動コースのトレーナーの方々,アドバイスをくださったトレーニーの方々,SecHackという場を設けてくださった実行委員の方々,発表の場を提供してくださったICSS研究会の方々には大変感謝しております.ありがとうございました.

この成果をより生かせるようこれからも精進いたします.もし良ければ2年後の卒論,4年後の修論もご期待ください.

PS.サークルの顧問である毛利公一教授がたまたま僕の発表にいらしてて驚きました.

初めての確定申告を終えたメモ

初めての確定申告を終えたメモ

早めにやっておくもの

青色申告

なんか税金の控除が増えるらしいです.あんまりよくわかってないんですが,やっておくと払う税金が減るらしいです.
僕は5月くらいに開業届と一緒にやってたらしいですが,記憶にありません.

領収書・請求書集め

これは超絶大事です.これをちゃんとやってないと確定申告が100倍時間かかります(諸説あり)

とりあえず自分宛に集めておけばいいです.内容は書籍代とかで大丈夫です.多分.

領収書はなんでも集めておきましょう.書籍代とかケーブル代とかディスプレイ代とか業務に関わるものはなんでも集めておきます.よくわかってませんが,カフェで仕事してもそれは経費にできるらしいです.よくわかりませんが.

2月末にやるもの

必要なもの一覧

  • 領収書
  • 在学証明書(学生控除を受ける場合)
  • 請求書
  • 支払調書(僕は1月くらいに届いた,いらないかも)
  • 郵送される確定申告書(多分いらない)

作るもの

作り方

クラウド青色申告ソフト「やよいの青色申告 オンライン」を契約します.初年度は無料,二年目は8000円です.来年はどうしよっかなーwww www.yayoi-kk.co.jp

ログインページはこれ https://shinkoku.yayoi-kk.co.jp/Home

あとはこのソフトウェアに従います. ここの収入と支出に色々登録します.多分適当でいいです.金額さえあってれば内容は雑に描いても大丈夫です.ただ,科目はちゃんと書きます. f:id:xryuseix:20210226142925p:plain

で,あとは本当にOK,OKを押していれば確定申告書Bと所得税青色申告決算書が出来上がります.

提出

これを近くの税務署に持っていきます.すると源泉徴収されていた僕の場合4万円くらいが帰ってくるらしいです.多分.

その後

請求書とかは5年はとっておけって言われました.google driveにありますが,一応印刷しておいた方がいいです.