<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>Web scratch &#187; UI</title> <atom:link href="http://efcl.info/tag/ui/feed/" rel="self" type="application/rss+xml" /><link>http://efcl.info</link> <description>フリーソフトやFirefoxなどについて、web全般なサイト</description> <lastBuildDate>Sat, 21 Jan 2012 23:30:41 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>KeySnailプラグイン開発の方法とデバッグ</title><link>http://efcl.info/2011/0402/res2453/</link> <comments>http://efcl.info/2011/0402/res2453/#comments</comments> <pubDate>Sat, 02 Apr 2011 13:05:36 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Firefox]]></category> <category><![CDATA[KeySnail]]></category> <category><![CDATA[Firebug]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[UI]]></category> <category><![CDATA[userChrome.js]]></category> <category><![CDATA[検索]]></category><guid
isPermaLink="false">http://efcl.info/?p=2453</guid> <description><![CDATA[KeySnailついて 自分はEmacsユーザーでもありませんが、KeyConfigの代わりにKeySnailを使い始めました。そもそもKeyConfigとは役割違うし、KeyConfigもFirefox4対応したので併 [...]]]></description> <content:encoded><![CDATA[<h4>KeySnailついて</h4><p>自分はEmacsユーザーでもありませんが、KeyConfigの代わりに<a
href="http://d.hatena.ne.jp/mooz/20090921/p1">KeySnail</a>を使い始めました。<br
/>そもそもKeyConfigとは役割違うし、<a
title="KeyConfig" href="http://mozilla.dorando.at/">KeyConfigもFirefox4対応</a>したので併用しています。<br
/><a
href="https://github.com/mooz/keysnail/wiki/keysnail-japanese">keysnail</a>はuserChrome.jsのキー特化みたいな存在で、便利なAPIがある環境みたいなとらえ方でもいいかもしれないです。(emacsのキーバインドは一切使わないで、まっさらな状態で始めました)</p><h4><span
id="more-2453"></span>KeySnailのプラグイン開発について</h4><p><a
href="https://github.com/azu/KeySnail-Plugins/tree/master/JSReference">JSReference</a>というMDN(<a
href="https://developer.mozilla.org/ja">MDC</a>)や<a
href="http://www2u.biglobe.ne.jp/%7Eoz-07ams/prog/ecma262r3/">ECMA-262 3rd Edition</a>をKeySnailのプロンプトから検索できるプラグインを書いたので、これに沿って説明していきます。</p><p><iframe
title="YouTube video player" src="http://www.youtube.com/embed/8-qRFqdtgz4" frameborder="0" height="510" width="640"></iframe></p><p>こんな感じの動作するやつです。(フルスクリーンで見た方がいい)<br
/>端的に言えば<a
href="http://subtech.g.hatena.ne.jp/cho45/20100901/1283268146">Chemr-js</a>みたいな感じでインデックスをキャッシュしてリファレンスを検索するものです。</p><p><strong>KeySnailのプラグイン開発の情報元</strong></p><ul><li><a
href="https://github.com/mooz/keysnail/wiki/_pages">KeySnailのgithub wiki</a></li><li>作者ブログ<ul><li><a
href="http://d.hatena.ne.jp/mooz/">mooz deceives you</a></li><li><a
href="http://keysnail.g.hatena.ne.jp/mooz/">きすねた(ん) &#8211; keysnailグループ</a></li></ul></li><li><a
href="http://keysnail.g.hatena.ne.jp/">keysnailグループ</a>(はてなグループ)</li><li><a
href="http://b.hatena.ne.jp/t/keysnail?sort=eid">タグ「keysnail」を含む新着エントリー &#8211; はてなブックマーク</a></li><li>KeySnailのソースコード(<a
href="https://github.com/mooz/keysnail/tree/master/content">content at master from mooz/keysnail &#8211; GitHub</a>)</li></ul><p>KeySnailのプラグイン開発についての情報はドキュメントが不足(分散)している印象を受けるため、<a
href="https://github.com/mooz/keysnail/wiki">wiki</a>に情報を反映させたり(github wiki使いにくいのでもっと他のがあるといいのだけど)、ブログなど開発手順を記したりすると他の人のためにもなると思います。</p><h4>メタデータ</h4><p>まずKeySnailにはドキュメントも表示できる優秀なプラグインマネージャーとGUIでも追加したコマンドなどの管理ができる(<a
href="https://github.com/mooz/keysnail/wiki/Customizing-%28Japanese%29">.keysnail.js</a>を直接いじるのも可能)ため、プラグインを作った時にはメタデータが結構重要です。</p><div
id="attachment_2455" class="wp-caption alignnone" style="width: 310px"><a
href="http://efcl.info/wp-content/uploads/2011/03/cacc8d20980b1ae5f38e41eabfbb4bcb.png"><img
class="size-medium wp-image-2455" title="2011-03-31-plugin-ss1" src="http://efcl.info/wp-content/uploads/2011/03/cacc8d20980b1ae5f38e41eabfbb4bcb-300x204.png" alt="" width="300" height="204" /></a><p
class="wp-caption-text">プラグインマネージャー</p></div><div
id="attachment_2456" class="wp-caption alignnone" style="width: 310px"><a
href="http://efcl.info/wp-content/uploads/2011/03/2011-03-31-ss2.png"><img
class="size-medium wp-image-2456" title="2011-03-31-ss2" src="http://efcl.info/wp-content/uploads/2011/03/2011-03-31-ss2-300x262.png" alt="" width="300" height="262" /></a><p
class="wp-caption-text">GUIで管理できるキーマネージャー</p></div><p>プラグインはJavaScript(拡張子は .ks.js)で書きますが、プラグイン内部に<a
href="https://developer.mozilla.org/ja/E4X">E4X</a>を利用してメタ情報を含めることができます。(是非入れて)<br
/>メタ情報の書式は<a
href="https://github.com/mooz/keysnail/wiki/writing-plugins-japanese"></a><a
href="https://github.com/mooz/keysnail/wiki/Writing-Plugins-%28Japanese%29">Writing Plugins (Japanese)</a>に詳細に書いてあるので、これと他の<a
href="https://github.com/mooz/keysnail/wiki/Plugin">Plugin</a>をまねるのが早いです。E4Xで書くのでプラグインの詳細な情報を入れるdetail内には簡単なWiki記法を使ってプラグインの詳細を書くことができます。</p><pre>&#60;detail lang="ja"&#62;&#60;!&#91;CDATA&#91;
複数行のヒアドキュメント
のような書き方ができる。
簡単なWikiみたいな記法も使える

見出し:
    - == heading1 == で第一見出し(h1)
    - === heading2 === で第二見出し(h2)
    - ==== heading3 ==== で第三見出し(h3)
整形式テキスト:
    &#62;|| と ||&#60; で囲むと整形式テキスト(pre)になります。
    コードなどを書きたい場合に使用できるでしょう。
など
 &#93;&#93;&#62;&#60;/detail&#62;</pre><p>自分の書いた<a
href="https://github.com/azu/KeySnail-Plugins/tree/master/JSReference">JSReference</a>では以下のようなメタ情報を書きました。</p><pre>var PLUGIN_INFO =
        &#60;KeySnailPlugin&#62;
            &#60;name&#62;JsReferrence&#60;/name&#62;
            &#60;description&#62;JavaScriptリファレンスを引く&#60;/description&#62;
            &#60;updateURL&#62;https://github.com/azu/KeySnail-Plugins/raw/master/JSReference/js-referrence.ks.js&#60;/updateURL&#62;
            &#60;iconURL&#62;https://github.com/azu/KeySnail-Plugins/raw/master/JSReference/MyIcon.png&#60;/iconURL&#62;
            &#60;version&#62;0.0.1&#60;/version&#62;
            &#60;author mail="info@efcl.info" homepage="http://efcl.info/"&#62;azu&#60;/author&#62;
            &#60;license&#62;The MIT License&#60;/license&#62;
            &#60;provides&#62;
                &#60;ext&#62;JsReferrence-open-prompt&#60;/ext&#62;
                &#60;ext&#62;JsReferrence-reIndex&#60;/ext&#62;
            &#60;/provides&#62;
            &#60;detail&#62;&#60;!&#91;CDATA&#91;&#93;&#93;&#62;&#60;/detail&#62;
            &#60;detail lang="ja"&#62;&#60;!&#91;CDATA&#91;
            === 使い方 ===
            ....略.....
            &#93;&#93;&#62;&#60;/detail&#62;
        &#60;/KeySnailPlugin&#62;;</pre><p>それぞれの属性については<a
