So-net無料ブログ作成

Mono 4.2 をインストール [DotNET]

ずっと昔の Ubuntu に apt-get で Mono2.4 をインストールした頃の記録
http://nakagami.blog.so-net.ne.jp/2009-06-30

この頃 Firebird の ADO.NET のドライバーのDLLをダウンロードしてきて
mono 上の IronPython から動かそうとしてた。
バイナリーでダウンロードした DLL と IronPython で Windows Forms が Mono で動いて、「Mono すげー」と思った記憶。

今回、その ADO.NET のドライバー自体をコンパイルできないかと思い立った。
https://github.com/cincuranet/FirebirdSql.Data.FirebirdClient

なんでも、いまは MS の C# は 6.0 というバージョンだそうで、 Ubuntu 14.04 に apt-get で入れられるものは C# のバージョン古くてコンパイルできない(っぽい)

Ubuntu 14.04 に最新の tarball からインストールしてみる

$ wget http://download.mono-project.com/sources/mono/mono-4.2.0.179.tar.bz2
$ tar -xvf mono-4.2.0.179.tar.bz2
$ cd mono--4.2.0
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
を実行して /usr/local/ にインストール
$ xbuild /version
XBuild Engine Version 12.0
Mono, Version 4.2.0.0
Copyright (C) 2005-2013 Various Mono authors

$ cd FirebirdSql.Data.FirebirdClient/NETProvider/src/FirebirdSql.Data.FirebirdClient
$ xbuild  FirebirdSql.Data.FirebirdClient.csproj
でsrc/FirebirdSql.Data.FirebirdClient/bin/Debug/FirebirdSql.Data.FirebirdClient.dll
ができて、ちょっと試した感じでは、普通に動くっぽい。Mono すごい.

Mac だと
http://www.mono-project.com/download/#download-mac
なぜだか 「Mono Preview package for El Capitan (OS X 10.11)」と書いてあるほうが Mono 4.2.0.179 のインストールパッケージらしく、ダウンロードしてインストールすると Yosemite (OS X 10.10)で普通に動く

Mono の C# コンパイラは mcs という名前らしい
http://atsushieno.hatenablog.com/entry/2014/12/11/000240

.NET Framework 3.5 SP1 をインストールしてしまった [DotNET]

最近 Firebird .NET Provider Version 2.5.0 Beta 1 for .NET 3.5/2.0 がリリースされた
http://www.firebirdnews.org/?p=2295
http://www.firebirdsql.org/index.php?op=files&id=netprovider
インストールして、これ↓を動かそうとしてみた。
http://nakagami.blog.so-net.ne.jp/2008-12-13

・・・動かない。こんな↓メッセージが出る。

IOError: ファイルまたはアセンブリ 'System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。

エラーメッセージの意味はさっぱりわからないが、これまた最近リリースされた .NET Framework 3.5 SP1 を入れてみる。
・・・動いた。ビルドしたときの環境かな? 2.0 の環境でビルドすれば 2.0 の環境で動くバイナリが出来そうな気がする。Entity Framework をサポートとか書いてあるのでダメかな。
.NET Provider 2.5.0 の最終リリースの時にどうなるかわからんが、とりあえず .NET Framework 3.5 SP1 で動いてるから、このままの環境でいいや。

IronPython 2.0 RC1 [DotNET]

ここのところ、DLR をいろいろな言語から使う関係で、ネームスペースの整理をしてたみたいだけど、 Python 的には機能は完成していたので、早く正式リリースされないかなぁ・・・と思っていた。
ついに Release Candidate 1 がリリースされた。長かった。
http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=17404
今回から、DRL を使ったおもちゃのスクリプト言語 ToyScript がリリースの中に含まれるみたい。もうネームスペースは変わらないよ、という意思の表れにも思える。
http://nakagami.blog.so-net.ne.jp/2008-08-12
この↑時には例外を吐いていたが、RC1 では SP1 でない .NET 2.0 の環境で動かそうとすると、コンソールに
IronPython requires .NET 2.0 SP1 or later to run.
と出るようになって、少し親切な感じ。

syslog データを受け取って Windows の EVENT ログとして保存 [DotNET]

IronPython 2.0 beta4 以降で、↓を実行する。
http://www005.upp.so-net.ne.jp/nakagami/Download/sysevlog.py
syslog の送り先として↑を実行している Windows を指定すると、syslog データがイベントログに記録されるはず。

udp パケットを受け取る例として、イベントログにデータを書き込む例として、さらしておく。
サービスとして登録するといいんだろうけど、IronPython のスクリプトをどうやってサービスに登録すれば良いか知らない。

IronPython 2.0 Beta 4 で例外 [DotNET]

数日前の話だけど IronPython 2.0 Beta 4 が出た。
今回は、zip アーカイブのバイナリだけじゃなくて、msi 形式のインストーラー版がある。
そして、今回は Python Standard Library が含まれてる。
せっかくなので、msi でインストールしてみた。

ライセンスの確認のところで、IronPython のライセンスと、 Python Standard Library のライセンスが併記されてた。なるほど、ライセンスが違うからライブラリは含めたくなかったのね。Beta 4 でライブラリが何処まで動くかわからないけど使う側にとってはこれは大きな進展だなぁ。

インストーラーでインストールしても、環境変数 PATH に追加されなかったので、手作業で PATH を追加した。ここらへんは、この先変わるのかな。拡張子との関連付けとか。

