Posts Tagged ‘クリップボード’

NILScriptの使い方と書き方

NILScriptとはSpiderMonkeyを使ったJavaScriptベースのスクリプト実行環境です。(Windows専用+Wine環境でもある程度)
直感的に言うと、WSH + AutoHotKeyみたいな感じというのが分かりやすいかな。
できることなど細かい事はNILScriptのページやDocを読んでもらうとして、SpiderMonkey(JavaScript 1.8.1ベース)を使った処理系なのでFirefoxと同じJavaScriptの文法で、エクスプローラでのバッチ処理やキーバインドの変更などWSHやAutoHotKeyで行っていたような事がJavaScriptで書けます。

使い方

NILScriptのページからnil.zipをダウンロードして、適当な場所に解凍します。
解凍して出てくるng.exe(コンソールあり)とngw.exe(コンソールなし)のどちらかに、NILScriptのスクリプトファイルである*.ngファイルを渡すと実行されます。(WSHだとng = Cscript ,ngw = Wscript みたいな感じ)
毎回ng.exeなどにD&Dや引数などでngファイルを渡すのは面倒なので、ngファイルをクリックで実行できるように関連づけを行うinstall.batというのが入っています。実行するとng.exeと*.ngファイルが関連づけされ、クリックで実行できるようになります。
(多分レジストリを使うのはここだけ)
これで、実行する準備はできたので試しに何かスクリプトを実行してみましょう。
自分が作った適当なスクリプトで試してみる。

上のngスクリプトはちっちゃいウィンドウが出てきて押したキー(組み合わせも大丈夫)を表示するだけのスクリプトです。

こっちのngスクリプトは、Twitterで自分がフォローしてる人からユーザー名を検索してコピーするスクリプトです。
初回の起動時はOAuth認証します。(NILScriptで立てた簡易サーバをリダイレクト先にしている)
2回目の起動で自分のフォローしてるユーザーのリストを取得してから、ユーザー名を検索するウィンドウを表示します。
ユーザー名を途中まで入力して↓キーなどを押せば、入力したユーザー名の所まで飛べます。Ctrl+Cでユーザー名をコピーできます。

このようにngスクリプトを書けば、ローカルで動くものがJavaScriptで書けるので簡単なものを書いたりするのに便利です。
特にエクスプローラなどのファイル操作周りはWSHより簡単に書けるので、簡易なバッチ処理を書きやすい。
次はngスクリプトの書き方を見ていきます。

書き方

ドキュメントはダウンロードしたnilフォルダにdocというフォルダがあり、その中にユニット(機能)毎のドキュメントが書いてあります。
いろいろあるので何から見れば良いか迷いますが、まずは_readme.txtを開いてみると、NILScriptには大きく分けて、
Base.ng内で定義されているNIL標準クラス・関数 と require()関数で読み込んで使うユニットスクリプトがあることが分かります。
簡単言うと、前者はngスクリプトにそのまま書いて使える関数などで、後者はrequire(‘Clipboard’)のようにユニットスクリプトを読み込んでから使えるようになる関数などが存在するという事です。
まずはNIL標準クラス・関数にどんなものがあるかをbase_*.txtなどを軽く見て把握しましょう。
眺めているとprintlnなどのよくあるような感じのものからsleepやスレッドやポインタなどのJavaScriptでは扱えないものもあることが分かります。(base_main.txtはよく使う関数があるので必須)
正直、まだドキュメントは箇条書き程度で文例などが不足しているので、実際に動かしながら確認する必要がある。
(NILScriptブログで使い方などの解説も始まったので合わせて読む)
必要な機能は必要になったらgrepなどで検索して探すので効率的。

ドキュメントばかり見てもよく分からないので、サンプルファイルを見ながらどういう風に書いているのかを見てみましょう。
サンプルはnilフォルダのsampleというフォルダに入っています。
NIL標準クラス・関数はそのまま使えるので、ドキュメントや動作を見れば何となく分かってくると思います。
ユニットスクリプトを使うものはrequireしてから使う必要があるので、requireの仕方を見てみましょう。
例えばsampleのclipboard.ngを見ると、clipboardを扱うためのユニットスクリプトを読み込んでいるのが分かります。(詳細はClipboard.txtに)

