ISUCON2017参加記

akenshoさんとli_sakuと参加、最終スコア20万3000点くらい。最高得点は21万5000点くらい。(よく覚えて)ないです。 1日目5位?で最終順位20位でした。2日目ありえん魔窟みが深い。18位まで通過なのでギリギリとはいえ予選落ちは予選落ちです。

1年前:

  • よすぽとぽてちと参加し、gitリポジトリを破壊して正の点数が取れず終了「なんやこのコンテストは...」

3ヶ月前:

  • けんしょーさん「GO言語勉強しといて」ぼく「この一年MySQLとかちょっと触ったしいけるやろw GO言語もアメリカ生活どうせ暇あるやろwやったろw」

3ヶ月間:

  • アメリカ観光サイコー

帰国後:

  • GO全然わからん(絶望)

1週間前:

  • みんなでPixiv ISUCONで初練習する。めたんさんのpixiv isucon攻略記を見ながらakenshoさんがちょっとずつ便利なもの準備してるのにli_sakuとだらだらする。結局GOがまともに書けず。最悪です。

数日前:

  • コドフェスと本戦日程被っていることが発覚。しゃあないけど予選は絶対楽しいし頑張りたいし、通ったら考えよ。

本番開始前:

  • GOの変数宣言の仕方さえ分からないけど読めるし雰囲気は分かる。大丈夫。

本番途中:

時系列は適当。実際チームでやったことたくさん他にあるけど僕が携わった部分ばっか頭に残ってるため許して。

  • ぼく&さく「けんしょーさんサーバー設定とチューニングよろです」 けんしょーさん「304とか返せる秘伝のたれ貼りました」
  • ぼく「なんか公開鍵周りがバグっててgitにpushできない(大騒ぎ)」さく「ちゃんとエラーメッセージを見て判断して」ぼく「すみません」
  • とりあえず静的配信のwebapp書き換えよろです←さくさんに書いてもらう
  • チーム「配信する画像のミラーリングとか辛いしまずはDB+(Webapp+nginx)の2台構成にしちゃいましょう」
  • 暇やしindex貼ろう
  • は?なんだこのsleepは!?消そ!
  • 既存のDBに入ってる静的ファイルデータを用意するコードがGOで書けない...せや! curl しちゃおw
  • やったー静的配信できたー。
  • チーム「nginx(主に画像配信),(nginx+webapp),DBの3台構成にしちゃいましょう」
  • ぼく「けんしょーさんpprofの使い方教えて(泣きつく)
  • けんしょーさん「なんかslowquery動かん」ぼく「コード読めば多分OK」
  • ちまちま/messageとか/fetchのN+1問題っぽいの破壊していく。13万点くらいになってきた〜
  • ん!?fetchは加点しないってなんや!sleep復活させるぞ!
  • スコア21万超えたワオ
  • なんか暫定3位やんけやったー
  • sleep2秒にしたろ!←7万点!?点数下がった!?なんで!?
  • sleep1秒に戻そ!←3万点!?ファーwww
  • チーム「これもうわかんねえな。どうせベンチマークが混雑してて仕方ないやつやろ。21万のときのwebappでガチャ引いていい点数出たらやめるか」
  • 三人は幸せな20万点を取って終了(予選落ち)

反省点:

  • 慢心と準備。
  • 遅くなったのはベンチマークが原因ではなく恐らく僕たちのサーバーのリソースが何か悪いことになってたのが原因なので原因解析もきちんとせず諦めたのは本当に本当にダメダメだったと思います。
  • nginxに詳しくなりたいね。
  • GOでFizzBuzzはおろかHello Worldさえ書けないのがやばい。

良かった点:

  • 基本的にほとんどバグらなかったのでベンチマークで胃が痛くなるとかがなかった。
  • Pixiv ISUCONで仕入れた知識が役に立った。
  • 解析ツールは便利。

