月曜日, 9月 06, 2010

RubyGemsのtarボールからRPMパッケージをつくる

2008/02/07perlfreak.vox.comより転載)

checkinstallがインストールされている前提。
$ tar zxvf rubygems-1.0.1.tgz
$ cd rubygems-1.0.1
$ su
Password:
# checkinstall --fstrans=no -R "ruby setup.rb"
入力を求められたり、内容を変更する場合があるので、以下出力を参考まで。ただし、出力内容は途中まで。
--- (ここから) ---
checkinstall 1.6.0, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran
This software is released under the GNU GPL.

The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs? [y]: y
Preparing package documentation...OK
Please write a description for the package.
End your description with an empty line or EOF.
>>
**************************************
**** RPM package creation selected ***
**************************************
This package will be built according to these values:
1 - Summary: [ Package created with checkinstall 1.6.0 ]
2 - Name: [ rubygems ]
3 - Version: [ 1.0.1 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ Applications/System ]
7 - Architecture: [ x86_64 ]
8 - Source location: [ rubygems-1.0.1 ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ rubygems ]
Enter a number to change any of them or press ENTER to continue: 4
Enter the additional requirements:
>> el4
This package will be built according to these values:
1 - Summary: [ Package created with checkinstall 1.6.0 ]
2 - Name: [ rubygems ]
3 - Version: [ 1.0.1 ]
4 - Release: [ el4 ]
5 - License: [ GPL ]
6 - Group: [ Applications/System ]
7 - Architecture: [ x86_64 ]
8 - Source location: [ rubygems-1.0.1 ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ rubygems ]
Enter a number to change any of them or press ENTER to continue: 11 <- 10と11が逆になっている Enter the additional requirements: >> ruby
This package will be built according to these values:
1 - Summary: [ Package created with checkinstall 1.6.0 ]
2 - Name: [ rubygems ]
3 - Version: [ 1.0.1 ]
4 - Release: [ el4 ]
5 - License: [ GPL ]
6 - Group: [ Applications/System ]
7 - Architecture: [ x86_64 ]
8 - Source location: [ rubygems-1.0.1 ]
9 - Alternate source location: [ ]
10 - Requires: [ ruby ]
11 - Provides: [ rubygems ]
Enter a number to change any of them or press ENTER to continue:
--- (ここまで(実際にはさらに続く)) ---
これで
/usr/src/redhat/RPMS/x86_64
等にRPMファイルが生成される。

RubyのtarボールからRPMパッケージをつくる

2008/02/07perlfreak.vox.comより転載)

まず、checkinstallというパッケージをインストールしておく。

$ tar zxvf ruby-1.8.6-p111.tar.gz
$ cd ruby-1.8.6-p111
$ ./configure --prefix=/usr
$ make
$ su
Password:
# checkinstall --fstrans=no -R "make install"

入力を求められたり、内容を変更する場合があるので、以下出力を参考まで。

--- (ここから) ---
checkinstall 1.6.0, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran
This software is released under the GNU GPL.


The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs? [y]: y

Preparing package documentation...OK

Please write a description for the package.
End your description with an empty line or EOF.
>>

**************************************
**** RPM package creation selected ***
**************************************

This package will be built according to these values:

1 - Summary: [ Package created with checkinstall 1.6.0 ]
2 - Name: [ ruby-1.8.6 ]
3 - Version: [ p111 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ Applications/System ]
7 - Architecture: [ x86_64 ]
8 - Source location: [ ruby-1.8.6-p111 ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ ruby-1.8.6 ]

Enter a number to change any of them or press ENTER to continue: 2
Enter new name:
>> ruby

This package will be built according to these values:

1 - Summary: [ Package created with checkinstall 1.6.0 ]
2 - Name: [ ruby ]
3 - Version: [ p111 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ Applications/System ]
7 - Architecture: [ x86_64 ]
8 - Source location: [ ruby-1.8.6-p111 ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ ruby-1.8.6 ]

Enter a number to change any of them or press ENTER to continue: 3
Enter new version:
>> 1.8.6

This package will be built according to these values:

1 - Summary: [ Package created with checkinstall 1.6.0 ]
2 - Name: [ ruby ]
3 - Version: [ 1.8.6 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ Applications/System ]
7 - Architecture: [ x86_64 ]
8 - Source location: [ ruby-1.8.6-p111 ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ ruby-1.8.6 ]

Enter a number to change any of them or press ENTER to continue: 4
Enter new release number:
>> p111.el4

This package will be built according to these values:

1 - Summary: [ Package created with checkinstall 1.6.0 ]
2 - Name: [ ruby ]
3 - Version: [ 1.8.6 ]
4 - Release: [ p111.el4 ]
5 - License: [ GPL ]
6 - Group: [ Applications/System ]
7 - Architecture: [ x86_64 ]
8 - Source location: [ ruby-1.8.6-p111 ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ ruby-1.8.6 ]

Enter a number to change any of them or press ENTER to continue: 10 <- 10と11が逆になっている Enter the provided features: >> ruby

This package will be built according to these values:

