Main | Java »

2006年10月12日

C#でRSS

暇だったもんで、ネットの記事見ながらC#でRSS読み込むサンプル作ったりしてました。

これ

つってもへっぽこプログラマの俺用ライブラリなので中身はひどいもんですが。

やってることはXPathで適当にタグパースしてるだけ。
仕様の準拠とか全然考慮してないです。
いちおーRSS1.0、RSS2.0、ATOM0.3が読めるっぽい。

ちょっくら飽きてきたんでこれ以上の作り込みはしないかなー。
さて、次は何を作ろっか。

ちなみに、ちゃんとしたの探してる人は↓なんかどうでしょうか。

RSS.NET: An open-source .NET class library for RSS feeds
http://www.rssdotnet.com/

NRss - A .NET Framework / Mono C# class library for reading RSS feeds
http://nrss.sourceforge.net/

Atom.NET
http://atomnet.sourceforge.net/

Posted by Akishin at 12:39 午前
Categories: .NET
|

2006年08月11日

ほんー

プログラミング Microsoft ASP.NET 2.0
Microsoft Visual Studio 2005によるWebアプリケーション構築技法

仕事でいよいよ.NET Framework 2.0 を使うことになりそうなので、急遽本屋へ。
ここ最近買った本の中では割と高めかな。
会社で買ってもいいって言われたけど、コレクターとしてはやっぱ自腹で買って自宅の本棚に並べないとね。
何かあっても手元に残るし。

内容はどちらも入門書、って感じではないけど、仕事で使うならやっぱこーゆーのじゃないとね。
この厚さと重さが安心感なのよ。
読むのはダルいけど。

で、明日は夏期休暇を1日使って実家へ。
日曜までちょこっと猫たちの顔見てきます。
みんな元気かな~?

Posted by Akishin at 12:10 午前
Categories: .NET, 技術書
|

2006年07月03日

AntのCSCタスクで「埋め込まれたリソース」を指定するには

NHibernateではhbm.xmlファイルを「埋め込まれたリソース」としてdllに埋め込む方法が推奨されているみたいですが、Antのcscタスクで指定する方法について書いてあるところが見つからずに困る。

で、結局いろいろ試した結果、<csc>タグの子要素として<resource>タグをembed属性を"true"にして書いてやればいいという事が判明。

こんな感じ。

    <csc
        optimize="true"
        debug="false"
        warnLevel="4"
        failOnError="false"
        targetType="library"
        references="log4net.dll;NHibernate.dll;Nullables.dll;Nullables.NHibernate.dll;Oracle.DataAccess.dll;"
        srcDir="."
        includes="**/*.cs"
        destFile="example.dll"
    >
        <resource file="foo.hbm.xml" embed="true" />
        <resource file="bar.hbm.xml" embed="true" />
        <resource file="hoge.hbm.xml" embed="true" />
        <resource file="fuga.hbm.xml" embed="true" />
    </csc>

まぁ.NETなんで、NAntの方を使えばもっと簡単にやり方見つかったのかも知れませんが・・・。

Posted by Akishin at 1:13 午前
Edited on: 2006年07月03日 1:16 午前
Categories: .NET
|

2006年06月18日

Javaから.NETに移植されてるライブラリとか2

昨日はC#へのJakarta Commonsの移植版とかはなさそう、って書いたんですが、C#には移植されてなくてもJ#に移植されてるんですね。

J by J#
http://www.ujihara.jp/jbyjsharp/index.html

う~ん・・・。
探し方もうちょっと考えるべきだったな。

こちらのサイトでは結構いろいろ移植されてますが、CommonsからはCLICollectionsLangLoggingが移植されてるみたいです。
特にCollectionsとLangはJavaでもよく使うので、.NETで使えるようになるのは嬉しすぎ。
.NETなので、C#とかからも使えるはずだし。

ただ、残念な事に.NET Framework 2.0 以降じゃないと動作しないんですよねー。
1.1版とかどっかにないのかな~?

あと、Javaとの互換って事でいろいろ見て回ってたら、こんなものもありました。

IKVM.NET
http://www.ikvm.net/index.html

.NET上で動作するJVMだそうです。
こっちならネイティブなJavaコード動かせるのかな~?
ちょろっと試してみたい。

