カラクリサイクル

『輝かしい青春』なんて無かった人の雑記

今日の進捗

は特にない。


と言うか、今日は天気の加減なのか、あるいは昨日の疲れが残ってるのか、 結構ダラダラと一日を過した感じなので、VMware Player on NixOS とかの作業はあまりしていない。

ただ、その代わりに、

  • Nylas Mail を NixOS で動かしたり
  • あるいは skk 辞書の toolchain の パッケージ定義を書いたり

とかはしていた。


と言う事で今日は以上。もう風呂入って寝る

言語を問わず、Redux とか Flux っぽい事をするにはどうしたら良いか

と言う事について考えていた話です。


今日はメンタルの方の運動療法的なリハビリに通うために、午前中から夕方まで出掛けっぱなしで、 その移動の間に rebuild.fm の未聴を聴いたり、あるいは、Instapaper に貯まっていた未読記事を消化したりしていたんだけど、 その時に技術的な記事やら話やらを聴いていて、何が切っ掛けだったかは覚えてないんだけど、

そういや JavaScript の Redux とか Flux とかって、WebView に限って言えば、 別に DOM の Custom Events だけで出来るんじゃね?

と以前にも思いついていた事を思い出して、電車での移動中に色々調べていました。

それで、家に帰宅してから、コードを書こうとして色々と書いては消し書いては消しを行なって、 色々と頭の中の考えを整理した結果、

Redux とか Flux って、つまる所、こう言う事じゃね?

と、言う様なコードを Golang な擬似コードで書いたんですが、それが下記になります:

package application

type State struct{
    // your code here
}

type Updater interface {
    Update(state State) State
}

type UpdaterFunc func(state State) State

func (update UpdaterFunc) Update(state State) State {
    return update(state)
}

type Renderer interface {
    Render(state State) error
}

type RendererFunc func(state State) error

func (render RendererFunc) Render(state) error {
    return render(state)
}

type Application interface {
    Update(updater Updater) error
    Apply() error
}

func New(renderer Renderer, initial State) Application {
    // your code here
}

で、これはあくまで僕の解釈なんですが、Redux とか Flux みたいなの、 基本的には、

  1. State を食って新しい State を吐くヤツ (上記の Updater)
  2. State を食って何かしらの出力を吐くヤツ (上記の Renderer)
  3. あとは State を食って何かしたをするヤツをくっ付ける糊っぽいヤツ (上記でいう Application)

の三つさえ実装してしまえば、後は味付けの違いでしかないよなーとか思いました。

で、正直言うと、僕は React とか Redux は、最初の方の流行り出しの頃にちょっと齧った程度で、 JSX とかは兎も角、Redux とかはその後はあんまり触ってない感じで、現状どうなってるかはちょっと把握し切れてないんですが、 極限まで余分を削ぎ落すと、多分上記の様なコードになるんだろうなー、と勝手に思ってたりします。

あと、一時期 Web Components ベースの OnsenUI とか触ってた時に特に感じたんですが、 Web Components ベースの UI framework は、オフィシャルが提供している以外の React っぽいどとか使おうとすると、 なんか地味に相性が良くない感じな部分が有ったので、そう言った意味では、下手にライブラリで Redux とか Flux っぽい事をせずに、 Custom Events ベースで One-way Binding すれば良いんじゃないかなーとか思いました。はい。

本日の進捗具合い

とりあえず、

VMware Player on NixOS

の作業は、残り、

  1. VMware の Kernel modules をビルド出来る用にする
  2. ビルドした Kernel modules を適切に配置する
  3. 実際に動作するか確認する

という所まで来ました。

まあ、色々と気合いで作業してきましがた、あともう数歩で作業を完遂出来そうです。はい。

NixOS で VMware Player を動かそうと挑戦している

と言う話です。


まあ、NixOS で、しかも Linux Kernel 4.11 で、本当に動くんかいな、と言う問題も有るちゃあ有るのですが、 とりあえず今現在、 VMware Player を NixOS 17.03 with Kernel 4.11 で動かせないかなーと、色々挑戦しています。

それで、今日は途中で詰まったんで、一旦休憩して Fate/Grand Order してたら本日の活動時間を使い切った感じだったのですが、 とりあえず、

VMware Player のインストールイメージからインストーラーを展開し、 そのインストーラーに NixOS の作法に従った形でのファイル展開をさせる

という所までは出来ました。

ただ、それを前後して、

  1. patchelf で VMware Player の ELF 実行ファイルの interpreter の修正
  2. 恐らく、そのままで動作しないであろう VMware Kernel Modules へのパッチ方法
  3. あと、 VMware Player をインストールするために使った不要ファイルの消去方法

と言う辺りが課題になってたりします。特に (3) のヤツが。


で、その辺りの解決方法を試そうとしてたら、天気が下ってきて調子も下り、 そのまま悪循環になりそうだったので、それを回避すべくゲームやってたら、 日が暮れて寝る時間となったので、とりあえず今日の作業は現時点では終了しています。 と言うか、とにかくもうそろそろ寝ないと自分が限界なので、今日はもう寝る感じです。

まー、最近は夜の寝る前の薬を飲むと。自動的に眠くなる感じなので眠気には勝てない感じですね。はい


と言うコトで今日はそんな感じでした、はい。