/*
タスクトレイにアイコンを登録して常駐し、
クリップボードの内容が変更された時に、形式に応じた情報を表示します。
*/

Main.createNotifyIcon();// タスクバーにアイコン表示
var Clipboard=require('Clipboard').Clipboard;// ユニットスクリプトを読み込む

Clipboard.observe('change',function(obj){// クリップボードが変化したら動作するリスナー
	if(this.hasFormat('files')){// クリップボードの中身がファイル形式
		var a=this.files,r=[];
		for(var i=0,l=a.length;i<l;i++){
			r.push(a[i].name);
		}
		Main.notifyIcon.showInfo(r.join("\n"),this.isMove?"move":"copy");// タスクトレイのアイコンにバルーンメッセージを表示する
	}else if(this.hasFormat('html')){// html形式
		var h=this.html;
		Main.notifyIcon.showInfo(h.fragment,h.url);
	}else if(this.hasFormat('text')){// テキスト形式
		Main.notifyIcon.showInfo(this.text,'text');
	}
});

上ではvar Clipboard=require(‘Clipboard’).Clipboard;というようにクリップボードのユニットスクリプトを読み込んで、
読み込んだクリップボードスクリプトのClipboardというクラスをClipboardという変数に渡しています。
_readme.txtの●ユニットスクリプト機能にも書いてありますが、ユニットスクリプトrequire(“SomeUnit”).SomeClass という感じで、
多くのものはSomeUnitとSomeClassは同じ名前を持っているので上のような読み込み方法がよく出てきます。
他にもユニットスクリプトの使い方はあるので詳しくはNILScript: ユニット(拡張ライブラリスクリプト)の読み込み方法を見ると良いでしょう。(withでやるやり方はWindowでよく使います)

まずはHelloWorldを書いて実行するところから始めて、クリップボードが使いたくなったら関係するサンプルとClipboard.txtを見て作ってみる(それでもよく分からないときはlibフォルダにユニットスクリプトのソースがあるので中身を見てしまうと言うのもあります)

println("Hellow World");

サンプルを見ていくと大体雰囲気は使えめると思いますが、まだまだ文例が足りないのでハマる事があります。
くだらないものを書いてもどんどん公開して、いろんな書き方が見られるようになるともっと使いやすいものになると思います!

作例

というわけで自分が今までに自分が書いたNILScript。

 

最後の方で出てきたOAuthをNILScriptで使う方法。(上のサンプルは無視していいよ)

  • OAuth.ng (ライブラリみたいなものです)

をダウンロードして、OAuthを使うスクリプト内でinclude(“OAuth.ng”);して、後はOAuth for Greasemonkeyのラッパーライブラリ | Web scratchとメソッドの使い方は同じ。(xhrは実装してないです)
単純なサンプルで、OAuth.ngと同じフォルダに入れて実行するとOAuth認証ができます。

本当はユニットスクリプトやプラグインにした方が良いんだけどやり方がイマイチ分からなかったのでincludeにしてみた。

まとめ

良いところ

SpiderMonkeyベースなのでE4Xなども使えて文字列処理がやりやすいので、Firebugなどでマクロ的な文字列処理をしてる人とかJavaScriptで書くならこっちの方が便利かもよ。(JavaScript の新しめの機能(Array の拡張)とかも動くよ)
デフォルトでマルチストローク対応ホットキーやマウスジェスチャープラグインなどもあるので、AutoHotKeyでよくあるキーバインドを変更するとかもできるよ(自分の設定を公開とかやるといいかも)
WSHに比べてファイル操作をするものがかなり書きやすいよ。(base_io.txtを読む)
AutoHotKeyと違ってマルチバイト文字列に対応してるのでダメ文字とか日本語書けないとかに悩まされないよ。
標準関数やユニットスクリプトなどもNILScriptで書かれているので、ソースを直接読むことができる(この辺、情報不足感といいJetpackによく似てる。requireするとこも)

悪いところ