The 2016 ACM-ICPC Asia Yangon Regional Programming Contest 参加記

はじめに

今さらですが @a3636takoときひろちゃんと僕の3人チームDo Touch EverythingでMyanmarのリージョナルに参加していました.コーチは@threepipesさんです. 今年もやるかもしれないし,何かの知見になると思って書いときます.質問があったらTwitterで@kyuridenamidaまでどうぞ

URL:

https://icpc.baylor.edu/regionals/finder/ar-yangon-2016

なぜヤンゴン

全員大学4年で研究やプライベートが忙しく、 チーム練習時間が十分に取れていない状況でした。 チームとしての動きが10月の筑波は間に合わないと思ったので12月に開催されるミャンマーの予選に参加することになりました。

理由はいくつかあって、以下の通りです。

  • 治安がマニラよりは良さそうだったから(それでも心配してましたが,蓋開けてみればなかなか治安が良かった)
  • 近年急成長が見込まれる国であり、そのような国のIT産業を支える若者たちと触れ合いたかったから
  • イカれたコンテストに参加できそうだったから

準備

  • 結局研究が忙しくて練習時間が全然取れなかったのは痛いです。チームで5時間通して練習できたのが少なかったというのもある。
  • とはいえじわじわ各人の特性がわかってきて、チーム戦をすることで個人の最大値を超えることはできるようになった。
    • takoは英語が苦手といいつつきちんと題意を把握して詰めて人に説明するのがうまい。読むのがはやい。
    • きひろちゃんは実装は苦手だけど考察レベルでいえば僕よりはるかに多くの問題の解法を思いつける。
  • ライブラリを出発前日に整備したくらいです。
  • 正直いうてリージョナル3位くらい取れるやろとか本気で思ってた。

旅程まとめ

移動は全てチャイナエアラインを使った。

  1. 12/6 に関西国際空港から台湾桃園空港(3時間)
  2. 12/6-12/7 台湾桃園空港で空港泊 (乗り換えまで約14時間で日を跨ぐタイプだったので) ← 過酷だったからおすすめしません
  3. 12/7 ヤンゴン移動(台湾から4時間くらい?)
  4. 12/7 ICPC側が用意したバスでホテルへ、あとセルフ観光
  5. 12/8 プラクティス
  6. 12/9 本番
  7. 12/10 朝11時発の飛行機で帰国(今度は乗り換えがいい感じ)

登録

  • 普通にAcceptされた。
  • しばらく経ってから宿泊先とか飛行機の到着時刻をメールで聞かれたりしたので答える.これは空港からの案内をしてくれるためっぽい.

12/6 出発

  • 袋タイプのたけのこの里をおみやげに買った。
  • 台湾コーチにパイナップルケーキを日本アジア地区で貰ったので、お礼にどら焼きを買っていった。
  • 台湾までの飛行機では寝たり、きひろちゃんが紹介してくれた問題を解いたり、シンゴジラを見るコーチを見てたりした。
  • 台湾に到着してからは、一度入国審査を受けた。天候も悪く少し遅かったので、市内観光することは諦め、電源席で3時間-4時間くらい練習した。これは微妙だった。
  • 桃園空港の第2ターミナルだったのだが、下のフードコートのソファー席が24時間いちおう解放されているので、そこで仮眠を取っていた。
  • あんまし寝れなかった