Posted by Akishin at 10:32 午前
Categories: .NET, Java
|

2006年06月17日

Javaから.NETに移植されてるライブラリとか

暇だったからJavaから.NETに移植されてるライブラリとか調べてみた。
こうやって並べると意外と結構あるなー。

Java .NET
Velocity NVelocity
Log4j Log4net
JUnit NUnit
Ant NAnt
Struts NStruts
Spring Spring.NET
S2Container S2Container.NET
Hibernate NHibernate
iBATIS iBATIS.NET
S2Dao S2Dao.NET
iText iText.NET
Maverick Maverick.NET
java.util jCollections
javax.naming jNaming
Jakarta ORO ORO.NET
Jakarta Regexp Regexp.NET
Xalan-Java Xalan.NET
Xerces-J Xerces.NET

個人的にはJakarta Commons辺りの軽量ライブラリがガンガンC#に移植されると嬉しいんだけど、ないみたいですね。
誰か作ってくれないかなー。

Posted by Akishin at 12:48 午後
Categories: .NET, Java
|

2006年06月15日

C#でFTP

.NETだとJavaのJakarta Commonsみたいのがないから、FTPどうしよっかな~、と思ってちょこっと調べたのでメモ。

FTP client library for C# - The Code Project
http://www.codeproject.com/cs/internet/ftplibrary.asp

[HOWTO] Visual C# .NET を使用して、マネージ クラスで FTP をサポートするプラグ可能なプロトコルを記述する方法
http://support.microsoft.com/default.aspx?scid=kb;ja;812409

.NET用FTPクラスライブラリ (TKFP.DLL)
http://uwa.potetihouse.com/soft/tkfpdll.html

あとここにもいくつかあった。

GotDotNet User Samples
http://www.gotdotnet.com/community/usersamples/Default.aspx?query=ftp&Sites=(www.GotDotNet.com)

この辺いろいろと見てやれば割と楽に実装できそうだ。
でもCommonsみたいな定番のライブラリ集とかあれば本当はそっち使いたいんだけどなー。

Posted by Akishin at 2:10 午前
Categories: .NET
|

2006年05月04日

NHibernateでMyGenerationその2

MyGenerationでNHibernateのテンプレートを使うと、OracleのDate型がDateTime構造体になってしまいます。
構造体であるDateTimeにnullは代入できないので、そのままだとDate型のカラムにNullを入れる事ができません。
まぁNullを表す値を入れて論理的なNull状態を作ればいいんでしょうが、Java版Hibernateに慣れてる身からするとちょっと気持ち悪いですよね。

で、この問題を解決するためにはNHibernateのドキュメントの「Chapter 11. Nullables」に載っている NullableDateTime クラスを使用するようです。

せっかくMyGenerationを使っているのに、毎回生成されたクラスやマッピングファイルを修正するのはメンドいので、テンプレートファイルの方を修正してしまいます。
が、修正したテンプレートファイルで実行すると、NullableDateTime 型が解決できないとかで例外発生。

確かに言われてみればVisualStudio.NETでやってるみたいな、参照設定の追加とかやってなかったですね。
MyGenerationの設定にはアセンブリの参照設定を追加するところとかは無いみたいだし、どうしよう・・・。

と思ってたら、単にGAC(Global Assembly Cache)に登録してやればいいという事に気付きました。
エクスプローラのアドレスバーに「%systemroot%\assembly」を入力して開いて、そこに「Nullables.dll」をドロップ。

たったこれだけで先程修正したテンプレートファイルが動作するようになりました。
めでたしめでたし。


テンプレートファイルのカスタマイズってやってみると意外と簡単でいいですね。
これなら大した手間かからずに自分の環境に適切なファイル吐くようにできそう。
ほんと、これっていいツールですねー。

Posted by Akishin at 1:11 午前
Categories: .NET, ソフトウェア
|

2006年05月03日

NHibernateでMyGeneration

Nhibernateでマッピングファイルと永続化クラスを自動生成したくて、『MyGeneration』を試してみました。
MyGenerationは.NET用のソースコード自動生成ツールです。
テンプレートを指定することにより、NHibernateだけでなくかなりいろいろなソースコードを生成可能というすぐれもの。

