2005年12月8日木曜日

動画につっこみができる「シムソンズ ムービーブログ」

動画の作成、配信の部分をお手伝いさせていただいた、映画「シムソンズ」の公式ムービーブログ「シムソンズ ムービーブログ!」で動画にツッコミを入れることができるという、ちょっと面白いことをやっています。

エントリーにコメントをつけると、そのコメントを映画の字幕のように、動画と一緒に流すことができるという機能です。動画を見るだけでなくて、いじれるってのが、そのブログに参加してる感を出せていいですよね。


映画の方も、オリンピックにカーリング女子日本代表として出場したチーム「シムソンズ」の実話をもとにした作品で、北海道の北の方に住む普通の女子高生4人がチームを結成し、五輪を目指すまでを描く青春映画で、スウィングガールとかウォーターボーイズのようなノリの映画みたいです。
この4人組を演じるのは加藤ローサ、星井七瀬、高橋真唯、藤井美菜。
さらに大泉洋もでてたりして、出演者も魅力的。

公開が本当に楽しみです。

via: 何を見ているのでしょうか? 15秒: 映画 シムソンズ ムービーブログ!



2005年12月1日木曜日

WindowsXPで音量を調節できなくなったとき

タスクバーに音量アイコンが表示されなくなっていたのに気づいて、「コントロールパネル」 -> 「サウンド、音声、およびオーディオデバイス」 -> 「音声」タブから「タスクバーに音量アイコンを配置する」をチェックして、アイコンを表示するように設定しようとしたら、

>
[ボリューム コントロール] がインストールされていないので、音量の調節をタスク バーに表示することはできません。コントロール パネルの [プログラムの追加と削除] を使ってインストールしてください。
<

と怒られて音量を調整できなくなってしまいました。

なんでかわかりませんが、とりあえず原因を調べてみると、MSのサポートサイトに以下のような記事がありました。



通知領域に [音量] アイコンが表示されず、追加しようとするとエラー メッセージが表示される



どうやら、Sndvol32.exe ファイルが破損してしまったようです。
ページに書かれている通り、ファイルを展開しようと思ったんですが、僕のLet'sノートにはWindowのCDがついてません。どうしたものかともう少し調べてみると、dynabookのサポートページで同じ問題への対処方法を発見。



タスクバーに音量アイコンが表示されない<Windows(R)XP>: dynabook.comサポート情報



これによるとdynabookでは、修復に必要なファイル「sndvol32.ex_」がc:\windows\i386にあるようなので、Let'sノートにもあるかなと見てみたら、案の定ありました。

あとはこのページの説明にしたがって、
>

cd c:\windows\i386
expand -r sndvol32.ex_ c:\windows\system32
exit
<

して再起動したら、音量を調節できるようになりました。
めでたしめでたし。




2005年11月23日水曜日

ライブドアでセミナー

12月13日(火)にライブドアで興味深いセミナーが開催されるみたいです。

ライブドア|次世代テクノロジーセミナーシリーズ

ぜひ聞きたかったんですが、出張に行ってて申し込み受け付けているのに気づかず、すでに締め切りに。。。
キャンセル待ちってないのでしょうかw


2005年11月14日月曜日

PORTABLE MEDIA EXPO雑感

オンタリオで2日間行われたPORTABLE MEDIA EXPOに行ってきました。
会場全体は想像していたよりこじんまりとしてました。中にはPodcastを配信しているブースや、iPod用のケースや、装飾品を展示しているブース、Podcast用の音声を作成するソフトを展示しているブースなど、様々なジャンルのブースが60個くらい入っていましたが、そのほとんどがPodcastに関するものでPORTABLE MEDIA EXPOというよりPodcast EXPOといった感じでした。

その中で印象的だったのが、ブース内で番組を撮影し、ライブ配信していた、「LA Podcaster」や「PodcastPickle.com」のブース。

動画はLA PodcastersとPodcastPickle.comでの番組撮影の様子です。
LA Podcasterのブースでは撮影していたら、話しかけられて、あたふたしてしまいました。





来場者は、1日目は金曜で平日ということもあってか、そんなに多いとは感じませんでしたが、2日目の今日は、かなりの人でにぎわっていました。特にKFI AM640の公開番組を収録していたブースはIT ConversationのDoug Kayeが出演していたからか、恐ろしく人が集まっていました。アナウンスによると22カ国、5000人近くの人が会場に訪れたそうです。

今回のイベントを通して、感じたのは本場アメリカのPodcastは個人主導であるようだということ。
日本では、企業がPodcastを使ってマーケティングに成功とか、ラジオ局が次々にPodcasing開始というような話題の方が取り上げられがちですが、アメリカでは目立ちたい、情報発信したい、面白いことしたいという情熱を持った個人が人気Podcasterになって情報を発信する一方、大手ラジオ局でPodcastingを配信してるところは実はそんなに多くなかったりするようです。

ただ、アメリカでもPodcastを使ってどうやってお金を稼ぐかということについては、まぁこれから、考えるよっというような感じで、その部分に関してはまだ答えは見つかってなくて、試行錯誤の段階なのかなというのも感じました。

会場内を撮影した写真をいくつかこちらにアップしました。



2005年11月9日水曜日

PORTABLE MEDIA EXPOに行ってきます

11月11~12日に開催されるPORTABLE MEDIA EXPOに行ってきます。
今日の夕方の便で現地に飛んで、15日に帰国します。

ポッドキャスティングはブログと同じくらいにポピュラーなものになるのか?、現在どれくらいポッドキャスティング界隈が盛り上がっているのか?そんなところを肌で感じてきたいと思ってます。




2005年11月6日日曜日

Sledgeドキュメント公開!!

Sledgeのドキュメントをにぽたんさんが公開されてます。

Sledge ドキュメント - にぽたん研究所


先日のshibuya.pmテクニカルトーク#6でのCatalystマンセームードに反抗すべく公開ということですが、Sledgeマンセーな僕にとってはうれしい限り。この勢いでドキュメントが整備されて、SledgeをCPANに登録!ってことにはならないでしょうか。。なるといいなぁ。。

そういえば前に社内でSledgeのドキュメント作ろうって話になって、書き始めたけど結局完成しなかった、ってことがあったんですが、あれどうなってるんだろう?





2005年11月5日土曜日

shibyya.pm テクニカルトーク#6に行ってきました。

shibyya.pm テクニカルトーク#6に行ってきました。告知から開催までの期間がかなり短かったにもかかわらず、会場は満員。少し遅れていったのですが、席は満席で立ち見になってしまいました。

これが会場が満席の様子。120人強いたみたいです。さすが世界最大のperl mongersです。恐るべし。


今回印象に残ったのは、発表直前までデモ用のコードをいじってたnaoyaさんの後ろ姿でしょうかw
それと2次会であんのうんぷれいすのなかの人といろいろお話できたのが刺激になりました。2pass試さねば。





2005年11月2日水曜日

Sledge::Plugin::Prototype 0.02

伏原さんより、いただいたパッチをそのまま適用して、show_prototype_jsメソッドを追加したSledge::Plugin::Prototype-0.02をアップしました。

Sledge::Plugin::Prototype - HTML::Prototype wrapper

いままで、prototype.jsのソースコードは [% prototype.define_javascript_functions %]を使ってテンプレートに直接埋め込む方法しか取れませんでしたが、
今回追加したshow_prototype_jsを使えば、prototype.js自体を吐き出すPagesクラスを作れます。

伏原さんパッチどうもありがとうございました。



2005年10月28日金曜日

Sledge::Plugin::IfModifiedSince

ひさしぶりにSledgeのプラグインを書いてみました。


Sledge::Plugin::IfModifiedSince 0.01
<追記 date="2005/10/30">上のリンク先が404だったのを直しておきました。失礼しました</追記>


If-Modified-Sinceヘッダからコンテンツが更新されたかを判定するif_modified_sinceメソッドと、レスポンスとしてNot Modifiedを返すnot_modifiedメソッドをPagesクラスにインポートします。

各メソッドはこんな感じで使います。

>

package Your:Pages;
use Sledge::Plugin::IfModifiedSince;

sub dispatch_foo {
my $self = shift;

my $last_modified_epoch = ...;

unless ( $self->if_modified_since($last_modified_epoch) ) {
$self->not_modified;
return;
}
}
<

If-Modified-Sinceを投げてくれるやさしいエージェントにはこちらもやさしくしないとってことでちょこっと書いてみました。



2005年10月27日木曜日

Shibuya Perl Mongers テクニカルトーク #6

Perlっ子なら誰もが参加したいであろうShibuya Perl Mongersテクニカルトークの6回目、Shibuya Perl Mongers テクニカルトーク #6が11月2日に開催されるそうなので、僕も早速申し込みました。

miyagawaさんのSixApartのカルチャーと開発手法はぜひ聞いてみたい!
Ajax,Catalystなどの旬な技術の紹介も面白そうですし、今回もおなかいっぱいになりそうなこゆーい内容になってます。







2005年10月13日木曜日

マクロメディアから「Studio 8 日本語版」発売

12日にマクロメディアからStudio 8 日本語版が発売されましたね。

Dreamweaver8はCSSの編集機能が強化されたり、ガイドが使えるようになったり、アクセシビリティのチェックができたりとかなり機能が強化されているようです。
CSSの編集はFirefoxのプラグインを使ってやってたので、今回のバージョンアップでどれだけ、簡単にCSSをいじることができるようになったのか楽しみ。
トライアル版がダウンロードできるので、早速試してみたいと思います。

マクロメディア「Studio 8 日本語版」はケータイやビデオなどに注力--RSSもサポート - CNET Japan



Sleipnir2.0正式版を使ってみた

ちょっと前にリリースされたらしいSleipnir2.0を使ってみました。最近はHTMLとCSS,JavaScriptをいじることが多くなったので、Firefoxを常用していたのですが、それに比べるとこのSleipnir2.0、かなりさくさく動く印象です。
あまりいじっている時間がないので、インストールして、特に何も設定せずデフォルトの状態で使用していますが、マウスジェスチャーも最初から使えるし、タブを開いたままブラウザを閉じても次回起動時に閉じたときの状態を復元してくれるので、十分便利に使えます。それにCPUもそんなに使っていない感じ。

かなーりいい感じです。

via: タブブラウザ Sleipnir 公式ページ(上級者向け)



2005年10月3日月曜日

MT3.2をapacheのハンドラとして動かす

MT3.2のユーザーインターフェースが秀逸だと聞いて、どうしても見たくなり、hori-uchi.comのMTを3.2へバージョンアップしてみました。


すると、数回アクセスすると、502 Proxy Errorが出るように。。

hori-uchi.comはフロントにApache2.0を置きここでhtmlなどの静的なコンテンツを処理し、バックエンドのapache1.3+mod_perlでApache::Registryを使ったCGIのエミュレート環境でMovableTypeを動かしています。
バックエンドへのリクエストの受け渡しはmod_proxyを使って行っています。

この構成の構築方法は
Techknow Movable Type: Apache 2.0 mod_proxy によるリバース・プロキシの構築
に詳しく解説されています。


502のエラーが出たときのapacheのログを見ると、バックエンドは正常にレスポンスを返していますが、それを受け取るフロントがおかしなレスポンスだと判断し、502をクライアントに返しているようです。


そこで「MT3.2 mod_perl」でググってみると次のようなエントリが見つかりました。

Movable Type 3.2 User Manual: Running Movable Type With mod_perl

MT3.2のマニュアルの一部です。
内容はMT3.2をmod_perlで動かして高速化ってな話ですが、MTをapacheのハンドラとして動かしてより高速化するという内容まで書いてあります。
apacheのハンドラとして動かせばApache::Registryを使ったCGIのエミュレート環境より高速に動きますし、これで502のエラーもなくなるかもと思い、早速実践。


上記エントリの内容をそのまま実践しました。ただ一点、mt.cfgのCGIPathは
http://my.server.com/mt/でなく、http://my.server.com/mt/appにする必要がありました。

訂正:上記マニュアルの内容に加えて、mt.cfgに
>

AdminScript app
<
の一行を追加する必要がありました。


設定を完了し、apacheを再起動すると、MTの動作が高速なったうえ、502のProxyErrorもでなくなりました。めでたしめでたし。

でもなんでProxyErrorが出たのか納得のいく答えがわからず、ちょっと消化不良ぎみ。。

2005年9月30日金曜日

続・onload時に複数のfunctionを実行するJavaScript

ちょっと前に書いたonload時に複数のfunctionを実行するJavascriptというエントリーへのkoさんのコメントでaddEventListenerというのを初めて知りました。

これは何なんだろうということで、調べてみると、W3C DOM Level2 のイベントモデルでイベントハンドリングを行う際に使う関数だということがわかりました。

もう少し調べてみると、このDOM Level2、FirefoxなどMozilla系のブラウザには実装されているようなのですが、IEには実装されていないため、addEventListenerが使えず、そのかわりに同等の機能をもったattachEventという関数が定義されているそうです。

将来的にはIEもDOM Level2をサポートして、addEventListenerが使えるようになると思いますが、現状では、ブラウザを判定してaddEventListenerを使うか、attachEventを使うかを切り替える必要がありそうです。うーん、めんどくさい。。

