from Kozaneba開発日記2021-09-02 2021-09-03Kozaneba開発日記

行政文章のMarkdown化についての一連のツイート、30万インプレッションくらいあったのだけど、自分のアクションに引き寄せたツイートをしてくれる人もいて、これぞシビックテック的な文化だなと思い嬉しくなった。Ask not why nobody is doing this. You are the “nobody”! https://twitter.com/hal_sk/status/1433552759593189377?s=21

  • Scrapboxのコンテンツをこざねとしてインポートする機能を自分が必要だから作るのだけど、同様にMarkdownもインポートできるといいのかも

自動レイアウト、よく考えたら位置の更新で保存するのではなくユーザの操作で保存する仕組みだから自動保存をオフにしなくてもできるな

リリースノート

  • クラウド保存をONにする際に、編集権者をそれを行ったユーザ一人にする修正
    • ユーザXが作成してリードオンリー共有したBaをユーザYが開いて別名保存した際、Xが編集権限を持っているという情報ごと保存されていた
    • このため、このユーザYの保存したBaがユーザXの場一覧に表示され、書き換えられる状態だった
  • ブラウザのIndexedDBに自動でバックアップする
    • 現在はデフォルト: オフ、しばらく自分で使ってからデフォルト: オンにします
  • バックアップデータを新しいBaに保存する機能を追加
  • グループに空きスペース比率が少ない時に固定のパディングをつける
    • 例えば9枚のこざねが追加された時に中身ではなくグループをクリックすることが難しかった問題を解決
  • タイトルのない空のグループを自動で削除

Kozaneba開発を作り直す

  • ユーザ向けのデモを兼ねたせいで本来の「頭を整理する」目的に反した使い方をしてしまった

    • 自分に必要ないのにScrapboxこざねを置いたりイラスト描いたり
  • image

  • 必要な機能

  • 自分が使って見つける

    • Regroupにあった機能
      • 手書きで加筆
        • iPad+Apple Pencilを持っている人が予想以上に少なかった
        • 手書きで描いた「囲みや矢印」が「アイテムを動かすこと」を妨げる
          • 本末転倒
        • 動かしやすい図はそれがアイテムなので「画像アイテム」があれば良い
    • 細かい機能
      • まずユーザ拡張で実現を試みる
        • サンプル増える
        • 拡張しやすい設計になる
      • 拡張の置き場所
        • ブラウザをリロードしないで試したいよね
  • Scrapboxリンク展開

    • まだないページだけ追加する
    • 矢印をつなぐ
  • Scrapboxコンテンツインポート

    • BaDialogから
    • AddKozaneDialogのオプション
    • コードリージョンを無視
    • インデント箇条書きをグループとして扱う
    • Markdownも同様にできるといい
  • 選択範囲テキスト化

    • Scrapboxこざねはデフォルトプロジェクトが決まらないと適切な表現が決まらない
      • テキスト化はタイトルだけ
      • 別途Scrapboxフォーマットでの書き出しを作る?
  • 選択してる状態で画面をスクロールしたい

    • 現状
      • 選択範囲表示がスクロールしない
    • 二本指ジェスチャー
    • せめてスペースでの全体表示
      • これができると「中身が見える拡大率で配置して、全体ズームで全体の中の適切な位置に置いて、また元の視点に戻って」ができる
  • 選択範囲をReactNなしで管理する

チュートリアルの多言語化 Regroupからのペースト ユーザによるレンダリング手法の追加

矢印機能 タブレット対応 Keichobot

矢印機能についてのBaに昨日の矢印は明確な関係を表現し壊れなくする方法を追加して整理

image つまり「依存関係がツリーなら問題ない」「循環するとやばい」を「二部グラフにすればよい」と解決

  • image

矢印機能って呼んでたけど、そもそも矢印だって「両矢印と片矢印の切り替え」が必要

  • 両方に頭がなければただの線

今週のまとめ

  • Scrapboxこざね
  • 画像こざね
  • ReactNのフックの仕様勘違いによる無駄な再描画を削減
  • 選択範囲のコピーとペースト(JSONでクリップボードに入るので別の場にも貼り付けられる)
  • ローカルにバックアップを作成

試しに間引かずにバックアップを作ってみて7メガくらいになった

  • 間引きについて
    • 例えば1秒後に別のバックアップがあるなら消して良い
      • つまり「次のバックアップまでの時間」が短いほどいらない
      • 短い順に消していけばよい
    • 12時間超えてたら保存対象で良いのでは
      • 1年間24時間更新し続けてたとしても1000件行かない
      • 「矢印機能のBa」で11KBくらい
        • 10倍の規模のを1年間24時間更新して110MB、問題ないのでは

js

kozaneba
  .fetch_api(
    "https://scrapbox.io/api/pages/nishio/2021-09-03Kozaneba%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98/text"
  )
  .then((res) => res.text())
  .then((text) => console.log(kozaneba.parse_scrapbox(text)));

image

  • image

nishio: KozanebaのAPIに「ScrapboxのAPIを叩く」と「scrapbox-parserで与えられた文字列をパースする」をつけて、この後どうするかはまだ考えてない

nishio: 「a[b]c[d]e」は普通こざねとScrapboxこざねが交互に5つ並んだものになるので良いのか?

nishio: 後この前、Scrapboxこざねは普通こざねの3倍くらいの大きさにしたんだけど、こういうことを考えておくとデフォルトサイズは同じにしておいた方がよかったのか? いや、でもScrapbox上での見た目を考えると文中にカードが差し込まれるわけではないのだから、普通のこざねとして追加してカードは末尾?

nishio: 初Cloud Function、設計がポンコツだ。サーバサイドでScrapboxのURLからAPIのURLに変換してるから特定のURLしか叩けないじゃん。書き直して何でも叩けるようにするか…

nishio: ScrapboxとKozanebaの相互変換を作って、MarkdownのKozanebaの相互変換を作ったら、結局Scrapboxと Markdownの相互変換ができるのでは(典型的な机上の空論)

nishio: もちろん変換器を目指すのではないのでコード記法やテーブルは捨てる気満々

Kozaneba開発日記2021-09-06