2007年12月18日

Fedora8にPuTTYで接続してviでUTF8データを見る。

PuTTYで以下のようにキャラクタ設定を行います。

fedora_utf8_01.jpg

↓のようにマルチバイトのディレクトリ名をちゃんと見れます。

fedora_utf8_02.jpg

さらにログインユーザのホームディレクトリに以下の内容の".vimrc"というファイルを作成します。

set fileencodings=iso-2022-jp,euc-jp,cp932,utf-8,latin1
set number
set tabstop=4

viエディタでUTF-8エンコードのファイルを文字化けせずに見ることができます。


posted by 台北猫々 at 20:59| Comment(0) | TrackBack(0) | 技術メモ

2007年12月17日

温泉

今日は有給取って、午前中は床屋に行って午後は近くの温泉に
行ってきました。洞窟風呂になど入りましたが、暗闇で温泉に
つかっていると不思議と落ち着くものなのですね。
posted by 台北猫々 at 22:44| Comment(0) | TrackBack(0) | 日記

2007年12月16日

「パンドラの匣」

太宰治 著

太宰の作品は、時期により「明(希望)」から「暗(絶望)」に作風が変化していきます。この作品は「明」に属します。

大戦後の人達へのエールが込められていて、くよくよしている時などに読むと元気がもらえる作品です。

印象に残った文章:
この道は、どこへつづいているのか。それは、伸びて行く植物の蔓(つる)に聞いたほうがよい。蔓は答えるだろう。「私はなんにも知りません。しかし、伸びて行く方向に陽(ひ)が当るようです。」

posted by 台北猫々 at 12:22| Comment(0) | TrackBack(0) | 本・DVD

2007年12月15日

「宇宙の果て」考察2

量子の性質(=観測されることで状態が決定する)から、宇宙も夢と同様で、認識(観測)するほど広がっていくものと思っています。

または、「多解釈世界」的には、観測するほど宇宙が広がる世界に分岐していくと言う表現でしょうか?

ただ、この解釈は哲学ループというか主観論に陥ってしまうのですよね。元々の量子論がそのようなものだからしょうがないですが、真理に近づくにはさらに踏み込んでいかないといけないはずです。

なので、学者先生には考察1
のような回答ではなく、その先のことを話していないのが、自分は不満でした。

番組を見てなんとなく釈然としなかったのですが、文章にして整理すると、何が釈然としないのか分かりました。私のような素人でもたどり着けるようなことを、学者先生があたかも結論であるかのように話しているのが、おもしろくなかったようです。

もっと先を見ていてくれないと。猫
posted by 台北猫々 at 09:45| Comment(0) | TrackBack(0) | 雑記メモ

2007年12月14日

セマフォ生成(C++)

プロセス間同期処理に使用するセマフォを生成の処理サンプルです。同期を行うには、この他にロック、アンロック、削除の処理が必要になりますが、それは追々載せますね。


#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <string.h>

int main(char** argv, int argc)
{
try
{
/* セマフォキー値 OSで一意の値です */
long lnSemKey = 0x0000ffff;
errno=0;

/* セマフォ生成 */
int iSemId = semget(lnSemKey,1,(0666|IPC_CREAT|IPC_EXCL));
if(iSemId < 0)
{
throw -1;
}

/* セマフォ構造体 */
union semun
{
int val;
struct semid_ds *buf;
ushort *array;
}arg;

//初期セマフォ数の設定
arg.val = 1;
errno=0;
if((semctl(iSemId,0,SETVAL,arg)) < 0)
{
throw -1;
}
}
catch(int r)
{
return(r);
}
return(0);
}


実行して、ipcsコマンドで確認しますと、↓になります。keyが0x0000ffffのセマフォを生成しました。

[root@localhost ttt]# ipcs -s

------ Semaphore Arrays --------
key semid owner perms nsems
0x4d0014cc 0 work 600 8
0x00000000 65537 nobody 600 1
0x00000000 98306 nobody 600 1
0x00000000 131075 nobody 600 1
0x0000ffff 163844 root 666 1
posted by 台北猫々 at 22:45| Comment(0) | TrackBack(0) | 技術メモ(Linux C/C++)

「宇宙の果て」考察1

 この間、深夜テレビで「芸能界宇宙部」というのをやっているのを見ました。その中で、「宇宙の果て」がどうなっているかを芸能人に学者先生がレクチャーしていました。

(1)学者先生曰く「宇宙の果てというのは、各人の持つ知識・認識次第なので、"あなたの宇宙の果て"と"私の宇宙の果て"は異なります。」