1 - Summary: [ Package created with checkinstall 1.6.0 ]
2 - Name: [ ruby ]
3 - Version: [ 1.8.6 ]
4 - Release: [ p111.el4 ]
5 - License: [ GPL ]
6 - Group: [ Applications/System ]
7 - Architecture: [ x86_64 ]
8 - Source location: [ ruby-1.8.6-p111 ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ ruby ]

Enter a number to change any of them or press ENTER to continue:

Installing with make install...

========================= Installation results ===========================
./miniruby ./instruby.rb --dest-dir="" --extout=".ext" --make="make" --mflags="" --make-flags="" --installed-list .installed.list --mantype="doc"
installing binary commands
installing command scripts
installing library scripts
installing headers
installing manpages
installing extension objects
installing extension scripts

======================== Installation successful ==========================

Copying documentation directory...
./
./GPL
./README
./README.EXT.ja
./README.ja
./COPYING
./README.EXT
./doc/
./doc/shell.rd.ja
./doc/forwardable.rd.ja
./doc/irb/
./doc/irb/irb.rd.ja
./doc/irb/irb-tools.rd.ja
./doc/irb/irb.rd
./doc/ChangeLog-1.8.0
./doc/forwardable.rd
./doc/NEWS-1.8.0
./doc/shell.rd
./COPYING.ja
./NEWS
./ChangeLog

Some of the files created by the installation are inside the build
directory: /var/home/bea/work/tgz/ruby-1.8.6-p111

You probably don't want them to be included in the package,
especially if they are inside your home directory.
Do you want me to list them? [n]: n
Should I exclude them from the package? (Saying yes is a good idea) [y]: y

Copying files to the temporary directory...OK

Striping ELF binaries and libraries...OK

Compressing man pages...OK

Building file list...OK

Building RPM package...OK

NOTE: The package will not be installed

Erasing temporary files...OK

Deleting doc-pak directory...OK

Writing backup package...OK

Deleting temp dir...OK


**********************************************************************

Done. The new package has been saved to

/usr/src/redhat/RPMS/x86_64/ruby-1.8.6-p111.el4.x86_64.rpm
You can install it in your system anytime using:

rpm -i ruby-1.8.6-p111.el4.x86_64.rpm

**********************************************************************
--- (ここまで) ---

これで

/usr/src/redhat/RPMS/x86_64

等にRPMファイルが生成される。

Postfix 特定パターンの宛先を正規表現でまとめて処理

2008/02/04perlfreak.vox.comより転載)

Postfix の main.cf の alias_maps の行を

alias_maps = hash:/etc/postfix/aliases, regexp:/etc/postfix/alias.reg

のように正規表現用のファイルの記述を追加したものに変更する。
alias.reg を作成し、例えばつぎのように記述する。

/^test[0-9]{2}(@.*)?$/ |"/usr/local/bin/hoge.pl"

最後にPostfixを再起動する。
これで、例えばこのメールサーバのドメインが example.com だとして、

test00@example.com
test01@example.com
test02@example.com

test99@example.com

これらにメールを送信すると、hoge.pl が処理を行う。

Postfix で受けたメールに自動返信 (Perl)

2007/10/26perlfreak.vox.comより転載)

vacationというコマンドがあるようだけど、Red Hat Enterprise Linuxにはパッケージがないみたい。
ソースからインストールして使い方を調べるくらいなら、と書いてしまった。
Postfixのaliasesファイルに

hoge: |"/usr/local/bin/auto_reply.pl /var/local/messages/hoge.txt"

のように記述。
返信メッセージファイルは、文字コードがShift_JIS(MS932)、改行コードがCR+LFで、先頭行が表題、以降が本文という体裁になっていることが前提。

===(auto_reply.pl ここから)===
#!/usr/bin/perl -w

use Net::SMTP;
use Encode qw/ from_to encode /;
use MIME::Parser;
use strict;

my $msg_path = $ARGV[0];

# 引数チェック、存在チェック
if ( !$msg_path or $msg_path eq "" ) {
exit;
}
elsif ( !( -e $msg_path ) ) {
exit;
}

# メールの内容をパース
my $parser = new MIME::Parser;
$parser->output_to_core(1);

my $entity = $parser->parse(\*STDIN) or die;

my $from = $entity->head->get('From');
chomp $from;
if ( $from =~ /(foo\.com|MAILER-DAEMON|Postmaster)/i ) {
exit;
}
elsif ( $from =~ /<.+?\@.+?>/ ) {
$from =~ s/^.+<(.+?\@.+?)>.*$/$1/;
}

# returnメールチェック
if ( $entity->is_multipart ) {
my $count = $entity->parts;

for ( my $i = 1; $i < $count; $i++ ) { my $part_entity = $entity->parts( $i );
my $type = $part_entity->head->mime_type;
my $part_from = $part_entity->head->get('From');

if ( $type eq 'message/rfc822' or $part_from =~ /(foo\.com|MAILER-DAEMON|Postmaster)/i ) {
exit;
}
}
}

# メール送信
&_send_mail( $from, $msg_path );

exit;


