Weekly report 2017-W32

2017-W31-6 (Sat) から 2017-W32-5 (Fri) までの日記。

ニュース・知ったこと

Firefox 55 リリース

Content process の数を設定画面で変更できるようになったりとか、パフォーマンスの劇的な改善とか。 WebVR サポートとかは個人的には当面使いそうにないのであまり興味ない。

Firefox はいいぞ

GNU Social nightly update

  • 586aaa596e2277a2c4bea9cae476014a2837a41d...090f4a9474c641d4c78170eb952976f22f798c06 · gnu.io / gnu-social · GitLab
    • Mastodon が Salmon 関係で返すらしい 201 ステータスコードへの対応。

                        diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php
      index 18e8539eb4aa..7f7f04c50a60 100644
      --- a/plugins/OStatus/OStatusPlugin.php
      +++ b/plugins/OStatus/OStatusPlugin.php
      @@ -1498,9 +1498,11 @@ class OStatusPlugin extends Plugin
                   return true;
               }
      
      -        // 200 OK is the best response
      -        // 202 Accepted is what we get from Diaspora for example
      -        if (!in_array($response->getStatus(), array(200, 202))) {
      +        // The different kinds of accepted responses...
      +        // 200 OK means it's all ok
      +        // 201 Created is what Mastodon returns when it's ok
      +        // 202 Accepted is what we get from Diaspora, also good
      +        if (!in_array($response->getStatus(), array(200, 201, 202))) {
                   common_log(LOG_ERR, sprintf('Salmon (from profile %d) endpoint %s returned status %s: %s',
                                       $magic_env->getActor()->getID(), $endpoint_uri, $response->getStatus(), $response->getBody()));
                   return true;
                      
      090f4a9 での変更。 統一性なさすぎて正直笑う
    • INSTALL ファイルの更新や細々した修正。 どうも更新された INSTALL ファイルによると、 GNU Social の nightly は既に PHP 7 に対応していたらしい。

    • queue daemon のスレッド数を決定する $config['queue']['threads']lib/default.php に明示的にリストアップ。 デフォルトではプロセッサ数が使われるらしいので、鯖缶は何もする必要はなさそう。

    • あとは XML 宣言のあとに改行入れたりとかログ追加とかの小さな変更。

  • 090f4a9474c641d4c78170eb952976f22f798c06...d61375cb7fd9e3ac2dbba2b22d0d6461fb753892 · gnu.io / gnu-social · GitLab
    • WebFinger あたりの修正(詳しく知らず)。 group 機能でもユーザ名と同じようにサーバのドメインを付けて区別できるようにするための修正と、それに伴うパラメータ追加とかそんな感じのやつっぽい。

    • あとは "HubSub" でなく "WebSub" を使うという(ログメッセージの)用語変更。

cloud-dl

Nextcloud鯖を立てた - マツダイアリーで紹介されていた。 めっちゃ便利。 これでサーバのバックアップを、ラップトップを経由せずオーンクラウド個人鯖に直接送れるようになった。

"No maintenance Intended" バッヂ

"No maintenance intended" バッヂを GitHub の README とかに貼れるよ、みたいなサイト。

ブラウザでブックマークするとサイト自体がメンテされてないように見えてややこしいし、サイト末尾に This project is maintained and is on GitHub! とか書いてあって笑う。

私的活動

GNU Social のコンテナを Debian jessie から Debian stretch へアップデートした

INSTALL ファイルの更新で気付いたが、 nightly が既に PHP 7 に対応しているようだったので、これを機に Debian も新しいものを使うことにした。

変更は以下のとおり。

  • パッケージ名の変更
    • jessie では php5-foo のようになっていたが、 stretch では php7.0-foo のようになっている。
    • 私は現時点では以下のようにパッケージを指定している。
      RUN apt-get update -q && apt-get install -y \
          php7.0-bcmath php7.0-curl php7.0-exif php7.0-gd php7.0-intl \
          php7.0-mbstring php7.0-mysql php7.0-opcache php7.0-readline php7.0-xmlwriter \
          php7.0-fpm nginx-full rsync php7.0-gmp php7.0-json \
          git-core make gettext \
          curl php7.0-cli \
          && apt-get clean \
          && rm -rf /var/lib/apt/lists/*
      Dockerfile 抜粋
    • これに伴って、 php-fpm のサービス名も php5-fpm から php7.0-fpm になっている。
  • php の関連ファイルパスの変更
    • 設定ファイルは、 /etc/php5 以下にあったディレクトリ群が /etc/php/7.0 以下に移動している。
    • php-fpm のソケットのパスは、デフォルトで /var/run/php5-fpm.sock だったが、 /run/php/php7.0-fpm.sock に変更されている。

致命的な変更などはないので、頭を空っぽにして追従すればよい。

私の環境の場合、変更すべき記述が Dockerfile 、 GNU Social 用の nginx 設定ファイル、コンテナのスタートスクリプトなどに散っていたので、変更洩れでしばらく 502 エラーを出してしまった。

進捗: last-progress1

last-progress1 は、ゲームにしたい予定の何か。 今のところは静的な FBX のビューアの域を出ない。

  • Merge branch 'feature/allow-meshes-with-no-diffuse-texture' into feat… · lo48576/last-progress1@fc7ad3d
    • 対応する diffuse テクスチャの存在しないモデルについて、白 1x1 px のダミーテクスチャを用意し使用する。

      色を白としたのは、 fragment shader において color = VertexIn.diffuse_color * texture(diffuse_texture, VertexIn.diffuse_uv); のようにすることで、条件分岐を回避できるからである。 diffuse テクスチャの有無での分岐は vertex shader のみで行われ、テクスチャが存在する場合は Vertexin.diffuse_colorvec4(1.0) になり、存在しない場合は VertexIn.diffuse_color が頂点色を持ち texture(〜)vec4(1.0) を返すようにした。

    • diffuse テクスチャが存在する場合の UV 座標と、存在しない場合の頂点カラーを、同じ変数 (diffuse_color) で保持することでサイズを節約。

  • Merge branch 'feature/load-clusters-weights' into feature/limbnodes · lo48576/last-progress1@63cdb3c
    • cluster の情報を FBX から読み、 Geometry(Mesh) ノードとは別に保持する。

      所有関係としては Geometry(Mesh) ノードが Deformer(Skin) ノードを子に持ち、その下に SubDeformer(Cluster) ノードがあるという木構造になるので、意味だけ考えれば cluster は geometry に所持されるべきである。 しかし、 FBX におけるメッシュは面ごとに異なるマテリアルを使用することが許されており、私のコードではそのようなメッシュについてマテリアル毎にサブメッシュへと分割する戦略をとった。 その結果、複数のサブメッシュが共通の skin や cluster を参照することが有り得るため、所有をさせないように実装しなおした。 (これが last-progress1/src/model/fbx/mod.rs のコード削除部分 である。)

    • vertex shader において cluster のインデックスと重みを受け取り、反映させる。 (last-progress1/src/default.vert)

今週は、ボーンを使ったアニメーションで用いられる行列と頂点の対応と重みづけ (FBX 用語では "cluster") のロードを実装した。 ただし、これだけではアニメーションはできない。 ボーン(あるいは関節、ジョイント)をロードし、 cluster とジョイントを関連づけて、そのうえでジョイントに対して適切な姿勢変更を適用してやることで、やっとメッシュも動かすことができるようになる。 よって、ここからの実装が完成しなければ cluster のロードにバグがあったとしても発見できないかもしれない。 本番はここからだ。

モデル座標の原点と各 cluster に、 XYZ 軸を表示した。
モデルの原点(足元)と各 cluster に、 XYZ 軸を表示した。 これはあくまで cluster の姿勢行列のみを反映したもので、関節情報を解釈しているわけではない。

また、デバッグ用に、 XYZ 軸を RGB の色で表示できるようにした。 これに伴い、シェーダ周辺に変更を行った。

感想

  • コミケ行きたい人生だった。

    • ラップトップがそのうち壊れるはずなので、買い替えのための資金を貯めなければならない。 よって金がない。

  • ぼちぼちサークルでの C++ 講習会の資料を書き始めないと……