今回使用したテンプレートは、 公式のTemplateLibraryにあった「NHibernate Object Mapping 1.1 By Romulo」というテンプレートです。

MyGenerationの使い方は以下のサイトを参考にさせて頂きました。
GUIだし使うだけなら難しいことは何も無いんですが、英語が苦手なダメグラマとしては、日本語の解説がありがたいところ。

Spring.NET JP - MyGenerationを利用してクラス、マップファイルを生成
http://spring-net.jp/modules/bwiki/index.php?MyGeneration%A4%F2%CD%F8%CD%D1%A4%B7%A4%C6%A5%AF%A5%E9%A5%B9%A1%A2%A5%DE%A5%C3%A5%D7%A5%D5%A5%A1%A5%A4%A5%EB%A4%F2%C0%B8%C0%AE#content_1_1

よしぶろっ-NHibernateのマッピングファイルとクラスファイルをもっと簡単に生成できるツールを発見
http://blog.livedoor.jp/aeropuertu/../archives/24865537.html

対象DBは Oracle9i Release 9.0.1.1.1 。
普段はODP.NETから接続しているのですが、どうやらMyGenerationではODP.NETの接続文字列が指定できないようだったので、仕方なくOraOLEDB(MyGenerationの「Connection String」でOracleを選択した際のデフォルト)を使用しました。

と、ここで、生成されるソースコードやマッピングファイルのメンバがほぼ全て「Unknown」になってしまうという問題が発生。
う~ん・・・なんでだろう?
検索してもほとんどなんにも出てこないし、どうしたものか・・・と思ってたら、どうやら設定を間違えていた模様。

このテンプレートファイルでは、Database Target MappingのDbTargetのところを、「DbType」にしておかないとうまくいかないようです。
「Oracleなんだから当然OracleClientでしょ!」と自信満々でOracleClientを選択していたのがそもそも間違っていたみたいですね。orz

というわけで、「DbType」を選択したらあっさり解決しました。
テンプレートを修正すれば「OracleClient」でもイケるのかもしれませんが。

自動生成されたファイルを見てみると、主キーの生成戦略が 「assigned」だったり、Date型カラムのマッピングがDateTime構造体だったり(構造体なのでnullが入れられない)と、自分好みにするには若干修正が必要だったりしますが、こういった細かいところもテンプレートファイルを1回修正してしまえば、後は毎回同じルールで生成できるようになるので楽チンです。
まぁそれには自分でテンプレート直さなきゃいけないんですけど。

MyGenerationを使えば、JavaでMiddlegen使うのと同じような開発スタイルが取れそうで嬉しいですね。
これでNHibernate導入の敷居もかなり下がったかも。

Posted by Akishin at 1:51 午前
Categories: .NET, ソフトウェア
|

2006年04月29日

NStruts

NHibernateNAntNUnitNVelocitySpring.NETときて、Strutsの.NET版は??と思ってたら、やっぱりありましたよーNStruts

ただ今のバージョンは1.0.2 とのこと。
日付見るとそれなりには更新されてるっぽいです。

まだ全然見てないけど、Strutsでの開発スタイルがそのまま適用できるような作りだと結構嬉しいかも。
JavaでStruts、って感じの人がASP.NET入りやすくなりそうだしね。

これも暇見てサンプル見たり書いたりしてみよー。

Posted by Akishin at 12:33 午前
Categories: .NET
|

2006年04月28日

.NETでFilterって

IHttpModuleあたり使えばいいのかなぁ?
Global.asaxでも同じ事出来そうだけど、どっちがスタンダードなのかよくわかんない。

NHibernate使ってるから、OpenSessionInViewパターンを使うのにどうすりゃいいの?ってだけなんだけど。
Spring.NETはまだNHibernate対応してないみたいだし、ググってもキーワードが悪いのか、そのものズバリは見つからないし、どうしたもんかなぁ・・・。

まぁ、実際に試してみろ、って話なんだろうけどね。
偉い人が「こうやれ!」って言ってるのが見たいんですよねーヘタレな俺としては。
さて、どうしたもんかなー。

