SSブログ

IsolatedStorageFileStream と XMLでシリアライズ [DotNET]

その昔、アプリケーションの設定は .ini ファイルに持つのが常識だったそうな。
私が、Windows でプログラミングしてた頃には
「.ini ファイルはもう古い。レジストリの HKEY_CURRENT_USER に書け」
ということになっていた。
.NET Framework の世の中では、分離ストレージってのを使うんだそうな。
IsolatedStorageFileStream
http://msdn2.microsoft.com/ja-jp/library/system.io.isolatedstorage.isolatedstoragefilestream(VS.80).aspx

このストレージに、XMLでオブジェクトをシリアライズしてあげるのが今風なんでだろか?
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdnthisweek/htm/step7/PersistenceOfObject.asp

でも、IsolateStorageFileStream で検索してもあんまり出てこない。
みんな使ってないってことかな。


IronPython 1.01 のサンプルを動かしてみる [DotNET]

「IronPython 1.0 のサンプルを動かしてみる」の続き
http://blog.so-net.ne.jp/nakagami/2006-09-09

IronPython が 1.01 になってるのと一緒にサンプルも 1.01 になってた。
http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=IronPython

今まで気付かなかったけど、1.0 のサンプルと比べて、追加されてるサンプルがあった。

[Direct3D]
Direct3D を操作するサンプルみたいだけど、縁がないので省略
手元で Direct3D がインストールされてないので動かしてもない。

[IPPowerShell]
IronPython で PowerShell を操作するサンプル。当然 PowerShell の動く環境が必要。
サンプルでは、ls でファイルの一覧を取ってきたり WMI 経由でシステムのリリースを
取ってきたりしてる。
動いてる Process の一覧を取得したり、ディレクトリの中にある ファイルの一覧を取ってきたりするときに、.NET のライブラリを使うより楽かな。よくわからん。
PowerShell 自体のありがたさがわかってないのが難点かな。
http://slashdot.jp/articles/06/11/15/2331202.shtml
http://www.atmarkit.co.jp/fdotnet/special/powershell01/powershell01_01.html
コマンドを実行してその結果ステータスを受け取ったり、コマンドの出力する標準出力の値を受けとって処理したい場合には便利かも。
PowerShell がインストールしてある環境がないので動かしてない。

[Pyc]
Python Command Line Compiler の略。
CPython でいうところの py2exe みたいなものらしい。
サンプルの中にある console_hw.py をコンパイルしてみたら console_hw.exe はできたけど、それを実行しようとしたら例外発生。
ここ↓を見て、exe と同じ所に IronPython.dll、IronMath.dll をコピーしたら動いた。
http://foma-zakki.cocolog-nifty.com/zakki/2006/11/_pythonnet_iron_7d70.html
パスが通っててもダメみたいだ。
サンプルにある winforms_hw.py を、インタラクティブに実行しようとしたら動かなかった

ipy pyc.py /main:winforms_hw.py /r:System.Windows.Forms /target:winexe 


とコンパイルしてできる exe は実行できた。
winforms_hw.py の先頭に、以下の2行を追加するとインタラクティブにも動かせるし、コンパイルも通る

import clr
clr.AddReferenceByPartialName("System.Windows.Forms")


「Mac OS X と MONO で動かすIronPython」のページで、
http://textdirected.googlepages.com/IronPythonUnderMacOSXmonoJ.html
「Pyc.pyでdllを作成し,exeから呼び出す.」
http://textdirected.googlepages.com/IronPythonUnderMacOSXmonoJ.html#pyc-py-dll-exe
っていうのがありますね。


IronPython で ADO.NET のとりあえずのまとめ [DotNET]

ADO.NET に不慣れな自分へのメモ

MySQL
http://d.hatena.ne.jp/akiramei/20060129/p1

Oracle
http://d.hatena.ne.jp/akiramei/20061104/p1
例外の処理についての話
http://d.hatena.ne.jp/akiramei/20061105/p3

SQLServer
http://blog.so-net.ne.jp/nakagami/2006-11-08

Firebird
http://blog.so-net.ne.jp/nakagami/2006-04-30
http://blog.so-net.ne.jp/nakagami/2006-04-09

