A Day In The Boy's Life -93ページ目

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

最近Twitterやブログ、ニュース系サイトでもiPadやiPhoneの話題がもちきりになっています。

その中で、iPadやiPhoneを企業や教育現場の中で導入する動きも出てきてたりします。


[jp]グリーが海外展開を視野に。全社員へのiPadの配布も明らかに @ TechCrunch JAPAN


大塚製薬、MR向けにiPadを1300台導入 @ 日系電子版


青山学院大、学生にiPhone配布 社会情報学部の550人に @ ITmedia News


こういうのを見て、羨ましいうちもやらないかなみたいなことを思ったりしますが、情報システム部門手動でこういった先進的な機器やサービスの導入には向かうことはほとんどないのではないか、と感じる部分も多かったりします。



新しいものより古く安定しているものを好む文化


情報システム部門は、構築や導入した後の保守・運用を考えると、なるべくそこで手間のかからないものを選ぼうとします。

当たり前の話ですが、自らの首を絞めるようなものを導入するのを避け、なるべく枯れた技術で安定したものを選んだほうがよいという選択肢になるわけです。


費用対効果を見ても、海のものとも山のもとの分らないようなものを導入するよりは、ある程度他社でも実績と効果がはっきりしているものを選びます。

新しい機器やサービスというのは、その効果がいまいち分らないことが多いわけなので、自らの体験によってその効果を見極めることがあったりもします。


ただ、若い世代では普段からそういう新しいものに慣れ親しむ環境にあったとしても、企業内で決裁権限を持っているような人はそういうことを自ら体験するということは少なかったりもします。

なので、ボトムアップ式に提案したとしてもよっぽど相手にうまく伝えない限りは「効果が良く分らん」と却下されるケースが多い気がします。

安定志向の雰囲気が充満していると、たとえ新しいものに慣れ親しんでいる若い世代であったとしても「仕事としてならNO」というかもしれません。



子猫を拾ってきたよ!


iPadやiPhoneを自分で使うことに対しては、目を輝かせて喜ぶ人は多いでしょう。

ただ、それを他人に使わせることになったらどうでしょう。

自分が当たり前にできることを他人が当たり前にできるとは限りません。

自分がその新しいデバイスを持ったことによって革新的に変わったビジネススタイルを、その相手も同じように変われるとは限りません


単に手渡してそれでOKというわけではないわけです。

情報システム部門ならそれを使わせ、サポートをし、効果を見極めていく役割を担うことになります。

「子猫拾ってきた」って言う子供に対して「ちゃんと世話できるの?大変だよ?」っていう親のような分担になるでしょうか。

結局、子供だけでは子猫の世話はできないので親もその面倒を見ることになります。

「ちゃんと世話できるの?」というのは子供に対してではなく、自分自身に対しての問いかけでもあるわけです。



まとめ


私自身は、ビジネスの現場でiPadやiPhoneなどの新しい機器が使えれば楽しいだろうなと思います。

ただ、それは自分自身が使うだけの立場であればの話だったり。


社員が利用するソフトウェアは統一すべきか 」に書いたような、何処までを自己責任で対応できるかって話になってきますが、その自分たちに降りかかる手間がかからないのであれば諸手を挙げてOKというでしょう。
先進的なものを自らの目で見て体験して行くような社員が多い企業であれば、元々そういう土壌が根付いていて親としてもさほど要らぬ心配をする必要も無いのかもしれませんけどね。





純粋なHTMLファイルで、余計なヘッダーやMETAタグを付けていなければ一定期間、ブラウザ上にあるキャッシュを見させると言うことは出来たりします。

これって、PHPででも出来るのかなとふと思い検証してみました。

(特にそれで困ったことがあったわけではないのですが)


で、結論から言えばApacheの設定やヘッダーによる制御で、PHPを意図的にローカル(ブラウザ)のキャッシュを利用させるということは出来ませんでした。

キャッシュされているか否かでいえばキャッシュされているようなんですが、要は(あえてHTTステータスコードを返すようなことを除いて)ヘッダーやMETAタグだけの制御により、サーバーから304レスポンス返してブラウザにあるキャッシュを意図的に見せたい、ってことができない。



キャッシュ制御に関するおさらい


純粋にクライアント-サーバーのシステム構成で、間にプロキシサーバーなど余計なものを介在しなければ、キャッシュが働く場所は、クライアント(ブラウザ)とアプリケーション(Web)サーバーになります。

今回、アプリケーションサーバー上にはキャッシュの機構は特に用意していません。


ブラウザ上のキャッシュを”利用させたくない”場合、HTTPヘッダーやMETAタグに下記のように記載しておきます。


// PHPの場合
header("Cache-Control: no-cache");

// METAタグに入れる場合
<META HTTP-EQUIV="Cache-control" CONTENT="no-cache" />

// PHPの場合
header("Pragma: no-cache");

// METAタグに入れる場合
<META HTTP-EQUIV="Pragma" CONTENT="no-cache" />

※ HTTP/1.0用のため古い制御の仕方