なので、ブラウザに依存しない前回書いた方法もまんざら無駄骨ということもなかったかな、と思っていたんですが、昨日友人にイベントの登録はprototype使えば簡単にできるよといわれ、無駄骨だったことが確定しましたw

prototype.jsを使ったonload時に実行するfunctionの登録はこんな感じです。

>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Event observe sample</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<script type="text/javascript" src="/js/prototype-1.3.1.js"></script>
<script type="text/javascript">
function foo() {alert('foo')}
function bar() {alert('bar')}
function baz() {alert('baz')}

Event.observe(window, 'load', foo, false);
Event.observe(window, 'load', bar, false);
Event.observe(window, 'load', baz, false);
</script>
</head>
<body></body>
</html>
<

prototype.jsで定義されているEvent.observeを使って関数を登録します。引数は最初に対象となるオブジェクトを渡すところ以外はaddEventListenerと同じです。IE6とFirefox1.0.7で動作することを確認しました。
IEと、Firefoxでは関数の実行順が逆になってましたが、DOM Level2でもイベントの実行順は定義されてないことと、そもそも実行順に結果が依存するような関数はひとつにまとめておくべきだと思うので、これは問題にならなそうです。

prototypeにはこれ以外にもまだまだ知らない便利な関数、クラスがたくさんありそうです。prototype恐るべし。

Movable Type 3.2 日本語版の提供を開始

Movable Type 3.2 日本語版がリリースされたみたいですね。
落ち着いたら移行しよっと。

via: Six Apart - MovableType News: Movable Type 3.2 日本語版の提供を開始

2005年9月29日木曜日

Google VideoでFlashVideoを採用!

なんとGoogleVideoがムービーの再生にFlashを採用しました!
Googleがオープンソースでない技術を採用したのにちょっとびっくり。

How do I playback video?
In order to playback video on Google Video, you simply need to have Macromedia Flash Player installed on your computer. Once installed, you will be able to playback the video from within your browser.



次世代のムービーの標準になったらいいなー。


Google Video Help

2005年9月19日月曜日

onload時に複数のfunctionを実行するJavaScript

昨日に引き続きJavaScriptねたです。
ページを表示した時点でJavaScriptを実行したい場合、
>

window.onload=function(){ alert('called when window is loaded.'); }
<
のようにwindowオブジェクトのonloadイベントに実行したいfunctionをセットしてやればいいのですが、これだと、オンロード時にひとつのfunctionしか実行できません。
そこで、オンロード時に複数のfunctionを実行できるようなスクリプトを書いてみました。今回のコードはnaoyaさんのprototype.js でデザインパターン - IteratorのエントリにあるIteratorパターンのコードをそのまま借りたリスペクト指向プログラミングになってますw

>

//multiple_onload.js
var OnloadFunction = Class.create();
OnloadFunction.prototype = {
initialize : function(func) {
this.func = func;
},
getFunc : function() {
return this.func;
}
};

var OnloadFunctions = Class.create();
OnloadFunctions.prototype = {
initialize : function() {
this.last = 0;
this.functions = new Array();
},
getFunctionAt : function(index) {
return this.functions[index];
},
appendFunction : function(func) {
this.functions[this.last] = func;
this.last++;
},
getLength : function() {
return this.last;
},
iterator : function() {
return new OnloadFunctionIterator(this);
}
}

var OnloadFunctionIterator = Class.create();
OnloadFunctionIterator.prototype = {
initialize : function(functions) {
this.functions = functions;
this.index = 0;
},
hasNext : function () {
return this.index < this.functions.getLength();
},
next : function() {
return this.functions.getFunctionAt(this.index++);
}
}

var onloadFunctions = new OnloadFunctions();

function multipleOnload () {
var it = onloadFunctions.iterator();
while (it.hasNext()){
var func = it.next();
func.func();
}
}

window.onload = multipleOnload;

<

使用方法はこんな感じです。
動作させるにはprototype.jsが必要なので最初にインクルードしています。

>


<html>
<head>
<script type="text/javascript" src="/js/prototype-1.3.1.js" ></script>
<script type="text/javascript" src="/js/multiple_onload.js" ></script>
<script type="text/javascript">
functon foo() {alert('foo');}
functon bar() {alert('bar');}
functon baz() {alert('baz');}

onloadFunctions.appendFunction(new OnloadFunction(foo) );
onloadFunctions.appendFunction(new OnloadFunction(bar) );
onloadFunctions.appendFunction(new OnloadFunction(baz) );
</script>
</head>
<body>
...
</body>
</html>

<
まず、multiple_onload.jsをインクルードしておきます。そして、定義したfunctionをappendFunctionメソッドを使ってセットしておきます。
これでfoo,bar,bazがオンロード時に順番に実行されます。


2005年9月18日日曜日

画像のスワップをクラス名で制御するJavaScript(プリロード付き)

ちょっとJavaScriptをまじめに勉強しようかと思い始めました。
というわけで、手始めにマウスオーバーすると別画像に切り替わるスクリプトを書いてみました。
マウスオーバーで画像が切り替わるなんて、Dreamweaver使えばJavaScriptを知らなくてもできてしまうんですが、Dreameweaverが吐き出すコードはHTMLタグの中にonload="xxxxxxxx"とか、onmouseover="xxxxx"をやたらと追加して、非常に見づらいのです。
これだとテキストエディタでちょろっとHTMLを編集したい時に大変ですし、きっとGoogleさんもクロールしにくいでしょうから、imgタグに予めスワップ用に設定しておいたクラス名を記述しておけば、マウスオーバー、マウスアウトで画像が切り替わるようにしてみました。

作成したスクリプトはこんな感じです。クラス名から要素を取得するところはprototype.jsから借りてきました。

>

// swap_image.js
var imagesNormal = new Object();
var imagesHilite = new Object();

function SwapImage (name,normalSrc,hiliteSrc) {
this.name = name;
this.normalSrc = normalSrc;
this.hiliteSrc = hiliteSrc;
}

function setupSwapImages(swapImages) {
preloadSwapImages(swapImages);
setupSwapEvent(swapImages);
}


function preloadSwapImages (a) {
for (var i=0; i < a.length; i++){
imagesNormal[a[i].name] = new Image();
imagesNormal[a[i].name].src = a[i].normalSrc;
imagesHilite[a[i].name] = new Image();
imagesHilite[a[i].name].src = a[i].hiliteSrc;
}
}

function setupSwapEvent (a) {
for (var i=0; i<a.length; i++){
var images = getElementsByClassName(a[i].name);
for (var j=0; j<images.length; j++){
var image = images[j];
if (image.getAttribute("src")){
image.onmouseover = function () {swapImage( this, "hilite" );}
image.onmouseout = function () {swapImage( this, "normal" );}
}
}
}
}

// 2006-05-15追記
function swapImage(image,type){
if (type=="hilite") {
image.src = imagesHilite[image.className].src;
} else if (type=="normal") {
image.src = imagesNormal[image.className].src;
}
}
// 追記ここまで(こぴぺしわすれ・・。)

// copied from prototype.js v1.3.1
// http://prototype.conio.net/
function getElementsByClassName (className) {
var children = document.getElementsByTagName('*') || document.all;
var elements = new Array();

for (var i = 0; i < children.length; i++) {
var child = children[i];
var classNames = child.className.split(' ');
for (var j = 0; j < classNames.length; j++) {
if (classNames[j] == className) {
elements.push(child);
break;
}
}
}

return elements;
}
<

実際の使用例はこんな感じです。クラス名により画像のスワップを制御するようにすることで、HTMLがすっきりしました。さらにhead要素内のscriptタグを削除してもValidなHTMLのままってところもいいですよね。

>


<html>
<head>
<script type="text/javascript" src="/js/swap_image.js" ></script>
<script type="text/javascript">

var swapImages = [
new SwapImage('class01','/images/foo.gif', '/images/foo_onmouse.gif'),
new SwapImage('class02','/images/bar.gif', '/images/bar_onmouse.gif'),
new SwapImage('class03','/images/baz.gif', '/images/baz_onmouse.gif')
];

window.onload = function () {setupSwapImages(swapImages);};
</script>
</head>
<body>

<img src="/images/foo.gif" class="class01" />
<img src="/images/bar.gif" class="class02" />
<img src="/images/baz.gif" class="class03" />

</body>
</html>
<



2005年9月15日木曜日

Sledge::Dispatcherリリース

Sledge用のmod_perlハンドラSledge::Dispatcherがリリースされたみたいです。

トリガのCGIファイルを作らないですむのはかなり便利ですね。
もうひとつ僕がいいなーとおもったのは、URLからPages内のdispatchメソッドがどこにあるかわかりやすくなるなーという点。

トリガのCGIファイルを使う場合、CGIファイル内に呼び出すPagesクラスを記述するのですが、Pagesクラスならどのクラスも
呼べるので、適当に設計して作っていると、URLとPagesクラスが対応しなくなっちゃうときがあるんです。特に僕はちょっと考えたら、
まず手を動かしちゃう人なので、うまく対応しなくなってCGIファイルを編集しなおしなんてことをよくやっちゃいます。

なので、dispatchメソッドを書いた時点でURLが決定するSledge::Dispatcherはかなりイイ!と思いました。

via: #!shebang.jp:Sledge::Dispatcher





Google Blog Search 突然リリース

Googleのブログ検索が突然リリースされたようです。

Google Blog Search

ブログ検索もGoogleがすべて持っていってしまうのか、今後に注目です。



2005年9月12日月曜日

Class::DBI 3.0.1の中身は0.96

MFPMのRecent MailでClass::DBIが3.0.1にバージョンアップしたことを知りました。

search.cpan.org: Tony Bowden / Class-DBI-3.0.1

早速何が変わったのかChangesを見てみると、、

>

3.0.1 UNRELEASED

- Code is identical to 0.96
- New section added to documentation on Release Philosophy
- Replace eq_set with is_deeply in t/04 to work around Test::More bug

3.0.0 UNRELEASED

- IDENTICAL to 0.96. Only difference is version renumbering.
<

ということで、中身は0.96と同じで、バージョンを付け直しただけみたいです。
これから大きなバージョンアップを行う下準備というところでしょうか。



2005年9月3日土曜日

オフィス崩壊

会社倒産とかそういうことではありませんw


[Vcube][解体]
壁撤去3
created by horiuchi.


会議室の数を増やすため、オフィスの解体工事が始まりました。
今まで1つだった会議室が週明けには5つに増えることになります。



>





撤去完了


Originally uploaded by horiyasu.

<

壁の撤去にかかった時間は30分くらい。あっという間になくなってしまいました。




2005年9月1日木曜日

ぐっさんのムービーブログがスタートしました。

OCNムービーブログの第2弾、ぐっさんこと山口智充さんによる「ぐっさん部屋 > 山口智充ムービーブログ 15秒のドウガ」が本日スタートしました。

初回からかなり体を張ったムービーになってますw


ちなみに相武紗季さんのときと同じく、ムービーティッカーも同時に提供しています。
実際に貼り付けるとこんな感じ。


貼り付け用のHTMLはこちらから取得できます。


2005年8月31日水曜日

Redhat Linuxで1枚のNICに複数のIPアドレスを割り当てる

今の今まで1枚のNICには1つのIPアドレスしか割り当てられないと思い込んでいたのですが、さっき友人に「WindowsではできるよLinuxでもできるんじゃない?」といわれたので、ちょっと調べてみました。
すると以外に簡単にできることが判明。以下その手順です。

>

[root]#cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
[root]#cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:1
[root]#vi /etc/sysconfig/network-scripts/ifcfg-eth0\:1
[root]#cat /etc/sysconfig/network-scripts/ifcfg-eth0\:1
DEVICE=eth0:1
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.101
NETMASK=255.255.255.0
[root]#/etc/init.d/network restart
[root]#/sbin/ifconfig
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3628231 errors:0 dropped:0 overruns:0 frame:0
TX packets:2719218 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2803068698 (2673.2 Mb) TX bytes:616666033 (588.0 Mb)
Interrupt:11 Base address:0x8000

eth0:1 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3628231 errors:0 dropped:0 overruns:0 frame:0
TX packets:2719218 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2803068698 (2673.2 Mb) TX bytes:616666033 (588.0 Mb)
Interrupt:11 Base address:0x8000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:6869 errors:0 dropped:0 overruns:0 frame:0
TX packets:6869 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:654293 (638.9 Kb) TX bytes:654293 (638.9 Kb)
<

/etc/sysconfig/network-scripts/ifcfg-eth0をコピーしてデバイス名とIPアドレスを直して、NICを再起動するだけでした。
これを使えば同じポート番号で2つ以上ソフトを動かしたりできますね。



2005年8月28日日曜日

コンテンツビジネス勉強会@大阪



大阪で話してます。

2005年8月25日木曜日

Google talk試してみました

Google発のIM「Google talk」も早速試してみました。
利用するにはGmailのアカウントが必要です。ログインするとGmailの新着メールがポップアップででてきたり、メッセンジャー中のメールマークを押すとGmailの新規メール作成ページに飛んだりと、GmailとGoogle talkをシームレスに行ったりきたりできていい感じです。

via: Google Talk



MSNメッセンジャー7.5

メインで使っているメッセンジャーのMSNメッセンジャーが7.5にバージョンアップしたそうなので、早速インストール。見た目で変わったのはログイン画面と音声メモボタンがついたところくらいでしょうか。最近たまにメッセンジャーが暴走してCPU100%使うことがしばしばあったので、このバージョンアップでそれが直らないかなとひそかに期待しています。