@IT:.NET TIPS [ASP.NET]アプリケーション共通のロギングを行うには?(Global.asax編)
http://www.atmarkit.co.jp/fdotnet/dotnettips/127asplogasx/asplogasx.html

@IT:.NET TIPS [ASP.NET]アプリケーション共通のロギングを行うには?(HTTPモジュール編)
http://www.atmarkit.co.jp/fdotnet/dotnettips/130asploghttp/asploghttp.html

ASP.NET シングルコントローラアプリケーションモデリング(1)
http://www.ailight.jp/blog/kazuk/archive/2005/11/11/10063.aspx

Posted by Akishin at 12:59 午前
Categories: .NET
|

2006年01月19日

NHibernate

NHibernateを使ってみました。
iBatis.NETに比べると設定ファイルの記述量が少なくて楽チンでいい感じです。
残念ながらJava版に比べると日本語の情報が少ないのは、Spring.NETやiBatis.NETと同じですね。
でもまぁ基本的にJavaのドキュメントも十分参考に出来るんで、そこら辺は問題ないかな。
この前買った「Hibernate イン アクション」読みながら、しばらく遊んでみよっと。

とりあえず、ちょこっとわかった気がした事をメモ。

ODP.NET使ってOracleに接続するには 「NHibernate.Driver.OracleDataClientDriver」を指定すればいいみたい。

あと「Hibernate イン アクション」読んでて、JavaのThreadLocalみたいなのって.NETだとどうやんのかな?っと思ってたら、「スレッドローカルストレージ」って仕組みがあるみたいだ。
C#ならstaticなフィールドに[ThreadStatic]属性書くだけでいいらしい。
多分これを変わりに使えばいいんだよね?

Serializableもクラスに[Serializable] 属性つけるだけだし、属性って楽でいいなー。
Javaにアノテーションが導入された理由が分かった気がする。
なんて、Javaのアノテーションまだほとんど使った事ないけど。

つーかNHibernate云々より、.NETやC#について知らない事が多すぎるんだよなぁ。 基本からしっかり勉強しないとだめだなこりゃ。

本当は今夜もうちょっと触ってみたかったけど、今日は仕事中からずっと頭痛いし喉痛いし鼻水ダラダラ出てくるんで、もう大人しく寝る事にします。
なんだか今年は年が明けてからこっち、ずっとついてねー気がすんなぁ・・・・・。
呪い?

参考サイト:

hibernate.org - NHibernate for .NET
http://www.hibernate.org/343.html

NHibernate Documentation 1.0.1.0
http://nhibernate.sourceforge.net/nh-docs/html/

Spring.NET JP - B-Wiki - NHibernate
http://spring-net.jp/modules/bwiki/index.php?NHibernate

CodeZine:NHibernateを利用してSQLを書かずにデータベースにアクセスする方法
http://codezine.jp/a/article.aspx?aid=156

@IT:特集:ASP.NETで実践するO-Rマッピング(NHibernate編)
http://www.atmarkit.co.jp/fdotnet/special/ormap01/ormap01_01.html

Posted by Akishin at 12:23 午前
Categories: .NET
|

2006年01月04日

iBATIS.NETの調査

iBATIS.NETについてなんか情報ないかなーっと思ってググってみたけど、やっぱり日本語の情報ってあんまないですね。
Javaの方ならそれなりにあるんだけど、.NETになるとblogでもほとんど書いてる人がいないみたい。
使い方もそれほど複雑ではないっぽいし、それ程書く事もない、って事なのかな?

公式のドキュメントとかFAQとかが結構充実してるみたいなので、いざとなったらいつものようにExcite翻訳様のお力をお借りする事でなんとかなるといいな、って感じです。
やっぱりプログラマにとって英語力は必須ですよねー。
勉強しないとなぁ。ハァ。

関係ないけど、検索してたら「CodeZine傑作選(仮)」なんてのの広告募集のPDFがひっかかっりました。
コレコレ
CodeZineの記事は面白いので結構読んでるんですが、紙媒体派の自分にとっては本になってくれるのは嬉しい限りです。
このファイルによると2006年2月13日 発売予定で980円(税抜)みたいですね。
早く出ないかなー。