sub _send_mail() {

my $MAIL_HOST = 'localhost';
my $FROM = 'hoge@foo.com';
my $to = shift;
my $msg_path = shift;

# ファイルデータを取得
open IN, "< $msg_path" or die "Cannot open file: $!\n"; my $buff = do { local $/; };
close IN;

my @message = split( /\r\n/, $buff );
my $subject = shift @message;
my $body = join( "\n", @message );

from_to( $subject, 'cp932', 'iso-2022-jp' );
encode( 'MIME-Header', $subject );
from_to( $body, 'cp932', 'iso-2022-jp' );

#メールヘッダー
my $header = << "HEADER"; From: $FROM To: $to Subject: $subject Mime-Version: 1.0 Content-Type: text/plain; charset = "ISO-2022-JP" Content-Transfer-Encoding: 7bit HEADER

# メールを送信
my $smtp = Net::SMTP->new( $MAIL_HOST, Debug => 1 );
$smtp->mail( $FROM );
$smtp->to( $to );
$smtp->data();
$smtp->datasend( "$header\n" );
$smtp->datasend( "$body\n" );
$smtp->dataend();
$smtp->quit;

return 1;

}

__END__
===(auto_reply.pl ここまで)===

Postfixで受けたメールをプログラムで処理

2007/04/18perlfreak.vox.comより転載)

/etc/postfix/main.cf にある

#default_privs = nobdy

という行を

default_privs = hoge

のように変更し、外部プログラムが実行可能なユーザを指定しておく。
そして、/etc/postfix/aliases を編集し、プログラムで処理したいアカウントを

foo: |"/usr/local/bin/bar"

のように記述する。
あとは、プログラム「bar」の記述次第。
メールの内容は、標準入力で取得可能。
あ、

/etc/init.d/postfix reload
newaliases > /dev/null

はお忘れなく。

Exerb(Rubyスクリプトをexeファイルに)

2007/01/16perlfreak.vox.comより転載)

RubyスクリプトをWindowsのexeファイルにしてくれるExerbなるものがある。
まず、Cygwin環境でインストール。

$ unzip exerb-4.1.0.zip
$ cd exerb-4.1.0
$ ruby setup.rb

以下は、CSVファイルの行を指定された項目でソートし、項目の入れ替えを行なうサンプル。
ファイルは、convert.rb、sort-array.rb、convert.confの3つ。

=== (convert.rb ここから) ===
#!/usr/bin/ruby

require "csv"
require "sort-array"

print "Now working..."

array_file = ARGV

if array_file

array_file.each do |file_name|

if FileTest.size?(file_name) && /(.*)\.csv$/i =~ file_name
to_file = $1 + '_new.csv'
array_input = Array.new

CSV.open(file_name, 'rb') do |row|
array_input <<>

array_output = SortArray.new.convert(array_input)

File.open(to_file, 'wb') do |output|

array_output.each do |array_line|
line = ""

array_line.each do |item|

if line.size == 0
line = item
else
line = line + ',' + item
end
end

line = line + "\r\n"
output.write(line)
end
end
end
end
end

exit
=== (convert.rb ここまで) ===

=== (sort-array.rb ここから) ===
class SortArray
# 設定ファイルの内容を取得してハッシュで返す
def get_conf
conf_file = "convert.conf"
hash_conf = Hash.new

if defined? ExerbRuntime
conf_file = File.dirname(ExerbRuntime.filepath) + "/" + conf_file
end

File.readlines(conf_file).each do |line|
line = line.sub(/(?:\r|\r\n|\n)\z/, "")

if /\a\s*(.*)\s*:\s*(.*)\s*\z/ =~ line
hash_conf["$1"] = "$2"
end
end

return hash_conf
end

# 引数の配列の要素を設定によって並べ替えて返す
def convert(array_input)
@array_input = array_input
hash_conf = self.get_conf
array_keys = Array.new
array_result = Array.new

hash_conf.each do |key,value|
if key == "sort_key"
array_keys = value.split(/\s*,\s*/)
end
end

array_result = @array_input.sort{|y,x| \
[x[array_keys[0].to_i],x[array_keys[1].to_i],x[array_keys[2].to_i]] \
<=> [y[array_keys[0].to_i],y[array_keys[1].to_i],y[array_keys[2].to_i]]}

array_result.each do |line_item|
line_item[1],line_item[2],line_item[3],line_item[4],line_item[5] \
= line_item[3],line_item[5],line_item[1],line_item[2],line_item[4]
end

return array_result
end
end
=== (sort-array.rb ここまで) ===

=== (convert.conf ここから) ===
sort_key:0,3,5
=== (convert.conf ここまで) ===

これらの準備ができたところで

$ mkexy convert.rb
$ exerb convert.exy

はい、これでconvert.exeのできあがり。
Windows上でconvert.exeに6項目以上からなるCSVファイルをドラッグ&ドロップすると、拡張子の前に_newがついた変換後のファイルが生成される。

LinuxからWindowsのSQL ServerへRubyで問合せ

2006/12/26perlfreak.vox.comより転載

Linux から Windows へ ODBC 接続できる環境が整っている前提。

 http://raa.ruby-lang.org/cat.rhtml?category_major=Library;category_minor=Database

ここから ruby-odbc、ruby-dbi をダウンロードする。

$ tar zxvf ruby-odbc-0.9993.tar.gz
$ cd ruby-odbc-0.9993
$ ruby extconf.rb
$ make
$ su
Password:
# make install
# exit
$ cd ..

