Loading [MathJax]/extensions/tex2jax.js

2013-10-31

C#:UIコンポーネントの作成(既存UIコンポーネントを継承する)

C#(.NET系言語)では、UIコンポーネントは使うだけでなく作ることも可能です。今回は、一番簡単な既存UIコンポーネントを継承する場合の話です。

既存のUIコンポーネントをちょっとだけカスタマイズしたり、使いやすくするためにラップしたい場合は、UIコンポーネントを継承するのが効果的です。その方法ですが、まさにそのままで、
クラスを新規に作成し、(カスタマイズしたい)UIコンポーネントのクラスを継承する
だけでOKです。作成した後、ソリューションをコンパイルすれば、ツールボックスにUIコンポーネントとしてクラスが追加されていると思います。プロパティを追記すれば、プロパティウィンドウにも表示されます。

2013-10-22

C#: Amazon S3を操作する(put,get,delete,list)

AmazonのストレージサービスであるAmazon S3に対するオブジェクト(ファイル)の基本操作についてです。いろいろオプション設定する項目はあるようです。

登録(put)
string endpoint = "s3.amazonaws.com";
AmazonS3Config config = new AmazonS3Config { ServiceURL = endpoint };
AmazonS3 s3=AWSClientFactory.CreateAmazonS3Client(config);
TransferUtility transferUtility = new TransferUtility(s3);
TransferUtilityUploadRequest request = new TransferUtilityUploadRequest()
.WithBucketName("XXXXXXXXXXX")//バケットの指定
.WithKey("p1.png") //S3上でのオブジェクトの名前
.WithFilePath("C:\\temp\\" + "1.png");//アップするファイルの場所と名前
transferUtility.Upload(request);
Debug.WriteLine("Upload Complete");
view raw s3ObjectPut.cs hosted with ❤ by GitHub
検索(get)
string endpoint = "s3.amazonaws.com";
AmazonS3Config config = new AmazonS3Config { ServiceURL = endpoint };
AmazonS3 s3 = AWSClientFactory.CreateAmazonS3Client(config);
TransferUtility transferUtility = new TransferUtility(s3);
TransferUtilityDownloadRequest request = new TransferUtilityDownloadRequest()
.WithBucketName("XXXXXXXXXXXX")//バケットの指定
.WithKey("p1.png") //S3上でのオブジェクトの名前
.WithFilePath("C:\\temp\\" + "new1.png");//ダウンロードしたファイルを保存する場所と名前
transferUtility.Download(request);
view raw s3ObjectGet.cs hosted with ❤ by GitHub
削除(delete)
string endpoint = "s3.amazonaws.com";
AmazonS3Config config = new AmazonS3Config { ServiceURL = endpoint };
AmazonS3 s3 = AWSClientFactory.CreateAmazonS3Client(config);
DeleteObjectRequest request = new Amazon.S3.Model.DeleteObjectRequest()
.WithBucketName("XXXXXXXXXXXXXX")
.WithKey("p1.png");
s3.DeleteObject(request);
リスト(list)
string endpoint = "s3.amazonaws.com";
AmazonS3Config config = new AmazonS3Config { ServiceURL = endpoint };
AmazonS3 s3=AWSClientFactory.CreateAmazonS3Client(config);
var listObjectRequest = new ListObjectsRequest();
listObjectRequest.BucketName = "XXXXXXXXX";
var response = s3.ListObjects(listObjectRequest);
foreach (var item in response.S3Objects) {
Debug.WriteLine("Object Name: " + item.Key);
}
view raw s3ListObject.cs hosted with ❤ by GitHub


2013-10-18

GAE:文字化けが起きないようにするための設定

サーバーをGAEにして楽天WebサービスからJSONでデータをとってきたところ文字化けが発生。
文字化け問題はJavaでプログラムを組んでいればよくある話であるが、今回厄介だったのは、
  • ローカル環境なら文字化けをしないのに、本番環境で稼働すると文字化けを起こす
という点。本番で動かすまで全く気づかず、試しにデプロイしたらURLクラスでとってきたJSONデータだけ文字化けを起こしていたという。。。日本語が全て文字化けをするわけではないので、URLクラスの処理の部分で日本語をうまく扱えてないんだろう。。。と推測。

で、対処法ですが、GAE自体が扱う文字コードをUTF-8であると明示的に設定する必要があり、下記の通り、文字コードを指定することで解決。ローカル環境だと気づかないので、もう基本的にこの記述を書くようにした方がいいですね。

