Ruby 0
全22件 (22件中 1-22件目)
1
掲示板に、次のような質問が掲示板に書かれていたので、ネタにしておく。IronPythonでのnullは? (投稿者: bucoさん)はじめまして。Pythonに触れ始めて時折こちらのサイトをご参考にさせていただいております。ところで、こういったところにご質問を書くのもすごく恐縮なのですが、文献や参考サイトも少なくどうしても分からないことがあるのでご質問させてください。IronPythonからC#で作成したdllを呼び出して使用しようとしました。そこで、dllの中に関数の引数にnullを渡したいのですが、渡し方が分りません。PythonではNoneとなっておりますが、C#にNoneを渡すと型が違いますとエラーがでます。C#のdllの引数にIronPythonからC#でいうnullを渡すことはできないのでしょうか。ご質問に答えていただければ幸いです。 (April 6, 2009 13:50:58) IronPythonから C#で作成したdllを呼び出すとき、関数の引数にnullを渡したいということで、None では型が違うとエラーになるので、その場合は、どうしたらよいかということ。ここからは、第六感で答えたわけだけど、[IronPython] Null pointer passing みたいなことなのかなぁと思ったから、from System import IntPtrしておいて、IntPtr.Zero を渡したらどうなるでしょうか?(April 10, 2009 07:39:48) たぶん、そういうことなんじゃないかなぁと思って返事をしておいたら、ちゃんと返答があって、ご返答ありがとうございます。IntPtr.Zeroを渡すことで無事引数を渡して関数を実行することができました。ありがとうございます! (April 10, 2009 16:51:39) ということで、解決したようだ。IntPtr に関しては、IntPtr 構造体 や IntPtr.Zero フィールド のあたり参照。このフィールドの値は、 null 参照 (Visual Basic では Nothing) と等価ではありません。 IntPtr のインスタンスが 0 以外の値に設定されているかどうかを効率的に確認するにはこのフィールドを使用します。たとえば、変数 ip が IntPtr のインスタンスであるとします。この変数が設定されているかどうかを確認するには、同変数とコンストラクタから返された値 (たとえば " if ip != new IntPtr(0)... ") を対比します。コンストラクタを呼び出して初期化前の状態のポインタを取得するのは非効率的です。その場合は " if ip != IntPtr.Zero... " または " if !IntPtr.Zero.Equals(ip)... " とコーディングすることをお勧めします。例えば、デスクトップ上のすべてのメイン・ウィンドウを列挙するには? みたいな例では、foreach (Process p in Process.GetProcesses()) { if (p.MainWindowHandle != IntPtr.Zero) { Console.WriteLine(p.ProcessName + " : " + p.MainWindowTitle); } }のように使われる。new IntPtr(0) としないで、効率化のためにIntPtr.Zero が使えるわけね。普段 Python のプログラミングだけだと、型を気にすることはないけれど、型が問われるときには、こういうことをしなきゃいけないことも出てくる。鋼鉄の蛇使いへの道 - IronPythonの復習 (ふにゃるん) のあたりも参照。>>> import clr>>> clr.AddReferenceToFile("csextend.dll")>>> import Simple>>> from System import IntPtr>>> Simple.MessageBox(IntPtr(0), "hello IronPython", "hello", 0)1ここでは、IntPtr(0) としているけれど、こういう場面でも ItrPtr.Zero を使えばよいかな。なお、掲示板 への書き込みは、いつもチェックしているわけではないので、書かれていても気がついていないときもありますので悪しからず。書かれてもスパムが多いので、ときどきざっくり削除してます。加えて、一部の文字列が投稿制限で使えないとか制限がかかってます。なお、この質問に関しても、掲示板の方は、あとで削除しちゃいます。ということでブログのネタにしておくのであった。IronPythonの世界
2009.04.11
コメント(0)
2.0 Beta 2">IronPython 2.0 Beta 2 リリースされたのね。We’ve also made a minor change to our packaging by adding a Microsoft.Scripting.Core.dll in addition to the Microsoft.Scripting.dll that’s been around since the start of 2.0. とか、変わっている。アーキテクチャの見直しが入っているのね。ぶひAs a consequence of the new DLL, the deprecated file IronPython2005.sln is broken. IronPython 2.0 を使う場合、Visual Studio 2005 でなくて Visual Studio 2008 を使うべしの方向になっているのかな。Windows 上で CPython を使っているときでも、C の拡張モジュールとか自分でコンパイルしようとすると、VC のバージョンを合わせなきゃならないのと同じで、IronPython でもそういう感じか。私の PC だと Visual Studio 2008 Express が不安定で、ポコポコ落ちる。何がいけないんだろうか。インストールしなおしてみるかな。Expression とか、試用版でちょっと動かしてみたけど、WPF の世界は、やっぱり、こういうの使った方が楽。でも、お金かかるねぇ。こういうものを使うと、ちょっと重いから PC も新しくしなきゃとかなりそうだし。最初のSilverlight 2でExpression Blendの使用 みたいのを見ると、いいなぁとは思うけど。Kaxaml は無償で使えていいかも。コンプリーションが効く上、書いたコードがすぐに WYSIWYG で表示されるので、テキストエディタだけで作るより、はるかに楽。xamlpad よりいいか。 Visual Studio Book ExpressVisual Studio Express Edition に関連する書籍の一部を公開します。学習や書籍購入の検討の際にお役立てください。なんてページあったのね。しかし、最近、ちょっと MS に洗脳され過ぎかなぁw
2008.05.03
コメント(0)
IronPython in Action が Manning から出版されるが、出版前であるけれども、すでに一部を読むことができる。これは、MEAP (Manning Early Access Program) という販売方法で、著者が1章仕上げるごとに、それを出版前に電子的に読める仕組みで、できたところから読ませてねという感じになる。MEAP で出版(電子的に読者に公開)された部分については、フォーラム (Author Online forums.)を通じて、読者がコメントを送ることができるので、間違いがあれば、それを本として出版される前に直してもらうということも可能になる。読者は MEAP だけ買ってもいいし、書籍として出版後の紙の本もいっしょに買ってもいい。MEAP は完全にできあがる前に売るわけだから、読者としては、書籍版より安く、早く読むことができるというメリットがある。そして、出版社や著者は、正式な出版前に前払い金を受けたのと同じようなことになるから資金繰り的なメリットがある。そして、フィードバックを受けて出版前に反映させれば、よりよいものになれば、本として出版されたときにより多く売れる可能性もある。著者の執筆を応援する、あるいは、後ろから方をぐいぐい押していくような役割にもなる。あるいは、不明な箇所があれば質問もできる。雑誌の定期購読の前払いも、考えてみるとそういうところがあるか。ただし、雑誌の場合は、事前にどういう記事が入ってくるかは不明なのに対して、この書籍の場合は、事前にどういうものが書かれるのかは明らかになっている。雑誌は決められた日時に出版されるが、MEAP の場合はいつというのが明確ではない。たとえば、IronPython 本の場合、MEAP Release: September 2007 で、それから半年ちょっとで、半分ぐらいが参照可能になっているが、あとどのくらいというのは明確ではない。この分でいくと、あと半年ぐらいかな。でも、明確ではない。それゆえ、先物買いがどの程度、期待通りに機能するかどうかは分からない。それでも、この人のこういう本なら、少しでも早く、できた分だけでいいから先に読みたいよね、というニーズは満たしてくれる。おもしろい仕組みだと思う。
2008.04.28
コメント(1)
ブログに IronPython のカテゴリを追加した。IronPython に関わる話題のときは Python のカテゴリ ではなく、こちらに分類することにする。とりあえず、『IronPython の世界』を読みながらあれこれ試した感想とメモ。IronPythonの世界.NET Framework を理解している人が IronPython を使うと効果的。.NET Framework と仲良くすれば、かなり強力。.NET Framework はイヤだという人は、使わない方がよい。IronPython を使うなら .NET Framework を学ぶべしIronPython と CPython の互換性はあまり高くない(はまりどころたくさん)CPython の資産の利用は限定的で苦労が伴う。全部ユニコードを中心に考えること。文字コード絡みははまりどころ。正規表現の差異は CPython のモジュールを流用するときのはまりどころ。ネットワーク関連は、IPCE(FePy) を使うか、.NET 的にやった方がよい。BeautifulSoup は IPCE に標準で入っている。XML 関連もはまりどころの一つ。同じ Python だと思っていると、はまりどころはてんこ盛り。今のところ、おもしろいとは思うけど、んー、そういうところが違うとプラットフォームの行き来に苦労するから辛いなという感じ。それでも、拡張モジュールは C# で書いたモジュールが、そのまま IronPython から使えるので楽なところはよいかもしれない。swig も不要だし、ctypes も不要。これは大きい。当面はあまりクロスプラットフォームとかこだわらずに、Windows だけで動けばいいやなものであれば、CPython との互換性でちょっと苦労はするけど、いいとこどりができそうな実感はある。Windows へのロックインが生じることについては Mono に期待するかなと。ということで、まだしばらくあれこれ調べながら試しながら IronPython を使っていこうかなと思う今日この頃。お試しの域はなかなか出ないだろうけど。
2008.04.25
コメント(0)
『IronPythonの世界』を読む (9) の続き、「WebサービスAPIとの連携」P.313 あたりから読む。IronPythonの世界Part 5 IronPythonでDB&Webプログラミングの「Yahoo! JAPAN のWebサービスを使う」は P.317 のコードが、インデントすべきところがインデントされてなかったりする。9-12行目や 14-15行目の関数とか、P.318 のprint net["totalResponse..." の行も、113000... の結果の行がくっついてしまっているとか、P.319 でも同じようなのがある。よろしくないところ。とりあえず、同じようなことを安易に 『IronPython の世界』を読む (4) で SlothLib を使ってやってみたので、読み飛ばし。 自然言語処理関連のライブラリ SlothLib をちょこっと使う みたいのをそのうち IronPython で作りなおしてみる(画面のは C# でやっている)。P.321 「SOAPを使ったWebサービスを利用する」を見ると、PyGoogle などは、内部で socket モジュールや codecs モジュールを使っているから、そのまま IronPython から使えないよという話があり、Visual Studio 2005 から C# か VB でモジュールを作るための簡単な手順が載っている。そんな単純な手順でよいのかいというぐらいあっさりした 10行ほどの記述。でも、やってみると、あっさりビルドできた。確かに Visual Studio からの SOAP は SOAP で便利な世界だなぁ。とりあえず、SOAP のサービスは IronPython を使えば(C# 等でモジュール作れば)、誰かが作ってモジュールを公開してくれてなくても、5分もあればすぐに IronPython から使えるというのはよいな。と、また洗脳されてみるwXMLやHTMLを使うでは、SystemXML があるけど、とりあえず CPython の ElementTree を使ってみている。が、expat がなくてエラーになるので IPCE版 (FePy には ElementTree があるからそれを使うのがいい。でも、やっぱり問題があるから手を入れるのがよいですねと、あれこれ書かれている。IPCE r5 の ElementTree だと CPython の正規表現との互換性重視になっているか IronPython 1.0.1 の正規表現モジュールと整合性がとれず、XPath 式でエラーになる。ElementPath.py の正規表現を書き直せばいいかもなどと書かれている。このあたりやっぱりはまりどころなのね。BeautifulSoup とかどうなんだろうと探すと、[IronPython]BeautifulSoupを使う ということで、FePy なら標準なのね。IPCE-r7 みても確かにある。なんにせよ、詳しくテストしてみないとどの程度、うまくいくか分からんなぁ。正規の IronPython と、IronPython Community Edition (FePy) との違いとかも、細かく見て、どっちを使うか考えた方がいいとかもあるか。現状どうなっているかも、あとでまとめて確認する。とりあえず棚上げして先へ進んで、「System.XMLを使う」(p.338)を流し読み。CPython との互換性を考えなければ、こっちが安定して使えるということで洗脳されるwでも、ElementTree を使ったモジュールの流用ができなくなるということだから、やっぱり ElementTree 周り、あとで見直して、試すことにしようかな。ということで「Webアプリケーションを作る」p346を読む。IIS を使ってのお話なので読み流す。Part 6 「もっと IronPython を使いこなすために」は、「ソースコードを探索しよう」に IronPython 自体のソースコードについてあれこれあって、「IronPython に独自モジュールを追加しよう」とかあって、「.NET Framework 対応の言語から IronPython を使う」と来る。そして「COM相互運用アセンブリを使う」では MSAgent を使った例がある。また、サウンドプレーヤーを使った次のような例も出てくる。import clrclr.AddReference("System")from System.Media import *player = SoundPlayer()player.SoundLocation = "bgm.wav"player.LoadAsync()player.Play()『IronPythonの世界』より時間がかかる処理とか、終わったときに音楽流すようにしとくのに使うかな。APIをさがせば、簡単にすぐに使えるものがたくさんあるというのはやっぱり大きなメリット。Windows だけの世界で OK ならwそして、「デバグの方法」の「ユニットテストを使う」では FePy のにユニットテストが使えるとある。ただし、IronPythonでIPCEのテストモジュールを使用すると、テスト結果が失敗のときにインポートエラー(pyというモジュールがない)が発生します。IPCEのインタラクティブシェルで実行するとインポートが発生しません。IronPythonでもインタラクティブシェルのコマンドライン引数に指定すれば、さきほどのインポートエラーは発生しません。とある。ふーむ、やっぱりこういうところでも微妙だな問題があるのだな。そして「Microsoft CLRデバッガを使う」「Visual Studio 2005をデバッガとして使用する」ときて、最後にAppendixnの「IronPythonドキュメントミニツアー」「IronPythonの重要なドキュメント」「.NET Frameworkのライブラリに関するドキュメント」ときて、「Pythonのコミュニティ」「IronPythonとVisualStudio 2005との統合」「IronPythonのサンプル」「Python言語の例外処理」等眺める。ということで、とりあえず読了ということにする。書くの飽きて来ちゃった。全般的に見て、ソースコードでおかしいところとかはあるけれど、IronPython を使うなら買うに値する本。この本を読んでからチャレンジした方がはまりどころが明確になっていいし、これ以外にまとまった日本語の情報はないし。けど、マイクロソフトの人が書いた本だけあって、徐々に、まあ互換性ないところがあってもメリットを活かせばよいかとやんわりと洗脳されていくが、2800円の元は十分取れると思う。IronPython は、Python が好きな人が Windows の世界の資産を有効活用するにはとてもよい。けれども CPython の遺産を使おうとすると、まだまだ苦労する。互換性の問題をいろいろ考慮しなければならないから。小さいものなら書き換えを適当にやれないことはないだろうけど、大きいものだと検証も含めて手間がかかるから開発コストの点では効率的とはいえない。FePy がもっと進んだら、ステキかもしれない。Ironclad 0.2 Released: Use CPython Extensions from IronPython (Nearly...) みたいのも、始まっているから、IronPython から C 拡張を使えるようになってくる。そうすると何でもありでとっても強力な環境になるだろう。
2008.04.25
コメント(0)
『IronPythonの世界』を読む (8) の続き。Part 5 の「インターネットにアクセスする」P.305 あたりを読む。IronPythonの世界urllib は socket ライブラリの互換性の問題があるので、.NET Framework の System.Net サービスを使った例が載っている。とりあえず、このあたり見ながら簡単に試してみる。import clrclr.AddReference("System")from System import *from System.Net import *url = Uri("http://pypi.python.org/pypi?:action=rss")filename = "pypy.rss"client = WebClient()client.DownloadFile(url, filename)とかすると、ダウロードできるようだ。urlparse の代わりには、Segments を使うと、>>> url = Uri("http://www.example.org/test.html")>>> url.SegmentsSystem.String[]('/', 'test.html')>>> url.Segments.Length2>>> url.Segments[url.Segments.Length -1]'test.html'のように URL をパースできる。urllib で文字列として読み込んでとかやろうとすると、import urllibf = urllib.urlopen("http://pypi.python.org/pypi?:action=rss")print f.read()とかなるが、これを IronPython でやろうとすると、import clrclr.AddReference("System")from System.Text import *from System import *from System.Net import *client = WebClient()# 読み込むときのエンコーディングを指定したければ、# System.Text.Encoding を使って、こうできる。cleint.Encoding = Encoding.GetEncoding("utf-8")print client.DownloadString("http://pypi.python.org/pypi?:action=rss")バイナリデータの場合は、DownloadData を使えばよいらしい。プロキシの指定はどうするのかなぁ。urllib を使うなら FancyURLopener が使える。import urllibproxies = {'http': 'http://proxy.example.com:3128/'}opener = urllib.FancyURLopener(proxies)f = opener.open("http://www.python.org")f.read()IronPython の場合は、clr.AddReference("System")from System import *from System.Net import *client = WebClient()client.Proxy = System.Net.WebProxy('http://proxy.example.com:3128')print client.DownloadString("http://pypi.python.org/pypi?:action=rss")とかすればよいのかな。書籍には、System.Net.Proxy と書いてあるけど、dir(System.Net) で見てみると、そんなものはなくて、WebProxy しかないから、そうしてみた。BypassOnLocal だと、ローカルの場合はプロキシーをバイパスとか Internet Explorer のオプションで指定しているのと同じような感じでいけるようだ。>>> print client.Proxy.__doc__WebProxy()WebProxy(Uri Address)WebProxy(Uri Address, bool BypassOnLocal)WebProxy(Uri Address, bool BypassOnLocal, Array[str] BypassList)WebProxy(Uri Address, bool BypassOnLocal, Array[str] BypassList, ICredentials Credentials)WebProxy(str Host, int Port)WebProxy(str Address)WebProxy(str Address, bool BypassOnLocal)WebProxy(str Address, bool BypassOnLocal, Array[str] BypassList)WebProxy(str Address, bool BypassOnLocal, Array[str] BypassList, ICredentials Credentials)アップロードのときには、UploadString や UploadFile とかを使う例がある。ただし、urllib.urlencode 相当のものはないらしく、urllib.urlencode を使った例になっている。ところが、urllibモジュールのurlencode メソッドにユニコード文字列(日本語を含む)が含まれると、エラーになります。この現象は、IronPythonでCPython の urllib を使用すると発生します。とある。んー、困ったなと試してみる。>>> import sys>>> sys.path.append("C:\\Python24\\lib")>>> import urllib>>> a = "傀儡師の館">>> d = {"name":a.encode("utf-8")}>>> urllib.urlencode(d)Traceback (most recent call last): File , line 0, in <stdin>##85 File C:\Python24\lib\urllib.py, line 1168, in urlencode File mscorlib, line unknown, in GetString File mscorlib, line unknown, in GetString File mscorlib, line unknown, in CreateStringFromEncoding File mscorlib, line unknown, in GetCharCount File mscorlib, line unknown, in InternalFallback File mscorlib, line unknown, in Fallback File mscorlib, line unknown, in ThrowUnicodeDecodeError: インデックス 0 にあるバイト [E5] を指定されたコード ページから Unicode へ変換できません。なるほど、確かにエラーになる。うざったいので、とりあえず、urllib の中を見る。str() を使っているところがエラーの原因なので、import sysif sys.platform == 'cli': def str(s): return sと入れちゃう。そうすると、>>> urllib.urlencode(d)'name=%E5%82%80%E5%84%A1%E5%B8%AB%E3%81%AE%E9%A4%A8'となる。あるいは、def urlencode(query): """ ちょっとインチキ版 """" query = query.items() l = [] for k, v in query: k = urllib.quote_plus(k) v = urllib.quote_plus(v) l.append(k + '=' + v) return '&'.join(l)import syssys.path.append("C:\\Python24\\lib")import urlliburllib.urlencode = urlencodea = "傀儡師の館"d = {"name":a.encode("utf-8")}print urllib.urlencode(d).NET 的にやると、import clrclr.AddReference("System.Web")import Web.HttpUtilitydef urlencode(query): query = query.items() l = [] for k, v in query: k = HttpUtility.UrlEncode(k) v = HttpUtility.UrlEncode(v) l.append(k + '=' + v) return '&'.join(l)この場合、渡すのはユニコード文字列のままでいい。'name=%e5%82%80%e5%84%a1%e5%b8%ab%e3%81%ae%e9%a4%a8' が返ってくる。まあ、なんとかしのげないことはないって感じかな。でも、やっぱり、CPython は使えるけど .NET はよく分からないという人にとっては、かなり躓きどころが多い。けれども、.NET がよく分かっている人にとってみたら、Python のインタラクティブ性と .NET の力で、かなり便利に使えるだろうって、改めて思う。IronPython を使っていると Python の構文は使っているけど、どんどん中身が .NET Framework になっていく。なるほど、これぞマイクロソフトの意図するところなんだな。プログラミングしようとすると、.NET Framework を調べざるを得なくなる。そうしていると徐々にその道に馴染んでいってしまう。
2008.04.22
コメント(0)
『IronPythonの世界』を読む (7) からの続き。Part 4 はとりあえず適当に流して、Part 5 IronPython で DB & Web プログラミングに入る。ここでは、SQL Server 2005 を使っている。IronPythonの世界具体的に書かれているのは、ADO.NET を使って SQL Server 2005 に接続するやり方だけで、SQLite や MySQL 等を使うにはどうしたらいいかとかいうのはない。p.304 に 「CPython のデータベース接続を使う」というページがあって、FePy プロジェクト や IronPythonでADO.NET パート1、IronPythonでADO.NET パート2 のリンクがあげられている。このあたりを参考にすれば、なんとかなるんだろうということで、後から試してようかと思う。DB 接続の部分は、できれば DBAPI 互換のライブラリを使って、CPython のプログラムと共通化したい。IronPython を使うと、.NET の世界とは仲良くなれる反面、既存の Python の資産を有効に扱いづらいというデメリットもある。基本的にはマルチプラットフォームのものが好きなので、うーむと読み進めるにしたがって思ってしまうのだが、Windows に閉じた世界でやる分には、まあ、便利でよろしいかなと。例えば、IronPython から MS の日本語固有ニーズに対応したライブラリを使う 「プログラミング言語 Python を使う みたいなこともできるし、自然言語処理関連のライブラリ SlothLib をちょこっと使う にしても、 『IronPython の世界』を読む (4) で IronPython から使ってみているけど、CPython + ctypes で C のライブラリを使うよりも、IronPython + .NET のライブラリを使う方が楽なわけで、欲しいライブラリが .NET で書かれていれば、やっぱり IronPython を使うメリットは大きいとも思う。ちょっとアンビバレント。とりあえずは、SQL Server 2005 を使って書かれているとおりにやってみる。ということで、また一つ、一時的に Microsoft に洗脳されてあげることにする。書籍には、URL が書かれているが打ち込むのが面倒なので、SQL Server 2005 - ダウンロード のリンクからダウンロードするのがよいだろう。SQL Server 2005 Express Edition with Advanced Services Service Pack。これは SP2 があたっているので、書籍に書かれているように別途 SP2をあてる必要がない。Advanced を使っている理由は、SQL Server 2005 Management Studio Express (SSMSE) という使いやすいグラフィック管理ツールによる SQL Server Express の容易な管理。SQL Server テーブルのプレーン文字ベースのデータに対するフルテキスト クエリの実行。フルテキスト クエリには、語、句、または複数の形式の語句を含めることができます。ローカル リレーショナル データでの SQL Server Reporting Services レポートの実行。ということで、インストールするときに SSMSE のインストールオプションを忘れずにということだ。デフォルトだとインストールされないから。確かにこれはインストールしておいた方が便利だろう。SSME のテンプレートエクスプローラーとかも密かに便利ね。テンプレートの中から Backup Database を使えばテンプレートをほいと作ってくれるとか。なんだかんだで、こういう GUI はオープンソース系よりプロプライエタリなやつの方が充実している。SQL Server Management Studio でテンプレートを使用する方法、 SQL Server 2005の管理ツール (@IT)。集中連載 : SQL Server 2005 と Oracle 10g の真実 第 7 回 メンテナンス プランの作成 ~ 定期的なメンテナンス作業の簡単なセットアップとバックアップ、復元。それにしても、3年前のリリースのものだと資料がたくさん簡単に見つかる。そういえば、この数年 MS SQL Server って使ってなかったというのはさておき、サンプルデータベースは、Northwind and pubs Sample Databases for SQL Server 2000 と SQL Server 2005 Samples and Sample Databases (ここに移動)で、Express Editions 用サンプル データベースのインストール のあたり。とりあえず書籍のNorthwind and pubs Sample Databases for SQL Server 2000を使ってテストする。instpubs.sql と instnwnd.sql を実行してサンプルデータベースを作るが、このあたりの手順、書籍ではちゃんとされているので、SQL Server を使ったことがない人でもたぶん大丈夫だと思う。ADO.NET の仕組みなんかも簡単に説明されている。それゆえ、また洗脳が行われるwとりあえず、データベースを作成後、書籍を参考に、下のようなテストをしてみる。接続は Windows 統合認証ではなく SQL Server 認証を使った。User ID=sa;Pwd=password のところが Windows 統合認証なら Integrated Security=true になる。このあたりは、Python のお話というより、通常の SQL Server の接続文字列のお話になるが。# お約束で clr をインポートして、# AddReference で参照してから、importimport clrclr.AddReference("System.Data")from System.Data.SqlClient import *# SQL Server への接続conn = SqlConnection()conn.ConnectionString = "Server=(local)\sqlexpress;Database=pubs;User ID=sa;Pwd=password" conn.Open()# コマンドの作成と実行cmd = conn.CreateCommand()cmd.CommandText = "select count(*) from titles"count = cmd.ExecuteScalar()print countcmd.CommandText = "select title, type from titles"dr = cmd.ExecuteReader()while dr.Read(): print "title=%s type=%s" % (dr[0], dr[1])dr.Close()cmd.CommandText = "insert into titles values ('ironbk', 'Programming IronPython', 'programming', '0736', 2800, 0, null, null, null, '2007/3/31')"count = cmd.ExecuteNonQuery()print count# 接続を閉じるconn.Close()参考: 『IronPython の世界』p. 294 に次のような記述がある。本書では、セキュリティ上の観点から「Windows統合認証」で解説していきます。それは、仮とはいえ、パスワードは気軽に公開できるものではないと思うからです。なので、上記の ConnectionString のところは、サンプルでは、conn.ConnectionString = "server=(localhost):Database=pubs;Integrated Security=true" になっている。セキュリティ上の観点から言うと、スクリプトにパスワードを書きこまなくても済む Windows統合認証というのは、特に企業内でアプリケーションを多数に配る場合に便利かつ安全で良いかもしれない。そうでなければ、毎回、使用時にパスワードを訪ねる必要がある。Windows であれば、そんな必要はない。これは大きなメリットだ。と、また、マイクロソフトに毒されてみるw シングルサインオンですぜと。でも、本当にそれは正しい面もある。毎回パスワード入力するなら、OpenLDAP を使って python-ldap を使うとかあり得るが、それじゃあなんだから Kerberos でというのなら、PyGSS: Python bindings for the GSS-API とか。あるいは、ウェブアプリケーションなら Lasso - Liberty Alliance Single Sign On あたりもそのうち見てみるか。 PKIとPMIを融合する新しいXMLベースのセキュリティメカニズム【連載】Webサービスのセキュリティ。SaaS市場でもSIビジネスが成長か サイオス、Google Apps導入でSIサービス開始、SIOS Integration for Google Apps とは、という方向だってあるだろう。でも、とりあえず、そういうことはどうでもいいや。
2008.04.19
コメント(0)
『IronPython の世界』を読む (6) の続き。「Part 4 .NET Frameworkのライブラリを使用する - Windows Formsを使った GUI アプリの開発」は、Tkinter を使うような感じで Windows.Forms が使えるということが分かった。個々のお作法は違うけど。イメージ的には同じようなもの。ちなみに p. 250 のリストは、27 行目が間違っているかな。誤b1.Location = Point((clientwidth - b1.Width * 2 / 3, 68)正b1.Location = Point((clientwidth - b1.Width * 2) / 3, 68)なのだろう。そうしないとエラーになる。とりあえず、このあたりは、そんな感じで作ればいいのねと流す。「WPFを使ったGUIアプリの構築」のあたりも流す。XAML とかも面白いとは思うが、とりあえず、手打ちで入力するのは面倒なのでそういうものねということで流し読み。IronPython の Tutorial のディレクトリに若干のサンプルがあるので、そのあたりもざっと眺めてみる。IronPython-1.1.1\Tutorial\Tutorial.htm (IronPython Tutorial A tour of Python on .NET) を見ながら、それぞれ見ていけばいいのね。「イベントハンドラ」のところで使われている例定期的にファイルがないかを調べる方法 (一般的にポーリングと呼ぶ)ファイルシステムのイベントをキャッチして処理するは、おもしろいけど、Tutorial にあるのね。from System.IO import *def handle(sender, e): print a.ChangeType.ToString(), a.FullPathw = FileSystemWatcher()w.Path = "."w.Changed += handlew.Created += handlew.Deleted += handlew.EnableRaisingEvents = Trueこれでカレントディレクトリでファイル追加、削除、変更があるたびにメッセージが標準出力される。これは便利。書籍には Tutorial.htm にないような詳しい説明や追加のサンプルがある。p278 あたりからの「ファイルシステムウォッチャーを使ったサンプル」は、ファイルが作られたら、別のディレクトリに移動するもの。あるフォルダを監視して、イベントがあったら、何かするとかいうのを書きたかったら、これが参考になるだろう。それにしても、パスの取り扱いが、また違うのね。CPython だったらディレクトリ名とファイル名をつなげる場合、import osos.path.join("C:\\temp", "test.txt")とかするところ、IronPython だと、System.IO.Path.Combine("C:\\temp", "test.txt")になるし、ファイルが存在しているかどうかを確認するのに、CPython ならos.path.exists(filepath)なのが、IronPython ではSystem.IO.File.Exists(filepath)のようになる(ディレクトリなら System.IO.Directory.Exists)。その点考えると、既存のモジュールでファイルの読み書き関連とかが絡むものは、やっぱり、そのまま使えない。それにしても IronPython を使っていると、どんどん MS の世界に洗脳されていく。
2008.04.12
コメント(0)
『IronPython の世界』を読む (5) の続き。Part 4 .NET Framework のライブラリを使用する - 正規表現: re モジュールのあたりを読む。IronPython は CPython とは異なり、.NET Framework の正規表現 (System.Text.RegularExpression) を使って実装されています。ということで、基本的なところではだいたい同じような感じなのだが、注意しなければ使えないところのようだ。例えば、IronPython だと次のようにマルチラインを (?m:) のようなメタ文字で表現できるが、CPython ではできない。>>> re.findall(r"(?m:^abc)", "abc\nabc2\nabc3")['abc', 'abc', 'abc']CPython なら、re.M を使って次のように書くところ(IronPython でも、これは OK)。>>> re.findall(r"^abc", "abc\nabc2\nabc3", re.M)['abc', 'abc', 'abc']他にも、下のようなものがある。re. M 、(?m: パターン) 複数行のマッチre.I 、(?i: パターン) 大文字、小文字無視のマッチre.S 、(?s: パターン) メタ文字"."をすべてを含むすべての文字にマッチない 、(?x: パターン) パターンから空白を除去正規表現オブジェクトも、CPython が>>> matchstr=re.compile(r"[0-9]")>>> type(matchstr)<type '_sre.SRE_Pattern'>となるのに対して、IronPython だと、>>> matchstr=re.compile(r"[0-9]")>>> type(matchstr)<type 'RE_Pattern'>のように違う。IronPython内部では独自の「IronPython.Modules.PythonRegex+RE_Pattern」で実装しています。ということらしい。ということで、次のようなグループ名も微妙に書き方が違ったりする。IronPythonmatchstr=re.compile(r"(?<user>[^@]+)@(?<host>.+)") CPythonmatchstr=re.compile(r"(?P<user>[^@]+)@(?P<host>.+)")(?m:) みたいのは CPython との互換性を考えて使わず、グループの表現も CPython に合わせて書いておいた方が混乱しなくていいなとか思う。IronPython でも ?P の表現は OK なようなので。そういうところはよいとしても、CPython が 「[('johondo', 'tempuri.org')」というタプルのリストを返すのに対して、IronPythonは「("johndoe@tempuri.org')] というリストを返します。みたいなところは、ちょっとイヤだな。正規表現エンジンの実装が違うから仕方ないといえば仕方ないのだけど。こういうところは、注意して使うしかない。けれども、人が作った CPython で公開されたモジュールを使うときには、import re しているものがあれば、チェックする必要があるということが分かった。IronPythonの世界
2008.04.12
コメント(0)
『IronPython の世界』を読む (5) の続きを進めようかと思ったが、MS、日本語固有のニーズに対応した「Visual Studio」用ライブラリ集を公開 - 数値データを漢数字の文字列に変換したり、日本語IMEに対応した自動補完が可能 が目に付いた。日本語文字列の操作に便利なライブラリとしては、数値データを漢数字の文字列に変換できる「East Asia Numeric Formatting Library」、ひらがな・カタカナ・半角カタカナを相互変換できる「Japanese Kana Conversion Library」、均等割り付けを用いて文字列を描画できる「Japanese Text Alignment Library」、日本語IMEに対応した自動補完機能を実現する「Japanese Yomi Auto-Completion Library」が含まれている。じゃあ、これも IronPython から使ってみようかということで、やってみる。ダウンロードの詳細 : Microsoft Visual Studio International Pack 1.0 からダウンロード。解凍すると、CHSPinYinConv.msi、CHTCHSConv.msi、EANumFormat.msi、JPNKanaConv.msi、JPNTextAlign.msi、JPNYomiAutoComp.msi、KORAutoComp.msi がある。* East Asia Numeric Formatting Library - 数値データを日本語、繁体字中国語、簡体字中国語および韓国語における漢数字の文字列に変換します。* Japanese Kana Conversion Library - ひらがな、カタカナ、半角カタカナの相互変換、およびローマ字の変換をします。* Japanese Text Alignment Library - 日本語固有の均等割付を用いて文字列を描画します。* Japanese Yomi Auto-Completion Library - 日本語IME における読みの入力に対応したオートコンプリート機能を提供するライブラリとサンプルのTextBox コントロールを提供します。* Korean Auto Complete TextBox Control - 韓国語入力に対応したオートコンプリート機能を持つTextBox コントロールを提供します。* Simplified Chinese Pin-Yin Conversion Library - 簡体字中国語で一般的に用いられるPolyphone、Homophone、Pinyin や画数などの文字のプロパティを取得します。* Traditional Chinese to Simplified Chinese Conversion Library and Add-In Tool - 繁体字中国語と簡体字中国語の間の双方向変換を容易にするクラスライブラリを提供します。このコンポーネントには、簡体字中国のリソースファイルを繁体字中国語に変換するための、Visual Studio 統合開発環境用アドインツールが含まれます。ということなので、韓国語と中国語関連のは使わないので、EANumFormat.msi、JPNKanaConv.msi、JPNTextAlign.msi、JPNYomiAutoComp.msi をインストールしてみる。それぞれのインストーラーを起動すると、\Program Files\Microsoft Visual Studio International Pack の下にそれぞれ、East Asia Numeric Formatting Library、Japanese Kana Converter Library、Japanese Text Alignment Library、Japanese Yomi Auto-Completion Library のディレクトリが作成されてインストールされる。とりあえず、また気合いで使ってみる。やっぱり、IronPython って、.NET のライブラリが使えるから、MS の環境のなかでやっている分にはやたら便利かもしれない。>>> import clr>>> import sys>>> sys.path.append("C:\\Program Files\\Microsoft Visual Studio International Pack\\Japanese Kana Converter Library")>>> clr.AddReferenceToFile("JpnKanaConversion.dll")>>> clr.AddReferenceToFile("JpnKanaConvHelper.dll")>>> from Microsoft.International.Converters import KanaConverter>>> KanaConverter.RomajiToHiragana("korehadoudesu")u'\u3053\u308c\u306f\u3069\u3046\u3067\u3059'>>> print KanaConverter.RomajiToHiragana("korehadoudesu")これはどうです>>> print KanaConverter.HalfwidthKatakanaToHiragana("キャキャキャ")きゃきゃきゃ>>> print KanaConverter.HalfwidthKatakanaToKatakana("キャキャキャ")キャキャキャ>>> print KanaConverter.HiraganaToKatakana("ひらがな")ヒラガナ>>> print KanaConverter.KatakanaToHiragana("カタカナ")かたかな>>> sys.path.append("C:\\Program Files\\Microsoft Visual Studio International Pack\\East Asia Numeric Formatting Library")>>> clr.AddReferenceToFile("EastAsiaNumericFormatter.dll")>>> from Microsoft.International.Formatters import EastAsiaNumericFormatter>>> from System.Globalization import CultureInfo>>> print EastAsiaNumericFormatter.FormatWithCulture("L", 123.45, None, CultureInfo("ja"))壱百弐拾参といったように IronPython から使えるのまで確認。
2008.04.12
コメント(0)
『IronPython の世界』を読む (4) の続き。「Part 4 .NET Framework ライブラリを使用する」の「ファイル入出力を使う: System.IO ネームスペース」のあたりをやってみる。IronPython の場合、ファイルの入出力は StreamReader や StreamWriter を使った方がよいのかなぁ。エンコーディングを指定しての読み書きで問題も出ないし(前の方を参照)。でも、既存のプログラムとかモジュールとかがあれなんだよなぁということもあるので、ちょっと悩ましいところ。import clrfrom System import *from System.IO import *from System.Text import *fs = FileStream("out.txt", FileMode.Create)sw = StreamWriter(fs, Encoding.GetEncoding("shift_jis"))lines = ["1行目", "2行目", "3行目"]for line in lines: sw.WriteLine(line)sw.Close()fs.Close()sr = StreamReader("out.txt", Encoding.GetEncoding("shift-jis"))data = sr.ReadToEnd()sr.Close()print data# readlines で読み込んだときのように、行ごとにリストになってない。# \r\n で全部つながっている。# readlines で読み込んだときのようにしたければ、# split("\r\n") でリストにしてやるってことになるかなfor line in data.split("\r\n"): print lineみたいになる。ちょっと、タイピング量が増える。まあ、このあたりは、CPython と違っても仕方あるまいと割り切るしかないかな。ここで紹介したもの以外にも BinaryReader、BinaryWriter、TextReader、TextWriter、File、FileInfo、Directory、DirectoryInfo、Drive などがあります。これらは、ファイル入出力の用途別に用意されており、用途別に用意することで、目的のファイルを簡単に扱えます。たとえば、バイナリーであれば BinaryReader という感じです。『IronPython の世界』p. 220でも、IronPython を使っていると、どんどん MS に洗脳されていくなぁwIronPythonの世界MSDN ライブラリ2 System.IO ネームスペースMSDN ライブラリ2 System.IO ネームスペース (英語)そういえば、Yahoo! JAPANがSilverlight採用へ かぁ。結局、このあたり DRM の勝利って感じ。Gyao も SilverLightをすでに採用しているし。SilverLight が動く環境なら著作権付きの動画も見ることができるようになるわけで、まあ、単純な視聴者的な視点からは嬉しいことなんだけど。。。。。すでに Silverlight Developer Center - Yahoo! Developer Network なんてできてるのね。
2008.04.11
コメント(0)
『IronPython の世界』を読む (3) の続き。Part 4 .NET Framework のライブラリを使う p.210 のあたりを読む。.NET Framework のライブラリを使うときには、通常のモジュールのインポートと違って、あらかじめ参照を追加しなければならないのね。参照を追加しない状態で System.Xml としてもエラーになる。clr.AddReference で参照を追加すればインポートできるようになる。IronPython 1.1.1 (1.1.1) on .NET 2.0.50727.1433Copyright (c) Microsoft Corporation. All rights reserved.>>> import System>>> import System.XmlTraceback (most recent call last): File , line 0, in <stdin>##10 File , line 0, in __import__##4ImportError: No module named Xml>>> import clr>>> clr.AddReference("System.Xml")>>> import System.Xmlじゃあ、先日、自然言語処理関連のライブラリ SlothLib をちょこっと使う とか使えるかなぁとやってみる。野生の直感で適当にやる。やり方は正しいかよく分からないが、とりあえず、IronPython から使うことができた。IronPython 1.1.1 (1.1.1) on .NET 2.0.50727.1433Copyright (c) Microsoft Corporation. All rights reserved.>>> import clr>>> import sys>>>>>> SlothLibPath = "\\Pathto\\SlothLib">>> sys.path.append(SlothLibPath)>>>>>> clr.AddReference("SlothLib.Web.Search.Base.dll")>>> clr.AddReference("SlothLib.Web.Search.YahooJapanWebService.dll")>>> import SlothLib.Web.Search>>> yahoolib = SlothLib.Web.Search.YahooJpWebSearch>>> dir(yahoolib)['AdultOk', 'Country', 'DoSearch', 'Equals', 'Finalize', 'Format', 'GetHashCode', 'GetTotalNumber', 'GetType', 'Language', 'MakeDynamicType', 'MemberwiseClone', 'Proxy', 'Reduce', 'ReferenceEquals', 'SearchFormat', 'SearchType', 'SimilarOk', 'Site', 'ToString', 'Type', '__class__', '__doc__', '__init__', '__module__','__new__', '__reduce__', '__reduce_ex__', '__repr__']>>> yahoo = yahoolib("ApplicationID")>>> result = yahoo.DoSearch("Python", 10)>>> result.TotalResultsAvailable5840000L>>> result.ResultElementsSlothLib.Web.Search.YahooJpWebElement[](<SlothLib.Web.Search.YahooJpWebElement object at 0x000000000000002B [Title: Python Japan User's Group...]>, <SlothLib.Web.Search.YahooJpWebElement object at 0x000000000000002C [Title: Pythonの紹介...]>, <SlothLib.Web.Search.YahooJpWebElement object at 0x000000000000002D [Title: Python - Wikipedia...]>, <SlothLib.Web.Search.YahooJpWebElement object at 0x000000000000002E [Title: Python...]>, <SlothLib.Web.Search.YahooJpWebElement object at 0x000000000000002F [Title: Pythonとは?...]>, <SlothLib.Web.Search.YahooJpWebElement object at 0x0000000000000030 [Title: Python...]>, <SlothLib.Web.Search.YahooJpWebElement object at 0x0000000000000031 [Title: oreilly.co.jp -- Online Catalog ......]>, <SlothLib.Web.Search.YahooJpWebElement object at 0x0000000000000032 [Title: Pythonとは - 意味・解説 : IT用語辞典...]>, <SlothLib.Web.Search.YahooJpWebElement object at 0x0000000000000033 [Title: Python Corner...]>, <SlothLib.Web.Search.YahooJpWebElement object at 0x0000000000000034 [Title: 「Python」最新記事一覧 - ITmedia Keywords...]>)>>> for r in result.ResultElements:... print r.Title...Python Japan User's GroupPythonの紹介Python - WikipediaPythonPythonとは?Pythonoreilly.co.jp -- Online Catalog ...Pythonとは - 意味・解説 : IT用語辞典Python Corner「Python」最新記事一覧 - ITmedia KeywordsVisual Studio と C# を使わなくても、IronPython から使えるところが嬉しい。とりあえず、使えそうなので先に進むことにする。
2008.04.08
コメント(0)
『IronPython の世界』を読む (2) から続きを読む。Part 3 の後半部分。とりあえず、sys.path.append(CPythonのライブラリのパス) で CPython のライブラリは使えるようになるものの、じゃあ、全部動きますかといえば、当然、そんなことはない。.pyc (スクリプトをコンパイルしたキャッシュファイル)、 .pyd (C言語で作成されたライブラリ) は、仕様として使えないから動かないものがたくさんある。Pure Python で書かれているものにしても、すべてが動くとは限らないだろう。例えば、urllib.urlopen なども動かないらしい。Python 1.1.1 でも動かないか一応確認してみる。1.1.1 でも、まだ動いていない。IronPython 1.1.1 (1.1.1) on .NET 2.0.50727.1433Copyright (c) Microsoft Corporation. All rights reserved.>>> import sys>>> sys.path.append("\\python24\\lib")>>> import urllib>>> import urlparse>>> url="http://www.python.jp/pub/doc_jp/pdf-a4-2.4.zip">>> filename=urlparse.urlparse(url)[2].split("/")[-1]>>> filename'pdf-a4-2.4.zip'>>> urllib.urlretrieve(url, filename)Traceback (most recent call last): File System, line unknown, in Read File System, line unknown, in Receive File System, line unknown, in Receive File , line 0, in <stdin>##171 File E:\python24\lib\urllib.py, line 89, in urlretrieve File E:\python24\lib\urllib.py, line 248, in retrieve File , line 0, in Read##166 File System, line unknown, in ReadIOError: 転送接続からデータを読み取れません: 破棄されたオブジェクトにアクセスできません。オブジェクト名 'System.Net.Sockets.Socket' です。。>>> url="http://www.codeplex.com/IronPython/Project/ProjectRss.aspx">>> src=urllib.urlopen(url).read()Traceback (most recent call last): File System, line unknown, in Read File System, line unknown, in Receive File System, line unknown, in Receive File , line 0, in <stdin>##82 File , line 0, in Read##165 File System, line unknown, in ReadIOError: 転送接続からデータを読み取れません: 破棄されたオブジェクトにアクセスできません。オブジェクト名 'System.Net.Sockets.Socket' です。。FePy プロジェクト の IPCE (IronPython Community Edition) の方でもまだだめかな。こっちは、CPython との互換性を向上させようとしているらしいが、2007-10-15 に r7 まで出ている。p.161 からに書かれているように、socket.py を修正してやると、動くようになった。IronPython では、まだ doctest モジュールも使えないのね。その他、ざっと Part 3 は読み流して、Part 4 .NET Framework のライブラリを使用するに入る。>>> dir("")['__add__', '__class__', '__cmp__', '__contains__', '__doc__', '__eq__', '__getitem__', '__getnewargs__', '__getslice__', '__init__', '__len__', '__mod__', '__module__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__str__', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'islower', 'isnumeric', 'isspace', 'istitle', 'isunicode', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] clr をインポートすると、Python のデータ型から .NET Framework のデータ型が提供するメソッドが使えるようになる。なるほど、使えるメソッドがどっと増える。>>> import clr>>> dir("")['Add', 'Capitalize', 'Center', 'Clone', 'Compare', 'CompareOrdinal','CompareTo', 'Concat', 'Contains', 'Copy', 'CopyTo', 'Count', 'Decode', 'Empty','Encode', 'EndsWith', 'Equals', 'EqualsRetBool', 'ExpandTabs', 'Finalize', 'Find','Format', 'GetEnumerator', 'GetHashCode', 'GetLength', 'GetNewArgs', 'GetSlice','GetType', 'GetTypeCode', 'Index', 'IndexOf', 'IndexOfAny', 'Insert', 'Intern','IsAlnum', 'IsAlpha', 'IsDecimal', 'IsDigit', 'IsInterned', 'IsLower','IsNormalized', 'IsNullOrEmpty', 'IsNumeric', 'IsSpace', 'IsTitle', 'IsUnicode','IsUpper', 'Join', 'LJust', 'LStrip', 'LastIndexOf', 'LastIndexOfAny', 'Length','Lower', 'Make', 'MakeDynamicType', 'MemberwiseClone', 'Modulus', 'Multiply', 'Normalize', 'NotEquals', 'PadLeft', 'PadRight', 'RFind', 'RIndex', 'RJust', 'RSplit', 'RStrip', 'Reduce', 'ReferenceEquals', 'Remove', 'Replace', 'ReverseMultiply', 'Split', 'SplitLines', 'StartsWith', 'Strip', 'Substring', 'SwapCase', 'Title', 'ToCharArray', 'ToLower', 'ToLowerInvariant', 'ToString', 'ToUpper', 'ToUpperInvariant', 'Translate', 'Trim', 'TrimEnd', 'TrimStart', 'Upper', 'ZFill', '__add__', '__class__', '__cmp__', '__contains__', '__doc__', '__eq__', '__getitem__', '__getnewargs__', '__getslice__', '__init__', '__len__','__mod__', '__module__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__','__str__', 'capitalize', 'center','count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum','isalpha', 'isdecimal', 'isdigit', 'islower', 'isnumeric', 'isspace', 'istitle','isunicode', 'isupper', 'join', 'ljust','lower', 'lstrip', 'replace', 'rfind','rindex', 'rjust', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']>>> "".GetType().Fullname'System.String'>>> o = object()>>> type(o)<type 'object'>>>> o.GetType().FullName'System.Object'ふーむ、そういうことになっているのね。p.207 に dir 関数の結果が IronPython と CPython で違うことの記述がある。__delattr_, __getattribute__, __hash__, __setattr__, __str__ は CPython では出力されるが、IronPython では出力されない。しかし、__site__ は IronPython でだけ出力されるとかいったことも違っているのね。とりあえず、基本的なところはだいたい分かった。このあと、.NET Framework を使っていきましょうというところにどんどん入っていく。ここまで読んできて、この本、よくまとまっていると思う。IronPython を使うなら買って読んだ方が、よけいなところで躓かないで済むのでいい。この本は買って良かった。IronPythonの世界
2008.04.08
コメント(0)
『IronPython の世界』を読む (1) の続きで、Part 3 「CPython との互換性」のあたりを読む。p.104 の Memo に次のようにある。辞書の定義を行うときの入力方法にも CPython との違いがあります。CPython であれば、カンマ「,」のあとで改行し、ブロックプロンプトを使って複数行で入力できます。ですが、IronPython のインタラクティブシェルでは、複数行による定義を行うことができません。と書かれているのだが、>>> d = {'Iron':'Python',... 'C':'Python',... 'p':'Programming'}>>> d{'Iron': 'Python', 'C': 'Python', 'p': 'Programming'}みたいなことはできる。んー、ここでは何が言いたいのだろうか、よくわからない。IronPython はプロンプトで、__dict__ と打つとグローバルレベルでの __dict__ オブジェクトを利用でき、CPtyhon だと import sys; sys.modules[__name__].__dict__ とかある。これ以外にも、モジュールやクラスなどに対する「__dict__」の取り扱いが CPython と異なっています。とある。このあたり、ちょっと不都合なことが出てきそうなのではまりどころになるかもしれない。Python の文法チェックには何を使う? lint はないの? や python 用 lint、Pyflakes vs. pyChecker vs. pylint あたりのツールは意図したように動くのだろうか、要確認。そのうち調べる。データ型については p. 109 にまとめられているが、集合型 (set) が IronPython.Runtime.SetCollection として実装されていたり、文字列型 (str) が System.String として実装されていたりで、こうしたことから、微妙に振る舞いが違うこととかが出てくるということか。IronPython には sets モジュールは存在せず、組み込み型の set だけ使える。sets.Set が使いたければ、Pure Python だから CPython の使っちゃうかな。from sets import Set as set みたいなことをやっているものがけっこうあるから、set だけあってもだめだったりする。CPython>>> from sets import Set as set>>> dir(set)['__and__', '__as_immutable__', '__as_temporarily_immutable__', '__class__', '__cmp__', '__contains__', '__copy__', '__deepcopy__', '__delattr__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__iand__', '__init__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__slots__', '__str__', '__sub__', '__xor__', '_binary_sanity_check', _compute_hash', '_data', '_repr', '_update', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'union_update', 'update']IronPython>>> sys.path.append("\\Python24\\lib")>>> from sets import Set as set# 同じp. 130 に組み込みモジュールの違いがある。ガーベッジコレクション (gc) が .NET Framework の System.GC を使っているから互換性が低くなるとかは仕方あるまい。正規表現 (re) の互換性が低いのが痛いか。あとで要確認。.NET の System.Text.RegularExpressions で実装されているようだ。copy_reg というモジュールが、IronPython だけにある( clr とかもそうだけど、それは当然として)。copy_reg は Pickle やオブジェクトをコピーするためのツールのようだ。このあたり、あとで調べる。pickle や StringIO なんかも pure python のモジュールはないので、cXXX を使うことになる。まあ、これは速度的なメリットがあるから、それでもいいが、人の作ったモジュールを使うときには場合によっては書き換える必要が出てくるところかな。IronPython>>> import pickleTraceback (most recent call last): File , line 0, in <stdin>##14 File , line 0, in __import__##4ImportError: No module named pickle>>> import cPickle>>> import StringIOTraceback (most recent call last): File , line 0, in <stdin>##30 File , line 0, in __import__##4ImportError: No module named StringIO>>> import cStringIOCPython だけで提供される組み込みモジュール (p.132)は、_codecs_cn, _codecs_hk, _codecs_iso2022, _codecs_jp, _codecs_kr, _codecs_tw, _csv, _heapq, _hostshot, _multibytecodec, _subprocess, _symtable, _winreg, array, audioop, cmath, imageop, md5, msvcrt, nmap, parser, regx, rgbimg, select, sha, signal, strop, xxsubtype, zipimportcmath は、math があるからいいとして、md5 とか sha とか使えないと嫌だなとか思ったが、ちゃんと組み込まれているので、 import md5 も import sha も OK。array 使えないとダメじゃんと思ったが、import array は OK。csv とか使えないのは痛い。「regx」は「regex」の typo か?まあ、使っていないし、Deprecated なモジュールだから問題なし。parser はんぐっ。msvcrt や _winreg は、.NET でやれって感じか。time モジュールは、ctime の振る舞いが違う。IronPython は Windows の時刻書式に指定された文字列を返すのか。ふーん。tzname も、IronPython が文字列を返しているのに対して、CPython はタプルを返している。こういうレベルで微妙にはまるところが、あれこれあるのかなぁ。IronPython>>> import time>>>print time.ctime()土 4 05 19:47:19 2008>>> time.tznameu'\u6771\u4eac (\u6a19\u6e96\u6642)'>>> print time.tzname東京 (標準時)CPython>>> import time>>> print time.ctime()'Sat Apr 05 19:47:37 2008'>>> time.tzname('\x93\x8c\x8b\x9e (\x95W\x8f\x80\x8e\x9e)', '\x93\x8c\x8b\x9e (\x95W\x8f\x80\x8e\x9e)')>>> print time.tzname('\x93\x8c\x8b\x9e (\x95W\x8f\x80\x8e\x9e)', '\x93\x8c\x8b\x9e (\x95W\x8f\x80\x8e\x9e)')>>> t= time.tzname>>> for a in t:... print a...東京 (標準時)東京 (標準時)os モジュールもないのは、ちょっと CPython のスクリプトを再利用するときに痛い。nt モジュールはあるから、>>> import osTraceback (most recent call last): File , line 0, in <stdin>##98 File , line 0, in __import__##4ImportError: No module named os>>> import nt as os>>> dir(os)['O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_NOWAIT', 'P_NOWAITO', 'P_WAIT', '__builtins__', '__class__','__dict__', '__doc__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '_exit', 'abort', 'chdir', 'chmod', 'close', 'environ', 'error', 'fdopen', 'fstat', 'getcwd', 'getcwdu', 'getpid', 'listdir', 'lstat', 'mkdir', 'open', 'popen', 'popen2', 'popen3', 'putenv', 'read', 'remove', 'rename', 'rmdir', 'spawnl', 'spawnle', 'spawnv', 'spawnve', 'startfile', 'stat', 'stat_result', 'tempnam', 'times', 'tmpfile', 'tmpnam', 'unlink', 'unsetenv', 'urandom', 'utime', 'waitpid', 'write']>>> os.pathTraceback (most recent call last): File , line 0, in <stdin>##105AttributeError: 'module' object has no attribute 'path'としても、path 関連はない。.NET のクラスライブラリを使いなさいってことか。ん-っ。p.143 には次のようにある。.NET Framework は異機種OSを前提にした CLI に基づいているため、異機種のパス表現などを取得数ためのクラスライブラリが用意されています。これらのライブラリを使うことで、異なる OS の CLI とプログラムを共通化できます。でも、実際のところ既存のものを流用するときには痛い。math モジュールの定数や数学関数は、IronPython より CPython の方が精度が高いようだ。確認してみると、pi の精度からして違っている。使う人によっては注意が必要か。IronPython>>> math.pi3.14159265359CPython>>> import math>>> math.pi3.1415926535897931そういえば、Shift-JIS であっても、バイト文字列が丸ごとユニコード文字列になっているのが困ったちゃん。>>> s = "日本語どうですか。".encode("shift-jis")>>> unicode(s)Traceback (most recent call last): File , line 0, in <stdin>##56 File mscorlib, line unknown, in GetString File mscorlib, line unknown, in GetString File mscorlib, line unknown, in CreateStringFromEncoding File mscorlib, line unknown, in GetCharCount File mscorlib, line unknown, in InternalFallback File mscorlib, line unknown, in Fallback File mscorlib, line unknown, in ThrowUnicodeDecodeError: インデックス 0 にあるバイト [93] を指定されたコード ページから Unicode へ変換できません。Shift-JIS が丸ごとユニコード文字列になっている場合は、decode してやればユニコード文字列になるのね。>>> s0 = "日本語どうです。">>> s0u'\u65e5\u672c\u8a9e\u3069\u3046\u3067\u3059\u3002'>>> s1 = s0.encode("shift-jis")s1'\x93\xfa\x96{\x8c\xea\x82\xc7\x82\xa4\x82\xc5\x82\xb7\x81B'>>> s2 = s1.decode(s1)>>> s2u'\u65e5\u672c\u8a9e\u3069\u3046\u3067\u3059\u3002'バイナリモードで、Shift-JIS の文字が入っている test.txt を開いた場合の例が、 p.129 に載っていた。バイナリモードで開くと、Shift-JIS のまま読み込まれるけれど、でもやっぱり丸ごとユニコード文字列になっているので、デコードしてユニコードにしてあげますと。なるほど。f=open("test.txt" ,"rb")for line in f: wk = line.decode("shift-jis")f.close()とりあえず、part 3の半分ぐらいまで (p.146) まで読み終えた。
2008.04.05
コメント(0)
『IronPython の世界』が積ん読になっていたので、なんとなく、読書記録とともにメモを残しておく。『IronPython の世界』は次の6章の構成。Part1, 2 が Python 入門。Part3 が IronPython と CPython の関係。Part 4, 5 が .NET Framework 関連。Part 6 が IronPython の拡張やデバグなど。「IronPython と Visual Studio 2005 との統合」などは Appendix にある。読まないうちに Visual Studio 2008 の時代になってしまったwIronPython とはIronPython を動かしてみるCPython との互換性.NET Framework のライブラリを使用するIronPythonで DB&Webプログラミングもっと IronPython を使いこなすためにとりあえず、Part 1, 2 を流し読みした。インタラクティブシェル(ipy.exe) のコマンドラインオプションは、CPython とは違うものがいろいろあるのね。-XAssembliesDir (出力するアセンブリの保存ディレクトリの指定)等、-X は ipython に固有のもので、一度に覚えきれないぐらいオプションがある。-X:MTA はマルチスレッドでの実行のオプションのようだが、付けないとシングルスレッドでの実行ということになるのかな。後の方に関連の説明が出てくるかな。IronPython 1.1.1 をとりあえずダウロードして、いくつか試してみる。IronPython 1.1.1 (1.1.1) on .NET 2.0.50727.832Copyright (c) Microsoft Corporation. All rights reserved.>>> import sys>>> sys.platform'cli'>>> sys.version'2.4.0 (IronPython 1.1.1 (1.1.1) on .NET 2.0.50727.832)'sys.platform は、Windows で CPython だと 'win32'、Solaris なら 'sunos5'、Linux だと 'linux2' 等だが、IronPython は 'cli' を返す。ちなみに、Part 1, 2 には書いてないが、ふと試してみると platform モジュールは IronPython にはないのね。>>> import platformTraceback (most recent call last): File , line 0, in <stdin>##13 File , line 0, in __import__##4ImportError: No module named platformなので、下のようなことはできない。詳しくは platform -- Access to underlying platform's identifying data のあたり参照。Linux だと、platform.dist() でディストリビューションのチェックとかもできる。>>> import platform>>> platform.version()'Generic_127112-01'>>> platform.machine()'i86pc'>>> platform.processor()'i386'>>> platform.uname()('SunOS', 'foo', '5.10', 'Generic_127112-01', 'i86pc', 'i386')あるいは、>>> platform.uname()('Windows', 'bar', 'XP', '5.1.2600', '', '')>>> platform.architecture()('32bit', 'WindowsPE')>>> platform.win32_ver()('XP', '5.1.2600', 'SP2', 'Uniprocessor Free')エンコーディングに関して、"mbcs" は使えないのね。>>> a= u"日本語">>> print a日本語>>> a.encode("mbcs")Traceback (most recent call last): File , line 0, in <stdin>##16 File , line 0, in Encode##18LookupError: unknown encoding: mbcsShift_JIS だと嫌なときあるんだけど、んー。'cp932' にすればいいのか。>>> a=u"日本語">>> a.encode("cp932")'\x93\xfa\x96{\x8c\xea'>>> a.encode("shift_jis")'\x93\xfa\x96{\x8c\xea'IronPython には codecs モジュールがないらしい。エンコード関連、ちょっと同じつもりでいるとはまる。codecs.getreader なんてのはないから、codecs.open("hoge.txt", "r", "utf-8") みたいのはできない。.NET の StreamReader 使えとかいう話は Part 4 か。StreamReader("hoge.txt", Encoding.GetEncoding("utf-8")) とか、そういう世界か。ちなみに、日本語文字列コード問題まとめ: ShiftJISの問題: Unicodeマップの相違 の例にある文字列を試してみる。まず CPython で次のようになる。>>> unicode("~∥-¢£¬", "cp932")u'\uff5e\u2225\uff0d\uffe0\uffe1\uffe2'>>> unicode("~∥-¢£¬", "shift_jis")u'\u301c\u2016\u2212\xa2\xa3\xac'ところが、IronPython だと、>>> unicode("~∥-¢£¬", "cp932")Traceback (most recent call last): File , line 0, in <stdin>##21 File , line 0, in Make##19UnicodeEncodeError: 'ascii' codec can't decode byte 0 in position 0: ordinal not in range>>> unicode("~∥-¢£¬", "shift_jis")Traceback (most recent call last): File , line 0, in <stdin>##17 File , line 0, in Make##19UnicodeEncodeError: 'ascii' codec can't decode byte 0 in position 0: ordinal not in rangeなんでかなぁ。でもって、IronPython で>>> u1 = u'\uff5e\u2225\uff0d\uffe0\uffe1\uffe2'>>> u2 = u'\u301c\u2016\u2212\xa2\xa3\xac'>>> print u1~∥-¢£¬>>> print u2???¢£¬>>> u2.encode("shift_jis")Traceback (most recent call last): File , line 0, in <stdin>##88 File , line 0, in Encode##41 File mscorlib, line unknown, in GetBytes File mscorlib, line unknown, in GetBytes File mscorlib, line unknown, in GetByteCount File mscorlib, line unknown, in GetByteCount File mscorlib, line unknown, in InternalFallback File mscorlib, line unknown, in FallbackUnicodeEncodeError: インデックス 0 にある Unicode 文字 \u301C を指定されたコード ページに変換できません。>>> a = u"~∥-¢£¬">>> au'\uff5e\u2225\uff0d\uffe0\uffe1\uffe2'>>> a.encode('cp932')u'\x81`\x81a\x81|\x81\x91\x81\x92\x81\xca'>>> a.encode('shift_jis')u'\x81`\x81a\x81|\x81\x91\x81\x92\x81\xca'あぎゃぎゃ。なぜに u がついてんのさ。バイト文字列がまとめてユニコードに変換されてんの。そもそも、IronPython の shift_jis って cp932 なのかな。それにしても、>>> a="テスト">>> au'\u30c6\u30b9\u30c8'になる。文字列は全部ユニコードになっちゃうというのはあれだな。CPython なら、>>> a = "テスト">>> a'\x83e\x83X\x83g'となる。Shift_JIS のファイルを開いても IronPython だと、ユニコード文字列に変換されている。>>> data = file("a.txt").read()>>> datau'\uff5e\u2225\uff0d\uffe0\uffe1\uffe2\n'んー。んー。文字列は全部ユニコード。unicode("日本語", "shift_jis") とかコマンドラインからやっても、"日本語" の部分がすでにユニコードになっちゃっているから、エラーになるということか。だから、>>> "日本語".encode("shift_jis")u'\x93\xfa\x96{\x8c\xea'となる。CPython の挙動は、次のようなもの。>>> a="日本語">>> type(a)<type 'str'>>>> u = unicode(a)>>> uu'\u65e5\u672c\u8a9e'>>> type(u)<type 'unicode'>IronPython だとすべてユニコード文字列になっている割には、type が str なのはなぜだ!!>>> a="日本語">>> au'\u65e5\u672c\u8a9e'>>> type(a)<type 'str'>もっとすばらしいのが、>>> data=file("b.txt", mode='rb').read()>>> datau'\x8d\xa1\x93\xfa\x82\xcc\x93V\x8bC\x82\xcd\x90\xb0\x82\xea\x82\xc5\x82\xb7\x81B\r\n'>>> print data?!?u?I?V?C?I?°?e?A?・?Bバイナリモードで読み込んでも、丸ごとユニコードになっちゃってどうしようもない。とりあえず、入出力は .NET フレームワークをきちんと使わないとダメってことか。何かのエンコーディングを指定して書き出したいときには、StreamWriter を使ってエンコードを変換したものを書き出す、読み込みは StreamReader で、とかいう世界か。うーん、入出力と文字列の扱いは、ちと気をつけないと、いかんというところまで分かった。IronPython を使うときは、.NET の世界を理解しなきゃ有効に使えない。というか、.NET 関係ねぇだったら使う必要もないか。単純に高速な Python として安易に使うというのはダメっぽい。とりあえず、先を読み進めることにする。
2008.04.03
コメント(0)
Silverlight 2、ダイナミック言語のサポートを追加:スペシャル を読む。Microsoft関係者は、開発者がさまざまなブラウザ(Firerfox、Safari、Internet Explorer)やプラットフォーム(Linux、Mac OSX、Windows)で動作している好きな言語を使ってSilverlight 2のアプリケーションを作成できることを保証したいと述べた。Solaris がないぞーというのはさておき、IronPython をそのうち使ってみようかなと思う理由に、この Silverlight 2 の存在がある。そのうちチャレンジしてみたい。DSLにはランタイムとソフトウェア開発キットコンポーネントJohn Lam on Software: Dynamic Silverlight Part 1: Hello, World!Sun の Python 取り込みに期待する
2008.03.13
コメント(0)
CodeZine:C#とIronPythonで変化に強いWindowsアプリケーションを作る(入門, チュートリアル) を読む。IronPython は本も買ってあるのだけど、結局、ちらちら、ネット上の記事とかで見る程度でまた使っていない。これを機会に少し使ってみようかなぁ。何を考えているかと言えば、自然言語処理関連のライブラリ SlothLib を IronPython から使ったらどうかということ。でも、Windows だけでなく Unix 系でも動かないと後々嫌だなというのがあるので、Mono ってどうなのだろうと、少し試し始める。Screenshots とか、MoonlightShots 見てみると、自分の作るものならこの程度のことができていれば問題ない。ドキュメントは Mono Documentation Library にある。まず、Sparc マシン上で動くかどうか試す。Download Mono から、Mono 1.2.4_4 Package をダウンロードしてインストール。Solaris 8 用のものなのだが、Solaris 10 でも一応動くような感じ。ちなみに、Mono 1.2.6 Sources が現時点での最新版だが、コンパイル・インストールがとりあえず面倒だと思ったので、若干古いバージョンのバイナリで我慢する。FAQ を見るとCan I use this package on Solaris 10 Sparc?Most likely, yes, but this has not been tested much. Expect to see a Solaris 10 package in the future.Can I use this package on Solaris 10 x86?No, but expect to see a Solaris 10 x86 package in the future. ということで、現状 Solaris 10 Sparc ではだいたい動くようなのだが、Solaris x86 は公式にはまだ駄目なようだ。けれども、 あれこれ参考資料をもとにそのうちやってみる。優先順位的に言えば、Linux 版が優先されるだろうから、Linux 上で動かすかなぁとかいうのもあるが、とりあえずは Solaris 版にしておく。そのうち自分でコンパイルしてみるか。Mono:Solaris[Mono-list] Compile mono in solarisHow to build Mono on SolarisSolaris 10 x86 and Monoちなみに VMware プラットフォームを選ぶと、SUSE 10.3 ベースの Linux に Mono 1.2.6 がインストールされたものが使える。環境作りでめげるのもなんだし、これもありだな。やっぱり Novell が主体でやっているからか、SUSE が優先されている感じね。パッケージとしては Red Hat もちゃんと対応しているけど、VMware のパッケージは SUSE だけ。とりあえず、Sparc 版の Solaris にインストールしてみる。$ gunzip mono-1.2.4_4.sunos8.novell.sparc.pkg.gz$ su# pkgadd -d mono-1.2.4_4.sunos8.novell.sparc.pkg# /opt/mono/setup.shWhat is Mono を読む。Mono のコンポーネントは C# 1.0 と 2.0 対応のコンパイラーである C# Compiler、ECMA Common Language Infrastructure (CLI) の実行環境の Mono Runtime、Base Class Library (Microsoft .Net Framework 互換)、Mono Class Library (Gtk+, Zip files, LDAP, OpenGL, Cairo, POSIX, 等の Linux 環境を主とした拡張でクラスのサンプルも含む)ということらしい。CSharp Compiler を見ると、mcs が .NET 1.1 ランタイム用のコンパイラ、gmcs が 2.0 ランタイム用のコンパイラ、.NET smcs が .NET 2.1 ランタイム用のコンパイラ(Linux 用の Silverlight の Moonlight アプリケーション) ということらしい。余談だが IKVM.NET なんてプロジェクトがあるのね。Java と Microsoft .NET は排他的に使うのが普通の考えだけれど、.NET 環境の中に Java Virtual Machine (JVM) を実装しちゃう。.NET と Java を混在して使えるというのがおもしろい。とりあえず基本から。Mono Basics を見て、日本語も使えるかの確認。using System; public class HelloWorld{ static public void Main () { Console.WriteLine ("Hello Mono World"); Console.WriteLine ("日本語でもこんにちは"); } }で、hello.cs を作って、「mcs hello.cs」を実行すると、hello.exe ができるので、実行してみる。$ export PATH=/opt/mono/bin:$PATH$ mcs hello.cs$ mono hello.exe Hello Mono World日本語でもこんにちは。コンパイラは 1.1 用の mcs でも、2.0 用の gmcs でも試してみたが、どちらもちゃんとコンパイルできた。単純なものならたぶん問題なく動くのだろう。Gtk# を使ったものではどうだろうと試してみる。環境がよろしくないせいかエラーで実行できないので環境を作り直す方向にする。mono がちゃんと動くようになったら IronPython であがくより、FePy の方が楽なのかな。とりあえず、環境を整えるのは時間もかかりそうなので、Windows 上で SlothLib を使うところから始めるかな。
2008.02.27
コメント(0)
CPython用拡張モジュールをIronPythonから呼び出す を読む。IronPython を使おう使おうと思いつつもまだ使っていない。こうすれば既存の CPython 用の拡張モジュールが使えるから、機能的には躊躇なく使えるようになるか。問題はパフォーマンスで、普通に Pure Python で何か作れば IronPython の方が CPython より速いとかあるだろうから、CPython 用拡張モジュールを使って、遅くならなければスピードの点でメリットが出るか。でも、時間がかかるものとか Solarisのマシンで動かしているから、mono を使えないとソースを共有できないしとかあって、結局、使うの止めたになってしまう。Mono Now Supports IronPython とか、随分前に、そういう状態になっているようだから、試してみようとは思うが優先順位かなり下。
2008.02.16
コメント(0)
IPython 0.8.2 が 11月30日にリリースされていた。New features in 0.8.2 を見ると、一段と便利になったようなのでアップグレードした。履歴(%hist) に -g オプションが付いて、「%hist -g foo」とすると、履歴から grep で foo した結果を返してくれる、履歴の検索機能が付いた。「%rep ls」としておけば、履歴表示(%hist)したときに、ls が含まれる履歴は表示されないようにできる、履歴表示の抑止機能が付いた。macro で引数を取れるようになった。とかいうのからもっと便利なものまでたくさん機能アップされている。IPython Cookbook を見ると、へぇとか思う。String list processing とか AWK like に使えて便利。たとえば、line.field(1) みたいなことができる。別に split して云々してもいいのだけど、タイプ量が減る。UsingIPipe なんかも、便利。例えばfrom ipipe import *iwalk | ifilter("_.endswith('.pyc')") | idump# あるいはlines = !lslines.grep("\.pyc$")とかすると、.pyc で終わっているファイルを一覧表示してくれたりとか、あれこれできる。これは使いこなすと、かなり強力。時間がかかる処理とかだったらバックグラウンドで動かせばいい。Running a file in the background%bg _ip.magic('run -i foo.py')alias なんかも、設定ファイルに書き込まないで StoringAliasesのように、%store を使って覚えさせちゃえばコマンドラインから設定したものが再起動してもちゃんと残る。IPython を使っている人は、IPython Cookbook を見ると幸せになれる。IBM developerWorks に新しい記事が出ていた。Using Net-SNMP and IPython。ちなみに、IPython をインタラクティブに使っているとき doctest がこけちゃって困るのは、%doctest_mode で OK なのね。IPython FAQ を見ると、In [6]: iphook = sys.displayhookIn [7]: sys.displayhook = sys.__displayhook__In [8]: doctest.testmod(dtest)とやって、戻すときには、In [9]: sys.displayhook = iphookとあるけれど、%doctest_mode がトグルスイッチになっているから(実行するごとにモードが変わる)、これを使った方が楽ね。
2007.12.17
コメント(0)
IronPython Studio 登場 経由で、IronPython Studio がリリースされているのを知る。ちなみにこの方の 実践Python errata のページは Google 八分されているらしい。「# None ふぁ返される」は私も読んでいるときに笑ってしまった。実践Python
2007.12.13
コメント(0)
IronPython開発入門 - @IT が始まったようだ。最初の回は何も知らない人向け。今後、どのレベルまで書かれていくのか不明だが、とりあえず期待しておく。
2007.09.10
コメント(0)
IronPython Cookbook なるものがあった。Interacting with Excel のように当然 Excel とかを操作できる。CPython (普通の Python) で win32com を使ってもできる。Excel を使わずに Excel のデータを扱うときは Python から Excel データを操作できる pyExcelerator なるもの。とりあえず、使っていないのでリンクメモだけ。
2007.08.15
コメント(0)
全22件 (22件中 1-22件目)
1