さて、動かすか・・・と IronPytnon Console (ipy.exe) を起動してみたら
Unhandled exception
と言われて、Microsoft に報告しますか?のダイアログが出る。
全然動かない。

そのうち誰かが何とかしてくれるかと思って放置しておいたが、ブログを観察していても誰も同じようなトラブルに会った人がいない。
仕方がないので、一昨日あたり、解決すべく Release Notes を見直したら
.Net Framework 2.0 SP1 が必要と書いてある。
SP1 ? そんなのあるのか。うちのノートPCは SP1 じゃないぞ。
日本語版の OS だけ、まだ自動更新の対象になってないらしい。
http://www.microsoft.com/japan/msdn/netframework/downloads/20_30_sp1.aspx

ということで .Net Framework SP1 を入れたら無事起動するようになった。

NTFS の ACL をプログラムで読み取る [DotNET]

XCACLS.vbs や cacls.exe ↓で、NTFS の ACL を人間が読める形にはできる
http://nakagami.blog.so-net.ne.jp/2008-04-24
コマンドライン引数をファイルに出力することで、プログラム的に設定することもできなくはない。

ただ、読み取る方はコマンドライン出力をパースするのは無理があるので、なんとかプログラム的に読み取ることはできないかなぁ、と思って引き続き調べてたら .Net Framework ではできるみたい。
http://www.microsoft.com/japan/msdn/netframework/skillup/core/article3.aspx
ということで、↑で C# と VB でやってるのと同じことをする IronPython のコード
# -*- coding: cp932 -*-
import clr
from System.IO import *
from System.Security import *

di = DirectoryInfo(u'c:\\')
ds = di.GetAccessControl()
for ar in ds.GetAccessRules(True, True, Principal.NTAccount):
    print ar.IdentityReference.Value + ':' + str(ar.FileSystemRights)


IronPython で、ファイル・ディレクトリ情報を再帰的に取得 [DotNET]

http://www.atmarkit.co.jp/fdotnet/dotnettips/053allfiles/allfiles.html を参考にした
# -*- coding: cp932 -*-
import clr
from System.IO import *

def dirwalk(di, dir_func, file_func):
    for d in di.GetDirectories():
	if dir_func:
      	    dir_func(d)
	dirwalk(d, dir_func, file_func)
    for f in di.GetFiles():
	if file_func:
            file_func(f)

if __name__ == '__main__':
    def print_dir(di):
        print di.FullName

    def print_file(fi):
        print fi.FullName

    base_dir = u'c:\\'
    di = DirectoryInfo(base_dir)
    dirwalk(di, print_dir, print_file)

IronPython A7 [DotNET]

IronPython の Alpha7 というのがリリースされてる。
どこが変わってるかよくわからんけど、 IronPython console を起動したときに A6 までは

IronPython console: IronPython 2.0A6 (2.0.11102.00) on .NET 2.0.50727.832
Copyright (c) Microsoft Corporation. All rights reserved.
>>>


となっていたものが

IronPython console: 2.0
Copyright (c) Microsoft Corporation. All rights reserved.
>>>


と、あっさりした表示に変わってる。
そろそろβ→リリース?

(追記)This is the last release to be built and fully tested with Visual Studio 2005 だそうです
http://ironpython-urls.blogspot.com/2007/12/ironpython-20-alpha-7-released.html


IronPython の socket.recvfrom() の不具合 [DotNET]

IronPython で UDP のサーバーを書いてみた。
リモートホストの IP を表示したいんだが、 socket.recvfrom() を使うと、(1.1 でも 2.0 A6 でも)いつも 0.0.0.0 になる。
ソースを探してみたら、該当個所は Src/IronPython.Modules/socket.cs にすぐ見つかった。
どこがおかしいかも、すぐわかった。
えぇー、誰も報告してないの?と思って Issue Tracker を探したら、該当するものがあった。
無視されてる・・・しかも、ちょっとソースの修正が違うような・・・
http://www.codeplex.com/IronPython/WorkItem/View.aspx?WorkItemId=5814
仕方ないので、CodePlex にアカウント作って Vote しておいた。
#コメントする必要はないので、みなさん Vote しておくれ

ちなみに、FePy のソースを見たら、そっちのはちゃんと動いてそう。(実装がまったく別)
http://fepy.svn.sourceforge.net/viewvc/fepy/trunk/lib/socket.py?revision=358&view=markup

OSS に何か貢献したい!と思ってる人は、地雷を踏みそうなものを使って、地雷を踏んでみるといい、と思った出来事であった。


IronPython2.0 A6 [DotNET]

特にウォッチしているわけじゃないですが、たまたま見たら IronPython 2.0 A6 というのがリリースされてました。
http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=IronPython&ReleaseId=7663
全部 Fixed と Closed になっちゃったので、そろそろ beta とか、RC とかになるの?

今回、一番大きく変わったのライセンスのようで、IronPytnon も OSS の仲間入りだそうです。
http://blogs.msdn.com/shozoa/archive/2007/10/17/dlr-ms-pl-ms-cl.aspx

機能的に変わった所と言えば、
improved support of COM events under the –X:PreferComDispatch flag
だそうですが、どう良くなったのか、わかりません。だれか教えてください。
とりあえず、引き続きこんな↓感じで使えています。
http://d.hatena.ne.jp/Wacky/20070910