$ tar zxvf dbi-0.1.0.tar.gz
$ cd dbi-0.1.0
$ ruby setup.rb config --with=dbi,dbd_odbc
$ ruby setup.rb setup
$ su
Password:
# ruby setup.rb install
# exit
$ cd ..

以下、/etc/odbc.ini のデータソース名が hoge、/etc/freetds.conf のサーバ名が hogedb の場合のサンプル。OSの文字コードはUTF-8、データベースから取得する文字列の文字コードはSJIS。

#!/usr/bin/env ruby

require 'dbi'
require 'iconv'

$KCODE = 'UTF8'

DBI.connect('DBI:ODBC:hoge;Server=hogedb;Uid=sa;Pwd=;Database=demo') do |dbh|
dbh.select_all('select * from users') do |row|
p Iconv.iconv("UTF-8","SJIS",row.join(","))
end
end

LinuxマシンからWindowsマシンのSQL Serverへの接続準備(ODBC)

2006/12/26のperlfreak.vox.comより転載)

LinuxマシンからWindowsマシンのSQL Serverへは、ODBCで接続できる。
環境はつぎのとおり。

 LinuxマシンのOS: Red Hat Enterprise Linux 4 ES (x86_64)
 WindowsマシンのOS: Windows Server 2003
 RDBMS: MS SQL Server 2000

以下、Linuxでの作業。
まず、up2date コマンドで unixODBC、unixODBC-devel をインストールする。

 http://dag.wieers.com/packages/

ここから、freetds、freetds-devel のプラットフォームにあったRPMパッケージをダウンロードし、インストールする。

 /etc/odbc.ini

を編集する。

(ここから)
[ODBC Data Sources]
hoge= MS SQL Server

[hoge]
Driver = /usr/lib/libtdsodbc.so
Description = MS SQL Server (hogedb)
Trace = No
Servername = hogedb
(ここまで)

 /etc/freetds.conf

の一部を編集する。文字コードはOS標準、言語はenglishに。

(ここから)
# A typical Microsoft SQL Server 2000 configuration
[hogedb]
host = 192.168.1.2
port = 1433
tds version = 8.0
client charset = UTF-8
language = english
(ここまで)

これで準備OK。

Perl DBIでバイナリデータ

(2006/04/04 mixiの日記より転載)
Windows上のCygwinにDBIとDBD::ODBCを使ってSQL Serverにローカルファイルを入れたり、ファイルデータを取り出したりするサンプル。
DBIとDBD::ODBCは、CPANからソースを持ってきてインストール。
入れるときは

$sth->bind_param(4,$buff,DBI::SQL_LONGVARBINARY);

取り出すときは

$dbh->{LongReadLen} = 10 * 1024 * 1024;
$dbh->{LongTruncOk} = 1;

あたりがミソかも。


---(ここから)---

#!/usr/bin/perl -w

use strict;
use DBI;

my $site_id = $ARGV[0]; # サイトID
my $item_id = $ARGV[1]; # 項目ID
my $extension = $ARGV[2]; # ファイル拡張子
my $dir_path = $ARGV[3]; # ディレクトリパス
my %CONTENT_TYPE = (
"jpg" => "image/jpeg",
"jpeg" => "image/jpeg",
"gif" => "image/gif",
"bmp" => "image/bmp",
"png" => "image/png",
"js" => "text/plain",
"css" => "text/css",
"pdf" => "application/pdf",
"rdf" => "application/rtf",
"doc" => "application/msword",
"xls" => "application/vnd.ms-excel",
"swf" => "application/x-shockwave-flash",
"xml" => "text/xml",
"txt" => "text/plain",
"ico" => "image/x-icon",
"flv" => "application/octet-stream",
"php" => "text/plain",
"htm" => "text/html",
"html" => "text/html",
"csv" => "application/octet-stream"
); # ファイル拡張子とコンテンツタイプ
my %CONTENT_TYPE_2 = (
"image/jpeg" => "jpg",
"image/pjpeg" => "jpg",
"image/gif" => "gif",
"image/bmp" => "bmp",
"image/x-bmp" => "bmp",
"image/png" => "png",
"text/css" => "css",
"application/pdf" => "pdf",
"application/x-pdf" => "pdf",
"application/rtf" => "rtf",
"text/richtext" => "rtf",
"application/msword" => "doc",
"application/vnd.ms-excel" => "xls",
"application/x-shockwave-flash" => "swf",
"text/xml" => "xml",
"text/plain" => "txt",
"image/x-icon" => "ico",
"text/html" => "html"
); # ファイル拡張子とコンテンツタイプ2
my $dataSource = "dbi:ODBC:" .
"driver={SQL Server};" .
"Server=(local);database=db;" .
"Trusted_Connection=no;" .
"AutoTranslate=no;";
my $user = "user";
my $passwd = passwd"";

# DB接続
my $dbh = DBI->connect($dataSource,$user,$passwd) or die $DBI::errstr;
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
$dbh->{LongReadLen} = 10 * 1024 * 1024; # 10MB
$dbh->{LongTruncOk} = 1;

# テーブルにデータを入れる
my $sth = $dbh->prepare("INSERT INTO personal_file (user_id,item_id,content_type,content) VALUES (?,?,?,?)") or die $dbh->errstr;

