2007年9月アーカイブ

バイト先の塾は第5週はお休みという決まりがあるのですが、すっかり忘れてまた行ってしまった...。
これで2回目だぁ...。

これの2分ちょい過ぎぐらいから流れてくる歌が気になり出して調べてみたらコナミのanubisというゲームの中で使用されている曲らしい。それにしてもリンク先の動画がスゴイ。見る見るうちに絵が完成していく。

anubis_cd.jpg[amazon]

早速買った。しっかし前回もそうだけど最近CD買うキッカケが全部ニコニコ動画になりつつあるなぁ...。

試聴してみたいけどニコニコのアカウントを持ってない人はこちらをどぞー。
Kingdom Hearts AMV - Beyond The Bounds

---
最近DarudeのSandstorm熱が自分の中で再燃してます。今ならヴァンダレイ・シウバの入場曲と言った方が分かりやすいのだろうか?高校生の時、部室の壊れかけたCDラジカセからこのドライな電子音を聴いたときはpopcorn以上のピコピコ音がキタァーと内心すごく興奮したものです。

youtubeでsandstormで検索したら面白いぐらい出てきたので、オレと同じsandstorm好きな某人に捧げます。
Darude - Sandstorm 

オリジナル

Dj Basslover - Sandstorm (Remix)

音がココまで違うと印象が全然違う

Sandstorm Remix

ややテンポはやめ

Dj nug Techno- Sand storm remix

テンポはやすぎ

[追加]
Darude Vs. Robert Miles - Children Of The Sandstorm

children とのコラボもの発見!

彼岸なので

| コメント(0) | トラックバック(0)

法事で母方の墓参りに行ってきた。
といっても一昨日にみんな一回墓参りに行ってしまったので、実際にお墓の方まで行ったのはオレと妹だけだったりする。

やっぱ大抵の人は土日中に墓参りを済ませてしまったのか、あまり墓場の方に人は来ていなかった。
花の水を取り替えて線香をあげて...よくよく考えたら線香の束に火をつけるのって初めてやったかもしんない。線香の火をつける作業って毎回親父の役だったんだけど今日はおらんかったしなぁ。種火の火が弱すぎて全然つかんわ、つき始めたら今度は線香の火が消えてくれないわで少し手間取った。

帰りにおはぎを買ったんだけどどうやらウチの家庭は全員こしあん派らしい。半々でこしあんつぶあんにしたんだけど全部こしあんにすれば良かった。これは覚えておこう。


----
日曜の夜に研究室の友人と飲んだんだけど、話を聞いてちょっと不安になった。
自分は早起きできるのか?と。このままの生活スタイルじゃやっていけそーにないのでなんとかせんとなぁ。
とりあえず

1.早くねる
2.寝る直前にプログラミングはしない

を目標に頑張るかな。


.....早くも1番が守れてませんが。

Nice boat.

| コメント(0) | トラックバック(0)

この件で総統がお怒りのようです。


[ニコニコ動画版]

更に追加
[youtube版][ニコニコ動画版]

シリアスな映画をこういう風に使われると、ギャップが激しすぎてもの凄いコミカルに。

飲み会

| コメント(0) | トラックバック(0)

もう一昨日の話になってしまうのですが、内定者同士の集いその2に参加してきました。

久々にボーリングやったよー。勘を取り戻すまでにエライ時間がかかった。そして投げてるウチに勘がまたどっかに行ってしまった...。久々に体を動かしたので筋肉痛です。あと投げる際にボールに体を持ってかれてよくコケたので右膝が内出血気味(;´Д`)

ボーリングの後は飲み屋に行ってその後徹夜でカラオケ。カラオケ屋に入ったのはかなり早かったような気がする。23時前なのは確かだ。んで徹夜組がオレ入れて5人。もう"りれき100"を自分たちで埋め尽くさんばかりの勢いだった。

飲み屋やカラオケで気づかれないウチに結構カメラで写真を撮られてたようだ!
後で拝見させて貰ったら、目の焦点が合ってなくて吹き出しそうになった。結構酔ってたんだなー(´Д`; )