// PHPの場合
header("Expires: -1");

// METAタグに入れる場合
<META HTTP-EQUIV="Expires" CONTENT="-1" />

ただ、純粋なHTMLファイルの場合、METAタグを正しく入れてもブラウザのキャッシュが利用されたりします。


一方で、キャッシュを”させたい”場合というのは、上記のヘッダーやMETAタグを入れないか、唯一制御できるCache-Controlを使用します。


<META HTTP-EQUIV="Cache-control" CONTENT="private, max-age=3600" />

その他にも、ApacheでExpiresを設定し強制的にキャッシュさせるようにすることも可能です。

詳細は、Apacheのドキュメント を参照。


ExpiresActive On
ExpiresByType text/html "access plus 1 hours"


PHPに対してローカルキャッシュを利用させる試行錯誤


と言うことで本題。

まず、PHPとHTMLとで中身としては同意なファイルを作り、それぞれに2度アクセスしてみます。


<html>
<head>
<META HTTP-EQUIV="Cache-control" CONTENT="private, max-age=3600" />
</head>
<body>
hello
</body>
</html>

<?php

echo "
<html>
<head>
<META HTTP-EQUIV='Cache-control' CONTENT='private, max-age=3600' />
</head>
<body>
hello
</body>
</html>
";

上記のファイルへのアクセスした際のHTTPヘッダをLive HTTP Headers で見てみます。


http://www.example.com/hoge.html

GET /hoge.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
If-Modified-Since: Wed, 09 Jun 2010 15:21:04 GMT
Cache-Control: max-age=0

HTTP/1.1 200 OK
Date: Wed, 09 Jun 2010 15:34:26 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Wed, 09 Jun 2010 15:29:59 GMT
Accept-Ranges: bytes
Content-Length: 119
Connection: close
Content-Type: text/html
----------------------------------------------------------
http://www.example.com/hoge.html

GET /hoge.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
If-Modified-Since: Wed, 09 Jun 2010 15:29:59 GMT
Cache-Control: max-age=0

HTTP/1.1 304 Not Modified
Date: Wed, 09 Jun 2010 15:34:31 GMT
Server: Apache/2.2.3 (CentOS)
Connection: close
User-Agent


2度目のアクセス時には、304ステータスコードが返ってきてローカルキャッシュが使われていることがわかります。

次に、PHPの場合


http://www.example.com/hoge.php

GET /hoge.php HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cache-Control: max-age=0

HTTP/1.1 200 OK
Date: Wed, 09 Jun 2010 15:38:21 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.1.6
Content-Length: 120
Connection: close
Content-Type: text/html
----------------------------------------------------------
http://www.example.com/hoge.php

GET /hoge.php HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cache-Control: max-age=0

HTTP/1.1 200 OK
Date: Wed, 09 Jun 2010 15:38:23 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.1.6
Content-Length: 120
Connection: close
Content-Type: text/html


2度目も200のステータスコードが返され、キャッシュを利用していません。

header()を使ってCache-controlを指定してもダメです。


HTTP/1.1 200 OK
Date: Wed, 09 Jun 2010 15:48:36 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.1.6
Cache-Control: private,max-age=3600
Content-Length: 120
Connection: close
Content-Type: text/html


レスポンスヘッダ内にしっかりCache-Controlの指定がされているのですが、何回リロードしてもキャッシュを利用してくれません。

他にも、Apacheの設定ファイル内で


# ETagを使用しない
FileETag None

# Expiresを指定
ExpiresByType text/html "access plus 1 hours"

みたいな事もやってみましたが効果なし。

結局、全て200ステータスコードを返してきます。

ちなみに、304のステータスコードを強制的に返してやるとキャッシュを使ってくれます。


HTTP/1.1 304 Not Modified
Date: Wed, 09 Jun 2010 15:58:41 GMT
Server: Apache/2.2.3 (CentOS)
Connection: close
Expires: Wed, 09 Jun 2010 16:58:41 GMT
Cache-Control: max-age=3600

PHP側でレスポンスヘッダを制御する方法は、下記のエントリが参考になります。


304 Not Modifiedをhttpレスポンスヘッダで制御する方法(If-Modified-Since偏) @ pblo


このことからもPHPのファイルとはいえ、ブラウザ内にキャッシュはされていると言うことがわかります。

実際、PHPから出力しているHTMLの一部を変更してリロードしても古い情報が引き続き表示されたりします。

予断ですが、PHP側で304を常に返すようにしておいて、ブラウザのキャッシュをクリアしたらどうなるかって実験をしたら、きちんと最新のページを読んできました。

これは、矛盾していることではあるんですがApacheのログを見ても


192.168.0.100 - [10/Jun/2010:01:05:24 +0900] "GET /hoge.php HTTP/1.1" 304 305 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)"

とか出ていて、ステータスコードとかって当てに出来ないんだなとか思ったり。

最後に、PHPを複数の拡張子で動作できるようにしている場合があったりしますが、それについてもキャッシュが有効に働いてくれないようです。