12/7

  • 朝5時、ヤンゴンに行くための飛行機に乗るために起床。
  • 偶然同じ便だったようで、いつものNCTUのコーチに会う(何回目だろうw)
  • NCTUは3チーム+1コーチという計13人の大軍だった。
  • 飛行機乗る。CAさんがきさくで、おすすめ情報とかを雑談で手に入れる。オイリーだけど数日だから大丈夫っしょwとか、朝飯はミルクティーとパンがいいよみたいな話をされる。ふむ?
  • ミャンマー到着。ビルマ語を見て感動する。
  • 実は知らなかったのだれど、ICPCの人たちが丁寧にお出迎えしてくれる。人々の伝統衣装が綺麗。
  • 換金場所とかも案内してくれて、しばらくして全員が揃ってからホテルにバスで移動。
  • 今日は暇なので、観光しようと思い、最も有名らしいシュエダゴン・パコダに行く計画を立てる。ホテルからタクシー。ホテルのフロントの人がホテルの地図を描いたカードをくれた。戻るときはこれを見せろって。
  • ホテルからヤンゴン中心部は結構距離があり、相場は 7000キャット (700円) くらいって言われたけど、5000キャットで乗せてくれた。ミャンマーはタクシーにメーターがなく基本事前交渉です。
  • タクシーで1時間?くらいかけてシュエダゴン・パコダに到着
  • 確かに綺麗。金ピカである。
  • とりあえず散策できるところをぶらぶら歩く。仏様みたいなのがたくさん設置されている。
  • 写真撮って欲しかったので「写真撮ってくれますか?」って近くにいた女性2人組に言ったら撮ってくれて、2人の写真も撮りましょうか?って言ったら、together という単語が悪かったのか(たぶん)ナンパだと思われたらしく「友達待たせてるんで!」って去られた。なんとも言えない気持ちになった。
  • 正直バックグラウンドがわからなくて、ガイドいります?って入口で言われたのを、とりあえず断ったのを若干後悔した。景色として美しいという感想を抱いていた。
  • お寺から出ると、ヤンゴン市街地に行くためにタクシーを捕まえる。4000 キャットでいいよって言われた。安い。
  • 市街地に行くと、露店とお店と路駐と渋滞と人混みですごいことになっていた。
  • 治安は良いと聞いていたがやはりこわく、かばんを前に担いで慎重に移動する。
  • さっそく物乞いらしき子どもに服をやさしく引っ張られてちょっと焦った。
  • 歩行者信号が存在せず、車が通らない隙を狙ってみんな道路を渡ろうとするので正直混沌としていた。交通インフラが整備されてない印象を受けた。どうやら車は人を引かない程度に歩行者がいても遠慮せず進んでくるので、強気でうまく渡ることが重要らしい。
  • 露店はフルーツとかなんかいろいろ売ってたけど、おなかを壊す危険性があると聞いていたので食べなかった。
  • ヤンゴン市内、いくつか通りがあって、ちょっと生活感のあるところに迷い込んでしまい、少し不安になりながらウロウロする。ビンロウ(タバコみたいな扱いの存在)の吐き痕が結構いたるところにあった。
  • そんな感じで通りを間違えまくっていたが、事前にtakoが購入した地球の歩き方に書いてるお店をようやく発見。お昼ご飯を食べる。
  • 日本でいうビルマカレーのお店に行く。カレー感はないし、カレー粉使ってるならカレーでしょという日本人の命名なだけで現地の人はそう思ってなさそう。ただ、美味しい。油だらけを覚悟していたが、案の定油だらけだった。変な野菜とかがつきだし?で出される。
  • その後は露店とか、ヤンゴン市内のローカルマーケットを散策する。
  • 露店は日本のワゴンセール的な財布が2500キャットとかで売っていたり、ジーパンが同様に5000キャットいかで普通に売られてたり、すごく安い。持ってきた長財布持ち歩くの嫌だったので2500キャットで財布購入(使わなかったけどw)。
  • 最終的に、おみやげ屋さんを探して辿り着いた。

    • タナカの石鹸とか化粧品とかをお土産に買う。だいたい 1000キャット。
    • ミルクティーと味見して美味しかったピーナッツ菓子も買う。30パック入りで100円、ピーナッツ菓子のほうは30ピースで1000キャット。安すぎる。大量に買ったが1000円も使えなかった。
  • めっちゃフレンドリーだし海外の人だからといって高めにふんだくってくることもないし、治安のよさに感動する。

  • その後は帰るためタクシーを探しはじめる。
  • なんかタクシー斡旋みたいなおじさんに声かけられて、タクシー?って聞かれる。目的地見せていくらですかというと、10000キャットと言われる。「高すぎィ!7000 キャットにして」って言ったら「無理無理無理」みたいなこと言われたのでじゃあいいですって言ったら9000キャットと言われ、「うーん8000!」と言ったらまた「いやいやいや」と言われて、いいです他探しますって言ったら8500になり、やっぱ他探しますって言ったら、「しょうがねえなあ8000ならいいよ!」って言われるみたいなやりとりをした。正直安いからいくらでも良かったんだけど面白かったのでついつい交渉をしてしまった。ただ、相場より正直少し高いんやろなぁという気持ちになったため、もっと交渉上手にならないといけないと思った。多分,7000を死守しないとだめですね。そのために初手5000とか法外な金額ふっかけたほうが良かったんだろうか。
  • でもなんか日本語で様々な挨拶をしてくるおっちゃんとかもいて、まあ斡旋だし市内から郊外のホテルに行くの、客が捕まる率が低いよなあとかいろいろ考えると、別に損した気分にはならなかった。
  • 帰ったあとはホテルの近くにあったスーパーマーケットに行く。なんかセキュリティが厳重で、入り口に警備員がいて身体検査されて驚く。スーパーではあらゆるものが安く、酒税がほとんど存在しないのか酒とかはとても安く、現地フード的なのはε価格で購入できそうだった。
  • My Little Ponyの絵柄のノートがあったのでついつい買ってしまった。12個入りで250円、安いが開いてみると時間割とか書いてあって完全に女児向けだった。それはそう。
  • 帰ったあとは練習しようと思ってたけど,みんな疲れてしまっていたので寝る.

