Home

memo-space

ブログの匿名指向

日本のブログは海外と比べて、匿名指向が強いそうだ。 というか、何だって海外の人は実名で書くんですかね。

僕が気にしているのは、ブログの炎上だとか会社から解雇されることなんかじゃない。例えば「来週から一週間旅行にいくんだよね」とか書いてると、 一週間後に実家に電話がかかってきて「お宅の息子さんが旅先で事故をおこしまして、、、示談にx00万円ほど、、、」とかいう事態になりかねないでしょう。これだけ顧客情報流出してるんだし。

なので、未来のことと直近のことはあまり書かないことにしている。 (今はたまたま実名出てませんが、わかる人にはすぐわかるので)。

日常的なことを書くのであれば、匿名の方が楽しいと思うし。 実生活ではあんまりだと思われるようなニックネームも名乗れるわけだし。 僕に文才があれば、キャリアOLや日本に来たばかりの外国人の日常を綴ったブログだって書けるわけだし。

デザインのことはよくわかりませんが

本屋に気になる本がある。

この装丁はどうなんだろう。どう見ても某カメラ屋。

速攻automake

何回やっても覚えられないので最低限のことだけ。

  1. ソースファイルを作る。

    #include <stdio.h>
    #include "config.h"
    
    
    int
    main(int argc, char **argv)
    {
        printf("hello, world\n");
        return 0;
    }
    
  2. (どうせ捨てるけど)Makefile も作っておく。空でいい。

  3. autoscan を実行し、できた configure.scan を configure.ac にコピー。

  4. configure.ac を編集。AC_INIT を直すのと、AM_INIT_AUTOMAKE を追加。

  5. aclocal, autoconf, autoheader を実行。

    #                                               -*- Autoconf -*-
    # Process this file with autoconf to produce a configure script.
    
    
    AC_PREREQ(2.59)
    #AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
    AC_INIT(hello, 0.0.0, iakio@mono-space.net)
    AC_CONFIG_SRCDIR([hello.c])
    AC_CONFIG_HEADER([config.h])
    AM_INIT_AUTOMAKE
    
    
    # Checks for programs.
    AC_PROG_CC
    
    
    # Checks for libraries.
    
    
    # Checks for header files.
    
    
    # Checks for typedefs, structures, and compiler characteristics.
    
    
    # Checks for library functions.
    
    
    AC_CONFIG_FILES([Makefile])
    AC_OUTPUT
    
  6. Makefile.am を作る

    bin_PROGRAMS = hello
    hello_SOURCES = hello.c
    
  7. automake --foreign --add-missing

友達が欲しい

b-link-treeがsplitする瞬間に興奮できるような友達が。特にrootのsplitが萌える。

PostgreSQLのソースツリーのあちこちにあるREADMEを読むために、kinko'sで簡易製本してみた。

本作った
本作った posted from フォト蔵

しかし、例えばPostgreSQLのソースの5%くらいを理解したとして、それはC言語のプログラマとしては貴重な経験なんだけど、PostgreSQLを使ううえでは単なるトリビアというか、なんの役のも立たないよなぁ。これがオプティマイザあたりまで理解できれば違うんだろうけど。

そうやって勉強して、自分のスキルを磨いて、結果として自分しか出来ない仕事を増やしていくことにも時々疑問を感じる。誰にも助けてもらえない所に自分を追い込んでいるだけじゃないのか。本当にそんなことがやりたかったんだろうか。

別にやりたくてやってるわけじゃない。病気みたいなもんかもしれない。

悲しいけどこれ、Unicodeなのよね

  • 2006-12-13
  • php

「すべての漢字を取り出す正規表現」をPHPで試す、を正しく行う:phpspot開発日誌

「すべての漢字を取り出す」というタイトルがどうなのって気もするが (やりたいことはトークン化です) それは置いといて。

Unicodeでやろうとすると、片仮名のヴより小さいヶの方が後だったり、 平仮名でもそもそもこの文字何て読むのってのがあったりする。 U+309fとか

「ヶ」が片仮名なのかどうかとかはゆにこーどのえらいひとにきいてください。

<?php
$strToSplit = "関ヶ原";

preg_match_all('/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+/u', $strToSplit, $aMatches);
print_r($aMatches); // マッチ結果が全出力
?>

Array
(
    [0] => Array
    (   
        [0] => 関
        [1] => 原
    )

)

こういうのは取りこぼしがイヤなので、最後に.を付けておくといいと思う。

preg_match_all('/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+|./u', $strToSplit, $aMatches);

漢字に関してもいろいろあるけど書かない。

Perlなら、UnicodeのPropertyを使えるので(Dan methodか!?)、こんな感じか。

use Encode;
use utf8;

binmode STDOUT, ":encoding(euc-jp)";
my $strToSplit = "関ヶ原のタタカイABC01";
my @aMatches = 
    ($strToSplit =~ m/
    \p{Han}+|
    \p{Hiragana}+|
    \p{Katakana}+|
    [a-zA-Z0-9]+|
    [a-zA-Z0-9]+|
    .+
    /gx);
print join ',', @aMatches, "\n";

12月12日のいろいろ

blosxomでtdiaryのテーマ

blosxomでtDiary.orgのテーマを使えるようにしてみた、っていうのは冗談としてアリなんだろうか。

とりあえずmixi風

2006年も終わる頃にやるネタでもないんだろうが。

女性専用ジム

CNN.co.jp : 女性専用ジムに入会求め拒否される、男性の訴え却下 - ビジネス

というタイトルを見てこれ的なものを想像してしまう自分。

アスレチックジム、、、

11月29日のいろいろ

「お客様の中でプログラマーの方はいらっしゃいますか?」

とかいう小説を誰かに書いてほしい。なんかダイハード的なやつ。

還元論の話を聞いて、quick sort に失敗する様子を想像した。

nonomachon2nd東京到着

俺の中のホールデン・コールフィールド君の旅が終わったらしい。

nonomachon2ndの日記

これからも日記続けてほしいな。

学力って本当に低下しているのだろうか?

それでは、話を「人類」ではなく「日本人」、そして時代をせいぜい20年ぐらいに絞った場合はどうか?やはり学力は格段に上がっているとしか思えない。特に「Web以前」と「Web後」、そして「Google以前」と「Google後」では革命的な学力の向上が見られる。

404 Blog Not Found:学力って本当に低下しているのだろうか?

Google だとか Web まで辿りつけない生徒、あるいは教師、あるいは日本人もいっぱいいるだろうに。

苫小牧の観光情報のサイト

ようこそ苫小牧の観光情報へ(FireFox推奨)

今時<BLINK>かと思ったら、もっと予想外なことになっていた。スタイルシートで、

FONT{
  text-decoration : blink;
}

と指定した結果、<FONT size="-1">してあるところだけ点滅しているらしい。目立たせたいんだかそうじゃないんだかわからん。

スケート祭りは2/10〜/11です。

d…!れくとあんぐる…!

  • 2006-11-18
  • vim

きる…!れくとあんぐる…!:J

それを言うなら Vim では Ctrl+v で矩形選択して d でおk。

Emacsには負けないから…

最近はまっている食べ物

カネカシーフーズの「朝食おくらめかぶ」。 おくらとめかぶを混ぜただけのもの。ふざけたはなしだ。 こんなもの飯にかけて食べたら旨いにきまってる

で、また買いにいったら微妙に違うのが売ってた。 「おくらめかぶ - かつおたれとろろいも付き」だそうだ。 これだけでどんだけ飯を食わせるつもりだ。

11月9日のいろいろ

青空文庫をうろついていたら、こんなの見つけた。

図書カード:虫喰い算大会

ちょっと見ただけだけど、

       □7□□□
   _________
□□□)□□□□□□□□
    □□□□
   ―――――――――
      □□□
      □□□
      ――――――
      □□□□
       □□□
      ――――――
        □□□□
        □□□□
        ――――
           0

解ける気しねー。