via: マイクロソフト、MSN メッセンジャー 7.5をリリース--音声メモ機能など追加 - CNET Japan



2005年8月23日火曜日

クリックするとすべて選択されるテキストエリア




GoogleAdsenseのAdsenseコードを表示するテキストエリアがちょっと便利。クリックすると、テキストエリア内のコードがすべて選択された状態になるので、あとは右クリックしてコピーするだけでOK。ちょっとした気遣いだけど、これだけですごく使い勝手がよくなっている気がします。

実際どうやって実現しているのかなとコードを覗いてみると、こんな感じ。

>

<textarea readonly rows="12" cols="65" onclick="this.focus();this.select()" id="code">
<

標準関数のfocus()とselect()を使うだけでできてしまうので、非常に簡単ですね。早速まねしよう。

2005年8月21日日曜日

コンテンツビジネスセミナー@六本木



mixiのコンテンツビジネスコミュニティ主催の第1回コンテンツビジネスセミナーでFlipClipの紹介をしてきました。

2005年8月17日水曜日

Class::DBI::Sweet

CDBIのメーリングリストを眺めていたら、複数のテーブルにまたがった検索なんかをClass::DBI::Sweetを使えば簡単にできるよみたいな投稿があったので、マニュアルを眺めてみましたが結構いろいろできそう。
ざっと見た感じ

-Class::DBI::PagerのようなData::Pageを利用したページング
-Class::DBI::Plguin::CountSearchでできるようなカウント検索
-SQL::Abstractを使った複雑な検索
-JOINを使った検索
-retrieve_allでorder_by
-キャッシング機能

といったようにかゆいところに手が届く機能が満載です。
それぞれの機能は個別のプラグインとしてだいたいCPANにアップされてますが、これひとつですべて住むってのは便利かも。




2005年8月8日月曜日

flashcastingとか言ってみる

先週末、FlipClipにRSSを吐き出す機能を実装しました。

実際のRSSはこんな感じです。
http://www.flipclip.net/horiuchi/rss

RSSのバージョンは2.0を採用しています。
なぜ2.0かというと、今回新しい試みとして、Podcastライクにenclosureを使って、FlashVideo(FLV)を配信するということをしたかったからです。とりあえず、FlashVideoをCastingするということで、「flashcasting」とか言ってみます。(「flashcasting」だとswfを配信するっぽいから「flvcasting」としたほうがいいのかな。でも言いにくい。。)

現時点ではcastしても受け取るプレーヤーがありませんが、配信から先にはじめてみました。

MIME::Lite::TT::Japanese0.06

MIME::Lite::TT::Japaneseを0.06にバージョンアップし、CPANにアップしました。
今回の変更点は2つです。
- 長すぎる本文を自動改行するようにした。
- perlのバージョンでEncodeとJcodeの利用を切り替えていたのをJcode一本にした。

最初の自動改行については、やろうやろうと思っていたのですが、ついつい先延ばしになっていたのをやっと実装しました。デフォルトで72byte以上(文字数で35文字くらい)の行は自動的に改行されます。この値は変更可能で、MIME::Lite::TT::Japaneseのインスタンス作成時に「LineWidth」という名前で渡してやればOKです。また、自動改行したくない場合は「LineWidth」に0をセットすればOKです。

この自動改行の実装にJcodeのjfoldメソッドを使っているため、今回思い切って、Encodeの使用をやめて、Jcodeで一本化しました。最新のJcodeはperl5.8以降ではEncodeのラッパーとして動作するので、バージョンの切り分けはJcodeに任せようと思ったのも一本化の要因です。

EncodeでISO-2022-JPなMIMEエンコーディングができるようになったのをきっかけにMIME::Lite::TT::Japaneseのバージョンアップを思い立ったのですが、結果として、Encodeを使わないということに。。




Encode 2.11

Encode 2.11がリリースされ、CPANにアップロードされています。

DanさんのエントリーEncode-2.11 releasedからトラックバックをいただいてバージョンアップを知りました。ありがとうございます。

今回のバージョンアップの目玉はなんと言ってもISO-2022-JPのMIMEエンコードに対応したことでしょう。以下のようなコードで簡単にエンコードできるみたいです。
>

$header = encode('MIME-Header-ISO_2022_JP', $utf8);
<

これでまかまかさんのおっしゃるとおり、MIME::Lite::TT::Japaneseのコードを簡単にできそうです。







2005年8月7日日曜日

GoogleAdsense銀行振り込み開始

GoogleAdsenseの支払い方法で銀行振り込みを選択できるようになったみたいなので、早速銀行振り込みに変更してみました。これでより簡単にAdsenseを利用できるようになりますね。

via: Google AdSense が銀行振込開始: blog.bulknews.net



2005年8月4日木曜日

ウイニングイレブン9

ウイニングイレブン8を買ったもののマスターリーグでまだカストロがスタメンな僕ですが、ついついウイニングイレブンを9注文しちゃいました。それにしてもアマゾンのレビューを見ると評判はいまいちですね。たしかに選手の成長、衰退は僕もいらない気がするなー。。次回作では成長、衰退のON/OFF機能を希望!

ワールドサッカーウイニングイレブン9
コナミ (2005/08/04)
売り上げランキング: 1



2005年8月1日月曜日

Class::DBIの開発が大変なことになっている模様。。

Class::DBIの作者が最近立ち上げたメーリングリストを削除、さらに、アーカイブとWikiも削除してしまったそうです。
そろそろ1.0のリリースかなんて思っていたので、かなりの衝撃です。。
今後の動向に注目です。

via:Class::DBI の開発でトラブル: blog.bulknews.net



2005年7月28日木曜日

SpamAssassinいいですね

今までスパムメールについては、Thunderbirdのスパムフィルター頼りでほかには特に対策を施してなかったのですが、最近中国語人とかさちことかさゆりとかロレックス売りとかから届くメールなど、Thnderbirdがスパムと判定してくれないことが多くなってきて、スパムかなりうざーな状態でした。

そこでSpamAssassinを試してみることにしました。
このSpamAssassin、いろいろな方法でスパムメールかどうかを判定し、スパムらしさ度を点数にし、その合計がある閾値を超えるとスパムと判定。メールのヘッダにその情報(X-Spam-Flagなど)を書き込むというようなことをしてくれます。
スパムっぽかったら問答無用で削除というようなことはしないでヘッダ(スパムメールだと本文にその点数の詳細もつきます)に情報を付加するだけなので、正当なメールがなくなるなんて事はありません。

あとはヘッダの情報からメールを振り分けるなり、ゴミ箱にうつすなりすればいいわけです。

昨日から試してますが、かなりの精度でスパムを判定してくれています。

実際の導入方法は今月号のSoftwareDesignに詳しく載っています。実はこれを読んで導入しようというきになりましたw
特集記事「オープンソース+αでキメる完全無欠のメールサーバ」の中で紹介されています。この特集記事、SpamAssassinのほかにも有益な情報が載っていてお勧めです。特にsendmail、postfix、qmailの比較は非常に参考になりました。今までなんとなくpostfixを使ってましたが、今回の記事を読んでこれからもpostfixで行こうと思えました。


2005年7月25日月曜日

LLDNのイベント情報が更新されてます

LLDN - イベント情報が更新されました

LLDNのイベント情報が更新されてました。
「フレームワーク対決」おもしろそうですね。

黒武骨味玉チャーシュー麺@上野 麺屋武蔵武骨



麺屋武蔵の姉妹店武骨に行ってきました。注文したのは「黒武骨味玉チャーシュー麺」。黒い色はイカスミの油らしいです。このイカスミの油結構効いていて、後味に磯の香りが残ります。磯の香りが苦手な人は白の方がいいかも。
麺は極太麺で食べ応えがあります。
チャーシューは角煮に近く、一つがかなりでかいです。長時間煮込んでいるのか、チャーシューはちょっと味が濃かったです。チャーシューはもっと薄味でもいい気がしました。

次回は白にチャレンジ。

お店: 麺屋武蔵 武骨
住所: 台東区上野6-7-3
電話: 03-3834-6528



2005年7月21日木曜日

紙2001がはやるらしい

紙2001 が流行る 予感・・・: Epic->yoshimax

紙2001。誰かもいいっていってたような。。ためしてみよーっと。


2005年7月20日水曜日

潤@蒲田



蒲田のラーメン屋「潤」に行ってきました。
うどんのように太い麺で魚介系スープで煮干しが効いてます。
鬼あぶらと注文すると背脂たっぷり。こってり好きは鬼あぶらにすべし。
家系のラーメンが好きな僕にとってはそれでもかなりさっぱりでした。

お店: 潤
住所: 大田区蒲田5-20-7
電話: 03-5714-7255


マッシュルームバーガー@7025 Franklin Avenue






Mushroom Burger


Originally uploaded by horiyasu.


先週日曜、五反田にあるハンバーガー屋さん「7025 フランクリン・アベニュー」に行ってきました。

注文したのはマッシュルームバーガーチーズのせの一番大きいサイズ。

お店に入るのに30も並んでいたので、おなかが減りすぎて一番大きいサイズを注文してしまいました。

肉はミディアムレアで中は赤い感じ。味は薄味なので肉の味を味わえました。

ちょっと値段は張りますが、また食べに行きたいと思えるくらいおいしかったです。

もう一つ気になったのが、シェイク。カウンター席に座ったので、目の前で、調理しているところを

見ることができたんですが、シェイクのおいしそうなこと。次に行ったときは注文します。



そうそう、このお店で偶然にもnaoyaさんに遭遇。

まさかこんなところで出会うとは。かなりびっくりしました。



7025 フランクリン・アベニュー

7025 Franklin Avenue

住所: 東京都品川区東五反田3-15-18

TEL: 03-3441-5028



livedoorBlogのAtomAPIが仕様変更

livedoor Blog 開発日誌:リニューアルに伴うランキングの変更、使用できる機能について - livedoor Blog(ブログ)

livedoorBlogのリニューアルに伴い、AtomAPIの仕様も変更されるようです。

>
Atom APIのURLがリニューアルに伴い変更となります。
http://cms.blog.livedoor.com/atom
Atom APIを利用したペットなどのアプリケーションをご利用の場合は上記のURLに変更いただけますようお願いいたします。なお、このAPIのサービスにつきましてはlivedoor Blogとして正式にサポートしておりませんのでお問い合わせ等につきましてはご遠慮いただけますようお願いいたします。
<

エンドポイントが変わるだけなのかなー。






2005年7月8日金曜日

Class::DBI::Plugin::Factory

昨日書いたselectトリガを使ったClass::DBIのFactoryパターンLost-SeasonのkatoさんがClass::DBIのプラグインにしてらっしゃいます。仕事はやっ!

ちなみに、Class::DBIのFactoryの実装方法について、インスタンス生成専門のFactoryクラスを別に作るという方法も考えたんですが、この実装方法だと、retrieve_allやsearchなどのリスト取得系の検索メソッドでインスタンスのリストを取得する際にサブクラスのインスタンスを生成ってところまでは感知できないので、やめにしました。


2005年7月7日木曜日

selectトリガを使ったClass::DBIのFactoryパターン

以前からClass::DBIでFactoryパターンを使えたらなーと思ってました。
たとえば、有料、無料、VIPのように複数の会員タイプがあるような会員サイトを作る場合、Class::DBIを継承したMyService::MemberがFactoryとなり、会員のタイプによって、MyService::Member::Basic, MyService::Member::Free, MyService::Member::VIPというようなサブクラスのインスタンスを作成するというようなイメージです。
さらにFactoryクラスでMyService::Member->retrieve_allとかすると、適切なサブクラスのインスタンスのリストがとれると最高です。

そんなことができないかなーとClass::DBIのドキュメントやソースを眺めていたんですが、Class::DBIに組み込まれているselectトリガを使えば実現できそうだったので、試してみました。
selectトリガはインスタンス生成時に必ず呼ばれているので、ここで会員のタイプを判別し、サブクラスにreblessしてやります。ソースコードはこんな感じです。このコードそのままではないですが、実際に同じようなコードを書いて試してみたところ、うまく動いているようです。

***MyService::Member - Factory
>

package MyService::Member
use base qw(Class::DBI);

require MyService::Member::Basic
require MyService::Member::Free
require MyService::Member::VIP

__PACKAGE__->set_db('Main', @datasource);
__PACKAGE__->table('member');
__PACKAGE__->columns(Primary => qw(member_id));
__PACKAGE__->columns(Essential => qw(member_type name age));

# select トリガにrebless用のメソッドをセット
__PACKAGE__->add_trigger( select => \&_rebless );

# サブクラスにrebless
sub _rebless {
my $self = shift;
#会員タイプ(member_type)でreblesするサブクラスを選択
my $class = 'MyService::Member::Basic';
if ($self->member_type eq 'Free'){
$class = 'MyService::Member::Free';
} elsif($self->member_type eq 'VIP'){
$class = 'MyService::Member::VIP';
}
bless $self, $class;
}

# abstract method
sub is_free {}
sub monthly_cost {}
<

*** MyService::Member::Basic - 一般会員
>

package MyService::Member::Basic;
use strict;
use base qw(MyService::Member);

