2015年4月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« 2014年7月 | トップページ | 2014年12月 »

2014年8月の4件の記事

2014年8月31日 (日)

ストローク編集シールに、「細字」コマンドを追加

ちょっとだけ更新

「ストローク編集シール」を使い始めてから気が付いたのですが、「太字」コマンドがあるのなら、ちょっと手を加えるだけで「細字」コマンドもできるじゃないですか。

さっさと実装しました。

「ストローク編集シール」をダウンロード

使い方

コマンド入力に受け付ける文字は、以下のどれかです。

"LIGHT", "ライト", "SLIM", "細字"

BOLD の反対語としては LIGHT が正しいのですが、手書きするのに面倒かと思って、"SLIM" も受け付けるようにしました。しかし、実際に使ってみると、ある程度画数の多い文字の方が認識しやすいようで、けっきょく "細字" で入力するのが使いやすいようです。

内容

ご想像の通り、対象とするストロークの太さを、それぞれ 1/2 にします。但し、線が消えてしまうといけないので、0.1 より細くはできません。

他にも何か簡単に追加できるコマンドありますかね?

2014年8月24日 (日)

遂に、コピペシールが update できました/v.2.10.0 の (?) storage 機能

「コピペシール」の update

去年作った「手書きコピペシール」 なのですが、MOONPhase v.2.9.0 に version up された時点で、info.json 周りの扱いと仕様が変わってしまって、v.2.9.0 対応できなくなってしまいました。

(過去記事:「peperJSON/strokeJSON の罠? 謎? 仕様? バグ?」 参照)

今回の v.2.10.0 への version up で、このあたりが地味に直ってます。おかげでとうとうコピペシールが update できました。

MOONPhase v.2.10.0 対応版「手書きコピペシール」をダウンロード

直った/直せたところ

まず、過去記事 に書いた、「MOON.getPaperJSON() の返り値に clip 属性が含まれていません」とという問題が直ってます。

また、「背景サイズが変えられない」と書きましたが、paperJSON.width, paperJSON.height に設定した値が正常に(!)反映されます。

.width, .height, .clip を変更することで、シールのサイズを変更することができるようになりました。

シール側のコードで直したのはこれくらいで、ほんの数行なのですが、システム側の改修は結構大変だったのではないかと思います。地味に前に進んでますね。

v.2.10.0 の (?) storage 機能

先週、普段使っていない Gmail を開いてみると、Issue tracker からの連絡/回答がいくつもきていました。お盆に結構返信があったんですよね。

で、そこにいくつか興味深い情報が。もしかすると v.2.9.0 から実装されていて、表に出てなかっただけなのかもしれませんが、今回 v.2.10.0 での MOONBlock の新機能と直接関係しているので、多分、v.2.10.0 の新機能なのだと思っています。

Issue tracker #148 の reply の中に、

確認また回答が遅くなり申し訳ございません。

ご要望頂いている任意の情報の保存について、
stickerStorage APIを使用する事でシールの情報の保持が可能となっています。

-----
保存:
stickerStorage.setItem("key", "value")

読込:
var value = stickerStorage.getItem("key")

保持している情報はシールのフォルダの
「storage.json」ファイルに保存されます。

という情報がありました。

また、Issue tracker #235 には

ご要望として頂いています、
「新しい属性のとして文字列の追加について」追記します。

info.jsonではなく、
stickerStorage, localStorage, pageStorageを使用する事で、
文字列属性の保存は対応可能となっています。