激しく吹いた。


2007年09月12日 17:11:21 投稿。作者は間違いなくジェバンニ。


---
perl_hacks.jpg
お金をおろしたばっかりで、気が強くなっていたのかつい買ってしまった。頑張ってBinary Hacksと並列で読み進めていきます。

2日酔い気味

| コメント(0) | トラックバック(0)

昼までぼけーっとしてしまった。なんかもったいない。


それにしても、ニコニコ動画でperlのプレゼンテーションが見れるとはおもわなんだ。

もう変態言語ってレヴェルじゃねーぞ!
qw sin cos がqw(in co)と等価という部分で吹いた。区切り文字ってカッコやスラッシュ以外でも|なり#なり自分の好きに変更できるって言うのは知っていたけどアルファベットもokなんか( ;´Д`)


---
おまけ

この手のものって手をどうやって動かしているのかすごい知りたかった。なんかもう後半になると動きが格ゲーみたいね。

といっても前回ほどではないのですが。

どうも同期のみんなと飲むと楽し過ぎて飲みすぎてしまうようだ。

小岩辺りでよーやく席が空いてのんびり出来ると思いきや
気づいたら新検見川に居ました。コレはやばいと思って東京方面に戻ろうとしたら何故か西千葉に着きました。
逆行してるじゃん!