sub is_free { 0 } # 無料ではない
sub monthly_cost { 500 } # 月額500円
<

*** MyService::Member::Free - 無料会員
>

package MyService::Member::Free;
use strict;
use base qw(MyService::Member);

sub is_free { 1 } # 無料
sub monthly_cost { 0 } # 月額0円
<

*** MyService::Member::VIP - VIP会員
>

package MyService::Member::VIP;
use strict;
use base qw(MyService::Member);

sub is_free { 0 } # 無料ではない
sub monthly_cost { 250 } # VIPは月額250円
<



2005年7月6日水曜日

はてなブックマークにおすすめタグ

はてなブックマーク のブックマーク登録画面におすすめタグと登録済みのタグが表示されるようになりました。これでタグ付けがかなりスムースにできそうです。



2005年7月4日月曜日

ヴィレッジを見ました

ヴィレッジ
ヴィレッジ
posted with amazlet at 05.07.04
ポニーキャニオン (2005/04/22)
売り上げランキング: 2,543


kawachi君お薦めのヴィレッジを見ました。
こういう謎めいた映画好きです。GoogleMapsで世界中くまなく探したらこんな村があったりして。。


2005年7月1日金曜日

Web2.0な世界ではPerlがいい

antipop2.0 - Perler な Blog を列挙祭りのエントリでhori-uchi.comを取り上げてくださっていただいたのに最近Perlの話題あんまり書いてない!ということでちょっと思うところを書いてみたいと思います。

世の中にはいろいろなプログラミング言語が存在しますが、Web2.0な世界ではPerlがいいんじゃない?って話です。
Web2.0というと幅が広いですが、ここで言うWeb2.0はアプリケーション同士がAPIを通して相互に接続される世界とします。
このWeb2.0な世界でなぜPerlがいいのか、僕が考える理由は以下の3つです。
-型のない言語
-強力な正規表現
-CPANの存在
APIの実装はRESTやXML-RPC、SOAPなどを使った、XMLをデータのフォーマットとしてやりとりするというものが一般的です。ですので、各アプリケーションはXMLを解析し、処理すると必要がでてきます。XMLをプログラム内で扱う際にはXMLデータをXMLの階層構造を表現したハッシュであるとか、構造体のような形式にする必要がありますが、型を指定しなければいけない言語だと、いかようにもできるXMLをそういうデータ形式にするのは大変だろうなーと思います。その点PerlはXML::Simpleなんかをつかうと、

my $xml_href = XML::Simple->XMLin($xmlfile);

という一行でXMLのデータ構造をそのまま表したハッシュに変換してくれます。

また、XMLを解析してデータ形式に変換というような作業は結構時間のかかるものですが、Perlには高速で強力な正規表現があるので、これを使って、高速に特定のデータを抜き出すなんてことも簡単にできます。

最後にCPANの存在を忘れてはいけません。今後はAPIを提供するようなサービスが次々に出てくると思います。CPANには人気があるサービスだとそれらのAPIを簡単に使えるようにしてくれるモジュールがたいてい存在しています。Net::AmazonNet::GoogleWebService::BloglinesWebService::Hatena::Fotolifeなど数え上げればきりがありません。
これらを使えば旬なサービスを簡単に使うことができます。

こんな訳で、APIでサービス同士がつながるWeb2.0な世界では、Perlがまた脚光をあびるんじゃないかなと思いました。


Sleipnir2アルファ版をインストールしてみました

タブブラウザ Sleipnir 開発日記より

上級者向け国産タブブラウザ Sleipnir2 (アルファ版)が公開されたようなので、試しにインストールしてみました。
sleipnir2
まだIEと同等の機能しかついていないということです。
僕は普段、Bloglinesなどで気になる記事をピックアップしとりあえず全部開いてから後でじっくり見ていくというようなブラウザの使い方をしているので、タブが30個とかざらに開いてます。旧Sleipnirではそういう使い方をしているとCPU使用率がかなり波打ってWindows自体が不安定になったりしてましたが、僕がSleipnir2を試した限りでは、たくさんタブを開いてもCPU使用率が以前ほど高くならないようです。
とりあえず感想はそれくらい。マウスジェスチャーが実装されたらもう少し本格的に使ってみようかなー。

2005年6月27日月曜日

ジンギスカン@立川 ZIKO

先週土曜日に立川のZIKOというジンギスカン屋さんに行ってきました。
上生ラム肉、ラムカルビ、生ラム肉に野菜盛り合わせを注文しましたが、どれもうまい!!特に上生ラム肉は恐ろしく柔らかくて、ほんのり羊のにおいがして最高でした。



ジンギスカンの店 ZIKO
ぐるなび - 本場札幌炭火焼ジンギスカンの店 ジーコ

住所: 立川市錦町2-1-32YSビル 1F
電話番号: 042-527-0626
営業時間: 18:00~3:00(月・火・水・木・金・土)
17:00~23:00(日・祝日)
休業日: 不定休
交通案内: JR中央線 立川駅から徒歩3分
駐車場: なし
カード利用: 不可



GoogleMapsで生まれ故郷を見てみた

[を] Google Mapsでうちも見えた!と思ったら・・・より、GoogleMapsで日本の衛星写真も見ることができるようになったと知ったので、自分の生まれ故郷をGoogleMapsで見てみました。

hometown.jpg

こうやってみるとちょっと感動。左下の隕石が落ちた跡みたいなのはなんだろ??



2005年6月24日金曜日

モツ鍋@鳥小屋



昨日の夜は中目黒の鳥小屋でモツ鍋をたべました。クリップは食べ頃になったモツ鍋です。
脂のたっぷりついたモツはいつ食べても最高!!最後のおじやも最高!!サイドメニューも全部最高!!
ちなみにサイドメニューは酢モツ、明太子入り卵焼き、牛すじ煮込み、納豆揚げ餅、鳥小屋やっこと人気メニューを一通りたいらげました。大満足。

2005年6月22日水曜日

台北にいってきました

日曜から台北にいってました。
夜市でたらふくB級グルメを堪能してきました。目当てのものは一通り食べられたし、おなかも壊さなかったし、いい旅でした。
しばらくは台北で撮影した映像や動画をアップしていこうかなーと思います。


2005年6月15日水曜日

Dreamweaver 拡張機能 for Movable Type 3

Six Apart Japan: マクロメディアとシックス・アパート、Dreamweaver拡張機能 for Movable Type 3を発表

MTのテンプレートカスタマイズが効率的に!タグリファレンスは便利そう。



2005年6月10日金曜日

IE6にタブ機能がついた

Internet Explorer 6もついにタブブラウザに - CNET Japanの記事によると、MSNツールバーをインストールすることでIE6にタブ機能が追加できるようになったそうです。
IE7でタブがつくという約束でしたがFirefoxなどの追い上げに待ちきれず6につけちゃったという感じでしょうか。個人的にはIEでアプリの動作確認をするとウィンドウがいっぱいになってしまってうざーな状態になることがよくあったので、前倒しのリリースはうれしいです。

MSNツールバーはここからインストールできます。
MSN Toolbar(英語)

タブに対応しているのは英語版のMSNツールバーで日本語版はまだ対応してません。最初日本語版をインストールして、タブつかないじゃんとおろおろしてたのは秘密です。。


2005年6月9日木曜日

SledgeによるWebアプリケーションフレームワーク入門

[ThinkIT] 第1回:Webアプリケーションフレームワークとは (1/4)
SledgeによるWebアプリケーションフレームワーク入門という連載がThinkITでスタートしたようです。
Sledgeは使いこなせればすごく便利なフレームワークだと思いますが、ドキュメントが少ないので、さぁフレームワークを導入しようとなったときにちょっと手を出しにくいなのかなぁって気がします。
なので、こういうわかりやすい記事が出てくるのはいいですねー。

僕の会社でもフレームワークを導入して結構たちますが、最近思うのはフレームワークだけ導入しても、その本来の目的である「工数の削減」「品質の均一化」「メンテナンス性の向上」を達成するのは難しいということです。フレームワークを利用してもその上でどういうコードを書くのかという規則、つまりその会社のコーディング規約のようなものがきちんとできていないと、結局品質のばらつきはでますし、メンテナンスも容易でなくなるんですよね。
かといってコーディング規約を文章でまとめておいても、それをすべて頭にたたき込むってのは結構しんどい作業だと思うし、結局誰も規約に目を通してなくて、うまくいかないなんてことになりがちです。
そこで登場するのがペアプログラミング。少し前に、はてなの伊藤さんとお話したときに、はてなでは新しく入社したらまずペアプログラミングをして、はてなフレームワークの使い方と、はてな的な実装方法を教え込むのだといっておられました。コーディング規約を頭で覚えるのでなくて、ペアプログラミングによって体で覚える。ペアプログラミングなんてやっている余裕はないなんて思いがちですが長い目で見ると、工数削減、品質、メンテナンス性向上するためには、遠回りのようでこれが一番いい方法なのかもしれませんね。


2005年6月8日水曜日

ビデオブログビジネスセミナーでしゃべってます



人前での話すのは修士論文発表以来。かな〜り緊張してます。




2005年6月6日月曜日

Google Sitemaps

GoogleよりGoogle Sitemapsというサービスがベータリリースされたようです。

サイトの運営者側でサイトマップをXML形式で作成しておいて、そのありかをGoogleに伝えておくとボットがそのXMLを元にクロールしてくれるといったサービスみたい。

こちらでサイトマップのXMLを生成するためのMT用のテンプレートの例が掲載されています。僕も試しにこのテンプレートを使ってサイトマップを作成してみました。

これを使うことで、サイト運営者の側からGoogleに対してインデックスしてよと言えるようになるので、サイト立ち上げてすぐにGoogleで検索に引っかかるようにしたいなんて時に使うといいのかも。



2005年6月3日金曜日

Enclosure == 入れ物 - Bloglinesの日本語訳

ちょっと前にBloglinesがPodcastに対応して、Enclosureへのリンクが記事の下の方につくようになったんですが、その部分の日本語訳がちょっと変な気がします。「入れ物」って。。もう少しいい訳ないんだろうか。「添付ファイル」とかだとだれでもわかるような気がするけど。。


2005年5月31日火曜日

Technorati Japan ベータリリース

テクノラティ

Technorati Japanのベータがリリースされたようです。



2005年5月30日月曜日

SEPY ActionScript Editor - オープンソースなActionScriptエディタ

SEPY ActionScript Editor: Epic->yoshimax
もうひとつyoshimaxさんのより。

オープンソースなActionScriptエディタSEPY ActionScript Editor というのがyoshimaxさんの周りではやっているらしい。



FLASHとPHP間のやり取りにはPHPObject

yoshimaxさんのFLASHとのRPC PHPObjectのエントリより。

FlashとPHP間の通信(Flash Remoting)にはPHPObjectを使うのがはやっているらしい。



Live Journalのバックエンド

qootas.org/blogさんのBlog Hackers Conference 2005のエントリで取り上げられていたInside LiveJournal's Backend
という資料が興味深いです。

前のエントリで書いた画像とか動画のような大きなファイルを扱うにはどうしたらいいかという疑問にたいする解答もこの中からつかめるかも。
perlベースのリバースプロキシロードバランサー兼WebサーバPerlbalは負荷分散に使えるだけでなく、mod_perlと組み合わせてファイル閲覧の認証とかもできるようなので、もう少し詳しく調べてみようかと思います。



2005年5月29日日曜日

Blog Hackers Conference 2005

Blog Hackers Conference 2005に行ってきました。
先端で活躍している人の話はやっぱりおもしろいし、刺激になります。

今回の話で僕が気になったことをまとめてみます。

*Blogのプラットフォーム化

naoyaさん曰く、ブログは終焉に向かっているのではなく、プラットフォーム化してきたのだということ。ブログの終焉の終焉。ブログがプラットフォーム化してきたことはブログありきのサービスがたくさん出てきていることからもわかります。ブログがプラットフォーム化して、ブログを中心としたサービスがAPIを使って結びついていく。Webはおもしろいですねー。

*RastやSennaといった組込型検索エンジン

yappoさんのプレゼンで出てきた組込型検索エンジンの話。namazuのような独立したアプリケーションではなく、他のアプリに組み込むこと前提に作られています。MySQLによる日本語フルテキストサーチやあいまい検索できるものもあるそうです。あいまい検索を実装中で、PerlAPIもあって、利用が簡単そうなsennaを試してみようかなー。

*memcached

某ブログサービスで使われている。メモリ上にデータやオブジェクトをキャッシュしパフォーマンスを向上させることができる。レプリケーションもできる。PerlAPIも公開されているのでPerlで利用するのが簡単。
これとは別の話で、某商用DBMSよりMySQLの方がパフォーマンスいいとか、興味深い話が聞けました。個人的にはこういう大きなサービスをやるとき画像とか大きなサイズのファイルをどうやって扱っているのかが知りたいです。DBにぶちこむとするとすぐテーブルがでかくなって破綻しちゃうだろうし、ファイルに書き出しておくとすると、拡張性に乏しいし。。画像保存用サーバを用意してそこにためていくのかなー。

*タギング、Folksonomy

Flickrやdel.isio.us、はてなブックマークなんかに使われている。タギング、Folksonomyは個人的に興味がある概念。

*隣にJcodeのDanさん

