NPOIを使ってみた

JAVAのPOIが移植されたNPOIというものがあるということを、下記のブログで知った。

C#やVBでExcelを出力するために、POIの.NET版が無いか探してみたら、NPOIというものを見つけたので試してみます!!

NPOI入門してみた – かずきのBlog@Hatena

そこで、早速使ってみたので、気をつける必要がある点だけ記述すると、安易にCreateCellStyleやCreateFontやCreateDataFormatをしていると、上限にすぐ達してしまい例外が発行されるので(5000個くらい?)全く同じものは再利用しましょうという事くらい。

ExcelCreator等に比べてもファイルの作成速度が著しく劣るという事もなく、実用できるレベルだと思う。

リファレンスとしては、上記ブログの記事中にあったJAVAのPOIについて記述されているページが役に立った。

FacebookTwitterHatenaTumblr共有

WCFで構築したRESTなサービスのレスポンスをJQueryで解釈する

前回のWCFでRESTなサービスを例にあげて、レスポンスをJQueryで解釈してみたいと思います。

レスポンスからエレメントID=UserListなSelectタグの選択肢として展開するサンプルです。

レスポンスは以下のようなxmlを想定しています。

<ArrayOfUser xmlns="http://schemas.datacontract.org/2004/07/sample" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<User>
<Id>0001</Id>
<Name>テスト太郎</Name>
</User>
<User>
<Id>0002</Id>
<Name>テスト花子</Name>
</User>
</ArrayOfUser>

例によってコメントで説明します。

function ユーザリスト設定()
{
$.get(
"/sample/Service1.svc/User/",
{},
function(data){
var value = "";
//レスポンスの解釈をしているのはこの部分だけです。
//レスポンスとして帰ってきたdataの中の
//Userというタグをfindで検索し、
//見つかったら都度each内に定義してある無名関数を実行しています。
//無名関数の中では、それぞれUserタグの中にあるIdとNameという要素を検索し、
//それぞれの要素に定義されている値を利用してselectタグに設定するoption要素を生成しています。
result = $(data).find("User").each(function(){
value += "<option value='"+ $(this).find("Id").text()  +  "'>" + $(this).find("Name").text() + "</option>";
});
//Selectタグに生成したoption要素を設定。
$("#UserList").html(value);
});
}

このようにJQueryを利用して比較的簡単にXMLとして返ってきたレスポンスを解釈して展開することが可能だという事がわかります。

WCFでのRESTをざっくりとメモ

とりあえず、web.configのendpointBehaviorsの中に<webHttp />なbehaviorを作る。

作成するサービスのendopointのbehaviorを上で作った奴にする。

サービスのinterfece内でOperation Contractに相当するメソッドにWebGet属性を付ける。

UriTemplateに対応するUriを設定。

{}で囲った部分が、引き数としてわたってくる。

{hoge=ほにゃほにゃ}とした場合、実際のリクエストでその部分が省略されると「ほにゃほにゃ」が引数でわたってくる。

例:

[OperationContract]
[WebGet(UriTemplate = "User/{id=allusers}/")]
User[] GetUsers(string id);

あとはinterfaceを実装。

このステップでとりあえずできる。

カテゴリー: .NET

UriTemplateについて

Web 開発者は、サービスの応答先となる URI の形状とレイアウトを記述できる必要があります。Windows Communication Foundation (WCF) では、開発者が URI を制御するための 2 つの新しいクラスが追加されています。UriTemplate と UriTemplateTable は、WCF における URI ベースのディスパッチ エンジンの基盤となります。これらのクラスは単独で使用することもできるため、開発者は WCF サービスを実装せずにテンプレートと URI マッピング機構を利用できます。

UriTemplate と UriTemplateTable

利用するのでメモ。

パスを省略したい場合は{name=デフォルト値}で良い事が分かった。

カテゴリー: .NET

メモ:REST および WCF サービスの概要

今回は、REST (Representational State Transfer) と呼ばれるアーキテクチャ スタイルを使用した WCF (Windows Communication Foundation) の構築について説明するコラム シリーズの第 1 回です。2009 年はこの「サービス ステーション」コラムで説明する REST の年と言えるようになるかもしれません。その機は十分に熟しています。REST は、2000 年の発売以来、長年高い評価を受けているスタイルです。

この第 1 回のコラムでは、REST の基本概念および WCF を使用した RESTful サービスの実装について説明します。次回以降のコラムでは、REST の基本概念およびその基本テクノロジについてさらに詳細に説明します。

REST および WCF サービスの概要

使うのでメモ。

カテゴリー: .NET

Yahoo!の形態素解析APIを利用してケブンリッジ ジェレネータを作ってみた

XMLElement等の使い方がいまいちわからなかったので、汚いソースコードになってしまったが、Yahoo!の形態素解析APIを利用してケブンリッジ ジェネレータを作ってみた。