結局津田沼から歩いて帰ることに(´p`)
一応駅にいるタクシーのおっさんと交渉したんだけど2千円じゃ厳しかった。
とりあえず深夜の津田沼~母校まで歩き、その辺りで

__ノL_/L__    /     ___  _
           (__/ /     >  `'′  ̄\
 ・    |_ヽヽ    /    ノ  ,ィ,ルl      ヽ
 ・   二|-‐     /    < /l/  u |ハ、       ヽ
 ・     |     〈      レ =、\  _メヽ!ヽ!、   |
 ・   ー―┐ヽヽ  \   |ヽ 。>_  /。 ノ | ,へ |
 ・       /      /     | u/   ~U~ ┌ ||ビ|| |
 ・      /      /       |/__,ヽ__u |!_ン |\
 ・   ー―┐  〈       |『┴┴┴┴')) |\ |  ト、
 ・     ├'′   \.      ヾ========'/   V  | ,> 、
 ・    ノ      /         ,>--― "u    |   |//′ `ヽ、
 ・     │     \.     /‐/ |\_____/|_  |′
 ・     │      >    〈  / /|        |   \|   /
 ・     │     /      |  l|  |       |   | |   /
 ・     ヽヽ l  〈       ト、 ||__|____|__| |
 ・      /   \     ヒヘ |  ┌──‐┐   |
 ┃  ー―┐〇     >  |__ヽ    | l二二二.    |
 ┃      /    /         ヽ  └――┐|     |
  ・    /     /          /ヽ ┌─―┘|    |

となり、その辺を走っているタクシーを止めた。
タクシーの運ちゃんと世間話まくったけど、運ちゃんの息子さんの結婚式にケツメイシがゲストで来たらしい。何気に凄いな。

最近ニコニコ動画でやたらVOCALOID2関連の動画が上がっているので、ちょっと試聴してみたんだけど改めて「YAMAHAの技術は世界一ィィィ!!」と思った。だが、ロボ声好きなオレとしてはちょっと悲しい気もする。

アカウント持ってる人は聴いてみれば分かると思うよ。

(初代 VOCALOID)アンインストール (VOCALOID ver.)
まだ音の区切りが機械っぽい。

VOCALOID2:
VOCALOID2 初音ミクに「Ievan Polkka」を歌わせてみた(完成版)
pya!でお馴染みのあのネギ回しの曲

初音ミクに「鳥の詩」を歌わせてみた{修正版}
↑シーケンサの様子が見れる。

初代 VOCALOIDの声と比べるとかなり自然になってる。


そーいえば中学生の頃、パワプロ5で自分の作った選手の名前を読み上げてくれるシステムがあったがものすごい不自然でゲラゲラ笑っていたなぁ。だいたい8年ぐらい前か。
なんかこのままあと10~20年経てば人の声と全く区別がつかなくなりそうだ。


---
その他技術的に気になったモノ。
視界をアスキーアート化するマトリックス・ゴーグル
現実世界をアスキーアート化。これはすごい。

つ 『ref演算子』で判別する。

if (ref $ref eq 'ARRAY') {
  # 真なら配列
}

行指向のパラメータファイルをyamlに書き換えたら楽かなと思い、ちょっとテストしてみた。

パラメータファイルconfig.ymal


map : a280
island1 :
popsize : [10, 20, 30]
end_generation : 100
island2 :
popsize : [10,20,30]
end_generation : 100

テスト用スクリプト


#!/usr/bin/perl

use strict;
use warnings;

use YAML::Syck;
use Smart::Comments;

my $data = YAML::Syck::LoadFile('./data/param/config.yaml');
my $sca = $data->{island1}->{end_generation};
my $array_ref_1 = $data->{island1}->{popsize};
my $array_ref_2 = $data->{island2}->{popsize};
### $data
### $array_ref_1
### $array_ref_2


実行結果


### $data: {
### island1 => {
### end_generation => '100',
### popsize => [
### '10',
### '20',
### '30'
### ]
### },
### island2 => {
### end_generation => '100',
### popsize => [
### '10,20,30'
### ]
### },
### map => 'a280'
### }


### $array_ref_1: [
### '10',
### '20',
### '30'
### ]


### $array_ref_2: [
### '10,20,30'
### ]

スペースがあるかどうかで配列になるかどうかが決まる。ちょっとハマりかけるところだった。

研究でDBをいじる機会を得たので、せっかくだからperlのO/RマッパであるDBIx::Classを使ってみることにした。そして例によってハマったのでメモっておく。

各テーブルに対応したクラスをDBIx::Class::Schema::Loaderで自動生成して(マニュアルのワンライナー参照)
一緒に掃き出されたSchemaクラスに以下の一行を追加した。

__PACKAGE__->connection('dbi:Pg:dbname=ga;host=localhost', 'postgres', '', { AutoCommit => 0 });

optionでAutoCommit => 0としたのは複数のテーブルをupdateする際に手動でコミットしたかったから。多分そっちの方がエラーの処理が書きやすいかなと思った。後の地雷を作ることになる。

find等のメソッドが動くことを確認したので次に複数のテーブルにまたがるinsert処理を書いた。

抜粋するとこんな感じ


my $schema = GA::Schema->connect;
$schema->txn_begin;
(ここに一連のinsertやupdate処理)
$schema->txn_commit;

だが、実行してもDBのテーブルは変化せず。
$schema->storage->debug(1);
とやってデバッグメッセージでSQLをはき出してみたが、ちゃんと発行されてる。どうやらうまくコミットされてないようだ。

とりあえずDBIx::Class::Schemaのマニュアルを見てみる

Equivalent to calling $schema->storage->txn_begin. See "txn_begin" in DBIx::Class::Storage::DBI for more information.

てなワケでDBIx::Class::Storage::DBIの該当箇所のソースを読んでみる。
http://search.cpan.org/src/ASH/DBIx-Class-0.08006/lib/DBIx/Class/Storage/DBI.pmより

sub txn_begin {
  my $self = shift;
  $self->ensure_connected();
  if($self->{transaction_depth} == 0) {
    $self->debugobj->txn_begin()
      if $self->debug;
    # this isn't ->_dbh-> because
    #  we should reconnect on begin_work
    #  for AutoCommit users
    $self->dbh->begin_work;
  }
  $self->{transaction_depth}++;
}
sub txn_commit {
  my $self = shift;
  if ($self->{transaction_depth} == 1) {
    my $dbh = $self->_dbh;
    $self->debugobj->txn_commit()
      if ($self->debug);
    $dbh->commit;
    $self->{transaction_depth} = 0
      if $self->_dbh_autocommit;
  }
  elsif($self->{transaction_depth} > 1) {
    $self->{transaction_depth}--
  }
}

マニュアルではtxn_begin : Begins a transaction (does nothing if AutoCommit is off) っていってたけど嘘じゃん!どうやらtransaction_depthがコミットするか否かの鍵を握っているようだ。早速この値がどう変化しているのか調べてみる。

my $schema = GA::Schema->connect;
print Data::Dumper::Dumper($schema->storage->{transaction_depth});      #1
$schema->txn_begin;
print Data::Dumper::Dumper($schema->storage->{transaction_depth});      #2
(ここに一連のinsertやupdate処理)
$schema->txn_commit;
print Data::Dumper::Dumper($schema->storage->{transaction_depth});      #1

AutoCommit => 0 のときはtxn_beginをやらなくても常に一段余計に重ねた部分にいるようだ。2の状態でtxn_commitしても発動しないので$schema->txn_begin;を消したら行けた。ただ、ちょっと綺麗じゃない気がしたのでAutoCommit => 1に変えてやってみた。

(AutoCommit => 1指定時)
my $schema = GA::Schema->connect;
print Data::Dumper::Dumper($schema->storage->{transaction_depth});      #0
$schema->txn_begin;
print Data::Dumper::Dumper($schema->storage->{transaction_depth});      #1
(ここに一連のinsertやupdate処理)
$schema->txn_commit;
print Data::Dumper::Dumper($schema->storage->{transaction_depth});      #0

これでもDBに登録できるのを確認した。こっちの方が綺麗だし
DBIx::Class::Storage::DBIのマニュアルにも

If you set AutoCommit => 0 in your connect info, then you are always in an assumed transaction between commits, and you're telling us you'd like to manage that manually. A lot of DBIC's magic protections go away. We can't protect you from exceptions due to database disconnects because we don't know anything about how to restart your transactions. You're on your own for handling all sorts of exceptional cases if you choose the AutoCommit => 0 path, just as you would be with raw DBI.

ってあるし、AutoCommit => 0は避けて、手動コミットしたくなったらSchemaクラスtxn_beginでトランザクションを開始した方が無難なのかねぇ。

最近データの中身を確認するのにいちいちprint Data::Dumper::Dumper($hogehogeobj);とやるのがめんどくなってSmart::Commentsを使うようにしたんだけどオブジェクトのメソッド呼び出しの評価はSmart::Commentsってしてくれないのね。


例えば以下のような簡単なデータを表すクラスがあって...

package GA::OneMapElement;

use strict;
use warnings;

sub new{
my $class = shift;
my $x = shift;
my $y = shift;

bless {
x => $x,
y => $y,
},$class;
}

sub get_x{
my $self = shift;
return $self->{x};
}

sub get_y{
my $self = shift;
return $self->{y};
}

以下(といっても主要部分だけかなり抜粋)のスクリプトを実行してみると...


my $oneElement = GA::OneMapElement->new(100, 150);
### $oneElement
### $oneElement->get_x
print Data::Dumper::Dumper($oneElement->get_x);

実行結果
### $oneElement: bless( {
### x => 100,
### y => 150
### }, 'GA::Controller::OneMapElement' )


### $oneElement->get_x
$VAR1 = 100;

みたいな感じでオブジェクト自身のdumpはうまくいくが、$oneElement->get_xがそのまま出力されちゃう。むぅ。
最終的にはprint Data::Dumper::Dumper()をsnippet登録した方が使いやすいのかなぁ。

このアーカイブについて

このページには、2007年9月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2007年8月です。

次のアーカイブは2007年10月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

OpenID対応しています OpenIDについて
Powered by Movable Type 4.261