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

ポジローぽけっと

昨日より今日、今日より明日を信じて、トライトライ

第四十六回スパルタンプログラミング(合宿)

やりたいこと

  • stream stateを理解し、いつ送受信が起こるかをはっきりさせる

やったこと

08/08 移動日 16:00-24:00

早朝チャリトレ行かず、たくさん寝てやった。 先週実家に顔出したので、お盆は帰らず名古屋でプログラミング合宿。

  • stream stateを変更するタイミングはpayloadのデコードに決めた。
  • いっしーの指摘をうけautomake, autoconfを導入。

08/09 2日目 11:00-23:00

よくねたので、集中力満点!と言っても、エンジンかかったのは17:00、スロースロースターター

  • automakeの復習
  • stream stateの変更関数を実装した。
    • PUSH_PROMISEの送受信でpromised stream idのstream stateをidleからreserveに変える必要がある。
    • END_STREAMフラグはDATA, HEADERSにのみある。
  • server設計見直し(半年かそれ以上ぶりに眺めるけどひっでーな)
    • 変数名直し、関数分割
      • InitializeServerの整理途中まで、listen_socketの初期化の整理が中途半端でmakeは通るがbad file scripter。
  • メモ
    • defineのスコープは.cならその記述ファイル内、必要でない限り.hに書くな!バグの元
  • その他

08/10 3日目 09:30-23:30

エレーベーターがメンテナンスで止まるので、止まる前に到着。

  • 引き続きserver設計見直し

08/11 4日目 11:00-22:30

  • ブラウザにレスポンスを表示させたい!
    • ごりごりコードだけど、レスポンス出せたー!ミスは2つ。
      • frame headerのlengthを32bit->24bitへするときのhtonl後のビットシフト抜け
        • これは切り出して関数化してしまおう。済
      • hpackのEncodeLiteralHeaderfieldの際のindexing typeの指定忘れ
        • indexing typeを決めるロジック実装を先送りしていたために起きた。が、指定忘れに気づけるようになってないことに問題あり。
          • 対策:assertでチェックさせるようにした。
        • 外側から使って分かったけど、hpack.cの結合テストをしたほうがよい。
  • レスポンスが出せたので、ごりごりを直す。どうやろう。
    • recv, sendの関数に切り出してみた。もう少し考えよう。
  • http2クライアント
  • sakamoto ryuichi
    • aqua

08/12 5日目 11:00-

07:00に目が覚めそこから寝れなくなり、09:00-10:00で二度寝をかました朝。 きのことたけのこをセットで買ったら、糞やろう呼ばわりされた朝。

疲れる朝だな。やれやれだぜい。

  • 課題
    • streamへのread, writeをイベントドリブンで動作させたい?
    • イベント発生時のデコードとその内容処理の整合とり?
  • 対応のため仕様検討
    • 読むものがあったら、丸っとssl read。
    • 読んだものを処理して書くものをつくる。Decode->Process->Encode
    • 書くものがあれば、ssl write。
    • 指摘
      • 読むものがぶつ切れになってたときの整合とり。by いっしー
      • コネクションが複数になるときを念頭に置くこと。by いっしー
  • Nujabes
    • Kumomi
    • feather

08/13 6日目 14:00-

ねすぎたつもりはないが、ねすぎ。久しぶりにDeli飯を朝食にする。たけのこがおやつ。 仕様は一通り考えたものとして整理、実装を始める。

  • 実装
    • 考えながら実装してたら一日あっというまでした。Decode後の処理部分の書き方が納得いくように書けない。
  • NOTE
    • A non-blocking lexing toolkit for Scala in less than 800 lines of code, from regex derivatives
      • lexでblock?
        • bufferへの読み込みはnon-blockingだから、そのbufferをわたせばいいのでは?
        • 変なのがきたら、lexに渡す前に蹴り返せばよい?
          • ex. headerがでかいのはmax header list sizeがconnectionの設定にあるので、設定値超えたらoutとするとか?
        • 僕の知らないことは多いのでどっかで問題に気づくかも。
    • newとdeleteが対

08/14 7日目 10:30-23:30

02:00に寝るも06:00に爽快に目覚める。昼間絶対眠くなるわ! 僕は器量が小さいことをしみじみ悟った。

08/15 8日目 最終日 12:00-22:00

  • 実装
    • frameをタスクとして積む機構の実装
      • QUEUEでリングバッファを使って実装することに。
    • 一度に処理するフレーム上限を設定できるようにする?
      • QUEUEのバッファ長の設定で可能になった。
  • はまり
  • 疑問
    • nghttpを使ってアクセス書けるとACKがたってると"SETTIGS expected"が返ってきてConnectionが確立できない。
      • lib/nghttp2_session.c の4861-4862行目でそうなってる。
      • 設定送ってきているのだけれど、serverがACKした場合Connectionが確立できない。
  • NOTE