12/8 (ここから3ヶ月後に書いてるため忘却しまくってる)

  • 今日はプラクティス
  • ホテルまでICPCの人が手配したバスがきて,UCSYまで送ってくれる.
  • バスが韓国から輸入されたであろう中古車だった(どうでもいい)
  • 大学に着く.記念撮影して,現金で参加費払って,その後朝食をもらう.
  • 開会式まで暇があったので学生をめぐる.一番驚いたのはUCSY,コンピューター専門大学なのにほとんど女子学生ばかりで,男女比が日本と全く異なっていた.制服が伝統的な衣装っぽくて男女ともにキレイ.
  • 開会式が始まる.初コンテストデスみたいな話を聞く.あとは伝統芸っぽい踊りを見る.日本のアジア地区同様,各学校の学生の自己紹介フェーズみたいなのが行われる.
  • 開会式が終わればプラクティス.普通にパソコンルームみたいなところでコンテストをするらしい.ちゃんと風船はある.

  • プラクティスがスッと始まる.

    • 最適化オプション無いらしい.-Oくらいつけてくれや.
    • でも自分で #pragma GCC optimize (“-O2”) するのはいいらしい.公平性とは…
    • A:難しそうな問題 + B:嘘貪欲誘発系自明問題 + C:場合分け問題 が出題される.
    • おっミャンマー,日本よりはるかに骨のあるプラクティス出してくるやん.期待が持てる.
    • Bの問題概要は,いくつか文字列が与えられるので辞書順で最も大きいものを求めなさい.有名問題ですね.
    • a + b > b + aでソートして出力するとWAする.草.
    • 嫌な予感がしたのでa > bでソートしたらAC.大草原.これはやばい.
    • C,曖昧な部分があり(入力制約がきちんと書かれているのに入力制約に違反したものが与えられるからそのときの対処をしろみたいなの),WAを量産しまくる.これは単に我々がダメだった.
    • Aは概要覚えてないけど昔のヨーロッパ地区の難しい問題の再出題らしく,解法に悩みまくった.
    • A通してるチームがいる.すごい.
    • 1完で終わる.冷える.まあいいやってなる.
  • 終わった後,噂によるとAはnがめっちゃ大きいけど実際にはnが70なのに5未満とかのケースしか含まれてなかったらしい.おいおい.
  • ホテルに帰ってチーム練習.このときはめちゃくちゃ練習うまくいった.
  • ホテルではルームサービスでハンバーガー食った.高い(現地価格じゃない)だけあって美味しい.
  • 朝早いので寝る.

