Bookmark including this page.Add to hatena bookmark

$ MAN HIMAZINE NEWS 2.1Bookmark including this page.Add to hatena bookmark

巡音ルカ [pixiv]
[illustration][vocaloid] 先生! すごい勢いで、巡音ルカのイラストが投稿されています!
asahi.com(朝日新聞社):USJ、7日から再入場禁止 「場内の食事高い」不満も - 社会
曰く「今回の措置は『非日常の世界を楽しみたい』というお客さんからの要望でもある」―説明に無理があるのが分からないかな。古今東西、共存共栄を拒み、利益を独占しようとして栄えた例は無いのだよ
「さざれ石」 は比喩ではなかった
[ΩΩΩ<なんだってーー] 『巌となるのは本当だった』『外観上小さな石の隙間が炭酸カルシュウムや水酸化鉄等で埋められ固化した石を一般に「さざれ石」と呼んでいるようである』――東洋の神秘、君が代の秘密である。
VOCALOID CV03 巡音ルカ‐ニコニコ動画(ββ)
[vocaloid][動画] これがクリプトンの新兵器か! 数週間後の vocaloid ランキングが楽しみだ
派遣村の疑問:アルファルファモザイク
[2ch] これは貧しい人達が運動家に利用され、結果的に社会からの支持を失なってしまうという悲しい物語ではないだろうか。彼らに必要なのはパンでも演劇でもなく、情報なのだろう
新春放談 - 某日記(前期)
[★] 曰く『福祉が崩壊するのは、人々が福祉に感謝しなくなったときです』
Firefoxのメモリ食いを小食にする (うむらうす)
[Firefox] 高速 Back/Forward 機能(bfcache)がメモリを大量消費している疑いが高いので、about:config で browser.sessionhistory.max_total_viewers に 0~5(=ページ数)を設定すればよい
【初音ミク】夜・逃・げでリセット!改【柊つかさ】‐ニコニコ動画(ββ)
[vocaloid][動画][笑] 初めて聴いたけど、歌詞が秀逸だなぁwww
Python3000 - TSNETWiki on TextWorld
[wiki][python] Python 3.0 に関する Wiki !
祭り09詳細 - XpjugWestWiki
[event] XP関西2009 - 2009年1月24日(土) 10:00~17:00 - 兵庫県伊丹市立生涯学習センター「ラスタホール」 / 関係ないけど、日本XP関西のホームページ、デザインがカッコイイですね
Web2.0ナビ: 送信ボタンの上にリンクがあればtabindex=-1に
[web] リンクに tabindex=-1 を指定しておくと、tab キーでフォーカスが移動しなくなる
禁則事項 - アンサイクロペディア
[百科][笑] なんというタブー一覧

(もっと読む?)

Powerd by はてなブックマーク &「 RSS Readerプラグイン

MHI/2.1

(2009.01.03)

Bookmark including this page.Add to hatena bookmark

$ [Perl] リファレンス返しのパフォーマンスBookmark including this page.Add to hatena bookmark

呼び出し元へ値を返す場合、戻り値で返す他、 参照渡しで引数で渡された変数へ関数側が値を返す方法がある。

ここで同じことをするのに、その 「リファレンスの書き方」で、どれだけ速度差があるか計測してみた。

use strict;
use warnings;
use Benchmark;

my $cnt1=0;
my $cnt2=0;
my $cnt3=0;
timethese(1000000,
    {
        'Perl-4 Reference' => sub{ bar1($cnt1);} ,
        'Perl-5 Reference[1]' => sub{ bar2(\$cnt2);} ,
        'Perl-5 Reference[2]' => sub{ bar3(\$cnt3);} ,
    }
);

print "cnt1=$cnt1\n";
print "cnt2=$cnt2\n";
print "cnt3=$cnt3\n";

sub bar1{
    $_[0]++;
}

sub bar2{
    ${$_[0]}++;
}

sub bar3{
    my $p=shift;
    ${$p}++;
}
  • bar3 は標準的な参照渡し。\ 演算子で参照を渡している。
  • bar2 は shift を使わず、直接 ${$_[0]} を使って、速度を稼ごうとている。
  • bar1 は Perl 4 の参照渡し。@_ を $_[…] のままで変更すると、 呼び出し元の内容にも変更が反映される。

結果発表:

Benchmark: timing 1000000 iterations of Perl-4 Reference, Perl-5 Reference[1], Perl-5 Reference[2]...
Perl-4 Reference:  1 wallclock secs ( 0.42 usr +  0.00 sys =  0.42 CPU) @ 2375296.91/s (n=1000000)
Perl-5 Reference[1]:  1 wallclock secs ( 0.75 usr +  0.00 sys =  0.75 CPU) @ 1331557.92/s (n=1000000)
Perl-5 Reference[2]:  1 wallclock secs ( 1.34 usr +  0.00 sys =  1.34 CPU) @ 745712.16/s (n=1000000)
cnt1=1000000
cnt2=1000000
cnt3=1000000

一番最後に cntN の値を表示させることで、 呼び出し側の変数が修正されていることを確認している。

予想どおり、最も演算子の少ない Perl-4 Reference が速いことが分かった。

