mtamaki.com

About

このサイトmtamaki.comはmtamakiの個人のサイトです。 Tracというシステムをカスタマイズしたものを利用しています。 このサイトについて詳しくはサイトマップをご覧ください。
移転が終わるまでしばらく旧サイトにリンクします。→[m.tamaki's Memorandum.] [m.tamaki's Memorandum 2.]

Wiki

Tips : [Firefox] [Greasemonkey] [iPhone] [Python] Other...
Softs : [GetGmailPermalink] [HeatTheNicovideoUpFix] Other...
Favorites : [Firefox] [R3SP] [Windows] [W-ZERO3 es] Other...

Blog


13:16 PIL1.1.6でのアニメーションGIFロード

Python Imaging Library (PIL)でアニメーションGIFをロードした場合、色化けを起こすことがあります。

これは DisposalMethod == 2 となっていて、2フレーム目以降、背景を背景色で塗りつぶす指定にしていたとき、背景色を指定するパレットのインデックスを背景色として扱っているためのようです。

修正するにはGifImagePlugin.pyの151-3行目を、

                            # replace with background colour
                            self.dispose = Image.core.fill("P", self.size,
                                self.info["background"])

から

                            # replace with background colour
                            self.dispose = Image.core.fill("P", self.size,
                                self.palette[self.info["background"]])

とします。

04:39 heatthenicovideoup.user.jsをFF3rc1で動かすパッチ

We Ain't Seen Nothin' Yet. : ニコニコ動画のコメント熱狂度を可視化するGreasemonkeyスクリプトにパッチを当ててFirefox3rc1で動くようにします。

heatthenicovideoup.user.js.fix.diff

diffを当てるのが面倒な人は[HeatTheNicovideoUpFix]からzipを落として展開して実行してください。

18:33 ICEの手抜きチュートリアル

Internet Communications Engine (Ice)というサーバークライアントモデルを複数の言語で実装するためのサポートライブラリがあります。

C++で書いたサーバーpythonのクライアントで接続したり、Javaで書いたサーバにC++で接続したりできるようです。

結構WindowsのC++でHelloWorldするのが大変だったのでメモ。

落としてくる

ZeroC - Download のページから Ice-3.2.1-VC80.msi を落とす。

これはVisual Studio 2005を使う場合。 iceのlibとリンクする必要があるので、Visual Studioのバージョンをあわせること。

インストールする

Program Filesの下に入れてもHelloWorldは動作した。

C++のデモを動かしてみる

デモはインストール先のdemo*ディレクトリにある。ただのdemoディレクトリがC++用。 ここのdemo.slnを開いてそのままビルドすれば全てのdemoがビルドされる。

HelloWorldはdemo/Ice/helloディレクトリにある。プロジェクト名はhelloCとhelloS。 それぞれビルドするとdemo/Ice/helloディレクトリにserver.exeとclient.exeができる。 serverを起動してからclientを起動すると、クライアントからさまざまな方法でサーバにHelloWorldを表示させるデモが見れる。

pythonのデモも動かしてみる

pythonは2.5が必要。 pythonのデモはdemopyにある。 HelloWorldのデモはdemopy/Ice/helloにある。

Iceのpython版の実装はインストール先のpythonディレクトリにあり、そこのIce.pyなどをimportできる必要がある。 とりあえずdemopy/Ice/hello/Client.pyのIceをimportしてる文の前でsys.pathにpythonディレクトリを追加すれば動く。

動かすと、C++版のクライアントと同様の操作をpython版のクライアントから行えることがわかる。

C++のサーバ・クライアントのHelloWorldをスクラッチから作成する

要点は、

  • インクルードの検索パスにインストール先のincludeディレクトリを追加する。
  • ライブラリの検索パスにインストール先のlibディレクトリを追加する。
  • リリース版ならice.libとiceutil.lib、デバッグ版ならiced.lib、iceutild.libをリンク対象に追加する。

こと。 この辺気をつけながら Writing an Ice Application with C++ を順に追っていけば作れる。

概要は

  • Writing a Slice Definitionにしたがってスライスと呼ばれるインターフェースをiceファイルに記述する。
  • sclice2cppを使ってhファイルとcppファイルを作る。
  • VS2005で空のソリューションを作り、ServerとClientの2つのプロジェクトをWin32コンソールアプリケーションの空のプロジェクトとして新規に追加する。
  • 全ての構成に対して先の3つの要点を設定する。
  • ServerとClient両方にslice2cppを使って作ったhとcppを追加する
  • Serverにcppファイルを追加し、Writing an Ice Application with C++のサンプルコードをコピーする
    • -が普通の-ではない文字としてコピーされてコンパイルエラーとなるので、普通の-に置換するとよい。
  • Clientにも同じくcppファイルを追加してクライアントのサンプルコードをコピーする。
  • ビルドする。
  • Serverをデバッグ>新しいインスタンスを作成として先に起動し、次にClientを同じ要領で起動する。
  • ここまでうまくいくと、HelloWorldとサーバ側に表示される。
