2008/04/09

httpのヘッダ情報が見たいです [ FireFox, http, PlugIn ]

今日はFireFoxのプラグインの紹介だよ!
といってもまだ自分のFireFoxにインストールすらしてないけどね!

……さて、みなさんWEBアプリを作ってるとリクエストやレスポンスの
httpヘッダとか、POSTされている値とかを確認したくなる時って
ありません??
プログラムが上手く動かない!パラメータがどう飛んでるか分からんよ!
ってなって髪をかきむしる事幾数度……(あぁ禿が近づく)

http://livehttpheaders.mozdev.org/

↑こんなFireFox用のPlulgIn見つけました。その名も
"LiveHttpHeaders"
……なんてそのままな名前なんだ……

このプラグインを使うとどうやらhttpのヘッダ情報とかが見れるらしい。
見るだけじゃなく、保存したヘッダ情報を加工してリクエスト送信とか
そういう事もできるらしい。

な、なんだかオラワクワクしてきたぞ……!

という訳で早速明日は会社のPCを人柱にこれをインストールして
使ってみようかね!(というか会社の方がこれ使いたいしな)

2008/04/08

リソースとは何ぞや [ REST ]

ここの所REST周り続きの毎日。
他にネタが無いんだからしょうがない。

さて、題名通り今日はRESTにおいて大事な概念のリソースについて。

ここでリソースというのは情報の事を指します。
例えば……

・今まさに公開しているこのBlog
・オライリージャパンのRESTfulWebサービス本の紹介
・いつも巡回しているエロサイト
・WikipediaのREST解説
・今月のオリコンランキングTOP10

etc,etc…… 例をあげはじめたらキリが無いですね。
さて、ここで問題になるのは、例えば上にあげた例のうちの
「公開しているこのBlog」は、昨日表示した時と来週した時では
画面に表示されるトピックは違う物になっているでしょう。(更新してれば)
「今月のオリコンランキングTOP10」は、4月に表示するか5月に表示するかで
全く内容が変わっている事でしょう。

しかし、どちらも「公開しているこのBlog」、「今月のオリコンランキングTOP10」で
ある事に変わりはありません。リソースを考える上で大事なのは、
「そのリソースの意味」が大事になります。

例えば今公開しているこのBlogであれば

http://gp400fb.blogspot.com/

このアドレスにアクセスする事で、直近N件の佐藤さんが書いたトピックが
表示されるリソースになる訳です。同じくオリコンランキングであれば、

『その月の月別ランキングTOP10』

という意味になりますね。リソースの実体はその時々変化するかもしれませんが、
リソースの意味は不変の物である、という事らしいです。

例えば、GoogleのTOPを開いたら、今までは簡単な検索用テキストボックス
だったのに最近は下に"お勧め"等が表示されるようになりました。
表示される実体は変わりましたがこれは"Googleのトップページ"という情報に変わりはありません。
しかし、これがある日GoogleのトップページにアクセスしたらYahooのページになっていた。
そんな事はありえない……そういう事ですね、きっと。


さて、上記のように"リソース"という概念を踏まえた上で、先ほどの例を見てみます。


・今まさに公開しているこのBlog
・オライリージャパンのRESTfulWebサービス本の紹介
・いつも巡回しているエロサイト
・WikipediaのREST解説
・今月のオリコンランキングTOP10

これらは全てWEB上に存在するものです。上から順に

http://gp400fb.blogspot.com/
http://www.oreilly.co.jp/books/9784873113531/
プライバシー保護の為お見せできません
http://ja.wikipedia.org/wiki/REST
http://www.oricon.co.jp/rank/js/m/

上記のURIで各リソースを参照する事が出来ます。一文字でも違えば当然
これらのリソースにアクセスする事はかないません。

