PC関係のメモ
Webサービスとは / Webサービスとは(2) / XML-RPCの実際 / 普通のHTTPリクエスト/レスポンスってどんなんだっけ? / cvs-mode for xyzzy / Webページサムネイル画像作成ツール / 2ch管理人 ひろゆき氏のブログ / Apacheの自動起動の設定(RedHat系) / ブラウザの「お気に入り」 / [memo]URL from IEのお気に入り
Webサービスとは
要するにWebサーバが情報を提供する相手が「人」か「アプリケーション」かというだけのような気がする。
いや、ちょっと違うか。今までも「ブラウザ」という固定の「アプリケーション」にHTML(XML) なりJPGなりを提供してたんだから。でも結局は人が見るためのデータだ。
WebサービスはHTMLやJPGの代わりにXMLでデータを提供する((-実際データ形式には依存しないと思うけど-))。それだけなら「index.xml」を置けば出来上がりなんだけど、常に同じデータしか返してこないWebサービスにあんまり意味は無い。
アプリケーションがデータを送り、Webサーバはそのデータに基づいたデータを返す。これはWebサービスに限ったことではなく、ブラウザでWebを見るときにも行っていることだ。違うのはそのデータがXMLか否か。
たとえば検索エンジンを利用するとき、検索窓に文字を入力している。ブラウザは入力された文字をWebサーバに送り、その文字を含むページの探しリストをHTMLにしてブラウザに返す。
これをWebサービス化したのがGoogleが始めた「Google Web API」だ。
このWebサービスを利用するアプリケーションは、検索したい文字をXMLとしてGoogleのWebサービス用のURLに送信する。Googleは受け取った文字を含むページのリストをXMLデータにしてアプリケーションに返す。
アプリケーションはそれをGoogleと同じようにHTMLにしてもいいし、ファイルに保存して終了してもいい。どう利用するかはアプリケーションを作る人次第。
プログラム経験者には「Webを使った関数呼び出し」と説明すると伝わるかも(抽象的過ぎて混乱するか・・・)。WebサーバにURLという関数名と引数を渡して返り値をもらうのだ。
多分Webサービスはもっと壮大なものだと思うけど、僕が使うレベルではこの程度の理解で困らないように思う。
Webサービスとは(2)
しつこいくらいにXML、XMLと書いたが、実はアプリケーションからはXMLを意識する必要は無い。HTTPのプロトコルしらなくてもCGIスクリプト書けるのと一緒。PHPやPerlなどはWebサービス用のライブラリがありXMLはその後ろに隠れて自分の書くコードからは見えない。
XML-RPCの実際
XML-RPC仕様書邦訳によればリクエスト、レスポンスはそれぞれ以下のような構造。
リクエスト
POST /RPC2 HTTP/1.0
User-Agent: Frontier/5.1.2 (WinNT)
Host: betty.userland.com
Content-Type: text/xml
Content-length: 181
<?xml version="1.0"?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><i4>41</i4></value>
</param>
</params>
</methodCall>
レスポンス
HTTP/1.1 200 OK
Connection: close
Content-Length: 158
Content-Type: text/xml
Date: Fri, 17 Jul 1998 19:55:08 GMT
Server: UserLand Frontier/5.1.2-WinNT
<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value><string>South Dakota</string></value>
</param>
</params>
</methodResponse>
ごちゃごちゃ考えるより、この実例をひとつ見るほうがよっぽどわかりやすかった。
普通のHTTPリクエスト/レスポンスってどんなんだっけ?
GETは簡単だけど良く考えたらPOSTのほうはあまり考えたことがなかった。考えなくてもPHPはうまくやってくれてるし。
まずはGETリクエスト
GET / HTTP/1.0
レスポンスはリクエストがGETでもPOSTでも同じ(余計なヘッダは省きます)
HTTP/1.1 200 OK Content-Type: text/html Date: Fri, 17 Jul 1998 19:55:08 GMT <html> <head> <title>Welcome mylab.jp!</title> </head> <body> mylab.jpへようこそ。 </body> </html>
フォームなどから入力する場合で、POSTメソッドを使った場合のリクエストはフォームのエンコード方法にmultipart/form-dataや、application/x-www-form-urlencodedがあるらしい。名前から察するに前者はマルチパートのメールみたいにバウンダリで値を区切ったりするんだろう。後者はGETと同様に変数=値&変数=値・・・という感じだろうか。
HTML 4.01仕様書 邦訳 フォームのMIMEタイプ で答えあわせをしてみると、FORM要素の enctype属性に指定できる値はデフォルトのapplication/x-www-form-urlencodedとmultipart/form-dataの2つがあり、一般的にはURLエンコードを使うがファイルを送信する場合には後者のマルチパート方式を使わなければならない。
application/x-www-form-urlencodedを使うPOSTリクエスト
multipart/form-dataを使うPOSTリクエスト
参考サイト
cvs-mode for xyzzy
Webページサムネイル画像作成ツール
Windows
Windows
LinuxでMozillaを使う方法 http://blog.bulknews.net/mt/archives/000494.htmlより
#!/bin/bash
mozilla -geometry 800x800 &
PID=$!
sleep 3;
ID=`xwininfo -name "Mozilla" -int | perl -e 'while(<>) {
if (/Window id: ([0-9]+)/) { print $1; } }'`
mozilla -remote openURL\(http://$1\)
sleep 3;
import -window $ID -silent $1.jpg
kill $PID
http://www.persistent.org/hiki/hiki.cgi?%A4%BF%A4%E0%A4%E9から
Apacheの自動起動の設定(RedHat系)
http://m9841.info/server/apache2.htmlより
付属の apachectl を利用します. # cp /usr/local/apache2/bin/apachectl /etc/init.d/apache2 コピーした apache2 を編集します. # vi /etc/init.d/apache2 25行目くらいのコメントが終わった所で以下を追加します. #chkconfig: - 85 15 #description: apache2.0 chkconfig に登録します # chkconfig --add apache2 # chkconfig --level 345 apache2 on RPM とかで他の httpd がインストールされているときは, # chkconfig --level 345 httpd off とかして次回から起動時に自動起動しないようにしておきます.
ブラウザの「お気に入り」
昔は巡回するページをお気に入りに入れていた。それがWWWCを使うようになって巡回にはWWWCを使うようになった。今はそれがアンテナだったりRSSリーダーと併用になっている。
で、ブラウザのお気に入りは調べ物中に有用だと思ったページを登録している。
今その整理中なのだ。お気に入りに登録されていたページを日記に移す作業。
というわけで、いつもより多く更新しております。
URL from IEのお気に入り
一つ一つ書いてる暇が無い。
I18N、L10N、M17Nとは? / [buy] 体重計 OMRON カラダスキャン“チェック” HBF-352 / Miechをビルド
I18N、L10N、M17Nとは?
http://www.atmarkit.co.jp/fxml/rensai/xmlwomanabou11/learning-xml11.html
多言語対応には、大まかに分けて次の3つの段階がある。I18N(Internationalization)は、システムが多言語に対応するための準備ができていることをいう。L10N(Localization)はI18Nより一歩進んだ段階で、特定の1言語で必要とされる、その言語特有の機能を持っていることをいう。例えば日本語のふりがな(ルビ)や禁則処理がそれにあたる。さらにその次の段階として、M17N(Multilingualization)がある。これは複数の言語に対するL10N(Localization)が行われており、1つのデータの中で次々に言語を切り替えることが可能である状態だ。
体重計 OMRON カラダスキャン“チェック” HBF-352
2月からスポーツジムに通うのでその準備。
Miechをビルド
boost.regexとWTLを用意してVS.NET2003でビルド。
覚えておきたいプログラミング言語 / [wish][book]Windowsプログラミング関係で欲しい本
覚えておきたいプログラミング言語
プログラマーとして、知っている言語が多いことはいいことだ。と思う。ではどんな言語がいいのかちょっと考えてみる。
きっかけになったのはmixiに端を発する次の論争
昔ながらの工場みたいな製造業的IT企業と、最近流行(?)のサービス業的IT企業のプログラミング言語からみた文化の断絶のお話だろうか?よく読んでないので論争自体には言及しない。
気になったのは元ネタとなった記事の面接官の一言
業務経歴書や得意な言語でPerlと答えると馬鹿にされる傾向がありませんか?
....(中略)...
「うちは Javaで飯食ってるので、そういう低レベルな言語を得意げに話されても困ります」 と言われました。(´・ω・`)ショボーン
突っ込みどころは多いが、とりあえず2点疑問を感じる。
- Javaで飯食ってるからperlが必要ない、というのは違うのでは?
- perlは高レベル言語(高級言語)であって低レベル言語(低級言語)ではない。低レベル言語とは機械語のような言語を指すのだ。
2は言葉遊びなので置いといて。(つ´∀`)つ
要するに、Java使いでもperl等のスクリプト言語は使えたほうがいいでしょ。と言いたい。
一般に言われる覚えておくといい言語として3つ挙げられる(どっかに書いてあったけどソース紛失)。
- C/C++、VB、Java等のメインとなる言語
- マシン語(デバッグ等いざというとき役に立つ)
- スクリプト言語(ちょっとしたテキスト操作、ツール作成に使える)
ちょっとしたツールを作るのにスクリプト言語なら数行で済むものをJavaとかC/C++使って時間使うのは効率が悪い。
また、C/C++でコンパイラやAPIの内部でバグが発生してるような状況でマシン語が役に立つ。プロジェクトに一人そういう人がいると安心する。
Java使う会社ならJava使えるのは当たり前として+αの言語知ってるほうがうれしいと思う。マシン語は覚えるのにコストがかかるけど、スクリプト言語くらいなら一人一人が知ってるほうがいい。
Windowsプログラミング関係で欲しい本
Windowsプログラミング(特にマルチスレッド)関係で欲しい本が溜まってきたのでここらで整理。どれも内容が被る。「Advanced〜」を買ってから、マルチスレッドについて物足りなければ「Win32マルチスレッドプログラミング(Addison Wesleyの方)」で補完するのが良さそう。オライリーのはレビューによると独自ライブラリらしいのでちょっと躊躇う。
どれもお値段が張るので、立ち読みしてから決めよう。
Advanced Windows 改訂第4版(ジェフリー リッチャー/Jeffrey Richter/長尾 高弘/ロングテール)
Win32/C++ マルチスレッドプログラミング詳説(アーロン コーエン/マイク ウッドリング/Aaron Cohen/Mike Woodring/鈴木 慎司/金森 玲子)
Thrift vs. Protocol Buffers / ファイル選択ダイアログで落ちる(8)
Thrift vs. Protocol Buffers
http://stuartsierra.com/2008/07/10/thrift-vs-protocol-buffers
RPCインターフェースを含んでいるので、すぐ始められそうなのがThrift。
http://d.hatena.ne.jp/JiaLu/20080710/1215675696
Thrift自体についてはサイボウズの方が書かれた記事がわかりやすい。
Win32マルチスレッドプログラミング (Ascii Addison Wesley programming series)(ジェームズ ビバリッジ/ロバート ウィナー/James E. Beveridge/Robert Wiener/インフォビジョン)

_ rufein [xyzzyのcvs-modeについての記述はかなり適当にかいてしまったところもあるので、わかりにくいところや間違いが..]
_ hajime [必要な情報が簡潔にまとまっているので助かります。気づいた点があったらお知らせします。]