goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

はてなダイアリーはブログ界の「モテない男性」?

2007-08-10 18:23:57 | Weblog

ここのブログ
はてなダイアリーが女子ウケしない理由
http://d.hatena.ne.jp/Banyou/20070730/1185792662

に、はてなダイアリーが女子ウケしない理由というのが、
延々とかかれていて、

最後に
(以下斜体は上記ブログより引用)

今後はやはり女子ウケを狙っていかないと、はてなダイアリーはブログ界の「モテない男性」になっていってしまうのではないだろうか。


ってあるんだけど、

「はてなダイアリー」って、
ブログ界の「モテない男性」を狙ってるんだと思ってた(^^;)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JavaにおけるBase64変換

2007-08-10 15:50:38 | JavaとWeb

 JavaでBase64変換を行おうと思ったとき、(JavaMailとか、他のものでもできるのかもしれないけれど)ApacheのCommonsのcodecを使うと、ちょー簡単そうにみえたので、つかってみました(実際、ちょーかんたんだけど、注意点がある)




■ありかとインストール

そのありかは、ここ
Codec Home
http://commons.apache.org/codec/index.html


ここのはじにDownloadっていうのがあるので、そこからダウンロード。1.3のzipを落としてきました。

で、そいつを解凍して、commons-codec-1.3.jarを、パスに通します
(eclipseなら、そいつを使いたいプロジェクトをして右クリックしてPropertiesを選択、ダイアログを出したら、Java Build PathのLibrariesタブのAddExternal Jarsボタンをクリックしてcommons-codec-1.3.jarを選ぶ。ごめん、ウィリアムのいたずらのeclipseは、英語のまま使っているので、日本語用の人は、適宜読み替えてくださいませ)

 JavaDocは、ここにあって、今回は、Base64クラスをつかいます。




■Base64から普通のファイルに(=デコード)

 Base64から普通のファイルになおす、デコード処理は、

byte[] outdata = Base64.decodeBase64(indata);

でOK。この引数indataに、Base64形式で読み込んだデータをいれてね!

なので、base64.txtというファイルにBase64形式のデータが入っていて、
それをデコードした結果を、decode.txtに入れたい場合は、こんなかんじ

import java.io.*;
import org.apache.commons.codec.binary.Base64;

public class Test {

	public static void main(String[] args) {
		try
		{
			//==================================//
			//Base64エンコードファイルを読み込む//
			//==================================//
			File inf = new File("base64.txt");
			FileInputStream fi = new FileInputStream(inf);
			byte[] indata = new byte[(int) inf.length()];
			fi.read(indata);
			fi.close();

			//==================================//
			//	Base64デコード	         //
			//==================================//
			byte[] outdata = Base64.decodeBase64(indata);
				
			//==================================//
			//	結果書き出し	         //
			//==================================//
			File outf = new File("decode.txt");
			FileOutputStream fo = new FileOutputStream(outf);
			fo.write(outdata);
			fo.close();	
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}			
	}
}

 
(上記< > ¥ は、本当は半角です)




■Base64にする(エンコード)は、注意が必要

 一方、Base64に変換する場合は、

byte[] outdata = Base64.encodeBase64(indata);

で、indataに、ふつうのファイルから読み込んだデータをいれると、
たしかにoutdataに変換結果を返してくれるんだけど、
76バイトで切ってくれるわけではない。
(Base64は、76バイトごとに切るのが、仕様だったと思った)

そこで、こんなかんじで行いました。

import java.io.*;
import org.apache.commons.codec.binary.Base64;

public class Test2 {