<system-properties>
<property name="file.encoding" value="UTF-8"/>
<property name="DEFAULT_ENCODING" value="UTF-8"/>
</system-properties>


C#:App.configファイルがないときの対処法

ない場合。。。。。作って下さい。それだけです。とりあえずウィザードはあります。

1.プロジェクトの上で右クリック!




2.アプリケーション構成ファイルを選択して下さい。










2013-10-07

AWS ExploreでSimpleDBを操作する

おちラボではSimpleDBをラボの研究用データベースの1つとして利用していますが、SimpleDBはAWS Management Consoleで操作ができないなど、後発のDynamoDBよりも冷遇されている感じで、管理がやりにくい雰囲気があります。しかし、SDKに付随しているAWS Exploreを利用するといろいろできます(Eclipse、Visual Studio等)。下記は、Eclipseの例です。

ドメインの作成、削除
AWS Exploerを開くとドメインの一覧が出てきます。ここで右クリックすれば、ドメインの作成・削除ができます。



アイテムの操作
ドメインをクリックするとドメインの中身が見れます。クエリーを入力することで検索することもできます。Excelみたいに直接値を修正することもできます。



2013-10-06

GWT: 楽天トラベルの検索結果(JSON)をParseするサンプル

GWTで楽天トラベルの検索結果(JSON)をParseするサンプルです。APIへのアクセスはサーバー側で行っていて、GWT-RPCでJSONデータを受け取ったという前提です。

JSONObject jsObj;
JSONValue jsonValue =JSONParser.parseLenient(result);
jsObj = jsonValue.isObject();
jsObj= jsObj.get("Body").isObject();
jsObj= jsObj.get("SimpleHotelSearch").isObject();
JSONArray jsonArray= jsObj.get("hotel").isArray();
int num = jsonArray.size();
for(int i=0;i<num;i++){
jsObj=jsonArray.get(i).isObject();
JSONObject hotelObject = jsObj.get("hotelBasicInfo").isObject();
System.out.println(hotelObject.get("hotelName").isString());
System.out.println(hotelObject.get("hotelThumbnailUrl").isString());
System.out.println(hotelObject.get("hotelInformationUrl").isString());
}


GWT: 楽天市場APIの検索結果(JSON)をParseするサンプル

GWTで楽天市場の検索結果(JSON)をParseするサンプルです。APIへのアクセスはサーバー側で行っていて、GWT-RPCでJSONデータを受け取ったという前提です。
JSONObject jsObj;
//JSONValue jsonValue = JSONParser.parse(result); //非推奨
JSONValue jsonValue =JSONParser.parseLenient(result); //こちらを使いましょう
jsObj = jsonValue.isObject();
JSONArray jsonArray= jsObj.get("Items").isArray();//商品リストはItems
int num = jsonArray.size();
for(int i=0;i<num;i++){
jsObj=jsonArray.get(i).isObject();
JSONObject itemObject = jsObj.get("Item").isObject();//Itemが1商品に相当
//以下、itemの中身を取り出しています
System.out.println(itemObject.get("itemName").isString());
System.out.println(itemObject.get("itemPrice").isNumber());
System.out.println(itemObject.get("itemUrl").isString());
//画像はArrayに入っている
JSONArray imageArray =itemObject.get("smallImageUrls").isArray();
System.out.println(imageArray.get(0).isObject().get("imageUrl").isString());
}




GWT:HTTPリクエストパラメータのためのエンコーディング処理

GWTで他サイトのAPIを利用する時に、サーバーサイドでHTTPアクセスをする場合があると思います。その際、日本語の文字列がリクエストに含まれている場合は、URLエンコーディングをする必要があります。そのエンコーディングは、GWTのメソッドを使うと簡単に行えます。
String encStr = com.google.gwt.http.client.URL.encode("もみじまんじゅう");
サーバに送る前にクライアント側で事前に変換しておきましょう。


2013-10-02

C#:対象のフレームワークに注意

C#のプロジェクトにおいて
「.NET Framework 4 Client Profile」 (".NETFramework,Version=v4.0,Profile=Client") となっているため、 XXXXXXXXを参照することができません。
というエラーが出る時があります。これは、利用する(参照する)クラスライブラリとプロジェクトの対象としているフレームワークにズレがあることが多いです。C#では様々な環境で動くようにライブラリが用意されていますが、デフォルトでは、
  • .NET Framework 4 Client Profile
というようにWindowsのデスクトップ環境で動くことを前提としたプロファイルが選択されています。これはサブセットですので、
  • .NET Framework 4
を選ぶ(フルセットを選ぶ)ことで、問題は解決するはずです。