kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

TiddlyWiki/Dev Quick Overview

TiddlyWiki - A quick Overviewを読む

TiddlyWikiはSingle Page Applicationだよ

  • JavaScriptで書かれ、GUIHTML5とCSS3で描画される
  • だからアプリケーションはシンプルさを保つことができ、従来のWebアプリケーションのように状態をエミュレートする必要がない

データの扱い

  • TiddlyWikiは外部のデータベースを使わず、JavaScript自体のデータ構造を使ってTiddlerをメモリ上に保存する
  • 追加のコアモジュールがそれをHTMLのdiv要素にして永続化する
  • 単一のHTMLページにアプリのコードも保存できる

このへんが興味あるところ
どんな風になってるのかなあ
そこまで読めるかどうかわからないけど

  • だからTiddlyWikiはオフラインでも使えるしnode.jsを使ってサーバ上で動くWebアプリとしても動く
  • サーバ側でテキストに保存することもできるしクライアント側ではローカルのデータをサーバと同期することもできる

マイクロカーネル

  • すべてはTiddler
  • アプリケーションのロジックは"application/javascript"とマークされたTiddlerに記録されている
  • これらはCommonJS互換のモジュール

CommonJSってなんだ
JavaScriptの標準みたいなものか
ECMAScriptとは違うものなんだな
CommonJSのモジュールとES6のモジュール、みたいな記事がいっぱい出てきた
そういえばTiddlyWikiJavaScriptはESのバージョンで言うとどのへんなんだろう
どこ見たらわかるの?

  • 全体としてはモジュールTiddler、データTiddlerといくつかのJavaScript関数・オブジェクトが木になっている
  • マイクロカーネルが最初に起動していくつかのオブジェクトや関数を作ったら、残りの部分はモジュールTiddlerとしてロードする

  • ブートカーネルが作るもっとも重要なオブジェクトは"$tw.wiki"

  • "$tw.wiki"はTiddlerを管理するデータ構造や関数を提供する

$tw.wiki.addTiddlerとか.deleteTiddlerとか.eachとかがある
このへんを見てみたらわかるのかな

データの永続化

  • デシリアライザはさまざまなソースからTiddlerをロードする
  • 現在のDOMツリーから新しいTiddlerをロードしたりとか
  • セーバ(Saver)はストア全体、またはTiddlyWikiアプリ全体を保存する
  • シンクアダプターは単一のTiddlerをストアに読み込んだり保存したりする

ユーザインタフェース

  • UIはWikiTextによって記述され、やはりTiddlerに記録される
  • これらのTiddlerが更新されると、"Selective Update"とよばれるプロセスがUIを更新する

モジュール化

First, SecondはあるけどThirdがないなあ
みっつめはプラグイン

基本要素としてのTiddler

  • なんでもTiddlerなので、アプリケーションにはTiddlerを管理したり表示したりする機能があればいい
  • プラグインによって機能を追加したり、なんなら既存のTiddlerやモジュールを置き換えたりしてまったく新しいTiddlyWikiベースのアプリを作ることもできる

Emacsみたいなものかもしれんね

TiddlerはTiddlyWikiの最小要素

  • プレーンテキストでもWikiTextでもJavaScriptコードでもJSONコードでもSVGイメージでもバイナリデータだっていい
  • JSONデータはさらにその中にTiddlerを持つことができ、複数のTiddlerを持つプラグインを作ることができる
  • 内部的にはkey:valueペアを持つイミュータブルなオブジェクト

Tiddlerの使いみちはいろいろ

  • アプリケーションのコード
  • 設定値
  • UIの状態を保存する変数
  • Wikiページ

だから・・・

WikiTextマークアップ

  • WikiTextはTiddlyWikiアプリを書くためのマークアップ言語
  • Markdownsをもとに、いくつかの機能を追加している

Markdownぽかったっけ?