12/9

  • 今日は本番.
  • 6時45分バス出発は健康的すぎて辛いからやめろ.
  • 8時半からコンテストが始まる.
  • あまりにも辛かったのでこの部分を書いたのが7ヶ月後で,全てを忘却しているため書けない.
  • 唯一覚えているのは以下の事柄
    • ジャッジがバグっていた + 一位のチームはジャッジと同じ間違いを器用に踏んでACしていた(すげえ).
    • とても数分では普通解けない構文解析を開幕数分で解いていた謎の現地チームがいた.
    • doubleの仕様で理論上取れうる範囲が書かれた問題文はじめて見たわ.
    • 何回もクラー飛ばしてたら偉い人が現れて非公開情報をくれた(これええのか!?)
    • 海外のチームはジャッジがバグっていたり制約が曖昧だったり,どう考えても普通ならTLEしそうな解法が通る問題,謎の枝刈り・謎の工夫を編み出すのが本当に早く,雑草のような(本当に他に表現が思いつかない)タフさがあった.壁を感じたし見習いてえ.
    • 現地チームの最上位より海外チームの最下位の順位の方が上だった.一年目だし仕方ないかなと思ったと同時に,ICPCに大学関係者一同とても力を入れているようなので今後が楽しみ,東南アジアはベトナムとかタイも含めて急激にICPC力が伸びてきている印象.
    • 最後のほうは解ける問題で慌ててしまいクソハマりまくってかなりひどい順位に(18位とかそんなんだった).
    • こういうハチャメチャわくわくコンテストで大敗したの悲しいわ.
  • ホテルでパーティー
  • みんなフレンドリー,開催側も含めてみんなフレンドリー,なかなか楽しい.

12/10

  • ふー終わった終わった.
  • ホテルまでICPCのスタッフがきてくれて,お見送りしてくれる&タクシー取ってくれる.優しい.
  • 空港,出国ゲート通るまでキャット→ドルの変換してくれる外貨両替所が無くて苦労した.
  • さあ帰国!Myanmar→台湾→日本だ.フライトが少し遅れているらしい.乗り継ぎやべえな.
  • 乗り継ぎ急げ〜〜って全力疾走して,ようやく搭乗口にたどり着いたんだけど,おかしいな…パスポートがパスポートケースに無い.
  • どうやら乗り継ぎ時(つまり出国検査後),パスポートを紛失するというレアケースをやらかしてしまったらしい.
  • 日本帰国できない機運が高まる.最初は搭乗は難しいから,空港で過ごしてもらうことになるかもと言われていた.
  • 乗り継ぎに使う航空会社が同一の会社だったことで本人確認が出来ているということ,日本へのフライトであることなどから,特別に搭乗を許可された.まあ日本の入国管理局に任せることになるんだろうし,この判断は助かった.
  • 日本に帰国して特別な部屋で入国のための書類を書かされる.帰宅後,速やかに戸籍謄本とか送る必要があるらしい.
  • なんとか帰宅できた.最後の最後でやらかしてしまった.パスポートはパスポートセンターで失効してもらった.大変だった.

感想

  • ミャンマーはコンテスト以外はめっちゃおすすめです.みんな親切です.少なくともICPC関係者は親切でした.
  • コンテストは,日本の無菌室で育てられたみたいな良質コンテストに慣れてると辛いかもしれないけど,めちゃくちゃな問題をラッキーで通してワンチャンWF狙いにいきたい人にはおすすめです.

Django REST frameworkでセキュリティレベルをview毎に