検索して結果を取得するのに XxxCommand.ExecuteReader() を使う
データの更新をするのに XxxCommand.ExecuteNonQuery() を使う

DataAdapter
http://www.microsoft.com/japan/seminar/msdn/300sec/dataadapter/default.mspx
を使うと、結果セットのレコードを更新できるっぽい
SQLServer で DataAdapter を使う
http://davidhayden.com/blog/dave/archive/2006/09/08/IronPython.aspx

DBAPI でアクセスできるモジュールを作っているひとがいる
https://svn.sourceforge.net/svnroot/fepy/trunk/dbapi/

上の dbapi を使ったり Mono + SqlClient 使ったり、sqlite3 にアクセスしたり、System.Data.Odbc 使ったり CSV ファイルを読み込んだり
http://hex-dump.blogspot.com/2006/09/ironpython-and-adonet-part-1.html
http://hex-dump.blogspot.com/2006/10/ironpython-and-adonet-part-2.html

以前に ADO.NET データプロバイダについて、自分が書いたメモを発見
http://blog.so-net.ne.jp/nakagami/2006-04-03-1

MSDN ライブラリのドキュメントの System.Data, System.Data.SqlClient あたりを読む
System.Data
http://msdn2.microsoft.com/ja-jp/library/system.data(VS.80).aspx
System.Data.SqlClient
http://msdn2.microsoft.com/ja-jp/library/system.data.sqlclient(VS.80).aspx

(追記)Mac OS X と MONO で動かすIronPython
http://textdirected.googlepages.com/IronPythonUnderMacOSXmonoJ.html


IronPython で SQLServer で ExecuteReader [DotNET]

[Python-ml-jp 3771] IronPython で SQLServer を操りたい http://www.python.jp/pipermail/python-ml-jp/2006-November/thread.html#3768
で私が質問した内容の、とりあえずの結果

# -*- encoding: cp932
import clr
import System
clr.AddReference("System.Data")
from System.Data import *
from System.Data.SqlClient import *

connstr = 'Data Source=server;User ID=bob;Password=secret;Initial Catalog=some_db'
stmt = 'select * from some_table'

conn = SqlConnection(connstr)
conn.Open()
cmd = SqlCommand(stmt, conn) 

dr = cmd.ExecuteReader()
for r in dr:
    print r['カラム名称']

conn.Close()


更新系(結果セットがない場合)には cmd.ExecuteNonQuery () 使うらしい
http://www.python.jp/pipermail/python-ml-jp/2006-November/003772.html


IronPython 1.0 のサンプルを動かしてみる [DotNET]

ここ↓で IronPython 1.0 といっしょに公開されているサンプルを動かしてみた。
http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=IronPython