少し遅れて入ってきたDanさんが僕の隣の席に。いやー、びっくりしました。
さらに前の席には小山さん。




2005年5月27日金曜日

FINAL FANTASY VII ADVENT CHILDRENの予告ムービー

アップル - QuickTime - FINAL FANTASY VII

アップルのサイトで「FINAL FANTASY VII」の続編「FINAL FANTASY VII ADVENT CHILDREN」の予告ムービーが公開されてました。ちょっとほしいかも。


Seleniumすごい

Selenium: blog.bulknews.netより

Javascriptを利用したWebアプリケーションのテストツールSeleniumというのが熱いらしいので、ちょっと試してみました。

これちょっとすごいですね。

一番驚いたのが、テストケースの作成が簡単にできること。HTMLのテーブル内にテストの手順を書いていけばそれがそのまま実行可能なテストケースになってしまいます。
このHTML見た目はちょっとしたテスト仕様書なので、そのまま成果物として出すことも可能かもしれません。ただ、内容が英語になるので、ちょっと読みにくくはありますが。。
テストケースを日本語で書けたらほんとそのままテスト仕様書になるなぁと思ってみました。



2005年5月24日火曜日

56wz(ゴロワーズ)で語呂合わせのパスワード生成

パスワードを考えるのがめんどくさいのでなんかいいツールないかなと探していたら、窓の杜 - 56wz(ゴロワーズ)なるものを見つけました。
入力した文字列を語呂合わせで変換してくれます。「ホリウチ」を変換したら「hruc」に。これだと短すぎますが、「サヤカセイコトダンゼツ」だと、「3yks1ktdnzt」となり、長い割に覚えやすいパスワードに。



Prototype.jsのEffectサンプル

オブジェクト指向JavaScriptライブラリPrototypeを試すために作ったページがそのままサンプルになりそうだったので、公開してみます。
Prototype.js - Effectサンプル
イベントを定義するだけでここまでのことが出来るのにちょっと感動しました。
Prototypeいい感じです。

ちょっと気になった点
-Effect.Fade()とEffect.AppearはFirefoxでみるといい感じだけどIEだとしょぼい
-Effect.Scaleは動きがもっさりしているような。。
-sleipnirでEffect.Puff()中にブラウザごと落ちることがしばしば。




2005年5月17日火曜日

Jcode 2.0 リリース

Jcode-2.00がリリースされました!
Jcode2.0の変更点はこんな感じです。

-Perl 5.8.1 以降の場合は Encode の Wrapper として機能する。
-Encode の Wrapper として機能する場合、パスの通ったところに置くだけで利用できる。
-日本語podが付いた

JcodeのホームページではEncodeを使うことを推奨していますが、mime_encodeでMIME-B-encoded ISO-2022-JPを返してくれたり、jlengthとかjfoldとか便利なメソッドもあるので、これからもJcodeのお世話になりそうです。



RSSを動的に生成してみた

運営をお手伝いしている鳥海先生のブログ「伯萃庵」の今日の運勢にRSSを配信する機能を追加してみました。サイトの右上に設置されている今日の運勢から取得できる結果ページにRSSがついてます。http://www.toriumihakusui.com/app/daily/rss2?p=197807122 のように生年月日をパラメータとして受け取り、動的にRSSをはき出すタイプで、その日の運勢とラッキーブック、ラッキーDVDなんかを配信しています。リンク先はamazonだったりして、若干アサマシぃことしてます(汗

ところで、今まで、MTのテンプレートを編集してAtomフィードをはき出すよう改造したりとかはやったことありましたが、自分で一からフィードを作ったのはこれが、初めてだったりします。RSSなんて、テンプレート用意してパラメータ埋め込めばOKでしょなんて簡単に考えてましたが、実際に作ってみると、XMLの中に何をセットすればいいかを悩んでしまうような要素があったり、Last-Modifiedヘッダーを吐くのを忘れていて、アグリゲータにデータを持っていってもらえなかったりと意外と手こずりました。
やっぱり、実際手を動かしてみるのが一番勉強になりますね。



2005年5月12日木曜日

Internet Week 2004 チュートリアル

Internet Week 2004でInternet Week 2004 チュートリアルの内容が公開されています。
Web and Internet Applications Day にだけは参加しましたが、それ以外は時間が無くて見ることが出来なかったので、公開されてちょっとうれしいです。
でも一緒に公開されているビデオの形式がリアルプレイヤー形式。。ちょっとしょんぼり。


2005年5月9日月曜日

トリックがドラマと映画で復活

Yahoo!ニュース - スポーツ報知 - 「トリック」ドラマスペシャル版&映画復活 仲間由紀恵&阿部寛主演の人気ドラマより

なんとトリックが復活するそうです。ドラマは一回限りのスペシャルだそうですが、楽しみ!

追記: 2005/05/11
公式サイトもオープンしたようです。



Sledge::Plugin::Prototype - HTML::Prototype wrapper

最近Catalystをいじりはじめました。僕はWebアプリケーションを作るときはもっぱらSledgeを使っていますが、なにやらCatalystが熱いようなのでSledgeとの比較も含めて試してます。

まず試しにAjaxっぽいアプリを作って見たんですが、そこで使ったCatalyst::Plugin::PrototypeがJavascriptを一行も書かないでAjax出来て素敵だったのでこれをSledgeでも使えるようなプラグインを書いてみました。

Sledge::Plugin::Prototype - HTML::Prototype wrapper

ちなみにPrototypeは何かの原型というわけではなくて、prototypeという名前のオブジェクト指向Javascriptライブラリなんだそうです。


2005年5月7日土曜日

colinux + Gentooを試してみたけどDebianの方がいいや

オープンソースなWindows 2000/XP上で走るLinuxとして、にわかに話題のcolinuxを試してみました。colinux上で動かせるOSはDebian、Gentoo、FedoraCore1から選べますが、FreeBSDのportsのようなパッケージ管理システムportageが使えるということで、まずはGentoo Linuxを選んでみました。
今回インストールしたのは以下の通り。
-coLinux 0.6.2
-Gentoo-colinux-stage3-x86-2004.3
0.6.2からはlinuxのカーネルが2.4から2.6にあがっていて、各OSのイメージは2.4用と2.6用がそれぞれ、用意されています。(最初2.4用のイメージを間違えて落としてきてしまい、うまく動かずかなり時間を無駄にしましたorz)

起動からネットワークの設定なんかはすんなりいきましたが、portageを使ってシステムを最新の状態にしたり、パッケージをインストールしたりするのにかなり時間がかかりました。(emerge -u systemで半日、emerge emacsでemacsのインストールをしたら、依存パッケージが40個もあって、またインストールに半日。。)
portageどんなもんか、かなり楽しみにしていたんですが、ちょっと一つのコマンドにいちいち時間がかかりすぎてしまい、非力なマシンではちょっと使えない感じがしました。