	public static void main(String[] args) {
		try
		{
			//==================================//
			//	ファイルを読み込む	         //
			//==================================//
			File inf = new File("plain.txt");
			FileInputStream fi = new FileInputStream(inf);
			byte[] indata = new byte[(int) inf.length()];
			fi.read(indata);
			fi.close();

			//==================================//
			//	Base64エンコード	         //
			//==================================//
			byte[] outdata = Base64.encodeBase64(indata);

			//==================================//
			//	結果書き出し	         //
			//==================================//
			File outf = new File("encode.txt");
			FileOutputStream fo = new FileOutputStream(outf);
			byte[] oneRec = new byte[78];
			for(int i = 0 ; i <= outdata.length ; i ++ )
			{
				//	データ書き出し
				if ( i % 76	==	0 )
				{
					if ( i	!=	0 )
					{
						oneRec[76] = '¥r';
						oneRec[77] = '¥n';
						fo.write(oneRec);
					}
				}
				else if ( i ==	outdata.length )
				{
						oneRec[i%76] = '¥r';
						oneRec[i%76+1] = '¥n';
						fo.write(oneRec,0,i%76+2);
				}

				if ( i 	<	outdata.length )
				{
					oneRec[ i % 76 ] = outdata[i];
				}
			}
			fo.close();	
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}			

	}
}

(上記< > ¥ は、本当は半角です)




とはいえ、簡単に出来たりします。
ちなみに、VC++のBase64変換についてや、Base64のしくみについては、

ここ http://www5b.biglobe.ne.jp/~kouta_y/c/c04.html

が、わかりやすかったです。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

オブジェクト指向で開発の最初から最後までの手順例-その21:フレームワーク。

2007-08-10 13:24:58 | 開発ネタ

オブジェクト指向でやる場合の最初から最後までの流れを、実際の例を挙げて書いていくシリーズ「オブジェクト指向で開発の最初から最後までの手順例」、いままでで、要求仕様がまとまり、前回で、要求定義書で出てきた、やることとエンティティをもとに、モデル部分のクラスをつくりました。

 ここの予定で行くと、次は、「やることをメソッドとして適切なエンティティにいれ、モデル部分のクラスをつくる」です。




■フレームワークの決定

 プログラムは、入出力と、処理部分に分かれるわけですが、入出力部分に関しては、たいてい共通化できます。

 とくに、画面部分に関しては、画面部分をビュー、そして、処理部分をモデルとして、ビューとモデルをつなぐ部分のコントローラーというのを考えて、モデル、ビュー、コントロール、頭を採ってMVCモデルが中心的な考え方になっています。

 ただ、MVCにも、いくつかの実装方法があります。

 また、入出力は画面だけでなく、データベースなどもあります。

 そこで、この段階で、それらの実現方法(フレームワーク)を決めてしまいましょうというわけです。




■で、今回は・・・

 最近のはやりとしては、WebAPIでして、となると、REST型(WebのPOSTないしはGet型でデータを投げて、XMLで結果を受け取り、それを元に処理する)ってことで、まあ、いいかなと。。

そーすると、

画面(View):ブラウザ、AJAXで処理
    |
コントローラー:サーブレット
  →サーブレットコンテナにはTOMCATを使用
    |
モデル:Javaプログラム


ということになります。




■データベースの呼び出し

 データベースに関しては最近O/Rマッピングなどがはやってますが、まあ、それほど大げさにやらず、自動生成にします。
 トランザクションは、各データベースで発生するのでなく、それより上位のクラスで発生させます(EJBにおいて、各テーブルを操作するエンティティBeanではなく、その上位のセッションBeanでトランザクションを操作するように)

 ということで、

モデル(トランザクション操作)
   |
DBアクセス(自動生成で、各テーブルごと)

ということになります。




■XMLで返す返り値

 サーブレットのXMLで返す返り値は、大きく2つです。

・処理系の場合
  なにかを処理させる場合、エラーコードと、エラー内容

・検索・問い合わせ系
  問い合わせに対する答え
     レコード-各項目
  の形でまとめられる



■まとめると・・

こんなかんじ

画面(View):ブラウザ、AJAXで処理
    |
コントローラー:サーブレット
  →サーブレットコンテナにはTOMCATを使用
  →「処理系」ないし「検索・問い合わせ系」のXMLを返す
    |
モデル:Javaプログラム
  →トランザクション操作もここで行う
   |
DBアクセス(自動生成で、各テーブルごと)




次回から、もっとくわしく、それぞれの中身をみていきます。




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする