Archive for 5月, 2010

拡張機能の有効状態を保存復元するuserChrome.js

Firefoxの拡張機能(アドオン)の有効になってるか無効になってるかを記録して保存できます。
またその保存したものから各アドオンの有効の有無を復元することができます。

例えば、Firefoxの動作がおかしいなと感じて、どのアドオンが原因なのかを調べるときに、調べる前の有効状態を保存してから、一個一個アドオンを無効化して試し、原因となるアドオンが分かったら有効状態を復元して直ぐに元通りにできます。

似たような事を行えるVimperatorプラグインがあります。

アドオンの有効無効状態を保存&復帰できるプラギン – Death to false Web browser! – vimperatorグループ
http://vimperator.g.hatena.ne.jp/nokturnalmortum/20100203/1265202872

このスクリプトはuserMenu.jsが必要となるので、userChrome.jsでメニュー拡張を追加できる「userMenu.js」 | Web scratchを読んでuserMenu.jsを導入してからChromeフォルダのtoolmenuフォルダに入れてください。

アドオンの状態はextensions.scriptprefs.GM_modoki.%u30A2%u30C9%u30AA%u30F3%u6709%u52B9%u72B6%u614B%u3092%u4FDD%u5B58.extsDisable

に保存されています。(JSON.parseして使う。)

userMenu.jsに付属していた0000.アドオンリストをタブに表示.L.jsを元にしました。

他の参考にしたもの

nsIExtensionManagerで使えるもの
nsIExtensionManager.idl

ダイアログの使い方。
nsIPromptService – MDC
https://developer-stage.mozilla.org/en/nsIPromptService#confirmEx()
ダイアログの使い方。日本語ですがいろいろ抜けてます。
Dialogs and Prompts – MDC
https://developer-stage.mozilla.org/ja/Code_snippets/Dialogs_and_Prompts

userChrome.jsでメニュー拡張を追加できる「userMenu.js」

userChrome.jsでJavaScript Actionsのようなスクリプトの実行コマンドをサブメニューのネスト, タブメニューやメインメニュー、コンテキストメニューなどのメニューに追加する形のスクリプトを扱いやすくしたり、GreasemonkeyのAPIと似たような機能を持つライブラリが使える要にするuserMenu.jsの紹介
ダウンロードは以下の場所から
userChrome.js – Mozilla Firefox まとめサイト
http://firefox.geckodev.org/index.php?cmd=read&page=userChrome.js&word=user#g4f5f928

いろいろバージョンが置かれてますがuserMenu.js ver. 1.21mod 一式(Fx3以降)と最新のものをダウンロードして、ver1.21はあらかじめtabmenuなどのフォルダがあって分かりやすいので、それらを最新版で上書きすると良いでしょう。

こんな感じのファイルが入ってるので、とりあえず動作させるために、FirefoxプロファイルのChromeフォルダにそのまま中身を突っ込みます。

Chrome
│  0.UCJSToolkit.uc.js
│  GM_modoki.jsl
│  jsa.jsl
│  JSA_modoki.jsl
│  preload.sample.txt
│  scripting.txt
│  userMenu.js.readme.txt
│  userMenu.pl.js
│  userMenu.uc.js
│  ここにはuserChrome.jsなども存在
│
├─contextmenu
│      Add Copy.se.js
│      Element Killer.js
│      Google cache.nl.js
│      Google Translate.se.js
│      Open IE.nl.js
│      Open Selection.se.js
│      Reload Image.im.js
│      Use JavaScript.auto.js
│      Wayback.nl.js
│
├─tabmenu
│  └─Order.ct
│          FrameOrder.ct.auto.js
│          ImageOrder.ct.auto.js
│          JSOrder.ct.auto.js
│          PluginOrder.ct.auto.js
│          RedirectOrder.ct.auto.js
│          userContentOrder.ct.auto.js
│
└─toolmenu
        0000.アドオンリストをタブに表示.L.js
        Inspection Here.js
        Rebuild User Menu.js
        Reload userContent.css.js
        Restart Firefox.r.js
        ~.---

移動させて再起動すると、コンテキストメニューやツールメニューにいろいろな項目が増えていれば成功です。

一つ一つのスクリプトの機能は数が多いので適当に見れば分かるので、開発したスクリプトをメニューに表示させる方法へ。scripting.txtやuserMenu.js.readme.txtを見ると詳しく書いてありますが、contextmenuやtoolmenuといったフォルダがそのままの構成でメニューと対応してるので、それらのフォルダに作ったスクリプトをjs拡張子にして入れるだけで簡単に登録できます。(スクリプトのファイル名ルールでショートカットなども設定できる)
例えば、右クリックに表示されるスクリプトで複数のものを一つのフォルダに入れれば、それが一つの階層になります。

contextmenu
└─JSAction
        Add Copy.se.js
        Element Killer.js

また先ほど紹介したようにGreasemonkeyのAPIと同様の機能を持ったものが一部使えます。
GM_setValueやGM_xmlhttpRequestなど。

デバッグ方法としてconsole.ほげ()というFirebugで使われるメソッドが使用できると書いてあるのですが、イマイチ動かなかったので、
GM_modoki.jsl (GreasemonkeyのAPIを定義してるファイル)の先頭部分に

// fbug(x)でFirebugのコンソールに出力
function main(){
  var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1']
                                .getService(Components.interfaces.nsIWindowMediator);
  return windowManager.getMostRecentWindow("navigator:browser");

}
function fbug(x){
   var {Firebug} = main();
   if(Firebug.Console.isEnabled() && Firebug.toggleBar(true, 'console'))
     Firebug.Console.logFormatted(Array.slice(arguments));
   return x;
}

と書き足して、fbug(x)でFirebugのコンソールに出力するようにしました。
Services.jsmが使えるなら以下のような感じで書けるようです。xqjs – ’ellaneous が元ネタです。

Cu.import('Services.jsm');// 読み込み先にresource:// かfile://
function main() Services.wm.getMostRecentWindow('navigator:browser');
function fbug(x){
   var {Firebug} = main();
   if(Firebug.Console.isEnabled() && Firebug.toggleBar(true, 'console'))
     Firebug.Console.logFormatted(Array.slice(arguments));
   return x;
}

上記のfirebugコンソールへの出力はxqjsのソースコードを見て知ったものです。
xqjsExecute JSのようなその場でChromeやcontentに対してJavaScript実行できるアドオンです。
話題のCoffeeScriptJavaScriptの単語補完、マクロ機能、便利なユーティティ関数などが使える優れたFirefoxアドオンなので、JavaScript ShellやFirebugのコンソールで入力するのが微妙だなーと思う人は一度使って見るといいかと思います。
fbugでFirebugのコンソールにもlogを吐けるので連携させるとなお便利。
Firebugで定義されているXpathやCSSセレクタもマクロで定義されており、copy関数なども存在します。

詳しくは作者さんのページとAMOとソースを読む。

xqjs – ’ellaneous
http://d.hatena.ne.jp/murky-satyr/20100504/xqjs

話が完全にすり替わりましたが、userMenu.jsはuserChrome.jsを書く上でかなり便利だと思うので、一度見てみることを進めます。

userMenu.js
http://firefox.geckodev.org/index.php?cmd=read&page=userChrome.js&word=user#g4f5f928

メディアマーカーで楽しく読書管理する

メディアマーカーは読書管理を行えるWebサービスで、基本的な読書管理のシステムも優れていながら、Twitterへの連携やiPhoneアプリもあるので、とても使い勝手がよいサービスです。
今回は自分がどのようにメディアマーカーを使っているか、自分流の読書管理方法について書いてみる。

まず、読書管理について自分で心がけているのは

  1. どんな本だったかが直ぐ分かること
  2. 読書した本の登録が面倒くさくならないこと
  3. 読書管理を楽しめること

これを目標にしていろいろな読書管理方法を試してきました。
1のように後から見返したときにどんな本だったかを知るために読書した本を管理しているところが大きいので、以前はどんな内容だったかをレビュー形式で書いたりしていました。
しかし、本のレビューみたいに詳しく 書いていくと面倒臭さが増し2や3を破ってしまう事になり、あまり長くは続きませんでした。
(レビュー書く事が全く苦ではない人はブログや私本管理Plusを使って書きためるのもいいかもしれません)