AddType application/x-httpd-php .php .htm

上記のような場合、.htmファイルでもPHPが動くようになります。

ただ、純粋なHTMLファイルとしても動くわけなのですが、PHPの処理を一切書いていない、下記のようなファイルであってもキャッシュが働いてくれませんでした。


- hoge.htm(PHPは動作可能だが、処理を一切書かずにHTMLのみにしたファイル)

<html>
<head>
<META HTTP-EQUIV='Cache-control' CONTENT='private, max-age=3600' />
</head>
<body>
hello
</body>
</html>


http://www.example.com/hoge.htm

GET /hoge.htm HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cache-Control: max-age=0

HTTP/1.1 200 OK
Date: Wed, 09 Jun 2010 16:33:15 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.1.6
Content-Length: 119
Connection: close
Content-Type: text/html

こう考えると、わざわざPHPにする必要の無いほぼHTMLのようなファイルや、PHPでも動作可能な拡張子のファイルってローカルキャッシュが上手く働いてくれずに無駄な処理が行われてしまうのかな。





Twitterを使うとき忘れないようにしたい大切なこと @ 頭ん中


これ読んで書こうと思ってたことがすでに別で書かれてた。


デート中のツイッターやmixiはマナー違反じゃない @ 発言小町


まぁ、どっちもどっちという意見は置いといて、Twitterに興味が無い人から見れば思うことは一緒なのかな。

Twitterに限らず人と会ってるのに携帯ばかり見られてたら自分自身もちょっと嫌だろうなと思ったりします。(やっちゃったりしてるけど・・・)



共有できないもどかしさ


自分の反省を踏まえつつ、なんで人と会ってるのにTwitterしたいかと考えてみると、1つは自身Twitterが感情や日常のアウトプット場所になってたりするからです。

人と会っていて、そいつが面白いことを言ったりお店で起きた出来事、自分の状態などなどそれを他の誰かと共有したいって欲求があったりして(大概の場合、それは他の人にとって面白くもなんとも無いことだったりもするわけですけど)、それがTwitterを開いてしまう理由だったりします。


Twitterってリアルな自分とを結ぶ導線のような感じがあって、結局リアルな自分に何か起きたり考えが巡らないと何もいえなかったりもするわけです。

何らかのインプットがないと考えも巡らないし、面白い出来事と言うのはツイートする上で最高の材料にもなったりします。

だから日常のちょっとした変化があればリアルタイムにPOSTしていきたい欲求に駆られたり。


もう一つは、リアルタイム性が高い故に世の中の情報にいち早くありつけるツールでもある点。

何か面白いことがないかって常に探し回りたい気分にもなったり。

こう書くと「じゃあ一緒にいる私と話してても面白くないわけ?」ってなるわけですけど、入ってくる情報量が全然違ったりもするわけですよね。(言い訳ですね。すいません。)

そのリアルな場を盛り上げるためのネタ的なものが落ちてないかってことを気にしたりも。(これもいい訳ですけど。。)


最後は、取り残されたくないって思いかもしれません。

情報が早く駆け巡り、それをいち早くウォッチできる。

大きいニュースだとTLも祭りのような騒ぎになったりするので、そういうことが起きてないか目を見張っていたい気分にもなったりします。

あたかも自分のTLが一つのチームのように見えたりもするので(実際はそんなことはないわけですが)、そこで起こるイベントに参加したいという気持ちになるのかもしれません。


リアルタイムにつながることがウリになっている点が中毒性を増す要因にもなっていますし、リアルから得られるインプットを制限されることへのもどかしさが出てきますし、みんなと参加したいって気分がよりTwitterへ誘わせることになったりするんだろうと感じたりしてます。



リアルを置いてきぼりにする不思議


実際に自分を知り、Twitterで築いたものより深い関係にあるであろうリアルとの付き合いより、Twitter上での付き合いを優先するというのは、随分と不思議なことをしているようにも感じられます。

某ドラマで「寂しいからTwitterしようかな」みたない台詞がありましたけど、実際には寂しいというより気楽な関係と心地よい環境を簡単に手に入れられるからと言うのが本音のような気もします。


リアルな関係と言うのはお互いを直に知っていて、手に届く距離にあるというところから時には面倒なことも多々あります。

Twitterのつながりは気軽に構築でき、変なかしこまった雰囲気もありませんし、一定の配慮をしていれば特に面倒なことが起きる危険性というのはリアルより随分と低かったりもします。

(それは受け取る情報が文字だけと少ないから、と言うのがあるかもしれませんけど)


しかし、考えてみると関係の重みで言えば簡単に切れるTwitterとの関係より、重ねた時間やいざと言うときに直接手を差し伸べてもらえるリアルでの関係の方が重かったりもするわけです。

つながりの多さで言えば、リアルで築き上げるものより簡単に大きなものを手に出来るかもしれません。

そして、ネットは単にその量で判断を見誤るものも多かったり


関係の重みを無視してしまうことの危険性ってネットでは多く潜んでるのかもしれないな、と思ったりします。