MacOSX Tigerでrubyからsqliteを使う場合のインストールメモです。
自分の環境では sqlite3 は既にインストールされていました。portを使ったインストールだと以下の様な感じでOKだと思います。
sudo port install sqlite3
次に swig をインストール{{fn 'sqlite3-rubyをインストールするときの注意点。
sudo port install swig
で、ruby-binding をインストールします。
sudo gem install --remote sqlite3-ruby
簡単ですね。
shellからsqliteを操作してテーブルを作ります。
iskwrsk $ sqlite3 test.db
sqlite> create table memo (
...> id integer primary key,
...> date timestamp,
...> body text
...> );
sqlite> .quit
データをインサートして表示するだけのスクリプトです。
インサートはidを固定で指定してるので、何度もインサートする場合にはidをインクリメントしないとダメです。2度目の実行ではPrimary keyのunique制約に引っかかるはず。ここはただ動作確認したいだけなので、そのへんは気にしません。
#!/opt/local/bin/ruby -Ku
$VARBOSE = true
require 'rubygems'
require 'sqlite3'
db = SQLite3::Database.new("test.db")
db.execute("INSERT INTO memo(id, date, body) VALUES(1, '2008-04-30 10:30:54', 'こんにちは!');")
db.execute("INSERT INTO memo(id, date, body) VALUES(2, '2008-04-30 07:21:49', 'おはよー!');")
db.execute("INSERT INTO memo(id, date, body) VALUES(3, '2008-04-30 22:45:03', 'おやすみ!');")
db.execute("SELECT id, date, body FROM memo WHERE date > '2008-04-30 10:00:00' ORDER BY date DESC;") do |id, date, body|
puts '--------------------------'
puts id
puts date
puts body
end
iskwrsk $ ./test.rb
--------------------------
3
2008-04-30 22:45:03
おやすみ!
--------------------------
1
2008-04-30 10:30:54
こんにちは!
特に問題はないですね。簡単簡単。
参考
*SQLite Home Page
*sqlite3-rubyをインストールするときの注意点
*SQLite が認識できるクエリー言語
2008/04/29
Webコミュニティでいちばん大切なこと。
Codereposを使う
昨日[[Tumblrの画像をキャッシュしておくスクリプト|http://d.bulkitem.com/20080310.html#p01]]を修正しました。ただ、自分がTumblrちょっと飽きていて、あんまし使ってない。たかだか、サーバのホスト名を変更するだけなのに今頃直してるし。
大したスクリプトじゃないけど、一応便利だし、後から見た人が使ってみて動かないなと思うのもあれなので、Codereposにあげました。Coderepos素晴らしい。今まで軽く忘れてたけど。
一応なにか気付いたらそれなりにメンテナンスするつもりはあるけど、Tumblr自体余り使ってないので、そもそも気付けるかが微妙です。という点ではCoderepos便利だよね。もし使っている奇特な方がいらしたら適当に弄ってコミットしてもらえるとうれしいです。
ついでに、これまた[[昨日修正した userscript の accesskeyremover.user.js|http://d.bulkitem.com/20080428.html#p01]] もコミットしといた。これは個人的に結構使ってる(という感覚はないのだけど)。
*Changeset 10725
*Changeset 10727
大したスクリプトじゃないけど、一応便利だし、後から見た人が使ってみて動かないなと思うのもあれなので、Codereposにあげました。Coderepos素晴らしい。今まで軽く忘れてたけど。
一応なにか気付いたらそれなりにメンテナンスするつもりはあるけど、Tumblr自体余り使ってないので、そもそも気付けるかが微妙です。という点ではCoderepos便利だよね。もし使っている奇特な方がいらしたら適当に弄ってコミットしてもらえるとうれしいです。
ついでに、これまた[[昨日修正した userscript の accesskeyremover.user.js|http://d.bulkitem.com/20080428.html#p01]] もコミットしといた。これは個人的に結構使ってる(という感覚はないのだけど)。
*Changeset 10725
*Changeset 10727
2008/04/28
HTMLからaccesskeyを取り除くuserscriptを修正した
webページからaccesskey属性を取り除くgreasemonkeyを作ったよで作ったuserscriptがタイトルに反して、実はgreasemonkey(Firefox)では動いてなかったという事に今更気付いて直した。これはひどい。
改めてaccesskeyremoverは何の為のスクリプトか説明しとくと、emacsキーバインドが使えるテキストエリア等にaccesskeyが設定されていると、accesskeyにフックされちゃって不便という状況を回避する為のスクリプト。なにをしてるかというと、名前の通りHTMLからaccesskeyアトリビュートを全部取っ払っちゃう。アクセスキーとキーバインドが競合する環境は主にMacOSX。Windowsとかは競合してないので基本的に関係ない。
で、問題のスクリプトは何がダメだったかというと、Firefoxでaccesskeyを削除するにはremoveAttribute('accesskey')だけではダメみたい。簡単なHTMLドキュメントでは出来たんだけど。なんかその辺良く分からない。でもtDiaryの編集画面とかではaccesskey除去できていなかったので、なんとかしたいなと(ほんと、今更だけど)考えて修正しました。第六回Mozilla拡張機能勉強会まとめ - Yet Another Hackadelicの ''' accesskeyで割り当てられてる場合''' あたりが問題解決のミソ。
あと、旧版では特に何も考えず全てのノードのAttributeを対象にしてたけど、最新版ではaccesskeyが設定できる a, button, label, legend, input, textarea エレメントだけを対象にしました。なので、処理の時間が短くなったはず。
改めてaccesskeyremoverは何の為のスクリプトか説明しとくと、emacsキーバインドが使えるテキストエリア等にaccesskeyが設定されていると、accesskeyにフックされちゃって不便という状況を回避する為のスクリプト。なにをしてるかというと、名前の通りHTMLからaccesskeyアトリビュートを全部取っ払っちゃう。アクセスキーとキーバインドが競合する環境は主にMacOSX。Windowsとかは競合してないので基本的に関係ない。
で、問題のスクリプトは何がダメだったかというと、Firefoxでaccesskeyを削除するにはremoveAttribute('accesskey')だけではダメみたい。簡単なHTMLドキュメントでは出来たんだけど。なんかその辺良く分からない。でもtDiaryの編集画面とかではaccesskey除去できていなかったので、なんとかしたいなと(ほんと、今更だけど)考えて修正しました。第六回Mozilla拡張機能勉強会まとめ - Yet Another Hackadelicの ''' accesskeyで割り当てられてる場合''' あたりが問題解決のミソ。
あと、旧版では特に何も考えず全てのノードのAttributeを対象にしてたけど、最新版ではaccesskeyが設定できる a, button, label, legend, input, textarea エレメントだけを対象にしました。なので、処理の時間が短くなったはず。
特定の名前のファイル(ディレクトリ)を削除する
""サーバ上に上がってるThumbs.db、.DS_Store、catalog.vixを探し出して、属性644でも有無を言わせず削除してくれるソフト
""
""プログラマの方に質問です。自分自身で組んだプログラムで、他の人には配布せず、自分だけしか使っていないプログラムはありますか? それはどういった機能があるプログラ.. - 人力検索はてな
UNIX系OSだと下記の様にするのが定番かな。
find ~/ -name Thumbs.db -print0 | xargs -0 rm -f
find ~/ -name .DS_Dtore -print0 | xargs -0 rm -f
find ~/ -name \*~ -print0 | xargs -0 rm -f
find ~/ -name .svn -print0 | xargs -0 rm -rf
ちなみに、ここで644と明示してる理由は何だろう?何か特別だっけ?
""
""プログラマの方に質問です。自分自身で組んだプログラムで、他の人には配布せず、自分だけしか使っていないプログラムはありますか? それはどういった機能があるプログラ.. - 人力検索はてな
UNIX系OSだと下記の様にするのが定番かな。
find ~/ -name Thumbs.db -print0 | xargs -0 rm -f
find ~/ -name .DS_Dtore -print0 | xargs -0 rm -f
find ~/ -name \*~ -print0 | xargs -0 rm -f
find ~/ -name .svn -print0 | xargs -0 rm -rf
ちなみに、ここで644と明示してる理由は何だろう?何か特別だっけ?
2008/04/27
課長島耕作
ずいぶん昔から連載していて、不定期連載になったりしながらも続編が今も続いているという有名な漫画ですね。時々、有名だけど読んだ事無いものを読んでみようと思う事があって、さして縁がないのに読んでみたりする事があるんだけど、これも最近社長になったらしいという様なニュースがあり、とりあえず読んでみようと思った次第です。








1巻の前半がものすごーく退屈で、昔の話だし、明らかに団塊世代向けという知識はあったので下らないなぁと思いながら面倒くさい思いで読んでいたんだけど、巻を進めるごとにコンセプトも変わってどんどん面白くなってきて、なるほど人気があるのも頷けると思わせる漫画になっています。
恐らく連載当初は等身大のサラリーマンとでもいいましょうか、保身と出世に躍起になるタイプの人間の悲喜こもごもみたいなスケールの小さいミクロな話として描くつもりだったんだろうけど、あっという間にスーパーサラリーマンになって、フィクションの面白さというのをフルに引き出すちょっととんでもな話になります。娯楽度全開ですね。
そんなこんなで、着実に実績を積み上げつつもひょんな事から一匹狼仲間(なんだそりゃ)の上司の出世と共に部長に引き上げられ課長時代は終わりを告げます。
この後は部長島耕作に続くんですが、とりあえず区切りという事で。この先を読むかどうかは未定ですが、とりあえず、課長編はおもしろかったです。







1巻の前半がものすごーく退屈で、昔の話だし、明らかに団塊世代向けという知識はあったので下らないなぁと思いながら面倒くさい思いで読んでいたんだけど、巻を進めるごとにコンセプトも変わってどんどん面白くなってきて、なるほど人気があるのも頷けると思わせる漫画になっています。
恐らく連載当初は等身大のサラリーマンとでもいいましょうか、保身と出世に躍起になるタイプの人間の悲喜こもごもみたいなスケールの小さいミクロな話として描くつもりだったんだろうけど、あっという間にスーパーサラリーマンになって、フィクションの面白さというのをフルに引き出すちょっととんでもな話になります。娯楽度全開ですね。
そんなこんなで、着実に実績を積み上げつつもひょんな事から一匹狼仲間(なんだそりゃ)の上司の出世と共に部長に引き上げられ課長時代は終わりを告げます。
この後は部長島耕作に続くんですが、とりあえず区切りという事で。この先を読むかどうかは未定ですが、とりあえず、課長編はおもしろかったです。
野方配水塔
たしか去年映画化されたこうの史代の「夕凪の街桜の国」の原作漫画にちょっと出てくる中野の配水塔です。映画は見てないので知りません。あんまり象徴的には出てこないのですが、実際はものすごい存在感があります。
渋谷や青山辺りから見る六本木ヒルズみたいな感じですねぇ。なんかでかくて太くてひとりで静かで豊かです。
正面?には幼稚園(中野区立みずのとう幼稚園)が建っています。
水の塔公園から。
きちんと公園があるんです。
公園入り口付近から。
所々修復されて壁の色が違いますね。
でも、そこが空襲時の弾丸の跡では無いらしい。
ちょっと遠くから。
でかいなーと思って撮影したんだけどあんまり伝わらないですね。
気分的には六本木通りから見るヒルズとかハウルの動く城みたいだなぁと思ってました。
野方配水塔 - Wikipedia

切ないけど、前向きな話です。そういえばこの感想書いてないんだよなぁ。
渋谷や青山辺りから見る六本木ヒルズみたいな感じですねぇ。なんかでかくて太くてひとりで静かで豊かです。
きちんと公園があるんです。
所々修復されて壁の色が違いますね。
でも、そこが空襲時の弾丸の跡では無いらしい。
でかいなーと思って撮影したんだけどあんまり伝わらないですね。
気分的には六本木通りから見るヒルズとかハウルの動く城みたいだなぁと思ってました。
野方配水塔 - Wikipedia

切ないけど、前向きな話です。そういえばこの感想書いてないんだよなぁ。
2008/04/26
人類は衰退しました 2

元々好き嫌いのある話だとは思いますが、1巻に比べると話の筋が無い分ダラダラとした感じで、明らかに退屈な印象です。ひとつの話がそんなに長く無くてさらっと読めるので、読むのが苦痛になったり途中で投げ出す様な事はないとは思います。
主人公のキャラがのんびりしていて、それが一つの売りだとは思うのですが、どんなピンチもひょうひょうとしているし、メタな読み方をさせる部分が多く(パロディーとかも含めて)他人事みたいな描写が延々続くので、出来レースっぽくて(言うまでもなく、創作であって出来レースなのですが)盛り上がりに欠けます。読んでる方も一切気をもむ様な所は無いですね。
そんな感じでストーリー的にも、世界観的にも特に変化はなく一つの出来事として収束していきます。淡々とした日常を楽しむ様なお話ならそれで十分だと思いますけど、主人公がのんびりしてるだけで内容的にはアクシデントの連続。まったくほんわかという感じもないです。
この話は結構前に読んでいて、いまいちだったので感想書くのは辞めとこうと思ってたんですが、3巻が既刊の中で一番面白いという様な話を聞いて、読みたいなと考えています。
連続物を読んでるのに途中抜けるというのもアレなので前向きじゃなくて恐縮ですですが、感想書かせてもらいました。おもしろい物でも大体2巻目は伏線の準備等でつまらなくなるものが多い傾向もある気がするので、その線かも知れませんし。
とはいえ、今後もこういう感じでスタンスは変わらず、サザエさん的にネタを変えてストーリーは現状維持で行くんだろうなぁと思いますが。3巻はどんな話なのか楽しみです。
2008/04/25
上井草駅にガンダムの銅像が出来ていた
なんでも、近所にガンダムを制作したサンライズがあるからだとか。
最近出来たらしくてネットメディアでは色々な所で取り上げられていたみたいですね。
結構小さくて、遠くからだとなんだか分かりませんが、近くからでもちょっとわかりにくいです。たまたま通りかかっただけですが、住宅街の駅にいきなりガンダムがあって不思議な感じでした。
ガンダムモニュメント、上井草駅に立つ!
2008/04/23
Twitter日本語化
以前、Twitterにデジタルガレージが出資 今春に日本語版というリリースが出ていましたが、遂にTwitterが日本語インターフェイスを提供し始めた様です。
Twitter日本語版スタート トヨタが広告出稿
反応は色々ですが広告の事や文言の事なんかがずいぶん話題になったりしてます。従来通りの英語設定に変更できる事もあってか、そんなにネガティブな意見は無い様に思いますが、比較的否定的に見える発言もこうなら良いのにとか、ここが嫌とか、感覚的にださいとか、フィードバックとしては率直でわかりやすい気がします。
なんにしろみんな変化を楽しんでる感じですね。Twitterもそれらの声には耳を傾けてそれなりにきちんとした対応をするのではないかと思います。そこをほったらかしにするのもTwitterクオリティーの様なきもしますがw。もう、それでも誰も怒ったりしない雰囲気がTwitterにはありますよね。
さてさて、Twitterでの自分の観測範囲の印象を書きましたけど、個人的には違和感はあるけど{{fn 'インターフェイス変わって違和感が無い方がおかしいんですが。分かりやすくてよいかなと思います。他サービスのレイアウト変更や広告等も自分はかなり寛容というか、気にするのが面倒というのもあるのでしょうけど。
Twitter日本語版スタート トヨタが広告出稿
反応は色々ですが広告の事や文言の事なんかがずいぶん話題になったりしてます。従来通りの英語設定に変更できる事もあってか、そんなにネガティブな意見は無い様に思いますが、比較的否定的に見える発言もこうなら良いのにとか、ここが嫌とか、感覚的にださいとか、フィードバックとしては率直でわかりやすい気がします。
なんにしろみんな変化を楽しんでる感じですね。Twitterもそれらの声には耳を傾けてそれなりにきちんとした対応をするのではないかと思います。そこをほったらかしにするのもTwitterクオリティーの様なきもしますがw。もう、それでも誰も怒ったりしない雰囲気がTwitterにはありますよね。
さてさて、Twitterでの自分の観測範囲の印象を書きましたけど、個人的には違和感はあるけど{{fn 'インターフェイス変わって違和感が無い方がおかしいんですが。分かりやすくてよいかなと思います。他サービスのレイアウト変更や広告等も自分はかなり寛容というか、気にするのが面倒というのもあるのでしょうけど。
2008/04/22
2chのレスをMS Pゴシックで表示するブックマークレット
Macとか、Windowsでもブラウザのフォントをカスタマイズしていると、AAが奇麗に表示されなかったりします。で、特定のエレメントだけMS Pゴシックで表示するブックマークレットを作りました。くだらないですが。
javascript:(function(){var dd=document.getElementsByTagName('dd');for(var i=0;i
Macの場合フォントはどうすんだって事になりますが、MS OfficeをインストールするとMS Pゴシックが付いてきます。
あと、似た様なもので、稀に便利なのがPタグを大きく表示するjavascript。背景色が濃くて文字色が薄いサイトは解像度が大きいと非常に読みづらかったりするのですが、そういう時に読みやすくしてくれます。
javascript:(function(){var p=document.getElementsByTagName('P');for(var i=0;i
特定のタグのスタイルを変更するという点で全く同じですね。
javascript:(function(){var dd=document.getElementsByTagName('dd');for(var i=0;i
Macの場合フォントはどうすんだって事になりますが、MS OfficeをインストールするとMS Pゴシックが付いてきます。
あと、似た様なもので、稀に便利なのがPタグを大きく表示するjavascript。背景色が濃くて文字色が薄いサイトは解像度が大きいと非常に読みづらかったりするのですが、そういう時に読みやすくしてくれます。
javascript:(function(){var p=document.getElementsByTagName('P');for(var i=0;i
特定のタグのスタイルを変更するという点で全く同じですね。
2008/04/20
自分探しが止まらない

非常に新書らしい本で、興味深い現象に対する考察がまとまりよく述べられていて満足度が高い。
自分は何をするべきなのか、今の自分が本当の自分なのかという戸惑いは、なにも最近始まった物ではなくずっと以前からあった。しかし、最近は傾向がやや変わってきていて、自分には何かあるはず、という内なる才能なりやるべき事なりを探してしまう傾向にあるという。
何かの為に何かをするという発想ではなく、自分の収まるべきポジションがありそれを探すという動機大きいらしい。そういった発想になる理由や、そういった自分探しの行動のパターンやセオリー、また今以前との比較、それを商機ととらえて展開されるビジネスや、それらにまつわる幅広い話題を様々な文献や情報にあたり、それをきれいにまとめている。
書いてある内容は非常に納得のいく物で、概念的ながらもその光景が思い浮かぶようであった。
2008/04/17
CMS変更
ちょっとCMSを変更しようと思っていて、データ変換スクリプトとか書いていたんだけど(これは一応できた)、cgi環境で動かすにはインポートが結構辛いみたいで未だに出来ていない。
データ変換自体はアドホックなスクリプト書いていて、MTとかWordPressを調査してたんだけど、WordPressはインポート処理がタイムアウトに引っかかってしまってダメだったり、MTはすべて再構築がタイムアウトにひっかかったりで、面倒くさい状況です。xreaのリソース制限がちょっと厳しいですね。DBをリストアするアプローチの方がいいのかもとか考えてる。
というわけで、データコンバートが面倒なので最近更新してなかったんだけど、もうちょっと時間がかかりそうなので、気にしない事にした。最近こういう事が多いなぁ。
データ変換自体はアドホックなスクリプト書いていて、MTとかWordPressを調査してたんだけど、WordPressはインポート処理がタイムアウトに引っかかってしまってダメだったり、MTはすべて再構築がタイムアウトにひっかかったりで、面倒くさい状況です。xreaのリソース制限がちょっと厳しいですね。DBをリストアするアプローチの方がいいのかもとか考えてる。
というわけで、データコンバートが面倒なので最近更新してなかったんだけど、もうちょっと時間がかかりそうなので、気にしない事にした。最近こういう事が多いなぁ。
2008/04/11
304 Not Modifiedをただただ確認してみる
ふと思い立って。
レスポンスコードの304 Not Modifiedというのはリソースの変更が無いからクライアント側のキャッシュを表示して下さいっていう意味で、クライアントがキャッシュしたファイルが現役どうかをhttpdに問い合わせて、変更が無ければレスポンスコード304を返すので、クライアントはキャッシュを表示するという仕組み。
304の場合はHEAD部だけで、BODY部を送らなくて済むので転送料が減るんですね。場合によってはページ生成処理を省略できる事もあるので、サーバリソースも軽減できるかもしれない。この辺は、アプリケーションの性質次第だけど、大抵は省略できる。
例えば、掲示板のようなアプリだったら、記事の最終投稿時点からデータは変わらないので、新たな投稿が無ければ最終投稿時刻とシグネチャを確認する処理だけで304を返せるので、本文データを取得したりテンプレートにデータを埋め込んだりといった諸々の処理をする必要がない。
仕組みはHTTPリクエストとレスポンスを実際に見れば簡単に分かる。ということで、telnetでhttpdがどういう動作をするのか見てみた。
まずは普通にGETする。これが初めてのアクセス。
* [~/]
iskwrsk $ telnet www.hercules.local 80
Trying 127.0.0.1...
Connected to www.hercules.local.
Escape character is '^]'.
GET /test.html HTTP/1.1
Host: www.hercules.local
Connection: close
HTTP/1.1 200 OK
Date: Wed, 09 Apr 2008 15:46:29 GMT
Server: Apache/2.2.4 (Unix) mod_ssl/2.2.4 OpenSSL/0.9.8e DAV/2 PHP/5.2.1
Last-Modified: Wed, 09 Apr 2008 15:36:21 GMT
ETag: "35ac70-5b-7675c740"
Accept-Ranges: bytes
Content-Length: 91
Connection: close
Content-Type: text/html
test
Connection closed by foreign host.
このデータをキャッシュする。次にアクセスする時は、前回のアクセスで取得したLast-ModifiedとETagをIf-Modified-SinceヘッダとIf-None-Matchとして送る。これをサーバ側で最新のデータとつき合わせて、変化が無ければデータ送らなくてよいですよーという事。
* [~/]
iskwrsk $ telnet www.hercules.local 80
Trying 127.0.0.1...
Connected to www.hercules.local.
Escape character is '^]'.
GET /test.html HTTP/1.1
Host: www.hercules.local
If-Modified-Since: Wed, 09 Apr 2008 15:36:21 GMT
If-None-Match: "35ac70-5b-7675c740"
Connection: close
HTTP/1.1 304 Not Modified
Date: Wed, 09 Apr 2008 15:47:11 GMT
Server: Apache/2.2.4 (Unix) mod_ssl/2.2.4 OpenSSL/0.9.8e DAV/2 PHP/5.2.1
Connection: close
ETag: "35ac70-5b-7675c740"
Connection closed by foreign host.
結果は変化が無いのでレスポンスコードは304でヘッダのみのレスポポンスになります。
これを受け取ったら、クライアント側に保存されているキャッシュを表示します。では、今度は変更があったらどうなるか。
* [~/]
iskwrsk $ telnet www.hercules.local 80
Trying 127.0.0.1...
Connected to www.hercules.local.
Escape character is '^]'.
GET /test.html HTTP/1.1
Host: www.hercules.local
If-Modified-Since: Wed, 09 Apr 2008 15:36:21 GMT
If-None-Match: "35ac70-5b-7675c740"
Connection: close
HTTP/1.1 200 OK
Date: Wed, 09 Apr 2008 15:56:00 GMT
Server: Apache/2.2.4 (Unix) mod_ssl/2.2.4 OpenSSL/0.9.8e DAV/2 PHP/5.2.1
Last-Modified: Wed, 09 Apr 2008 15:54:23 GMT
ETag: "35ac70-5c-b6f3c9c0"
Accept-Ranges: bytes
Content-Length: 92
Connection: close
Content-Type: text/html
test1
Connection closed by foreign host.
タイトルがtest1に書き変わってるだけなんだけど、 Last-ModifiedもETagも違うので新しいデータが返される。クライアントは新しいデータを表示し、キャッシュする。この時のステータスコードは普通に200。
あんまり意識しなくても、普通にWEBは使えるんだけど、この辺をきちんとやると転送料も減るしサーバのリソースも節約できます。転送料はそれなりの規模でサービスを提供すると直接コストに響いてくるし、リソースは節約するとレスポンスが速くなるのでどちらも大切ですね。地味ですが。
まぁ、小規模の場合殆ど変化はないのですが、電力を節約するエコですよ。いや、ホントに(笑)
レスポンスコードの304 Not Modifiedというのはリソースの変更が無いからクライアント側のキャッシュを表示して下さいっていう意味で、クライアントがキャッシュしたファイルが現役どうかをhttpdに問い合わせて、変更が無ければレスポンスコード304を返すので、クライアントはキャッシュを表示するという仕組み。
304の場合はHEAD部だけで、BODY部を送らなくて済むので転送料が減るんですね。場合によってはページ生成処理を省略できる事もあるので、サーバリソースも軽減できるかもしれない。この辺は、アプリケーションの性質次第だけど、大抵は省略できる。
例えば、掲示板のようなアプリだったら、記事の最終投稿時点からデータは変わらないので、新たな投稿が無ければ最終投稿時刻とシグネチャを確認する処理だけで304を返せるので、本文データを取得したりテンプレートにデータを埋め込んだりといった諸々の処理をする必要がない。
仕組みはHTTPリクエストとレスポンスを実際に見れば簡単に分かる。ということで、telnetでhttpdがどういう動作をするのか見てみた。
まずは普通にGETする。これが初めてのアクセス。
* [~/]
iskwrsk $ telnet www.hercules.local 80
Trying 127.0.0.1...
Connected to www.hercules.local.
Escape character is '^]'.
GET /test.html HTTP/1.1
Host: www.hercules.local
Connection: close
HTTP/1.1 200 OK
Date: Wed, 09 Apr 2008 15:46:29 GMT
Server: Apache/2.2.4 (Unix) mod_ssl/2.2.4 OpenSSL/0.9.8e DAV/2 PHP/5.2.1
Last-Modified: Wed, 09 Apr 2008 15:36:21 GMT
ETag: "35ac70-5b-7675c740"
Accept-Ranges: bytes
Content-Length: 91
Connection: close
Content-Type: text/html
test
test
Connection closed by foreign host.
このデータをキャッシュする。次にアクセスする時は、前回のアクセスで取得したLast-ModifiedとETagをIf-Modified-SinceヘッダとIf-None-Matchとして送る。これをサーバ側で最新のデータとつき合わせて、変化が無ければデータ送らなくてよいですよーという事。
* [~/]
iskwrsk $ telnet www.hercules.local 80
Trying 127.0.0.1...
Connected to www.hercules.local.
Escape character is '^]'.
GET /test.html HTTP/1.1
Host: www.hercules.local
If-Modified-Since: Wed, 09 Apr 2008 15:36:21 GMT
If-None-Match: "35ac70-5b-7675c740"
Connection: close
HTTP/1.1 304 Not Modified
Date: Wed, 09 Apr 2008 15:47:11 GMT
Server: Apache/2.2.4 (Unix) mod_ssl/2.2.4 OpenSSL/0.9.8e DAV/2 PHP/5.2.1
Connection: close
ETag: "35ac70-5b-7675c740"
Connection closed by foreign host.
結果は変化が無いのでレスポンスコードは304でヘッダのみのレスポポンスになります。
これを受け取ったら、クライアント側に保存されているキャッシュを表示します。では、今度は変更があったらどうなるか。
* [~/]
iskwrsk $ telnet www.hercules.local 80
Trying 127.0.0.1...
Connected to www.hercules.local.
Escape character is '^]'.
GET /test.html HTTP/1.1
Host: www.hercules.local
If-Modified-Since: Wed, 09 Apr 2008 15:36:21 GMT
If-None-Match: "35ac70-5b-7675c740"
Connection: close
HTTP/1.1 200 OK
Date: Wed, 09 Apr 2008 15:56:00 GMT
Server: Apache/2.2.4 (Unix) mod_ssl/2.2.4 OpenSSL/0.9.8e DAV/2 PHP/5.2.1
Last-Modified: Wed, 09 Apr 2008 15:54:23 GMT
ETag: "35ac70-5c-b6f3c9c0"
Accept-Ranges: bytes
Content-Length: 92
Connection: close
Content-Type: text/html
test
test
Connection closed by foreign host.
タイトルがtest1に書き変わってるだけなんだけど、 Last-ModifiedもETagも違うので新しいデータが返される。クライアントは新しいデータを表示し、キャッシュする。この時のステータスコードは普通に200。
あんまり意識しなくても、普通にWEBは使えるんだけど、この辺をきちんとやると転送料も減るしサーバのリソースも節約できます。転送料はそれなりの規模でサービスを提供すると直接コストに響いてくるし、リソースは節約するとレスポンスが速くなるのでどちらも大切ですね。地味ですが。
まぁ、小規模の場合殆ど変化はないのですが、電力を節約するエコですよ。いや、ホントに(笑)
2008/04/07
RubyCocoa挫折
[[RubyCocoa入門|http://limechat.net/rubycocoa/tutorial/]]を読んで、とりあえずチュートリアルをやろうと思ったんだけど、しょっぱなからアシスタントにRubyCocoaのテンプレートが表示されなくて困った。
RubyCocoaをインストールし直したり、Rubyをenable-share付けてビルドしたり、Xcodeのバージョンを上げたり(これが原因か?)してやっとこさチュートリアルの本題に入りかけたんだけど、どうやら解説にはXcode3が使われているらしくて、OSX Tiger Xcode2.5の自分の環境ではInterface Builderが違いすぎて全くついて行けない。
とにもかくにもNSObjectコントローラーを見つけられないという体たらくでどうにも進めがたい。結局2.5を今から頑張って覚えても先が無いしOSX Tigerには3.0はインストールできないので、現時点では諦めた。無念。
そろそろLeopardにしないと不便を感じ始める頃かもしれない。しかし、ibookに入れる気は無いし、かといってMacBook買うタイミングでもないんだよな。
RubyCocoaをインストールし直したり、Rubyをenable-share付けてビルドしたり、Xcodeのバージョンを上げたり(これが原因か?)してやっとこさチュートリアルの本題に入りかけたんだけど、どうやら解説にはXcode3が使われているらしくて、OSX Tiger Xcode2.5の自分の環境ではInterface Builderが違いすぎて全くついて行けない。
とにもかくにもNSObjectコントローラーを見つけられないという体たらくでどうにも進めがたい。結局2.5を今から頑張って覚えても先が無いしOSX Tigerには3.0はインストールできないので、現時点では諦めた。無念。
そろそろLeopardにしないと不便を感じ始める頃かもしれない。しかし、ibookに入れる気は無いし、かといってMacBook買うタイミングでもないんだよな。
2008/04/04
「食い逃げされてもバイトは雇うな」なんて大間違い 禁じられた数字〈下〉

[[食い逃げされてもバイトは雇うな(上)|http://d.bulkitem.com/20070709.html#p01]]の下巻です。今回は事例が小説で紹介されたりして、とても読みやすかったです。特に2章の利益調整の話は私の全く知らなかった話なので、新しい知識を得たという点でも満足度が高かったです。計画信仰というのは不合理だなというのがよくわかりました。
全体の構成としては、小説によるケーススタディと解説というパターンも加わりましたが、上巻同様にクイズ形式の問答もあり、読みやすさに関して本当に工夫されていると思います。
内容は、事実だけど特定の意図を持って掲示される数字の罠についての種明かしが主題で、例が随所に盛り込まれているのですが、これが丁度誰でも体験した事がありながらもまかり通っている微妙にうさん臭い例が多く、それに対して、これはこういう意図があり掲示されているけれど、前提条件の違いや、数字の根拠があやふやな物、全く関係ない数字を比べて誤解させる物であるという話をスパッと解説してくれるので、痛快です。
上巻を読んでなくても全く問題ありませんし、内容的にも下巻の方が面白いと思うので、上巻を読んで下巻を読むという順序にこだわる事無く、まだ上巻を読んでいない人はとりあえず下巻を読む、面白かったら上巻も読むといった読み方もお勧めです。
2008/04/03
あさましくエントリーの最後に広告を挿入するtDiaryのプラグイン
そのまんまなんだけど、今のこの日記の様に広告を挿入するプラグインです。
add_adsence.rbという名前で保存して、プラグインディレクトリにアップロードして、管理画面から有効にした。名前は実行タイミングを決めるので、add_section_leave_procをフックしている他のプラグインの名前によっては0adとかzadとかに調整した方が良いかもしれないです。何を行っているのか伝わるだろうか…自分でも分かり難いとは思いますが、そういう事です{{fn 'tDiaryユーザーには伝わる様な気がする。。大抵は気にしなくていい事です。
アドセンスの広告ユニットは1ページに最大で3つまでの表示なので、3セクション以降には広告を表示しない様になっています。
@add_adsence_counter = 0
add_section_leave_proc do |date, index|
if @mode == 'day' or @mode == 'month' or @mode == 'nyear' and !@cgi.mobile_agent?
((@add_adsence_counter += 1) <= 3) ? add_adsence_code() : ''
end
end
def add_adsence_code
return <
ここにアドセンスのコードを貼付ける
EOAD
end
ちなみに、私は設定用のインターフェイスとかを作るつもりは無くて、使う人が自分で自分のアドセンスのコードを埋める作業を必要とする{{fn '自分でアドセンスのコードを埋め込まないと広告ではなく「アドセンスのコードを貼付ける」と表示されますよ。ので、スニペットとして貼付けときます。使いたいという奇特な方はコピペして使ってください。
add_adsence.rbという名前で保存して、プラグインディレクトリにアップロードして、管理画面から有効にした。名前は実行タイミングを決めるので、add_section_leave_procをフックしている他のプラグインの名前によっては0adとかzadとかに調整した方が良いかもしれないです。何を行っているのか伝わるだろうか…自分でも分かり難いとは思いますが、そういう事です{{fn 'tDiaryユーザーには伝わる様な気がする。。大抵は気にしなくていい事です。
アドセンスの広告ユニットは1ページに最大で3つまでの表示なので、3セクション以降には広告を表示しない様になっています。
@add_adsence_counter = 0
add_section_leave_proc do |date, index|
if @mode == 'day' or @mode == 'month' or @mode == 'nyear' and !@cgi.mobile_agent?
((@add_adsence_counter += 1) <= 3) ? add_adsence_code() : ''
end
end
def add_adsence_code
return <
ここにアドセンスのコードを貼付ける
EOAD
end
ちなみに、私は設定用のインターフェイスとかを作るつもりは無くて、使う人が自分で自分のアドセンスのコードを埋める作業を必要とする{{fn '自分でアドセンスのコードを埋め込まないと広告ではなく「アドセンスのコードを貼付ける」と表示されますよ。ので、スニペットとして貼付けときます。使いたいという奇特な方はコピペして使ってください。
レバレッジ時間術

時間の有効活用の本。新書にはあんまり期待しない癖の様な物がつきつつあるんだけど、この本はさっぱりした文章とは裏腹に説得力のある内容でした。
何をするかより、無駄な事をしない、本当はやるべきではない事を見つけて削るといったアプローチで、自分も実践している事もあって個人的にはかなり納得。
読んでみて自分なりの解釈で書き留めておきます。少しまとまりが無いですが、何となく内容が想像できると思います。
*やる事をこなしていくのではなく、やる事、やりたい事、をやる時間を先に決めてしまう。そうする事で、それまでにいかにして現在抱える課題をこなすかという工夫の余地が生まれる。
*同じ事をするにしても、時間を変えたり、場所を変えたりする事で、全く違う価値の物に変えてしまう。例えば、混雑していない朝早くの電車に乗ることで通勤時間を読書時間に変えてしまうとか。
*本やテレビ等も始まりから終わりまで見るのではなく、本なら目次とリードを読んで必要な部分を読む、テレビなら録画して1.5倍速で見たり、本当に見るべき所だけを見る。
*せっかく出来た時間を無為に過ごしてしまわない様に、いつ何をやるかという時間割を決めてしまう。所々発生してしまう小さな空き時間は、サクッとこなせる様な情報を摂取して有効活用する。雑誌等は全て読まずピックアップした記事に印をつけておき、そういう小さな時間に読む様にする。
特に折角本を買ったのにもったいないと初めから終わりまで全部読むのは、その為に消費される時間の方がもったいないと言う点は納得でした。
2008/04/02
鹿男あをによし

ドラマ化されていた事と、[[森見さんがブログでちょくちょく触れていた|http://d.hatena.ne.jp/Tomio/20080117#p1]]ので読んでみたけど、これが面白かった。
大学を追われる様にして、奈良の女子高で2学期の間の9月から11月の間教鞭をとる事になった主人公が、赴任早々人間の言葉を話す雌鹿に「鹿の運び番」に選ばれ、地震を納める為の宝「目」を求めて奔走するというお話。
このあらすじではちょっと何が面白いのか分かり難いんだけど、歴史の話や大和杯、地震を沈める目の事、登場人物のマドンナや堀田に鹿に藤原君と面白い要素がちりばめられていて、間延びする事が無い。
ドラマはちらっと見かける程度で、1話たりともまともに見た事が無いんだけど見ておけば良かったなぁと少し後悔している。
2008/04/01
今週が今年の何週目か表示するワンライナー
本当は、javascriptを使ってブックマークレットとかにしたかったんだけど、結構面倒そうなのと、大した使途が無いためやめる事に。
rubyではとっても簡単{{fn 'ExcelのWEEKNUM関数とかの方が一般的には楽だろうけど。に確認できるんだけど、惜しいなぁ。まぁ、標準ライブラリ様様だけど。
ruby -r date -e 'puts Date.today.cweek'
ただのメモです。
rubyではとっても簡単{{fn 'ExcelのWEEKNUM関数とかの方が一般的には楽だろうけど。に確認できるんだけど、惜しいなぁ。まぁ、標準ライブラリ様様だけど。
ruby -r date -e 'puts Date.today.cweek'
ただのメモです。
登録:
投稿 (Atom)