後から見たときに本の内容を簡単に思い出す方法を考えていて思いついたのが、本の内容を貼り付けてしまえばいいと考えました。
つまり、本を読んでいるときに小説なら気になったフレーズ、漫画なら気になったコマをそのまま貼り付けてしまえばいい!
それを実現するためにとった方法は、本をカメラで撮影して画像にしてしまうという方法。
漫画などはこの方法で気になった部分を画像にできるし、小説はちょっとカメラに精度が必要となってしまうので、できなかった場合はiPhoneで気になったフレーズを書き写して、メディアマーカーiPhoneアプリで先に登録しておくといい。
最近流行ってる書籍の電子化で、既に電子化したものをビューアーで読んでいる場合はスクリーンショット機能を使って気になった部分を画像として保存しておく。
そうしてできた画像をDropboxのPublicフォルダに入れておいて外部からも参照できるようにしておく。
後は、メディアマーカーに数行のレビュー(レビューとはいえないレベル)とDropboxにある画像を貼り付けて画像を表示すれば、後から見たときに直ぐ内容が分かって便利になる。

簡単な書籍の内容についてと画像

簡単な書籍の内容についてと画像

この気になった部分を画像にして貼り付けるのは意外と楽しくて、かつ撮影してそこで直ぐ完結するので手間があまりかからない。特に電子化している場合はスクリーンショットを取るだけなので一瞬で終わる。
また画像を貼り付けるときに、Dropboxに一つの書籍について複数の画像がある場合、エクスプローラの”Copy Public Link”だと一個づつしかURLをコピーできないし、Imgタグで囲うのが面倒なのでコマンドラインで動くバッチのようなものを作る。

このProgram.csのdropboxPath部分を自分のDropbox環境に合わせてからコンパイルする。
csc.exeで以下のよう に指定するとコンパイルできる。(csc.exeの場所は.NETのどっかにあるかと、もしくはVisual Studio使うとか)

>C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe Program.cs

コ ンパイルしてできたexeファイルにD&Dや送るからファイルを渡すと渡したファイルのURLをimgタグにしたものがクリップボードにコピーさ れるので、それをメディアマーカーに貼り付けるだけでよくなる。

さらにメディアマーカーは書籍登録時にタグをつけることができ、後から見返すときにそれらの情報をつけておくと分かりやすくなるため、タグ付けを補助するGreasemonkeyを導入する。

それぞれ、登録時にAmazonとbooklogにつけられている書籍のタグを表示してくれるので、クリックするだけで書籍に関係あるタグを追加できる。

補助ツールを使うことで書籍の登録の面倒臭さも低減されるし、何よりも書籍の内容を画像で表示するのは思っている以上に楽しい事だと思う。

evernote+iPhoneで似ている事をやっている人もいます。
やっぱりカメラで写真を撮るのと書き出すのは圧倒的に手間が違うし、いつも持ち歩いてるiPhoneでもカメラは何とかなることが多いので面倒な手間が結構減ります。

Blog Forest: 読書メモの作成にevernoteを使う
http://morimorishop.com/2009/03/evernote_2.html

evernoteなら画像のOCR機能があるので検索できるという淡い期待もありますが、 Amazonから情報を引っ張れたり他とは関係の情報を切り離して見られるメディアマーカーのようなサービスで書籍を管理した方が自分にとっては便利かなーと思う。
後から見返したときに楽しいというのも大きな点。
あくまでevernte+写真はメモにして、そこから文字を書き出すというのも一つの手であると思います。

以上。

おまけ、Dropboxの画像をPublic経由で表示してるので少し重たくなってしまう。
表示する画像をローカルのものと差し替えるGreasemonkey

@include
originSrc
newSrc
の三カ所を書き換える必要がある。

セキュリティの理由からpref.jsに以下を追加してメディアマーカーからローカルの画像を表示できるようにしておかないと機能しない。

user_pref("capability.policy.localfilelinks.checkloaduri.enabled", "allAccess");
user_pref("capability.policy.localfilelinks.sites", "http://mediamarker.net");
user_pref("capability.policy.policynames", "localfilelinks");
Muses Factory » Firefoxでcheckloaduri.enabledの設定が反映されない
http://reva.s28.xrea.com/archives/38.html