href="https://github.com/mooz/keysnail/wiki/writing-plugins-japanese"></a><a
href="https://github.com/mooz/keysnail/wiki/Writing-Plugins-%28Japanese%29">Writing Plugins (Japanese)</a>を見ればいいので飛ばしますが、E4Xを利用しているのでプラグイン内部からこれらのメタデータを利用する事もできます。<br
/>たとえば、プラグイン内部からname(JsReferrence)を取得したいと思ったら、</p><pre class="brush:javascript;">var name = PLUGIN_INFO.name.toString();// JsReferrence</pre><p>という風に参照することができます。詳しいE4Xのプロパティやメソッドについては<a
href="http://rephrase.net/days/07/06/e4x">rephrase § E4X</a>が詳しいです。<br
/>E4X自体については以下にリンクをいろいろまとめてあります。</p><ul><li><a
href="../adiary/E4X%E3%81%A8DOM">E4XとDOM &#8211; prog*sig</a></li></ul><p>以上でメタデータについては終わりですが、アップデートURLやアイコンURLなども指定できてとてもいい感じにできてると思います。</p><h4>デバッグ方法</h4><p>自分のデバッグ方法を書きますがもっと効率のいい方法があったらお知らせくださいな。<br
/>まずKeySnailにはいくつかのデバッグ<del>関係</del>に使えそうなのAPIがあります。</p><pre class="brush:javascript;">util.message("format", &#91;args...&#93;); // コンソールにログを出力
display.showPopup(title, msg, &#91;options&#93;);// Growlみたいな通知(Firefoxの通知のやつ)
display.prettyPrint(msg, &#91;options&#93;);// DOM内にポップアップで出力
display.notify(aMsg, aButtons, aIcon);// ページ上部に出てくるインストールButtonみたいな感じ</pre><p>display.prettyPrintは以下みたいなのが出ます。</p><div
id="attachment_2460" class="wp-caption alignnone" style="width: 310px"><a
href="http://efcl.info/wp-content/uploads/2011/03/2011-03-31-ss4.png"><img
class="size-medium wp-image-2460" title="2011-03-31-ss4" src="http://efcl.info/wp-content/uploads/2011/03/2011-03-31-ss4-300x102.png" alt="" width="300" height="102" /></a><p
class="wp-caption-text">display.prettyPrint</p></div><p>他のutil関係のAPIは<a
href="https://github.com/mooz/keysnail/wiki/util.js">util.js &#8211; GitHub</a>に載っています。(ただこれがkeysnail API全部ではなくてドキュメント化されてないものも含めて他にもたくさんあります)</p><p>これらの用意されてる出力形式はオブジェクトを渡すと[object Object]と表示されてしまうので、Firebugでオブジェクトの中身を見られる関数を.keysnail.js(or _keysnail.js)に書き足してデバッグに使っていました。</p><pre class="brush:javascript;">// PRESERVE エリア内に
// firebugでオブジェクトをインスペクト
function fbug(x) {
    var args = Array.slice(arguments);
    var windowManager = Components.classes&#91;'@mozilla.org/appshell/window-mediator;1'&#93;
                        .getService(Components.interfaces.nsIWindowMediator);
    var {Firebug} = windowManager.getMostRecentWindow("navigator:browser");
    if (Firebug.Console.isEnabled() &amp;&amp; Firebug.toggleBar(true, 'console')) {
        Firebug.Console.logFormatted(args);
    }
    return args.length &#62; 1 ? args : args&#91;0&#93;;
}</pre><p>上を書き足したら、プラグイン内でfbugというメソッドが使えるようになります。<br
/>fbugに適当な値を渡すとFirebugでそれを開いて表示してくれます。(要はconsole.logみたいなもの)<br
/>この関数は<a
href="https://addons.mozilla.org/ja/firefox/addon/xqjs/">xqjs</a>から拝借しています。<a
href="https://addons.mozilla.org/ja/firefox/addon/xqjs/">xqjs</a>はとても便利なJavaScript実行コンソールなので是非使うといいです。</p><p>注意としてマルチバイトの文字列を渡すと文字化けするので、<a
href="https://github.com/mooz/keysnail/wiki/writing-plugins-japanese"></a><a
href="https://github.com/mooz/keysnail/wiki/Writing-Plugins-%28Japanese%29">Writing Plugins (Japanese)</a>にも書いてありましたが、そのときはL() と M()を使いましょう。</p><h4>プラグインのリロードについて</h4><p>プラグインのインストールは.ks.jsファイルへのリンク上で右クリックかプラグインマネージャーから行う事ができます。<br
/>プラグイン開発しているときはkeysnailのプラグインディレクトリ(プロファイル/keysnail/plugin)に.ks.jsファイルを置いて開発すると思います。変更を反映させるとき、毎回プラグインマネージャーから&#8221;プラグインのリロード&#8221;をするのは面倒なので、以下のようなものを.keysnail.jsに書き込んで使ってます。</p><pre class="brush:javascript;">// PRESERVE エリアの外に
key.setViewKey(&#91;'ESC', 'ESC'&#93;, function (ev) {
    userscript.loadPlugins();
}, 'プラグインのリロード');</pre><p>これでESCを2回押したらプラグインのリロードするようになるため、プラグインを書き換えて実行→確認がすぐにできるようになります。(ページのリロードすらいらない)</p><h4>プラグインのAPI</h4><p>プラグイン内でthisを見ると、プラグインから使える関数などが見えてくるかも知れません。</p><div
id="attachment_2464" class="wp-caption alignnone" style="width: 310px"><a
href="http://efcl.info/wp-content/uploads/2011/04/2011-04-02-ss2.png"><img
class="size-medium wp-image-2464" title="2011-04-02-ss2" src="http://efcl.info/wp-content/uploads/2011/04/2011-04-02-ss2-300x181.png" alt="" width="300" height="181" /></a><br
/><p
class="wp-caption-text">fbug(this) -thisをFirebugで見る</p></div><p>KeySnail 1.8.5からはundersocre.jsを使えるようになっています。</p><ul><li><a
href="http://keysnail.g.hatena.ne.jp/mooz/20110321/1300729753">KeySnail 1.8.5 &#8211; 相対パス指定, underscore.js, 補完強化 &#8211; きすねた(ん) &#8211; keysnailグループ</a></li></ul><p>また、プラグイン内でグローバル空間(this)を拡張しても<a
href="http://twitter.com/stillpedant/statuses/52977248042627072">問題ない</a>そうです。<br
/>今回、KeySnailプラグイン書くために使ったAPIはJSONでデータの読み書きをするpersist.preserve(aObj, aName) , persist.restore(aName) と 渡した配列から絞り込み検索UIを簡単に使えるprompt.selectorです。<br
/>特にprompt.selectorは便利なので、これのためにKeysnailを使うのもありです。(はてなブックマーク検索ができる<a
href="https://github.com/mooz/keysnail/raw/master/plugins/hateb-keysnail-collabo.ks.js">Hatebnail</a>とかがすごく便利)</p><p>それぞれのAPIの使い方は以下を参考にしました。</p><ul><li><a
href="http://keysnail.g.hatena.ne.jp/mooz/20100220/1267328272">食堂はじめました &#8211; きすねた(ん) &#8211; keysnailグループ</a></li><li><a
href="http://d.hatena.ne.jp/mooz/20091004/p1">prompt.selector を使おう　～はてなブックマーク拡張と KeySnail の連携～ &#8211; mooz deceives you</a></li></ul><p>注意点としてpersist.preserveに渡すオブジェクトは特にシリアライズしないでそのままオブジェクトを渡せばいいようです。また、prompt.selectorのflagsでHIDDEN IGNORE, ICON以外に数値で指定されている場合がありますが、内部でそれぞれ対応する数値が割り当てされているので、直接数値で指定しても大丈夫なようです。</p><ul><li><a
href="https://github.com/mooz/keysnail/blob/master/content/modules/prompt.js#L9">content/modules/prompt.js at master from mooz/keysnail &#8211; GitHub</a></li></ul><p>他にもいろいろ使えるAPIがありますが、Github wikiの方に適当にまとめておいたのでそこら辺を参照するといいです。</p><blockquote
title="Writing Plugins (Japanese) - GitHub" cite="https://github.com/mooz/keysnail/wiki/Writing-Plugins-(Japanese)"><p>プラグイン開発の参考リンク</p><p><cite><a
href="https://github.com/mooz/keysnail/wiki/Writing-Plugins-(Japanese)" target="_blank">Writing Plugins (Japanese) &#8211; GitHub</a></cite></p></blockquote><p>以上でKeySnailのプラグイン開発については終わりです。<br
/>是非、引っかかった点や参考にしたものなどは文章化してください。これは別にKeySnailに限ったことではありませんが、文章化されていないコードは非実在コードになりがちなため、文章やドキュメントにすることは大切だと思います。</p><dl><dt><strong>azu/KeySnail-Plugins &#8211; GitHubi</strong></dt><dd><a
title="azu/KeySnail-Plugins - GitHub" href="https://github.com/azu/KeySnail-Plugins">https://github.com/azu/KeySnail-Plugins</a></dd></dl><dl><dt><strong>KeySnaili</strong></dt><dd><a
title="KeySnail" href="https://github.com/mooz/keysnail/wiki">https://github.com/mooz/keysnail/wiki</a></dd></dl>]]></content:encoded> <wfw:commentRss>http://efcl.info/2011/0402/res2453/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Post Now browsing to Twitterで設定画面が開かないバグ修正</title><link>http://efcl.info/2010/1207/res2169/</link> <comments>http://efcl.info/2010/1207/res2169/#comments</comments> <pubDate>Tue, 07 Dec 2010 07:29:06 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Greasemonkey]]></category> <category><![CDATA[UI]]></category> <category><![CDATA[設定]]></category><guid
isPermaLink="false">http://efcl.info/?p=2169</guid> <description><![CDATA[Post Now browsing to Twitterで設定画面がうまく開かない現象が起きていたみたいで、以前はGM_configというGUI用のライブラリを使っていたのですが、今回usconfigに移行しました。 な [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://userscripts.org/scripts/show/46441">Post Now browsing to Twitter</a>で設定画面がうまく開かない現象が起きていたみたいで、以前は<a
href="http://userscripts.org/scripts/show/49700">GM_config</a>というGUI用のライブラリを使っていたのですが、今回<a
href="https://github.com/h1mesuke/usconfig">usconfig</a>に移行しました。<br
/> なので、今まで設定画面が開かないなどの現象が起きていた人はインストールしなおしてください。<br
/> (おかしいときは ツール→Greasemonkey(もしくはステータスバーの猿アイコン)→ユーザースクリプトの管理→Post Now browsing to Twitterを選択→✓関連付けられた設定も削除にチェック→アンインストール → インストール)</p><ul><li><a
href="http://userscripts.org/scripts/show/46441">Post Now browsing to Twitter for Greasemonkey</a></li></ul><p>こっからはGM_configからUSConfigへ移行方法について。</p><ul><li><a
href="http://d.hatena.ne.jp/h1mesuke/20100713/p1">Greasemonkeyスクリプトに設定画面を追加するライブラリ USConfig &#8211; Alone Like a Rhinoceros Horn</a></li><li><a
href="https://github.com/h1mesuke/usconfig/wiki/_pages">Usconfig のページ一覧 &#8211; GitHub</a></li></ul><p>GM_configは前から少し不安定な感じがあったので、同種のライブラリであるUSConfigに変えました。<br
/> GM_configとUSConfigの違いを簡単に挙げてみると(移行するに当たっての変更点)</p><p>まずはGUIの書き方が別物なので、そこはすべて書き直す必要があります。</p><p>GM_configの場合</p><pre class="brush:javascript;">GM_config.init('Configuration for Post Now browsing to Twitter', {
    'defaultTag': {
        'label': 'Prefix:',
        'type': 'text',
        'default':'Now browsing: '
    },
    'isSelection': {
        'label': 'Use selectionQuote',
        'type': 'checkbox',
        'default':true
    },
    'ShortURL': {
        'label': 'Short URL',
        'type': 'select',
        'options': {
            'bit.ly': 'bit.ly',
            'j.mp': 'j.mp',
            'goo.gl': 'goo.gl',
            'is.gd': 'is.gd',
            'tinyurl.com': 'tinyurl.com'
        },
        'default':'bit.ly'
    },
    'ShortCutKey': {
        'label': 'ShortcutKey:',
        'type': 'text',
        'default':'CS-Enter'
    },
    'PostWithCtrl': {
        'label': 'Post with Ctrl+Enter:',
        'type': 'checkbox',
        'default': false
    },
    'bitlyUserName': {
        'section': &#91;'bit.ly'&#93;,
        'label': 'bit.ly Username:',
        'type': 'text',
    'default':
        'remiko'
    },
    'bitlyAPIKey': {
        'label': 'bit.ly APIKey :',
        'type': 'text',
        'default': 'R_fa2240c646c07b2091x'
    }
}, configStyle , {
    open: function () {
        // ショートカットの入力補助
        var iframe = document.getElementById("GM_config");
        var iframeDoc = iframe.contentDocument;
        iframeDoc.getElementById("field_ShortCutKey").addEventListener('keydown', function (evt) {
            evt.preventDefault();
            this.value = shortcut.get(evt);
        }, false);
        // OAuth Setting
        if (TWOauth.isAuthorize()) {
            TWOauth.injectToConfig();
        } else {
            XHRloading.createText(iframeDoc);
            TWOauth.getRequestToken(TWOauth.injectToConfig);
        }
    },
    save: function () {

    } // reload the page when configuration was changed
});</pre><p>USConfigの場合</p><pre class="brush:javascript;">Config.define('usc_basic', function() {
	with (this.builder) {
		var shortURL_opt = &#91;
			'bit.ly',
			'j.mp',
			'goo.gl',
			'is.gd',
			'tinyurl.com'
		&#93;
		dialog(
			"Post Now browsing to Twitter Settings",
			{ width: 600, height: 700 },

				section(
						"User options",
						"Behavior/keyboard Preference",
						grid(
								text("Prefix:", 'defaultTag', "Now browsing: ", { size: 20 }), '\n',
								checkbox("Use selection quote", 'isSelection', true), '\n',
								checkbox("Post with Ctrl+Enter", 'PostWithCtrl', false), '\n',
								text("ShortcutKey:", 'ShortCutKey', "CS-Enter", { size: 16 })
								)
						),
				section(
						"Short URL options",
						"select used Short URL service",

						grid(
								select("Short URL Services", 'ShortURL', shortURL_opt, "bit.ly"), '\n',
								text("bit.ly Username:", 'bitlyUserName', "remiko"), '\n',
								text("bit.ly APIKey :", 'bitlyAPIKey', 'R_fa2240c646c07b2091c6bc6d109089ef', { size: 30 })
								)
						),
				section(
						"OAuth Authorization",
						"Sign in with Twitter"
						)
				);
	}
}, {
	saveKey: 'GM_config',
	aftersave: function() {

	},
	afteropen : function() {
		// ショートカットの入力補助
		var iframeDoc = this.frame.contentDocument;
		iframeDoc.getElementById("control_ShortCutKey").addEventListener('keydown', function (evt) {
			evt.preventDefault();
			this.value = shortcut.get(evt);
		}, false);
		// OAuth Setting
		if (TWOauth.isAuthorize()) {
			TWOauth.injectToConfig();
		} else {
			XHRloading.createText(iframeDoc);
			TWOauth.getRequestToken(TWOauth.injectToConfig);
		}
	}
});</pre><p>二つを見比べると、GM_configはオブジェクトを定義する感じだけど、USConfigはその都度関数を呼び出す感じになってる。レイアウトの自由度はUSConfigの方が上ですが、ちょっとインデント管理が大変で書きにくい。<br
/> またUSConfigではselectに連想配列っぽいオブジェクトを使えないので、配列に直す必要があります。<br
/> 後、<a
href="https://github.com/h1mesuke/usconfig/wiki/text%28%29">Text() </a>のデフォルトサイズが少し小さいので第4引数で属性にsizeを追加してます。<br
/> 最後の空sectionはafteropen時に書き換えるようにしてるので、本質とはあんまり関係ないです。<br
/> USConfigの方が<a
href="https://github.com/h1mesuke/usconfig/wiki/Config.define%28%29">Config.define()</a>でのコールバック(afteropenなど)が豊富なので、細かい制御がしやすいと思います。<br
/> そのコードバックで設定画面のiframeをとるにはthis.frameとすればよいみたいです。</p><ul><li><a
href="http://twitter.com/h1mesuke/statuses/11755139056541696">Twitter / h1mesuke: @azu_re はじめまして。afteropen と &#8230;</a></li></ul><p>次に設定情報の取り出し方<br
/> GM_configがそのつど、keyを指定してvalueを取り出す感じだったのが(GreasemonkeyのGM_getvalueに近い)</p><pre>GM_config.get(key);// value</pre><p>USConfigでは設定全部をまとめたオブジェクトを最初にロードする感じになっています</p><pre>var settings = Config.load();
settings.key;// value
</pre><p>また、設定を保存するキーの初期値はGM_configと違うのでそのまま移行させるためにはsaveKeyを&#8217;GM_config&#8217;にします。</p><pre>Config.define('dialog_name', function() { with (this.builder) {
  dialog(...);
}}, {
  saveKey: 'GM_config',
  aftersave: function() {...},
});
</pre><p>後はGM_config.*()がConfig.*()など細かい違いあるので、それを手直しすれば移行できました。<br
/> (GM_config.close()がConfig.remove()だったのが少しはまった)</p><div
id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">USConfig</div>]]></content:encoded> <wfw:commentRss>http://efcl.info/2010/1207/res2169/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>ページ移動時などに音を鳴らすアドオン「KIRISAKE」</title><link>http://efcl.info/2010/0821/res1906/</link> <comments>http://efcl.info/2010/0821/res1906/#comments</comments> <pubDate>Sat, 21 Aug 2010 05:27:05 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Jetpack]]></category> <category><![CDATA[Firefox]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[UI]]></category> <category><![CDATA[アドオン]]></category> <category><![CDATA[拡張機能]]></category><guid
isPermaLink="false">http://efcl.info/?p=1906</guid> <description><![CDATA[またJetpack SDKで1つアドオンを作成してみました。リンクをクリックしてページ移動などの通信が始まった際に、風を切り裂くような音を出すアドオンです。 KIRISAKE :: Add-ons for Firefox [...]]]></description> <content:encoded><![CDATA[<p>またJetpack SDKで1つアドオンを作成してみました。<br
/>リンクをクリックしてページ移動などの通信が始まった際に、風を切り裂くような音を出すアドオンです。</p><ul><li><a
href="https://addons.mozilla.org/ja/firefox/addon/220208/">KIRISAKE :: Add-ons for Firefox</a> ダウンロード先</li><li><a
href="http://github.com/azu/JetpackSDK/tree/master/KIRISAKE/">KIRISAKE at master from azu&#8217;s JetpackSDK &#8211; GitHub</a> ソースコード</li></ul><p>作った理由ですが、<br
/>移動する際に音を出すと、ちゃんとリンクをクリックできたかなどが聴覚的にも認識できるのと、上記のような音を使う事でブラウザが少し早くなったような感じがします(I shallplease)</p><p>という後付けの理由があったりしますが、HTML5のAudioタグを使って見たかったというのが第一の要因です。<br
/>そういう気分になったのは中国のJetpackerのLT資料を見つけて、pageWorkerでhtmlファイルを読み込んでその中でAudioタグを鳴らすというサンプルが載っていたので実践してみました。<br
/>見つけたLTの資料はこれ<a
href="http://www.slideshare.net/littlebtc/jetpack-sdk-the-new-possibility-of-the-extensions-on-browser">Jetpack SDK: The new possibility of the extensions on browser</a></p><p>処理的にはたいしたことはやっていませんが、Jetpack SDKにはページ移動(ページを読み込みじゃなくて、通信が始まった瞬間)に反応するAPIはまだないような感じなので、nsIWebProgressを使った普通のFirefox拡張機能と同じように直に書きました。<br
/>Components.interfacesとか使う必要性が出てくるわけですが、Jetpack SDK0.6からはCiやCcというエイリアスがデフォルトではなくなったので、以下のようにrequireしてから使う必要があります。<br
/><a
href="https://dev.mozilla.jp/2010/07/jetpack-sdk-0-6/">Jetpack SDK 0.6 がリリースされました « Mozilla Developer Street (modest)</a></p><pre>var {Cc, Ci} = require("chrome");
</pre><p>ちなみにこのvar {a,b} = obj;みたいな表記は<a
href="https://developer.mozilla.org/ja/New_in_JavaScript_1.7#.e5.88.86.e5.89.b2.e4.bb.a3.e5.85.a5">分割代入</a>というJavaScript 1.7からの機能を使ったもので、</p><pre>var Cc = require("chrome").Cc , Ci = require("chrome").Ci;
</pre><p>というのと同様の意味になります。一部地域ではよく見かけるので覚えておくと便利です。</p><ul><li><a
href="http://nanto.asablo.jp/blog/2009/12/30/4784624">Kanasan.JS Jetpack ワークショップ: Days on the Moon</a></li><li><a
href="http://d.hatena.ne.jp/mooz/20100729/p1">JavaScript の分割代入まとめ &#8211; mooz deceives you</a></li></ul><p>参考サイト</p><ul><li><a
href="http://d.hatena.ne.jp/cou929_la/20100301/1267434283">Progress Listenersでロケーションバーのurl変更されたときに何かする &#8211; フリーフォーム フリークアウト</a></li><li><a
href="http://piro.sakura.ne.jp/latest/blosxom/mozilla/xul/2007-01-21_splitbrowser-subbrowser.htm">Latest topics &gt; Split Browser開発のよもやま話（6）：分割されたブラウザの作り込み &#8211; outsider reflex</a></li></ul><div
id="_mcePaste" style="position: absolute; left: -10000px; top: 108px; width: 1px; height: 1px; overflow: hidden;">Components.interfaces</div> ]]></content:encoded> <wfw:commentRss>http://efcl.info/2010/0821/res1906/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Post Now browsing to TwitterをOAuth認証に対応しました</title><link>http://efcl.info/2010/0609/res1715/</link> <comments>http://efcl.info/2010/0609/res1715/#comments</comments> <pubDate>Wed, 09 Jun 2010 10:55:01 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Greasemonkey]]></category> <category><![CDATA[API]]></category> <category><![CDATA[twitter]]></category> <category><![CDATA[UI]]></category> <category><![CDATA[設定]]></category><guid
isPermaLink="false">http://efcl.info/?p=1715</guid> <description><![CDATA[Twitterへ今見ているサイトをコメントと共に投稿する「Post Now browsing to Twitter」がOAuth認証に対応しました。このGreasemonkeyをインストールする前に、以前のバージョン(2 [...]]]></description> <content:encoded><![CDATA[<p>Twitterへ今見ているサイトをコメントと共に投稿する「<a
href="http://userscripts.org/scripts/show/46441">Post Now browsing  to Twitter</a>」が<strong>OAuth認証に対応</strong>しました。<br
/>このGreasemonkeyをインストールする前に、<strong>以前のバージョン(2010年6月より前)のものを入れている場合はそれをアンインストール</strong>してから、改めて「<a
href="http://userscripts.org/scripts/show/46441">Post Now browsing to Twitter</a>」をインストールして下さい。(以前と設定の互換が無くなったため設定ごと破棄をお勧めします)<br
/>ツール→Greasemonkey(もしくはステータスバーの猿アイコン)→ユーザースクリプトの管理→Post Now browsing to  Twitterを選択→✓関連付けられた設定も削除にチェック→アンインストール</p><p><span
id="more-1715"></span>主な変更点を箇条書きすると以下のような感じです。</p><p>変更内容<br
/>1. OAuth対応<br
/>BASIC認証が2010年6月末に廃止されるためOAuth認証に対応しました。<br
/>設定画面から認証できます。<br
/>BlowsingNow!などの外部サーバを経由するものとは違い、PINコードを使ってGreasemonkeyスクリプト単体でOAuth認証を行います。<br
/>2. 入力UIがサイトの影響を受けなくなった<br
/>入力UI自体は以前と同じですが、サイト側CSSの影響を受けることがあったのを改善し、影響を受けないようにしました。<br
/>3. 設定項目の変更<br
/>以前と設定項目が変わったため設定の互換性がありません。<br
/>そのため、<strong>以前のものはアンインストールから</strong>インストールして下さい。</p><ol><li>短縮URLの選択肢が増えた<br
/> 新たにbit.ly(j.mp)、goo.glを追加しました。<br
/> bit.ly(j.mp)はAPIの設定も行えます。</li><li>Ctrl+Enterでのポスト<br
/> デフォルトはEnterで送信ですが、設定のチェックの意味が逆になったという変更。(正直気にすることはない)<br
/> 設定でCtrl+Enterでポストするように変更できます。</li><li>Twitterアカウントの入力項目廃止<br
/> 以前はベーシック認証を使っていたので、Twitterアカウントの入力項目がありましたが、OAuth認証に対応したため廃止しました。</li></ol><p>OAuth認証は設定の一番下に表示されます。(いつでも認証を解除する事ができます。)<br
/>4. 短縮URLのリトライ機能<br
/>短縮URLサービスのサーバにアクセスできないときに(5秒でタイムアウト)、別の短縮URLサービスに切り替えて短縮します。</p><p>ぱっとした変化を見ると、OAuthに対応したのと、bit.ly、goo.glなどの短縮URLが使えるようになったぐらいかな。</p><h3>OAuth認証の手順</h3><p>Greasemonkey 単体でOAuth認証を行うようにしたので手順が少し複雑です。<br
/>以下の動画を参考にして下さい。</p><p><object
classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param
name="allowFullScreen" value="true" /><param
name="allowscriptaccess" value="always" /><param
name="src" value="http://www.youtube.com/v/8oXTuZk5xAk&amp;hl=ja_JP&amp;fs=1&amp;rel=0&amp;hd=1" /><param
name="allowfullscreen" value="true" /><embed
type="application/x-shockwave-flash" width="640" height="385" src="http://www.youtube.com/v/8oXTuZk5xAk&amp;hl=ja_JP&amp;fs=1&amp;rel=0&amp;hd=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><p>文字で書くと、</p><ol><li>ステータスバーのGreasemonkeyアイコンを右クリック<br
/>ユーザースクリプトコマンド→Post Now browsing to Twitter Settingから設定画面へ</li><li>OAuth認証をまだしてないなら、&#8221;Sign in with Twitter&#8221;ボタンが表示されるのでクリック</li><li>OAuth認証ページが開くので、そこへ行き許可(Allow)する。</li><li>PINコードが表示されるのでCtrl+Cなどでコピーする。</li><li>再び設定画面に戻り、インプットボックスへPINコードをCtrl+V(ペースト)して、Comfirmボタンを押す。</li><li>Success!出たら、ページでショートカットキー(デフォルトはCtrl+Shift+Enter)を押し、入力UIを出す。</li><li>適当にコメントとかを書いたらEnter(設定でCtrl+Enterに変えられます)でTwitterへポストする</li><li>投稿できたらOK</li></ol><p>5ぐらいまでがOAuth認証の手順で、6以降は投稿する手順。</p><p>以下感想<br
/>OAuthに対応してるGreasemonkeyが皆無で結局自分で色々書かないといけなかった。<br
/>OAuth.jsとかライブラリを使ってるので結構サイズが大きくなった。<br
/>OAuthページとかのアイコンがやっつけ感酷いのでアイコン募集中。</p><dl><dt>機能説明ページ<br
/></dt><dt><strong>Post Now browsing to Twitter | Web scratch</strong></dt><dd><a
title="Post Now browsing to Twitter | Web scratch" href="../post-now-browsing-to-twitter/">http://efcl.info/post-now-browsing-to-twitter/</a></dd></dl><dl><dt>スクリプト配布ページ<br
/></dt><dt><strong>Post Now browsing to Twitter for Greasemonkey</strong></dt><dd><a
title="Post Now browsing to Twitter for Greasemonkey" href="http://userscripts.org/scripts/show/46441">http://userscripts.org/scripts/show/46441</a></dd></dl>]]></content:encoded> <wfw:commentRss>http://efcl.info/2010/0609/res1715/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Greasemonkeyでサイト既存CSSの影響を受けないポップアップパネルを作る方法</title><link>http://efcl.info/2010/0328/res1636/</link> <comments>http://efcl.info/2010/0328/res1636/#comments</comments> <pubDate>Sat, 27 Mar 2010 16:11:20 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Greasemonkey]]></category> <category><![CDATA[css]]></category> <category><![CDATA[UI]]></category> <category><![CDATA[ニコニコ動画]]></category> <category><![CDATA[ポップアップ]]></category><guid
isPermaLink="false">http://efcl.info/?p=1636</guid> <description><![CDATA[Greasemonkeyは各サイトでユーザースクリプトを実行できて便利ですが、ある要素を挿入したときにそれがサイトに元々書いてあるCSSの影響を受けてしまうことがあります。 一つのサイトならまだしもhttp*で動くような [...]]]></description> <content:encoded><![CDATA[<p>Greasemonkeyは各サイトでユーザースクリプトを実行できて便利ですが、ある要素を挿入したときにそれがサイトに元々書いてあるCSSの影響を受けてしまうことがあります。<br
/> 一つのサイトならまだしもhttp*で動くようなものだと対応仕切れないのでiframeを使いサイトに書いてあるCSSの影響を受けないパネルを作る。<br
/> iframeの中はそのサイトにあるCSSの影響を受けないので、iframe内にGreasemonkeyで表示したいものを置けば影響を受けないものが作成できる。<br
/> makeFrameというのが今回の主題。</p><pre class="brush:javascript;">makeFrame(gotFrame1);
makeFrame(gotFrame2);