foreach my $file (@files) {

my $buff = "";
my $file_path = $dir_path . '/' . $file;
my $user_id = (split(/\./, $file))[0];

eval {

# ファイルデータを取得
open IN, "< $file_path"; binmode IN; $buff = do { local $/; }; close IN;

};

if ($@) {

print "$@" . "($user_id)" . "\n";
next;

}

eval {

# データ格納
$sth->bind_param(1,$user_id);
$sth->bind_param(2,$item_id);
$sth->bind_param(3,$CONTENT_TYPE{$extension});
$sth->bind_param(4,$buff,DBI::SQL_LONGVARBINARY);
$sth->execute or die $dbh->errstr;
$dbh->commit or die $dbh->errstr;

};

if ($@) {

print "$@" . "($user_id)" . "\n";
$dbh->rollback or die $dbh->errstr;

}

}

# データの取り出し
$sth = $dbh->prepare("SELECT user_id,content_type,content FROM personal_file WHERE item_id=$item_id") or die $dbh->errstr;
$sth->execute or die $dbh->errstr;

while (my $row = $sth->fetchrow_arrayref) {

my($user_id,$content_type,$content) = @$row;

# 拡張子
my $ext = "";
foreach my $type (keys %CONTENT_TYPE_2) {

if ($content_type eq $type) {

$ext = '.' . $CONTENT_TYPE_2{$type};

}

}

# ファイル出力
my $file_path = $dir_path . '/' . $user_id . $ext;
open OUT, ">> $file_path";
binmode OUT;
print OUT $content;
close OUT;
print $file_path . "\n";

}

# DB切断
$sth->finish;
$dbh->disconnect;


exit;

__END__

---(ここまで)---

火曜日, 1月 20, 2009

会社でBloggerが見られるようになった

会社でBloggerが見られなくなって2年以上が経過していた。早い、、、
この度めでたくBloggerが見られるようになった。
他にVoxというブログを使っていて、そちらはおもに技術系の備忘録になっているから、こちらはそれ以外のものを投稿しようと思う。

金曜日, 11月 03, 2006

OpenVPNのclient接続でパスフレーズ入力なしに

OpenVPNはOpenSLLをベースとしているので、例えばキーがhoge.keyの場合

openssl rsa -in hoge.key -out hoge.key.nopass

のようにして、パスフレーズなしのキーを作成し、 /etc/openvpn/client.confのキーの指定部分を変更すればOK。
つぎの接続時からパスフレーズを入力しなくてよい。

ubuntu 6.10でSylpheed

ubuntu 6.10でSylpheedを使う場合、 /etc/apt/sources.listを編集し、universeの行のコメントアウトをとる。
あとは、sudo apt-get install sylpheedでOK。

水曜日, 11月 01, 2006

ubuntu 6.10

ubuntu 6.10 日本語版 がリリースされたので、CDイメージをダウンロードしてインストール。
CDで起動すると、Live CDになっていて、ubuntuのデスクトップが表示される。うーん、素晴らしい。
で、その状態からインストール。
とてもDebianベースとは思えないくらいよくできたインストーラ。かつてDebianのインストールで苦労したことを思うと、感動すら覚える。
サクっとインストールが済んで、快適なデスクトップが使える。
安定度、ローカライズも問題なし。Debianベースなので当然ながらパッケージ管理もよくできている。
是非お試しあれ。

1600x1200のモニタでubuntuを使う場合

/etc/X11/xorg.conf の一部を下のように編集する。

Section "Monitor"
Identifier "DELL 2007FP"
ModeLine "640x480@60" 25.2 640 656 752 800 480 490 492 525 -hsync -vsync
ModeLine "640x480@75" 31.5 640 656 720 840 480 481 484 500 -hsync -vsync
ModeLine "800x600@60.3" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync
ModeLine "800x600@75" 49.5 800 816 896 1056 600 601 604 625 +hsync +vsync
ModeLine "1024x768@60" 65.0 1024 1048 1184 1344 768 771 777 806 -hsync -vsync
ModeLine " 1024x768@75" 78.8 1024 1040 1136 1312 768 769 772 800 +hsync +vsync
ModeLine "1280x1024@60" 108.0 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync
ModeLine "1280x1024@75 " 135.0 1280 1296 1440 1688 1024 1025 1028 1066 +hsync +vsync
ModeLine "1600x1200@60" 162.00 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
HorizSync 31-81
VertRefresh 56-76
EndSection

Section "Screen"
Identifier "Default Screen"
Device "Intel Corporation 82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device"
Monitor "DELL 2007FP"
DefaultDepth 24
SubSection "Display"
Depth 8
Modes "1600x1200@60" " 1280x1024@75" "1024x768@75" "800x600@75" "640x480@75"
ViewPort 0 0
EndSubSection
SubSection "Display"
Depth 16
Modes "1600x1200@60" "1280x1024@75" "1024x768@75" "800x600@75" "640x480@75"
ViewPort 0 0
EndSubSection
SubSection "Display"
Depth 24
Modes "1600x1200@60" "1280x1024@75" "1024x768@75" "800x600@75" "640x480@75"
ViewPort 0 0
EndSubSection
EndSection