ケンブリッジ ジェネレータともいう。

Yahoo!の日本語形態素解析については↓

http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html

あなたのアプリケーションIDの場所を取得したアプリケーションIDに置き換えれば、使えます。

先頭と末尾を維持したままスペルをランダムに変えるメソッドを呼ぶだけでよいです。

取り急ぎ。

XElementの使い方が分かったので書き直し。

private string  単語ランダム化(string 変換前単語)
{
//なんで、三桁までの単語は何もしないのかって、三文字じゃ順番を変えようがないからだ。
if (変換前単語.Length <= 3)
{
return 変換前単語;
}
string 変換後単語 = 変換前単語;
変換後単語 = "";
var キャラクタリスト = 変換前単語.ToCharArray(1, 変換前単語.Length - 2).ToList();
変換後単語 = 変換前単語.Substring(0, 1);
var ランダム番号生成オブジェクト = new Random();
while (キャラクタリスト.Count() >= 1)
{
var 対象Index = ランダム番号生成オブジェクト.Next(キャラクタリスト.Count());
変換後単語 += キャラクタリスト[対象Index];
キャラクタリスト.RemoveAt(対象Index);
}
変換後単語 += 変換前単語.Substring(変換前単語.Length - 1);
return 変換後単語;
}
private List<string> 形態素解析の結果(string value)
{
string requestUrl =
string.Format("http://jlp.yahooapis.jp/MAService/V1/parse?appid=あなたのアプリケーションID&results=ma&sentence={0}",
System.Web.HttpUtility.UrlEncode(value));
byte[] responseData = null;
using (System.Net.WebClient client = new System.Net.WebClient())
{
responseData = client.DownloadData(requestUrl);
}
List<string> result = new List<string>();
XElement Root = XElement.Parse(System.Text.Encoding.UTF8.GetString(responseData), LoadOptions.None);
IEnumerable<System.Xml.Linq.XElement> elements = Root.Descendants(Root.Name.Namespace + "reading");
foreach (XElement element in elements)
{
result.Add(element.Value);
}
return result;
}
public string 先頭と末尾を維持したままスペルをランダムに変える(string 変更前)
{
var 単語リスト = 形態素解析の結果(変更前);
StringBuilder 変更後 = new StringBuilder();
foreach (var 単語 in 単語リスト)
{
変更後.AppendFormat("{0} ", 単語ランダム化(単語));
}
return 変更後.ToString();
}

サンプル画像

f:id:NAL-6295:20090514121409p:image

カテゴリー: .NET

いまさらながら設定ファイルに型付データセットを利用すると超簡単になること

・設定ファイルのデザインが楽

データセットのデザイナを利用してデザインできるので超簡単。

・インテリセンスに項目が出てくるから楽

型付されているので、バグを埋め込む事もないし、インテリセンスにも出てくるし超簡単。

・ファイルの読み書きが楽

型付データセットのReadXML,WriteXMLメソッドを利用するだけなので超簡単。

いちいちXMLを解釈する必要も無い。

・設定ファイルが無い場合の実装も楽

プログラムの中で型付データセットのインスタンスを生成して各メンバに値を設定してあげるだけなので超簡単。

いちいち、設定ファイルが無いときの実装を一から考えなくても良い。

・設定ファイルを作成するツールを実装するのも楽

独自の設定ファイルだといちいち、そのための読み書きを自分でサポートしてあげる必要があるけど、型付データセットなら「ファイルの読み書きが楽」に書いたようにメソッドが用意されているので、超簡単。

読んだらDataGridにでもバインドさせて、その後書いてあげればいい。

まぁ、ずいぶん前にも似たようなエントリを書いているし今更だけど。

カテゴリー: .NET

DIの使いどころ

DIは便利だと思って使っているところ。

(実際には、DIという言葉を知る前だったので意識してはいなかったけど。)

・バッチのジョブ呼び出し部分

・Webページのロジック呼び出し部分

・IO自動化ツールの項目単位に変わるロジックの呼び出し部分

実装自体も、特定のDIコンテナを利用しなくても、

・型付DataSetを利用した設定ファイルを用意して、

・Interface等のルールを設定して、

・呼び出し部分を実装しておく

だけで良い。

プログラマには、個々のロジックの実装だけしてもらって後は設定ファイルに登録してもらうだけなので、テストも管理も楽です。

カテゴリー: .NET

auの携帯に.NET Frameworkが乗る

KDDIは、法人ユーザー向けに「.NET Framework」と互換性があるアプリケーションプラットフォーム「.net by au」(ドットネット・バイ・エーユー)を2009年春より提供する。マイクロソフトのWebサービスプラットフォーム「.NET」向けに開発された業務アプリが携帯電話上で利用できるようになる。

auケータイで「.NET」が使える法人向けサービス

これは、ちょっと凄いかも。

でも、パフォーマンスが心配。

カテゴリー: .NET