このように、WEB上のリソースはURIという識別子を持つ事は皆さん
ご存知だと思います。
さて、ここで重ねてリソースという概念の復習になりますが同じURIにアクセスしても
必ず同じデータが返ってくる保証はありません。
さっきも言ったように、http://gp400fb.blogspot.com/というURIにアクセスするのが
今日か、それとも一年後かで表示されるデータは全く別のものになっているでしょう。
しかし両者とも僕の書いているBlogという定義は変わりません
このように、一つの識別子では別の内容が返ってくる事があります。
(勿論、毎度毎度同じ内容が返ってくる事もあります)
しかしその識別子の持つ意味は不変なのです。



という事で今日のリソースという概念のまとめ。

・RESTにおける情報は全てリソース
・リソースの内容は変わる事があるが、その意味(定義)は不変
・リソースはURIという識別子を持つ



このリソースという概念がRESTでは非常に重要らしいです。
何故らしい、なのかというとまだ先を調べてないからです!
という訳でまた纏まりの無いまま終わる。

2008/04/07

まず、アーキテクチャって何だろう? [ アーキテクチャ ]

さて、今日のお題はアーキテクチャ。
良くアーキテクチャって言いますけどアーキテクチャって何でしょう?
結構何となくこの単語使ってる人が多いんじゃないかと思います。

というか僕が何となく使ってる人ですので。

まず、ここで言うアーキテクチャっていうのは勿論
ソフトウェアアーキテクチャの事です。
そこで早速今度もWikipedia大先生に聞いてみた所

ソフトウェアアーキテクチャとは、抽象化と問題の分割によって
複雑性を減らすことを主に念頭に置いたものである。

との事。まぁこの後に続けて書いてあるんですが、万人が納得いくような
ちゃんとした定義がある訳でもないようです。単語として意味が広すぎるのかな。

さて、ここで更に突っ込んでアーキテクチャアーキテクチャスタイルの違いについて。
(単語の解釈の話ばっかりでツマランのだが)こういう単語の意味でちゃんと解釈
しておかないと後でどんどん大きな勘違いとかに繋がっていきそうなのが怖いんで
色々調べてみたいと思います。

さて、アーキテクチャとアーキテクチャスタイルは当たり前ですが別の意味ですよね?

アーキテクチャというのは実際に自分達が作るシステムが持っている物。
アーキテクチャスタイルというのはシステムにおけるアーキテクチャを設計する時に
参考にするもの。

こんな違いのようです。簡単な例だとMVCモデルとかが挙げられると思います。

例えばあなたがStruts等のMVCモデルのフレームワークを使ってシステムを
構築したとしましょう。

この場合、これはMVCモデルというアーキテクチャスタイルの
Strutsというアーキテクチャでシステムを構築した…… という感じです。

……以上が自分なりのアーキテクチャ等の解釈になります……
という訳でようやくRESTというアーキテクチャスタイルについて次から
調べていこうかな……うーん纏まらずに終わる。

2008/04/04

RESTって何? 休むの? つーか会社休みてーよ。 [ http, REST ]

今日、職場での一コマ。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
俺『~~~♪』 ← 今日も元気に仕事をサボってウェブサーフィン中。

チームリーダー(以下R)『あ~、佐藤君。ちょっといい?』

俺『(びくっ!)あ、は、はい! なんでしょうか!』←あわててブラウザ閉じる。

R『突然ですが……ウェブをサービスしてみませんか?』

俺『What???』
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

要約するとよく分からないですが職場でのWebサービス担当大臣を
(今後精進して)やらない? って話です。つーてもこの現場って確か7月末
までしかいないから4月中ぐらいにはマスターしないと使い道がないよな。
まぁそん時はJSONやらAjaxやら色々と出てきたのですが、リーダーがその時
持ってた本がコレでした。

という訳で今日は(というか今後もになると思うが)RESTful……つーかRESTって何?
というトピックを書いていこうと思います。
また、色々WEBで調べてみた所RESTといっても厳密な定義がある訳でもなく、色々な
意味を持っていたりもするようです。という訳でじっくりと自分なりのRESTの解釈を
ここでウダウダと語っていくと思うのでお付き合い下さい。
また、間違ってる所や意見などがありましたら御教授、ご鞭撻頂ければ幸いです。

