Page 6 of 15

一日目はこちら

昨日(1日)は後輩の誕生日だったので飲みに行っていた。めでたい。

誤って授業に今日は行けなかった。悲しみがある:sadpanda:

去年も毎日よくわからない記事を毎日書こうとしてたけど、 前川さんに関する記事を書こうとして、

書けなくなったので止まった記憶。

今年もよくわからないの毎日更新する目標は立てるぞ。

気がついたら予選について何も書かないまま本戦を迎えてしまった。

isuconとはiikanjini Speed Up Contestの略で、高速化コンテストです。詳細はリンク先を掘ってもらえるとわかると思います。

うちのチームの予選については

SQL初心者の留年野郎がISUCON予選通過した方法チーム学生自治のメンバーとしてカレーを買いに行った話 #ISUCON

あたりを参照してください。

というわけで「チーム学生自治」という名前でISUCONの本戦に出てきました。

チーム名は、こういうの

というわけではなく、

みたいな感じです(Tweet中のチーム系はチーム名のタイポ)。

結果

結論から言うと、

学生チームは全員再起動テストに失敗し、失格となりました。 結果的には本戦の時間中ずっと寝続けて何もしなければ学生枠優勝して5万円が手に入ったという感じです。 途中で一度再起動テストは行ってそこでは問題なかったのですが、最後の再起動テストは行ってなかった、という感じです。 本戦中は点数的に負けるかなー とは思っていたのですが、Failで失格となるとは思ってなかったので、 :sadpanda:。

とった戦略は、
APIの呼び方とかが5種類しかないのにDBに入ってたので、展開してしまったのとか(私が書いたのですがバグらせてつらかった)、
parallelというgemでAPIリクエストを並列化して呼ぶようにしたこととか、
nginxとunicornのプロセスを増やすとか、
アクセスログを眺めてみたら意外と静的ファイルにもアクセスが来ていたので、nginxに返してもらうこととか、
accept-encodingにgzipが入っていたので、gzip_staticで配信したとか、
ぱっと思いつくのはそのへんです。

使用言語はRubyですが、golangだと初期実装が10倍ぐらい点が高いと聞いてつらい気持ちになった。 tenki APIが遅かったのでどうにかならないかとずっといろいろ見ていたら Last-modifiedヘッダが付いてるということまでは気づいていたのに、 If-modified-sinceを思いつけなかったのは反省点っぽい(Failしたこと以上の反省点はないが)。 RACK_ENVがdevelopmentであったということを聞いた時はなるほどなぁ という感じでした。

以下雑なものです。

ここより上も雑でしたが。

最近手元のWindowsマシンで作業することをほとんど諦めて、その都度家のサーバやGCPのプリエンプティブVMやKMCのサーバで作業しています。

本戦参加者に配られた名刺なのですが、自分の描いたイラストがいい感じに名刺にされてて感動した。 別のイベントに持って行ってもいいぐらいかもしれない。

懇親会では食べきれないほどの寿司とピザとビールが出た。

次も出るぞ!!

貴サークルは木曜日 東地区 "ム" ブロック 55bに配置されています。

貴サークルは木曜日 東地区 "ム" ブロック 55bに配置されています。

Piet本を出します。出します。 前回のC88で出したペーパーについてはこちらをご覧ください。

サークルカットです。
サークルカット

カタログです

ブログを書くまでがYAPCです。

## 追記スペース ##

2015/10/30 追記……

ひ~~ ぜんぜん書けていない……。 とりあえず何も書かないよりはマシなので少しだけ書きます。

https://github.com/bradfitz/talk-yapc-asia-2015 が個人的にはかなり興味深かったです。 Golangの最適化をするときはとりあえずここを見ながらやります。 このトークです。

hnagaminさんのトークで私のPietのアレが少し言及されていました。

## 追記スペース ここまで ##

もうすぐ一月だよ?

タイトル通りなので簡単に。

C88でPietに関するペーパーを頒布しました。無料配布です。 レポジトリに行けば歴史が見れますし、ここにPDFがあります。 また今回/piet/を新しく用意したので、なにか書くかもしれません。

2日目に友人がサークル参加していたところに置いてもらっていただけなので、すごくアウェーな中の頒布でした。 三日目のKMCのブースでも来た人に押し付けてもらっていたので、そっちで見かけた人のほうが多いかもしれません。 そもそも20枚か25枚しか刷っていないので、見かけていない人のほうが多いかもしれません。

また、C89に応募しました。受かったらPietに関する本を懲りずに出す予定です。需要……。

申し込み書を会場で買ってもらったのですが、その次の週のYAPCが終わるまでの間、東京に滞在するのにもかかわらず京都に買った同人誌とともに送ってしまったので、 あわてて通販で買い直したという悲しみを背負った応募です。 これで落ちていたらかなしいなぁ。

