2010年1月31日日曜日

内骨格 1.90

内骨格の 1.90 を公開した。

1 .90 - 2010/01/31
  • Tar系アーカイブの展開で失敗するケースがあったのを修正
  • アーカイブファイルがオープンされっぱなしになってしまう問題の調査のために "_RefererTree"コマンドを追加。
  • ネイティブライブラリを Cygwin の 1.7.1(0.218/5/3) を使ってビルドするようにした。
  • アップデートパッケージのZIPファイルによっては、ネットワークアップデートできないケースがあるのを修正。
1.89 以前のバージョンの、ネットワークアップデート機能に問題があって、今回はネットワークアップデートに失敗してしまう。
フリーソフトなので、割り切って、手でアップデートしてもらうことにした。( お手数おかけします。 )

また、ずっと気になっていながら、なかなか修正できていなかった、[アーカイブファイルオープンされっぱなし問題]の調査のために 、こんかい _RefererTree というコマンドを追加した。

python の gc モジュールを使って、特定のクラスのオブジェクトが残存しているか、残存しているならどのオブジェクトから参照されているのか、を探索するためのデバッグ用の機能だ。

内骨格のコマンド入力欄で、_RefererTree;ZipInfo;5 のように入力すると、ZipInfoクラスの残存具合が以下のように出力される。





ソースは以下のような感じだ。

    def command_RefererTree( self, args ):
   
        kwd = args[0]
   
        max_depth = 5
        if len(args)>1:
            max_depth = int(args[1])
   
        known_id_table = {}
       
        gc.collect()
        objs = gc.get_objects()
       
        def isRelatedObject(obj):
            if type(obj).__name__ == kwd:
                return True
            if type(obj).__name__ == 'instance':
                if obj.__class__.__name__ == kwd:
                    return True
            return False           
           
       
        def dumpReferer(obj,depth):
           
            if known_id_table.has_key(id(obj)):
                return
            known_id_table[id(obj)] = True
           
            str_type = str(type(obj))
           
            if str_type.find("'instance'")>=0:
                str_type += " " + str(obj.__class__)
            print "   " * depth, str_type

            if depth==max_depth: return

            referers = gc.get_referrers(obj)
            for referer in tuple(referers):
                dumpReferer(referer,depth+1)
           
       
        print "---- referer --------"
       
        for obj in tuple(objs):
            if isRelatedObject(obj):
                dumpReferer(obj,0)

        print "-----------------------------"

2010年1月24日日曜日

CraftMemo 1.07 で プロキシ越しの同期に対応

CraftMemo 1.07 で プロキシ越しの同期に対応した。

会社と自宅の両方のPCに、プライベートなメモを共有するのに便利だ。

あとは、自動同期機能かな、、、

gdata API の プロキシ設定

CraftMemo で使用している Google Data API では、プロキシの設定に環境変数を利用するようだ。

CraftMemoでは、以下のようにして IEの設定を利用しながら、Google Docsにアクセスしている。

        try:
            proxy_setting = cmemo_misc.getIEProxySetting()
        except:
            proxy_setting = None
           
        if proxy_setting:
            http_proxy = "http://"  + proxy_setting
            https_proxy = "https://"  + proxy_setting
            os.environ['http_proxy']  = http_proxy
            os.environ['https_proxy'] = https_proxy

Pythonで IE のプロキシ設定を取得する

 IEのプロキシ設定は、レジストリに保存されている。
Python の _winreg モジュールを使えば、レジストリにアクセスできる。

import _winreg