知名度が少ないので情報が少ない(→作ったものはどんどん公開して欲しい)
SpiderMonkeyにはDOM実装はないので、LooseXMLという独自のパーサーになっている。XPathに似た表記で使えたり悪いとは言い切れないけど、普段使うJavaScriptのDOMとはちょっと違うので手間取る。
GUIの表現が貧弱。Windowを使う事で基本的なウィンドウは簡単に作れるが、文字サイズなど装飾など細かい事ができない部分も多い。

NILScriptの用途として個人的に使うものを書く場合が多いと思いますが、書いたものをどんどん公開していこうぜ!という感じで〆

NILScript
NILScript配布場所
NILScriptブログ
特徴や使用例の紹介記事

JailbreakしたiPhone3Gに入れていたCydiaアプリ

iPhone4を買ったためiPhone3Gはメインではなくなったので、iPhone3G+OS3.1.2JBに入れていたCydiaアプリの記録。
以前書いた脱獄時のメモの今版(ちょっと古いけど)みたいなもの。

[脱獄]iPhoneに入れているJailbreak向けアプリ | Web scratch
http://efcl.info/2008/1018/res355/

入れて直ぐ外したのも混ざっているので、見ている頃と機能が違うものも含まれます。

  • Action Menu
    Favoriteのためにいれてた。Action Menu Plus Packは競合しやすいので外してた。
  • AppLinks
    アプリのシンボリックリンクを作ってくれる。iFunboxなどから見るのに便利
  • Activator
    まあ使ってれば勝手に入ってる事がほとんど。設定用
  • Backgrounder
    マルチタスク
  • Kirikae
    Backgrounderとセットで。アプリの切り替え
  • Battery Control
    電池を数値で表示する
  • SBSetting
    JBで快適に生活するために必要なシステムランチャーみたいなもの。
  • Browser Changer
    デフォルトだとsafariで開くがそれの代わりに起動するブラウザアプリを決められる。
  • iPod widget
    SBSettingからiPodの再生/停止ができる
  • CyDelete
    通常のappのようにCydiaアプリもspringboardからアンインストールできる。
  • Cydget
    ロック画面をカスタマイズするためのスクリプト実行環境。Lock calendar用
  • Lock calendar
    ロック画面にカレンダーの予定を表示。
    Google Calendarとカレンダーをプッシュで同期させれば、domo todo+などで追加した予定がロック画面に自動で表示されるのでかなり便利。(Google CalendarをTodoとして使う理由)
  • iFile
    エクスプローラ的なアプリ。多分必須なぐらい使えるアプリ
  • infinidock
    ドックを横にもスライドでき、ドックにおけるアプリの個数も変えられるのでかなり重宝する。
  • MultilconMover
    springboard上で複数のアプリを同時に選択して移動させられる。整理用アプリ
  • Panorama
    springboardの背景画像(壁紙)を設定できる。名前の通り、一枚の横長な画像を設定して少しづつスライドさせて表示する。
    一部アプリではロード画面中にもなぜか設定した背景が出てくるので意外と面白い。
    Simple Background でも似たようなパノラマなホーム壁紙ができるみたいです。(ちょっと調整がしにくそうだけど)
  • Shrink
    springboardのアイコンのサイズを変えられる。
  • PasteboardStacker
    moyashiさんのクリップボード履歴アプリ。(もう配布されていない)
    Action Menuのやつは使えない事があったのでこっちを使用してた。
    クリップボード関係はOS2.xの時の方が圧倒的にできがよい。
  • PrivaCy
    アプリ内でトラッキングなどを防止する
  • QuickScrool2
    スクロールバーを付けてくれるアプリ。一気に下に行くときなどにかなり便利
  • Safari Tab Closer
    safariのタブをまとめて閉じる
  • Shutter Sound Toggle
    シャッター音をなくす。これが無いとスクリーンショットとかカメラ使うアプリが恥ずかしくて使えない。
    トグルする必要もない気がしてきたので/System/Library/Audio/UISounds/photoShutter.caf あたりを直接いじっても同じ効果。
  • Snappy
    カメラの起動、保存がとても遅いiPhone3Gでは必須といえるぐらい素晴らしいアプリ。
    Activatorで設定した方法でカメラを起動して直ぐにとれる。アプリ上にあるカメラを使うと落ちることがよくあったので、Snappyで取ったものをカメラロールから選んだ方が安全だった。
  • SysinfoPlus
    システム情報がかなり詳細に見られるアプリ。
  • SprintBoard
    springboardで効くQuickScrool2みたいなもの。
    springboardの●部分をスライドさせるだけで高速移動できる。
  • TimeServerClient
    iPhoneの時計を一定時間ごとに合わせてくれる
  • Tweetie2RTPatcher
    TweetieとTwitter for iPhoneのRT挙動を日本式に変える
  • UC Browser
    Web kitではないブラウザアプリ。
    「UC Browser」高速iPhoneブラウザ英語版で登場 | iPhone’z
  • wigglefree
    springboardでアプリを長押ししたときのぷるぷるをさせない。

 

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