Posted by Akishin at 2:04 午前
Categories: .NET
|

2005年12月29日

iBATIS.NET

iBATIS.NETをS2Container.NETと連携させたいと思ったんだがなんだか難しそうな予感。
JavaならSpringでもSeasarでも連携用のライブラリとかあるようだけど、.netだとどっちもまだ無いのかな?
う~む・・・。

まぁiBATIS自体Javaでも使った事が無いので、もしかしたら簡単にConnectionの管理を外側で出来たりするのかも知れない。

なんでConnection管理にこだわるかというと、S2Container.NETのローカルトランザクション機能を使いたいからです。
公式によれば、

>ローカルトランザクションを利用するためには、Seasar.Extension.Tx.Impl.TxDataSourceからコネクションを取得します。

との事なので、ここから取得したConnectionをiBATIS側で使用出来ればイケるんじゃないかな、と・・・。
まぁあくまでほとんど触ってない現状での予想に過ぎないんですが。

取りあえずソースコード見ると IBatisNet.Common.ProviderクラスがConnectionの生成担当っぽい。

IBatisNet.Common.DataSourceにPublicなProviderプロパティがあるみたいだし、Provider継承してそこら辺修正して設定するだけでイケたりしないかな~??

駄目だったら ProviderDeSerializer.Deserialize()メソッドをS2AOP.NETでInterceptor作ってProvider継承クラスを返すようにするとか?
なんて考えたけど、S2AOP.NETはコンポーネントをインターフェース型で受け取るか、またはSystem.MarshalByRefObjectの派生クラスじゃないと駄目らしい。

うーむ。
JavaのSpringやS2SqlMapのソースコードでも読めばなんか参考になるかなぁ。


取りあえずはサンプル何個か作りながら研究するかー。
ググりまくってみれば実はもう既に誰かがなんとかしてくれてるかも知れないし。

そういえば、「iBATIS」って何て読むのかずぅっと謎だったんですが、探したら公式サイトにちゃんと書いてありました。

http://ibatis.apache.org/background.html

↑ここの一番下、「How do you pronounce iBATIS?」ってとこ。

>We pronounce it: eye-BAT-iss

だそうです。
アイバティス?

連携の方は前途多難っぽいですが、とりあえず一つスッキリしたような気になりました。

参考サイト:

iBATIS 公式
http://ibatis.apache.org/

Codezine:iBATIS.NETにてO/Rマッピングを行う(SQL Maps編)
http://codezine.jp/a/article.aspx?aid=112

Codezine:iBATIS.NETにてO/Rマッピングを行う(DAO Framework編)
http://codezine.jp/a/article.aspx?aid=113

@IT:ASP.NETで実践するO/Rマッピング(iBATIS.NET編)
http://www.atmarkit.co.jp/fdotnet/special/ormap02/ormap02_01.html

Posted by Akishin at 1:32 午前
Categories: .NET
|

2005年12月28日

S2Container.NET

.NET(1.1)でのトランザクション処理を簡単にしたくて、Codezineの記事を参考にS2Container.NETを使ってみたがハマる。
まぁ公式のドキュメントしっかり読んでなかったのがいけないんだけれども。

とりあえず、トランザクション制御もAOPなんで、公式ドキュメントのAOPの注意点を忘れないように気をつけましょう。

以下公式サイトより。

>アスペクトを適用するためにはコンポーネントをインターフェース型で受け取ります。

>S2Containerから直接受け取るコンポーネントにアスペクトを適用するには、 コンポーネントがSystem.MarshalByRefObjectの派生クラスである必要があります。

>pointcut属性を指定しない場合、pointcut属性に".*"と指定した場合は、 実装しているインターフェースのすべてのメソッドが対象になります。

>thisポインタ経由の場合(インターフェース経由で呼ばれない場合)はアスペクトは適用されません。

恥ずかしながら気付かないでかなりハマりました。
情けない・・・。
もっとがんばろー。

S2Container.NET
http://s2container.net.seasar.org/

CodeZine:S2Container.NETのDIとAOPを活用し生産性の高いシステムを構築する
http://codezine.jp/a/article.aspx?aid=180

Posted by Akishin at 1:52 午前
Categories: .NET
|