Django REST framework 使ってセキュリティを強くしてると、何かしらのセキュリティがないapi叩くにも以下のエラーが出ることがある。

{
    "detail": "Authentication credentials were not provided."
}

解決法

view単位なら、

from rest_framework import viewsets, filters, permissions
class HogeViewset(viewsets.ModelViewSet):
    queryset = Hoge.objects.all()
    serializer_class = HogeSerializer
    filter_fields = (...)
    @detail_route(methods=['get'],
                  permission_classes=[permissions.AllowAny],
                  url_path='piyo')
    def piyo(self, request, pk=None):
        ...

みたいな感じで解決した。これはdetail_routeでコレータを使用した場合の例です。permission_classesを指定してあげる。ちゃんと権限は適切に。

ちなみにViewSet単位なら

from rest_framework import viewsets, filters, permissions
class HogeViewset(viewsets.ModelViewSet):
    queryset = Hoge.objects.all()
    serializer_class = HogeSerializer
    filter_fields = (...)
    permission_classes=[permissions.AllowAny]

みたいにclassのフィールドに書き足す。

Django REST framework JWT特有の現象ではないが、僕はJWT扱ってるときに困った(それまでセキュリティを指定してなかったため突然弾かれるようになってJWT特有の現象かと思って慌ててた。rest_frameworkの範囲だった。アホ。)

ubuntu 16.04 LTS に rstudioを入れようとして、「R Not Found: Unable to locate R binary by scanning standard locations」と出る

症状

rstudioをインストールした後、起動しようとすると。 "R Not Found: Unable to locate R binary by scanning standard locations" と表示される。

解決策

apt-get install r-base

なんかapt-get updateしてないと古いやつがインストールされるらしいんで予めしとくといいかも。

参考にしたやつ

support.rstudio.com

qiita.com

ubuntu 16.04 LTSのかな入力で長音(ー)が入力できない問題

またまたこの問題にぶちあたってしまいました。 インストールした当初(かな86)は正しく動作していたのに、気づいたら上手くいかなくなってたので奮闘した話。

症状

fcitx&mozcのかな入力(ローマ字でも)で、\キーを押したときの挙動が変になる。 具体的には、「ほーむ」を入力しようとしてとして「ほ「長音」む」と入力すると、「\ほむ」みたいな感じになって全くわけがわからない。

解決策

シフトキーを押しながら入力すると正しく動作するが、それは面倒くさい。 ということで、原因が何かを探ってみた。

どうやら\の挙動が変になるキーボード入力設定に一瞬でも切り替わったら、その\の挙動がmozcなどにも伝搬するらしいということが分かった(理由は探ってない)。IM(fcitx)を再起動すると治る。

これは、ログイン直後にデフォのインプットメソッドがmozcに設定されている間だけ正しく動作することから推測した。

ということで、インプットメソッド一覧にあった「キーボード 日本語(かな86)」を削除して、さらに規定のキーボードレイアウトを「日本語 - 日本語(OADG 109A)」にしてログインしなおしたら治った。

f:id:kyuridenamida:20161009103511p:plain

こんなかんじ。

振り返り

英語キーボードとかも\のキー設定をぶっ壊すっぽい。実際英語キーボード入れた後壊れた。

ところでとりあえず適当に「日本語 - 日本語(OADG 109A)」を選択したんですけど、これどれ選択するのが一番いいんですかね。

UbuntuにpycharmをLauncher(ランチャー)に登録する

pycharm.shをコンソールでもなんでもいいから起動したあと、起動中にランチャーに出てくるアイコンを右クリックして『Launcherに登録』を押せば良い。

Djangoでメールを送信しようとして出るsmtplib.SMTPAuthenticationError:

smtplib.SMTPAuthenticationErrorと出たらgoogleのセキュリティ設定が原因かもしれないので以下を確認してみましょう。

https://www.google.com/settings/security/lesssecureapps