D-7 <altijd in beweging>

Day to day life of a Perl/Go/C/C++/whatever hacker. May include anything from tech, food, and family.

2006年11月


祖父が危ない状態らしいので、しばらく連絡が取れなくなるかもしれません。


大分情報が錯綜してるので「何事もなかった、あはは」で終わる事を祈る・・・



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr


ビールを飲みたい時に飲めないなんて!


21くらいの時、当時つきあってた彼女もご多分にもれず結構酒飲みなおねーさんだったのだが、つきあい初めて数ヶ月で俺はなんだかしらんけど結核だかなんだかの病原菌持ちと言われて半年間薬を飲み続ける事になったのだが、その代償が「薬を飲んでる期間は酒ものんではいけない」だった事を思い出した。目の前で彼女がうまそうにビールを飲む間俺はダイエットコーク。辛かったなぁ・・・



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr



http://5net.com/blog/2006/08/dbic_mysql_utf8.html



はまっておりました。助かった!



sub connection {
my $class = shift;
my $schema = $class->SUPER::connection(@_);
$schema->storage->dbh->do("SET name utf8");
$schema->storage->on_connect_do("SET name utf8");

...
}


としてみたですよ。



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr


ちょっと真面目に胃潰瘍なのではないかと心配中。まだあまり調査してないのだが、恒常的に痛みがあるわけではなく、なにかの表紙に激痛が胃に走る。昨日は油断して芋焼酎をおちょこ一杯程度やってみたら死ぬかと思った。というわけで、これからしばらくは油っこいものとかをなるたけ避けて食べて行こうと思うのだが、あとは具体的に何をすればいいのだ。禁酒は無しな。量は減らすけど。



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr


これだけコンピューターに触れていながらマルチメディア系の事ってようわからん。Macで保存してあるmpgを普通のDVDプレイヤーで再生できるように焼くためには何を使えばいいんでしょうか・・・。なんかぐぐってもよう分からん単語が飛んでおる。



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr


歴史物、戦記物ファンとして、この作品は楽しい。一気に漫画4冊を読み終えてしまった。これはたまらんと思って原作を探してみたら、まだ未完なのね・・・。この後どうするのだろう・・・。amazonを見る限り、最初の一冊が1998年、9冊目が2005年2月に出ているのだが、その後何もなし。うーーーむ。銀英伝のようにすぱっとおいしいところで完結してくれると嬉しいのだがなぁ。


ちなみに、伊藤悠氏の漫画を読んだ後で原作の表紙を見ると、ちょっといただけない。



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr


とあるプロジェクトで全文検索できるようにLudiaを入れてみた。インストールは普通に:



tar -xvzf ludia-0.8.0.tar.gz
cd ludia-0.8.0
./configure \
--with-senna-cfg=/usr/local/bin/senna-cfg
--with-pg-config=/usr/local/pgsql/bin/pg_config
make
sudo make install
/usr/local/pgsql/bin/psql -U postgres mydb -f pgsenna2.sql


なんでかしらんけどinstall-shに実行ビットが立ってなくてmake installの前にchmod u+x install-shする必要があった。あとはインデックスを作るだけ。



CREATE INDEX table_field1_senna_idx ON table USING fulltextb (field1);
CREATE INDEX table_field2_senna_idx ON table USING fulltextb (field2);
...


マルチカラムインデックスを使えないのが痛いのだが、とりあえずDBIx::Classで吸収する。



my $query = "hoge";
my @where;
foreach my $field qw(field1 field2 field3 field4) {
push @where, { $field => { '@@' => $query } };
}
my $rs = $schema->resultset('Hoge')->search(\@where, \%attrs);


これでとりあえず全文検索できる感じ。



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr


結構丁寧にタマネギを煮て、その出汁を軽く煮た鶏肉と合わせて、卵をぼーん。いやぁ、うまい。鶏肉の切り方を少し研究したほうがいいな。



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr


予定がキャンセルになったので残ってたスパムで炒め物。キャベツを炒めたのでちょっとだけ味噌を入れてみた。うまい。キャベツばりばり。そういえば昨日腹の調子が悪かったんだ。おいしくご飯食べれるって幸せだなぁ。



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr


この腹の痛みは酒を飲むな、ということらしい。いてぇぇ



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr


なんかしらんけど昨日一年ぶりにマック食ってから腹の調子が悪い。今日スタッフと飯食っててなかなか箸が進まないくらい


でもとりあえずおさまったのでバー。駄目人間まっしぐら


今日の発見:ラムカウはシナモンリキュールを足すとうまい



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr


id:miyagawaさんと弾さんからツッコミが入ってしまったw。ひょっとしたら間違えてたかもしれない。ごめんなさい、10月中は朦朧としてました。cp932も試してみたはずなんだけどなぁ。


ってことで以下スクリプトでテスト



use strict;
use Encode;

binmode(STDOUT, 'utf8');
foreach my $low (map { sprintf('%2x', $_) } 64..156) {
my $sjis = eval "qq|\\x87\\x$low|";
print "\\x87\\x$low -> ", decode('cp932', $sjis), "\n";
}


おお、動くじゃねぇか。どこの何が問題だったんだろう。Perlは5.8.8、Encodeは2.18っす。ってことで、ShiftJIS::CP932::MapUTFはそれでも駄目な状況の時に



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr


8月から10月までの作業報告書を作成しているのだが、10月の分がもうまるでパズルだ。頭が朦朧としていた上、たよりにしているsubversionのコミットログが諸事情でマトモにsubversionにコミットできてなかったので時間がわかりにくいったらありゃしない。日記もなんとか役に立ってるが、2日続けて徹夜した日は1日しか日記つけてなかったりするし・・・難しい。



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr


SVKのログから作業ログ作らなくちゃいけないので、とりあえず初期状態をCSVダンプできるツール書いた。使い方はこんな感じ:



svk log | perl svk_to_csv.pl





#!/usr/local/bin/perl
use strict;
use Text::CSV_XS;
use IO::Handle;

my $csv = Text::CSV_XS->new({binary => 1});
my $io = \*STDOUT;
while (<>) {
if (/^r(\d+)\s+\([^\)]+\):\s+(\w+)\s+\|\s+(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} \+\d{4})/) {
my ($revision, $author, $date) = ($1, $2, $3);
# empty line follows
<>;
# read lines until we match a bunch of "-"
my $message = '';
while (<>) {
last if /^-+$/;
$message .= $_;
}
$message =~ s/^\s+//;
$message =~ s/\s+$//;
$csv->print($io, [$revision, $author, $date, $message]);
$io->print("\n");
}
}



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr



邪魅の雫

邪魅の雫







デスマ突入前に買ったのだけれども、足掛け1ヶ月半くらいでようやく読了。陰摩羅鬼の瑕よりよかったが、京極堂と榎木津がでてこないとなかなかなぁ。



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr


牡蠣がうまそうだったので購入。本当は黒酢炒めを作りたかったのだが、黒酢は生憎ないのでお酢、酒、醤油、砂糖でそれらしき味に整えて、ネギ、人参、エリンギで炒めてみた。ご飯も炊いてうまうま。



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr


Module::Installベースで書いてみたぜ。





#!perl
# $Id$
#
# Copyright (c) 2006 Daisuke Maki <daisuke@endeworks.jp>
# All rights reserved.

use strict;
use inc::Module::Install;

name("EWBaseSystem");
all_from("lib/EWBaseSystem.pm");

requires("ExtUtils::CBuilder");

# Check for a compiler
my $have_compiler = 0;
{
require ExtUtils::CBuilder;
my $cb = ExtUtils::CBuilder->new(quiet => 1);
$have_compiler = $cb->have_compiler;
}

requires("perl", 5.008);

requires("DateTime");
requires("PerlIO::eol");

if ($have_compiler) {
recommends("YAML::Syck");
} else {
recommends("YAML");
}

features(
'DBIx::Class Support' => [
-default => 0,
recommends("DBIx::Class"),
recommends("DBIx::Class::Schema"),
recommends("DBIx::Class::Schema::Loader"),
recommends("DBIx::Class::UTF8Columns")
],
'Catalyst' => [
-default => 0,
recommends("Catalyst::Runtime"),
recommends("Catalyst::Devel"),
recommends("Catalyst::View::TT"),
recommends("Data::FormValidator"),
recommends("Catalyst::Plugin::FillInForm"),
],
'Catalyst Session Support' => [
-default => 0,
recommends("Catalyst::Plugin::Session"),
recommends("Catalyst::Plugin::Session::Store::FastMmap"),
recommends("Catalyst::Plugin::Session::State::Cookie"),
],
'Postgres Support' => [
-default => 0,
recommends("DBD::Pg"),
recommends("DateTime::Format::Pg"),
],
'ShiftJIS Support' => [
-default => 0,
recommends("ShiftJIS::CP932::MapUTF"),
],
'XML Support' => [
-default => 0,
recommends("XML::LibXML"),
]
);

auto_include;
auto_install;

WriteAll;



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr



http://steve.yegge.googlepages.com/singleton-considered-stupid



日本ではGang Of Fourの本は有名でないかもしれんけど、このジレンマはアメリカの大学でコンピューターを学んで、実際の業務でぶつかる問題そのままだね。



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr


これも同じく今回の一連の仕事で手に入れた知識。どっかのクソソフトは吐き出すファイルの改行コードが全部"\r"だったりするので、これをどーにか扱えんのかと思って探すと、きたよ、Audreyたん。



use strict;

open(FILE, $ARGV[0]);
binmode(FILE, ":raw:eol(LF)");
while (<FILE>) {
print;
}


これいいね。ファイルの改行コードがCR、LF、CRLFのどれでもeol(X)で指定したXの値に統一してくれる。



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr


さて、今回の一連の仕事で手に入れた知識:ShiftJISのファイルを読み込んでUnicodeにdecodeする時にEncodeを使ってはいけない。だが、Encodeが悪い訳ではない。悪いのは機種依存文字である。もうとにかくバケバケになるのである。



#!/usr/local/bin/perl
use strict;
use Encode;

while (<>) {
print decode('sjis', $_); # バケラッタ
}


最初はこれが機種依存文字だと気づかずにこんな感じで色々やってみてたのだが



#!/usr/local/bin/perl
use strict;

binmode(STDIN, ':encoding(sjis)');
while (<>) {
print; # バケラッタ
}


ほとほと困り果てて、ようやく行き着いたのがShiftJIS::CP932::MapUTF。



#!/usr/local/bin/perl
use strict;
use ShiftJIS::CP932::MapUTF;

while (<>) {
print cp932_to_unicode($_);
}


貞廣さんありがとうっっっ!これにいきつかなかったらもう後は自分でマッピング作って変換するか、ってところでしたよ。



    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

このページのトップヘ