(e.g.
-----
stickerStorage.setItem("key", "value")
var value = stickerStorage.getItem("key")
-----

という情報があります。

試してみました。まず、"pageStorage" というのは "noteStorage" の間違いのようで

  • stickerStorage : そのシールからだけアクセスできる storage
  • localStroage : そのページの全シールからアクセスできる storage
  • noteStorage : そのノート全体の全ページの全シールからアクセスできる storage

のようです。

まだ使い道を思いつきませんが、面白そうです。ちなみに MOONBlock のヘルプ にある、ロードブロック、セーブブロック、セーブデータ確認ブロック、セーブデータ消去ブロック、がそのままこの機能を使っているのだと思われますから、直接 javascript を操らなくても利用できるはずです。

で、その実体としては、localStorage は、ページのフォルダの下に storage.json というファイルがあって、その中に情報が格納されています。

noteStorage は予想通りで、MyNotebook1 フォルダの下に、storage.json というファイルが作成されます。

今のところわからないのが、stickerStorage. Issue tracker の情報では、『シールのフォルダの「storage.json」ファイルに保存されます』とありますし、他の 2 つの storage.json の存在を考えると、これが一番自然なのですが・・・。

シールのフォルダには storage.json が見つからないんですよ !!!

それでも、stickerStorage.setItem(), stickerStorage.getItem() は正常に動作するので、使う分には問題ないんですが・・・。

この件、どうなってるのか分かった方がいれば、ぜひ教えてください。

MOONPhase v.2.10.0 対応

編集シールができて、MOONPhase も update されて喜んでいたのですが、「昔のシールが version check にひっかかって、2.10.0 で動かない」という報告を受けました。

なるほど確かに。いや、考えてみたら、当然なんですよ。version check は以下のコードで行っているのですが、これは version のそれぞれの桁が 2 桁になることを想定していません。まさか、ver.2.9.1 の次が ver.3.0.0 ではなくて、ver.2.10.0 とは思っていなかったので。

var isVersionSatisfactoryFor = function( requiredVer ){
    var message;
    switch ( MOON.getLocale() ) {
        case "ja-jp":
            message = 'MOONPhase ver.' + requiredVer + ' 以上に update しないと使用できません';
            break;
        case "en-us":
        default:
            message = 'To use this sticker, update to MOONPhase ver.' + requiredVer + ' or greater is required.';
            break;
    }

    if ( MOON.getSystemVersion() < requiredVer ) {
        MOON.alert( message, function(){ return false; } );
    } else {
        return true;
    }
};

安易にサボらずに、対応できるように書き直しました。

var isVersionSatisfactoryFor = function( requiredVer ){
    return true;
   /*
    * MOONPhase v.2.10.0 の release に伴い、
    * '2.10.0' > '2.9.1' が成立しなくなってしまったので、
    * 安直な文字列比較をあきらめて、数値比較にする。
    */
    function ver2array( verStr ){
        var verIntArray = [],
            strArray = verStr.split( '.' );
            for ( var i = 0, len = strArray.length; i < len; i++ ) {
                verIntArray.push( parseInt( strArray[i] ) );
            }
        return verIntArray;
    }

    function isLessThan( a, b ){
        for ( var i = 0, len = a.length; i < len; i++ ) {
            if ( a[i] >= b[i] ) return false;
        }
        return true;
    }

    var message;
    switch ( MOON.getLocale() ) {
        case "ja-jp":
            message = 'MOONPhase ver.' + requiredVer + ' 以上に update しないと使用できません';
            break;
        case "en-us":
        default:
            message = 'To use this sticker, update to MOONPhase ver.' + requiredVer + ' or greater is required.';
            break;
    }

//    if ( MOON.getSystemVersion() < requiredVer ) {
    if ( isLessThan( ver2array(MOON.getSystemVersion()), ver2array(requiredVer) ) ) {
        MOON.alert( message, function(){ return false; } );
    } else {
        return true;
    }
};

取り急ぎ、これで version check を回避できる。「手書き縮小貼り付けシール 」 を update しましたので、お困りの方は update してください。

追記:「定着シール 」も対応しました

2014年8月23日 (土)

作りたくて作ってみた - "NO UI" っぽい(?) 編集シール

javascript や enchant.js の使い方にも多少慣れてきて、最近いろんな UI のシールを作ってみてたのですが、「なんだか "NO UI" から離れていくなー。つまらんなー」と感じていました。

いくつかノウハウを蓄積してきて、改めて考えてみると、"NO UI" っぽいシールが作れそうです。完成しても、独りよがりで実は使い勝手の悪いものになる予感も感じながら、とりあえず、「作りたい」という理由で手を付けてみました。

できあがったもの: 「ストローク編集シール」をダウンロード

使い方

シールを起動させると、入力待ち状態になります。本当に "NO UI" だと、シールが起動したかどうかさえ分からないので、シールの位置で particle が回転・点滅する待ち受け表示を作りました。

Screenshot_20140823095219

入力待ちになったら、編集対象となるストロークを指定します。ペンで、画面にぐるりと囲み線を書いて下さい。少し反応が悪いかもしれませんが、通常のペン入力に近い感覚で線を描けます。

囲み線を書き終わると、ワンテンポ遅れて、コマンド入力欄が表示されます。ここに手書きで編集コマンドを書き込みます。

Screenshot_20140823094805

現在使える編集コマンドは以下のようになります。なお、アルファベットは大文字・小文字を区別せずに受け付けます。

  • "CANCEL" : ( 次の文字列でも受け付けます、以下同様。"キャンセル", "取り消し", "取消", "戻る" )
    • 囲み線入力 ( 編集対象指定 ) を取り消して、最初の待ち受け状態に戻ります。

  • "ERASE" : ( "消去", "消す" )
    • 対象とするストロークを消去します。

  • "COLOR" : ( "色" )
    • 対象とするストロークの色を変更します。

  • "BOLD" : ( "太字", "強調" )
    • 対象とするストロークの線を太くします。

  • "COPY" : ( "コピー" )
    • 対象とするストロークをコピーし、画面の任意の場所にペーストします。

  • "CUT" : ( "カット" )
    • 対象とするストロークをカットし、画面の任意の場所にペーストします。

各コマンドの編集操作の詳細は後述。

ひとつの編集操作を終えると、最初の入力待ち状態に戻ります。引き続き、繰り返して複数の編集操作を行うことができます。

このままだと永遠に入力待ちから抜けられず、終わりのない戦いになります。もちろん、ちゃんと終了する方法はあります。

入力待ち状態で、「回転・点滅待ち受け表示」の中心部をタップすると、システムメニューボタンが表示されます。

Screenshot_20140823095038

  • [EXIT] : シールを終了し、ストローク編集を確定させます

  • [Undo Last One] : 直前一回分の編集操作を取り消します。取り消しは一回分だけで、何回分も繰り返しさかのぼることはできません。

  • [Undo ALL] : シールを実行するまえの状態を保存してあるので、最初から最後までの編集操作を全て取り消すことができます。

各コマンドの編集操作 - 動作の単純な順に

ERASE : 対象のストロークが消えます、それだけ。

BOLD : 対象としたストロークが太くなります。

JSON 形式ストロークデータにおける "width" の値を倍にします。それぞれのストロークの width を倍にするので、対象としたストロークに太さの異なる線が含まれていると、それぞれ違う太さの太い線になります。何度も繰り返すとどんどん太くすることもできます。

Screenshot_20140823095244Screenshot_20140823095252 Screenshot_20140823095321 Screenshot_20140823095346Screenshot_20140823095359

COLOR : 対象としたストロークの色を変えます。

色選択ダイアログで選んだ色に、一括変換します。

Screenshot_20140823095101Screenshot_20140823095210Screenshot_20140823095219_2

CUT/COPY : 対象元のストロークを消去してから操作するか、消去せずに残して操作するか、の違いだけで、基本的には同じように操作します。

コマンド入力欄に CUT, COPY などと記入したあと、ワンテンポ遅れてコマンド入力欄が消えます。この時点で、囲み線で囲んだ範囲のストロークを指でドラッグできるようになります。適切な位置にドラッグできたら、[Paste] ボタンをタップして貼り付けです。張り付けてもすぐ入力待ちモードには復帰しませんので、別の場所にドラッグして、あちこちなんども張り付けることができます。[Cancel to the Top] ボタンをタップすると、最初の入力待ち状態に復帰します。

Screenshot_20140823095428Screenshot_20140823095447

CUT/COPY 編集操作中に、対象ストロークをドラッグせずに、タップだけすると、操作ボタンが [< EXPAAND >] と [> Shrink <] に変わります。またタップすると、[Paste], [Cancel to the Top] に戻ります。

Screenshot_20140823095511

[< EXPAAND >], [> Shrink <] をタップすると操作対象ストロークを拡大/縮小できます。最少でオリジナルの 0.1 倍、最大で 2 倍です。0.1 倍刻みで拡大/縮小します。このボタンを活用すると、サイズを変えてコピペできます。拡大の方はどれほど使うか分かりませんが、縮小を使うと、手書きの難しい小さなサイズの文字を張り込むことができます。

Screenshot_20140823095525Screenshot_20140823095539

弱点

作る前は、どの処理が律速になるのかなと思ってましたが、そもそもの、操作対象ストロークをページデータから切り出す作業が一番重いようです。ページ上の全ストロークデータを一本一本、囲み線の内部か外部か判定するので、ページにストロークが少ないと軽いのですが、たくさん書き込んだページだとすぐ重くなります。MOONPhase ver.2.8.0 以前を思い出しますね。

雑感

去年の夏から MOON に触れ始め、まともに使ったことのなかった javascript を使い始め、最初につくったシールをこのブログに上げた日付が 2013/8/31 でした。それから約一年、さすがに少しは凝ったものも作れるようになったな、という思いと、それでも所詮この程度のパズル規模のものしか書けないな、という限界を感じます。

OS の version up で、また作りたいものが増えていけば楽しいですし、もし今後 mRuby も載ってくるようなら、もともと ruby の方が好きなので、それもそれで楽しみです。

まだ暫くは遊べそうですね。

さて、MOONPhase ver.2.10.0 に update しなければ。

« 2014年7月 | トップページ | 2014年12月 »