function gotFrame1(iframe, win, doc) {
  iframe.height = "350";
  iframe.width = "500";
  iframe.style.position = "fixed";
  iframe.style.bottom = iframe.style.left = "0";
  doc.body.innerHTML += "Frame1ですね。"
}
function gotFrame2(iframe, win, doc) {
  iframe.height = "350";
  iframe.width = "500";
  iframe.style.position = "fixed";
  iframe.style.bottom = iframe.style.right = "0";
  iframe.style.backgroundColor = "#ddd";
  doc.body.innerHTML += "Frame2ですよ。"
}
// Creates a new iframe and attaches it to the DOM, waits for it to load, tests
// that we did not hit https://bugzilla.mozilla.org/show_bug.cgi?id=295813 nor
// https://bugzilla.mozilla.org/show_bug.cgi?id=388714 (and retries otherwise),
// to finally call the provided done callback, passing the iframe, its window
// and document. (The optional name parameter, if provided, will be used to name
// the iframe in window.frames, or be created as "pane-1" onwards, otherwise.)
/*
    var cacllback = function(iframe, win, doc){

    }
    makeFrame(cacllback);
    makeFrame(cacllback , "frameName");
    makeFrame(cacllback , "frameName" , true);// debug mode
*/
function makeFrame(callback/*(iframeTag, window, document)*/, name, debug) {
    function testInvasion() {
        iframe.removeEventListener("load", done, true);
        var message = ((new Date) - load.start) + "ms passed, ";
        try { // probe for security violation error, in case mozilla struck a bug
            var url = unsafeWindow.frames&#91;framename&#93;.location.href;
            message += url == "about:blank" ? "but we got the right document." : "and we incorrectly loaded " + url;
            if (debug) console.log(message);
            done();
        }
        catch(e) {
            if (console &amp;&amp; console.error &amp;&amp; console.trace) {
                console.error(e);
                console.trace();
            }
            if (debug) console.log(message + "and our iframe was invaded. Trying again!");
            document.body.removeChild(iframe);
            makeFrame(callback, name);
        }
    }
    function done() {
        clearTimeout(load.timeout);
        if (debug) console.log("IFrame %x load event after %d ms", framename, (new Date) - load.start);
        var win = unsafeWindow.frames&#91;framename&#93;;
        var doc = iframe.contentWindow.document;
        // 苦し紛れのエスケープ
        var esframeName = "'"+framename+"'";
        // 自分自身のiframeを閉じるボタン
        var xImg = doc.createElement("img");
        xImg.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAATElEQVQoka2RSQ4AIAgD+f+jp96M0aq49AgdUiB0qZCkONQ/EBAwDOrrU7A1uZqN2hodtNwRqNdz0VOg62+jzuDUcVzkf+/I6h28UQHjW25Gob5AIAAAAABJRU5ErkJggg=="
        xImg.setAttribute("onclick", "parent.document.getElementsByName("+esframeName+")&#91;0&#93;.style.display='none';");
        xImg.setAttribute("style","background-color:red;border:3px;position:fixed;top:0px;right:0px");
        doc.body.appendChild(xImg);
        callback(iframe, win, doc);
    }
    var iframe = document.createElement("iframe");
    var framename = iframe.name = typeof name != "undefined" ? name : ("pane" + (makeFrame.id = (makeFrame.id || 0) - 1));
    iframe.setAttribute("style", "overflow:auto;z-index:18999; border:0; margin:0; padding:0;top:auto; right:auto; bottom:auto; left:auto;background-color:#fff");
    iframe.src = "about:blank";
    iframe.addEventListener("load", done, true);
    var frames = makeFrame.data || {};
    var load = frames&#91;framename&#93; || {
        start: new Date,
        sleepFor: 400
    };
    load.timeout = setTimeout(testInvasion, load.sleepFor);
    load.sleepFor *= 1.5;
    frames&#91;framename&#93; = load;
    makeFrame.data = frames;
    document.body.appendChild(iframe);
}
</pre><ul><li><a
href="http://gist.github.com/raw/346174/e76861b73952461419eebe2335ee9c13b8344b40/panel.user.js">panel.user.js</a></li></ul><p>makeFrame関数は(callback ,[フレームのname , debugモード])という引数なので、gotFrame1という関数(callback)を引数にしてmakeFrameを読んでいる。 callbackには(iframe, iframeのwindow, iframeのdocument)が入ってるいるので、iframeのstyleをいじればパネルの色やサイズ、表示する場所などを指定できる。 上記のソースだと左下にframe1、右下にframe2が表示できる。</p><p><a
href="http://efcl.info/wp-content/uploads/2010/03/sshot-2010-03-28-1.png"><img
class="aligncenter size-medium wp-image-1638" title="sshot-2010-03-28-1" src="http://efcl.info/wp-content/uploads/2010/03/sshot-2010-03-28-1-300x219.png" alt="表示例" width="300" height="219" /></a></p><p><strong>元ネタからの改良点 </strong></p><ul><li>パネルを閉じるボタンの追加</li></ul><p>それぞれのパネル右上に表示されているxボタンは、パネルを閉じるボタンとして機能している。 innerHTMLが+になってるのはiframe内にxボタンを追加しているため。</p><ul><li>Flashより上部に表示</li></ul><p>パネルなのでFlashがあってもその上に表示できるようにした方が動作的にはいいと思うのでCSSを少し修正した。<br
/> 要素をFlashより上部する方法は以前書いた<a
href="http://efcl.info/2008/0622/res227/">Flashよりも前面にポップアップを表示する</a>か<a
href="http://d.hatena.ne.jp/gifnksm/20100129/1264797620">Firefox 3.6でFlashの上に position: fixed; な要素を表示できなくなった件 &#8211; なんとなく目記</a>を見るといい。<br
/> Firefox3.6では挙動が変わったので注意。<br
/> Flashより上に表示するには&#8221;position: fixed; <span
class="keyword">overflow</span>: auto;&#8221;とした要素であり、以下の条件を満たす必要がある。</p><ol><li>透過でない(Opacityを使わない or 背景色を無指定にしない)</li><li>CSS3?(-moz-)系のstyleを使わない。(-moz-box-shadowなどは陰の部分だけFlashより後ろに表示されてしまう<br
/> 角丸border-radiusなどは要素に適応されるので要素全体がFlashより後ろに表示される。)</li></ol><p>このmakeFrameを使ったサンプルGreasemonkeyとして<br
/> ニコニコ動画再生ページからその動画のマイリストコメントをパネル上で参照できる</p><dl><dt><strong>Nico MylistComments for Greasemonkey</strong></dt><dd><a
title="Nico MylistComments for Greasemonkey" href="http://userscripts.org/scripts/show/72319">http://userscripts.org/scripts/show/72319</a></dd></dl><p>を作ってみた。</p><p>元ネタ(元ネタのサンプルはtypoがあるので、そのままだと動かない)</p><dl><dt><strong>HTML Injection Tips &#8211; greasemonkey &#8211; GitHub</strong></dt><dd><a
title="HTML Injection Tips - greasemonkey - GitHub" href="http://wiki.github.com/Martii/greasemonkey/html-injection-tips">http://wiki.github.com/Martii/greasemonkey/html-injection-tips</a></dd></dl><div
id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">makeFrame</div>]]></content:encoded> <wfw:commentRss>http://efcl.info/2010/0328/res1636/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>ニコニコ動画とflvplayer_wrapperの履歴</title><link>http://efcl.info/wiki/flvplayer_wrapper/</link> <comments>http://efcl.info/wiki/flvplayer_wrapper/#comments</comments> <pubDate>Mon, 15 Mar 2010 08:11:35 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[その他]]></category> <category><![CDATA[flash]]></category> <category><![CDATA[UI]]></category> <category><![CDATA[ニコニコ動画]]></category><guid
isPermaLink="false">http://efcl.info/?page_id=1599</guid> <description><![CDATA[以前、書いたものをちょっと修正しただけのものなので、意味がおかしい文が混じっている可能性があるので注意 **** flvplayer_wrapper http://files.getdropbox.com/u/13247 [...]]]></description> <content:encoded><![CDATA[<p>以前、書いたものをちょっと修正しただけのものなので、意味がおかしい文が混じっている可能性があるので注意</p><p>****</p><p>flvplayer_wrapper<a
href="http://files.getdropbox.com/u/132475/flvplayer_wrapper_mod.zip" target="_blank"><br
/>http://files.getdropbox.com/u/132475/flvplayer_wrapper_mod.zip</a></p><div
id=":ea">(0)使用用途と方法<br
/> 使用用途と方法が特殊なため簡単に説明。<br
/> flvplayer_wrapperはニコニコ動画の旧プレイヤーをオーバーライドして、旧プレイヤーに新しい機能を追加 することを目的としたソフトウェアです。<br
/> 旧プレイヤーは2009年7月に開発終了の宣言が出て( <a
href="http://www.nicovideo.jp/?p=about_player" target="_blank">http://www.nicovideo.jp/?p=about_player</a> )、<br
/> 新プレイヤーに切り替わったため、現在は上記のURLのように旧プレイヤーが使用できる一部動画のみで動作する。<br
/> 使用方法はニコニコ動画のプレイヤーの代わりにflvplayer_wrapperをブラウザ上で呼び出さないといけないため、<br
/> プロキシソフトであるProxomitron(オミトロン <a
href="http://site.halfmoon.jp/movielist/29.html" target="_blank">http://site.halfmoon.jp/movielist/29.html</a> ) や NicoCache_nlといったWebページを書き換えるソフトが必要となります。<br
/> 具体的な使用方法はwiki( <a
href="http://wrapper.wiki.zoho.com/" target="_blank">http://wrapper.wiki.zoho.com/</a> )やreadme.txtにまとめてあるため割愛させていただきます。<br
/> 既に設定をしてある状態で配布している Proxomitron、<br
/> いわゆる設定済flvplayer_wrapper( <a
href="http://site.halfmoon.jp/movielist/90.html" target="_blank">http://site.halfmoon.jp/movielist/90.html</a> )を使用しているユーザが数千人程度いると思われます。<br
/> <br
/> （1）作ろうと思ったきっかけ<br
/> flvplayer_wrapper modとは、名前のように2ちゃんねるで開発されていたflvplayer_wrapperという原型となったソフトがあり、<br
/> その公開されていたソースを元に現在の大部分を完成させたflvplayer_wrapper customがありました。<br
/> 2ちゃんねるでflvplayer_wrapper customの制作者が開発を終了するとの知らせと、同時期にNicoCacheのスレに おいて<br
/> 簡単なflvplayer_wrapper customの改変方法が書いてあったのが、flvplayer_wrapper  modを開発しようとしたきっかけです。<br
/> つまり、flvplayer_wrapper modはflvplayer_wrapper  customの公開されていたソースコードが元となっています。<br
/> flvplayer_wrapperは何人かの制作者によって勝手に受け継がれて作られているので、総称してflvplayer_wrapper と呼ばれている。<br
/> flvplayer_wrapperはmingというphpのFLASHを生成するためのライブラリが使われており、中身はAS2がほとんどとなっています。<br
/> 2008年7月11日に初めてflvplayer_wrapperをさわり始めた当初は、プログラミングもほとんどやったことがなかったので、<br
/> 少しだけかじっていたjavascriptの知識を元に手探りで改変とニコニコ動画の仕様変更へと対応していました。<br
/> そのため、2ちゃんねるの掲示板上での動作報告やアドバイスなどがなかったら、保持していくことはなかったと思います。<br
/> <br
/> （2）工夫点や苦労した点<br
/> flvplayer_wrapperはニコニコ動画のプレイヤーにオーバーライドするという仕様上、ニコニコ動画のプレイヤーの<br
/> 変更に影響を受けやすいため、頻繁に行われていた仕様変更に対応することに多くの時間を費やしました。<br
/> ニコニコ動画のプレイヤーをデコンパイルした結果を比較しながら、どこがどのように変更したかを確認したから、<br
/> flvplayer_wrapperにそれを落とす作業が多く、その中で新しく便利な追加機能を加えていきました。<br
/> 特にニコニコ動画でユーザーニコ割が導入された際はかなり大きな変更があり、なおかつ当時はプログラミング知識もあまりなかったため、かなり苦戦してユーザーニコ割へ対応した覚えがある。<br
/> また、flvplayer_wrapperは機能の多さと画面の広さを維持したいという思いがあったため、UIにいくつかのパターンを用意したり(<a
href="http://is.gd/1YI7C" target="_blank"> http://is.gd/1YI7C</a> )、<br
/> プレイヤーを最大化した上でのユーザーニコ割の表示に動画自体の邪魔にならないようにするなどの工夫をした。<br
/> ここでも、2ちゃんねるのオミトロンスレでのUIイメージの提供などの協力があったためできたと思います。<br
/> flvplayer_wrapperは自分単独で作成したものではありませんが、2008年7月11日から旧プレ イヤーの保持が終了されている現在までに渡って、自分が一番多くの時間を使って関わったソフトウェアである。</div><div>****</div><div>以上</div><div>現在ではoldplayerモードでないといけないことやswf動画では動作しない等いろいろ寿命的な問題が出ています。<br
/> nicocache_nlを使用すれば、誤魔化しながらもswfでも動かしたり延命できるかもしれません。<br
/> (nicocache_nlには新型用にコンパイルされたswfを旧型(wrapper等)でも動くように変換するソフトが付いているので、<br
/> それを利用する。詳しくは<strong>NicoCache_nl</strong>のreadme.txtやwiki等を参照)</div><div><dl><dt><strong>FrontPage &#8211; NicoCache_nl</strong></dt><dd><a
title="FrontPage - NicoCache_nl" href="http://nicolist.net/nicocache_nl/wiki/">http://nicolist.net/nicocache_nl/wiki/</a></dd></dl></div><div
id="_mcePaste" style="position: absolute; left: -10000px; top: 267px; width: 1px; height: 1px; overflow: hidden;">flvplayer_wrapper<br
/> http://files.getdropbox.com/u/132475/flvplayer_wrapper_mod.zip<br
/> <br
/> (0)使用用途と方法<br
/> 使用用途と方法が特殊なため先に説明させていただきます。<br
/> flvplayer_wrapperはニコニコ動画の旧プレイヤーをオーバーライドして、旧プレイヤーに新しい機能を追加することを目的としたソフトウェアです。<br
/> 旧プレイヤーは2009年7月に開発終了の宣言が出て( http://www.nicovideo.jp/?p=about_player )、<br
/> 新プレイヤーに切り替わったため、現在は上記のURLのように旧プレイヤーが使用できる一部動画のみで動作する。<br
/> 使用方法はニコニコ動画のプレイヤーの代わりにflvplayer_wrapperをブラウザ上で呼び出さないといけないため、<br
/> プロキシソフトであるProxomitron(オミトロン http://site.halfmoon.jp/movielist/29.html ) や NicoCache_nlといったWebページを<br
/> 書き換えるソフトが必要となります。<br
/> 具体的な使用方法はwiki( http://wrapper.wiki.zoho.com/ )やreadme.txtにまとめてあるため割愛させていただきます。<br
/> 既に設定をしてある状態で配布しているProxomitron、<br
/> いわゆる設定済flvplayer_wrapper( http://site.halfmoon.jp/movielist/90.html )を使用しているユーザが数千人程度いると思われます。<br
/> <br
/> （1）作ろうと思ったきっかけ<br
/> flvplayer_wrapper modとは、名前のように2ちゃんねるで開発されていたflvplayer_wrapperという原型となったソフトがあり、<br
/> その公開されていたソースを元に現在の大部分を完成させたflvplayer_wrapper customがありました。<br
/> 2ちゃんねるでflvplayer_wrapper customの制作者が開発を終了するとの知らせと、同時期にNicoCacheのスレにおいて<br
/> 簡単なflvplayer_wrapper customの改変方法が書いてあったのが、flvplayer_wrapper modを開発しようとしたきっかけです。<br
/> つまり、flvplayer_wrapper modはflvplayer_wrapper customの公開されていたソースコードが元となっています。<br
/> flvplayer_wrapperは何人かの制作者によって勝手に受け継がれて作られているので、総称してflvplayer_wrapperと呼ばれている。<br
/> flvplayer_wrapperはmingというphpのFLASHムービーを生成するためのライブラリが使われており、中身はAS2がほとんどとなっています。<br
/> 2008年7月11日に初めてflvplayer_wrapperをさわり始めた当初は、プログラミングもほとんどやったことがなかったので、<br
/> 少しだけかじっていたjavascriptの知識を元に手探りで改変とニコニコ動画の仕様変更へと対応していました。<br
/> そのため、2ちゃんねるの掲示板上での動作報告やアドバイスなどがなかったら、このプロダクトを保持していくことはなかったと思います。<br
/> <br
/> （2）がんばった点や苦労した点<br
/> flvplayer_wrapperはニコニコ動画のプレイヤーにオーバーライドするという仕様上、ニコニコ動画のプレイヤーの<br
/> 変更に影響を受けやすいため、頻繁に行われていた仕様変更に対応することに多くの時間を費やしました。<br
/> ニコニコ動画のプレイヤーをデコンパイルした結果を比較しながら、どこがどのように変更したかを確認したから、<br
/> flvplayer_wrapperにそれを落とす作業が多く、その中で新しく便利な追加機能を加えていきました。<br
/> 特にニコニコ動画でユーザーニコ割が導入された際はかなり大きな変更があり、なおかつ当時はプログラミング知識もあまりなかったため、かなり苦戦してユーザーニコ割へ対応した覚えがある。<br
/> また、flvplayer_wrapperは機能の多さと画面の広さを維持したいという思いがあったため、UIにいくつかのパターンを用意したり(<br
/> http://is.gd/1YI7C )、<br
/> プレイヤーを最大化した上でのユーザーニコ割の表示に動画自体の邪魔にならないようにするなどの工夫をした。<br
/> ここでも、2ちゃんねるのオミトロンスレでのUIイメージの提供などの協力があったためできたと思います。<br
/> flvplayer_wrapperは自分単独で作成したプロダクトではありませんが、2008年7月11日から旧プレイヤーの保持が終了されている現在までに渡って、自分が一番多くの時間を使って関わったものである。</div>]]></content:encoded> <wfw:commentRss>http://efcl.info/wiki/flvplayer_wrapper/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Twitterへ見ているサイトを投稿するGreasemonkey「Post Now browsing to Twitter」更新</title><link>http://efcl.info/2010/0221/res1569/</link> <comments>http://efcl.info/2010/0221/res1569/#comments</comments> <pubDate>Sun, 21 Feb 2010 14:33:45 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Greasemonkey]]></category> <category><![CDATA[twitter]]></category> <category><![CDATA[UI]]></category> <category><![CDATA[ショートカット]]></category><guid
isPermaLink="false">http://efcl.info/?p=1569</guid> <description><![CDATA[今見ているサイトのURLをコメントとともにTwitterに投稿するGreasemonkeyであるPost Now browsing to Twitterを更新したので更新内容について。 どんな感じのものかは以前の記事を見 [...]]]></description> <content:encoded><![CDATA[<p>今見ているサイトのURLをコメントとともにTwitterに投稿するGreasemonkeyである<a
href="http://userscripts.org/scripts/show/46441">Post Now browsing to Twitter</a>を更新したので更新内容について。<br
/> どんな感じのものかは以前の記事を見てください。</p><dl><dt><strong>今見ているサイトをTwitterに投稿する「Post Now browsing to Twitter」 | Web scratch</strong></dt><dd><a
title="今見ているサイトをTwitterに投稿する「Post Now browsing to Twitter」 | Web scratch" href="http://efcl.info/2009/0929/res1369/">http://efcl.info/2009/0929/res1369/</a></dd></dl><h3>更新点</h3><ul><li>入力UIの変更</li></ul><p><a
href="http://efcl.info/wp-content/uploads/2010/02/sshot-2010-02-21-1.png"><img
class="size-medium wp-image-1570 alignnone" title="sshot-2010-02-21-1" src="http://efcl.info/wp-content/uploads/2010/02/sshot-2010-02-21-1-300x58.png" alt="" width="300" height="58" /></a></p><p>今まではコメントの入力を通常のプロンプトで行っていましたが、入力用のテキストエリアをショートカットを押した際に表示する用にしました。<br
/> コメントするUIとポストした際の並びに統一感がでたのと、コメントの入力に対してリアルタイムで合計の文字数をカウントアップします。(140文字をオーバーしても自動でタイトルを切って140文字に納めるのでカウントアップにしてます。)<br
/><strong>コメント入力後(未記入でもOK)Ctrl+Enterを押すとTwitterにポストします。</strong><br
/> <strong>コメント入力をキャンセルしたい場合はESCキーを押すことでキャンセルできます。</strong></p><p>また、promptの時とは違いテキストエリアで入力するので、<a
href="http://e-words.jp/w/E383A2E383BCE38380E383ABE38380E382A4E382A2E383ADE382B0.html">モーダルダイアログ</a>のように入力欄が表示されているとき、ページ上のテキストを選択できないということがなくなります。</p><p>後は細かい修正。<br
/> インストールは<a
href="http://userscripts.org/scripts/show/46441">こちら</a>から</p><dl><dt><strong>Post Now browsing to Twitter</strong></dt><dd><a
title="Post Now browsing to Twitter" href="http://userscripts.org/scripts/show/46441">http://userscripts.org/scripts/show/46441</a></dd></dl>]]></content:encoded> <wfw:commentRss>http://efcl.info/2010/0221/res1569/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>有料スクリーンキャプチャソフトのメモ書きまとめ</title><link>http://efcl.info/2009/0321/res628/</link> <comments>http://efcl.info/2009/0321/res628/#comments</comments> <pubDate>Sat, 21 Mar 2009 08:54:09 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[software]]></category> <category><![CDATA[まとめ]]></category> <category><![CDATA[UI]]></category> <category><![CDATA[vista]]></category> <category><![CDATA[web2.0]]></category> <category><![CDATA[キャプチャー]]></category><guid
isPermaLink="false">http://efcl.info/?p=628</guid> <description><![CDATA[感覚的なスクリーンキャプチャソフト(制止画)の感想です。 HyperSnap http://www.yanasa.co.jp/articles/3/1/HyperSnap-aeaeec-ieaeeaaaaaaaaaaaa [...]]]></description> <content:encoded><![CDATA[<p>感覚的なスクリーンキャプチャソフト(制止画)の感想です。</p><dl><dt><strong>HyperSnap</strong></dt><dd><a
href="http://www.yanasa.co.jp/articles/3/1/HyperSnap-aeaeec-ieaeeaaaaaaaaaaaaai/aaa1.html">http://www.yanasa.co.jp/articles/3/1/HyperSnap-aeaeec-ieaeeaaaaaaaaaaaaai/aaa1.html</a></dd></dl><p>とにかく高機能な感じで、大抵のことはコレで事足りるはず。<br
/> UIが少し古くさいが、<span
class="body12"><strong>TextSnap™</strong>(キャプチャー中の文字列をコピーできる)や高機能なエディタや画像加工ができる。<br
/> </span><span
class="body12">DirectXや3Dfx、GLIDEなど殆どの部分をキャプチャーできるので、申し分ない機能性を持ってる。</span></p><dl><dt
style="text-align: right;"><strong>Hyperionics &#8211; the best screen capture software &#8211; Free download</strong></dt><dd
style="text-align: right;"><a
href="http://www.hyperionics.com/">http://www.hyperionics.com/</a></dd></dl><dl><dt><strong>SnagIt</strong></dt><dd><a
href="http://asi-co.jp/products/snagit/">http://asi-co.jp/products/snagit/</a></dd></dl><p>こちらも高機能なキャプチャーソフト。<br
/> 保存形式が多彩で、Webページのリンクを保ったままswfに書き出したりoffice系ソフトとの連携もできる。<br
/> さらに高機能なエディタ(これ単独でも使える)があり、UIもキレイでWeb2.0的なキャプチャーを作りやすい。<br
/> エフェクトも多彩で見た目を重視したい時に使用するといい。<br
/> ちなみに日本語版もあるが、すなおに英語(本家)の方を追うようにしといた方がいい。</p><dl><dt
style="text-align: right;"><strong>Screen Capture | Snagit | Screen capture software by TechSmith</strong></dt><dd
style="text-align: right;"><a
href="http://www.techsmith.com/screen-capture.asp">http://www.techsmith.com/screen-capture.asp</a></dd></dl><dl><dt><strong>WinSnap</strong></dt><dd><a
href="http://www.ntwind.com/software/winsnap.html">http://www.ntwind.com/software/winsnap.html</a></dd></dl><p>Vistaを美しくキャプチャーするために特化しているキャプチャーソフト。<br
/> ウィンドウを欠ける事なくとれたり、シャドウやリフレクションなど、美しく取るための機能に特化している。<br
/> エディタなどの機能はなく、機能は豊富とは言えないが、キャプチャーするのが気持ちいいという感じのソフトだ。<br
/> また、作者が個人開発?なので、フォーラムで積極的に取り組んでいるので将来的にも面白いソフト。</p><dl><dt><strong>FastStone Capture</strong></dt><dd><a
href="http://www.faststone.org/FSCaptureDetail.htm">http://www.faststone.org/FSCaptureDetail.htm</a></dd></dl><p>FastStoneシリーズのキャプチャーソフト。<br
/> 機能としては、一通りのキャプチャー方法や、簡易なエディタなど少し見劣りするが、十分に高機能なソフトである。<br
/> 特徴として動作が軽い事があげられる。<br
/> シンプルなんだけど、いろいろと使いやすいキャプチャーソフトだ。<br
/> 日本語化パッチも別所で配布されている。</p><dl><dt
style="text-align: right;"><strong>それさえもおそらくは平穏な日々</strong></dt><dd
style="text-align: right;"><a
href="http://hibiheion.seesaa.net/">http://hibiheion.seesaa.net/</a></dd></dl>]]></content:encoded> <wfw:commentRss>http://efcl.info/2009/0321/res628/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>画像からテキストまでもスクラップして一つの画像にするRipt</title><link>http://efcl.info/2008/0208/res62/</link> <comments>http://efcl.info/2008/0208/res62/#comments</comments> <pubDate>Thu, 07 Feb 2008 16:27:19 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[software]]></category> <category><![CDATA[UI]]></category> <category><![CDATA[ソフトウェア]]></category><guid
isPermaLink="false">http://efcl.info/2008/0208/res62/</guid> <description><![CDATA[RiptはWEB上にあるテキストや画像を現れるアイコンへドラッグするだけできもちいい音を立ててスクラップする。 また同様にフォルダーにある画像をD&#38;Dしても同じである。 このソフトをさわって久しぶりに興奮した気が [...]]]></description> <content:encoded><![CDATA[<p> <img
src="http://mozshot.nemui.org/shot?http://www.ript.com/" style="border: medium none " border="0" height="128" hspace="4" vspace="4" width="128" /></p><p><a
href="http://www.ript.com/">Ript</a>はWEB上にあるテキストや画像を現れるアイコンへドラッグするだけできもちいい音を立ててスクラップする。<br
/> また同様にフォルダーにある画像をD&amp;Dしても同じである。</p><p>このソフトをさわって久しぶりに興奮した気がする。なぜそうなったのかと言うと、とてもキレイなUIをしているし、<br
/> スクラップするのが簡単でテキストも簡単にスクラップでき、その時の音も気持ちいいw</p><p>このソフトはスクラップしておくことに目的があるみたいで、スクラップしたものにメモ書き(exifみたいに見えない情報)を<br
/> 書き加えることもできる。<br
/> 自分的にはWEBで公開用にスクリーンショットや説明みたいなテキストを載っけていくように使いたいと思った。<br
/> ソフトの開発目的が<strong>保存</strong>という点にあるのでまだまだ、公開向けファイルを作るには少し機能が足りないところがある。<br
/> たとえば、保存する画像のキャンバスサイズは1086×758の固定であったり、保存形式がjpgと独自の保存形式である<br
/> .ript(メモ書きなどの内容も保存するもの)しかないという点。</p><p>しかし一度さわってみると分かるように とても斬新でくせになりそうな感じのソフトである。(ジャンルの分別も難しい)<br
/> 機能不足なところ(自分が使いたい方向にとってと言う話ですが)作者は積極的にFeedbackを募集しているので<a
href="http://www.ript.com/feedback"><br
/> Ript™ Feedback</a>今後に期待したくなるソフトです。</p><p>動作しているところを見るには<br
/> <a
href="http://web-marketing.zako.org/web-tools/ript-make-beautiful-scrapbooks.html">夢も視覚化 WEBから美しいスクラップブックをサクッと作れる「Ript 」｜WEBマーケティングブログ</a><br
/> が参考になると思います。</p><p>MOONGIFTの<a
href="http://www.moongift.jp/2008/02/%e3%83%9d%e3%83%83%e3%83%97%e3%81%a7%e6%a5%bd%e3%81%97%e3%81%84%e3%82%b9%e3%82%af%e3%83%a9%e3%83%83%e3%83%97%e3%83%96%e3%83%83%e3%82%af%e3%80%8cript%e3%80%8d/" title="Permalink">ポップで楽しいスクラップブック「Ript」</a>という記事も参考になりますね。(自分はここで知りました。)</p><p>とにかく一度さわってみることをオススメできるソフトです。</p><p><a
href="http://efcl.info/wp-content/uploads/ript.jpg" title="ript.jpg"><img
src="http://efcl.info/wp-content/uploads/ript.thumbnail.jpg" alt="ript.jpg" height="134" width="191" /></a></p><p><strong>Ript™<br
/> </strong>　<a
href="http://www.ript.com/">http://www.ript.com/</a></p> ]]></content:encoded> <wfw:commentRss>http://efcl.info/2008/0208/res62/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 1/40 queries in 0.135 seconds using disk: basic
Object Caching 755/840 objects using disk: basic

Served from: efcl.info @ 2012-02-10 05:31:59 -->