08:08 「このアドオンは古いバージョンのFirefox向けです」

最近Firefox Add-onsから拡張機能をダウンロードしようとすると、「このアドオンは古いバージョンのFirefox向けです」と表示されてダウンロードできないプラグインがでてくるようになりました。

でも、どうしても拡張機能をダウンロードをしたい時のためにダウンロードリンクを復活させるGreasemonkeyスクリプトを書いてみました。

EnableOldAddonInstall

やってることはdisplay:noneを取っ払ってるだけですが。

ちなみに

  • ツール>オプション>セキュリティ>アドオンのインストールを求められたときに警告する>チェックを外す
  • about:config
    • extensions.checkCompatibility=false
    • extensions.checkUpdateSecurity=false
  • Gresemonkeyを導入
  • EnableOldAddonInstallを導入

上記のようにセキュリティ機能を切ることでたいていの拡張機能をインストールして利用できるようになります。

※セキュリティ機能を切った際の危険性について、たとえば(Ref: くでんな日々や公開どう?)などが参考になります。

16:06 MacOS XでWindowsのCtrl+CやCtrl+Shift+Leftといったキーショートカットを使う

~/Library/KeyBindings/DefaultKeyBinding.dict を以下の内容にすることでWindowsで便利だったショートカットがMacOS Xでも使えるようになります。

{
	/* Home */
	"\UF729" = "moveToBeginningOfLine:";
	/* End */
	"\UF72B" = "moveToEndOfLine:";
	/* Shift+Home */
	"$\UF729" = "moveToBeginningOfLineAndModifySelection:";
	/* Shift+End */
	"$\UF72B" = "moveToEndOfLineAndModifySelection:";
	/* Ctrl+Home */
	"^\UF729" = "moveToBeginningOfDocument:";
	/* Ctrl+End */
	"^\UF72B" = "moveToEndOfDocument:";
	/* Ctrl+Shift+Home */
	"$^\UF729" = "moveToBeginningOfDocumentAndModifySelection:";
	/* Ctrl+Shift+End */
	"$^\UF72B" = "moveToEndOfDocumentAndModifySelection:";

	/* Ctrl+Shift+Left */
	"^$\UF702" = "moveWordBackwardAndModifySelection:";
	/* Ctrl+Shift+Right */
	"^$\UF703" = "moveWordForwardAndModifySelection:";
	/* Ctrl+Right */
	"^\UF702" = "moveWordBackward:";
	/* Ctrl+Left */
	"^\UF703" = "moveWordForward:";

	/* Ctrl+{Alphabet} */
	"^a" = "selectAll:";
	"^c" = "copy:";
	"^v" = "paste:";
	"^x" = "cut:";
	"^z" = "undo:";
	"^y" = "redo:";

	/* Ctrl+/ : WordComplete */
	"^/" = "complete:";
}

以下のショートカットが有効になります。

  • Home・Endキーの挙動変更
    • HomeとEndを文書先頭・末尾でなく、行頭・行末に飛ぶように変更
    • Shiftと一緒に押すと選択しながら行頭・行末に飛ぶ
    • Ctrlと一緒に押すと元の文書先頭・末尾に飛ぶ挙動
    • CtrlとShiftと一緒に押すと選択しながら元の文書先頭・末尾に飛ぶ挙動
  • 左右カーソルキーの挙動を追加
    • Ctrlと一緒に押すと単語単位でカーソルを前後に移動
    • CtrlとShiftと一緒に押すと選択しながら単語単位でカーソルを前後に移動
  • Ctrl+文字系ショートカットの追加
    • Ctrl+C コピー
    • Ctrl+X 切り取り
    • Ctrl+V 貼り付け
    • Ctrl+A 全選択
    • Ctrl+Z 元に戻す(undo)
    • Ctrl+Y やり直し(redo)
    • Ctrl+/ 単語補完

これらはCocoaアプリケーションのNSTextViewでのみ有効なので、たとえばCarbonで作られているFirefoxのテキストエリアなどでは使えませんが、SafariやTextEdit、CotEditorなどでは使えます。