(2)これに対して出演者の一人の山本モナさん曰く「それは、言葉遊びではないですか?宇宙の果てというのは、存在しているのですよね?それは、どういうものなのですか?」

(1)に戻る。以降、話は噛み合わないままループ。

※ニュアンスが異なるかもしれませんが、大体こんなところでした。

学者先生が言っているのは量子論から導かれる「人間原理」(「多解釈世界」もかな?)を核としていますよね。量子論は日常の感覚とは相当ギャップがあるので、山本モナさんの反応は至極自然です。また、学者先生も論理展開がちょっと強引かな?と思いました。

私的には山本モナさんに、こう聞いて欲しかった。
「それでは、人間が誰もいなくなったら宇宙の果ては存在しないのですか?」
と、もしくは、
「それでは、人間がいなくなったら地球は回らないのですか?」と。

その問いに対する学者先生の回答を聞きたかった。

というのも、以前にブログ上で「量子論に思うこと」を書きました。

これは、宇宙という「果て」をイメージできないものと似たようなものがあるかなと思った時に、気づいたのが「人が夜見る夢」がそうだと思ったのです。

「夢の果て」って想像できますか?「夢」は人が思うほど広がり、そして「夢の外側」というのは「有るけど無い」と言う表現がしっくりくるかなと思うのです。

・・・・長くなったので続きます。猫
posted by 台北猫々 at 21:19| Comment(0) | TrackBack(0) | 雑記メモ

2007年12月13日

":include"を試してみます。

昨日の文末に書いた":include"を試してみます。
以下のようにfindメソッドにオプションとして渡すようです。

@denpyo = Denpyo.find(params[:id], :include=>:denpyo_meisais)

で、実行してみると以下のようなSQLを実行しました。
いい感じいい感じ♪。。。って駄目じゃん!

SELECT denpyos.`id` AS t0_r0, denpyos.`denpyo_no` AS t0_r1, denpyos.`shohin_sum` AS t0_r2,
denpyos.`kingaku_sum` AS t0_r3, denpyos.`denpyo_date` AS t0_r4, denpyo_meisais.`id` AS t1_r0,
denpyo_meisais.`denpyo_no` AS t1_r1, denpyo_meisais.`meisai_no` AS t1_r2,
denpyo_meisais.`shohin_name` AS t1_r3, denpyo_meisais.`suryo` AS t1_r4,
denpyo_meisais.`kingaku` AS t1_r5
FROM denpyos
LEFT OUTER JOIN
denpyo_meisais ON denpyo_meisais.denpyo_no = denpyos.id # ←駄目じゃんな箇所
WHERE (denpyos.`id` = 1)

結合条件は、"denpyo_meisais.denpyo_no = denpyos.denpyo_no"となってほしかったのですが、Railsのポリシーとして、「参照先はPKでなくちゃ」という強固な縛りがあるようです。

一応、以下のサイトにあるようなカスタマイズをRailsに行えば、参照先列を指定できるようにすることも可能のようです。
http://wota.jp/ac/?date=20061119

「レールの外は修羅の道」合掌。。。猫
posted by 台北猫々 at 19:30| Comment(0) | TrackBack(0) | 技術メモ(Ruby)

PK以外の列同士でリレーションを張ってみましょう。

PK以外の列(伝票番号)同士でリレーションを張ってみましょう。

has_manyには複数形を指定して、belongs_toには単数形を指定するのがミソです。この辺は作成者のこだわりを感じますね。

class Denpyo < ActiveRecord::Base
has_many :denpyo_meisais, :foreign_key => 'denpyo_no'
end

class DenpyoMeisai < ActiveRecord::Base
belongs_to :denpyo, :foreign_key => 'denpyo_no'
end

として、以下のような処理をしてみます。ここで、ステップ実行させてみました。findメソッドの呼び出し時点でテーブル結合しているのかと思っていましたが、違うようですね。

@denpyo = Denpyo.find(params[:id])
flash[:notice] = @denpyo.denpyo_meisais[0].kingaku #ここで、↓のSQLが実行されます。

