全てはGoogleキャッシュがために・・・
描いた−3ネコ型ロボット
全てはgoogleキャッシュがために
描いた−2 激おこ!デーモンロードちゃん
全てはGoogleのキャッシュがために
決戦IndexedDB
これは何?
ブラウザに無限のストレージが用意されました。
- COOKIEは4KBまで
- LocalStorageは5MBまで
- 外部ファイル?セキュリティのためアクセスできません。
この軛がようやく解消された。
どうして決戦なのか
どうしてこの仕様になったかわからない仕様だらけ。この苦難のため2年ほど足踏みした。どうしてもクライアントサイドで大量データを扱わなければいけないので・・・
- 非同期、非同期非同期の連続、そしてバージョンという概念
- UIスレッドをノンブロッキングなのはわかりますが・・・非同期処理のいなし方知らないと詰む・・・
- キーが外部もちとデータ内保持と二種類あった。
- ここを理解しないと目的のデータを取り出せない。
- キーが外部もち:KVSのようなイメージ:OutLine−Key
- キーがデータ内保持:RDBMSの様に一部のプロパティーがキー:InLine−Key
- なにも知らずにデータ投入するとキーが外部もちになって自動連番がキーに成るため、目的のレコードを取り出せなくなってしまう。
- 数万オーダーのデータ処理を考えると取り出すときに全件取得はありえない。多分メモリ不足でブラウザが落ちる。
- DBのバージョンという概念がありまして・・・
- 追加、修正、削除、CRUDのCUDはバージョンアップが必要
- バージョンを正確に記述しないとObjectStoreの削除と作成がうまくできない。
- 一つのDBの中に複数のObjectStoreが有る状態で同時複数のDropCreateをトランザくショナルにやろうとするとなかなか壮観な非同期入れ子状態に成る。
- ここを理解しないと目的のデータを取り出せない。
- 溢れるエラー
- DBのバージョン違いはひどかった
- エラーの内容もわかりづらい。UnknownErrorってなんなんだー
- もちろんPK違反はわかるんだけどね。ConstraintError
- KeyPathという未解明の仕様
- 名前からしてパスのようにKeyを構成できるように聞こえるが利用方法がよくわからない。
- keyにピリオドは入れられない。
- もしかしたら1オブジェクトストア内に入れ子でデータ持って検索できるかもと思ったがに駄目だった。
- めまぐるしく変わる仕様
どうあれば嬉しかったか
- 普通のSQLだったら良かったのに
- WebSQLが退けられた理由をまだ把握していない。
- 非同期の他に同期のオプションもあればよかったのに
- 非同期はハードル高いよ
特徴
以下RDBMSに比較して
- キーは基本一個です。
- 複数キーは出来るようだが、めんどくさくてやってない。
- 検索にはキーを使えます。
- 範囲絞り込みが可能です。
- RDBMSの様に使おうとするとキー設計に親子関係を練り込むことを考えてしまいます。
- jsに処理を移譲するのはやはりですね・・・ネイティブで済ませられるならソレで。
- 複数のキーを連携させることはできません。できる?
- Indexは複数作成可能なようですが。
- 範囲絞り込みが可能です。
- Indexで検索が出来るようです。
- できるようです。
- ただし、複雑な条件を受け付けるAPIはないです。
- いったんjs上にオブジェクトを展開してそこで比較するなどの条件適用が必要になります。
- JOIN系、GroupBy、UnionのAPIは無いです。
- 非同期につぐ非同期なので変な処理をはさむと遅いです。
- 変な処理がなければLocalStorageよりは速い気がする。
- FirefoxとChromeは普通に動く。
- Chromeには削除する方法があるがFirefoxはCookie前消しでのみ対応
- 自前でDB初期化ロジックが必要
漫画を毎週1枚挙げる体制作成に向けて。
志は高く
現状漫画を書きたいが書けていないので掛けるシステムの導入を図る。(5年越し)
現状
現状は以下の手順が必要
- 漫画のストーリーを描く必要がある
- プロットを作る
- 内容の整合性と演出を考慮する。
- ページにちぎって
- コマを割ってネームにする。
- コマを割る
- 噴き出しを描く
- 噴き出しに文字を入れる
- 下書きをする
- ペン入れする
- エフェクトを入れる
- png,jpeg等の出力画像に落とす
- 公開先サービスに投稿する、投稿文を記述する。
上記の手順を踏むと3時間では当然収まらないわけで
システムとしての支援
結局業務系のシステムと同じでどこまで手順を目視可能にするかが鍵に思っている。
脇を締めて力を逃さず少ない力で目標に打ち込む。
- 文字をデバイスをまたいで一箇所にプールする。
- システムが単位を管理
- 利用者はこの単位に従い情報を蓄積する。
- 考えられる区分けとしては、シリーズ、作品(話)、ページ、コマ、吹き出し、擬音、エフェクトなど
- ゴールまでのステップをシステムが明示する。
- ゴールまでに完了していないステップを提示する。
- 利用者に報酬を与える。
- アクティビティマップを提示
- 消化ステップ数を挙げる。
- ペースメーカーとなる。
- 埋めていく速度を記録して過去の実績との比較で線を提示する。
- 成功確率も上げていく
- 下書きまでをWebでサポートする。
- そのまま公開できるようににもする
- Pixiv,Twitterその他
- そのまま公開できるようににもする
ちなみにプラットフォームはWeb
それもクロスプラットフォームで作動することが高確率で期待できるFirefoxとChromeが対象。