メディアマーカーは読書管理を行える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

引数で渡した(任意の)ファイル名でスクリーンショットをとるAutoHotkey

とてもニッチなものですが、スクリーンショットソフトに引数で任意の文字列を渡し、スクリーンショットをとってクリップボードに保存すると引数のファイル名でスクリーンショットを保存できるAutoHotkeyスクリプトです。

自分の使い方

PDFなどを見ている時に、表示してる一部分を切り出して(スクリーンショットをとって)、その画像ファイル名を使って任意の場所に保存するのに利用してます。
いわゆるスクリーンショットを使ったメモみたいな感じです。
Blog Forest: 読書メモの作成にevernoteを使う とかに似てる。(これの電子版みたいな)

Read the rest of this entry »

今見てるサイトの短縮URLをクリップボードにコピーするTomblooパッチ

Tomblooのパッチとして動作するのでTomblooをインストールしている人用です。
今見てるサイトの短縮URLを一発でクリップボードにコピーできます。
sshot-2009-08-29-[17-43-16]

上のリンク上で右クリック、[Tombloo]-[Tomblooパッチのインストール]で簡単インストール

インストールするとTomblooのコンテキストメニューにMake Short Linkが追加されてるので、
それをクリックするとクリップボードに短縮URLがコピーされます。

Tomblooのメモ

Tomblooのscriptフォルダを毎回開くのが面倒だったので、一発で開くスクリプト

ツールのところのTomblooに追加される

ツールのところのTomblooに追加される


firebugを呼ぶにはlog()で大丈夫だった。

クリップボードにコピーするには

ClipboardHelper.copyString("コピー文字列");

みたいな感じで簡単に使える。
Tomblooには色んなヘルパー関数が用意されてるっぽいけど、どういうのがあるのかはソースを読む必要がありそう。

HTMLとしてコピーするものがなかったので適当に作成

// HTMLとしてstrをコピーする
// https://developer.mozilla.org/en/Using_the_Clipboard
function copyHTML(str) {
    var textHtml = str;
    // firebug("log" , textHtml);
    var htmlstring = Components.classes["@mozilla.org/supports-string;1"].
                     createInstance(Components.interfaces.nsISupportsString);
    if (!htmlstring) return false; // couldn't get string obj
    htmlstring.data = textHtml;
    var trans = Components.classes["@mozilla.org/widget/transferable;1"].
                           createInstance(Components.interfaces.nsITransferable);
    if (!trans) return false; //no transferable widget found
    trans.addDataFlavor("text/html");
    trans.setTransferData("text/html", htmlstring, textHtml.length);
    // copy the transferable widget!

    var clipboard = Components.classes["@mozilla.org/widget/clipboard;1"].
                           getService(Components.interfaces.nsIClipboard);
    if (!clipboard) return false; // couldn't get the clipboard

    clipboard.setData(trans, null, Components.interfaces.nsIClipboard.kGlobalClipboard);
    return true;
}

追記

短縮URLを取得するshortenUrls関数とかがあった。

gist: 415348 – Tomblooパッチ- GitHub
http://gist.github.com/415348
プロフィール: azu(あず)
Firefoxの事やソフトウェアの紹介や使い道、Greasemonkeyの作成
  • OS:Vista
  • ブラウザ:Firefox
  • Twitterのアカウントはこちら
  • azu_re
  • メールアドレス(Twitterの方が確実)
  • info@ドメイン名
リンク

WebMoney ぷちカンパ

あわせて読みたい