某Nのキックオフパーティーだかなんだかに潜入。偉い人と名刺交換したりしてすごい口頭ベースで仕事もらえそうな話に。うほほー。
家に帰ってきて爪切りばりばり。
某Nのキックオフパーティーだかなんだかに潜入。偉い人と名刺交換したりしてすごい口頭ベースで仕事もらえそうな話に。うほほー。
家に帰ってきて爪切りばりばり。
どうもここのところ日記才人の調子が悪いのに俺があまりマトモにメンテしてないので色々な問題が起きている。これはそろそろhttp://www.nikki-site.com:3000でこっそり稼働しているバージョンに無理矢理変えちゃって、あとはおいおい作業していこう、みたいな気になってきているんだが、どうだろうかなぁ。
現行のヤツって、AxKitでフロントを作ったのはいいものの、データベースの設計とかがすげーCGI当時のままなので正直いけてない。新しいヤツもだいたい作ったつもりなんだが、どこまでやったかなぁ。忘れちゃったですよ。まずRTをインストールして、そこと合わせてやるかな?
さー、区役所行って印鑑登録しないと。しかしなんで印鑑登録は全国区じゃないんだ。引っ越しする度に登録し直すなんてナンセンスだよ。
朝7時半に起きまして、そのまま寝転がりながらコード書き。DBIx::Classを使ってみて、早速DBIx::Class::Plugin::DateTimeを作ろうかと思ったんだけど、ドキュメント少な!結局search.cpan.orgでgrepしまくって、どうやらDBIx::Class::InflateColumnが怪しいというのがわかって、とりあえずMySQLで軽く書いてみる:
package DBIx::Class::Plugin::DateTime::MySQL;
use strict;
use DateTime::Format::MySQL;sub inflate_mysql_datetime { DateTime::Format::MySQL->parse_datetime(shift) }
sub deflate_mysql_datetime { DateTime::Format::MySQL->format_datetime(shift) }
sub has_datetime
{
my $class = shift;
my $column = shift;$class->inflate_column($column, {
inflate => \&inflate_mysql_datetime,
deflate => \&deflate_mysql_datetime
});
}
でまぁ、問題はこれをどう使うのかーって事かな。DBIx::Class的にはなんとなーくMixIn的なアプローチではなく、継承を使うような気がするんだけど・・・ってことは
use DBIx::Class::Loader;DBIx::Class::Loader->new(
dsn => 'dbi:mysql:....',
user => '...',
password => '...',
additional_base_classes => [ qw(DBIx::Class::Plugin::DateTime::MySQL) ]
);
って感じかな。でもどうせなら自動的にデータベースのタイプによって使用するクラスを判別して欲しいかな。ってことで、ベースクラスに・・・とか色々書いてたらなんかコードが多くなってきたのでこりゃー、とっとと全部書いてCPANリリースしちゃおうかな。まずCDB::Plugin::DateTimeを再実装しようっと。
DBIx::ClassとDBIx::Role見ようっと。
鶴田真由キタ━━━━(°∀°)━━━━ッ!!美し過ぎる。
http://www.perlmonks.org/index.pl?node=Can%20I%20please%20have%20%2Asimple%2A%20modules%3F
bundleしてローカルディレクトリにインストールってのは自分的に盲点だった。
miyagawa氏に教えてもらったのだが、PerlハッカーのBrian Ingersonが名前をIngy dot Netに変えたらしい
http://blog.ingy.net/2005/11/the_ingy_formerly_known_as_bri.html
すげー。お茶目なのかエスプリが効いてるのか、はたまた馬鹿なのかよくわからんが、ともかくパイオニアであるのは正しいと思うw
ちょっと久しぶりに餃子を作った。餃子の種はキャベツ、ニラ、生姜だけ。あとは醤油、酒、塩胡椒、胡麻油、味噌で味付けしてそれをちょっと厚めのもちもちの皮で包む、包む、包む。とは言っても20個ほどのみ。
これを用意しつつ鶏ガラでスープを作成。こっちは化学調味料とかの入った出汁とかは使わず、あくまで鶏ガラのみ!これにレタスと生姜を入れてあっさりとレタススープ。
まずは水餃子を普通に茹でただけのを酢醤油+辣油で普通に。これがうまーーーー!うまい、あまりにもうまいのですぐにスープ餃子に移行。同じく茹でて、さきほどのスープに入れて、ネギをちらして。これまたうまーーーー!!っていうか、うますぎ。食べながらハナコさんと二人で我々は天才だと自画自賛。
あと鶏の唐揚げを作ってもらった。これまたうまーーーー。カリカリジューシー♪
本当の罪とは知らないという自分を認められない事である。
技術というのは長年の、幾多数の人達の努力を積み上げてきたものだと俺は思うので、若い/経験の浅い人が「効率のいい」「正しい」やり方を知らないというのは全く問題ない。敢えてことさらのように書くが、!!全く!!問題ない。
だけど、知らないまま間違った方向に突っ走るのは罪だ。問題に直面した時、ある場面までは自分の力でゴリ押ししてみようと思うのはしょうがない事だが、どこかで「これはひょっとしたら正しいやりかたではないのではないか」「ひょっとして自分の知らないやり方があるんではないか」と思うべきである。希にそういう状況を完全な独創で打破できる人もいるが、そういう人は多分自分のやってる事にことさら疑念など抱かないはずなので自分で打破できるとすでに確信しているはずなので特に迷う事はないだろう。
問題は自信も根拠もないのに、だれにも質問もせずそのまま突っ走って迷路の奥深くに入ってしまうヤツだ。知らないのは罪じゃない。だけど自分でできないと思ったらすぐ聞け!聞かずに迷宮の奥まで行ってしまったら引き返せない。いや、引き返せるけど、その時は周りのみーーーーーーーんなを巻き込んで迷惑をかけてるのだ。
他人に頼りすぎるのも問題だが、黙ってりゃ自分だけで解決できるかどうかくらいは把握してほしいもんだ。わからないと認めるのはそんなに恥ずかしい事か?
最近、猫も杓子もCatalystであるようだ。今日もリンクを辿って行ったら突然Catalystのページにぶちあたった。びっくりっていうか、なんかもう食傷気味だなぁ。Catalystは一応試した。確かにキレイにフレームワークができてて、色々できるしいいと思うよ。思うけど、なんだろう。なんか気に入らんのだよなぁ。
もちろん、新技術の温床としてとても注目すべきモジュールではあるので(id:naoyaさんとかがチェック/解析してくれてるあたり)ウォッチは継続していくべきだと思うんだけど、なんだろうなぁ。なんか、そこまで画期的というか革新的ではないよーな・・・
まぁいいのです。HTML::Mason使いの僻みかもしれませぬ。
「The Divine Commedy」は高校時代の先生、故Galvao先生が常に薦めてきてたのでよく覚えているが、邦題の「神曲」がどうしても思いだせない。
自分はほぼ全てのWeb系のプロジェクトをmod_perlで行っているわけですが、これを毎回サーバーにログインして作業するわけには行かない時が結構ある。特に毎日あちこちに移動している自分としては常に快適に作業が出来る程の高速回線があるとは限らないので、最近は特にローカルマシンで作業をしたい事が多い。
http://localhost/project1/
http://localhost/project2/
http://localhost/project3/
みたいな感じでアクセスできるようにしたいのだけど、ここで問題は実際の稼働環境とホスト名やらパスやらが違う事。これを吸収するためにはまずApacheの管理から考え始める:httpd.confに直接ガリガリ書き込む人も多いのだけれども、スムーズな開発→本番への移行を考えるなら折角存在するIncludeディレクティブを使用しない手はない
[httpd.conf]
...
Include /path/to/project1/misc/httpd.conf
本番マシンでは以上のように設定する事によって、ローカルのマシンではこのInclude行を繰り返せば設定できるようになる。
Include /path/to/project1/misc/httpd.conf
Include /path/to/project2/misc/httpd.conf
Include /path/to/project3/misc/httpd.conf
さて、今度はそれぞれのプロジェクト。問題は本番環境では
http://project1.mydomain.com/hoge.html
とアクセスするところを
http://localhost/project1/hoge.html
に行くようにする。このためにはmod_rewriteを使わないといけないが、そのためにはさらに*他のプロジェクトの邪魔にならないように*URLの書き換えを行わないといけない。
RewriteEngine On
RewriteRule ^/project1/(.*)$ /path/to/project1/htdocs/$1 [L]
そうしておいて
PerlRequire /path/to/project1/misc/startup.pl
<Directory /path/to/project1/htdocs>
SetHandler perl-script
</Directory>
みたいな感じで設定しておく。この時点ですでにベタ打ちの設定箇所があちこちにあるのですでに本番サーバーになかなか移行できなさそうな匂いがぷんぷんするのでパス名とかを後で代入できるようにする(ここでText::Template等を使ってもいいのだが、この程度のテンプレーティングで依存関係を増やすのもアレなので手動で)
RewriteEngine On
RewriteRule ^%ProjectPrefix%/(.*) %ProjectHome%/$1 [L]
PerlRequire %ProjectHome%/misc/startup.pl
<Directory %ProjectHome%/htdocs>
SetHandler perl-script
</Directory>
こんな感じにしておいて、httpd.conf.inに保存。ローカルマシンでは%ProjectPrefix% = '/project1'、本番では%ProjectPrefix% = ''等になるように置換してhttpd.confに書き込む簡単なスクリプトを書いておけば開発と本番環境を比較的簡単に切り替えられる。
俺はこの手法をstartup.plにも適用して、@INCパスやらその他設定項目を変えてやってみた。以上半分くらいメモ代わりに。
寝込んでるハナコさんのところに行ってキャベツ、ニンジン、ベーコンのスープと鶏肉を焼いたもの、それに全然炒り豆腐じゃない炒り豆腐を作った。あとはテレビ見たり漫画読んだりしながらダラダラ。しかし劇的ビフォーアフターはリフォーム(というか、立て直し)の後住人がどうなったのか、是非フォローアップをしていただきたい。
実家に行ったら、祖父から我が家の皆に「これ読めるか」という事で新聞の切り抜きが回ってきていた(読売新聞か?)
(01)辛辣 (02)九十九折(03)栄枯盛衰(04)欠伸 (05)玉蜀黍
(06)脊椎 (07)海鼠 (08)躾 (09)篆刻 (10)紫檀
(11)大綱 (12)辟易 (13)鍼灸 (14)吏員 (15)隠然
(16)安閑 (17)綺羅 (18)土竜 (19)杜撰 (20)静謐
(21)押印 (22)灰汁 (23)強面 (24)封緘 (25)山車
(26)鯱 (27)法網 (28)隷書 (29)薪 (30)藁
(31)畦道 (32)御用達 (33)造詣 (34)時化 (35)独活
半分くらいしか読めなかったよ・・・。以下自分がわかった分
(01)しんらつ(02)九十九折(03)えいこせいすい(04)あくび(05)玉蜀黍
(06)せきつい(07)海鼠 (08)しつけ (09)篆刻 (10)紫檀
(11)大綱 (12)へきえき(13)しんきゅう (14)りいん(15)いんぜん
(16)あんかん(17)綺羅 (18)もぐら (19)杜撰 (20)せいいつ
(21)おういん(22)あく (23)こわもて (24)封緘 (25)だし
(26)鯱 (27)法網 (28)隷書 (29)まき (30)わら
(31)あぜみち(32)ごようたし(33)ぞうけい (34)しけ (35)うど
とりわけ「とうもろこし」「ずさん」が分からなかったのは自分的にちょっと悲しい。
昨日は某社の某D氏とかとともに某社に某案件についての説明を某と一緒に通訳しにいった。六本木にある某ビルより某所の某社のビルのほうが某某としてていい感じだったような気がした。もっとも基本的に通訳自体は某のほうが全然うまいのでほとんどまかせっきり。某所に話が差し掛かった所で某D氏にちょっと訂正を加えた程度で、ほとんどやってもらっちゃった。
その後某社の某諸君と飯。うまかったけど、接待以外には絶対にいかないと思う・・・
いやぁ、分かりやすい日記だなぁ。わはは
あとは役所に行ったり、お金を数えたり、新宿まで行って書類を買ってきたり。移動と話ばっかで実務があんまり進まないのがちょっとストレスだけど、さっきid:higepon氏とやりとりしたりしてバグツブシができたと思うのですこーし気が晴れた。
アップルのiMac G5欲しい!
これって、はてなで懸賞やってるのしらなかったら全然わけわからないエントリーだよな。
今さっきアップロードしました(そのうちCPANにのるでしょう)
http://search.cpan.org/~dmaki/Class-DBI-Plugin-DateTime-0.01/
いままで自前で毎回書いてたのに嫌気がさしたのでモジュールにしてみたわけです。モジュールにしてしまえば
package My::Data::Foo;
use base qw(Class::DBI);
use Class::DBI::Plugin::DateTime::Pg;__PACKAGE__->columns(All => qw(id a_timestamp));
__PACKAGE__->has_timestamp('a_timestamp');
とかしておけば後で
my $obj = My::Data::Foo->retrieve($key);
my $dt = $obj->a_timestamp();
print $dt->ymd, "\n";
とかできるのですよ。MySQLでもできるぞー。うっほほ。
どうもおいらが風邪をうつしてしまったらしいので看病に行きたいのだけど(俺の風邪はだいたい治ってきた)、今日も夜まで打ち合わせあるよ・・・ううううう。
・・・風邪なわけですが、今日はサンクスの野菜たっぷりコンソメスープ食べてとりあえず栄養補給。ザッフーンもそういえば届いた。まだあんまり音でません。昨日からPerlモジュールを三つ程少々手直ししてアップロードした。オヤジにちょっとだけあって、プロポリスをもらった。
これから打ち合わせ。ばたばたばたばた。あ~、鼻水。
sennaがrev 57 (0.3.0)でちょっとAPIが変わったりしたので、それに合わせてPerlのほうも0.10をリリースしたですよ。
この間練り胡麻を買ってきたので、消費推進のために食パンに砂糖と一緒につけてぱくぱく。ウマー。練り胡麻ってピーナッツバターと同じように使えるんだなー。うまうま。
ホットレモン+生姜を飲みながらぱくぱく。
某案件で写真がフェードインするような仕掛けにしてみた。
new Effect.Appear($(photo));
え、これだけ?なんとまぁ、簡単にエフェクトをかけられるようになったもんだ。先人達に感謝感謝。
Gさんと飯を食ってたらぼそりと「rev 96の先はやくコミットしてくださいよ」みたいな事言われたの超少量修正してコミットした。
大学時代はものすごくよく使ってたけど、最近使ってなかったのでいざ使おうと思ったら固まってしまった、ソースコードをプリントした時に読みやすくするツールの使い方。また忘れそうなので今のウチにメモっておく:
enscript -2CGr -p output.ps source.c
ついでにOS X上ではこれに
ps2pdf output.ps
ってかけておくと便利。いやあ、enscriptって名前さえ思いだせなくて手間取ったわ・・・
お金の事で色々と聞いてきた。
検査項目11個のうち、Aが10個、Cが1個で超健康体~。「徐々に減量に心がけてください」だけでしたよ。わはは。まぁこれは来るのが分かってたけど、血液検査で何もでなかったのがなにより。 やっぱりハイキングとかしてるし何より(体形から思われるのとは正反対な)健康な食生活送ってるからなー。あとは量か・・・
週末は大豆ざんまいだった。白和え(正しいバージョンを作ってもらった)、鶏とおからの団子入り白菜スープ、牡蠣の味噌鍋とか、とにかくほぼ全てに大豆製品入り。豆腐も週末だけで4丁近くも消費。それの反動か、今度は肉が食べたくてしょうがない。
そんなわけで今日は初ペッパーランチ(週末の終わりになって「肉、肉!」とか言ってたら「ペッパーランチでも行けば」と言われたので)。なんか色々御託を並べてるけど、ガストかなんかで食うのとたいして変わらん味。まぁこれはこれでいいけど、800円くらい取られたら違うもん食べに行きたいなぁ。定食とか。
日本の金融系のWebサービスがダサ過ぎる。某証券会社や某銀行系カード会社のインターフェースのださい事ださい事。昔アメリカにいた時に某銀行で統一、洗練されてたあの画面が懐かしいよ・・・
ユーザビリティを考えたサイト設計ってのをしないのかね。金融系なんて特にカスタマーサービスを重用視してるんだからさ・・・
気がつけばずびずばとはな垂れで風邪を引いてしまっているわし。今日からオヤジさん帰省中なんだが・・・む~ん。なんか喉痛いし。今日は家にひきこもるかなぁ・・・(予定があれこれ入ってるのでそういうわけにもいかんのだが)
しもた。ついつい頑張ってrubyなんかいじり始めたらこんな時間だ。ruby、見よう見まねで適当にやってみたけど意外と書けるもんだ。
ちなみにrubyって「;」ないのな。なんか妙な感じ・・・
金沢文庫でハイキング。なんの予備知識もなしにいったのだけど、行ったら公園のようなところの中、半分山登りのような感じになってた。しかも今朝の雨でぬかるみ、道はぐちょぐちょ。歩き難いったらありゃしない。そんなわけで最近タウンウォークばっかりだった我々としてはちと辛さを感じたりしたのだが、無事2時間半くらいでゴール。
最後にコーヒーが飲みたくて飲む所を探したのだけど、入ろうと思った喫茶店はちゃんと営業中の看板が出てて、しかも中に人が入っているのに断られた。感じわるい。今度あのエリアにいっても絶対行ってやらん。多分ここだと思う。
その後もコーヒーにめぐりあえず。目下のところ考えなくてはいけなのはおからを使った料理を何作るかなー、というところ。この間買ってきたおからが大量にあるのだ。
国際電話会議。なんか突然今日の昼頃から喉が痛い。自転車でちゃりちゃり。
ザッフーンの代金払ってなかった・・・。なのでちょっと振込に行ってきますヨ。ついでにオフィスにおきっぱなしの自転車とってくるかな。
昨日買ってあった油揚げにメカブと豆腐を足してちょと味付け。そこに最後に胡麻油をちろーっと入れて、うまー。あとはご飯と卵食べようかなー。
動的SQLって作成をほとんどしなくなったなぁ、とちょっと思ってみた。昔はこんな感じでよく書いてたよなぁ:
my $cgi = CGI->new;
my $sql = "SELECT ... FROM ... WHERE ... ";
if ($cgi->param('hoge')) {
$sql .= " AND hoge = " . $cgi->param('hoge');
}
もちろんこれはものすごい悪い例なのだけで絶対にいい子は真似しないようにね☆。小難しいSQLはだいたいClass::DBI系統の操作で抽象化されるか、もしくは自分でstored procedureを書いてしまうのでほとんどPerlレベルでのSQLの生成でしない。
まぁ、ちょっととりとめもなく。
体重計と毛布を買いましたよ。最近夜寒くなってきたので毛布はそろそろ欲しいなと思ってたのです。それと体重計はないとちょっとやばいかなと思って・・・
この間買った江戸のおかず帖をベースに白和えを作ってみた。すごいさっぱりしてておいしいのだけど、な~~~~んか違うな。俺の理想は鶴見の西友の中の豆腐屋で売ってるヤツに野菜を増やしたものなんだけど・・・なんかひと味たらん。この江戸のおかず帖は白味噌くらいでしか味を付けてないのだが、多分なんか他の味が必要なんだろうなぁ。とりあえず砂糖とかは足してみたんだが、なんか違う・・・
多分なんらかしらの形でsennaのディストリビューションに入れてもらおうとは思ってるんだけど、とりあえず公開しておくですよ。なるたけモジュール使わないようにするのが大変。一応誰でも持ってそうなヤツだけ使ってやってみた。
パッチ歓迎。
#!perl
use strict;
BEGIN {
eval <<' EOM';
use Cwd;
use File::Spec;
use Getopt::Long;
use LWP::UserAgent();
EOM
if ($@) {
print STDERR <<" EOM";
Failed to load necessary Perl module to build mte-enabled libmecab.
(Most likely you do not have the necessary modules. You're going to
have to install them)
The error was:
$@
EOM
exit 1;
}
}
use constant DEFAULT_MECAB_URI =>
"http://chasen.org/~taku/software/mecab/src/mecab-0.81.tar.gz";
use constant DEFAULT_MECAB_PATCH_URI =>
"http://dev.razil.jp/archive/mecab-0.81.mte.patch.20050423";
use constant DEFAULT_IPADIC_URI =>
"http://chasen.naist.jp/stable/ipadic/ipadic-2.5.1.tar.gz";
sub main
{
my %opts;
my %optspec = (
'mecab-uri|mecab_uri=s', # location of mecab
'mecab-pacth-uri|mecab_patch=s',
'mecab-configure-args|mecab_configure_args=s',
'ipadic-uri|ipadic_uri=s'
);
GetOptions(\%opts, %optspec);
$opts{mecab_uri} ||= DEFAULT_MECAB_URI;
$opts{patch_uri} ||= DEFAULT_MECAB_PATCH_URI;
$opts{ipadic_uri} ||= DEFAULT_IPADIC_URI;
$opts{root_dir} = File::Spec->tmpdir;
my @path = split(/:/, $ENV{PATH});
$opts{tar_cmd} = find_cmd('tar', @path);
$opts{gunzip_cmd} = find_cmd('gunzip', @path);
$opts{patch_cmd} = find_cmd('patch', @path);
$opts{rm_cmd} = find_cmd('rm', @path);
my $ua = LWP::UserAgent->new;
my $mecab = dl_temp($ua, $opts{mecab_uri}, %opts);
my $patch = dl_temp($ua, $opts{patch_uri}, %opts);
my $ipadic = dl_temp($ua, $opts{ipadic_uri}, %opts);
$opts{mecab_dir} = File::Spec->catdir($opts{root_dir}, (split(/\//, $opts{mecab_uri}))[-1]);
$opts{mecab_dir} =~ s/\.tar\.gz$//;
tar_gunzip($mecab, $opts{root_dir}, %opts);
patch($patch, $opts{mecab_dir}, %opts);
tar_gunzip($ipadic, File::Spec->catdir($opts{mecab_dir}, 'dic'), %opts);
my $o_dir = cwd();
chdir $opts{mecab_dir};
exec_cmd("./configure $opts{mecab_configure_args}; make; make install");
chdir $o_dir;
unlink($mecab, $patch, $ipadic);
exec_cmd("$opts{rm_cmd} -rf $opts{mecab_dir}");
}
sub find_cmd
{
my $cmd = shift;
my @locations = @_;
my $path;
foreach my $loc (@locations) {
$path = File::Spec->catfile($loc, $cmd);
if (-X $path) {
return $path;
}
}
while (1) {
print "Path to your $cmd executable? ";
$path = <STDIN>;
chomp($path);
if (-X $path) {
return $path;
}
print << " EOM";
'$path' doesn't seem to be an executable file.
EOM
}
}
sub dl_temp
{
my $ua = shift;
my $uri = shift;
my $file = File::Spec->catdir(File::Spec->tmpdir, (split(/\//, $uri))[-1]);
print " + Downloading $uri to $file...\n";
my $res = $ua->mirror($uri, $file);
if ($res->is_error) {
print STDERR <<" EOM";
Failed to download $uri. Returned HTTP message follows.
EOM
print $res->as_string;
exit 1;
}
return $file;
}
sub exec_cmd
{
my $cmd = shift;
my %opts = @_;
if (system($cmd) != 0) {
die "Failed to execute $cmd: $!";
}
}
sub tar_gunzip
{
my $file = shift;
my $path = shift;
my %opts = @_;
my $o_dir = cwd();
chdir $path;
my $cmd = "$opts{gunzip_cmd} < $file | $opts{tar_cmd} xvf -";
exec_cmd($cmd, %opts);
chdir $o_dir;
}
sub patch
{
my $file = shift;
my $path = shift;
my %opts = @_;
my $o_dir = cwd();
chdir File::Spec->catdir($path, File::Spec->updir);
my $cmd = "$opts{patch_cmd} -p0 < $file";
exec_cmd($cmd, %opts);
chdir $o_dir;
}
main();
そういえば昨日行った店でアナウンサー崩れタレントの魚住りえが隣の席にいた。正直彼女はあまり好きじゃないのでネガティブな見方をしてしまっているのだが、それにしても一緒にいた人達じゃ尋常じゃなくうるさかった。ボリューム全開ですよ。小さい店なのに・・・
去年から俺がハナコさんとかに連れられていって落語を見に行ってるのは俺の周りの人達ならよく知ってるわけだが、最近落語の本を読み出してから特に落語が自分の中だけで強烈なブームになっている。今までは平均して2ヶ月に1回実際に落語を聞きに行くだけだったんだが、本で読むようになるとあの臨場感は味わえないものの、一気にたくさんの話を読めるのが嬉しい。
うちのオヤジも実は落語好きで本をたくさんもっていたのだが、昔そういうのを聞かされた時は全然面白さがわからなくて眠くてしょうがなかった。でもやっぱりちゃんと寄席に行ってから読むと色々と噺家がやる動作を想像できて楽しく読める。もちろん以前そういう本をちらっと見た時よりはるかに昔の日本についての知識が増えた、ってのもあるだろうけど・・・
特に志ん朝の本なんかを読んでいると彼の創作活動に使われたらしいびっしりと文字のつまったノートなんかを写した写真があり、これを踏まえて「ああ、ここの言い回しはこうやって気を使って考えたんだなぁ」とか思いながら読むとさらにおもしろい。それが他人の仕事であっても物を作る作業をかいま見るのはとても楽しい。
最近の当たりは「紙入れ」。この間桂歌春がやってた、出入りの若いのと、その彼と浮気をしているお得意様の店の奥さんと、それに旦那さんの話。もっとも、これはちゃんと仕草を含めて味わったほうが楽しいとは思うが。
1.今冷蔵庫に入っているお酒の容量は?
冷蔵庫じゃないけど、
ほんとはここにスコッチが欲しい所だ。
2.好きな銘柄は?
銘柄じゃないけど・・・
3.最近最後に飲んだ店は?
さっき、スペイン料理屋でワイン飲んできた。
4.よく飲む、もしくは思い入れのある5杯
これ、難しいから後で。
・・・それに関する話をした後食事。おいしい食事だったけどそれよりなにより一番最後にデザートかわりに頼んだ「シェリー+葉巻」がとてもよかった。コイーバ初めて。シェリーと葉巻、うまいなー。
モーニングで楽しみで楽しみでしょうがなかった「蒼天航路」が終わった。曹操は死んだ。
まぁ、関羽が死ぬとその後いわゆる三国志の第一世代(=一番躍動的で、「時代を作った」世代)は後を追うように死んでしまうので話がそこにさしかかった時点で多分曹操に焦点を当てている「蒼天航路」は終わるだろうなとは思っていたのだが、やっぱりなんか寂しいな。
ただ、正直言って俺の知っている三国志の中で曹操という人物の一番活躍した時期は荀イク(イクの字は出せない・・・)が自殺した時点で終わりだという感じなのでもうこの物語は完結してたんだろうなぁ。
時代を作る仕事に従事した人の話は面白い。三国志はもう2バージョンほど読んだ事があるのだが、今度はまた違うのを読んでみるかな。
作ろうと決めた。・・・まぁなんだかんだ言ってできるかどうかはまだ流動的だが、とりあえず、会社作ろう。こう書いておけば多分やるだろう。
ちかれた。
なんかGoogleの右上に変なリンクでてるよと思ったら、新機能キタ━━━━(°∀°)━━━━ッ!!
HTML::Masonで動くTropyクローンの「Maropy」を作ってみた。都合により実際に稼働するサーバーがないのでソースだけあっぷ。
実作業時間は今朝起きてから約45分。面倒くさいのでDBはSQLiteで、もう負荷とかあんま考えてない。負荷が問題な場合はdhandlerの中で$m->cache_self()をちゃんと使えばいいかと。あと、テキストフォーマットはText::Hatena使ってみたよ。
ちなみにApache2+mod_perl2ですです。
注文ちた。
うおおお、時間が微妙~に余ったので喫茶店に入ったのだけど・・・ひ、ひ、ひさしぶりにまっずいコーヒー飲まされた。香りも微妙なら味も薄い。これで300円か・・・orz
店に入る時にちょっと嫌な予感はしたんだよなぁ・・・
HTML::MasonでUTFのデータを使う事が多いので、やっぱりソースファイル(Masonで処理するファイル)もUTFで書きたい(そうじゃないとあちこちでencode()/decode()しなくちゃいけない)。でもエディタやターミナルは基本的にEUC-JPのものを愛用している。環境が全てEUCなのでいまさらUTF対応するのも面倒くさいので、最近は新規プロジェクトを立ち上げる度にこんなハックしてる:
package Projct::App::ApacheHandler;
use strict;sub handler : method
{
my $class = shift;
my $r = shift;my $ah = $class->create_ah($r);
return $ah->handle_request($r);
}sub create_ah
{
my $class = shift;
my $r = shift;my $comp_root = "...";
my $data_dir = "...";return HTML::Mason::ApacheHandler->new(
args_method => 'mod_perl', # mod_perlマンセー
comp_root => $comp_root,
data_dir => $data_dir,
resolver_class => 'Project::App::ApacheHandler::Resolver',
$r
);
}
}
ここでHTML::Mason::ApacheHandlerを作るわけだけど、ポイントはResolverを乗っ取る事。これをした上でどこかでResolverを定義する:
package Project::App::ApacheHandler::Resolver;
use strict;
use base qw(HTML::Mason::Resolver::File);
use Encode();
use HTML::Mason::Tools qw(read_file_ref);sub get_info
{
my ($self, $path, $comp_root_key, $comp_root_path) = @_;my $srcfile = File::Spec->canonpath( File::Spec->catfile( $comp_root_path, $path ) );
return unless -f $srcfile;
my $modified = (stat _)[9];
my $base = $comp_root_key eq 'MAIN' ? '' : "/$comp_root_key";
$comp_root_key = undef if $comp_root_key eq 'MAIN';return
HTML::Mason::ComponentSource->new
( friendly_name => $srcfile,
comp_id => "$base$path",
last_modified => $modified,
comp_path => $path,
comp_class => 'HTML::Mason::Component::FileBased',
extra => { comp_root => $comp_root_key },
source_callback => sub {
my $s = read_file_ref($srcfile);
$$s = Encode::decode('euc-jp', $$s);
return $s;
}
);
}
Voila!これでソースファイルはEUCで書いても、実際にはUTF8のMasonオブジェクトファイルができるので、DB内のデータがUTFでもencode()/decode()しないで普通にMasonコードをかける。ちなみに上記はMason1.31でしか動かない。
お昼に勉強会をやるのを完全に忘れてしまって、すっぽかしてしまった。でも後で電話入れたら、一人は棄権(多分時間が早すぎるから棄権←って、昼だぞ、おい)、一人は山手線が止まってたせいで時間にこれず、結局俺がいてもお流れになってたもよう。よかったー。
某オライリーにてミーティング。オライリーのオフィスいつも読んでる本がたくさーん。3時間程あれやこれやでお話。俺はとりあえず出番はないかなー。
その後飯食って、最近仲のいい某Dと家でのみのみしつつ男同士でエロ話がんがんがんがん。っていうか、ほんとエロいのう、おぬし。
横浜パシフィコで開催中の楽器フェアでいろいろと見物。本当はギタレレがないかと思ってたんだけど見当たらず。小さめのギターは鉄弦が多いのだけど、自分はナイロン弦がいいのでこだわって探してたらあんまりないでやんのな。ちぇー。一個だけ試し弾きできたけど、微妙なお値段と音。ギタレレのほうが全然安いのだけど、果たしてどれくらいの音なもんか。
あとは二胡、ザッフーン、アコーディオンを弾いて満足。ザッフーンはそのうちなんか購入してしまいそうな勢い。
ハナコさんの姉さんが出てるっていうので「カヴァレリア・ルスティカーナ」と「青ひげ公の城」のオペラを見てきた。「カヴァレリア・・・」のほうは田舎町で三角関係のもつれから決闘になる話。「青ひげ」は有名らしいが俺は聞いた事もなかった。しかもこのオペラバージョンは大人向けに難しくしてあるようで色々解説してもらってようやくちょっと納得がいった。途中、第三の扉から第六の扉を開ける所まで寝てしまってたのも問題かもしれん。
ちなみに「カヴェラリア・・・」はイタリア語だったのでところどころ台詞を読まずにわかったのが個人的にちょっと嬉しい。
オペラを見た後は蒲田の「你好」で餃子や小龍包を。この店、絶対的評価では決してうまい部類には入らないのだけど(もちろん、ちゃんと食えるレベルではある)、なにしろコストパフォーマンスがやたらいいので大好きだ。今時餃子10個とかで300円よ?安いよなぁ。
昼は久しぶりにWendy's。最近モスしかいってなかったからなぁ。新商品のセサミチキンサンドをサラダセットで。なんかアメリカのWendy'sよか心持ちうまいような気がしないでもない・・・
その後本屋に行って落語の本とか、レシピ本なんかを購入。レシピ本は「江戸のおかず帖―美味百二十選」というヤツで、豆腐を寒天で包んでみたり、鯛すり身と長芋のとろろ汁があったりと和のテイストばっちり、おなかにもやさしそうなレシピばっかりである。あまりにも写真がウマそうなので買ってみた。どれも基本的に簡単なレシピではあるんだけど、なにせなじみがないのでこれは何回か練習してからでないと披露はできんな・・・
携帯から初投稿。良い天気な中真鶴でハイキングして、アド街ック天国でも紹介されたことのあるというヨクバリ海鮮丼を食べて来た。
まー、別に目新しいものじゃないけど、既存の物のインターフェースが気に入らないので今度また検索サイト作る予定。で、今日までにだいたい裏方のプロトタイプはできたよーな気がする。あとは地域とかそういう範囲していした検索とか、細かい修正のような気がするので大筋はこれでいいと思われ。
ちなみに関連して初めてGoogle Maps APIを触った。便利だなー。
お昼を食べて、その後実家に。そこで妹が最近のヒットを教えてくれたので早速デスクトップの背景画像にしました(JoJoの奇妙な冒険とドラえもん両方好きじゃないと全然楽しくないと思う・・・)。
http://www.geocities.jp/oaseko/gazo/dioemon2.html
道がちょっと難しかったので母親が普段だったら運転するところを母親ナビで俺運転。まず遺骨に手を合わせてしばし沈黙。伯母さんは息子や孫が来てるからかずっと笑っていてくれた。初めて会った従姉妹の嫁さんと息子さんとふくめてしばし歓談。っていうか、どうもあまり触れてほしくなさそうな感じ。ま、しょうがないよね・・・
夜になって母親から親戚の訃報が入ってきた。前にも何回か書いた事はあるが、海外に住んでた間あまり親戚付き合いしてなかったせいでショックを受ける程の親しさではないので涙しておよよとかではない。・・・が、なんだか昨日は突然気分が悪くなったりして大変だった。
とりあえず今日は色々予定を変更してスーツ着ていってきます。
某案件のデータがようやくマトモにパースできた。よしよし。これでようやく検索に映れるぞーーー
今朝の日経によると
・・・東証のシステムは毎朝六時半の起動時に、ハードディスク上にある証券会社のデータを読み込む。・・・データの記録位置が変わっても通常はシステムが自動的に検知し・・・売りと買いを付け合わせて株価を決める。
しかし今回のプログラム増強の際・・・変更されたデータの位置を検知できなくなった
ということらしい。変更されたデータ位置というのはつまり分散システム上でどこにあるか、がわからないわけだな。東証のシステム興味あるなー。
ところでこの記事の中に「十月上旬の連休明けに処理能力を従来の620万件から750万件に緊急増強した」とあり、この後来年にはこれをさらに900万件に増強するという記述があった。もちろん、増強自体はわかるんだけどなんかこうちょぼちょぼと増強するのって微妙な感じが。増強って一気にやらんと意味ないよーな気がするんだよね。
それともシステム的にはもう一桁上まで処理できて、あとはハードウェアを入れて行けばいいだけの事なのかな。それならわかるけど、どちらにしろ少しずつ金を取ろう、みたいな業者の根性が見えるような気がする。
エビオスをひっぱりだしてきて見ました。おにいさんちょっと本気です。
あ・・・2週間前取ったイリコだしが・・・1週間前のスープの残りが・・・1週間前の芋羊羹が・・・半年前の梅酒にしたあとの梅が・・・賞味期限5月30日の卵が・・・
以上が冷蔵庫から出てきました。ぐへー。今日は冷蔵庫を片付けます。
片付けついでに有り合わせの材料のシラタキとメカブでさっと炒め物を作って昼ご飯。結構うまい。あとで最近すごいお気に入りのポタージュスープとか買ってこようっと。
東証が止まってる。うへー。8年三ヶ月ぶりの停止だそうで。
システムが8年も止まらずに動くということ自体は(このシステムとは関係ないけど)裏方屋の人としてはすごいなー、と思うんだが、これでまた色々と叩かれるんだろうなぁ。中の人かわいそう・・・
2ヶ月ほど前に階下のメールボックスに配達された荷物を受け取るための暗証番号がもらったヤツとちがーーうう!という事でこのアパートの管理会社のヤツを呼び出した事があるのだが、それ以来なしのつぶてであった。いつかまた起こりそうだなぁ、と思ってたら案の定、いない間にこの間買ったRTの本が届いてたらしい。
今さっき管理会社に電話したが、とりあえずは本が取れない状態・・・くそっくそっくそっ
自分がプログラマーになったのはとても些細な理由からで、ものすごく大雑把に言うと自分が理系が好きだったのと大学に行く際親から「理工系で手に職をつけなければ費用は出してやらん!」とはっきりと言われたので、じゃあコンピューターでもやるか、という実にくだらない理由だった。
その後紆余曲折を経て今どうにかこうにかCPANにモジュールを色々登録できてたり、あちらこちらのプログラムにパッチを送ったりとできたり、それよりなにより親に言われた通り自分の食い扶持くらいはなんとか稼げるくらいにはなった・・・つもりだ。
でもこういう業界で働いていて、しかもプログラミング/エンジニアリングのスーパースターみたいな人達と会ったり仕事したりしてて思うのはやはりエリートの彼らと凡人の自分とでは設計開発思想が違うなぁ、というところ。
すごい人達のプログラムはすごい。わけのわからない事をやってるように見えて実は今まで存在しなかった物を作り出し、それでありながら高性能だったりする。だがそれらの成果物のうち、10個のうち7個くらいはインターフェースのせいで他のプロジェクトで使い回しができなかったり、ドキュメントが足りなかったりで、どうも「わかる人にだけ使ってもらえればいい」的な物だったりする。
俺はアメリカの大学2期生の時にC++の授業の単位を落としたくらいで(4期生の時に取り直した)、正直元々そんなにプログラミングの才能なんてないんだが、そんな時助けられたのがJavadocで、あの言語の隅々まで網羅してあるドキュメントがなければプログラマーをやめて調理人の道を歩んでいたかもしれない*1。いわゆる、天才でなくともわかるように(しかし簡潔に)凡人用に説明をしてくれるツールがあったおかげでなんとか理工系にいられたのだ。
これが悪いかというとちょっと違って、実際に最先端の物を作るのにそんな細かい所まで全部決まったり終了したりするのを待っていたら先に進まなかったりするのでそれはそれでいいのだが、凡人を自称する俺としてはそこをどうにかするように事を進めて行くのが俺の立ち位置だったりするんではないかと思ったりする。
特にオープンソースの世界では他人に受かってもらってなんぼである。直感的かつ使い回しが効くインターフェース、そしてそれらをつなぐドキュメンテーションがなければ他人の訳の分からないコードなんて使いたくないし、逆に使ってくれると思えない。使ってもらえなければオープンソースのコードなんて書いてる意味ねーじゃん、と思う。
そんな自分が目指すのは割と"Programming For The Masses"のような感じ。じゃあなにをやっているかというと別に大した事はやってなくて、とにかく他人が操作しなくてはいけないレベルにおいて
という3か条を満たす事は目指している。天才は上記がなくったってソースコードを読んだり、理論的な事を解説した論文とかを読んでれば使い方とかがなんとかわかったりしてしまうものらしいが、俺はほとんどの場合ソースコードは読む事はできるけどそれから実際のコーディングをすらすらするのはやっぱり無理だしそこまでの情熱があることも少ない。やはり上記3点がないブツは敬遠する傾向がある。っていうか、それくらいできてないコードはあまり信用できない、と言ったほうがいいかもしれない。
実際にアンケートを取ったわけではないので俺のレベルのエンジニアがどう思ってるかは知らないが、やっぱりエンジニアリングってのは「大衆」が使えてこそその意義があると思う。
品川駅でコーヒー飲んでたらこんなに書いてしまった。そろそろ移動すべ。なんかとりとめもなくなってしまったが自分はいわゆる最先端にはいないかもしれないが、これからもそういう事に気をつけて行きたいと思うのだ。
Daisuke Maki (a.k.a lestrrat): Perl hacker, Director of Japan Perl Association, YAPC::Asia Tokyo Organizer (2009-2012), Fluent in Japanese, English. Ex-Brazilian (sorta)
#perl #c #ruby #java #mysql #english #japanese #opensource #stf #cooking #scotch #cigar
翔泳社よりモダンPerl入門(2010)を出版させていただいております。できれば内容をアップデートしたいので是非皆様・・・現在の在庫処理にお力をお貸しください!><