火曜日, 10月 31, 2006

会社からBloggerにアクセス禁止

何でだ!mixiもhatenaもlivedoorもアクセスできるのに。
業務に支障があるっていうなら、すべてのブログサイトへのアクセスを禁止しろ!ってそんなことしたら仕事にならないな。

水曜日, 9月 20, 2006

iBookのバッテリー交換にご用心

私のiBook G4のバッテリーも例の発火のおそれがあるソニー製だった。
アップルの交換プログラムに登録し、やがて交換用バッテリーがやってきた。
ところが、新しいバッテリーにすると、充電できないのだ。しかも、バッテリーを外してACアダプタをつないでも起動できなくなってしまった。
前のバッテリーに戻したが、症状は変わらず。
ctrl + option + shift + 電源ボタンを5秒押したり、command + ctrl + P + R を押したりして、リセット。
それでも変わらない。
shutdownした後もACアダプタをつないだまま寝た。
何と!充電されていた。復活!
これじゃ、怖くて交換できないね。
ほとんどバッテリは使わないから、このまま使い続けるわ。
ご用心。

火曜日, 8月 22, 2006

Fedora Core 5

今更ながら、会社のPCに Fedora Core 5 をインストールしてみた。
ただ今、FedoraのFirefoxを使い、Gmailでタイプ中。
もともとLinuxとWindowsのデュアルブートにしてあって、これまではUbuntuを入れてあった。
Ubuntuは十分快適なのだが、仕事で管理しているサーバがRed Hat Enterprise Linuxなので、何かと確認に便利な気がして変えてみた。
家では、かつてVine Linuxをメインに使っていたが、2年ほど前にiBookを買ってからそちらがメインになってしまった。
会社もほとんどWindowsだが、WebブラウザはFirefox、メーラーはSylpheed、エディタはgvimなので、メインをこちらに変えてもほとんど問題はない。
サーバマシンへの専用接続もOK。
ただ1つ問題なのは、開発環境へのIPSecによるVPN接続。接続相手は、NetScreen。
これさえうまくいけば、デスクトップをLinuxメインにしたいのだが。

月曜日, 5月 22, 2006

MacOS Xでexuberant ctags(VimのTagExplorer用)

MacOS X 10.4 (Tiger)標準のctagsコマンドだと、VimのpluginにTagExplorerを追加してもうまく動作しない。
そこで、exuberant ctags 日本語対応版のページからUNIX版ソースをダウンロード
ダウンロードファイルを展開し、そのディレクトリで

$ ./configure
$ make
$ su
Password:
# make install

とすると、/usr/local/binにctagsができる。
この作業の前提として、開発ツールがインストールされている必要あり(コンパイルするのでgccが必要)。
また、rootユーザのパスワードも設定しておく必要あり。
.vimrcに

let TE_Ctags_Path = '/usr/local/bin/ctags'

を追記。
これでVimでTagExplorerが使える。
.vimrcに

nnoremap <silent> <F8> :TagExplorer<CR>

と追記すると、F8キーでTagExplorerの表示・非表示を切り替えられるので便利。
Vimでプログラミングする場合、あったほうが便利なのは間違いない。

MacOS X(Tiger PPC)でVim7.0

1. MacOS X 10.4 (Tiger)用のVim7.0をダウンロード
2. 1のダウンロードファイルを展開して、Vim.appを/Applicationsにコピー。
3. 名無しさんのサイトからMacOS X Tiger PPC用のVim 6.4.7をダウンロード
4. 3のダウンロードファイルを展開して、Vim.appの下にあるvimrcとgvimrcを2のVim.app/Contents/Resources/vimの下のvimrcとgvimrcに上書きコピー(それ以外の3のファイルは不要)。

うーん、やっぱりVimはいいねえ。

日曜日, 5月 07, 2006

スーパーGT第3戦

富士スピードウェイスーパーGT第3戦5月4日(木)の決勝を見てきた。
実は、自動車レースをサーキットで観戦するのは生まれて初めて。
予測はしていたけれど、それを上回る爆音。耳栓は必須。
コースレイアウトとスピードはグランツーリスモでわかっていたものと大きな違いはなかった。
でも、本物は見ていてとても楽しい。モータースポーツがこんなに楽しいものとは思わなかった。
どのチームが何位とかは二の次。疾走していく車を見てるだけで、理屈抜きに楽しい。
来年は富士スピードウェイでもF1が開催されるらしい。今から楽しみだ。

木曜日, 4月 20, 2006

プロバイダ(2004/07/15 日記鯖より転載)

(ずいぶん長いこと書いていなかった。)
今まで利用していたISPは
BEKKOAME -> AT&T Jens(現JENS SpinNet?) -> Highway
だった。
BEKKOAMEは接続料金固定の草分けで、環境としてはよくなかったけど、料金的に当時は他に選択肢がなかった。
下井草から上井草に引越し、接続料金固定プロバイダも増えたので、バックボーンがしっかりしてそうなAT&Tに変更。
ところが、多摩川を越えたらアクセスポイントがなく、Highwayに変更。
アクセスポイントか。ダイアルアップがなつかしい。
この度、KDDIの光プラスというサービスを利用することになった。
プロバイダは自動的にDION。
そこで、多摩川を越えてからずっとお世話になったHighwayとの契約も今日で終了。
この光プラスというのは、今住んでいる集合住宅まではなんと1Gbpsの光ファイバ、構内はVDSLという方式で今までの銅線を利用して接続するのだそう。
で、契約したのはネット接続と電話。
やがて電話もNTTとの契約が解除される。
トータルの通信費がちょうどHighwayの月額料金分だけ安くなる感じ。
インターネットを利用するようになって約9年。
振り返ると環境の進化に改めて驚くなあ。