## IEのプロキシ設定を取得する
#
#  @return IEのプロキシ設定 ( "proxy.server.net:8080" のような形式 ) または プロキシ設定が無効な場合は None
#
def getIEProxySetting():

    proxy_setting = None

    reg_handle = None
    try:
        reg_handle = _winreg.OpenKeyEx( _winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", 0, _winreg.KEY_READ )
        proxy_enable, reg_type = _winreg.QueryValueEx( reg_handle, "ProxyEnable" )
        if proxy_enable:
            proxy_setting, reg_type = _winreg.QueryValueEx( reg_handle, "ProxyServer" )
    finally:
        if reg_handle:
            reg_handle.Close()

    return proxy_setting

2010年1月23日土曜日

keyhac 定型文や日時の貼り付け機能

keyhac の 1.12 をリリースした。

定型文や日時などを貼り付ける機能を追加した。




以下のように、 config.py に記述することで、定型文を追加することが可能だ。
クリップボード履歴リストのウインドウで、カーソルキーの ← →を押すことで、
keymap.cblisters に与えたリスト機能が切り替わるようになっている。

        # 定型文
        fixed_items = [
            ( u"name@server.net",     u"name@server.net" ),
            ( u"住所",                u"〒東京都品川区123-456" ),
            ( u"電話番号",            u"03-4567-8901" ),
            ( u"config.pyを編集",     keymap.command_EditConfig ),
            ( u"config.pyをリロード", keymap.command_ReloadConfig ),
        ]
       
        # 日時をペーストする機能
        def dateAndTime(fmt):
            def _dateAndTime():
                return datetime.datetime.now().strftime(fmt)
            return _dateAndTime   

        # 日時
        date_and_time_items = [
            ( u"YYYY/MM/DD HH:MM:SS",   dateAndTime("%Y/%m/%d %H:%M:%S") ),
            ( u"YYYY/MM/DD",            dateAndTime("%Y/%m/%d") ),
            ( u"HH:MM:SS",              dateAndTime("%H:%M:%S") ),
            ( u"YYYYMMDD_HHMMSS",       dateAndTime("%Y%m%d_%H%M%S") ),
            ( u"YYYYMMDD",              dateAndTime("%Y%m%d") ),
            ( u"HHMMSS",                dateAndTime("%H%M%S") ),
        ]

        keymap.cblisters += [
            ( u"定型文",         cblister_FixedPhrase(fixed_items) ),
            ( u"日時",           cblister_FixedPhrase(date_and_time_items) ),
            ]


ポイントは、決まった文字列だけでなく、呼び出し可能なオブジェクトを渡すことが出来るというところだ。
関数からペーストする瞬間の日時をテキストとして返すと、その文字列がペーストされる。

2010年1月20日水曜日

keyhac クリップボードからの引用貼り付け

クリップボード履歴の機能で入れ忘れていたのが、
引用貼り付けと、定型文の機能。

keyhac の 1.11 では、引用貼り付けを追加した。

Ctrl + Enter で、クリップボード履歴リストを選択すると、

> 引用記号の設定
>
>     引用記号の設定例::
>         keymap.quote_mark = "> "
>
>     keymap.quote_markに、クリップボードからの引用貼り付け時の記号を設定します。

こんなふうに、引用記号つきでペーストされる。

keymap.quote_markを設定することで、引用記号をカスタマイズ可能だ。

2010年1月18日月曜日

keyhac 1.10 で クリップボード履歴機能を追加

kayhac に クリップボード履歴機能を追加した。




クリップボード履歴ソフトとして、これまで QTClip を愛用していたのだけど、
クリップボードの履歴の中から、目的のアイテムを探し出すのが難しいことがあった。

今回 kayhac に追加したクリップボード履歴機能では、履歴リストをインクリメンタルサーチで検索することが出来る。また、Migemo をつかった日本語のローマ字検索も可能だ。





テキストのみ対応。

2010年1月16日土曜日

Google Docs Drive

Google Docs に、任意のファイルを添付できるようになるらしい。

http://internet.watch.impress.co.jp/docs/news/20100113_342025.html

そうなったら、きっと誰かが、Google Docs Drive を作るんだろうな。

Gmail Drive みたいに、時々使えなくなるような、アンダーグラウンドっぽい
ものではなくて、gdata API をつかって、堂々と利用できるはずだ。(たぶん。)

内骨格でも、gdata API をつかえば、、、、

PS3 地デジ録画キット torne

PS3の地デジ録画キット torne が話題になっている。



http://www.jp.playstation.com/ps3/torne/
http://av.watch.impress.co.jp/docs/news/20100114_342212.html

ヨーロッパで発売された、PlayTV という、録画キットがあったのだけど、
Torneでは、ユーザインターフェイスも 一新されて、明るい印象に。
WEBでは、おおむね好評みたい。
ゲーム中でも録画されるしね。

リビングに浮いているPS3があるので、それ用に買おうかな、、、と。


ちなみにPlayTVの動画はこちら。

PS3navi.com

2010年1月11日月曜日

SkyDrive に Python からアクセスする


Pythonスクリプトから SkyDrive を読み書きしたいと思って、
以下のような作戦を考えた。

  1. SkyDrive Explorer をインストール
  2. Python と comtypes も、未だならインストール
  3. COMをつかって、SkyDrive Explorer のアイテムを取得する

Gmail Drive の場合はこれでうまくいくのだけれど、
SkyDriveの場合は、なぜかうまくいかない。

-----------------------------------------------------------------------------
import comtypes.client

skydrive_item_name = u"SkyDrive Explorer"

def listSkyDriveItems():

    shell_app = comtypes.client.CreateObject("Shell.Application")
    my_computer = shell_app.NameSpace(0x11)

    skydrive_item = None
    for item in my_computer.Items():
        if item.Name==skydrive_item_name:
            skydrive_item = item
   
    if not skydrive_item:
        print "skydrive not found."
        return
   
    folder_obj = skydrive_item.GetFolder
   
    # FIXME : ここで、なぜかaccess violationが発生する
    for i in folder_obj.Items():
        print i.Name
   
    print "finished"   

listSkyDriveItems()
-----------------------------------------------------------------------------
 Traceback (most recent call last):
  File "skydrive.py", line 27, in
    listSkyDriveItems()
  File "skydrive.py", line 22, in listSkyDriveItems
    for i in folder_obj.Items():
  File "c:\python26\lib\site-packages\comtypes\automation.py", line 507, in next

    item, fetched = self.Next(1)
  File "c:\python26\lib\site-packages\comtypes\automation.py", line 528, in Next

    self.__com_Next(celt, v, fetched)
WindowsError: exception: access violation writing 0x00000000


-----------------------------------------------------------------------------
 さて、、、

インファマス ~悪名高き男~ (PS3)

ビルによじ登ったり、高いところからジャンプしたり。

PS2のスパイダーマンとか、Xboxのライオットアクトが好きな人なら、
このゲームも気に入ると思う。