トップ 最新 追記   RSS 1.0 FEED  

Journal InTime


2022-10-18 (Tue) [長年日記]

_ NaCl Blog Hubを作ってみた

開発チームの技術ブログまとめサイトを作って定期デプロイを設定したという記事を参考にNaClのメンバーのブログのまとめサイト(といいつつ今のところ日記しか登録されてない)を作成してみた。

デプロイ先はCloudflare Pagesにしてみた。

Build configurationは、

  • Build command: yarn build && next export
  • Build output directory: /out

にして、依存関係のエラーが出たので環境変数NODE_VERSIONを 12.22.0 に設定するようにしたら上手く行った。

CloudflareでもDeploy hookが使えるので、上記の記事のワークフローを少し修正してGitHub Actionsで毎朝5時にデプロイするようにした。

name: deploy website
on:
  # 動作確認用に、手動でジョブを開始できるようにしておく
  workflow_dispatch:
    inputs:
      ref:
        description: branch|tag|SHA to checkout
        default: "main"
        required: true
  # 5:00に GitHub Actions が実行される
  # 実行の際に参照されるブランチは上記の default で指定したものが使用される
  schedule:
    - cron: "0 5 * * *"
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          ref: ${{ github.event.inputs.ref }}
      - uses: actions/setup-node@v3
        with:
          node-version: "16"
      # 投稿内容を更新するためにVercelのDeploy Hookを叩く
      - name: Recreate all posts
        shell: bash
        run: curl -X POST ${{ secrets.CLOUDFLARE_DEPLOY_HOOK_URL }}

手動ではGitHub Actionsからデプロイできたので、明日の5時にこの記事が追加されるはず。 しかし、今気付いたけど、GitHub ActionsのcronのタイムゾーンってUTCだったりするんだろうか。

追記: UTCのようだったので 0 20 * * * に修正した。


2022-10-25 (Tue) [長年日記]

_ Textbringer 1.2.0 リリース

Textbringer 1.2.0をリリースした。

今回からRuby 2.6をサポート対象から外して、コマンド名も textbringer から txtb に変更したので注意。 txtb も若干タイプしづらいけど、自分の手元だと tx<TAB> で補完されるのでまあいいかな、と。


2022-10-28 (Fri) [長年日記]

_ Rubyで理解する統計解析の基礎: 1章〜2章

サンプルコードをRubyで書き直しつつPythonで理解する統計解析の基礎を読んでいる。 Python版のサンプルのforkにRuby版のnotebookを追加していく予定だけど、途中でRubyで書き直すのは挫折しそうな気が……。

環境

  • ruby 3.2.0dev (2022-09-26T05:44:54Z master a8ad22d926) [x86_64-darwin21]
  • iruby-0.7.4
  • numo-narray-0.9.2.1
  • numo-gsl-0.1.2
  • daru-0.3
  • charty-0.2.12

1章(notebook

numpyの代りにnumo、pandasの代りにdaruを使用してだいたい問題なかった。 ただ、index_col相当の機能がDaru::DataFrame.from_csvにない(多分)せいで、 df.shape はインデックス分だけ列が増えて [10, 6] になってしまった。

2章(notebook

2章もmatplotlibの代りにCharty(バックエンドはplotly)を使ってだいたい書けたが、いくつか細かい問題が。

  • IRubyやdaruに浮動小数点数の出力の精度を指定する方法がなさそう。
  • Numo::NArray#[]で、 beginless range(...10)が使えない。
  • Numo::DFloat#varは不偏分散で、標本分散を返すオプションや別メソッドはなさそう。
    • Daru::Vector#varianceも不偏分散だが、variance_populationという別メソッドがある。
  • Numo::GSL::Histogramにデータをまとめて渡せない(使い方が悪いだけかもしれないが)のが効率が悪そう。
  • リスト内包表記の代りにstepを使ったが読みにくい。
  • Chartyで目盛りなどの細かい指定や、異なる種類のグラフの重ね合わせができない。箱ひげ図を縦向きに描く方法がわからない。

箱ひげ図

自分が使い方を知らないだけかもしれないので、「こうすればできるよ」というのがあったら教えてください。


2022-10-30 (Sun) [長年日記]

_ Rubyで理解する統計解析の基礎: 3章

numo-gslにpolyfitがなさそうなのと、rb-gslのインストールにRuby 3.xだと失敗するので、3章の途中からあきらめてPyCallを使った。

poly_fit = Numpy.polyfit(english_scores, math_scores, 1)
poly_1d = Numpy.poly1d(poly_fit)
xs = Numpy.linspace(english_scores.min, english_scores.max)
ys = poly_1d.(xs)

だとysがpoly1d([37. , 37.85714286, 38.71428571, ... になってしまって関数が適用されないので

ys = Numpy.array(xs.to_a.map { |x| poly_fit[0] * x +  poly_fit[1] })

としたけど何かもっといい方法がありそうな気がする。

10/31追記

Numpy.poly1dは関数風のクラスを返すようで、

poly_1d = Numpy.poly1d.(poly_fit)

のように .() を使用したら poly_1d.(xs) で期待した結果を得られた。 クラスなので、 Numpy.poly1d.(poly_fit)Numpy.poly1d.new(poly_fit) でもよいようだ。