痛いニュース(ノ∀`):【オーディオ】ティアックがWリバースカセットデッキを発表

「AE < AD < AR < AR-X」とか、BON テープとか。

イミフwwwうはwwwwおkwwww ちょwww何この電波ソングwwww

ラーメンズの「路上のギリジン」が話題になってる。 「何でもギリギリで解決するぜ」と言ってるのに何ひとつ解決できていないところが好きだ。

GiSTって何

思いがけず、GiSTって何のことなのかわかってしまった気がするのでメモしておく。

GiST(Generalized Search Tree)とは、PostgreSQL で使えるインデックスの種類のひとつなんだけど、それを理解するには R-Tree を知っておいたほうがいい。もちろん B-Tree も知ってた方がいい。 適当に検索してみてください。図を見ればなんとなくわかると思います。

B-Tree は値の大小でグループに分けて、ツリーを構成していて、R-Tree は平面上のある領域内に含まれるかどうかでグループ分けをして、ツリーを構成している。

つまり、何かしらグループ分けする基準さえあれば、何かしらのツリーが構成できる、というのが GiST らしい。

と考えると、ちんぷんかんぷんだった GiST の説明もちょっと見えてくる。

GiSTインデックス:実装

consistent というのは、そのグループ(ノード)に含まれるかどうかの検査で、union はノードの結合、みたいな話だと思う。

だいたい同じことが

GiST - Introduction

にも書いてあるのでコッチを見たほうがいいかもしれない。

contrib/ltree が面白そうなので今度書くかも。

繰り返しの比較表

いやなブログ: 配列操作の比較表: Ruby, Python, JavaScript, Perl, C++

僕がすぐわからなくなってしまうのは、for 文とか foreach とかの書き方だ。 この表の最後にも a.each の例があるけどさ。

なわけでこんなのを作ってくださいエライ人。

Python Perl PHP
for x in a: for my $x (@a) {..} foreach $a as ($x) {..}
for x in xrange(10): for my $x (0..9) {..}
for (my $x = 0; $x < 10; $x++) {..}
for ($x = 0; $x < 10; $x++) {..}
for k, v in h.iteritems(): while (my ($k, $v) = each $h) {..} foreach $a as ($k => $v) {..}
while (list($k, $v) = each($a) {..}

と、ここまで書いてこんなのを見つけた。

Foreach文 - Wikipedia

まあいいや、あと filter 系とか map 系も欲しいな。Python でいうところの [ x * 2 for x in range(10) if x % 2 == 0 ] 的なやつ。

日本シリーズ第二戦

逆転のシーンのちょい前、稲葉の内野安打、新庄のポテンヒットでワンアウト1、3塁の後、バッター鶴岡がファールでねばる。

で、フルカウントになったところで内野は前進守備にかわって、鶴岡は三振、新庄は盗塁でツーアウト2、3塁になる。

えーっとつまりフルカウントに→ランナーがスタートする→ゲッツーはない→前進守備ってことか。(でも前進守備になると二塁ベースが空くので三振ゲッツーはない)。

ともかくワンアウト1、3塁でフルカウントになると守備がかわるなんて初めて知った。

それ何て言語?

Let's PHP | 科学技術英語にて (mixi)

もちろん PHP じゃないんだけど、Pascal でもないし、Ada か ALGOL あたりかとも思ったけど違った。疑似言語にしては色んなところが微妙だなぁ。

Java でいう o.method(arg) みたいないメソッドの呼び出しが send o method(arg) らしい。

method getstate () list(i,j) の list(i, j) というのは戻り値の定義なのか。

代入には

  • set i = x
  • let t1 = 0
  • o1 = new c1(3)

の三種類があるらしい。

in begin の in って何だろう。

Java Festa 2006

そういえば今年の Java Festa にはきしださんが来るみたいですよ。

Java Festa in 札幌 2006 〜Java & OSS(オープンソース)〜/講師プロフィール

去年のアンケートの「来年呼んで欲しい人」にきしださんの名前を書いたのは私です。

MS-DOS?

なんかまだあんまり話題になってないみたいなので貼っておく。

digg - MS-DOS 6.0 appears to be on Google Code Search

cmd/fdisk/fdisk.c が熱いらしいです。ネタでは聞いたことあったけど本気で

#define BEGIN    {
#define END      }

とかやってるコードを初めて見た。

Berkeley 時代の Postgres

Google Code Search でちょっと遊んでみた。psycopg とか PyGresql はもうちゃんと PQescapeStringConn を使ってるみたい。

PostgreSQL にしか無いような関数名を検索していたら、Berkeley 時代の Postgres のソースを発見した。Berkeley にあった(あたりまえ)。

University POSTGRES 4.2

db.cs.berkely.edu のマスコットもカメなのかな。

「スルー力」カンファレンス中止

スラッシュドット ジャパン | 「スルー力」カンファレンスが中止(?)に

残念。開催されていたら、SQL on Rails に関する発表でもしようかと思ってたのに。

PostgreSQLのconfigure時の環境変数

PostgreSQL で ./configure --help すると、

Some influential environment variables:
  CC          C compiler command
  CFLAGS      C compiler flags
  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
          nonstandard directory <lib dir>
  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
          headers in a nonstandard directory <include dir>
  CPP         C preprocessor
  LDFLAGS_SL
  DOCBOOKSTYLE
          location of DocBook stylesheets

Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.

と出てくるわけだけど、全てが上手く動作するわけではないらしい。

src/template/win32 なんかは LDFLAGS を思いっきり上書きしちゃってるじゃないか。

$ cat src/template/win32
# This is required to link pg_dump because it finds pg_toupper() in
# libpq and pgport
LDFLAGS="-Wl,--allow-multiple-definition"

で、-L を追加したい場合は、LDFLAGS ではなく --with-libs=DIRS を、-I を追加したいときは CPPFLAGS ではなく --with-includes=DIRS を使った方が安全。

ちなみに src/template/* が CFLAGS を上書きしていたとしても、configure の中でうまいこと処理してくれているみたいなので問題無い。

英語の勉強していたら

英語の参考書を読んでいたら、例文がえらいことになっていた。

  • I think him a good cook. (僕は、彼は料理が上手だと思う)
  • Mother is getting supper ready. (母は夕食の用意をしている)
  • The nice smell from the kitchen made me hungry. (台所からくるよい香りをかいで、私はお腹がすいた)

(第五文型の例文)

何故全部食べ物の話なのかと。

  • Make yourself at home. (ごゆっくりどうぞ)
  • It's been a long time since I saw you last. (しばらくぶりだね)
  • Sam has been dead for three years. (サムは3年前に死んだよ)

(慣用表現の説明)

何のシチュエーションだか。

「駅キレ若者」エントリの反響について。について

なぜ、こんな話題が、一日に一万ヒット近く集めるんだろう。

ぼくも含めて、この件にコメントしたり、エントリを書いた人たちの気持ちを泡立てたのものはなに? なんかその部分の「なぜ?」の方が面白いって、気がしてきた。

リヴァイアさん、日々のわざ: 「駅キレ若者」エントリの反響について。

僕はもう全くダメだ。この人のエントリには自分の中の「自己顕示欲レーダー」がビンビン反応して読むのにも挫折しそうになる。

非常に良くできた釣りなんじゃないかとすら思える。

ぼくが対話の可能性を信じているのは、たぶんもって生来の性格に加えて、対話した方がよい結果をもたらすという、大小の成功体験があって、それが信念のレベルまでに達しているからだ。

対話による失敗体験を詰み重ねれば、逆の考えが信念のレベルに逹することもある。

ないと思うがうっかりこの人がこの blog にきて「私のエントリのどのあたりに自己顕示欲を感じられたのか、ぜひ教えていただけませんか」とか質問してくるかもしれないのであらかじめ書いとく。

「イヤです」

PHP のセッション共有(その2)

  • 2006-09-29
  • php

ひき続き Sharedance について調べてみる。PHP の標準のセッションハンドラである mod_files.c と見比べてみると、

  • flock していない

    一瞬はシングルプロセスだから必要無いのかなとも思ったけどそうでもないよな。まあ必要にあるケースはけっこう稀かもしれないけど、検証してみたい。

  • ディレクトリ階層を指定できない

    セッションデータをファイルとして保存すると 1 つのディレクトリに大量のファイルを作ることになる。このことによるパフォーマンスの低下を防ぐために PHP の標準セッションハンドラでは、session.session_save_path にディレクトリ階層を指定することができる(ということをソースを読んで初めて知った)。これがどれくらい影響するかわからないけど。 しかしどこかにセッションハンドラのパフォーマンスについて調べたデータとかないのかな。

さてそろそろ動かしてみるか。

PHP のセッション共有

  • 2006-09-27
  • php

Sharedance をちょっといじってみた(正確にはまだソースしか見てないけど)。

複数の Web サーバ間で PHP のセッション共有ができるものとして知られているみたいだけど、 実際にはとにかくキーと値のペアを TCP/IP 経由で fetch/store できるようにするというもの。

だからちょっとしたデータベースがわりにも使える。PHP 単体でもデフォルトのセッションハンドラに PHP からアクセスできれば便利なのになとちょっと思ったけど、まあ GDBM とか使えばいいんだけどさ。

あと libevent は便利そうだ。

しかし、たったこれだけの為にサーバーを作って独自のプロトコルを作るというのも何か悲しい感じがする。別に http でもいいんじゃないのかな。つまり、セッションを集中管理するためだけの apache を 1 つ用意しておく。

なんてことは世界で 2000 万人くらいの人が考えているかもしれない。なんか最近の PHP 事情をよくしらないからちょっと恥しいが思いついたので書いておこう。セッション管理する側はこんな感じ。

<?php
/* ppss.php */
if (empty($_GET["m"]) || empty($_GET["key"])) {
    exit;
}
session_id("ppss" . $_GET["key"]);
session_start();
if ($_GET["m"] == "f") {
    echo $_SESSION["data"];
}
else if ($_GET["m"] == "s") {
    $_SESSION["data"] = $_GET["data"];
}
?>

fetch と store だけで delete が無いのは手抜きです。もういっそ、fetch.php とか store.php ってファイルを分けちゃった方がいいかもしれない。 セッション ID にプレフィックスを付ける必要は本当は無いんだけど、1 台のマシンで試験しようとすると flock して悲しいことになるので付けてある。

セッションハンドラと使う側はこんな感じ。

<?php
$PPSS_URL = "http://xxxxxxxxx/ppss.php?";
/* for PHP4
function http_build_query($params) {
    $p = array();
    foreach ($params as $key => $val) {
        $p[] = urlencode($key) . "=" . urlencode($val);
    }
    return implode($p, "&");
}
*/

function session_handler_open($save_path, $session_name) { return TRUE; }
function session_handler_close() { return TRUE; }
function session_handler_delete($key) { return TRUE; }
function session_handler_gc($timeout) { return TRUE; }

function session_handler_store($key, $data) {
    global $PPSS_URL;
    $url = $PPSS_URL . http_build_query(array(
            "m" => "s",
            "key" => $key,
            "data" => $data));
    file_get_contents($url);
    return TRUE;
}

function session_handler_fetch($key) {
    global $PPSS_URL;
    $url = $PPSS_URL . http_build_query(array(
            "m" => "f",
            "key" => $key));
    $data = file_get_contents($url);
    return $data;
}


session_set_save_handler('session_handler_open', 'session_handler_close',
             'session_handler_fetch', 'session_handler_store',
             'session_handler_delete', 'session_handler_gc');


session_start();
if (!isset($_SESSION["count"])) {
    $_SESSION["count"] = 0;
} else {
    $_SESSION["count"]++;
}

echo "count = " . $_SESSION["count"];
?>

パフォーマンスとかはあまり考えていない富豪的アプローチだけど、まあメリットとしては手軽さと、apache + PHP だけで動いているというプラットフォームに対する信頼性か。パフォーマンスが欲しければ apache モジュールにしちゃうのもそう難しくないだろう。

筆記用具ヤケ買い

ムシャクシャしてやたらと筆記用具を買ってしまった。後悔はしていない。

筆記用具やけ買い
筆記用具やけ買い posted from フォト蔵

ユニ パワータンク スタンダード(ノック式)0.7

現在、油性ボールペンの人気を Dr.Grip G-SPEC と二分する一本にして、僕の油性ボールペンへの認識を変えた一本。あーちなみに私は太い軸が苦手なので Dr.Grip は使ってません。

3000hPa の加圧リフィルからくり出されるインクは、ダマになったり擦れたりすることがかなり少ない。(なんだけどネット上ではけっこうダマになると言っている人も多い。俺の書き方の問題なのか)。

やはり油性ボールペンの良さは、その使える範囲の広さだ。感圧紙に使うなら油性ボールペンが一番だし、上からラインマーカーを使っても滲まない。加えてこの POWER TANK は濡れた紙や無重力や氷点下でも書ける(らしい。当然試してないけど)。

タプリとパワタン
タプリとパワタン posted from フォト蔵

写真は上が POWER TANK、下が ZEBRA TapliClip。ノック式のボールペンでは(この TapliClip のように)軸と芯の間に遊びがあって書く時にカチャカチャしてしまうものがあるが、POWER TANK はこの隙間が埋められているの(黒い部分)がおわかりだろうか。

このクォリティで 200円という低価格のうえ、コンビニでも入手可能。凄い、凄すぎる。 普通のボールペンにできないことを平然とやってのけるッ!そこにシビれる!あこがれるゥ!

ユニ ジェットストリーム 0.7

今話題の新製品。低粘度油性ボールペンという意味では Dr.Grip G-SPEC のライバルはこちらかもしれない。 また、油性ボールペン特有のインクの紫っぽさがなくはっきりと黒いのも特徴(写真で伝わるかな)。なんだけど、どうも擦れがひどい。ネットではそれほど評判は悪くないようなので、個体差かもしれない。

ZEBRA テクノライン 0.4

油性ボールペンって普通 0.7 か 1.0 で、0.4 って書いてみるとびっくりするくらい細いです。手帳用に使っていた TECHNO LINE EX が気に入ったんだけど、いかんせん軸が細くて握り辛いので、中身が同じで軸が太い TECHNO LINE を買ってみた。

感想としては、良くも悪くも予想通り。線は細いし軸は握り易いが、結果的にどこで使っていいのかよくわからないw。ちなみに TECHNO LINE EX の方は軸が細いので、リングノートのリングに入れてます。

あと、うっかり Pelikano junior 買ってしまった。万年筆には手を出さないつもりだったのに。まあこれなら一本持っててもバチはあたるまい。油性ボールペンとは大分書き方が違うのでちょっとまだ思うように使えてない感じ。

日本版ポリティカルコンパス

「各人の政治的および経済的立ち位置を調べる」という、ポリティカルコンパスの日本版をやってみました☆

w h e a t n o o d l e s . o r g: 「日本版ポリティカルコンパス」

というわけで参戦。でもこの質問難しいね(特にQ2の方)。きっと何度かやれば結果も違うとおもう。結果は、

  • 政治的な右・左度(保守・リベラル度) -0.4
  • 経済的な右・左度(市場信頼派・政府介入派) 0.93
  • あなたの分類は リベラル右派 です。

大きく偏ることはないだろうなとは思ってたけど、予想以上のど真ん中っぷり。自分では政治的右派かなと思ってたんだけど。

9月21日のどうでもいいこと

色々考えごとしながら帰宅しようと思ったら、逆方向の地下鉄に乗っていた。自分の注意力あなどれない。

ちょっと遅いが、

2006年9月6日は、多くの人々が待ちに待っためでたい日となった。いやめでたい。実にめでたい。

H-Yamaguchi.net: めでたい日に思う より

マスコミのバカ騒ぎっぷりにもウンザリだし、問題は何も解決していない。というか高度な釣りだ。

くそがっ!あのクソガキめが!!大人を馬鹿にするとひどいめに遭うぞ!くそっくそっ、次にあったら筆下ろししてやる。許さない、絶対許さない。

nonomachon2ndの日記 - 列車の窓から景色を楽しみながら より

この人の日記どこから読んでもいいんだけど、面白い。ちょっとライ麦畑を思い出してしまった。より今風に訳せば、ホールデン君も「死ねよワーキングプアめ!」とか言うのかな。そんなライ麦畑も読んでみたい。

まあとにかくこの人すごいな。

高校生の時、初めてこの本を読んで、何が面白いのかさっぱり分からなかった。

peanutsjamjamの日記 - カフカ『変身』 より

そういえば俺も初めてライ麦畑を読んだとき、何が面白いんだかよくわからなかったなぁ。まあホールデン君より大分若かったし。

あとちょっと前に、「海辺のカフカ」を読んでその感想について、その昔初めて私に村上春樹を勧めた peanutsjamjam と話した。

  • あまりの自由っぷりに(それが芸風なんだけど)村上春樹を読んだこと無い人には厳しいんじゃないかなぁと思うんだけど、これが海外で評価されているのは意外。
  • 序盤の、別の話が交互に出てくるところは「続き読ませろよ!」という感じで疲れた。
  • 後半は、とにかくホシノ君が良かった。

小説って、書いてる本人すら絵が浮ばないようなものでも書いちゃえば勝ちみたいなところがいいよね、とかいう話をした。 そいういえばダンスダンスダンスの中に、「紀ノ国屋のレタスはよく調教されている」(どんなんだよ)とかいうのが出てくるんだけどああいうのは絵では表現しようがないよね。

あと札幌に住んでいると、紀伊国屋というと本屋しか思い付かないんだけどe-kinokuniya 紀ノ国屋のことだったんだな。

図書館のレファレンスサービス

なんか眠れないのでまた書いてしまうよ。最近心がささくれだっているのでウトウトしか眠れない。いかに自分の心がささくれだっているかを書こうかとも思ったけど、途中からそれをどう第三者的に面白く書こうかという余計な感情が湧いてきてアホらしくなってきたのでやめとく。多分生理みたいなもんです。

苫小牧市立図書館 - Amazon 検索 を作っていたら図書館についていろいろ興味がわいてきた。 図書館というところが何かしら調べもののお手伝いをしてくれそうな印象は漠然とあったんだけど、それを利用したことはなかったし、そのことをレファレンスサービスと呼ぶことも知らなかった。要するに人力検索のプロ。

で、レファレンス共同データベースという、こんな調査テーマに対してはこう調べれば良い、という事例データベースみたいなものがあるそうです。つまりその人力検索の中の人が活用するデータベースということだと思います。

例えばここの調べかたマニュアルのサンプルには、

とかこういうのがある、ということは、図書館はこういうことも調べてくれる(かもしれない)ということか。

これを知ったきっかけは、北海道立図書館が図書館向けに発行しているレファレンスに関する広報誌「Do-Re」で、Web 上から PDF で閲覧できます。

この中には、

情報館では10月下旬から、館内に掲示板を設置しています。レファレンスという図書館用語がまだまだ町民に浸透していなく、また利用も少なくはないのですが、図書館のお得な活用方法をより知っていただけるようにと思い作りました。

(中略)

情報館の利用に関することもありますが、子ども達が日常感じているふとした疑問が多いです。 “なんで空にくもがあるんですか?” “どうして季節があるんですか?”などです。 また、将来に関すること、“にんじゃになりたいんですが、 どうしたらいいですか”などもあります。

(レファレンスの森本さんの掲示板を設置 (本の森厚岸情報館)- Do-Re 26号より)

レファレンスの森本さんって、、、それ生協の白(ry

いいなぁ。俺もにんじゃになろっかなぁ。

JavaScript雑感

Livedoor Reader のソースを眺めていたらコロンキーで vi モードにはいることを発見した。調べてみたらやっぱり自分は 4 ヶ月ほど遅れていることに気がついた。

livedoor Readerとは - はてなダイアリー

(ブラウザ上で動く)JavaScript は、強制オープンソースだという魅力もさることながら、今まさに動いているプログラムに対して Greasemonkey とか JavaScript Shell とか使って動作を変更できちゃうというのが面白い。動いている心臓をバイバス手術みたいな。

苫小牧市立図書館 - Amazon 検索 を作ってみてやっと少し JavaScript がわかるようになってきた。何かしら新たな発見をしては、それについて調べてみると自分が 1 年くらい遅れていることに気付くというのの繰り返しだった。だいたいやりたいことは実装したけど、UI 周りをもうちょっと直したい。

言語としての JavaScript は、シンプルで自由度の高い言語。とはいえシンプルであることも自由度が高いことも言語としての価値であるかどうかは何とも言えない。単にそうなら Scheme がもっと流行ってるんだろう。でもまあまとまっていると思う。

この自由度の高さをフレームワークや IDE がどうコントロールしていくかというのが今後の JavaScript 界隈の動きになっていくんじゃないかな。Ruby という自由な言語が Rails という規約によって飛躍したように。(まあ Rails も真面目にやったことないんだけどさ)。

一方言語の本質とは別に、その歴史的経緯から、現時点では Web 上には古い情報が蔓延していてとてもググりずらかったり、あとプラットフォーム間の移植性というやっかいな問題はある。

JavaScript を学ぶには、まず初級はどこでもいいんじゃないかな。とほほさんの所あたりでもいいと思う。で次は「プロトタイプベースのオブジェクト指向」とか「プロトタイプチェーン」とかいうキーワードでググる。以下はまだ僕も全部読んだわけじゃないです。

で、そこを卒業したらとりあえず prototype.js でも読んでみるのが良いんじゃなかろうか。はっきりいって最初は全く理解できないと思う。例えば、冒頭の、

var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}

これが何をやっているか、はっきりいって僕は自力では理解できませんでした。幸い、その手のことをやっている人は他にもいるので、先人の調査結果を参考にするといい。

リファレンスとしての情報源は未だにどこを見て良いのかよくわからないけど、とりあえず MDC を見ている。

あと、 FireBugJavaScript Shell は便利だと思う。

はてブの「IMEをオフにして、、、」が邪魔

Scroll With IME という FireFox プラグインを使っていると、IME オンのままの状態でもスペースキーでスクロールできるんだけど、 はてなブックマークでは IME がオンの状態でキーを押すと、左下に「ショートカットキーはIMEをオフにしてご利用下さい」と出てきてスクロールできない。

Bookmark.keybind.remove("ime");

以上。

1行だけを保証する

Gapless Sequences for Primary Keys: Varlena, LLC | PostgreSQL General Bits Newsletter

PostgreSQL の SERIAL は値が連続していることは保証しない。じゃあ連続する値を得るにはどうしたらいいかという話。なんだけどその中で出てくる以下の SQL が面白かった。

-- Initialize table with one row on creation --
INSERT INTO emp_pk_counter VALUES (0);

-- Disallow further insertions and deletions --
CREATE RULE noins_emp_pk AS ON INSERT TO emp_pk_counter
DO NOTHING;
CREATE RULE nodel_only_emp_pk AS ON DELETE TO emp_pk_counter
DO NOTHING;

emp_pk_counter というテーブルに対して 1 行だけ INSERT しておいて、以降 INSERT も DELETE も無視してしまうという RULE を定義している。これで emp_pk_counter テーブルは 1 行だけということが保証される。設定値を保持するテーブルなんかに使えそうだ。

「鏡の法則」について思ったこと

今更だけど「鏡の法則」について書く。あるいは、何故僕がこの話に違和感を感じるのか。

「あなたの人生の現実は、あなたの心を映し出し鏡です」という考え方って怖いなあと思う。 たとえばこの子供はイジメにあって、で、イジメは無くなった。でも世の中には取り返しの付かない災いっていうのもあるんじゃないか。

例えば子供がイジメにあって自殺しました。「あなたの人生の現実は、あなたの心を映し出し鏡です」と言われました。息子を殺したのは自分だと後悔して生きていくこと以外に何ができる?

というか、人生に何か一つの解があると思うことが怖い。

いろいろ調べているうちに、この作者のblogのあるエントリに辿り付いた。 この人のblogはかなりの分量があるし、その一部だけを引用してケチをつけてもしょうがないんだけど、気にな内容だったので引用する。

幸せ成功力を日増しに高めるEQコーチング!毎日読めば目標達成力を多角度から強化できます!:成功法則が作用しない人はいるのか?

どんな困難に出会っても、「必ず実現する」という信念を持って行動し続 けたら、やがて、その信念が潜在意識の奥深くにまで浸透して磁石になり、 信じたとおりの現実を引き寄せて具現化するのです。

としながら、

しかし、こんなことを言う方もいらっしゃいます。

「私は数年前から、『自分は豊かだ!お金持ちだ!』と念じ続け、豊かな 人生を描き続けた。だけど、ぜんぜん豊かにならない。私には成功法則が 作用しないみたい。」 (中略) 主な理由は2つ考えられます。

(1)頭で思い描くだけで行動をしていなかったり、行動が中途半端になっている。

で、

「殺人事件で家族を殺された人は、それも自分の心が引き寄せたので しょうか?」といった内容のご質問も、これまで何人かの読者さんか らいただいてます。 (中略) 人生で出会う大きな試練はあらかじめ計画されたもので、必ずしも、自分の 心が引き寄せているわけではないと考えます。

あらかじめ計画された人生設計を土台にして、さらにその上に、自分の心が 引き寄せるものによって人生が築かれていくのだと、私は考えています。

これは僕の主観で読むと、

「強く思えた必ず実現します。でも思うだけではダメです。行動しましょう。でもあらかじめ計画された試練は避けられません」

もっといえば、

「強く思って行動すれば、願いが叶う場合もあります」

という風に読める。まあ、そうかもね。

currentいじってみた

PostgreSQLのcurrentをちょっといじってみた。INSERT .. RETURNINGとかUPDATE .. RETURNINGというのが追加されたみたい。 「INSERTやUPDATEをした行をSELECTする」を一度に書ける機能っぽい。

=# create table r (i serial, t text);
NOTICE:  CREATE TABLE will create implicit sequence "r_i_seq" for serial column "r.i"
CREATE TABLE
=# insert into r (t) values ('One') returning *;
 i |  t
---+-----
 1 | One
(1 row)

INSERT 0 1
=# insert into r (t) values ('Two') returning i;
 i
---
 2
(1 row)

INSERT 0 1

INSERT文なのにSELECT文のように行を返しているのがおわかりでしょうか。

今まではSERIAL型の列にINSERTした値を得るには、SELECT curval()しなきゃならなかったんだけど、その必要がなくなる。 なかなか面白いけど、またデータベース抽象化レイヤとか書いてる人は気をつけなきゃだめかもね。

あと、standard_confoming_strings の値が変更可能になってる。(デフォルトは off)。

=# select '\\';
WARNING:  nonstandard use of \\ in a string literal
LINE 1: select '\\';
           ^
HINT:  Use the escape string syntax for backslashes, e.g., E'\\'.
 ?column?
----------
 \
(1 row)

=# set standard_conforming_strings to on;
SET
=# select '\\';
 ?column?
----------
 \\
(1 row)

他にもいろいろありそうだけどとりあえず。

9月6日のいろいろ

なんか書きたいことがいっぱいたまってる。

弟「僕だって、好きでニュータイプになった訳じゃない(怒)!」

めぐみのホームページ1000 - 9月3日より

あいかわらずこの人面白いなぁ。終り方も秀逸。

でも愚痴を聞いていれば僕のことを話さなくていいので。沈黙がないので安心します。

@nifty:デイリーポータルZ:対人スキルが高すぎる人

凄い。沈黙を恐れるという消極的な理由でいろんなことに巻き込まれてしまう人。この人をモデルに小説か映画かなんか作ってほしい。

みなさんは、テストファーストだ、ユニットテストだ、と言いながら、実際は「テストに通って当り前」のテストしか書かずに済ませてしまっていないだろうか。そのようなテストはバグを見付けることにはあまり貢献せず、「次の実装の見直しにも合格する」ためのベンチマークにすぎなくなってしまっている

プログラマがテストも書くならば lightweight なランダムテストを試すといいと思う - Inemuri nezumi diary(2006-09-06)より

レグレッションテストってそういうものだと思う。

テストをもたらす勇気よりも、テストデータを大量に用意する鬱さが勝ってしまって、あーうーあーうーとげんなりします。

ここでテストデータ作成ツールですよ、と言うだけ言っとく。

レグレッション・テストに逆ギレ - capsctrldays (2006-08-08)

テストデータ作成ツールじゃなくて、テストデータをどうマネージメントするかという方向で問題は解決できないかな、ということを最近考えてる。

Refactoring Databasesの中にスキーマのバージョン管理という話が出てくるんだけど、それを読みながら、テストデータはバージョン管理の対象にはいるのかどうか、とか。

とにかく、ソースコードの外側にあるものをマネージメントするにはひと工夫必要だ。

9月5日のいろいろ

peanutsjamjamの日記 - 図書館にある本は買わずに済ませるためのナントカ その二 より。似たようなことをやろうとしている人はけっこういるらしく。

あと、関連事象を検索して目に付いたのがAmazon - 苫小牧市立図書館検索これ、ヤバいくらいにCool、Web2.0的ってのは見た目じゃないってことをわからせられた感じです。

natu_nの日記 - ISBNで検索出来ない図書館の続き より

褒められた♪(のか?)。

あと他にも

コードは自由になった。次はデータが欲しいんだ。Amazon Web サービスとか、Google Map とか、Livedoor Weather Hack とか。データを中心としたバザールモデル?(また勢いで適当なこと書いてます)。

次は何のデータが欲しい?時刻表とか、番組表とか。

アンチフルスタックという開発手法

また何となく思いついただけなんだけどさ。

Ruby on Railsみたいな「フルスタック」って、要するに最大公約数的?な手法だと思うわけだ。

「SQL を書かなくてもデキる」みたいなのとかもあるけど、SQL 書いちゃった方が楽な場合もあるわけで。

で、それぞれの構成要素が得意分野でベストを尽す、みたいな開発手法もあっていいなじゃないかなと。

クライアント側は JavaScript でテンプレートでも使って、サーバー側はひたすら JSON でやりとり。

画面遷移とか認証、セッション管理なんかは Apache でやらせる。Apache モジュールを C で書いちゃうのは究極だけど、mod_{perl,python,ruby} のフックを使ってやるのがいいと思う。ブラウザが「画面遷移してくれ」と Apache に通知する感じだ。

あと、トランザクションが必要ならもうデータベース側でストアドプロシジャにしてしまう。

そうすることのメリットはこれから考える。

Teaching is Learning

ふと、"Teaching is Learning" という言葉を思いついたら、やっぱりそういう言葉があるらしい。「教えることは、教える側も勉強になるよ」みたいな意味のようだ。

僕は違う意味でこの言葉を思いついた。

教えるには、何が相手に伝わったかを教わらなければならない。

教わるには、自分に何が伝わったかを教えなければならない。

よく、「何がわからないのかわからない」とかいうやりとりがあるけれど、「何がわからない?」って聞くより、「どう思う?」って聞いたほうがいい気がしてきた。

御互いの思うことを伝えながら同じ場所に近づいていく。例えていうなら連想ゲームだ。でもこの例えも若い人には伝わらないんだろうな。あの番組はもう一度見てみたいなぁ。実は今の時代に必要な何かを伝えていたのかもしれない。

Amazon - 苫小牧市立図書館検索作った

今年の夏休みの自由研究ということで。

Amazon - 苫小牧市立図書館検索

苫小牧市民に送るWeb2.0エクスペリエンスw。 Amazon Web サービスに REST - XSLT で JSONP に変換 - Ajax で cgi にアクセス - そこから図書館にアクセスみたいなことしてます。

「読みたい本があるけど、図書館にあるから買わなくていいや」みたいな、Amazon の意向に思いっきり反した API の使い方をしている気がする。

しかしここ最近はAmazonのXSLTプロセッサが全然まともに動いてくれない。w3側をフォルトにしようかな。

火事場プロジェクトの法則

「火事場プロジェクトの法則」- やまざきの「あせらず、くさらず、一歩づつ」

あーあれが遂に本になるんですか。面識はないですがおめでとうございます。

やっと夏が終わった

負けたとはいえ、あれだけの歴史的な好試合をして、よくやったとは思うのだけれど、やっぱりちょっと寂しいね。 マンガみたいな三年間だった。

斎藤対田中。また別の舞台で見たいね。

経験値バトン

長いんで途中で挫折する。

[入院:○] 小さいころに肺炎2回、小学生で喘息1回、自転車で転んで1回、高校で気胸1回(一度退院してまたすぐ入院したので2回かも)、成人後にアトピー1回。

先日古い友人と市内をブラブラしながら、「ここの病院に入院したんだっけ?」「いや、こっちにもあっちにも入院したことある」なんぞという会話をしてきた。

[手術:○] 高校の時に気胸で全身麻酔の手術、当日は日本シリーズだったのを覚えている。巨人対西武だったかな。あと今年白内障で日帰り手術。

[骨折:×] ただ、自転車で転んだ時に頭蓋骨にヒビがはいっていたかもしれない。

[献血:×]

[失神:×] 失神の定義がよくわかっていないけど。 ちなみに脳しんとうなら小学生の時に2回あって、そのうち一度は学校でふざけていて頭を打ったらしいが丸一日の記憶が無い。

とにかく平均よりは変に寄り道をしながら生きている方かと思う。なんだけど最近、子供が健康に大人になるということは、あたりまえのようで大変なことなんだなぁと。

夏休みで帰省した兄の子供の予測不可能な行動を見ながら思ったりする。

JavaScriptとたわむれる

見てる人はわかると思いますが、毎日のようにちょこちょこいじってます。 blog そのものは書かないのに毎日 blog をいじっているという現実。 モチベーションが続く限りいじり続けます。

書きたいことはいろいろあるけどざっと。

たかが天気予報を表示するために大袈裟なことをやっている。 <script> タグの charset 属性ってデキる子だって知らなかった。飾りかと思ってたよ。 あと、JavaScript のオブジェクトリテラルに余分なコンマがあると FireFox では OK だけど IE だと動かなかった。

var data = {"foo": 1, "bar": 2,};

みたいなの。

Perlのutf8フラグとDBI::Pg - その2

Perlのutf8フラグとDBI::Pgの続き。

DBD::Pg で取得した文字列に自動的に utf8 フラグを付けるには、$dbh->{pg_enable_utf8} を 1 にする。 ただ、これは本当に utf8 フラグを付けるということしかしないようなので、client_encoding を utf8 にするのは自分でやらなきゃいけないようだ。 client_encoding と連動してくれても良さそうな気もする。

データベースが euc-jp、ソースコードが utf-8 の例はこんな感じ。

#!/usr/bin/perl
use Encode;
use DBI;
use Data::Dumper;

my $dbh = DBI->connect("dbi:Pg:options='-c client_encoding=utf8'", "", "");
my $q = "select 'あいうえお'::text";

$dbh->{pg_enable_utf8} = 1;
my $s = $dbh->selectall_arrayref($q)->[0][0];
print utf8::is_utf8($s) ? "utf8": "not utf8", "\n";
print Encode::encode_utf8($s), "\n";

ところで、この pg_enable_utf8 は、取得した値のデータ型見て、text 型や varchar 型などの文字列型であれば utf8 フラグを付ける。その為以下のコードだと utf8 フラグは付かない。

my $q = "select 'あいうえお'";

何故かというと、明示的な型指定がない文字列リテラルは、PostgreSQL では unknown 型だからだ。

はっきりいって子供の頃から夢(寝てる時に見るヤツじゃない方)みたいなもんは無かったし、文集かなんかに「将来の夢」とか書かされるのが非常にうっとおしかった。「野球選手」とか書いておけば子供らしいだろうか、とか考える冷めた小学生だった(ちなみに運動部の経験無し)。

んでまあ、0x20歳になって突然、やりたいことを思いついた。なんでもっと早く気が付かなかったんだろう。子供の頃からすぐ側にあったはずの夢だった。ここ数日ぼんやりと考えていたことが、ああこれが夢なのかと気がついた。

もしかしたら来週にはどうでもいいことになっているかもしれないけど。

Perlのutf8フラグとDBI::Pg

Perl5.8 から、文字列を内部で Unicode で扱えるようになった。

  • utf8 フラグ無し -> バイナリ列
  • utf8 フラグ付き -> 文字列の内部形式

みたいな感じだと思う。 utf8 フラグを付ける(内部形式にする)ことを decode、その逆を encode と言う。 なので、Perl でマルチバイトを扱うときは、

  • 外部からのマルチバイト文字列の入力を decode する。(utf8 フラグを付ける)。
  • で、いろいろ文字列を処理。
  • 出力するときは encode してから出力。

utf8 フラグ付きのマルチバイト文字列をそのまま出力しようとすると警告がでる。

コードはこんな感じ。ソースは euc-jp で書いてます。

#!/usr/bin/perl
use strict;
use Encode;
# $s1 は utf8 フラグ無し、$s2 は utf8 フラグ付き
my $s1 = "あいうえお";
my $s2 = Encode::decode("euc-jp", "あいうえお");

print $s1, "\n";
print $s2, "\n";    # そのまま出力すると警告

print "s1 len = ", length($s1), "\n";
print "s2 len = ", length($s2), "\n";

$s1 =~ s/./$&,/g;
$s2 =~ s/./$&,/g;   # 正規表現も使えます

print $s1, "\n";
print Encode::encode("euc-jp", $s2), "\n";

実行結果

あいうえお
Wide character in print at pg.pl line 9.


s1 len = 10
s2 len = 5
が↑がががΜが━が

DBD::Pgについて

あとで書く

ネタ仕込み中

とりあえず今のうちにいっときますが100%ネタですから(何?

流星ワゴン

何年か周期で小説を読める時と読めない時がやってくる。 ひょっとして今は読めるときなのではと数冊文庫本を買ってきた。

ずいぶん前に NHK で「ビタミンF」という短編ドラマを見て、 しばらく後にその原作が重松清だということを知った。 ちなみにそのドラマを見た時の(2002年)感想が関心空間に残ってました。

で、初めて重松清の小説を読んだわけです。

序盤は、死、後悔、絶望、裏切りと暗くて重い展開で読むのを挫折しそうになったけど、面白かったです。うん。ウマい。珍しく小説を読んで元気が出た。 やっぱ「ビタミンF」を見た時と雰囲気似てるな。

かぶりを振るという表現を初めて知った。

アルゼンチン vs メキシコ

決勝T一回戦屈指の好カード(だと思う)。メキシコは予選でポルトガルに負けたけど、退場で一人少なくなってからもポルトガルを内容で圧倒していた。 みんな足元がしっかりしていて、どこからでも攻撃できる。

開始早々予想通りの攻め合い。と思ったら6分にセットプレーからボルヘッティがヘッドで流してマルケスのゴール。

前半10分。コーナーからクレスポのゴール(ってーかボルヘッィのオウンゴール)。 この試合、この調子で90分進むのか? とにかくどっちも攻撃が上手いのか、全然中盤の守備がきかない。 主審はなぜかやたらと笑顔。

前半ロスタイムに、アルゼンチンのキーパーから 最終ラインへのパスがメキシコの選手に奪われてファウルで止める。 キーパーが蹴る前から狙ってた。時間帯を見て狙ってたのかな。 レッドでもおかしくないシーンだったけどイエロー。

FKが壁にはじかれて前半終了。メキシコのペース。 攻め合ってる感じもしたけど、シュートは少ない。 どんどんスペースを使ってパスを回し、最後はボルヘッテイの頭へ。

でもアルゼンチンは一発で最終ラインの裏を突いてくるからなぁ。

リケルメの顔は両さんに見える。

後半になってちょっと両チームともタイトになってきたかな。

なんか後半はアルゼンチンがずっとボールを支配している。 けどメキシコも上手く守っている。 しかし交代ではいってくるのがアイマール、テベス、メッシという、、、

延長突入。眠い。

うわー。なんだこの1点。サイドチェンジから胸トラップしてロドリゲスのボレー。 ありえねー。

こういう形で負けますかー。

はなまるうどんに行こうとしたら

えーっと先週はこの辺ではなまるうどんを食べたと思うんですが、、、

Googleキャッシュ:はなまるうどん 店舗案内

永らくのご愛顧ありがとうございました。6月20日をもちまして閉店いたします。

嗚呼!!

vs ブラジル

起きちゃったので書いてみる。

最初10分くらいはすごんハイペース。

思ったよりブラジルのディフェンスが前からくる。

川口すごすぎ。

クロアチア大丈夫かなぁ。オーストラリアは強いよ。

前半30分、やっと試合がおちついてきた気がする。

あ、はいった。

こりゃ大変な試合になるなぁ。 リードしてるけどこんだけ中盤好き勝手やられて。 マイアミの時っぽくなってきた。

裏が1-1になった。クロアチアー。

選手交代むずかしいな。大黒は使うだろうけど。

前半44分、加地がファウルをもらう。昔は嫌いだったけどいい選手。

あー同点。ヘッドでやられるとは。惜しい。1-0のままでいけばやりやすかった。

ハーフタイム。スタジオは何故マイク手持ち。

ブラジルはここまで無失点とはいえ、オーストラリア戦なんかはかなりやられてた。 最終ラインは崩せると思う。 ただ、残り5分とかの時間の使い方はメチャ上手いので早めにリードしたい。 攻めてきてくれないと辛い。

後半。ロナウジーニョとロナウドのコンビネーションに正直痺れた。

何故かアナウンサーはレポーターをシカト。

あ、2-1。リードされたよ。

あ、3-1。ここで切れてたら日本じゃない。1点ずつ。 でもちょっとここからはちょっとブラジルファン視点もまじえながら見よう。 そろそろ遊びも出てきそうだし。

後半30分。いやぁ。上手くて感心するわ。

4-1で終了。

ジーコインタビュー。どうでもいいけどこの通訳の喋り方がどうも気にくわない。

選手のインタビューはいらないだろ。

ジーコの言うように、4-1ほどの差は無いと思う。そしてワールドカップを通じて少しずつ歯車が狂っていったように思う。 この4年間の日本のサッカーってこんなんだったっけと思いながら3試合見ていた。

まあ意味のある負けだと思おう。

98年大会優勝のフランスなんて、その後2大会5試合で1つも勝ってないし、 その前は予選落ちしてる。

前回大会優勝のブラジルは、ぎりぎりで予選を勝ち上がってきて、 前評判は低かった。

今大会のスウェーデンの初戦は21本のシュートを放ったが0-0の引き分けだった。

キミならどう書く 2.0 - ROUND 1 -

キミならどう書く 2.0 - ROUND 1 - を SQL で。って LL じゃねーよ!!

select * from generate_series(2, 100) s1 (i)
 where 0 not in
      (select s1.i % i from generate_series(2, s1.i) s2 (i)
        where s1.i <> s2.i);

トラックバックはしません。

最近のお気に入り

めぐみのホームページ1000

廃墟やゲームやガンダムが好きらしい方。なかなかぐっとくる文章を書く。

自分自身の人生において、感動するって事があまり無かった。 無関心、無感情なタイプなのかもしれないな、なんて思っていた。

が。

しかし、この炭鉱跡地を見た時、絶叫した。

クモの巣が頭に張り付いても、叫び声ひとつあげない私が、

感動で絶叫した。

私の心を動かすものはこういうモノだったのか、と初めて知る。 (羽幌探索 より)。

もし無駄にお金があったら、この人にちょっと高級なデジカメをプレゼントしたいよ。

先週のいろいろ

仕事以外でほとんど人と会わない自分にしては、やたらと(といっても二回だけだけど)人と会った先週。

火曜日のまとめ

  • 「謙遜してはいけない職業」の話がツボだった。

金曜日のまとめ

  • SKK はいいものだ
  • RFC 3629 読もう。というか今日読んだ
  • ビジネスクラスはモチベーションが上がるらしい
  • 始発まで遊んでいてもホテルにチェックインできた

vs ドイツ代表

今更だけどサッカーの感想。フォワードはみんな良かった。 コンディションがよいとこんなに違うもんか。 一時期の当てても当ててもポロポロこぼしてた高原はいったいなんだったんだ。 柳沢は本当に上手いなぁ(シュート以外は)。

1点目は今まで日本代表ではあまり見たことが無いような鮮やかな速攻。 2点目のは中村が右サイドから大きくセンタリングと見せかけて ニアの高原の足元に出したんだけど、そのフェイントに引っかかった 高原がトラップミスして仕方なくグルッと回ったようにも見えたけど、 まあどっちでもいいや。

得点にはならなかったけど、中田から大黒へのスルーパスや、 中村からファーサイドの中田へ、ヘッドで折り返して大黒というのも 完全に狙いすました形で可能性を感じた。

収穫も課題もあった試合と言われているが、 最も不安な点は、あの日本代表のユニホームは破れやすすぎるんじゃなかろうか。

泡沫桀人列伝―知られざる超前衛

内輪ネタです。

...
葬儀人類学者“最終芸術を見守る”―山形葬太郎氏の巻
裸の鈴鳴り神社“狂気なる紳士”―上条順次郎氏の巻
マサカリ画伯“熊もビックラコ”―池本良三氏の巻

誰か情報あります?


SQLの書き方をバックエンドに教えてもらう - その1

FROM 句に書くサブクエリは、外に出せる場合があります。 簡単な例だと SELECT * FROM (SELECT * FROM t) は SELECT * FROM t と一緒。 もうちょっとまともな例だと

-- 勝ち越した力士の名前と出身地
SELECT r.名前
     , s.都道府県名
  FROM 都道府県 s
     ,(SELECT *
         FROM 力士
        WHERE 勝ち星 >= 8) r
 WHERE s.都道府県id = r.出身地id

-- サブクエリ内を外に出しても一緒
SELECT r.名前
     , s.都道府県名
  FROM 都道府県 s
     , 力士 r
 WHERE s.都道府県id = r.出身地id
   AND r. 勝ち星 >= 8

例に深い意味はありません。こういう例考えるのってむずかしいね。 最初の単純な例にしろ、この力士の例にしろ、EXPLAIN すると 全く同じプランを出力します。つまり PostgreSQL はこの 2 つが同じ意味だと知っていて、サブクエリを外に出すという 書き換えを内部でやっています。

しかし、常に FROM 句のサブクエリは外に出せるわけではありません。 例えばサブクエリ内で LIMIT/OFFSET を使っている場合は このような書き換えはできません(続く)。

博士の愛した数式

長い間小説なんて読んでいなかったので、読めるかどうか不安だったけど、 おもしろいねぇ。これ。一気に読んでしまいました。 ちなみに映画は見てません。でも寺尾聰と深津絵里のイメージは読書の 助けになったかもしれない。

結城さんもこれを読んだんだろうか。


貧乏クジ世代

リカちゃん先生の本。この本での貧乏クジ世代とは「第二次ベビーブーマー」 を含む 1970年代生まれのこと。目次をちらっと見ると、

「これまでよかったから、もういいことはない」―未来志向になれない人びと
「心の内を相手に伝えないこと」を「やさしさ」と考える男がふえている
...
「頑張っているとき以外は不安」―こんな状況から抜け出すには?

という感じで、まさにオレオレっていうか、俺って結構異端だと思ってたけど 実は一般的な 70 年生まれなの?って思わせる目次だが中を見ると、 つまり

  • バブルの中、「私も頑張れば、、、」と熾烈な受験戦争を戦い抜いてきたものの 世の中は就職氷河期という貧乏クジ世代。
  • 家庭もマイホームもありながら「人生やり尽した」という燃え尽き感。

などなど。燃え尽きているところだけは一致するが、 とりあえず俺は受験戦争も就職氷河期も経験してなければ、 家庭もマイホームもありませんから。

燃え尽きという意味では多分俺は 20 歳くらいでもう燃え尽きてあと惰性で 生きてるし。「コミュニケーションのあきらめ」という意味では もっと早い段階であきらめたような気がする。

本当に自分がダメだなと(客観的に)思うのはこの他者はおろか 自分自身に対しても「コミュニケーションをあきらめ」ちゃってる所だ。 だからこういう本の分析に関して客観的になるほどと思うことがあっても、 「こうしてみては」という話はまるで心に届かない。

そういう意味では、冒頭の「燃え尽き」を感じたくらいでカウンセリングに いってるサラリーマンはお前はあきらめが足りないよと思ったりw。

ところで旭屋に何か行列ができてるなと思ったら西原理恵子さんがサイン会やってました。一見普通の人でした(何。

コマンドプロンプトでF7キーを押すと、、、

何がおきるか知ってます?正直ビックリしました。

Commandline editing in psql on win32

書道スタジオ HOO

事務連絡ですが、こないだ俺が言ってたのは多分コレです。

書道スタジオ HOO【ほぉー】楽しい・嬉しい・HOOっとしたい!

そろそろ帰るか、、、

GW にはいってからのここ 6 日ほど、生身の人間とまともに会話してませんが何か?(いや、「お弁当温めますか」とかそういう会話はしてる)。

そろそろ実家に帰るか。

PHP5.1.3

  • 2006-05-04
  • php

PHP: PHP 5 ChangeLog

#36625 オレオレ。普段さんざん PHP はダメだとか言いながら patch を書いてしまうことを Python じゃなくて PHP のパラドクスと呼んでみたり。 まあ pg_trace() なんて誰も使わないわな。

と思ったら、PHPバージョン5.1.3に致命的なバグ - HotPHPPER News だそうで。

久しぶりにカメラをいじる

右目が見えなかったせいもあってしばらくカメラを触る気になれなかったんだけど、目が見えるようになったのでしばらくぶりにカメラをもって出掛けてみました。 持っていったカメラは SMENA 8M と富士フィルムの natura。

ついでにダークレスで現像してみました。 まだnaturaの方しか現像してませんが、やっぱ白黒は面白い。広角も面白い。あと AF って簡単だなw。

とりあえず練習くらいのつもりで適当に (手袋が無かったので素手で触ってたり、フィルム吊そうと思ったら落したりとか) 現像したので、かなり汚くなってしまったけど、真面目にやればもっと綺麗に できると思います。

それにしても寒かった。

img010
img010 posted from フォト蔵

img014
img014 posted from フォト蔵

グラビアアイドル + うどん

グラドル田澤麻衣が打つ讃岐うどん動画配信 - [うどん]All About

もう、どっち方面向けの情報なんだかよくわかりません。

コーヒー1杯でパンと卵食べ放題 珈琲館のモーニング

旅行中

そんなわけで、JPUG勉強会 で話してきました。 なんというかショールームのようなすごい会場。通行人が足を止めて見つめる中、 SQL の話をしてきました。

最初は時間があまりまくるんじゃないかと思ってましたが、結果的には足りないくらいでしたね。

明日はあまり天気はよくないのかな。ホテルでコードでも書くか。

うどん食べた
うどん食べた posted from フォト蔵

livedoor Readerが拓くMVC2.0

遂に出ましたね。livedoor Reader。何といっても注目はココ!!

デッドヒート
デッドヒート posted from フォト蔵

登録数ランキングがおもしろい。この livedoor Reader にいきなり飛び付くユーザ層 をモロに反映してます。4位以降は、

4. Engadget Japanese
5. My Life Between Silicon Valley and Japan
6. blog.bulknews.net
7. MYCOM PC WEB
8. Going My Way
9. jkondoの日記
10. Google Japan Blog

といった感じ。

で、まあ使ってみました。まあこれがあればとりあえず bloglines はいらないかな。 両手を使うのがコツというかミソというか。 ちょっとおかしな動作をした気もするが、再現したら報告してみよう。

それより、ソースが面白い。ってサーバ側のソースが流出したわけじゃないですよ。 HTML のソースです。

今までよくあった手法としては、サーバ側にテンプレートとデータがあって、 サーバ側のアプリケーションがそれをバインドしていたわけだけど、 ここがやっているのは、テンプレートをいきなりブラウザに送っちゃうわけだ。 で、XMLHttpRequest かなんかでサーバ側からデータだけもってくる (たぶん JSON とかで)。そしてクライアント側の JavaScript でデータをテンプレートにバインドしているわけだ。

これはある意味、今頃になって Web アプリケーションがまともな MVC に近づいたと言える。 前に自分で書いたことにもちょっと通じるけど、こういう風にやるとはねぇ。

最近の JavaScript 事情にあまり詳しくないが、 これってもうよく知られた手法なんですかね?正直感動しました。 あ、ざっと見ただけなんではずしてるかもしれませんが。

あらゆる局面で使える手法かどうかはわからないけど、 これは今後必ず流行ると思う。IDE なんかにもハマるだろう。

とか書いておくと、デリシャス/なんちゃらに捕捉されたりしないかな。

あと、こっちはもう更新しないんだろうか。

しかし我ながらアホみたいなタイトル付けてしまった、、、

メモ帳

ちなみに(聞かれてませんが)、僕がメモ用に使っているのは、 ITO-YAで買ったA6リングノートです。 紙質も気にいってるし、表紙は固いし、厚さがあることも良いです。 裏には、www.oxford-office.orgと書いてありますがそんなサイト無いところも気にいっています^^。

ペンはすぐ無くしてしまうので、細いボールペンをリングにひっかけてます。 あと、しおり兼定規兼ブックバンドの様なもの(これもITO-YA)もひっかけてます。 とにかくロストしないことが重要。

あ、同じの使ってる人がいた

PHPのapache_hooks(その2)

  • 2006-04-18
  • php

ちょっとだけ動いた。とりあえず AddHandler じゃなくて SetHandler にしたのと、 $request というグローバル変数は無かったので $_SERVER['request'] を拾ってみた。 こんぐらいは動くかな。エラーログはものすごいことになってるけど。

internal_redirect() 動かしたいなぁ。

phpRequire /tmp/setup.php
<Location /hello>
SetHandler php-script
phpResponseHandlerMethod Hello::World
</Location>

with
#/tmp/setup.php
<?
class Hello {
     function World() {
        $request = $_SERVER['request'];
        $request->send_http_header();
        echo $request->uri();
        echo "Hello World";
     }
}
?>

あーいちおう説明しておくと、こうなってると /hello だろうが /hello/foo/bar/baz.html にアクセスしようが全部 Hello::World() が処理します。

シンガポール人が探した「秘伝書」あった

シンガポール人が探した「秘伝書」あった - 社会ニュース : nikkansports.com

シンガポール人一行が「秘伝書」を持つ日本人空手家を捜して青森県内をさまよっていた件で、同県平内町の武道家・福田祥圓(しょうえん)さん(61)が「自分のことではないか」と名乗り出ていたことが12日、分かった。

Sugeeeee!!

PHPのapache_hooks

  • 2006-04-15
  • php

PHP で Web アプリケーションを書くときは、CGI として動かすこともできるが、たいていは apache のモジュールとして動かしていると思う。 このモジュールというのは mod_php4 とか mod_php5 とかいうやつ。 で、これに相当するものとして、Perl には mod_perl、ruby や Python にも mod_ruby や mod_python がある。

これらのモジュールは、apache がリクエストを処理する過程の色んなタイミングで、apache から呼び出されるわけなんだけど、 実は mod_php とその他の mod_perl には大きな違いがあるわけだ。

コードを見るのが早いだろう。以下は apache から呼び出されるタイミングの定義みたいなもん。

mod_perl の src/modules/perl/mod_perl.c
module MODULE_VAR_EXPORT perl_module = {
    STANDARD_MODULE_STUFF,
    perl_module_init,                 /* initializer */
    perl_create_dir_config,    /* create per-directory config structure */
    perl_merge_dir_config,     /* merge per-directory config structures */
    perl_create_server_config, /* create per-server config structure */
    perl_merge_server_config,  /* merge per-server config structures */
    perl_cmds,                 /* command table */
    perl_handlers,             /* handlers */
    PERL_TRANS_HOOK,           /* translate_handler */
    PERL_AUTHEN_HOOK,          /* check_user_id */
    PERL_AUTHZ_HOOK,           /* check auth */
    PERL_ACCESS_HOOK,          /* check access */
    PERL_TYPE_HOOK,            /* type_checker */
    PERL_FIXUP_HOOK,           /* pre-run fixups */
    PERL_LOG_HOOK,          /* logger */
...

(`・ω・´) シャキーン