まず、IronPython 1.0 を動かすのに、.NET Framework 2.0 をインストールする必要があるが、サンプルを動かすのに、C# や .NET 2.0 の SDK が必要になるので、
Visutal C# 2005 Express Edition 日本語版 というのをインストールするといい。
http://blog.so-net.ne.jp/nakagami/2006-03-18
( Visual C# インストールすると、.NET Framework 2.0 も SDK もいっしょにインストールされるので)

IronPython 1.0 は zip アーカイブを解いて、パスが通るようにすればインストール完了。
Excamples のところにある一番上の IronPython-Samples-All.zip が、その下のサンプルすべてを含むようなので、この全部入りをダウンロードしてみた。

[WinFormsMapPoint]
WebService で、地図情報を受け取って、Form に表示するアプリを Step by Step で作る。
解説は、 tutorial.htm にある。WinForms/FormV1.py ~ FormV8.py に分かれてて、
最初は、単にフォームを出すサンプルから始めて、最終的には地図を出すようになってる。
FormV7.py と FormV8.py は、同梱してある C# のソースをコンパイルして MapPointWebServiceProject.dll をパスが通るところに置いてないと動かない。
IronPython のサンプルとしては FormV6.py まであたりがわかり易くて参考になるように思う。
FormV6.py では、テキスト入力欄に URL を入れてボタンを押すと、下の IE コンポーネントにページが表示される。
FormV6.py は、先頭のライセンス表記も含めて 67 行しかないので、このファイルだけでも眺めておくとよいかも。

その他のサンプルは、それぞれ単体のアプリになっていて、使い方や補足的なインストールは、それぞれのフォルダにある readme.htm に書いてある

[DiskUse]
グラフィカルなディスク使用量表示ユーティリティー
Microsoft .NET Framework 3.0 - July 2006 CTP が必要。
(・・・なので、Windows2000じゃ動かない)

[Puzzle]
15パズルの一回り小さい版(8パズル?)

[FMsynth]
FM音源シンセサイザ。DirectX 9.0c が必要。
使い方はよくわからん。

[IronTunes]
言わずと知れたミュージックプレーヤーの IronPython で実装したもの。
.NET Framework 3.0 - July 2006 CTP と Direct X 9.0c が必要。
アンマネージド DLL から COM インターフェースを抽出して CLR Assembly にするところがこのサンプルのポイント?
.NET 2.0 SDK のツールが必要なんだけど、私の Visutal C# をインストールした環境では、
「C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin」をパスに加えて

tlbimp %SystemRoot%\System32\quartz.dll


を実行すると、QuartzTypeLib.dll という DLL ができて、

clr.AddReferenceToFile("QuartzTypeLib.dll")
import QuartzTypeLib
graphManager = QuartzTypeLib.FilgraphManagerClass()


とかできるようになる。

IronPython のプログラミングのお勉強にあたっては、 IronPython 1.0 に同梱されてる Tutorial の中も参考になりそうだぞ・・・と日記には書いておこう。


IronPython 1.0 RC1 [DotNET]

ここ↓で「ふーむ、IronPython もβ9 か。コマンド名が ipy.exe になってるのはいいね」
http://d.hatena.ne.jp/akiramei/20060723/p1
・・・なーんてことを思ってリンク先をよく見たら、最新が 1.0 RC1 になってるじゃないですか!
http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=IronPython
↑の Release Road Map で、今後 1.0 Release までに解決しなきゃいけない問題がリストされてて、今後、発見されるバグは増えるとしても、大きな仕様の変更はなさそう。

以前少し触ってみたが、新しいβリリースのたびに細かい挙動が変わって、途中で挫折した
http://blog.so-net.ne.jp/nakagami/2006-04-09
http://blog.so-net.ne.jp/nakagami/2006-04-12-1
http://blog.so-net.ne.jp/nakagami/2006-04-30

ついでに、IronPython + WindowsForms の例(日本の Zope 情報経由)へのリンクを記す
http://www.voidspace.org.uk/python/weblog/arch_d7_2006_07_22.shtml#e399
(1.0RC1 でも動くかな?)

Windows Vista と同じ頃にリリースされそう。


nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

IronPython Beta6 [DotNET]

以前試しに作ってみたテストプログラムが Beta5 から Beta6 になって動かなくなってた。
これ→ http://blog.so-net.ne.jp/nakagami/2006-04-09
CLR のライブラリを読み込むのに、clr.Path ではなく、sys.path 配列を参照するようになったらしい。
以下のように修正すると動くようになる。

--- fbtest.py.orig	2006-04-30 08:49:34.722929600 +0900
+++ fbtest.py	2006-04-30 08:52:29.404108800 +0900
@@ -1,11 +1,11 @@
-import clr
+import sys, clr
 from System import Environment
 
 fbClientFolder = Environment.GetFolderPath(
                         Environment.SpecialFolder.ProgramFiles)
 
 # Append %ProgamFiles%\FirebirdClient
-clr.Path.append(fbClientFolder + '\\FirebirdClient')
+sys.path.append(fbClientFolder + '\\FirebirdClient')
 clr.AddReferenceToFile('FirebirdSql.Data.FirebirdClient.dll')
 
 from FirebirdSql.Data.FirebirdClient import *

追記 (2006/9/17)
上の修正版で、IronPython 1.0 でも動いた


IronPython と CPython のエンコーディング宣言とかの挙動 [DotNET]

test1.py

# -*- coding: euc-jp -*-
s = 'あいうえお'
print s

test2.py

# -*- coding: euc-jp -*-
s = 'あいうえお'
print unicode(s, 'euc-jp').encode('Shift_JIS')

test3.py

# -*- coding: euc-jp -*-
us = u'あいうえお'
print us
print us.encode('Shift_JIS')

test4.py

# -*- coding: euc-jp -*-
s = 'あいうえお'
print s
print unicode(s, 'euc-jp').encode('Shift_JIS')

IronPython の結果

C:\>ironpythonconsole test1.py
あいうえお

C:\>ironpythonconsole test2.py
BDFHJ

C:\>ironpythonconsole test3.py
あいうえお
???¢???|?¨

C:\>ironpythonconsole test4.py
あいうえお
BDFHJ

CPython の結果

C:\>python test1.py
、「、、、ヲ、ィ、ェ

C:\>python test2.py
あいうえお

C:\>python test3.py
あいうえお
あいうえお

C:\>python test4.py
、「、、、ヲ、ィ、ェ
あいうえお

追記
エンコードの名称は、ここらへん↓のを指定できるんだと思う。
http://www.hitachi-to.co.jp/prod/prod_2/inter/emk/help/TextEncoder/CodePage.htm
・・・しかし、Microsoft の公式文書はないんかい。


IronPython + Firebird .NET provider 2.0 でテーブル一覧 [DotNET]

.NET Provider のインストールパスや接続文字列は、適当に変更してくだされ

import clr
from System import Environment

fbClientFolder = Environment.GetFolderPath(
                        Environment.SpecialFolder.ProgramFiles)

# Append %ProgamFiles%\FirebirdClient
clr.Path.append(fbClientFolder + '\\FirebirdClient')
clr.AddReferenceToFile('FirebirdSql.Data.FirebirdClient.dll')

from FirebirdSql.Data.FirebirdClient import *

conn_string = '''
User=SYSDBA;
Password=masterkey;
Database=c:\\test.fdb;
DataSource=localhost;
Port=3050;Dialect=3;
Charset=SJIS_0208;
Role=;
Connection lifetime=0;
Connection timeout=15;
Pooling=True;
Packet Size=8192;
Server Type=0'''

def fb_tables():
    sqlStmt = '''select rdb$relation_name TABLE_NAME,
                rdb$owner_name TABLE_OWNER, rdb$view_source VIEW_SOURCE,
                rdb$system_flag SYSTEM_FLAG
                from rdb$relations where rdb$flags=1
                order by rdb$relation_name'''
    conn = FbConnection(conn_string)
    conn.Open()
    cmd = FbCommand(sqlStmt, conn)
    dr = cmd.ExecuteReader()
    for r in dr:
        print r['TABLE_NAME'], r['TABLE_OWNER']

if __name__ == '__main__':
    fb_tables()


ADO.NET データプロバイダ [DotNET]

ADO.NET の解説(ちと古い)
http://www.atmarkit.co.jp/fdotnet/basics/adonet_index/index.html
・・・の中の ADO.NET データプロバイダの説明
http://www.atmarkit.co.jp/fdotnet/basics/adonet02/adonet02_01.html
(SQLServer と Oracle のは .NET Framework におまけで付いてくる)

ADO.NET Data Provider(自分の興味のある順)

Firebird
http://firebird.sourceforge.net/index.php?op=files&id=netprovider
http://blog.so-net.ne.jp/nakagami/2006-03-29

SQLite
http://sourceforge.net/projects/adodotnetsqlite

PostgreSQL
http://www.crlab.com/pgsqlnet/

MySQL
http://www.crlab.com/mysqlnet/

(Mono からの情報)
http://primates.ximian.com/~atsushi/mono-jp/ado-net.html

・・・それから
Npgsql (ADO.NET データプロバイダでない PostgreSQL に接続するミドルウェア)
http://pgfoundry.org/projects/npgsql
http://gborg.postgresql.org/project/npgsql/projdisplay.php
http://www.jade.dti.ne.jp/kamada/access_and_postgres/npgsql.htm

(おまけ)
ADO.NETでのデータ取得を高速化するためのヒント
(といわれても良く分からんけど、最近の記事なのでメモ)
http://japan.internet.com/developer/20060307/26.html