甘露の法雨(2003/10/28 日記鯖より転載)

もともと「生長の家」という新興宗教を興した谷口雅春という人が感得して書いた自由詩ということだが、
今は生長の家の「聖教」という名のお経になっているようだ。
「般若心経」の空の教えをわかりやすくし、浄土教の教えも併せ持ったような内容だ。
なかなかよくこなれていると思う。
昔は新興宗教というだけで毛嫌いしていたものだが、先入観を持たなければ、そこに新たな発見があるかもしれない。
もっとも、興味があるのは書かれた内容であって、組織を維持するために存在する宗教団体に関心があるわけではないのだが。

ニューソート(2003/10/17 日記鯖より転載)

ジョセフ・マーフィーの翻訳本は結構好きです。
日本人では、「生長の家」をつくった谷口雅春の書いたものにもよい文が含まれていると思います。
「成功」とか「金持ち」とかいう言葉のイメージが強いニューソートですが、私には「心の平安」という表現や神秘主義的要素がより魅力的に映ります。
「心の平安」を実感できるようになれば、それがすなわち「成功」に他ならず、外見的な成功やお金も後から自然についてくる気がします。
私の中では、念仏も含め「祈り」が最近のキーワードです。

休日出勤(2003/09/23 日記鯖より転載)

今日は、休日出勤。
東京は、とてもよい天気。
他に誰もいないところで仕事をするのも、
割と気分がいいものです。

神秘主義(2003/08/23 日記鯖より転載)

エックハルト。
ガザーリー。
臨済。
法然。
ラーマ・クリシュナが言ったように行き着く先は一所なのか。

Perl DBIでバイナリデータ(2006/04/04 mixiの日記より転載)

Windows上のCygwinにDBIとDBD::ODBCを使ってSQL Serverにローカルファイルを入れたり、ファイルデータを取り出したりするサンプル。
DBIとDBD::ODBCは、CPANからソースを持ってきてインストール。
入れるときは

$sth->bind_param(4,$buff,DBI::SQL_LONGVARBINARY);

取り出すときは

$dbh->{LongReadLen} = 10 * 1024 * 1024;
$dbh->{LongTruncOk} = 1;

あたりがミソかも。


---(ここから)---

#!/usr/bin/perl -w

use strict;
use DBI;

my $site_id = $ARGV[0]; # サイトID
my $item_id = $ARGV[1]; # 項目ID
my $extension = $ARGV[2]; # ファイル拡張子
my $dir_path = $ARGV[3]; # ディレクトリパス
my %CONTENT_TYPE = (
"jpg" => "image/jpeg",
"jpeg" => "image/jpeg",
"gif" => "image/gif",
"bmp" => "image/bmp",
"png" => "image/png",
"js" => "text/plain",
"css" => "text/css",
"pdf" => "application/pdf",
"rdf" => "application/rtf",
"doc" => "application/msword",
"xls" => "application/vnd.ms-excel",
"swf" => "application/x-shockwave-flash",
"xml" => "text/xml",
"txt" => "text/plain",
"ico" => "image/x-icon",
"flv" => "application/octet-stream",
"php" => "text/plain",
"htm" => "text/html",
"html" => "text/html",
"csv" => "application/octet-stream"
); # ファイル拡張子とコンテンツタイプ
my %CONTENT_TYPE_2 = (
"image/jpeg" => "jpg",
"image/pjpeg" => "jpg",
"image/gif" => "gif",
"image/bmp" => "bmp",
"image/x-bmp" => "bmp",
"image/png" => "png",
"text/css" => "css",
"application/pdf" => "pdf",
"application/x-pdf" => "pdf",
"application/rtf" => "rtf",
"text/richtext" => "rtf",
"application/msword" => "doc",
"application/vnd.ms-excel" => "xls",
"application/x-shockwave-flash" => "swf",
"text/xml" => "xml",
"text/plain" => "txt",
"image/x-icon" => "ico",
"text/html" => "html"
); # ファイル拡張子とコンテンツタイプ2
my $dataSource = "dbi:ODBC:" .
"driver={SQL Server};" .
"Server=(local);database=db;" .
"Trusted_Connection=no;" .
"AutoTranslate=no;";
my $user = "user";
my $passwd = passwd"";

# DB接続
my $dbh = DBI->connect($dataSource,$user,$passwd) or die $DBI::errstr;
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
$dbh->{LongReadLen} = 10 * 1024 * 1024; # 10MB
$dbh->{LongTruncOk} = 1;

# テーブルにデータを入れる
my $sth = $dbh->prepare("INSERT INTO personal_file (user_id,item_id,content_type,content) VALUES (?,?,?,?)") or die $dbh->errstr;