php-5.1.2 の sapi/apache/mod_php5.c
module MODULE_VAR_EXPORT php5_module =
{
    STANDARD_MODULE_STUFF,
    php_init_handler,           /* initializer */
    php_create_dir,             /* per-directory config creator */
    php_merge_dir,              /* dir merger */
    NULL,                       /* per-server config creator */
    NULL,                       /* merge server config */
    php_commands,               /* command table */
    php_handlers,               /* handlers */
    NULL,                       /* filename translation */
    NULL,                       /* check_user_id */
    NULL,                       /* check auth */
    NULL,                       /* check access */
    NULL,                       /* type_checker */
    NULL,                       /* fixups */
    NULL                        /* logger */
...

(´・ω・`) ショボーン

という感じ。つまり大雑把にいうと、mod_perl なんかの方がいろんな方法で apache と連携できるわけだ。

という話を書こうと思ったら、php のソース内に sapi/apache_hooks/ というディレクトリがあるのを発見してしまった。

php-5.1.2 の sapi/apache_hooks/mod_php5.c
module MODULE_VAR_EXPORT php5_module =
{
    STANDARD_MODULE_STUFF,
    php_init_handler,           /* initializer */
    php_create_dir,             /* per-directory config creator */
    php_merge_dir,              /* dir merger */
    php_create_server,          /* per-server config creator */
    NULL,                       /* merge server config */
    php_commands,               /* command table */
    php_handlers,               /* handlers */
    php_uri_translation,        /* filename translation */
    NULL,                       /* check_user_id */
    php_auth_hook,              /* check auth */
    php_access_hook,            /* check access */
    php_type_hook,              /* type_checker */
    php_fixup_hook,             /* fixups */
    php_logger_hook             /* logger */
...

おお、何ですかこれは。どうやら ./configure --with-apache のかわりに --with-apache-hooks とするらしいよ。 README にもなかなか素敵なことが書いてある。

phpRequire /tmp/setup.php
<Location /hello>
AddHandler php-script
phpResponseHandlerMethod Hello::World
</Location>

with
#/tmp/setup.php
<?
class Hello {
     function World() {
         global $request;
         $request->send_http_header();
         echo "Hello World";
     }
}
?>

他にも色々素敵なことが書いてあったので、codeblog の gonzui へのリンクを貼っておこう。 これの何が素敵なのかわからん人にはさっぱりワカランと思うけど、 まー apache モジュールに関しては小山さんの本とか、あと mod_python のドキュメントが実は良いと思う。

この PHP の素敵な機能、apache_hooks の欠点は、

  • make install してもインストールされない
  • README のように httpd.conf を設定すると、構文エラーになる。
  • せぐめんてーしょんふぉるとになる

これらの欠点を除けば、なかなか素晴しい機能かもしれない。 かもしれないというのは、まだ動かせてないからわからないという意味です。

続くかも。

PHPは何故ダメか

PHPを他の言語が見下す理由 - 404 Blog Not Found とか F's Garage:昔、2ちゃんとかでよくあった、Perl = C++ , PHP = VBってな感じ? あたりを見て、PHP がいかにダメか、PHP に対す不満をつらつら書こうと思った。いったいなんでこんなことになってるんだ、と思ってソースツリーを見てみたら、PHP の意外な(そして誰も使っていない)実力を発見してしまった気がする。 もっとも僕の勘違いかもしれない。これについてはちょっと調べてみてからまた書こうと思う。

それはともかく、YAPC::Asia なんかを見たり聴いた感想としては、PHP がダメな理由は「PHP には Larry も Matz もいないから」とか言ってみたい。半分本気。

そもそも大抵の言語は C で実装されてるわけで、で、大抵 C で拡張可能になっている。なので「何ができる / 何ができない」というのはほとんど意味がない。 C で拡張書いちゃえば、C でできることは全部出来るからだ。 だから、「何ができる」よりも「どのようにできる」の方が大切だと思う。

あと、言語が生き物である以上、「今こうである」ということはすぐには言語の魅力には結びつかないんじゃないかな。大切なのは、ひとつは生い立ちで、もうひとつは成長を支える環境だと思う。(まあ現状の PHP にもいっぱい不満はあるけど)。

今コマンドライン上で動こうとも、PHP は生れは Web アプリケーション専用の言語だった。そのことが売りだったわけだ。Perl で CGI を書こうと思ったら、 print "Content-type...\n\n"とかしていたころもあったし、 CGI.pm だ、DBI、DBD、セッション管理はどうするの?とかやっていたころもあった。

PHP はいきなり $_GET とかできるし(それすら必要無かったけど^^)、 $_SESSION でセッション管理できるし、それなりのパッケージいれれば RDBMS にもすぐ繋がる。

でも、状況はかわってきた。他の言語のフレームワークもコマンド一発でインストールできるようになってきた。

で、この先の PHP に何があるのだろう。

小島麻由美 / 倖田來未

小島麻由美のニューアルバム買ってきました。

あいかわらず良いお声です。

ところで、最近やたらと倖田來未のポスターを見かける。こんなやつ。

しばらくテレビを見ていないので、この人が動いているところあんま見たこと無いのだが、実はテレビに出るときもこの格好だったらエロイというより明らかにアホだな、とか思ってみたり。

O/Rマッピングがダメとかじゃなくて

O/R マッッパーがダメなわけじゃない。現状ではそれも一つの解だけど、でもやっぱ別の解がありそうな気がするというだけのことだ。

もちろん、"O" の方がダメだとか "R" の方がダメだとかいうわけでもない。 ただ、RDBMS というのは Web アプリケーションのためだけのものではないし、むしろ元々はそんな使われかた想定されていなかったんだと思う。だって RDBMS が出来た時は Web アプリケーションなんてなかっただろうし。

そして、言語の進化と比べれば、RDBMS は(表向きは)ほとんど変化していないし、これからもそうだと思う。

つーか単純な ActiveRecord とかやるなら、REST でいいんじゃないかな。ある URL に対して REST でアクセスするとそのまま RDBMS にマッピングしてくれるというサーバがあればいいんだ。 で、SELECT の結果は XML とか JSON で返せばいいじゃん。GET なら JavaScript からでも XMLHttpRequest でアクセスできる。何より言語に依存しない。 (もうどっかにあるのかな?)

FireBugすごいかも

Web Developper 向けの FireFox Plugin。

IT戦記 - FireBug の新しいバージョンが便利すぎる件について

リンク先の、さらに先にあるムービーを見よう。いちおうここにもリンク貼っておきます。

http://sample.ecmascript.jp/20060331.html

ちょwwwチャーノフwww

チャーノフ

なんだコレ。

最近の巡回コースより

reddit からの拾いもんだけど、jcorrect を利用した技術文章校正のヒント が面白い。名前を見て最初うずら の人かと思ったけど違うよね?

YAPC聞きまくり

ずっと YAPCmp3 を聞いている。いつになったら聞き終るんだろう。 高橋さんのオチは見事だなぁ。テレビでよく聞く弾さんの声はすぐわかる。 英語はほとんどワカラン。「ラク…ラクダ?」とか言ってるのが実はLarryか。

思わず吹いたのは、mixi に関する質疑応答で「今後 mixi がオフィシャルにソースを公開することはありますか?」ってw。

Markdownでblosxom - その2

やっぱ Markdown の名前を変えるより、meta の名前を変えた方が良かった。 というか、blosxom で plugin のファイル名を取得するところが、

my($plugin_name, $off) = $plugin =~ /^\d*(\w+?)(_?)$/;

となっている。なるほどね。プラグインのファイル名の先頭の数字は 無視してくれるわけだ。だから meta を 10meta にしておくのが良いみたい。

あーもうちょっと真面目に書いておくか。

Markdown をそのまま blosxom のプラグインディレクトリに入れておけば、 すぐに エントリを Markdown 形式で書くことができるんだけど、 これだと、過去に書いたエントリはどうするの?ってことになる。

そこで meta プラグインというのが登場する。

このプラグインは、エントリ内に設定値みたいなのを書くためのプラグイン。 具体的には、エントリのタイトル行の次に

エントリのタイトル
meta-markup: markdown

エントリ本体
...

と書いておくと、$meta::markup という変数に 'markup' が設定されるわけだ。 で、 Markdown 内の $g_blosxom_use_meta = 1 に書き換えてやると、 この $meta::markup が設定されていない場合、Markdown は何もせずに 元のテキストを返す。

ところが問題は、blosxom がプラグインを辞書順で読み込むために、 meta よりも前に Markdown を実行してしまうということだった。

はぁ。というわけで meta プラグインを 10meta とかにして解決。

Markdownでblosxom

というわけで、blosxom のエントリもも Makrdown で書くことにした。 色々悩んだんだけど、結局全部ググれば当りました。

何があったかというと、Markdown と meta を plugin フォルダに入れておくと、 Markdown の方が辞書順で先に読み込まれてしまうので、 1 つめの story だけ変換できなくなってしまったわけです。

で、とりあえず私は Markdown を metaMarkdown という名前にしてみた。 meta の名前を変えた方が良いかもしれない。 あと、ファイル名を変えたら、中の package 名も変えましょう。

4月5日のいろいろ

MochiKitをちょっといじってみる。まー面白そうというかなんとういか。 いや、面白いけどさぁ、partial()とか。でもコレで本当にイイのか!?

ブログリーダー、リニューアルのお知らせ (livedoor ブログリーダー開発日誌)

Web2.0時代にふさわしい機能と使い勝手を実現するため、まったく新しいRSSリーダー鋭意製作中です。

期待しないわけないでしょう。だって作ってるのはアノ人。

4月4日のいろいろ

噂の Python Web アプリケーションフレームワーク、 TurboGears をちょっとだけ覗いてみる。なかなかよさそう。 (hello world しかやってないけど)。 そもそも CherryPy が良さそうだ。 Kid はやっぱ良いな。Zope の TAL を見たときも思ったけど。 SQLObject は微妙だけど、まあ一つの解だと思う。

あの小鳥 さんはそういうことをやってた人だったのか。 何でこのサイトに辿りついたのか忘れたけど、 仕事中にスネ夫を正面から見たらを見た時は死ぬかと思った。

Plain Text から HTML を生成するのは色々あるけど、 Markdown よさそう。

Linux にM+ と IPAフォントの合成フォントを入れてみたり。なかなか綺麗だ。良い気分転換になる。

いろいろ

サーバー落ちてました。まサーバーメンテナンスがあったんだけど その後、apacheが起動でエラーになってたという。 Portsの依存関係がおかしなことになっていたのかもしれない。 portupgradeとかちゃんと覚えたいな。とりあえず適当に復旧。

眼科で眼底検査をやる時に、瞳孔を開く目薬をさす。 で、数分後に看護婦さんがペンライトで目を照しながら、 瞳孔の開き具合をチェックするのだが、 その時の 「私の目をまっすぐ見て下さい」 とかいうありえない台詞は軽く恥ずかしいので考え直して欲しい。

ぱるま : Perlish Magazine!! 次号まで待てねー!!

SICP等

SICPの読破は今年一年の目標の一つである。まあかなり挫折しそうだけれど。 何だこの問題2.6は。これほど短いソースコードを見てこれほど全く理解できない というのは久しぶりだ。ラムダ計算スゴス。

末尾再帰はgotoと等価だというのを学んだ時、10年くらい前にやったアセンブラの仕事を思い出した。 再帰ではなかったけど、関数の最後がcallの場合はjmpに置き換えられる というのをその時学んだ。アレと似てるじゃないか。

;; コレより、、
:func1
    ;; 処理
    call func2
    ret
:func2
    ;; 処理
    ;; 処理
    ret

;; コッチの方がスタック消費しなくていいじゃん
:func1
    ;; 処理
    jmp func2
    ret ;; 通らない
:func2
    ;; 処理
    ;; 処理
    ret ;; いきなりfunc1の呼び元まで戻る
;; まああくまで一例ってことで、、、

普通の構造化プログラミング的なフローに照らしあわせながら 他の人が書いたソースを見ていたら、 当然callが出てきそうな所にいきなりjmpが出てきて面くらった。 コードを書いた人は、 あのフローを見ながら、当然のようにこういう最適化をやっていたわけだ。

とか思ってたら、アセンブラで継続を書いてる人がいるよ

んなわけで、当たり前のことかもしれないけど、Schemeをやってると アセンブラっぽさを感じるというか、C言語なんかとは別の 進化を歩んだ言語なんだなと(つーかあんまり進化してないのか)と思う。

アセンブラ
 |
 +- Lisp
 | +- ...
 +- Pascal、C
   +- ...

札幌市営地下鉄について考える SQL

札幌の地下鉄東西線新札幌方面からさっぽろ駅又は南北線麻生方面へ 通勤している人は共感してくれるのではないかというネタ。

ちょっと遅い時間帯に帰宅時するとき非常に腹が立つのは、 大通り駅での乗り継ぎのタイミングが、 どの列車のやたらとシビアなのだ。 なので、南北線真駒内方面から東西線新札幌方面へ 乗り継ぐ人時に大通り駅の中を走っている人をよく見かける。 (また走ると大抵間に合ってしまうところが腹立たしい)。

で、実際どの程度シビアなのかを調べてみた。 まあ SQL なんか使わなくてもいいんだけどネタとして。

札幌市営地下鉄のサイトから 時刻表をとってくる。PDF なんだけどこれから大通り駅の 時刻表をコピペしてテキストにする。 平日と休日の時刻表が左右に並んじゃってるけど、 休日分は手で削除してこんなデータができる。

6 10 20 30 41 51 58
7 5 12 20 27 34 41 45 49 53 56
...

で、時刻っぽくするために perl で処理。

$ perl -ane '$h = shift @F; print "$h:$_\n" foreach (@F)' sn_s.txt > sn_s.data
$ cat sn_s.data
6:10
6:20
6:30
6:41

ちなみに sn_s は南北線の南方面行き。あとはこれを PostgreSQL にいれる。

ishida=# create table sn_s (t time primary key);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "sn_s_pkey" for t
able "sn_s"
CREATE TABLE
ishida=# \copy sn_s from 'sn_s.data'
\.
ishida=# SELECT * from sn_s;
    t     
----------
 06:10:00
 06:20:00
...

ew_e (東西線東方面) も同様に処理して、 さて、求めるべきは、「南北線南方面行きの各時刻に対して、 それより大きい東西線東方面行きの時刻の中で最小のものとその差」だ。 例を 2 つ挙げておこう。大抵の人は前者の方が好きなんじゃないかな。

例1)
SELECT sn_s.t
     , (SELECT min(t) - sn_s.t
          FROM ew_e WHERE t > sn_s.t)
       FROM sn_s;

例2)
SELECT sn_s.t
     , min(ew_e.t) - sn_s.t
  FROM sn_s
       JOIN ew_e ON (sn_s.t < ew_e.t)
 GROUP BY 1;

結果、 やはり 20 時以降はやたらと 1 分乗り継ぎが多い。 調子にのって平均値を出してみる。

例1)
SELECT date_part('hour', t)
     , avg(t_diff)
  FROM (SELECT sn_s.t
             , (SELECT min(t) - sn_s.t
                  FROM ew_e WHERE t > sn_s.t) AS t_diff
          FROM sn_s) AS t_sub
 GROUP BY 1
 ORDER BY 1;

例2)
SELECT date_part('hour', t)
     , avg(t_diff)
  FROM (SELECT sn_s.t
             , min(ew_e.t) - sn_s.t AS t_diff
          FROM sn_s
               JOIN ew_e ON (sn_s.t < ew_e.t)
         GROUP BY 1) AS t_sub
  GROUP BY 1
  ORDER BY 1;

結果

 date_part |       avg
-----------+-----------------
         0 | 00:05:30
         6 | 00:04:40
         7 | 00:03:48
         8 | 00:02:07.058824
         9 | 00:03:15
        10 | 00:04:06
        11 | 00:03:40
        12 | 00:05:36
        13 | 00:01:46.666667
        14 | 00:03:46.666667
        15 | 00:06:00
        16 | 00:02:26.666667
        17 | 00:02:32.727273
        18 | 00:02:16.363636
        19 | 00:02:45
        20 | 00:02:00
        21 | 00:02:45
        22 | 00:02:45
        23 | 00:03:30
(19 rows)

13 時が一番シビアだということが判明。 でも 20 時以降は 8 分 とか 9 分とかあるにもかかわらず この平均値だもんなぁ。 同じことを東西線宮の沢方面(西方面)についてやってみる。

 date_part |       avg       
-----------+-----------------
         0 | 00:08:30
         6 | 00:05:50
         7 | 00:02:12
         8 | 00:02:00
         9 | 00:03:30
        10 | 00:03:00
        11 | 00:04:20
        12 | 00:02:24
        13 | 00:04:26.666667
        14 | 00:05:13.333333
        15 | 00:02:36
        16 | 00:04:13.333333
        17 | 00:02:54.545455
        18 | 00:03:54.545455
        19 | 00:04:50
        20 | 00:04:34.285714
        21 | 00:04:30
        22 | 00:04:30
        23 | 00:05:20
(19 rows)

やっぱ反対方向の方が余裕あるような気がする。

Wikipediaで知る北海道弁

北海道方言(Wikipedia)

大方の人は、自分の話す言葉が、共通語アクセント(東京式アクセント)であると位置づけているが、実際には独特の「北海道式アクセント」とも言えるものが存在している。

なんかイヤな言い方だな。まあ僕が神奈川あたりに住んでいたころは、 北海道に住む兄と電話で話しながら「こいつ訛ってんな」と思ったりもしたがw。 確かに、「アクセント・イントネーションなど」の部分は、そんな気もするというところもある。

でもさぁー

  • 主に札幌市で、住所の地番を示す「南○条 西△丁目」などの「西(にし)」で、「に」が高い独特のアクセントが現れることがある。
  • 札幌市の、中心街・駅名・住所としての「大通(おおどおり)」で、語頭の「お」にアクセントを置くことがある。特に札幌市民がそう発音する。
  • それってたしかに耳に覚えがあるけど、たぶん地下鉄のアナウンスだけだと思うよ。

    ところで Wikipedia には タッチ のエントリもあるのね。堀内沙織 は無いのか?

    順調です

    というわけで、順調に回復しています。 先日まで見えていなかったことを忘れるくらいよく見えています。

    手術の当日は、まず脈や血圧などを測ってから五分おきくらいに目薬をさし、 それを数十分続けてからいよいよ手術。その直前にまた血圧を測ったんだけど、 「緊張してます?」との看護婦さんの問いに「まあ、ちょっと」 と答えたものの、血圧は最初と全く同じ。「全然緊張してないですね」 と笑われた。まあ初めての手術じゃないし。

    今日は日曜日で病院は休みなんだけど、術後の経過を見るのに病院にいってきました。 病院は先生一人だけ。普段はわりと淡々としている先生なんだけど、 今日はゆっくり話すことができました。

    終始笑顔で、僕の経過が順調なことをとても喜んでいる様子が印象的でした。

    メガネメガネ

    右目が白内障で小狼君状態だということは 以前 にもちょっと書いた。この頃はまだ 「目は全く形を認識できないので、焦点を合わせることができない。」 とか書いてるけど、今は「今右目開いてる?」と思うぐらい ほとんど見えていないので、焦点なんて気にならないくらいだ。

    で、手術をすることになった。

    手術の後は、目を保護するために当分メガネをかける必要があるらしい。 サングラスでも良いとのことだったが、一日中かけなければいけないと 思うと厳しい。 別に一日中サングラスをしている人に対してどうこう言うつもりはない。 しかし仕事中でも、客先でもサングラス、寝る直前までサングラス、 朝起きたらサングラスという生活は僕にとっては厳しい。

    しかたがないのでメガネを作ることにした。 とはいえ、今までメガネなんてかけたことないし、 どう選んで良いものかわからん。 ちょっと試してみると、あまりの似合わなさに気が遠くなりそうになった。 メガネっつーのはもうちょっと人を賢そうに見せるもんじゃなかったっけ? どう見ても犯罪者です。ありがとうございました。

    結局店員に適当に選んでもらう。 はぁ、、、当分これをかけて生活するのかぁ、、、

    gonzui -> code ブックマークレット

    CODE blog を書いてない人にはまるで関係の無い話。

    CODE blog を書く時に gonzui の中のコードを引用するときは、 tDiary の code 引用プラグインを使っている。

    CODE blog 利用のてびき

    これはなかなか便利なんだけれど、 3 ケタの数字を暗記できないという非常識な短期記憶力を持つ僕にとっては、 この code プラグインのタグを書くのがかなりツラい。 「432行目から448行目っと、、、」とか思って画面を tDiary に切り替えた瞬間にもう忘れてしまうわけです。

    なんで、必死でブックマークレット作ってみました。使い方は、 下のアンカーをブックマークツールバーに DnD して、gonzui のソースを マウスで範囲選択した状態でそのブックマークを押す。 すると、なんと code タグが JavaScript の winodw.prompt で出てきますw。 あ、FireFox 限定です。

    CODEtag ← これをブックマークに登録

    (久々に) codeblog 書きました

    こんな blog を RSS リーダーに登録してしまうような熱狂的な俺ファンのみなさんの為に、また、 俺ファンではあるものの codeblog は RSS 登録できなくてお困りの方の為に、codeblog 更新情報をお届けします。

    今回もあんまりセキュリティには関係無いですw。あと ROLE 方面が書きかけで 一ヶ月ほどほったらかしてあるんでどうにかせねば。

    しかしコレ書くの疲れるなぁ、、、

    PostgreSQL のコードを読んでみたいと思ってる人は、やっぱちょとは yacc 勉強した方が楽しめると思うよ。

    春だからといって

    はしゃぎすぎだと思うよ。はっきりいって。

    なんか輪になってるし、、、

    いろいろ

    夢は見ても、たいてい起きてすぐに忘れてしまう。 が、先日のは印象的だった(あれが夢だったとすれば)。

    壁側を向いて寝ていたら、背中の方にかすかな気配を感じた。 足音はほとんどしない。ああ、猫か。もうろうとしながらそう思った。 少しずつ近づいてきて、ベッドの上にあがる。眠くて振り返る気にもなれない。 ふとんに入りにきたのかな、噛んだりひっかかれたりしないだろうか、

    と思ったあたりで少し正気にかえる。うちに猫なんかいない。 僕が猫と暮らしていたのはもう十数年前のことだ。

    夢だったのか、あるいは久しぶりに遊びにきたのかな。

    + + +

    本当にいまさらなんだけどバレンタインネタ。

    枡野浩一のかんたん短歌blog の中でひさしぶりにグッときたのがあった。 短歌バカ言一代の中の人ので、 選ばれたのがこれ

    + + +

    ちょっと前まで重度のコード書きたい病をわずらっていたが、すこしおちついてきた。 まあ発症しているうちにもっといろいろ片付ければよかったんだけど。

    + + +

    1998年のリリース以降、世間の状況に追従出来ていないqmailは捨てるべき(オレンジニュース)

    いっそ SMTP 捨てませんか?

    mod_perl など

    mod_perl といえば cgi が速くなるやつ、くらいの認識しかなかったんだけど 全然ちがったよ。 apache モジュール相当のことを perl で書けるんだ。 正直スマンかった。これすげーじゃん。 いや、mod_python も mod_ruby もそうなんだけどさ。

    これなら、perl でプロトタイプ書いておいてあとで C で実装 するというのもアリだな。

    あと、mod_python のマニュアルが素敵すぎる。やっぱ python 方面はドキュメントが しっかりしてる印象があるなぁ。

    psql のヒストリ機能(8.1.3用)

    もう自然に使っちゃってるので気がつかなかったが、以前に書いた、 psql のヒストリ機能で 複数行の SQL を扱えるようにするパッチが自分でかなり気にいっている。 前に書いたのは 8.0.いくつか用だったので、8.1.3 用も書いておいた。

    psql_addhistory_8.1.3.patch

    しかし、このヒストリ機能以外にもごちゃごちゃいじってるうちに 何いじったかわけわかんなくなってきちゃたよ。 やっぱローカルな CVS にブランチでも切ってやったほうがよいんだろうか、、、

    以前のはこちら。

    psqlのヒストリ機能(その2)

    分散トランザクション勉強中

    PostgreSQL 8.1 の新機能の一つに二相コミットがあるわけだけど、 実際これを使ってどうこうしている例はあるんだろうか。

    どうやら jdbc ドライバは実装してるらしい。 ソースツリー内の xa というディレクトリに何やらそれっぽいものがある。 PGXAConnection.java の中で PREPARE TRANSACTION も呼んでるっぽいぞ。

    時間があったらいじってみたい。そもそも分散トランザクションに 関する基礎知識がないからなぁ。JTA とか調べてみよう。

    改善型開発

    改善型開発 〜 システムを作るのではなく育てるという発想 - kuranukiの日記

    先日、焼肉屋でボヤいたこと。

    作る側にとっての"価値"とは、納期に動くものを作りあげることだ。

    でも使う側にとっての本当の"価値"はどうだろう。そのシステムを使って、 ビジネスモデルの変更があればただちに変更できたり、 規模が大きくなったときにデータベースやハードウェアを別のものに変更できたりとか、 そういうことが本当の"価値"なんじゃないのか。

    そこがくいちがっている間は、エンジニアは寿命を削りながら ロクでもないシステムを量産し続けることになるだろう。

    で、まあシステム開発っていうのはまずお金を出すところがあるわけで、 そこに"価値"を理解してもらえないとどうしようもない。エンジニアが 「人月の神話」とか読んだって(僕はちょっと読んですぐ売っちゃったけど) あるある本にしかならない。 アジャイルだって本当は使う側に"価値"を提供するもののはずだ。

    まあその問題について僕がどうこうしようとは思っていないわけだが。 ジャンジャン作るよ!ロクでもないシステム!!(怒られそうだw)

    moreentries プラグイン

    久しぶりに blosxom をいじってみようと思ったら、なんか日本語のサイトぼこぼこ 無くなってないですか?

    とりあえず moreentries プラグインを入れた。head.html と foot.html に $moreentries::links って書くだけ。かなりやる気の無い感じですが。無いよりマシか。

    ゴチャゴチャいじってるんで、リンクメチャメチャになってますよ。

    いろいろ

    気付くの遅いが捕捉されてる

    オリンピック見た

    上京中にホテルのテレビではじめてオリンピックを見ました。 17日はスノーボードクロス、18日はカーリングなどを。 面白かったです。

    特にカーリングについては言いたいこといろいろあるけど、 だいたいみんな言われちゃっているのでリンクだけ。

    「カーリングの小林さん」って知ってる?

    PostgreSQL カンファレンス 2006

    というわけでいってきました。 東京行くので若干薄着で外に出ると、2/17 の早朝、札幌は吹雪でした。 久しぶりに心臓が止まりそうな寒さをあじわいました。

    なんか結構重要なセミナーを聞き逃した気もしますが、 その分控室側では重要なお話ができたので満足してます。 石井さんや大垣さんを通訳に使って(コラ)Bruce さんや Josh さんとも話せたし。 みんな英語すげーなー。

    とりあえず未だにクタクタです。 でもなんかいろいろ宿題持ち帰ってしまったような、、、

    mimeTeX いれてみた

    先日、id:peanutsjamjam (はてな風に書いてみた)とチャットで「オイラーの贈物」の話で盛り上がる。 まあオイラーの公式にはまるで届かないレベルで盛り上がってるんですが。 二次方程式の解の公式を導くまでを mimeTeX を使いながらトライ。記憶を頼りに書くとこんな会話(i:わたし、p:peanutsjamjam)

    i: x^2+\frac{bx}{a}+\frac{c}{a}+(\frac{b}{a})^2-(\frac{b}{a})^2
    p: おー
    p: 天下ってる天下ってる
    i: あれ?違った
    i: x^2+\frac{bx}{a}+\frac{c}{a}+(\frac{b}{2a})^2-(\frac{b}{2a})^2
    i: こうか
    (略)
    i: 平方根
    i: x+\frac{b}{2a}=\sqrt{-\frac{c}{a}+(\frac{b}{2a})^2}
    p: プラスマイナスがいるよ
    p: \pmか
    i: x+\frac{b}{2a}=\pm\sqrt{-\frac{c}{a}+(\frac{b}{2a})^2}

    こんなのを mimeTeX のサイトのフォームに張りつけながらやってたわけです。 途中で括弧の対応が合わなくなって見たこと無いような数式になりながら。 なんで MSN メッセンジャーには mimeTeX 機能が無いんだとかいいながら。あったらきっとこんな感じだろう。

    i:
    p: おー
    p: 天下ってる天下ってる
    i: あれ?違った
    i:
    i: こうか
    (略)
    i: 平方根
    i:
    p: プラスマイナスがいるよ
    p: \pmか
    i:

    すごく楽しかったわけですが、まあ伝わらないでしょう。いいです伝わらなくて。 なんつーかこのライブ感。彼に勧めた「ミルカさん」を読んでる時も、 (中の数式はまるでわからんが)、「僕」と「ミルカさん」がずんずんつき進む、 冒険物語のようなワクワク感を感じる。

    「では、最後の砦を陥落しに行こう」ミルカさんは待ちきれないように言う。
    「ミルカさんとコンボリューション」より

    PostgreSQL での文字列のエスケープ その2

    続きは codeblogでお楽しみ下さい。

    上京準備中

    東京に行ってもこれといって行きたいところが無い私。伊東屋くらいか。

    時間があったら これ でも見にいこうか。MEGASTARも見てみたいし。

    PostgreSQL での文字列のエスケープ

    addslashesによるエスケープ処理は止めましょう(yogaki's blog)

    ちなみにSQLiteを使っている場合はaddslashesでエスケープ処理はNGです。もっと根本的に間違っています。SQLiteではMS SQL Server, Sybaseと同様「'」は「''」とシングルクオートでエスケープします。

    前にもちょっと書いたんですが、PostgreSQL の将来のバージョンでは、 (SQLite 等と同様に) シングルクォート内のバックスラッシュが特別な意味を持たなくなるそうです。

    また、8.1.x から E'' という構文が追加されています。これは将来のバージョンで シングルクォート内のバックスラッシュが特別な意味を持たなくなった後でも、 E'' 構文の中のバックスラッシュは 8.1.x 以前同様特殊な文字として扱われます。

    今の PHP の pg_escape_string() の実装がどうなっているかは知りませんが、 こういったインタフェースのサポート関数は、 PQparameterStatus() で standard_conforming_strings の確認して、 (将来の変更までに)適切なエスケープ処理を行うよう変更する必要があるようです。

    なのでよろしくお願いします(誰に?)。

    cpコマンドの違い

    久しぶりに FreeBSD をさわって気がついたんだけど、cp コマンドって Linux と FreeBSD で動き違うんじゃないか?

    Linux:
    
    $ mkdir foo bar
    $ touch foo/baz.txt
    $ cp -R foo/ bar/
    $ ls bar/
    foo
    
    FreeBSD:
    
    $ mkdir foo bar
    $ touch foo/baz.txt
    $ cp -R foo/ bar/
    $ ls bar/
    baz.txt
    
    ちなみに、最後のスラッシュを取ると、、、
    $ cp -R foo bar/
    $ ls bar/
    baz.txt foo
    

    EeeeeeeeEEEE!!!

    あれ?たしかこの辺に

    俺の車があったはずなんだが、、、

    あれ?たしかこの辺に
    あれ?たしかこの辺に posted from フォト蔵

    ちょっとだけ苫小牧に帰りたくなった。

    しっかし、、、

    いったいいつまで降るんだYO!!

    もうコンビニに行く気にもなれん。

    KEY - ナチュラル ハイ

    KEY (Amazon.co.jp)

    久しぶりにアルバムを買う気になったミュージシャン。 しかも発売を待って買ったのなんて何年ぶりだろう。 好きな音楽の中には、 「俺は好きだけど(マニアックすぎて)あんま人に勧める気にはなれないな」 というのもあるけど、 彼女等の音楽は誰にでも勧められるし、もっと売れてもいいと思う。 要するにポップであり、かつグっとくるものがある。

    なので勧めてみます。お時間があれば試聴していってほしいわけですが、短いフレーズで良さが伝わる曲はどれだろう。 有名な曲は 1st single の 「LIFE」だと思う。僕も North Wave から流れてくるこの曲で彼女らを知ったし、そういう人が多いみたいだ(特に北海道では)。 あと、カップリングの「夏の夜空」も好きです。 両方とも 1st album の「色彩カルテ」にはいってます。

    今回のアルバムの中では、 シングル曲「だから、私は歌う」とても良いがこの試聴の短かさでは伝わりづらいな。 「君がくれた日」なんかドラマの主題歌になりそうな印象的な曲だな、 と思っていたら実は既にドラマの主題歌だったらしい。

    音楽を文章で勧めるのが難しいとしても、 自分の文才の無さに嫌気がさしてきたのでこの辺でやめておきます。

    試聴はこちらから → ナチュラル ハイ(公式サイト)

    保存するときに強制構文チェック

    • 2006-01-31
    • vim

    vimスクリプトとか書いてみた。(blog.xole.net)。の本編への反応ではありませんが、.vimrc のエントリと関係無い部分も晒しているようなので反応。

    noremap ; :!php -l %<CR> というのは ";" を押した時に開いているファイルの構文チェックをする、というものですが、僕は最近、もっと過激に

    au BufWritePost *.php !php -l %
    

    と書いています。:w したら強制的に構文チェック。

    久しぶりに Smarty テンプレート書いてたら、{/if} をことごとく {/fi} と書いてしまう、、、

    Web アプリケーションのセキュリティ

    こういうのを見ていると本当にイヤな気持になる。 そもそも HTTP / HTML でアプリケーションを作るということ自体がどうしようも無いほどバッドノウハウの塊なんだろうな。

    [本]オイラーの贈物

    もう 10 ページくらい読んだだけで目から鱗がゴッソリと落ちました。何に対してかは恥ずかしいから言えませんw。まー自分が無知なだけですが。文庫本なので持ち歩いてゆっくり読もう。一年後くらいにはミルカさんを楽しめるようになりたい。

    ついでに Wikipedia で調べたら、0.999...が1に等しいことの証明というエントリがありました。

    最後の、1/9 = 0.111...、8/9 = 0.888...、で 1/9 + 8/9 = 1 だからというのでまたゴッソリと。

    リモートで tarball を作成する

    リモートでtarballを作成する(よくきたblog)より。これは僕もよく使うので調べてみた。

    $ mkdir foo
    $ echo bar > foo/bar.txt
    $ tar jcf foo1.tar.bz2 foo     # 見本を作成
    $ tar jcf - foo | ssh localhost 'cat - > foo2.tar.bz2'
    ishida@localhost's password:
    $ ls -l foo*.tar.bz2
    -rw-rw-r--  1 ishida ishida   158  1月 30 01:49 foo1.tar.bz2
    -rw-rw-r--  1 ishida ishida 10240  1月 30 01:51 foo2.tar.bz2
    

    は?、、、さらに

    $ tar jcf - foo | cat - > foo3.tar.bz2
    $ ls -l foo*.tar.bz2
    -rw-rw-r--  1 ishida ishida   158  1月 30 01:49 foo1.tar.bz2
    -rw-rw-r--  1 ishida ishida 10240  1月 30 01:51 foo2.tar.bz2
    -rw-rw-r--  1 ishida ishida 10240  1月 30 01:53 foo3.tar.bz2
    

    どーん。ちなみにもっと伝統的な手法を使うと、

    $ tar cf - foo | bzip2 -c | cat - > foo4.tar.bz2
    $ ls -l foo*.tar.bz2
    -rw-rw-r--  1 ishida ishida   158  1月 30 01:49 foo1.tar.bz2
    -rw-rw-r--  1 ishida ishida 10240  1月 30 01:51 foo2.tar.bz2
    -rw-rw-r--  1 ishida ishida 10240  1月 30 01:53 foo3.tar.bz2
    -rw-rw-r--  1 ishida ishida   158  1月 30 01:56 foo4.tar.bz2
    

    ライブドアの最新情報やおすすめ情報を掲載する「livedoor アンテナ」

    ライブドアの最新情報やおすすめ情報を掲載する「livedoor アンテナ」(INTERNET Watch)って、ライブドアの最新情報ってどっちの意味でだよ!!

    これからも“想定外”な盛り上がりを魅せるlivedoor.com、引き続きご注目ください!(編集後記)って、どういう意味でだよ!!

    check*pad を試す

    メールは Gmail で読むし、ブックマークは del.icio.us と Bloglines があればいいし、だんだんブラウザだけあればことたりるようになってきた。最近はちょっとしたメモは Gmail の下書きとして保存している。やっぱどこでも使えるという意味では http は大きな利点がある。そのうちコーディングもブラウザでやるんだろうか。いっそ JavaScript で vi でも作るか。

    百式管理人さんで有名な目標管理ツール - checkpad.jpも試してみた。うーむ。でもこれはちょっと自分が欲しかった物と違うなあ。 僕のように一日中デスクでパソコンに向かっている人と、そうで無い人の求めるものって違ってくると思う。checkpad は前者の人にとっては、どうだろう。たぶんもっと強く del.icio.us にインスパイヤされたシステムでなければいけないと思うw。

    というわけで checkpad に "ToDo 管理システムを作る" と登録しておいた < 結局使ってるし。

    gccのsetjmpに対する最適化

    #include <setjmp.h>
    jmp_buf e;
    
    void throw(int i)
    {
        if (i > 1)
            longjmp(e, 1);
    }
    
    int
    main(int argc, char **argv)
    {
        int flag = 0;
    
        if (setjmp(e) == 0) {
            flag = 1;
            throw(argc);
            flag = 0;
        }
        if (flag == 1)
            printf("error\n");
        return 0;
    }
    

    こんなコードを書いた(こんなコード書くなよってのは置いといて)。要するに引数を1つでも渡すと "error" と表示するわけだ。で、make する。

    $ rm jmperr; make jmperr
    cc     jmperr.c   -o jmperr
    $ ./jmperr 
    $ ./jmperr a
    error
    $
    

    正常。しかしこれが -O2 だと、

    $ rm jmperr; CFLAGS="-O2" make jmperr
    cc -O2    jmperr.c   -o jmperr
    $ ./jmperr 
    $ ./jmperr a
    $
    

    ガーソ。gcc が "flag って絶対 0 じゃん。イラネ" と最適化してしまったようだ。

    gcc のマニュアルを見たら、-W のところに、

    非 volatile 自動変数が longjmp の呼び出しにより変えられる可能性がある。この警告は最適化コンパイルの場合にのみ可能になる。

    とのこと。volatile にしてやればいいのか。なるほど。全然思いつかなかったよ。また自分の浅さを発見してしまった。

    Web技術者必見!「仕様書に見るHTML」

    仕様書に見るHTML(The Web KANZAKI)。『WebSiteDesign』で連載されていた記事だそうです。

    恥かしながら、HTMLに関して知らないことが沢山ありました。<a name="..">って廃止されることになってるらしいですよ! あとアンカーのフラグメントに id 属性指定できるというのも知らなかった。

    現実世界では仕様に従うことがすべてではないですが、読んでおいた方が得すると思います。

    翻訳支援ツールについて

    今回、OmegaT もちょっとさわってみたのだが、そちらについて書かなかったのは OmegaT が sgml をサポートしていなかったからだ。そのことを除けばシンプルで使えるツールだと思う。

    2つの翻訳支援ツールを使ってみて、これ web アプリケーションだったらいいのになぁとちょっと思った。Ajax とか使って。オープンソースコミュニティの翻訳プロジェクトに関わるものとして翻訳支援ツールに求めるものは何だろう。

    その昔、jpug-doc(あるいは昔のpgsql-doc)で CVS を使いましょうと言い出したのは僕だ。今となってはその CVS のアクセス方法すらわからないのだが^^;;何故 CVS にしたかったかというと、当時僕は sgml のコンパイルをやっていたのだが、ML に投稿される sgml ファイルを拾うという作業が馬鹿にならないくらい手間だったからだ。 メール本文に書いてくる人もいれば添付する人もいる。圧縮されていたりそのままだったり。文字コードもばらばら。という状況にまいってしまったのだ。

    で、単に sgml ファイルを一括で取り出す方法として CVS にしましょうと言ったわけで、実際のところ翻訳に関してバージョン管理そのものがそれほど大事だとは思っていない。

    そんなわけで、こんなの Web アプリケーションがあればいいなと思うもの。

    • ファイル一覧が表示できて、翻訳状況管理(未と済だけでいい)が管理できる
    • 予約管理
    • 成果物のアップロード
    • Web 上からも修正可能。セグメント毎に分割されているといいね
    • 簡単なタグのチェック
    • コメント(誤訳の指摘)などを投稿できる
    • 定期的な sgml の自動コンパイル
    • で、翻訳メモリ機能もあったり

    Open Language Toolsを試す

    OLT と略すと猛烈に OTL に見えてきますが違います。Sun の オープンソースな翻訳支援ツールです。

    インストール:
    https://open-language-tools.dev.java.net/から、transeditor_v1_2_2_win.zip と xliff_filters_v1_2_2_win.zip をダウンロードして、それぞれ解凍 -> install.bat を実行するとインストーラが動きます。 スタートメニューに登録するようなメッセージが出たような気がしたわりにはスタートメニューに登録されていなかったり、Program Files の下に "Open_Language_Tools" と "Open Language Tools" という二つのフォルダができていたりしますが気のせいです。

    起動:
    それぞれのフォルダの中にある、filters.bat もしくは translation.bat をダブルクリックすると起動します。

    フィルタ:
    filters.bat はその名の通りフィルタです。今回は sgml ファイルを翻訳するので alter_aggregate.sgml というファイルをドラッグ & ドロップすると、同じフォルダに alter_aggregate.sgml.skl、alter_aggregate.sgml.xlf、alter_aggregate.sgml.xlz という三つのファイルが出きます。

    OLT XLIFF Filters
    OLT XLIFF Filters posted from フォト蔵

    翻訳:
    translation.bat の方を起動するとまず "Translator ID" を聞かれるので何か打っておいて下さい。次に新しいプロジェクトを作成します。"Target Language" には当然 "Japanese" を選びましょう。 OLT::New Project
    OLT::New Project posted from フォト蔵

    さあいよいよ翻訳です。メニューの [File] - [Open] で、先ほど filters.bat で生成された alter_aggregate.sgml.xlz を開きましょう。

    ウィンドウは左右にわかれ、右側でガシガシ翻訳をしていきます。文章はセグメント毎に分割され、Ctrl + 上下キーでフォーカスを移動できます。また、sgml タグは編集できないようになっています。

    OLT::Translation
    OLT::Translation posted from フォト蔵

    1つのセグメントの翻訳を終えたら、メニューから "Confirm And Translate Next" を選択することで、そのセグメントを翻訳済みとマークして次の未訳セグメントに移動します。これは Alt + = というショートカットがあるのですが日本語キーボードだと押せませんねぇ。かわりに Alt + 1 (Mark Segment As Translateed) でマークして フォーカスは自分で移動しましょうか。

    別のファイル:
    さて途中まで alter_aggregate.sgml を訳したところで、次に alter_conversion.sgml を開いてみます。すると "100% matches were found in MiniTM from some of the untranslated segments in this file. Would you like to automatically translate these segments?" と聞いてきます。ありがたいので Yes を選択します。 このように以前全く同じセグメントを翻訳した場合は、自動的に置換してくれます。この時右側のウィンドウのセグメントのステータスは 100 と表示されます。

    気が向いたら続きを書きます。

    翻訳支援ツール

    オープンソースによる翻訳支援ツール(可知さんのblog)。その後のいくつかののエントリも興味深い。 オープンソース::translation

    翻訳メモリとは、翻訳された文書をデータベースに持っておいて、似た文が出てきたときに補完したりする翻訳支援ツールらしい。ははぁ。なるほど。こういう世界もあるわけか。

    今度 OmegaT あたりをいじってみるか。

    PL/pgsql Server Page

    以前考えていたものがなんとなく形になりつつある。要するに、

    foo.pgsp
    <% for i in 1..10 loop %>
    <%= i %> hello <br>
    <% end loop; %>
    

    というファイルを作ってブラウザでそこにアクセスすると、

    create or replace function foo() returns text as $$
    declare
      res text := '';
    begin
     for i in 1..10 loop 
    res := res ||  i ;
    res := res || 'hello <br>\n';
     end loop; 
     return res;
    end;$$
     language 'plpgsql'
    

    という関数を作ってそれを実行した結果を返してくれるわけだ。GETパラメータなんかは以下のように指定しておくと、そのまま関数の引数になる(この辺のparserがまだやたらと適当なわけだが)。

    foo.pgsp
    <%@ parameter="p1" type="int" %>
    ...
    定義される関数
    create or replace function foo(int) returns text as $$
    declare
      res text := '';
      p1 alias for $1;
    ...
    

    まあ作ってる本人がOracleのmod_plsqlを使ったことが無いので大分違うものになってしまった気もする。

    日本物理学会「ニセ科学」シンポジウム

    もうこの話題、反応した時点で負けかなという気もしますが。

    日本物理学会「ニセ科学」シンポジウム(slashdot.jp)

    オカルト叩きというよりも、科学の仮面をかぶり一般社会に「科学」として認知されている事象を研究するということのようだ。その一例で提案主旨に「水に優しい言葉を かけると美しい結晶ができる」とする小学校の道徳教育の現場で使われるという事態が挙げられている。

    これを見たときあまりに衝撃的な内容だったので、それって比喩的な意味合いでいってるのをニセ科学だと揚げ足取りしてるんじゃないの?という元ネタ養護的思想が最初は頭をよぎった。

    でも、元ネタと思われる本のレビューを見たり、mixiのコミュを見てそういうわけではないということがわかってきたら、だんだん気分が悪くなってきた。僕がこの本を読むことはきっと無いだろうけど、これをニセ科学と分類することにすら腹が立つ。これがニセ科学なら「ミイラには15℃の体温があり、死んでいれば0℃になるはずであり、従ってミイラは生きている」(wikipedia)だってニセ科学だ。

    なんか琵琶湖の水を言葉で綺麗にしようとしてるし、、、

    何でこんなもの信じることができるのか、あるいは、これを信じることができる人と僕との間にあるものは何なのか、何でこういうのを見ると僕はこんなに気分が悪くなるのか。

    「科学的根拠が無い」とか「いやそれでは夢が無さすぎる」とかいう軸で議論されがちだけど、それより「夢がありすぎる」ことが気持ち悪い。「愛」とか「感謝」とか中身の無い耳あたりのいいこといって救われた気になってんじゃねーよ。 どうも僕は、こういううすっぺらさに過敏に反応してしまう傾向があるのかもしれない。あと生涯「人生観がかわった」という言葉だけは口にしたくないと思っている。

    愛とか感謝よりも、今日一日なにをできたかの方が僕にとっては重要だ。明日は洗濯をしよう。

    参考リンク:ハリケーン「ウィルマ」についての江本勝からの緊急メッセージ

    Home

    Search
    Feeds
    Profile
    石田@苫小牧市と名乗りつつ札幌の某社に勤務するプログラマ
    書いた本
    Links

    Page Top