そういうわけで、今はDebian試してます。sargeにアップデートしてapacheとかmod_perlとかいれてますが、apt-getでさくさく入って快適です。最初からDebianにしとけばよかったかも(汗

以下Gentoo Linuxに関する設定のメモを残しておきます。


*Windows側の設定
ここを見てごにょごにょ
。ネットワークはNATにしました。
*coLinuxの設定ファイルはこんな感じ
>

<?xml version="1.0" encoding="UTF-8"?>
<colinux>
<block_device index="0"
path="\DosDevices\D:\colinux\images\Gentoo-colinux-stage3-x86-2004.3.img"
enabled="true" />
<block_device index="1" path="\DosDevices\D:\colinux\images\swap.img"
enabled="true" />
<bootparams>root=/dev/cobd0</bootparams>
<initrd path="initrd.gz" />
<image path="vmlinux" />
<memory size="128" />
<network index="0" type="tap" />
</colinux>
<
起動後、root:rootでログインします。
*スワップパーティションの設定
>

#mkswap /dev/cobd/1
#nano -w /etc/fstab
#cat /etc/fstab
/dev/cobd/1 none swap sw 0 0
#swapon -a
<
*ネットワークの設定
eth0の設定
>

# nano -w /etc/conf.d/net
iface_eth0="192.168.0.2 broadcast 192.168.0.255 netmask 255.255.255.0"
gateway="eth0/192.168.0.1"
# nano -w /etc/resolv.conf
nameserver xxx.xxx.xxx.xxx
# /etc/init.d/net.eth0 restart
<
その後ifconfig、route、pingなどでちゃんと動いているか確認。
ところで、nanoというエディタ初めて使いましたがemacsとキーバインドが似てるのと下の方にコマンドの説明がでてるので、何とか使えました。
*ユーザ追加
>

#useradd horiuchi -m -G users,wheel,audio -s /bin/bash
#passwd horiuchi
<
*sshdを起動&自動起動設定
>

# /etc/init.d/sshd start
# rc-update add sshd default
<
* portageでシステムを最新の状態にする
>

# emerge sync
# env-update && source /etc/profile
# emerge -n '>=sys-apps/portage-2.0.51'
# cd /etc
# rm make.profile
# ln -s /usr/portage/profile/default-linux/x86/2005.0 make.profile
# emerge -u system
# emerge -u world
<
恐ろしく時間がかかります。emergeだけで1日くらいかかりました。。

2005年5月1日日曜日

恐竜博2005に行くなら夕方がお勧め





恐竜博2005に行ってきました。ゴールデンウィーク中ということで相当混雑するだろうなーと思っていましたが、やはり恐ろしく混んでました。時刻は13:30。博物館のチケットを買うのに10分待ちで、館内に入るまで45分待ちという状況。とりあえず10分並んでチケットは買いましたが、45分並ぶのは嫌だし、夕方になればもう少し空くかもしれないと、近くで同時開催しているベルリンの至宝展に行ってみることにしました。
こちらはそれほど混んでなくてすんなり入場できました。このベルリンの至宝展ですが、エジプト美術や古代西アジア美術、ヨーロッパ古典絵画、ヨーロッパ近代美術などいろいろな時代の芸術品を一度に見ることができるので、芸術がほとんどわからない僕でも、飽きずに楽しめました。

至宝展を一通り見た後、近くの喫茶店で休憩し、そろそろ空くかなーという頃に再度恐竜博に向かいました。時刻は16:00。さすがに少しは待つだろうなーと思いつつ会場に向かったんですが、到着してみるとさっきまであんなに並んでいた人が一人もいません。なんと全く待たずに入場できてしまいました。博物館の中もそれほど混んでなくて、一つ一つじっくり見ることができました。これから恐竜展に行こうかなーと思っている人、夕方以降に行くのがお勧めです。




2005年4月26日火曜日

郵便番号変換でXMLRPCサーバのベンチ

XML-RPCを使って、郵便番号から住所引っ張ってくるサービスを作る際に、perlとPHPどちらの方がパフォーマンスがでるのか気になったので、ちょっと実験してみました。

perlの方はnaoyaさんのApache::XMLRPC::Lite を使った mod_perl ハンドラによる XML-RPC サーバのエントリを参考にApache::XMLRPC::LiteとClass::DBIを使って実装し、PHPの方はXMLRPCの実装にXML-RPC for PHPにあるライブラリを使い、DBとの連携は組み込みのmysql_connectとかを使って実装してみました。ちなみにPHPはまともに動くコードを初めて書きましたが、意外と書けるものですねw

ベンチマークにはabを使い、同時接続数が1,5,10,20の場合をそれぞれ測定してみました。
>

ab -n 100 -c 1 -T text/xml -p post.txt -w http://horiuchi.vcube.net/zipconv/xmlrpc > result.html
<

以下結果です。
-Apache::XMLRPC::Lite
-Apache::XMLRPC::Lite(レスポンスを強制的にbase64にした場合)
-PHP
-CGI ( perl )

レスポンスを強制的にbase64にした場合を測定したのはSOAP::Liteのドキュメントにそうするとパフォーマンスをあがるというようなことが書かれていたので試してみました。
ですが、結果としてはそれほどパフォーマンスはあがってません。逆に同時アクセス数を大きくするとパフォーマンスが落ちてしまいました。
また、PerlとPHPではそれほどパフォーマンスに違いがないようです。

PHPだと劇的に早いという結果になったらPHPにしようかとも思ったのですが、結局どちらにしても違いはそれほどなさそうなので、得意のPerlで行くことにしました。



Lightweight Language Day and Night

LLDN - LLDN 開催のお知らせ

軽量言語に関するイベントLLDNが今年も開催されるそうです。今年はさらにパワーアップして、昼の部と夜の部2部構成だそうです。今年も参加予定。楽しみ。




2005年4月20日水曜日

702MOと702sMOひどいな

久しぶりに携帯の個体情報を利用するシステムを作るため、ボーダフォンのサイトを調べていて唖然。
3G携帯はユーザエージェントがえらいことになっているとは聞いていましたが、702MOと702sMOは特にひどいですね。。
ユーザーエージェントがMOT-で始まるのも相当ひどいけど、ボーダフォンをみると個体情報も送らないっぽい。。

そりゃあ、HTTP::MobileAgent::Vodafoneにこんなコメントもつきますよね。
>

#for 3gc orz
<



2005年4月19日火曜日

2005年4月13日水曜日

VMware v5.0リリース

窓の杜 - 【NEWS】複数の“スナップショット”が保存可能になった「VMware」v5.0 正式版が公開
より

VMwareのv5.0がリリースされたようです。スナップショットを複数保存できるようになったほか、仮想マシンの画面をAVI形式で録画する機能なんかもついたみたいです。


2005年4月10日日曜日

秀丸Ver5の正規表現がよりPerl風に

hail2u.net - Weblog - 秀丸エディタ Ver5.00βより

秀丸Ver5の正規表現はperlのものにより近づいたらしい。




Poderosa

タブ式 GUI・SSH2 をサポートしているオープンソースの Windows 用高機能ターミナルエミュレータ Poderosa: Epic->yoshimaxより

>
Poderosa(ポデローサ) は、タブ式 GUI・SSH2 をサポートしているオープンソースの Windows 用高機能ターミナルエミュレータです。
<

いいかも。




Amazon Keyword Search クエリの文字コードを指定可能に

サイトの頭についているAmazon Keyword Searchですが、日本語を入力して検索すると文字化けて正しく検索できなかったのを修正しました。

そもそもAmazon Keyword Searchは文字コードについては何にも処理しておらず、飛んでくるクエリはEUCであるという前提で作っていたので、このブログのように文字コードがUTF8だと文字化けるんですよね。なのでcというパラメータでクエリの文字コードを指定できるようにし、対応しました。


2005年4月6日水曜日

Acme::MorningMusume

antipop2.0 - Acme::MorningMusume リリース
より

Acmeというカテゴリ、いままで知りませんでした。CPANておもしろい。


2005年4月4日月曜日

Template::Plugin::TagRescue0.04が特定条件で文字化け

あるサーバに移すとTempalte::Plugin::TagRescueを使ってタグをエスケープした部分の文字が化けるという現象が発生したため、原因を調査してみました。

サーバにインストールされていたのはその時点で最新のTemplate::Plugin::TagRescue0.04。
ソースをのぞくとタグのエスケープにApache::Util::escape_htmlもしくは、HTML::Entities::encode_entitiesが利用されていて、Apache::Utilが利用できない環境ではHTML::Entitiesが使われるという設計になっていました。

問題のサーバを調べてみるとApache::Utilが利用できない環境で、エスケープにはHTML::Entitiesが使われていて、どうやらそのHTML::Entitiesでエスケープを行うと文字化けが発生するようです。

そこでHTML::Entitiesのドキュメントを眺めると、以下のような記述が。

>
encode_entities( $string, $unsafe_chars )
This routine replaces unsafe characters in $string with their entity representation. A second argument can be given to specify which characters to consider unsafe (i.e., which to escape). The default set of characters to encode are control chars, high-bit chars, and the <, &, >, and " characters. But this, for example, would encode just the <, &, >, and " characters:
<

encode_entitiesの2つめの引数に明示的にエスケープを行う文字を指定しないと、マルチバイト文字もエンコードの対象になるようで、これが原因で文字化けしていたようです。試しに第2引数をわたしてやると、文字化けが解消されました。

今回の件は作者のtanimotoさんに報告し、パッチを送ったのですが、送った数時間後には修正しCPANにアップしてくださいました。仕事がはやい!
しかも僕のパッチからさらに改良して、実行速度を向上させるあたり、さすがだなーと思いました。


GmailのPOP、SMTPはSSL対応

GmailのPOP機能を試してみたんですが、SSLで受信できるんですね。さらにSMTPもTLSに対応してるみたい。下手なプロバイダのサービスより全然セキュアですね。。恐るべしGoogle。

2005年3月31日木曜日

Sledge + MySQL4.1でセッションを保存できない

Sledge+MySQL4.1な環境でセッションを保存できないという状況に陥りました。
現象としては、セッションIDは保存されているのに、セッションデータ(a_session)だけが保存されないという状況です。どうやらTEXT型のフィールドにStorableモジュールでnfreezeしたデータを入れることができないみたいなので、原因を調べてみました。。

MySQL リファレンスマニュアル :: 2.5.1 バージョン 4.0 から 4.1 へのアップグレードによると、
>
すべてのテーブルと文字列カラムがキャラクタセットを持つようになった。 See 章 9. 各国キャラクタセットと Unicode。 キャラクタセット情報は、SHOW CREATE TABLE と mysqldump によって表示される (MySQL バージョン 4.0.6 以降は、新しいダンプファイルを読み取ることはできる。これより前のバージョンは、新しいダンプファイルを読み取ることはできない)。
<
ということで、4.1からはTEXT型がキャラクタセットを持つようになったようです。試しにshow create talbe sessionsを実行すると以下のように、CHARSET=ujisがついていました。
>

CREATE TABLE `sessions` (
`id` varchar(32) NOT NULL default '',
`a_session` mediumtext,
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=ujis
<

このことから、ujis(EUC)のキャラクタセットをもつTEXTフィールドにnfreezeしたujis以外の文字コードを含んだデータをインサートしようとしたため、データが空になってしまうのではと予想しました。

そこでSledge::Session::Pgにならって、nfreezeしたものをbase64エンコードして、ujisの文字コード内で表現できるデータにしてからインサートするようにしたところ、うまくデータを保存できるようになりました。実際には以下のようなSledge::Session::MySQLのサブクラスを作って、替わりにcreate_sessionにセットしてあげました。
>

package Sledge::Session::MySQL41;
use strict;
use base qw(Sledge::Session::MySQL);

use MIME::Base64;

sub _serialize {
my($self, $data) = @_;
return encode_base64(Storable::freeze($data));
}

sub _deserialize {
my($self, $data) = @_;
return Storable::thaw(decode_base64($data));
}

1;
<

Magic number checking on storable string failed

あるバージョンのStorableでシリアライズしたデータを別のバージョンのStorableでデシリアライズしようとすると吐かれるエラー。Storableのバージョンアップを行うなどした場合に注意が必要。

2005年3月29日火曜日

オライリーHACKS本3冊発売 - BSD HACKS, XML HACKS, PDF HACKS

待ちに待ったHacksシリーズ3冊発売。早速購入しました。

no image
Dru Lavigne 林 秀幸
オライリージャパン (2005/03)
通常2~3日以内に発送


no image
Michael Fitzgerald 木下 哲也 福龍興業
オライリージャパン (2005/03)
在庫切れ



no image
Sid Steward 千住 治郎
オライリージャパン (2005/03)
在庫切れ




2005年3月28日月曜日

google golf (ゴルフ)

google golf (ゴルフ): Epic->yoshimaxより

おもしろそうなので、やってみましたが結構むずい。。



タージマハール蒲田店

蒲田でカレー屋と言えばここ!と評判の「タージマハール蒲田店」に行ってきました。
蒲田駅西口の東急ガード下にある飲食街を少し進むと左手にあります。
店構えはちょっと怪しくて、おいしいと知らなければちょっと入りづらい感じ。
店内はカウンターのみで、結構狭く、周りにはインドの写真や、買ってきた食材が置いてあったりと、雑然としています。
これだけみると、ほんとにここが噂のおいしい見せなのかちょっと心配になります。

が、実際にカレーを食べると、さらさらとしていて結構辛いんですが、かなりうまい!
今回、僕は「スペシャルインドカレー」を、奥さんは「ボンベイムング(子羊と豆のカレー)」を注文しましたがどちらもとてもおいしかったです。次はキーマカレーか?

>

タージマハール 蒲田店

東京都大田区西蒲田7-70

03-3734-0913

<

2005年3月25日金曜日

mod_perl + encodingプラグマでサイト全体が文字化け

perl5.8から導入されたencodingプラグマを利用してSTDOUTの文字コードを透過的にエンコーディングして出力するようなスクリプトをmod_perl環境で実行すると、encodingプラグマの影響がそれを実行したapacheプロセスに残ってしまい、それ以降に実行されるすべてのスクリプトもこの影響を受けてしまうようです。

仮にEUCでサイトを構築していた場合、
>

#!/usr/bin/env perl
use strict;
use encoding 'euc-jp', STDOUT => 'utf8';
print "Content-type: text/html; charset=utf8;\n\n";
print "こんにちは";
<
のようなスクリプトを実行してしまうと、このスクリプトを実行したApacheの子プロセスにおいて、それ以降のすべての出力がUTF8にエンコーディングされてしまい、結果サイトが文字化けしてしまうことになります。

mod_perl環境ではencodingプラグマは使用しないで、JcodeとかEncodeモジュールを利用するほうがよさそうです。

-Jcodeを使う場合
>

#!/usr/bin/env perl
use strict;
use Jcode;
print "Content-type: text/html; charset=utf8;\n\n";
print Jcode->new("こんにちは", 'euc')->utf8;
<

-Encodeのfrom_toを使う場合
>

#!/usr/bin/env perl
use strict;
use Encode;
my $str = "こんにちは";
Encode::from_to( $str, 'euc-jp', 'utf8');
print "Content-type: text/html; charset=utf8;\n\n";
print $str;
<

ティングラーを購入

王様のアイデアにてティングラーを購入しました。2650円也。ツボ天国の頭を心地良く刺激して神経を活性化させてくれるアメリカからやってきた幸福のヘッドマッサージ器で、ちょっと前にLAで大人気だった商品だそうです。

実際に使ってみると冷たい金属が頭皮に当たって何ともいえないゾクゾク感を感じます。でも2650円はちょっと高いような気も。。電動式もあるみたいw

2005年3月22日火曜日

mt-ban-nonja-tbping.pl - 日本語を含まないTrackbackPingをはじく

最近トラックバックスパムが頻繁に送られてくるようになりました。最初は手で消していたんですが、スパムの量が一向に減らないので、対策として、日本語を含まないTrackbackPingをはじくようなプラグインを書いて見ました。

mt-ban-nonja-tbping.pl

mt-ban-nonja-com.plと同様に、ひらがなもしくはカタカナの連続する回数と出現箇所をグローバル変数$CharRep、$NofMatchで設定できます。デフォルトは3文字連続する部分が1カ所以上あればOKとなっています。
trackback pingを受け取るとこの設定に従ってexcerptの中身をチェックし、条件をクリアできなければはじきます。

mt-ban-nonja-com.pl - コメントスパム対策プラグイン

以前のエントリーでコメントスパム対策として「コメントにひらがながM回連続している部分がN箇所以上ない場合スパムとみなして、はじく」ということをやりましたが、これをMTプラグイン化してみました。

mt-ban-nonja-com.pl

前回からの変更点として、以前のエントリーではひらがなのみの連続としていたところを、ひらがなもしくはカタカナの連続としています。

上記プラグインをmtのプラグインディレクトリに放り込んでやれば動くと思います。ひらがなの連続する回数と出現箇所はプラグイン内にかかれているグローバル変数$CharRep、$NofMatchで設定できます。デフォルトは3文字連続する部分が1カ所以上あればOKとなっています。
また、$Method = "moderate"; でモデレート、"deny" で投稿を拒否します。このあたりの実装はmiyagawaさんのMTBanASCIIを参考にさせて頂きました。





サイトリニューアルしました。

hori-uchi.comをリニューアルしました。
デザインをしてくれたkawachi君に感謝!!大事に使わせてもらいますね。
絵心がない僕にとって、さくっとこんなにすてきなサイトをデザインできるなんて、ほんと尊敬しちゃいます。

サイトの方ですが、まだTOPと個別アーカイブのみ新デザインを適用した状態で、他の部分はデザインぐちゃぐちゃですが、徐々に直していきます。



かにみそは脳みそじゃない

どうでもいいことですが、かにみそってかにの脳みそじゃなくて内臓なんですね。普通に考えると当たり前なんですが、ずっと脳みそだと思い込んでた。


2005年3月21日月曜日

あべちゃん



妹に会いに麻布十番に行ってきました。その途中でみかけた「やきとりあべちゃん」を撮影。今その帰りの電車の中です。




2005年3月20日日曜日

画像を使わず角の丸いボックスを表示する

[を] CSSで角を丸くするより



画像を使わないで角の丸いボックスを作れるんですね。








hori-uchi.com









2005年3月19日土曜日

gonzui Perl対応

gonzui Perl 対応: blog.bulknews.netより

miyagawaさんがgonzuiのPerl対応をしたそうです!熱すぎます!

さらにCPANモジュールをgonzuiを使って検索できるCPAN code search by gonzuiも同時に公開。ため息が出ます。。
これでperlユーザはCPANに登録された大量のコードをいつでも簡単に参照することができるようになるわけですね。




水戸納豆スナック



恐る恐る食べたけど以外においしい!




2005年3月16日水曜日

これだけは知っておきたい個人情報保護

これだけは知っておきたい個人情報保護
岡村 久道 鈴木 正朝
日本経済新聞社 (2005/01)
売り上げランキング: 8
通常2~3日以内に発送
おすすめ度の平均: 4.62
5 「これで十分!!」
4 入門編としてなら可
5 もっとこういう本がでてほしい


薄くて一気に読めます。お手軽に個人情報保護法の概要がつかめる一冊だと思います。525円と安いですし、最初に読む本としておすすめ。




amaztype - 関連する商品で文字を描く

amaztypeに感動。AWSを使って入力したキーワードに関する書籍やCDの画像をとってきて、その画像でキーワードを描きます。描画にはFlashを使ってますね。



Googleデスクトップ検索日本語版公開

Google デスクトップ検索日本語版が公開されてます。
機能は3月7日に公開されて英語版と同等だそう。


Class::Dateで扱えるのは1902年から2038年まで

search.cpan.org: Class::Date - Class for easy date and time manipulation

Class::Dateに「1900-01-01」を渡すとなぜか2038年になってしまうのでドキュメントを見直すとBUGS AND LIMITATIONSのセクションに以下の記述がありました。

>
This module uses the POSIX functions for date and time calculations, so it is not working for dates beyond 2038 and before 1902.
I don't know what systems support dates in 1902-1970 range, it may not work on your system. I know it works on the Linux glibc system with perl 5.6.1 and 5.7.2. I know it does not work with perl 5.005_03 (it may be the bug of the Time::Local module). Please report if you know any system where it does _not_ work with perl 5.6.1 or later.
I hope that someone will fix this with new time_t in libc. If you really need dates over 2038 and before 1902, you need to completely rewrite this module or use Date::Calc or other date modules.
<

時間関係はTime::Pieceを使った方がいいかも。


2005年3月15日火曜日

技術者というのは

プロに訊く!分かりやすい情報処理の仕方:私の時間より

「技術者というのは、本で勉強して基礎をつくり、ウェブで最新の情報を仕入れ、技術を磨く」という言葉に妙に納得。




2005年3月14日月曜日

はてなフォトライフデスクトップ

はてなフォトライフにアップロードされた写真をデスクトップにランダムに表示してくれるはてなフォトライフデスクトップをインストールしてみました。
表示される写真のほとんどが、動物とか風景とかきれいな写真なんですが、たまにグラビアとか表示されて、ちょっとどっきり。




ちらりウィンドウ(マウス用)

ちらりウィンドウ(マウス用)

便利そうなので使ってみたら、結構いい感じ。


2005年3月13日日曜日

蒲田のベトナム料理店 「ミレイ」 に行ってきました

都内随一のベトナム料理店と噂されるミレイに行ってきました。グーグルで検索してみると、おいしいとかやみつきになると言った内容のブログや記事をたくさん見つけられます。
-ayanolog: 草いっぱいのフォーを食べる:蒲田「ミレイ」
-B食倶楽部/おなかの具合次第
-ミレイ

場所は蒲田駅東口から線路沿いに歩いて5分くらいのところ。予約時間の18時より少し早い17時45分くらいに到着したのですが、中に入ってみるとすでにほぼ満席状態。噂通りの人気店みたいです。

今回注文した料理は、「青パパイヤのサラダ」「肉生春巻き」「バインセオ(ベトナム風お好み焼き)」「山芋のスープ」「鶏肉のフォー」、食後のデザートに「揚バナナ」と「ベトナム風しるこ」の計7品。

肉生春巻きは具がぎっしりで大ぶりなのに、しっかり巻かれていて、食べてる間にぼろぼろ崩れることもありませんでしたし、バインセオも野菜たっぷりでおいしい。デザートの揚バナナとベトナム風しるこも普段食べたことない味に満足しました。
ただ、パクチーが大の苦手な僕にはそれが大量に入った「山芋のスープ」はちょっと飲めませんでした。また、「鶏肉のフォー」と「青パパイヤのサラダ」にもすこしパクチーが入っていて、ちょっと苦戦。。
このエントリーを書いている今も何となくパクチーのにおいがするような気がします。。

パクチーや香草が苦手な人には食べられない料理も多そうですが、それが好きって人にはたまらないお店ではないかと思います。




3/29にオライリーよりHacks3冊発売

XML Hacks : NDO::Weblogより

3月29日にオライリーから、XML HacksBSD HacksPDF Hacksの3冊が発売されるそうです。
Hacksやクックブックは一つ一つの記事が簡潔で読みやすいのと、目次からやりたいことを見つけやすいので、とても気に入っています。
それにしてもPDF Hacksにはどんなことがかかれているんでしょうか。すごく読みたい。


とんかつ和幸はひとつじゃなかった

とんかつ和幸への不思議より

とんかつ和幸って3つもあったんですね。どこに行っても和幸ってあるような気がしてましたが、3社もあったのならそれもうなずけます。会社の近くの和幸はどれだっけ??



2005年3月9日水曜日

WEB+DB PRESS特別総集編

WEB+DB PRESS特別総集編が3月25日に発売されるようです。内容はこんな感じ。
「Perlで始めよう」がない!!

-Looking Back: WEB+DB PRESS Vol.1~Vol.24までの表紙,目次
-巻頭記事『Web-DBシステム開発の現在/過去/未来』……羽生章洋
-スタートアップ解説『Webシステム開発をはじめよう!』……山田祥寛

--第1章:はじめてサーバサイド技術を学ぶ方のために
--- Webの基本的なしくみ
--Part1:サーバサイドプログラミングをはじめよう
--第2章:サーバサイドJavaではじめよう(その1)
--- JSP&サーブレット~はじめの一歩
--第3章:サーバサイドJavaではじめよう(その2)
--- PostgreSQL連携からStrutsアプリケーション構築まで
--第4章:ASP.NETではじめよう
--- ADO.NETを使ってMSDEへのデータアクセス
--第5章:PHPではじめよう
--- データベース接続用ライブラリPEAR::DBとテンプレートエンジンSmarty
--Part2:オープンソースデータベースを使おう
--第6章:PostgreSQLを使おう
--- 最新! PostgreSQL 8.0 Windows版をインストール
--第7章:MySQLを使おう
--- 充実のGUI管理ツールで管理の省力化


2005年3月8日火曜日

ThunderbirdのメールボックスもインデックスするGDS

Hello GDS, Goodbye YDS (by Jeremy Zawodny)より

最近リリースされたGDS(Google Desktop Search)はThunderbirdのメールボックスもインデックスしてくれるみたいです。メールの検索をGoogleで行えるようになるとかなり便利になりそう。
OSの再インストールをしてからGDSを入れてなかったんですが、また入れてみようと思います。



MovableType with PostgreSQLのインストールでの注意点

MovableTypeのインストールでストレージにPostgreSQLを選択した場合、ある条件でmt-load.cgi実行時に以下のエラーがでました。
>

Insertion test failed on SQL error ERROR: value too long for type character varying(50)
<
上記エラーが発生した条件は以下のとおりです。
-MovableType - 3.151
-PostgreSQL - 7.3.5
-サイトの文字コードはUTF-8
-DBの文字コードがSQL_ASCII

エラーを回避するにはDBの文字コードをUNICODE(サイトの文字コードがEUCの場合はEUC_JP)で作り直せばOKです。
>

createdb -E UNICODE mt_database_name
<

作成したデータベースの文字コードは以下のコマンドで確認できます。
>

psql -l
<

PostgreSQLのVARCHAR型はバイト数でなく文字数で指定できるのでデータベースの文字コードをUNICODEにした場合はバイト数は50バイトを超えていても文字列として50文字以内であればインサートできるようです。








2005年3月4日金曜日

RDBMS解剖学 よくわかるリレーショナルデータベースの仕組み

RDBMS解剖学 よくわかるリレーショナルデータベースの仕組み
鈴木 幸市 藤塚 勤也
翔泳社 (2005/02/22)
売り上げランキング: 9,460
通常24時間以内に発送


これもおすすめらしい。

CSSクックブック

CSSクックブック―Webデザインのための活用テクニック集
Christopher Schmitt ドキュメントシステム
オライリー・ジャパン (2005/02)
売り上げランキング: 1,733
通常3日間以内に発送
おすすめ度の平均: 3
3 やっと出た、オライリーの「CSSクックブック」。


クックブックとかHackがついたオライリー本はどうしてもほしくなりますね。
この本結構評判がいいようなので購入予定。


2005年3月2日水曜日

Path::Class - Cross-platform path specification manipulation

search.cpan.org: Ken Williams / Path-Class
ファイルのPathをオブジェクトとして扱えないかなーと思って探していて見つけたモジュール。
File::Specよりシンプルにパスを扱えるてよさげ。



2005年2月28日月曜日

Web標準化Tips

Web標準化Tips - Web標準普及プロジェクト

ブラウザ判定でなくオブジェクト検出を使った方がいいとか、Web標準化に関するTIPSがわかりやすくまとまってます。メモ。

2005年2月24日木曜日

Windows XPにAdministratorでログオンする

さっき「Windows XPにAdministratorでログオンする方法は?」と聞かれてすぐに答えられませんでした。なんか簡単にできそうですが、普段自分のアカウントでログインしているし、そのアカウントにAdministrator相当の権限を持たせているので、いざ、Administratorでログオンするにはって聞かれると、わからないものですね。

でもちょっと調べたら方法はすぐに見つかりました。
XPに「Administrator」でログオンする / デジタルARENA

Professional Editionなら、「ようこそ画面」で、[Ctrl]+[Alt]+[Delete]を2回押すと、このログオン画面が表示されるみたい。Home Editionはセーフモードで立ち上げないとAdministratorではログイン出来ないみたいですね。

うーん、知らなかった。





Fire File Copy - ファイルの高速コピー、移動

A-1 DRIVE -Software / Fire File Copy

友達に教えてもらった高速にファイルをコピー、移動できるツール。コピーの際、ハードディスクでなく物理メモリを巨大なバッファとして使うことで、高速かつ、ガリガリという音を立てずにファイルをコピー、移動出来るそう。
動画とかでっかいファイルをコピーするのによさげ。なによりハードディスクがガリガリ言わないので、精神衛生上とってもいいですね。



Class::Dateいい感じ

Class::DBIのWikiで使われてたのをみてから、時間を扱うモジュールとして、Class::Dateを利用しています。時間をオブジェクトとして扱うモジュールといえば、Time::PieceとかDate::Simpleが有名ですが、Class::Dateも結構いい感じです。Class:DBIと一緒に使うと便利で、has_aでDATETIME型のカラムにマッピングするのが以下の一行で行えます。

>

__PACKAGE__->has_a( modify_date => 'Class::Date' );
<




2005年2月17日木曜日

あやしい医者

何年かぶりにインフルエンザにかかってしまいました。久しぶりに39度越えの熱を体感して死ぬかと思いました。病院に行ったのも久しぶりでした。が、その病院がなんかとってもあやしかったんです。
今の場所に引っ越してきて初めての病気なので、病院がどこにあるかもわかりません。なのでYahooで調べて、一番家から近い病院に行きました。
具合の悪い体を引きずって何とかたどり着いたのですが、外から見ると廃病院。。明らかに営業していなそうな感じです。あらかじめ電話して営業していることは確認済みだったので、ドアを開けてみると看護婦らしきおばさんが受付から出てきました。初めての来院なので、いくつか質問され、それに答えると、ちょっと待つように言われました。僕以外の患者はいなく、なぜか2003年のディズニーキャラクターのカレンダー。なんか不思議な空間です。
少し待っていると、診察室の反対側からゴラム似のおじいさんがひょこひょことでてきました。そしてそのまま診察室へ。すると僕も診察室に呼ばれました。どうやらあのゴラム似のおじいさんが先生のようです。
診察室では現在の症状を一通り話しました。その後拷問椅子みたいな椅子に座らされてのどに消毒薬を塗られ、絶対音聞けてないだろってくらいの早さで聴診器をぺたぺたされ、指でこんこんされ、一通りの診察は終わったみたいです。
それで出た結果が「インフルエンザだね」。。至ってふつうです。なんか「注射うつ?」とかいってましたが、なんの注射かわからないし怖かったんで注射はやめました。とりあえず、今回は処方箋を書いてもらえただけよしとしました。
次は別の医者にいこーっと。

2005年2月10日木曜日

Sledge::Plugin::JavaScript::DocumentWrite

Sledge::Plugin::JavaScript::DocumentWrite - output content as javascript's document.write

Outputをdocument.writeにして出力するSledgeのプラグインを書いてみました。
フィルターの部分はApache::JavaScript::DocumentWriteのコードを参考にさせてもらいました。
それとContent-typeをtext/plainにするためにオリジナルのoutput_contentにちょっとだけ手を加えたものをAFTER_DISPATCHにHookしてます。ちょっと強引かなー。

>

package Sledge::Plugin::JavaScript::DocumentWrite;

use strict;
use vars qw($VERSION);
$VERSION = '0.02';

sub import {
my $class = shift;
my $pkg = caller(0);
no strict 'refs';
*{"$pkg\::add_documentwrite_filter"} = \&add_documentwrite_filter;
}

sub add_documentwrite_filter {
my $self = shift;
$self->add_filter(\&documentwrite_filter);
$self->register_hook(AFTER_DISPATCH => \&output_content);
}

sub documentwrite_filter {
my ($self, $content) = @_;
return join "\n", map {
s/\x27/'/g; # '
$_ = "document.writeln('$_');";
} split /\n/, $content;
}

sub output_content {
my $self = shift;
$self->r->content_type('text/plain');
my $content = $self->make_content;
$self->set_content_length(length $content);
$self->send_http_header;
$self->r->print($content);
$self->invoke_hook('AFTER_OUTPUT');
$self->finished(1);
}

1;
<



2005年2月7日月曜日

電車男が映画化

2ちゃんで話題の実話「電車男」が映画化 - nikkansports.com > 芸能ニュース
あの電車男が映画化されるみたい。配役が気になる。。



2005年2月3日木曜日

FlipClip - 簡単動画クリップ作成ツール

VBC、Webカメラの撮影動画をブログに掲載できる「FlipClip」の実機デモ

サーバサイドの開発を担当している簡単動画クリップ作成ツール「FlipClip」が今開催中のNET&COM 2005に出展されています。実際のサービス開始は2月下旬の予定です。

FlipClipは専用レコーダーを使って録画出来る他、携帯で録画した動画をメールに添付して送るという方法で携帯からの投稿もできます。

FlipClipに保存した動画はこんな感じで簡単に貼り付けられます。






2005年1月31日月曜日

ネットワークセキュリティHACKS―プロが使うテクニック&ツール100選
Andrew Lockhart 渡辺 勝弘 鶴岡 信彦 黒川 原佳 新井 貴之 松田 綾爾 鈴木 和也
オライリー・ジャパン (2005/01)
売り上げランキング: 689
通常2~3日以内に発送


オライリーからネットワークセキュリティHACKSが発売されました。サーバのセキュリティを見直す際の参考によさそう。早速注文しました。


2005年1月28日金曜日

mixi プレミアム - mixiが有料サービス提供開始

イー・マーキュリー、ソーシャルネットワーク“mixi”に有料オプション“mixiプレミアム”を提供開始

mixiが有料サービスを始めるそうです。料金は月額315円。
今回の有料サービス実施に合わせて、日記は3月1日に100MBまでの容量制限が、メッセージは3月31日から60日間の保存期間が設定されるそうなので、mixi日記をバリバリ使っている人は注意が必要かも。

Template::Toolkit - 文字列の連結

Template::Toolkitのテンプレート内の文字列の連結は'_'(アンダースコア)を使う。忘れるのでメモ。

Template Toolkit Manual

You can concatenate strings together using the ' _ ' operator. In Perl 5, the '.' is used for string concatenation, but in Perl 6, as in the Template Toolkit, the '.' will be used as the method calling operator and ' _ ' will be used for string concatenation. Note that the operator must be specified with surrounding whitespace which, as Larry says, is construed as a feature:
[% copyright = '(C) Copyright' _ year _ ' ' _ author %]
You can, of course, achieve a similar effect with double quoted string interpolation.
[% copyright = "(C) Copyright $year $author" %]



2005年1月26日水曜日

Movable Typeに脆弱性

Movable Type 日本語版サイト: 【重要】 Movable Typeの脆弱性と対策についてによると、現在出荷済みのMovable Typeすべてにスパムメールの送信を幇助してしまう脆弱性が発見されたそうです。
同エントリーに回避策も載っています。対処方法は簡単で、パッチファイルをふつうのMTプラグインと同様pluginディレクトリにおくだけなので、早めに導入しておいたほうがよさそうです。





2005年1月25日火曜日

nofollow pluginを導入

最近Blog業界でホットな話題「rel="nofollow"」ですが、MTユーザーはプラグインを使えば簡単にnofollowに対応できるということで早速導入してみました。

Movable Type Publishing Platform: Movable Type 'nofollow' plugin

ここからダウンロードできます。
導入は簡単で、tarかzipを解凍して出てきたファイルをpuluginディレクトリに放り込むだけです。
これでコメント内のリンクの属性に「rel="nofollow"」がつくようになります。

rel="nofollow"がついているリンクはGoogle,Yahooでページランクの計算対象としないことになったので、コメント内に書かれたリンクに対して、この属性を付加するようにすれば、スパマーにとって、nofollow対応済みのサイトに対するコメントは意味のないものになります。
スパマーはコメント内に自分のサイトへのリンクを書くことで、自分のサイトのページランクを上げて検索結果の上位に表示させようと考えているからです。

このようにnofollowに対応してもすぐにコメントスパムが送りつけらなくなるというものではありませんが、長い目で見るとかなり革命的なスパム対策だと思います。






Extreme Perl オンラインドキュメント

Extreme Perl is online: blog.bulknews.netをみて知ったんですが、Extreme PerlというPerlを使ったXP(Extreme Programming)について書かれた本のHTML,PDFが公開されたそうです。

Extreme Perl: Home

読まなくては。


2005年1月24日月曜日

Gmail invitation再

実は最近あんまり使っていなかったGmailですが、久しぶりにログインしたらinvitationできるようになってました。どうしようもないことですが、Webベースだとローカルで動かすふつうのメーラと比べて速度の面で、もたつき感があるので、常用するには至りませんでした。。友人がやっていたんですが、メーリングリストの送信先をGmaiにしてお、アーカイブしておくっていう使い方はいいですね。Googleの検索機能が活用できるし。

ということで、Gmailアカウントほしい人はコメントください。


2005年1月22日土曜日

はてなフォトライフ 色別写真一覧

はてなフォトライフに新機能色別写真一覧が追加されたそうです。
色別とか焦点別とかモデル別とかはてなフォトライフはカテゴライズの仕方がおもしろいですね。


2005年1月21日金曜日

個別アーカイブの再構築でエラー

突然、個別アーカイブの再構築を行うとこんなエラーがでて再構築に失敗するようになってしまいました。

>

Reading from filehandle failed at /usr/local/www/mt/lib/MT/FileMgr/Local.pm line 128.
<

該当のLocal.pmをのぞくとDigest::MD5のaddfileメソッドでこけているみたいです。

>

124 my $fh = gensym();
125 open $fh, $file or return 1;
126 if (eval { require Digest::MD5; 1 }) {
127 my $ctx = Digest::MD5->new;
128 $ctx->addfile($fh);
129 close $fh;
<

そこで開けないファイルの中身をみようとしたんですが、

>

$ cat 000224.html
cat: 000224.html: Input/output error
<

。。。
う~ん、原因はわかりませんが、ファイルが壊れてしまっていたみたいです。壊れたファイルを削除して再構築をかけたら、今度は問題なく完了しました。めでたしめでたし。



2005年1月20日木曜日

PostgreSQL8.0リリース

スラッシュドット ジャパン | PostgreSQL 8.0 リリース

PostgreSQL 8.0がリリースされたようです。いろいろ機能が追加されている模様。


2005年1月17日月曜日

Date::Simple::Month 0.02

Date::Simple::Monthのバージョンを0.02にアップしました。
といっても特に機能追加はなく致命的なバグの修正のみです。0.01では内部で使用しているDate::Simpleをuseするのを忘れていて、単純に動いていませんでした。。
使おうとしてくださった方々、ごめんなさい。




2005年1月14日金曜日

MFPM - My Favorite Perl Modules

お気に入りのPerlモジュールを管理できるMFPMというサイトが公開されたということで、早速登録してみました。

現在のところ、主な機能はこんな感じで、これからも便利な機能がどんどん追加されていきそうな予感。

-CPANモジュールの検索
-コメントをつきのお気に入りリスト
-モジュールのバージョンアップの検知
-モジュールに関する他人のコメント閲覧
-他人のお気に入りリスト閲覧
-自分のお気に入りリストを自分のBlogに貼り付けられる
-CPANモジュールに対してトラックバック送信可能
-お気に入りに登録しないモジュールに対してメモを残せる

モジュールに関する他人のコメントが読めるのはいいですね。新しいモジュールを試してみたいって時にまずはここにきて、そのモジュールの評判をみてみるってかんじで使えそう。

とりあえず自分のBlogにもリストを貼り付けてみました。



2005年1月11日火曜日

自作PerlモジュールをCPANでインストールする

今まで、新しくサーバを構築する時には、自作のPerlモジュールのインストールは一つ一つ、makeしてインストールってことをしていたんですが、モジュールの数が多くなってきていちいちインストールするのがしんどくなってきました。モジュールのインストールというとCPANモジュールを利用した方法が非常に簡単なので、自作モジュールも何とかCPANモジュールを使ってインストールできないか調べてみました。
すると、CPAN::Siteなるモジュールを発見。モジュールの作成日時が相当古いんでちょっと心配でしたが、とりあえず、試してみました。ドキュメントの通りに試してみるととりあえず、自作モジュールをCPAMモジュールを使ってインストールできるようになったんですが、普通にCPANに登録されているモジュールのインストールができなくなってしまいました。(検索してもHITしない)
何か設定が悪いのか、仕様なのかちょっと調べきれてませんが、なにやらいまいち。。
自作モジュールのインストール、他の人はいったいどうやっているんでしょうか。。

bundleを作成してPerlモジュールのインストールを簡単に

perlにはCPANというとても便利で強力なサイトがあり、そこに登録されている膨大な数のPerlモジュールを利用することにより、面倒なプログラミングを簡単にできたりするんですが、Perlモジュールを多用しはじめると、そのインストールが結構面倒くさくなってきます。特に新たにサーバをたてて、システムを新規に構築するなんて時はモジュールのインストールだけでかなり時間がかかってしまうってことになりかねません。
そこでいつも使うようなモジュールをリストにまとめておき、一発でインストールできれば、非常に便利ですし時間も節約できます。CPANではBundleを使うことによりそのようなことを実現できます。

Bundleはそれ自体がPerlモジュールです。Bundleは以下の手順で作成します。
- まずBundle::の名前空間を持つモジュールとして作成する
- =head1 CONTENTSというPODセクションを作成し、そこにモジュールのリストを記述する
- 記述方法はModule_Name [Version_String] [- optional text]
- 作成したBndle::Fooをパスの通った場所におき、perl -MCPAN -e install 'Bundle::Foo'

詳しくはperldoc CPANすると書いてあります。また、CPANでBundleで検索するとたくさんヒットしますので、それを参考にすれば簡単にかけると思います。


Google、自動生成ページは上位にでにくく

[を] 自動生成ページがGoogle検索で上位に出にくく

Googleが検索対象ページを従来の2倍の80億ページに増やしたのが原因らしいです。
メモ。

2005年1月10日月曜日

picasaで画像管理

picasa (画像ビューワソフト): Epic->yoshimax

yoshimaxさんのサイトで紹介されていたGoogleからフリーで配布されている画像管理ソフト。以前どこかのブログで紹介されていて自分のPCにもインストールしたんですが、インストールしたことを忘れていてました(汗)
yoshimaxさんの記事をみてインストールしていたことを思い出して、自分のPCを確認してみると、タスクバーに常駐していてPC内の画像検索していたようです。picasaを起動してみると、検索された画像が大量にリストアップされてます。使い方が直感的で使ってみたいと思わせるアプリですが、フォルダの奥の奥の方にこっそりしまっておいてそのまま忘れてしまったアレな画像とか出てきそうでちょっと怖いかもw


2005年1月5日水曜日

Thunderbirdの迷惑メールフィルタがいい感じ

メーラは今までBeckyを使っていたんですが、正月休みを利用して通信のSSL化などメール環境のセキュリティを強化したところ、Beckyでは、IMAP-SSLのデフォルトポートの993以外のポートでメールを受信できなかったので(BeckyのReadmeにはできるって書いてあったんですが、僕はできませんでした。。)、前から気になっていて1.0日本語版が正式にリリースになったThunderbirdを使ってみることにしました。正月から使い続けていますが迷惑メールフィルタが結構いい感じです。
まだ数日しかたっていないのにかなり正確に迷惑メールを判別してくれます。このままのりかえちゃうかも。

2005年1月4日火曜日

MT3.x+mod_perl環境でMTプラグインのロードに失敗するとエラーになる

結構前からなぜかmod_perl環境でMTが動かなくなってしまっていて、しょうがなくCGI環境で動かしていたんですが、どうにも遅くてやりきれないので、ちょっとMTのソースを追ってみました。

エラーの内容はこんな感じです。
>

Got an error: Can't call method "connection" on an undefined value at /path/to/mt/lib/MT/App.pm line 594.
<

App.pmの該当行ををみてみるとどうやら、apacheのリクエストオブジェクトが空のためエラーになっている模様。さらにソースを追ってみると、親クラスのMT.pmでのinitでこけていることが判明。そこでMT.pmにwarnを仕込んでデバッグしてみたところ、プラグインのロードに失敗した際に呼ばれるlogメソッドが原因だと判明しました。

MT.pmのinitメソッド内では、pluginのreiquireに失敗すると、$mt->logメソッドを呼び出すのですが、このlogメソッドはMT::App.pmで定義されたlogメソッドによりオーバーライドされています。
そのMT::App::logでは$mt->{apache}->connectionを呼び出しているのですが、$mt->{apache}はこの時点ではまだ生成されていないため、最初に書いたようなエラーがでていたのでした。

このエラーを回避し、プラグインのロードに失敗した際もMTが止まらないようにするためには、失敗した際に、$mt->logではなくMT::logを直接呼び出すように書き換えればOKだと思います。とりあえずパッチを書いてみました。

>

--- MT.pm.orig Tue Jan 4 05:27:34 2005
+++ MT.pm Tue Jan 4 05:27:42 2005
@@ -292,7 +292,7 @@
$plugin = $1;
eval { require $plugin };
if ($@) {
- $mt->log("Plugin error: $plugin $@");
+ MT::log("Plugin error: $plugin $@");
return 0;
}
return 1;
<

2005年1月1日土曜日

PRIDEよりK-1だったか。。

昨日の夜はPRIDEをみたんですが、ヒョードルvsノゲイラ以外いまいち盛り上がれず。K-1録画しといたので、今からみます。昨日CMの合間にちょろっとみたら魔裟斗vsKIDがやってて魔裟斗がダウンしてたので、ちょっと楽しみ。あと、ボビーがどうなったのかきになるー。