つーか絶対間違ってる事書きそうで怖いんだよな。

さて……とりあえずググってみた所RESTって

Representational State Transfer

の略なようです。これをスペースアルク様で和訳してみましょう。

Representational:再現、具象、描写
State:状態
Transfer:転送

……えー、具象状態の転送?

和訳作戦……失敗!!
なんだよこれ意味わかんねーよ。ばーかばーかつーか英語苦手なんだよ!

という訳で諦めてWikipediaでも見よう。そうしよう。文明って素晴らしい。
Wikipedia大先生によりますと、RESTっていうのは……

ウェブのような分散ハイパーメディアシステムのための
ソフトウェアアーキテクチャのスタイルのひとつである。


はい!先生!困った事にこの ソフトウェアアーキテクチャ ってのが既に
何を言っているか分かりません。
アホな上に知識の乏しい僕のような下民はこういう時は人に頼るか、わからない事を
ひたすら追って調べていくしかない訳ですが……
折角の技術Blogなんでここは自力で追っていってみたいと思います。

でも今日は疲れたんでこのトピックは終了。

……結局、RESTについては何の略か以外は分からず終わってしまった……
先は長いようです。(仕事は待ってくれないようです・゚・(ノД`)・゚・)

2008/04/03

変数について~初期値って……~ [ Java ]

三日連続変数について。こりゃ書く方も読む方も
飽きるの必至だわー……といっても特に書く事も無いので昨日の続き。

さて、Javaにおいて変数が宣言された時ってその変数はどうなるんでしょうか?
まず、クラス型変数の場合

Integer height = new Integer(168);

こんな風にコンストラクタを使って初期値を設定したりします。
この場合は当たり前ですが、heightというInteger型のインスタンスが
中にint型の168という値を持ったメンバ変数を持つ……となりますね。(あってるよね?)
さて、こっからが問題なのですが

Integer height;

このように宣言のみを行った場合、この"height"という変数はどうなるのでしょうか?
昨日の日記へのコメントでmaitoさんから エラーになる! というコメントを頂きましたが
実際にはコンパイルエラー等にはなりません。

正解はnull値を持つ、です。

何度も何度も言っていますが、クラス型変数というのはオブジェクトな為インスタンス化を
行わなければいけません。その為、変数を宣言しただけではそこに値は存在しない……
つまりnullになります。

じゃあここで逆に、プリミティブ型の変数はどうなるのでしょう?
プリミティブ型の変数はオブジェクトではない為、宣言と同時に既に値は存在するはずです。
実際、下記のようなコードを書いてみれば検証はたやすいでしょう。

int height;
System.out.println(height);

上記コードを実行すると、結果は0になります。
プリミティブ型の変数は宣言と同時に初期化が行われるのです。
参考までに、プリミティブ型変数の初期値を以下に列挙しておきます。

  • byte→0
  • short→0
  • int→0
  • long→0
  • float→0
  • double→0
  • char→"\u0000"(つまり空文字、"")
  • boolean→false
こんな感じです。ほとんどゼロが入ってますね。



さて、これにてひとまずJavaにおける変数の話は終了ですかねー。
ただ自分で書いておきながらなんなんだけど、オブジェクト指向における
クラス、オブジェクト、インスタンスという概念とJavaにおける同単語の扱いが
だんだんと分からなくなってきた……
オブジェクト==インスタンス だと思っていたけどもそうでもないようで。
ここらへんは正直な所まだまだ未踏の世界なのでいずれしっかり理解
できたらここに書いていこうと思います。 何年後。

2008/04/02

変数について~クラス型変数とな?~ [ Java ]

昨日の続き、今度はJavaにおけるクラス型変数って奴について。
まぁ実は書いてる僕がそろそろ意味不明になってきてるんですが
気にせずスタートするとします。

さてではクラス型変数とは何かというと、クラス型変数はプリミティブ型
とは違い、オブジェクトです
その為、昨日の例のように使用する前にインスタンス化をしなければいけません。

プリミティブ型の場合は int i = 1; のように直接値を書き込める所、クラス型の
場合はオブジェクトを生成した後に値をセットしないといけません。
また、クラス型の場合は当然といえば当然ですがメソッドを持ちます。
例えば、

long l = integer.longValue();

こんな感じ。上記の例だと変数integer(クラス型変数)が中にint型(プリミティブ型)の
変数をlongValue()というメソッドでlong型にキャストして値を返しています。


こんな感じです。つまりクラス型変数って、事前にJavaで用意されているクラスを
使ってるだけなのかなぁ?勿論無いと不便なんですけど・・・・・・
とりあえずここで一旦クラス型変数のまとめ。

・クラス型変数はオブジェクトである
・クラス型変数はオブジェクトなので、インスタンス化の後に値をセットする必要がある
 (↑大体コンストラクタでセットするのかな)


さて、ここで話は終了……と思ってたのですが、↑の文章を良く読むとクラス型変数の
場合オブジェクトを宣言はしてもインスタンス化しない、つまり

Integer height;

こんな所で終了するとこれってどうなるんでしょう?
これまた飽きてきたのでまた別トピックで書くとします。

2008/04/01

変数について~プリミティブ型って何さ~ [ Java ]

みなさんこんばんわ。
今日をもって私も遂に社会人三年目と相成りました。
あんま実感無いなー。3年目っつーと……

自分がN社に入社した時のI田さんと同じっつー事?
確かあの時点でK崎先輩が4年目で……

とまぁあっという間に先輩たちと同じ年次になっていく今日この頃。
いつまでも昔と同じレベルで居る訳にはいかないですよね!
先輩社員の面子を保つ為にも!(未だ下に後輩社員がついた事ないが)



という訳で今日はプログラムを少し触った事がある人ならもう問題無く
使っているであろう"変数"って奴の、Javaでの扱いについて。

Javaは型付けが厳しい言語なので変数宣言時には型も宣言しないと
いけません。その為良くこんな感じのコードを見る事があると思います。

int height = 165;

整数型の"height"って変数を宣言して、初期値として165を代入してますね。
この int と同じように、Javaでは下記のような8つの型が定義されています。
  • byte
  • short
  • int
  • long
  • float
  • double
  • char
  • boolean

この8つの型をプリミティブ型と言います。
このプリミティブ型って奴は値としてしか扱うことが出来ません。
値としてしか扱う事が出来ない、というのはどういう事かというと
オブジェクトとして扱う事ができないという事です。

オブジェクトではない為、プリミティブ型の変数は直接値を代入する事が出来ます。
先の例のように、int height = 165;  こんな感じに直接値を代入できます。

これがプリミティブ型じゃない場合はどうでしょう?
例として、同じように整数型を扱うIntegerクラスを使って同じ事をしてみると……

Integer height = new Integer(165);

こうなりますよね。上のIntegerの場合が何をやっているかというと、一旦
Integerクラスのheightという名前のインスタンスを生成し、そこにコンストラクタで
165っていう値を設定してます。このようにプリミティブ型じゃない変数は必ず
クラス型のオブジェクトを生成した後、オブジェクトに対して値をセットしなければいけません。


……あれ?今自分で口に出した、"プリミティブ型じゃない変数"って何なんでしょう?
これに関しては長くなるので別トピックで書こうと思います。
とりあえずプリミティブ型変数のまとめ。

・Javaで定義された8種類の型の事
・プリミティブ型変数はオブジェクトではない
・プリミティブ型変数はオブジェクトではない為、直接値を代入できる。

さぁ、次はクラス型変数についてだ!