いろいろ
Seize the day.
2007-05-01 [長年日記]
■ [comp] 海外逃亡していました (嘘です)
GW 前半戦の初日,職場のネットワークが不通になった.もしサーバの不調なら休みの間になんとかしないとと思い,というかむしろ休みの間に自宅からつないで仕事をするつもりだったので,微熱を我慢して雨の中休日出勤.
しかしサーバは全く無傷で,単にフロアの光スイッチがいかれているだけらしく,そのスイッチは担当者が出勤してこないとどうにもならない.
つまり当面は手のうちようがない.
というわけで連休中は仕事はしないことに決意.
もうひとつ,考えなければならないのがメールだ.
私はメールを職場の fetchmail に取得させ,procmail に通してからメーラに渡して読んでいるので,職場のネットワークが止まるとメールが読めなくなる.
まあこれは Gmail かなんかに転送してそっちで読めば済む話だ.
しかしこの時点でもうなんかすべてがめんどくさくなってしまっていた私は,あえてメールを放置することにした.
もういいや.どうせ今は緊急の案件は何もないはずだし.つーか GW だし.海外にでも行ったことにしてしまえばいいやー.
つーわけで,勝手に海外に行ったつもりになって,仕事のメールから完全に解放された 3 日間を過ごした.初日はなんとなく落ち着かなかったけど,次の日くらいからなんか本当に海外にでも行ったかのような解放感がありましたよ.いやー.いいね.たまにはこういうの.
ちなみにネットワークは連休明けにあっさり回復し,メールボックスにはたいしたメールは来てませんでした.というかネットワーク不通による cron のエラーメールが何千通も来てたのには参ったけど.
2007-05-03 [長年日記]
■ [misc] Piled Higher and Deeper 3 出ました
1 巻 [2005-01-29],[2005-05-19] に引続き 3 巻出ました.
作者から直接買うと,サイン & アレゲなマグネットつきでっせ.
ちなみに知人に貸した 1,2 巻がいっこうに戻って来る気配がない (催促しているにも関わらず) ので,もうこの際 1,2 巻も買い直すべきか検討中.
2007-05-04 [長年日記]
■ [blog] 旧ドメイン更新停止
というわけで [2007-04-22],旧ドメインのほうはこれをもって更新停止します.近いうちにコンテンツも消す予定なのでよろしく.
本日のリンク元 | 1 | TrackBack(0)
2007-05-05 [長年日記]
■ [blog] 移転先へのリンクを生成する ErrorDocument を作る
えーと,というわけで [2007-05-04],旧ドメインは更新を停止し,さらにコンテンツもばっさり消してしまいました.古いほうの RSS にアクセスしている方,大丈夫ですかね.とか書いても「いない人いますかー」みたいな虚しさが残るな.さて,旧ドメインのコンテンツを消す際,移転先 (このドメイン) へのリンク (「○○に移転しました」云々) を残しておきたいと思った.ページ数が少なければ,各ページに移転先を書いておくという古典的な方法でいける.問題はこのブログだ.Permalink だけで膨大な量があるし,クエリ入り URL まで含めたらお手上げだ.単にまとめてブログのトップページに飛ばす手もあるけど,それはちょっと不親切というものだ.
つーわけで,ErrorDocument を活用してやることにした.たぶん,よくやられてる方法なんだと思うし,もっと洗練された方法があったりするかも知れないけど.
まず .htaccess に
ErrorDocument 404 /file_not_found.cgiと書いておく.これで,存在しないページにアクセスがあったら 404 を返して file_not_found.cgi にリダイレクトする.
file_not_found.cgi は以下のようになっている (実際に使っているものには英語の注意書きも載っている).
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
print "<html><head>\n";
print "<title>Moved</title>";
print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-jp\">";
print "<link rel=stylesheet type=\"text/css\" href=\"http://nao.s164.xrea.com/hoge.css\"><STYLE TYPE=\"text/css\">@import url(http://nao.s164.xrea.com/hoge.css);</STYLE>";
print "</head><body>\n";
$uri = $ENV{'REQUEST_URI'};
$oldsvr = $ENV{'SERVER_NAME'};
$newsvr = "nao.s164.xrea.com";
print << "HEADER";
<h2>このコンテンツは以下に移転しました</h2>
http://$oldsvr$uri<br>
は<br>
<a href="http://$newsvr$uri">http://$newsvr$uri</a><br>
に移転しました.
<p>
<a href="http://$newsvr">Top Page</a>
<hr>
<address>nao(at)s164.xrea.com</address>
HEADER
print "</body></html>\n";
つまり REQUEST_URI で移転先を生成しているというわけだ.難点は,本当にもともと存在しない URI を指定されてもリンク先を生成してしまうという点だけど,まあそれはほっとけばいいかな(ぉHEAD -S で確認したらちゃんと 404 が返っていることがわかったので,bot ももう来なくなるだろう.
2007-05-06 [長年日記]
■ [blog][comp] buzzurl や del.icio.us のブックマーク件数を JSON で取得して表示する Ruby スクリプト
はてなブックマーク [2007-01-28],livedoor クリップ [2007-02-10] に続いて,buzzurl と del.icio.us のブックマーク件数を取得する Ruby スクリプトを書いてみた.API がなくて JSON しか提供されてないので,自分の生半可な知識では手のつけようがない.というわけで,JSON parser というのをありがたく頂戴してくる. まず,buzzurl 用は以下.
#!/usr/bin/ruby
#http://webos-goodies.jp/archives/51019710.html
require 'jsonparser'
#require 'open-uri'
require 'net/http'
class BuzzurlBookmarkCounter
def count urls
api = "/api/counter/v1/json?url="
urls.each_with_index{|url, i|
api = api + "&url=" unless i == 0
api = api + url
}
api = api.gsub(/\#/,'%23')
src = ''
Net::HTTP.version_1_2
Net::HTTP.start('api.buzzurl.jp', 80) {|http|
response = http.get(api)
src = response.body
}
# open(api) do |file|
# src = file.read
# end
parser = JsonParser.new
json = parser.parse(src)
result = Hash.new
json.each do |item|
result.store("#{item['url']}", "#{item['users']}".to_i)
end
urls.each do |item|
result.store(item, 0) unless ( result.key?(item) )
end
return result
end
end
if __FILE__ == $0
if ARGV.size != 1
print "usage: #{__FILE__} <urls>\n"
exit
else
result = BuzzurlBookmarkCounter.new.count(*ARGV)
result.each do |url, count|
puts "#{url} #{count}"
end
end
end
del.icio.us 用は以下.
#!/usr/bin/ruby
#http://webos-goodies.jp/archives/51019710.html
require 'jsonparser'
#require 'open-uri'
require 'net/http'
require 'kconv'
class DeliciousBookmarkCounter
def count urls
api = "/feeds/json/url/blogbadge?url="
urls.each_with_index{|url, i|
api = api + "&url=" unless i == 0
api = api + url
}
api = api.gsub(/\#/,'%23')
src = ''
Net::HTTP.version_1_2
Net::HTTP.start('badges.del.icio.us', 80) {|http|
response = http.get(api)
src = response.body
}
# api = "http://badges.del.icio.us" + api
# open(api) do |file|
# src = file.read
# end
# src = src.toeuc
src = src.tojis
parser = JsonParser.new
begin
json = parser.parse(src)
rescue Exception => e
# return e.backtrace
result = {"" => 0}
return result
end
result = Hash.new
json.each do |item|
result.store("#{item['url']}", "#{item['total_posts']}".to_i)
end
urls.each do |item|
result.store(item, 0) unless ( result.key?(item) )
end
return result
end
end
if __FILE__ == $0
if ARGV.size != 1
print "usage: #{__FILE__} <urls>\n"
exit
else
result = DeliciousBookmarkCounter.new.count(*ARGV)
result.each do |url, count|
puts "#{url} #{count}"
end
end
end
URL を引数に取ればコマンドラインから使えるし,以下のような検証用スクリプトも多分使えると思う (はてな,livedoor 用のコードも入ったままですが).
!#/usr/bin/ruby
require 'hatena_bookmark_counter'
require 'livedoor_clip_counter'
require 'delicious_bookmark_counter'
require 'buzzurl_bookmark_counter'
pml = "http://nao.s164.xrea.com/td/2007-04-19.html"
url = [pml,"#{pml}#p01","#{pml}#p02" ]
total = 0
total2 = 0
total3 = 0
total4 = 0
result = HatenaBookmarkCounter.new.count(url)
result2 = LivedoorClipCounter.new.count(url)
result3 = DeliciousBookmarkCounter.new.count(url)
result4 = BuzzurlBookmarkCounter.new.count(url)
puts "-- hatena\n"
puts result
result.each do |url, count|
total += count
end
puts total
puts "-- livedoor\n"
puts result2
result2.each do |url, count2|
total2 += count2
end
puts total2
puts "-- del.icio.us\n"
puts result3
result3.each do |url, count3|
total3 += count3
end
puts total3
puts "-- buzzurl\n"
puts result4
result4.each do |url, count4|
total4 += count4
end
puts total4
ちなみに Ruby の勉強は遅々として進んでないので,コードとしてはダメダメなはずです.すいません.なんで open-uri じゃなくて NET:HTTP でやっているかというと,del.icio.us の場合になぜかうまく動かなかったから.謎.buzzurl のほうは open-uri でいけると思う.
あと,3 日間くらいハマッたのが,del.icio.us の JSON フィードにマルチバイト文字が含まれてる場合に,JSON parser が Syntax Error を投げてくる件.UTF-8 なフィードしか扱わないはずなのに,なぜかフィードを JIS にしたら解決してしまった.激しく謎.しかも再現性がどうもあやしく,EUC にして解決したこともあった.なので,とりあえず例外が来たらダミーを返すようにしてあります.
上記 2 件の謎は,単独コードでテストしたときには発生しないので,tDiary の何かと干渉してたりするのかも知れない.
あと,SBS 側のサービスが死んでた時のために,ほんとは Timeout::Error をちゃんと拾ってあげるべきなんだろうね.さぼってるけど.
さて,おかげでトップページが随分重くなってしまって,たまにコンテンツ生成に失敗するようになってしまったので,個別記事へのアクセス時にのみ,ブックマーク件数を表示させるようにした.単に tDiary の comment_new から comment_description に移しただけだが (使い方間違ってる),だいぶ軽くなったとは思います.
どんな感じになったのかは,とりあえずうちの唯一のホッテントリ [2007-04-19] でも眺めてみて下さいw
2007-05-13 [長年日記]
■ [misc] 出張
秋田に出張していました.新幹線が死ぬほど遅いと聞いていたので ANA で.行きはエアバス 320,帰りはボーイング 767.エアバス乗ったのすげー久しぶりだ.

30 分ほど確保できた自由時間で撮った,唯一の観光地らしい写真.

秋田の郷土料理に関してはもう食べ尽くした感.今回行った店のリスト.
- http://www.castle-hotel.co.jp/restaurant/rest05.html
- http://r.gnavi.co.jp/t026300/
- http://www.e-alve.com/shop/goukura.html
- http://r.gnavi.co.jp/t089205/
- http://www.ekipara.com/html/Indication/ShopHtml/KA020R01_047.html
きりたんぽも旨かったけど,実はしょっつる鍋の出汁が激ウマなことがわかった.つーか,しょっつる鍋にきりたんぽを入れたら最強なんじゃないか,と思ったが,秋田の人からするとやはり邪道なんだろうか.
北日本から空路で帰る時は,なるべく夕方の便の右列窓側に座るようにしている.日本海 (今回は雲海) に沈む夕日,富士山,お台場,東京タワーなどが見えてお勧め.
ちなみに,東京タワーを見ると帰って来たなーと思う.東海道新幹線も,東京モノレールも,終着駅の手前で車窓から東京タワーが見える (最近は汐留のビル群に邪魔されてしまうようになったが).これを見ないとなんとなく帰って来た気がしないので,羽田を出る時は京急でなくモノレールを使うようにしている.ちょっとした儀式である.
といっても実は東京タワーにのぼったことなかったりするけど.
写真は,浜松町駅前から見えた東京タワーと金星.

2007-05-14 [長年日記]
2007-05-15 [長年日記]
■ [comp] 今の PC はプログラミングに至るまでの障壁が高すぎる
いまどきの子供たちは,どうやって「初めてのプログラミング」と出会うものなんだろう? まず VisualBasic を買ってきて,同時に入門書も買ってきて,ソフトをインストールして,必要な SDK をインストールして, IDE の使い方を覚えて,入門書を適切なところまで読み進めて……そこまでしてようやくできるのが味気ないダイアログアプリケーションだったりしたら……そもそもプログラミングを学んでみようなんて思ってくれるかな?激しく同意.
昔のパソコンは,電源を入れるだけで BASIC が "OK" と返してくれた。1行コマンドを打ち込むだけでパソコンが歌ってくれたりした。プログラミングはたったの数行だけでも十分に刺激的なもので,そういった刺激と触れ合う機会が,常に子供たちの近くに置かれていた。
PC-8801 の N88-BASIC でプログラミングを覚えた身としては,あの「電源を入れただけでプログラミング環境が立ち上がっている」 (というかそれ以外の選択肢がない) という状況だったからこそ,プログラミングに手を染めた気がする.もし,当時の自分に与えられたのが現在の最新鋭の Vista PC だったとしたら,自分はプログラミングに興味を持っただろうか? ブログや Mixi はやってみたかも知れないが,プログラミングには手を出さなかったかも知れない.
まだ Unix ならたいていコンパイラがついているし (ついてない Linux を触ったことはあるが…),各種スクリプトもあるし,プログラミングまでの障壁はそんなに高くない.しかし Windows の場合,VC++ を入れるだけで一苦労 [2007-03-23].さらに一番簡単なダイアログボックスを出すだけでも,ウィンドウプロシージャがどうとか,変なデータ型が大量に出てきたりとか,100 行くらいは軽く必要で,大人でもげんなりする.
そういう意味で,この Hackety Hack は面白いと思う.いきなりウェブアプリから始めるってのはどうかという気もするけど,最近の子供はむしろそっちからプログラミングの世界に入っていくのかな.
2007-05-17 [長年日記]
2007-05-20 [長年日記]
本日のリンク元 | 2 | TrackBack(0)
2007-05-22 [長年日記]
■ [misc] スターバックス抹茶ティーラテ・リキッドの罠
というものを見つけて, 一瞬カートに入れそうになったが,Ingredients: An infusion of (water, matcha and other green teas), organic cane sugar, honeydew juice concentrate, natural fruit flavors, gum, Arabic, xanthan gum, guar gum and citric acid.というのを見て速攻で萎えた.
なんでメロン (honeydew) 果汁とかフルーツフレーバーとか増粘多糖類とかが入ってるんだ.何を考えてるんだいったい.
味のほうはかなりやばいらしい. それにしても,
With guidance from ancient scrolls and a haiku or two, Tazo(R) adds hints of honeydew melon and tropical fruits to create a combination that, when mixed with milk, is equally inspiring served hot or over ice.なんだこりゃ.古代の巻物? 俳句??
…これを書いた人,何かだまされてるんではないか.大丈夫か.もしかして「じゃいしょく」って名前の巻物だったりしないか.
2007-05-23 [長年日記]
■ [misc] 教員免許更新制で「ペーパーティーチャー」はどうなる
教育 3 法の改正で「教員免許の有効期限を 10 年とし,講習を受けないと更新されない」というニュースを聞いて,うげ,と思った.高校の教員免許を持っているからだ.取得しただけで別に教職にはついていないいわゆる「ペーパーティーチャー」なわけだけど,この先いつ職を失うかわからないご時世 (いや,マジでいつニートになってもおかしくない状況なんすよ),教員免許は最後の手段だ.それが勝手に切れるとは.講習と言ったって運転免許みたいに数時間で終わるのならいいけど,仕事を休んで長期受講しないといけなかったりしそうな悪寒. とか思ってたら,文科省が考えを固めたというニュース.読んでみると,予想していた以上にひどい状況であることがわかった. まとめると,- 教職に就いていない人の免許は取得後 10 年で「自動失効」する.デフォルトでは更新手続を行っても更新できず,「回復講習」を受けて「再授与を申請」しないといけない (うわ,ひでえ.授与申請ってさらって書いてるけど,あれすごく大変なんですよ.)
- さすがにそれは可哀想なので,「都道府県教委が通常作っている教員候補者リストに載っている人」は,通常の教員と同じく,講習を受ければ更新できることにした
このため同省は教委に対し、ペーパーティーチャーを含む免許取得者で教職に意欲を持っている人をできる限り把握し、人材を機動的に活用する体制を整備するよう求めていく。とあるけど,今後,教委からアンケートでも来るのかね.でもあれだけ苦労して取得した免許だから,リストに載せて欲しいかと問われたら大半がイエスと答えて,結局リストは形骸化するんではないだろうか.
それとも,実際に代替教員としていつでもスタンバイ OK な人材だけがリストに載れるのだろうか.だとすると自分を含め相当な人数が失効するね.これじゃあ教員免許取る学生がかなり減るだろうなあ.
ああ,最近のエントリ嘆いてばっかりだ orz
2007-05-28 [長年日記]
■ [misc][science] シュレディンガー音頭のページがまたなくなっている件
いったんなくなった (98 年) 後に復活した (00 年) のがまたなくなっている… orz で,当時あった代替ページがまた復活している…. こうして本家と代替が今後も数年おきに現れては消えるのだろうか….代替ページも頑張っているんだけど,主要ネタだけしかなくて,個人的に好きだったブラケットとかが載ってないのが惜しい.
Internet Archives には一応残っているが,肝心のアニメ GIF がないのが非常に残念. 解説ページの静止画から在りし日の GIF アニメの片鱗を窺い知ることができる (それから,音声ファイルはダウンロードできる!). ともかく復活を切に希望します.
2007-05-29 [長年日記]
2007-05-30 [長年日記]
■ [comp] 音声認識は仮名漢字変換のインタフェースを参考にしたらどうか
音声認識でプログラミングしている.…笑い殺す気か. しかし,Capital じゃなくて Upper Case とかはダメだったんですかね.後半,候補を表示させてそこから選ぶ戦略になってるが,最初からそういう機能がついていれば良いのでは.実際,WISS のベストペーパーにそういうのがあった. 候補一覧表示は仮名漢字変換では当り前の機能だけど,音声認識の開発者は英語圏の人間だからその手のインタフェースは馴染みが薄いのだろう.しかし仮名漢字変換と音声認識は入力のモダリティが違うだけで,あとは全く同等のことをやっているに過ぎない,ということに気付けば,もっと快適なユーザインタフェースを設計できるのではないだろうか,と思ったり思わなかったり.一覧候補以外にも応用できる技術はあるんじゃないかと思うなー.
2007-05-31 [長年日記]
以下の広告はサーバによって自動的に挿入されています.
Copyright © 2004-2006, nao. All rights reserved.



* itochan [404ではなくて301(Moved Permanently)の方が適切なのでは?]
* nao [コメントどうもです.当時,ご指摘どおり 301 も検討したのですが, URI が変わったということを認識して欲しかっ..]