Chrome と Irvine を連携させるExtensionを作ってみた。

無さそうなんで作ってみた。かなり面倒だった。
原因は不明ですが、環境によって動作しない場合があるようです。


現状では私(id:deraw)がメンテするのが難しく、
[twitter:@b2ox]様がちゃんとコンテキストメニューが使用できる改良版を作成されていますのでそちらをおすすめします。

注意

  • 実験的に作成した拡張です。使用は自己責任でお願いします。
  • まずオプションから、Irvineをインストールしたフォルダ内にあるircom.exeのフルパスを設定してください。
  • インストール後はChromeの再起動をしてください。(または現在開いているページの再読込を行ってください。)
  • Chromeの制限で、右クリック(コンテキストメニュー)からは呼び出せません。
  • 「すべてのURLを送る」「すべてのURLを送る(IMGを含む)」「リンクのインポート」「選択範囲のダウンロード」しか出来ません。
  • Windows 7 x64上でしか動作確認してません。不具合があればご報告頂けるとありがたいです。(OSのバージョンやurl、可能であればIEFirefoxで再現するかどうか)
  • b2ox様の協力により、リンクや画像の上でalt+左クリックするとマウスカーソル位置のURLをirvineに送れるようになりました。
    ただし、同時にchromeの「名前を付けて保存」ダイアログが表示されてしまうので手動で閉じてください。

インストール

最新版インストール

過去のバージョン

バージョン0.1
バージョン0.2

更新履歴

0.2.1(2010/7/28)
  • version 0.2の修正によって、Irvineへ送るURLが抜け落ちる問題が発生したので修正(ircom.exeの終了待ちをするよう変えた)
0.2(2010/7/20)
  • b2ox様の修正を取り込みました。
  • Windows XPで動作しなかった問題を暫定修正(ircom.exeに渡す引数を2000文字までに制限した)
0.1
  • 初版

仕組みなど

躓いたことなど

  • コールバック内のErrorは握りつぶされるので、自前でErrorオブジェクトをconsole.errorしなければならない。
  • embedのstyleをdisplay:noneにしたらプラグインが読み込まれなかった。
  • chrome.tabs.sendRequestは非同期だから、コールバックが呼び出される前にpopupウィンドウを閉じるとコールバックが呼ばれない。
  • W32APIのCreateProcess/ShellExecute関数のパラメータは32kまで。
    ShellExecuteExだともっと少ないかも。とりあえず2000文字までにした。

"()" のない関数名とコードの生成

"()" のない関数名とコードの生成
http://msdn.microsoft.com/ja-jp/library/094z0768%28VS.80%29.aspx

#include <stdio.h>
void funcn();

int main() {
   funcn;      /* missing function call operator; 
                  call will fail.  Use funcn() */
   }

void funcn() {
   printf("\nHello World\n");
}

理解はできるが、こんなコードが警告もなくコンパイル通ってしまうC/C++はやっぱい怖い

malloc/freeでSIGSEGVが発生する。

以前あったことをメモっておく。

Solaris SPARCでCプログラミングをしてたとき、malloc関数(free関数)でセグメント違反が発生することがあった。
スタックトレースは下のような感じで。(アドレスは適当)

#0 0xfed4247c in realfree() from /usr/lib/libc.so.1
#1 0xfed42d88 in cleanfree() from /usr/lib/libc.so.1
#2 0xfed41ebc in _malloc_unlocked() /usr/lib/libc.so.1
#3 0xfed41db0 in malloc() from usr/lib/libc.so.1
#4 0x131e0 in main(argc=1,argv=0xxxxxxxx)

最初は、「ライブラリ関数内でバグっているんじゃないか」と思ったけど、調べるとどうやら違うみたい。
webで調べても濁した記述しか無くて、手元のDEBUG HACKSをみたらジャストな事例があった。

Debug Hacks -デバッグを極めるテクニック&ツール

Debug Hacks -デバッグを極めるテクニック&ツール