foreach my $file (@files) {

my $buff = "";
my $file_path = $dir_path . '/' . $file;
my $user_id = (split(/\./, $file))[0];

eval {

# ファイルデータを取得
open IN, "< $file_path";
binmode IN;
$buff = do { local $/; };
close IN;

};

if ($@) {

print "$@" . "($user_id)" . "\n";
next;

}

eval {

# データ格納
$sth->bind_param(1,$user_id);
$sth->bind_param(2,$item_id);
$sth->bind_param(3,$CONTENT_TYPE{$extension});
$sth->bind_param(4,$buff,DBI::SQL_LONGVARBINARY);
$sth->execute or die $dbh->errstr;
$dbh->commit or die $dbh->errstr;

};

if ($@) {

print "$@" . "($user_id)" . "\n";
$dbh->rollback or die $dbh->errstr;

}

}

# データの取り出し
$sth = $dbh->prepare("SELECT user_id,content_type,content FROM personal_file WHERE item_id=$item_id") or die $dbh->errstr;
$sth->execute or die $dbh->errstr;

while (my $row = $sth->fetchrow_arrayref) {

my($user_id,$content_type,$content) = @$row;

# 拡張子
my $ext = "";
foreach my $type (keys %CONTENT_TYPE_2) {

if ($content_type eq $type) {

$ext = '.' . $CONTENT_TYPE_2{$type};

}

}

# ファイル出力
my $file_path = $dir_path . '/' . $user_id . $ext;
open OUT, ">> $file_path";
binmode OUT;
print OUT $content;
close OUT;
print $file_path . "\n";

}

# DB切断
$sth->finish;
$dbh->disconnect;


exit;

__END__

---(ここまで)---

mixiって何だろう(2006/04/01 mixiの日記より転載)

昨日会社の人に招待してもらい、mixiの会員になった。
YAPC::Asiaでmixiの開発責任者の方の話を聴いて、どのようなことができるサービスなのか興味が湧いたのさ。
この日記も「mixiの使い方」を見て、いろいろ操作している一環。
ところで、今夜は夜勤and会社の近所のホテルにお泊り。
ま、何もないでしょう。
システムを担当していると仕方ないのかな。

水曜日, 4月 19, 2006

ubuntu

Debian系のLinuxディストリビューションubuntu(ウブントゥ)の日本語版を会社のデスクトップPCにインストールしてみた。
イイ。かなりイイ。
これまでは、昨年仕事上必要があって、Red Hat Enterprise Linuxと互換性のある(正確にはそのソースをbuildしてつくられた)CentOSが入っていた。Windows2000とデュアルブート。
ただ、もうローカルで動作確認の必要もないので、そのパーティションを利用してubuntuを入れてみたのさ。
Fedoraのようにグラフィカルなインストーラではないが、Debianのよりはずっと簡単。
パッケージ管理はDebianと同様なので、とても楽チン。
さすがDistroWatchでtopなだけのことはあります。

必要最低限のものだけインストールされて、でもデスクトップとしては完成度が高くて、追加したいものは後からパッケージマネージャで自分で好きなだけ入れればいい。ってところがイイのかな。

今までは、パッケージマネージャがRPMだけどapt-getが使えるVine Linuxがお気に入りだったけど、これからはubuntuかな。

水曜日, 4月 12, 2006

今どきのWeb上のサービス

このところ、YAPC::Asiaの影響もあって、mixi、はてな、Bloglinesを使いはじめた。
とはいっても、会員登録をしましたというだけで、それぞれのサービス内容全体を把握しているわけではない。
多くの方からすると、何を今更なのだろうが、何事も「はじめるのに遅すぎることはない」のさ。

日曜日, 3月 19, 2006

FlockというWebブラウザ

この投稿は、FlockというGekkoをエンジンとするWeb2.0時代のWebブラウザを使って行ってみた。

Bloggerの情報を予めブラウザで設定しておき、Bloggerの編集ページにアクセスせずに投稿できた。

複数のブログを使っている人には重宝するかも。

月曜日, 2月 27, 2006

YAPC::Asia 2006 Tokyoのチケットをゲット!

先ほど追加販売されたYAPC::Asia 2006 Tokyoのチケットを会社近くのローソンで購入できた。
正直嬉しい。
イベントの存在はチケット販売前から知っていたが、ボーっとしてる間にチケットは販売開始され、気づいたときには売り切れていた。
年度末の微妙な時期だが、Larry Wallの講演は是非聴きたい。といっても、英語はよく聞き取れないが。

月曜日, 12月 05, 2005

インターネットマガジン2006年1月号

今発売中のインターネットマガジンの記事は面白そう。
Web2.0の特集のようだ。帰りに買おうか。
ところで、インターネットマガジンっていつからあんなに薄くなったんだろう。

日曜日, 8月 21, 2005

今夜は満月

東京は今日も晴れ。空には綺麗な満月が輝いている。
月や太陽のような星たちも、長い期間で考えると変化していることには
違いないだろうけど、人の一生の間くらいでは不変に思える。
いくら感覚器官がとらえるものがマーヤーだとしても、どんなときもど
んなところでも同じように眼に映るものは心を落ち着かせる。
坂本九じゃないけれど、もっと上を向いて歩こう。