全ては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が対象。
Linuxは64bitからUEFI対応なのに32bit版UEFIで32bitしか対応しない
Ubuntu14.04LTSのCasperBootなイメージをいじる。
Casperを使うのがLiveCDで、以下の手順でLiveCDいじることが出来る。
目的は以下の通り
- ライブCDを起動した時点でSSHで入れるようにしたい。
- これは画面のない、または表示ができないマシンのセットアップに重宝する。
- ただ、vncserver経由でのUnity起動がうまく行かないのでインストーラ正常に作動しない。ここが何とかなれば面白いのだが・・・
実際のコマンド
mkdir mnt sudo mount -o loop ubuntu-14.04.1-desktop-amd64.iso mnt mkdir extract-cd sudo rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract-cd sudo unsquashfs mnt/casper/filesystem.squashfs sudo mv squashfs-root edit
さてCapserイメージ内に入る
sudo cp /etc/resolv.conf edit/etc/ sudo cp /etc/hosts edit/etc/ sudo mount --bind /sys/ edit/sys sudo mount --bind /proc/ edit/proc sudo mount --bind /dev/ edit/dev sudo mount --bind /dev/pty edit/dev/pty sudo chroot edit
後しまつと起動用ISOファイルの作成
sudo umount edit/dev/pty sudo umount edit/dev sudo umount edit/sys sudo umount/ edit/proc sudo chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' > extract-cd/casper/filesystem.manifest sudo cp extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop sudo sed -i '/ubiquity/d' extract-cd/casper/filesystem.manifest-desktop sudo sed -i '/casper/d' extract-cd/casper/filesystem.manifest-desktop sudo rm extract-cd/casper/filesystem.squashfs sudo mksquashfs edit extract-cd/casper/filesystem.squashfs -b printf $(sudo du -sx --block-size=1 edit | cut -f1) > extract-cd/casper/filesystem.size cd extract-cd sudo rm md5sum.txt find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.txt sudo mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-14.04.1-desktop-amd64-custom.iso .
Xcode5がEclipse4.3より残念な点
まずは断っておこう。
自由ソフトウェア主義者の私のPCの使用時間はWindows>Linux>MacOSXだ。
したがってキーバインドはWindows、それもThinkPadのキーボドがお気に入りでMacもこのThinkPadのキーボドをSynergy経由で触っている。
では本題だ。
現在、MacOSXでiPhoneアプリを開発している。なんだな、あまりに原始的なObjective-CはJavaと比べるならJavascriptの方がまだ似ていると言えるかもしれない。なのでクラスがあーだこーだでからみ合ってソースが残念になっていくAndroidよりはマシなのかもしれない。タイプセーフもクソもクラスという概念がJavascript並に希薄だからね。
で、Eclipseから見た場合なのだが
- ①バージョン管理システムの統合具合が甘い。なんでリビジョン番号もバージョンツリーも見えないんだよ・・・もちろんEGitも完璧とは言いがたいが、バージョンツリーは見える。
- ②検索と置換が最悪。というか機能がほとんど実装されてないと言ってもいいかもしれない。
- ③定義参照が貧弱
- EclipseならF3押せばすぐにその定義に飛べるが、右クリックしてコンテキストメニューから選ぶのはだるい。
- ④画面分割の挙動が謎い
- これは多分使い慣れていないだけだろうが、未だに挙動を把握できていない。
- ⑤Objective-Cの話ではあるがパッケージ管理がないのは大規模開発を考えると辛い。これはJavascriptも同じか。
- ⑥MacのキーボードのCltlキーとコマンドキーがわかれているのがもどかしい。これのせいでSynergy経由ではキーバインドが厳しいことに
- ⑦Macのフォント・・なんで日本語はline-heightが変わるんだよ・・・
ただ、言えるとことは、使えるものなら不自由なXcodeではないIDEが使いたいし
Eclipseも残念なのでNetBeansとかでもいいように思う。
SwiftはOSSのプロジェクト名を乗っ取た挙句、なぜECMASript6準拠にならなかったのか・・・そこは残念。