で何が悪かったかというと、自分のソースがバグってて、(セグメント違反になる前のどこかで)mallocした領域に対してバッファアンダーフローしてた。
どうやらmallocした領域のちょっと前に、ライブラリ用のデータを書き込んでいて、そこが破壊されるとそれ以降のmalloc/freeがおかしくなるようだ。
詳しくは pacsec.jp/psj06archive.htmlなどを参照。

それにしても、バッファアンダーフローした瞬間にはわからないから厄介だった。

pixiv plusをマンガモードに対応させる

pixiv plusが9/20時点でマンガモードに未対応なので勝手にいじってみた。
いじったスクリプトを公開する予定はないです。

101c101,102< else if( String(event.target.getAttribute("src")).indexOf(illustid)>=0 && event.button==0 ){

    • -

> else if( String(event.target.getAttribute("src")).indexOf(illustid)>=0 && event.button==0 && (event.target.parentNode.href.indexOf("mode=manga") < 0)){

あと拙作のpixixxメンテしました。変更点は覚えてないので、現状で問題ない方は更新しない方がよろしいかと。

こくまろみるくプレオープンの感想をば

概ね先行レポ通りっした

  • 入り口迷った
  • キャバっぽい内装
  • 料理はプレオープンと言うことで少なかった
  • こしゅちゅーむは目のやり場に困るね、テーブル拭いているときとか
  • モルツおいしゅうございました
  • 際立ったドリンクメニューはなし
  • 料理は頑張ってる、既存アキバ系居酒屋よりも
  • 本オープン時に料理がいくらになるか気になる
  • さらしるさんに第1種接近遭遇

[Windows][プログラミング]COM日本語記事まとめ

Windowsプログラミングで重要な割に日本語での情報がすくない、COMことComponent Object Modelのまとめ。主に忘備用。
MSDNライブラリのブラウズしにくさは異常。

MSDNライブラリ内

Active Template Libraryを使った COM プロパティ ページの作成

VS2005: ms-help://MS.MSDNQTR.v80.ja/MS.MSDN.v80/MS.TECHART.v10.ja/jpdncomg/htm/com.htm

コンポーネント オブジェクト モデル:技術概要

VS2005: ms-help://MS.MSDNQTR.v80.ja/MS.MSDN.v80/MS.TECHART.v10.ja/jpdncomg/htm/comppr.htm

プログラミング モデル設計の基本

VS2005: ms-help://MS.MSDNQTR.v80.ja/MS.MSDN.v80/MS.TECHART.v10.ja/jpdncomg/htm/basicpmd.htm

COMプログラマの解説書

VS2005: ms-help://MS.MSDNQTR.v80.ja/MS.MSDN.v80/MS.TECHART.v10.ja/jpdncomp/htm/com_co.htm
VS2008: ms-help://MS.MSDNQTR.v90.ja/jpdncomp/htm/com_co.htm

書籍


他にも情報がありましたらご連絡頂けるとありがたいです。

pixiv用のGreasemonkeyスクリプト3 - pixiv mini browser

別のを作った。機能はサムネのリンク先をiframeに表示するだけ。

pixixxx.user.js

説明

  • イラストサムネイルが表示されているページ(お気に入り新着、タグ検索など)で、画面遷移せずに各イラストページを参照できるようになります。
  • Autopagerizeとも併用できるはず
  • サムネが表示されている時に画面右下に「小窓を表示」というボタンが出てくるので、押すと小窓(iframe)が表示されます。
  • 小窓の「x」で非表示に、「>」で次のイラストに、「<」で前のイラストに、「<<」で表示しているサムネの一番最初に、「>>」で表示しているサムネの一番最後に
  • $X関数と$関数以外は煮るなり焼くなりお好きなように。

TODO

小窓のリサイズ

(2009-04-07追記)
小窓を表示したら100ピクセルスクロールするようにした。(wrappedJSObject.scrollIntoViewでやろうとしても出来なかった・・・・)

(2009-04-10追記)

  • リソースリークしていたのを修正
  • 名前を変えてみた
  • 表示しているサムネに合わせてスクロールするようにした。

(2009-04-14追記)
表示済みイラストをスキップするオプションを追加。
もう落ち着いたんでいじらない予定。