残念ながら、Perl-4 Reference は wifky では全く使っていない。もったいない話だ。 (互換性の都合、今から変更するのは難しい)

$ 思えば、充実してそうで、してなかったような年末年始であったのことよBookmark including this page.Add to hatena bookmark

今回のメンテナンスは 1/5 なので、 一般ぴーぽーのように普通の年末年始を送れたのことよ。

大掃除

数ヶ月ぶりに綺麗にはなったが、一般的に言うところの綺麗というレベルには、 到底達しているとは言えないな。

おれてき、ゲーム豊作

昨日から 洞窟物語ばっかりやっている。おいらには、ちょうどいい難度!

かつてない死にゲーと呼ばれる「I Wanna Be The Guy」も ダウンロードして、 ちょっとだけやってみた。

すみません、論外の難しさでした

まず、二段ジャンプすら、ろくに出来ない俺がいる。

思わぬ散財の嵐

といっても、プリンターと DVD-RAM Drive を買っただけなのじゃが。 それぞれ一万円以内で済ましているので、 出費よりも空間を削られてるのが痛いといったところか。

そもそも、古い機器とか、いろいろ捨てにゃならんよなー えーと家電リサイクル法的には、どうするのが一番いいのだ。 (VL-BUS のビデオカードはいい加減に捨てるべきだろ、JK)

まとめ

ここまで書いて寝てしまったので「昨日のところは」以上とする。

(2009.01.02)

Bookmark including this page.Add to hatena bookmark

$ [Python3] 日本語ファイル名が os.listdir に出ない件についてBookmark including this page.Add to hatena bookmark

Python 3.0 で os.walk を使うと、日本語ファイル名が弾かれてしまうみたいだ…。

Note that when os.listdir() returns a list of strings, filenames that cannot be decoded properly are omitted rather than raising UnicodeError.

os.listdir() が文字列のリストを返す時、unicode化できないファイル名は UnicodeError を投げるのではなく、適切に?省略されてしまう。

あー

$ はつもうでBookmark including this page.Add to hatena bookmark

リアルでも行ってきたけど、おみくじは引いてなかったので、 nii.n さんに倣って、 モナー神社でひいてきた。

【末吉】 (No.63980) モナー神社
願事 : 気長くして居れば叶う
待人 : 過ぎぬ程過ぎて来るべし
失物 : 少し遅れるがやがて出る
旅立 : 止める方がよい
商売 : 俄かに下向く事あり
学問 : 困難あり 心据えて勉強すべし
争事 : 人に頼るは宜しからず
転居 : 宜しけれど急ぐは悪し
病気 : 重し 十分養生せよ
縁談 : 苦労するとも末は見込みあり 辛抱すべし

結果がすぐ出ないけど、がんばれということか。がんばろう。

$ [Perl] Code in wifky.pl: 関数の横取りBookmark including this page.Add to hatena bookmark

wifky では機能拡張のため、様々なフックを用意している。

例を上げると、a=xxxx というCGIパラメータに対して、 特定の機能を立ち上げるために

%::action_plugin = (
    'index'         => sub{ &do_index('recent','rindex','-i','-a','-l');  },
        ;
    'signout'       => \&action_signout ,
);

といった関数テーブルを用意し、

$::action_plugin{ $::form{a} }->();

と呼び出している。 このように同じような関数が多数ある場合については、 ハッシュによる関数テーブルが有効である。

だが、単品の1機能に対して、いちいちフックを用意していてはキリがない。

そこで、wifky のプラグインでは、シンボルテーブルを書換えるという方法で 本体の関数を差し替えるといったことを多用している。

関数の差し替えについて、 Perlクックブック〈VOLUME1〉Perlクックブック〈VOLUME1〉(p.496)では次のような方法が紹介されている。

undef &grow;
*grow = \&expand;
grow();

だが、この方法では旧growが undef によってシンボルテーブルから消去されてしまうため、 新grow (expand) の中から、旧growの機能を利用することができない。

こういう場合、型グロブで旧関数と新関数を入れ変えてしまえばよい。

#!/usr/bin/perl

use strict;
use warnings;

(*grow,*org_grow)=(*new_grow,*grow);

grow();

sub grow{
    print "original-grow\n";
}

sub new_grow{
    print "before-grow\n";
    org_grow();
    print "after-grow\n";
}
$ perl foo.pl
before-grow
original-grow
after-grow
  • 旧関数を undef せずに、型グロブに関数リファレンスを直接代入すると、 Subroutine main::grow redefined at foo.plという二重定義の警告が出る。
  • 型グロブに型グロブを代入する場合、旧関数が定義済みでも警告が出ない。

この方法は、本体側でわざわざフックを用意しなくてもよいため、 本体を極限までコンパクトにしたいという wifky では極めて有効だった。

(なお、一箇所だけ単品フックがある($::hook_submit)があるが、 この方法を知らなかった頃に設置したもので、 現在は互換性のためだけに残していることを注記しておく)

(2009.01.01) 存在(BlogPet)

Bookmark including this page.Add to hatena bookmark

きのうこゐふきが、存在したかも。

*このエントリは、ブログペットの「こゐふき」が書きました。