[タスクスケジューラ]スリープから復帰時にプログラムの実行する方法

Windowsにはタスクスケジューラが標準でついていて、トリガーに条件をつけることで任意のタイミングでソフトウェアを実行したり、メッセージを表示することができます。
デフォルトにはログオン時やアイドル時などが用意されていますが、スリープから復帰した際にイベントを実行する設定が用意されていません。そこでスリープから復帰時にイベントを起こすトリガーの設定方法の紹介

タスクスケジューラでタスクの新規作成を行い、以下のようにトリガーを追加します。(Vista)

タスクの開始:イベント時
ログ:システム
ソース:Power-Troubleshooter
イベントID: 1

そして、操作タブで任意のプログラムを実行すれば”スリープから復帰した際にプログラムの実行“が行えます。
自分の場合はロジクールのsetPointがスリープから復帰した際に、設定が初期値に戻ってしまうというバグがあるのを何とかするために、スリープから復帰した際にsetPoitを再起動させるbatファイルを実行させるために使っています。

もう少しまともな書き方がありそうですがこんな感じ。

少し違う方法でしたが参考にしました
SeasideBlog » スリープからの復帰時にプログラムを起動する

http://seaside.sitemix.jp/?p=54

WordPressのパーマネントリンクを記事タイトルを英単語に翻訳したものにするプラグイン

ややこしいタイトルですが、Wordpressのパーマネントリンクには記事タイトルを元にした投稿スラッグを入れることができるので、日本語の記事タイトルだと日本語がそのままURLになるためあまり見栄えが良くありません。
そこで、記事タイトルを自動翻訳して英単語に直してからそれを投稿スラッグにするというプラグインを作ってみました。

これをダウンロードしてpluginフォルダにいれて有効にすると投稿スラッグが自動的に翻訳された単語を-でつなげたものになります。
具体例)
WordPressインストール後にまずやること
という記事タイトルだった場合は
first-things-to-do-after-installing-wordpress という感じへ変換されます。(Google翻訳)

wordpressで投稿の際のslugを英語だけに自動でする方法 – sugarbabe335
http://d.hatena.ne.jp/sugarbabe335/20081218/1229609082

はてなダイアリーの記事をダウンロードしてローカルで読む

はてなダイアリーで運営されているブログの記事をまとめてダウンロードしてローカルのHTMLとして読みたいというときに、neue cc – はてなダイアリー to HTML というコマンドラインソフトを使うと便利です。(素晴らしい)
実行するとダウンロードしたい対象のはてなIDなどが要求されるのでそれに対して入力していくだけで、そのブログの記事を一つのhtmlファイルにまとめてダウンロードできます。

元のファイルだとhttp://subtech.g.hatena.ne.jp/のようなはてなグループのブログをダウンロードできなかったので、少し改変しました。ライセンスはMs-PL

元のzipファイルにソースコード(Program.cs)が入っているので、上記のファイルに差し替えてコンパイルするとはてなグループでもダウンロードできるようになります。
cscでコンパイルするときは以下のようにdllを指定するといいみたいです。

>C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe /R:SgmlReaderDll.dll Program.cs

コンパイル済みのファイル

HatenaDiaryToHTMLGroup.exe というのを実行すると最初にはてなグループ名が要求されるので、http://subtech.g.hatena.ne.jp/のグループならsubtechと入れるとはてなグループにも対応できます。(空白なら通常のd.hatena.jpのIDになります)
そのほかは元のものと同じなので、詳しい説明はreadme.txtやサイトの方を読むといいかと思います。

neue cc – はてなダイアリー to HTML
http://neue.cc/2010/03/09_246.html
C:\Users\azu\Downloads\0001_group.zip
プロフィール: azu(アズ)
Firefoxの事やソフトウェアの紹介や使い道、Greasemonkeyの作成
  • OS:Windows Vista, 7
  • ブラウザ:Firefox
  • Twitterのアカウントはこちら
  • azu_re
  • メールアドレス(Twitterの方が確実)
  • info@ドメイン名
リンク

WebMoney ぷちカンパ