[0;1mSELECT * FROM denpyo_meisais WHERE (denpyo_meisais.denpyo_no = 1)

ただ、これでは件数が増えた時に、ネットワークやDBのオーバーヘッド的に「正気ですか?」という感じなので、さらに調べてみると:includeオプションというのがあるらしいです。
posted by 台北猫々 at 00:19| Comment(0) | TrackBack(0) | 技術メモ(Ruby)

2007年12月12日

ことの葉ひらひら その16

「この世界に"偶然"というものは存在しない。あるのは"必然"と"未解明の必然"だけ」

詠み人知らず
posted by 台北猫々 at 23:20| Comment(0) | TrackBack(0) | ことの葉

2007年12月11日

ことの葉ひらひら その15

「戦場から逃げ出した先にあるものは、戦場だけだ」

詠み人知らず
posted by 台北猫々 at 20:44| Comment(0) | TrackBack(0) | ことの葉

2007年12月10日

Eclipse(RadRails)でRubyをステップ実行DEデバッグ

Eclipse(RadRails)を使うと、Ruby on Railsをステップ実行して、デバッグできるのですね。動作解析するのに非常に助かります。とりあえず、やり方をメモ。

EclipseにRadRails(Aptana)がプラグインされていることを前提にします(もちろんRubyとRailsも導入済みとします)。

(1)
・ruby-debug-base
・ruby-debug-ide
を以下のようにインストールします。
gem install ruby-debug-base --include-dependencies
gem install ruby-debug-ide --include-dependencies
ruby-debug-ide.JPG

(2)
Eclipseの[Window]→[設定]→[Ruby]→[Debugger]の「Use ruby-debug library」をチェックします。
ruby-debug_eclipse01.JPG

(3)
WEBRickサーバをデバッグモードで起動します。Serverビューの「虫」マークをクリックするとデバッグモードでの起動になります。
ruby-debug_eclipse02.JPG

こんな感じに起動します。
ruby-debug_eclipse03.JPG

(4)
ブレイクポイントを設定しましょう。エディタの左側のバー(↓の図の赤点線部分)をダブルクリックするとブレイクポイントを設定できます。
ruby-debug_eclipse04.JPG

(5)
Eclipseの内部ブラウザから、WEBRickにリクエストして、Railsアプリケーションを動作させると、ブレイクポイントで一時停止して変数の内容などを参照できます!!もちろんステップ実行も可能です。
ruby-debug_eclipse05.JPG
posted by 台北猫々 at 19:09| Comment(538) | TrackBack(3) | 技術メモ(Ruby)

2007年12月09日

ことの葉ひらひら その14

「儚(はかな)いって、人の夢のことなんだなあ」

台北猫々みつお
posted by 台北猫々 at 13:53| Comment(0) | TrackBack(0) | ことの葉

2007年12月08日

Ruby on Railsで単純アプリケーション開発5


def acts_as_sequenced_class
::#{self.name}
end

というのは多分ですが、acts_as_sequenced_classメソッドを呼ぶと、自インスタンス(つまりActiveRecordを継承したDenpyoMeisai)への参照を返しているのでしょう。

というのは、acts_as_sequenced_classメソッドを呼んでいる場所はこんな感じ↓になっていて、
max = acts_as_sequenced_class.maximum(position_column, :conditions => scope_condition)
acts_as_sequenced_classの戻り値から、ActiveRecord#maximumメソッドを参照しているので多分そうだと。

ちなみにRubyでは"return"を省略できるそうです(なぜ、こんな可読性低下を助長するような仕様にしているかは謎ですが)。


posted by 台北猫々 at 15:05| Comment(0) | TrackBack(0) | 技術メモ(Ruby)

2007年12月07日

「空の境界(上)」

奈須きのこ著

”直死の魔眼”を持つ少女の物語です。素直な歪みっぷりが、なかなかいい線いっています。とはいえ、まだ夕闇ぐらいですが、それだけに読みやすくもあります。

印象に残った言葉:
「生きているのなら、神さまだって殺してみせる」

posted by 台北猫々 at 22:27| Comment(0) | TrackBack(0) | 本・DVD

2007年12月06日

Ruby on Railsで単純アプリケーション開発4

acts_as_sequenced.rbを改造してみようと思いまして、ソースをハックしてやれ!とばかりにしてみたのですが。。。

わけわかんな〜い猫

class_eval <<-EOV
include ActiveRecord::Acts::List::InstanceMethods
def acts_as_sequenced_class
::#{self.name}
end
def position_column
'#{configuration[:column]}'
end
#{scope_condition_method}
before_create :assign_next_number_in_sequence
EOV

これってなにやってるの?
思ってる以上にC,C++,Java,PHPなどとは隔たりがありますね〜

とりあえず色々調べてみると、クラスの動的定義をやっているのですね。"eval"が付いているので、そこらへんは想像できるのですが、「<<-EOV」は?なんとなくヒアドキュメント的なものかなあと思って調べてみると。一応当たっているよう。

def acts_as_sequenced_class
::#{self.name}
end

これが、わかんないんです。クラス名を付けているのかなあ?調査継続です。
posted by 台北猫々 at 21:28| Comment(0) | TrackBack(0) | 技術メモ(Ruby)

2007年12月05日

Ruby on Railsで単純アプリケーション開発3

昨日の続きになりますが、
探したところ似たようなものとして、"acts_as_sequenced.rb"というものがありました。

↓の方が作成されているものです。
http://www.depixelate.com/2006/7/19/acts-as-sequenced

↑にあるソースをコピーして、/lib/acts_as_sequenced.rbとしてコピーして使用します。

が、なぜかしらんEclipseのRadRailsでは29行目の
"#{configuration[:scope].to_s} = #{{configuration[:scope].to_s}}"
がエラーになったので、
"#{configuration[:scope].to_s} = #{configuration[:scope].to_s}"
としました。

そして、environment.rbの末尾に
require 'acts_as_sequenced.rb'
を追加しました。

さらにさらに
/app/models/denpyo_meisai.rb

class DenpyoMeisai < ActiveRecord::Base
acts_as_sequenced :column => :meisai_no, :scope => 'denpyo_no = #{denpyo_no}'
end
のように編集して、レコード追加(create)をしたところ
SELECT max(meisai_no) AS max_meisai_no FROM denpyo_meisais WHERE (denpyo_no = 1)
というSQLを自動的に発行して伝票番号毎の連番を明細番号にふってくれました。

これを改造すればできそうだなあ猫
posted by 台北猫々 at 23:28| Comment(0) | TrackBack(0) | 技術メモ(Ruby)

2007年12月04日

Ruby on Railsで単純アプリケーション開発2

さてと、間が開いてしまいました。
今調べているのが、PHPのPEAR::ADODBにあるGenID($seqName = 'adodbseq',$startID=1)のようなものがRubyにないかなあ。というところ。

(GenIDは、連番を管理するDBテーブルを生成して、呼び出す毎に連番を返してくれる優れものです。)

伝票番号はAuto Incremment列を使用しないので、GenIDのようなもので連番を生成したいのですよね。う〜んあるかなあ?

※GenID:
http://www.souken.co.jp/tech/php/adodb/docs-adodb-ja.htm#genid
posted by 台北猫々 at 21:47| Comment(0) | TrackBack(0) | 技術メモ(Ruby)

2007年12月03日

Maple復活!

PHPフレームワークの「Maple」が、開発を再スタートしました。
Mapleは結構お気に入りで、Webシステムをいくつか作ったのですが、開発が停止していて寂しく思っていたので、嬉しいです。

「Maple」は、最近良くあるフルスタックではないのですが、Smartyとの相性の良さや、フレームワークのソースの見やすさなどがいいんです。
posted by 台北猫々 at 21:54| Comment(0) | TrackBack(0) | 日記

方程式計算なんかしてみました


/**
* 方程式計算
* @param coefficients 次数の大きいものからの係数の配列
* @param x 変数
* @return 結果
* 3x^2+2x-2ならば、double[] coefficients = {3,2,-1};となる
*/
static public double calculateEquation( double[] coefficients, double x ) {

double result = 0;
int powNum = coefficients.length - 1;
for( int i=0 ; powNum>=0 ; powNum--, i++ ) {
result += coefficients[i] * Math.pow(x, powNum);
}
return result;
}


2007.12.04 そっとint result→double resultにしました
posted by 台北猫々 at 21:12| Comment(0) | TrackBack(0) | 技術メモ(Java)

2007年12月02日

線形最小二乗法での傾き算出処理


/**
* 線形最小二乗法での傾き算出処理.
* @param x_val X軸方向の値の配列.
* @param y_val Y軸方向の値の配列.
* @return 傾きを戻します。.
*/
static public double calulateGradientByLinearLeastSquares(double x_val[], double y_val[]) {

double x_sum = 0;
for( double d : x_val ) {
x_sum += d;
}

int num = x_val.length;
double x_avg = x_sum/num;
double tmp = 0;
for( double d : x_val ) {
tmp += Math.pow( d - x_avg, 2 );
}

double y_sum = 0;
for( double d : y_val ) {
y_sum +=d;
}

double y_avg = y_sum/num;
double xt = 0;
for (int i = 0; i < num; i++) {
xt += ( x_val[i] - x_avg ) * (y_val[i] - y_avg);
}
return( xt/tmp );
}
posted by 台北猫々 at 20:56| Comment(0) | TrackBack(0) | 技術メモ(Java)