もし落ちていたら冬は18きっぷで帰ってると年跨ぐし、行かなくてもいいかなぁ という気分です(予告なく変更の可能性があります)。 最近は駅メモのおかげで電車に乗りたい気持ちが高まってるし、こんなこと言っていても行くかもしれないですが。

最近バイトでGolangを書いてみたりしてるのだけれど、Golangへの細かい不満はあるんだけど、 今回のは小さな不満がどうでも良くなるような感じの不満だ。

はじめに

GoogleのAPI扱ってたら、%2Fを含んだURIにリソースが置かれて、それをGolangのnet/httpで取りに行こうとしてたら、何故かうまく行かなくて、 fmt.Print(resp.Request.URL.String())してみたら、なぜか%2F/に直されていたので、それに関するツイート。

あきらかにバグだと思ってググってみたら、仕様らしくて、Won't Fixらしい。

こういう時の対処法を教えて頂いて、その通りに修正したら上手く行くかと思い、次の時に試してみた。

しかし

Opaqueを書き換えて、狙ったところにリクエストを送ることには成功したものの、 そこから307リダイレクトされた先に欲しいコンテンツが有る(言ってしまうと、Google Cloud StorageのAPIです)。 そしてそのリダイレクトする時にもまた%2F/に書き換えられてしまい、思ったところにリクエストを飛ばしてくれない(これもRequest.URL.String()を見て判明した)。

HTTPクライアントにリクエストハンドラ的なものがあるとgolang.org/pkg/net/http/を眺めていると気づいたのだけれど、

なような感じでできなさそうな感じである。

しょうがないので今のとこ、

cmd := exec.Command("curl", "-L", uri)

のようなひどいコードでごまかしてるが、何とかする方法は無いのでしょうか。誰か教えてください。 流石に何か方法が無いなら完全に壊れていると思うし、何かあるとは思うけれど、見つけられなかった……。

追記

CheckRedirectでリクエストを書き換えることはできそうな感じだったけれど、 そこのリクエストには既に%2F/に書き換えられて破壊されたURIが格納されていた という感じでした。

一応そこから心のこもった置換で(%2Fの使われている場所は大体予測できる)もとに戻すことはできそうな感じだけれど……。 なんとかならないのかなぁ……。

前回に続きPietです。

GCDを表示するPiet
こんな感じのものを、

INN
DUP
INN
DUP
PUSH 3
PUSH 1
ROLL
GREATER
JEZ S
PUSH 2
PUSH 1
ROLL
LABEL S
# ここでStackに2つ入っていて、大きいほうが上
PUSH 2
PUSH 1
ROLL
DUP
PUSH 3
PUSH 1
ROLL
# 小さい方は使うのでコピー
MOD
DUP
JEZ END
PUSH 2
PUSH 1
ROLL
JMP S
LABEL END
POP
OUTN

こんな感じのコードから生成するようなものを書きました(上の画像は見やすいように10倍に拡大してあります)。

レポジトリ: nna774/piet-automata

最近KMCの部員たちが狂ったようにPietを描いている(狂っていると思う)。

Pietとは、Wikipediaとか解説ページ(和訳)とかを見てもらえばなんとなくわかった気がするけどよくわからないと思う。

部員が作ったおそらくいちばん詳しい日本語文献です。

Pietのエディタを作った話 from 京大 マイコンクラブ

何を作ったのか。

部員が手でPietのコードが正しく動くかテストしているのを見て、大変そうだなぁ と思ったので、テストツールを書きました。

nna774/piet-testutils

Pietのソースコードを受け取って、それを実行して、期待した挙動をするかどうかをテストしてくれます。

以下の様なソースコードがあります。

Piet ソースコード
Created by Hideaki Nagamine(https://github.com/1995hnagamin) Creative Commons BY-SA 4.0

入力として数字を一つ取って、0になるまで2で割り続けてその過程を出力するプログラムです。 6を入力とすると、6→3→1→0という風に行くので、6310と出力して欲しさがあります。


var cases = [
  {
    name: '6',
    desc: '6から始まる',
    input: ['6'],
    expect: '6310',
  },
  {
    name: '18',
    desc: '18から始まる',
    input: ['18'],
    expect: '1894210',
  },
  {
    name: '42',
    desc: '42から始まる',
    input: ['42'],
    expect: '4221105210',
  },
];

みたいな感じでテストケースを書いてテストを書いて、テストをすることができます。

需要

先月は1記事も書いていないようで。

めっちゃ久しぶりに

いかづち
いかづち by nonamea774 on pixiv

描いた。

結果

その他

今気づいたけど、Pixivの埋め込みのためのJavascriptがhttpで提供されてるから、これ、きちんと埋め込み表示されないですね。どうしよう。
→ 自分でそれっぽく適当にアレした……。https対応してほしい。

関係ない

今日の朝9時にうるう秒の挿入が入った。 自分の身の回りでは障害起きないだろうなーと思ってたらカゴヤで障害発生していたらしい。

Page 6 of 15