機能名が「web拍手ペイント」に決定しましたー。
そして、最大の難関としておいらの眼前にそびえ立っていた「なんか予期せずフリーズするバグ」をやっと潰せました!
先日怪しんでいたGC周りは関係ありませんでした……。がんばって綺麗な設計にしたのに……(いや、決して無駄な事ではないですがw)。
特定の条件下で無限ループに陥っている事が原因でした。
もうね、その無限ループ条件に気付いた瞬間に「勝った……」と事務所内でガッツポーズ決めつつ呟いてしまいました。そっから先はまさに時間の問題。変数状態を調査して、適確に追い詰めて、着実に倒しました。イメージ映像としては、モンハンで足引きずってるボスを追いかけてる光景をご想像ください。
既知の危険なバグはほぼ潰せたので、このブログでも、実際にお使いいただける拍手ペイントのプレビュー版URLをご紹介させていただきます!
「web拍手ペイント」公開アルファ版
保存も投稿もできないアルファ版ですが、すぴばるのアカウントをお持ちでない方もお試しいただけます。
すぴばるのアカウントをお持ちの方は、
開発室コミュにて最新情報を公開してます。お気付きの点などありましたら、お気軽にコメントください。
以下は既知のバグです:
・ver0.24現在、レイヤ跨いだ操作しているとUNDO後のREDOが正常に機能しないケースがあります。誰か助けてマジで いや頑張ります
・他にも多分まだなんか色々とバグありそうな。というかバグのないソフトウェアなんて存在しないんです。いや頑張ります。
以下は制限事項です:
・筆圧取得にはWacom様の「Table Data Plugin」を利用しています。そのため、Wacom様がBamboo以降にリリースしたハードウェアで、尚かつ最新のタブレットプラグインがインストールされている必要があります。
その他のデジタイザ環境への対応は調査していますが、現時点ではあんまし光明が差し込んできません。
・現在、おいらが確認している範囲で筆圧がご利用いただける環境はWin「Internet Explorer 8」Mac「Safari 5」のみです。FirefoxはタブレットプラグインがFlashプラグインと喧嘩してるように感じます。現時点ではあんまし光明が差し込んできません。
以下は仕様です:
・描線が若干アレがナニです。もっと綺麗にしたいです。がんばります。
・現在、レイヤが並べ替えられないという糞仕様です。がんばります。
・レイヤ3枚です。いや、プログラム的には変数いっこ変えれば増やせる設計なんですが……4枚5枚にすると弊社の想定環境で実用に堪えない重さになってしまうので現状では保留しております。。
・バケツ(塗りつぶし)機能が、ちょっとの誤差も許さない仕様なのであまり使い物になりません。。重くはなるけど、色範囲を吸収する塗りつぶしロジックの目処は立ってます。将来にご期待ください。。
・各方面から「マスク!マスク!」って激励を頂いておりますがお時間下さい。。。。。。。(実現可能だとは思うんですが……実験してみるまでは作業時間を見積もれないのでお約束できないです><;;)
以下はチラシの裏です:
回転、拡大縮小、左右反転が気軽にできるペイントソフトを、ブラウザ上で実現したかったのが発端でした。案の定、現在のアルファ版実装の時点で割と死んでますが、広く気軽にご利用いただけるweb拍手サービスのツールに育て上げたいと思っています。
是非絵師の皆様には、ご意見・ご感想などお気軽にお伝え頂ければ幸いです。
以下はブログです:
ともあれ最大の難関は片付いた! と思います! 多分! きっと! おそらく! わりと!! それなりに!!!
年末年始はゆったりのんびりデバッグさせていただこうと思いますー。
……他に何もやることないし。。
……あ、漫画喫茶あたりで適当に長編読みまくろうかなぁ。
ヒマワリさん「クリスマス中止のお知らせ出したいねー」
だんでぃさん「そっすねー」
ヒマワリさん「じゃあ文案お願いしていい?」
だんでぃさん「いっすよー」
……なんだよ、この会社w
おいらも笑わせて頂きましたが、個人的には「クリスマスをカップルのためのイベントと喧伝するムード」が嫌いなだけなので、お子様のいらっしゃる温かなご家庭にまで中止のお知らせをお届けする必要はないんじゃないかなーと思ったんですが。この意見は以前映像配信時にだんでぃ社長に全否定されたので、今回は見守らせていただきました。
さて、手描き(仮)の進捗報告です。UNDO周りは(後述の調査点を除いて)無事実装成功したのですが……細かい問題が色々生じてしまったため年内リリースは見送らせていただきます。。ご期待頂いていた方々には申し訳ないです。
以下、毎度の技術者モードで済みません^^;
現在、手描き(仮)Flashプラグインが稀に応答不能になる問題が確認されてます。
現在疑ってる点は、ガベージコレクション(通称GC)に起因する問題ですね。
フリーズ後に何分も待つと、Flashプラグインが「デフォルトのタイムアウト時間である 15 秒を超えてスクリプトが実行されました」という警告を出して、続けるボタンを押すと直ったりするケースがあります。
現在の設計ではとにかくコードをコンパクトかつ局所的に把握できる記述にする目的で、イベントリスナに匿名関数を大量に割り当てているので、まずここが怪しい。きっちり再調査しておこうと思います。具体的には全部名前付き関数で書き直して再検証。弱参照の使いどころもよく分からないのできっちり調べ直さなきゃ(うわー恥ずかしい)。。。
……とまあ、これらのタスクがTODOに入った時点で、年内リリースは諦めざるを得ませんでした><;;
それにしても、イベントリスナが絡み合ってる程度で数分ものフリーズがあり得るもんだろかなぁ……。
そのため、次点で実装したばかりのヒストリ管理クラスの設計を疑ってます。
ヒストリ管理クラスは、いわゆるUNDO/REDOを管理するクラスです。UNDOとひとことで言っても、「UNDO上限値を越したら古いバッファを捨てる」「UNDO時はREDOにできるようにバッファを残す(残すといっても実際にはVectorへの参照ポインタを移動する形で実装)」「UNDO後に操作されたらREDO領域を捨てる」などの若干怖い処理が目白押しです。
クラス自体は小規模なんですが、見落としがないか精査が必要なところですね。いくらテスト通っても、テストユニットに不備があるかもしれないし……。
最後の砦が、ブラシツールに問題がないかどうかの調査。
こちらは一から設計しなおすくらいのつもりでいます。現在ブラシはツールクラスとして抽象化設計してますが、今後多彩なツールの実装要望が出そうなところですので不安を残したくない。幸いなことに、今日の作業で必要なパラメータはシングルトンクラスに集約できたので、各種ツールクラスは徹底的にリエントラントな形に書き換えたいと思います。
ただこれは再実装コストが問題。イベントリスナとヒストリ管理側に問題がなければ、メモリーリークさえ視認できなければ今回は保留する予定です。
逆に言えば、真っ先に疑うべきところではあるけど割と自信がある部分なんですよ。使い回さなければいけないデータと、毎回破棄しなきゃいけないデータの切り分けがかなり明瞭なコード。
バグのないソフトウェアは存在しない、などという俗言がございます。より正確には、「バグが存在しないことを立証する方法はない」んですね。バグゼロを目指すのは、正直、交通事故ゼロを目指すのと同じ程度に難しい目標※です。。。
何か適切な仕組みがあれば必ず達成できる、というモノではない訳です。。
とはいえ、工夫一つでバグを激減させる手段はまだまだあると信じて疑いません。
引き続き頑張りたいと思います。
目標を一月中リリースに改めて、明日から仕切り直します。
バグの存在を、仕方ない物だと開き直ったら、そこで試合終了ですよね。
とかそれっぽい事を言いながら、「最初は公開ベータ版でリリースしません?」とか稟議にかけてヒマワリさんにはねられたのはここだけの秘密。。
おもいっきり開き直ってすみませんでした。。
すぴばるの新機能「手書き」のプレビューがお披露目されましたです。
社内で相談したところ、映像配信に併せて「そろそろのんちゃんが何やってるのか公開してもいいんじゃね」という結論を頂きました。
まだリリースレベルではありませんが、年内リリースの目処は見えて来た気がします!
……万一遅れた折は、お察しください^q^;;;
ひさびさのイラストは、まさかの自作ペイントツールによる作例です。
ペン汚いなぁ……もっといい実装考えないと><
すぴばるでの写メールつぶやきも担当させていただきましたが、このツールも基本的にアイコンが必須なすぴばるにおける重要な機能になってきそうな気がしてます。
のみならず、web拍手の提供するサービス全般で汎用的に使えるエンジンに育て上げたいですね。
取り消し機能とすぴばる投稿周りの実装確認、バグフィックスが完了し次第リリースしたいと思っていますので、乞うご期待!
以下開発雑記など。開発者用語が大量に混ざりますのでご了承ください^q^
ペイントツールって単純なようで、使い勝手を意識すると凄く細かい実装の嵐ですねー。。おいら自身コミスタやSAI、PainterにArtrageと渡り歩いてるもので、改めてペイントソフトの奥の深さに浸りきってます。UNDO一つとっても細かく考えるとすんごいややこしい^q^;;;
現状でも、Windows Firefox/Windows Chromeにて筆圧を取得できない問題を抱えています。。今回はwacom tablet data pluginを採用させていただいたのですが(そのためWacom様以外のペンタブレットには非対応な状況です。。申し訳ありません><)、このdata pluginにはFlash pluginとの相性問題があるようです。
技術的目処もなんとなくついてます。多分、Flashにフォーカスがあたってしまうとtablet data pluginが欲しいイベントが上書きされてるんじゃないかなーという挙動です。Firefoxで別のタブを一度クリックして戻ってくると、ワンストローク中だけ筆圧が有効になります。なんじゃこれ^q^;;
解決策としては、やはり古くからお絵描きBBS/絵茶で導入されてる「JTablet」の併用かなーとか。でもこれ、ユーザ様にインストール作業を要求する事になるのとJava Applet仕込む動きが追加されてしまうので若干不安です。開発時間もものっそ伸びてしまうので、現状では保留案件ですね。。
結局FlashはHTMLの上に「乗っかっている」ものだという事を再確認させられました。予期しないところで頭痛の種になりますね。
でもおいらは、ActionScript3でのUI開発は世界一ラクだと信じて疑いません。adobe頑張れー!
開発環境もちろっとご紹介。おいらはFlex SDK+Mac mi+コマンドラインfcshという構成でやってます。
ヒマワリさんからは「Flash Builderくらい買ってもいいんじゃないか」と相談頂きましたが、かなりストイックにやってる割に不便さは感じません。adobeのFlash Builder宣伝ページで書かれていることはシェルスクリプト書けばだいたい対応できます。デバッガないけど「ExternalInterface.call("console.log",変数名)」でダイナミックにログ掘れますので、あとは工夫一つでほぼ無問題な気がしてます。
専用IDEは、どうもエディタより重くかつ操作が煩雑で、ストレス感じます。。おいらももう旧型の人間なんだろうなぁ。。
Macのmiってエディタは、とてもおいらにはしっくりくるツールです。無料で全機能使えるアプリなのについ送金登録してしまったほど。大量の自作シェルスクリプトを仕込んで長年愛用してます。
最初はmxmlで作ってたんですが、気がついたらswfファイルの容量が1MB越してたため慌ててSprite継承しただけの生ActionScript3クラスで作り直しました。。UIのレイアウトエンジンまで自作。
HTML5版での実装可能性も、一応テストしてます。やっぱり、見た目や操作性はFlashに比べてすんごいやりにくいですね。でもDOM的にはとっても素直。Tablet Data Pluginが素直に動いてくれてます。ただまあ、最大のブラウザシェアを誇るInternet Explorerで動かないので、まだ公開レベルまで作り込むことはできません。IE9が「Canvas実装が完璧な状態」で、かつ正式リリース後に十分に普及するのを待つしかありません。
IE6が未だに無視できない現状から類推すると、若干気の遠くなる話ですが。。。
万一、toDataURLが実装不足のままリリースされたらIE10の普及待ちだし><
いろいろめんどくさい問題はありますが、それでもweb上でのペイント実装手段は、タブレット側の問題でもブラウザ界隈の状況においても、数年前とは比べ物にならないほど理想的な状況に近づいていると思います。
なにはともあれ、自分が満足できるところまで実装練りたいところです。
UNDOがない状態でのペイントがこんなに苦痛だとは思わなかったですw
ではでは、また後日。UNDOが実装できた頃にでも……(多分年内には)。。
おやすみなさいー。