goo blog サービス終了のお知らせ 

dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

16進ダンプ

2011-02-15 23:43:35 | linux
テキストファイルなどを16進ダンプする方法の備忘録です。

$ od -tx1z {ファイル名}
0000000 74 65 73 74 0a e3 83 86 e3 82 b9 e3 83 88 0a >test...........<
0000017

zをつけない場合には、右側の文字が表示されません。

$ od -tx1 {ファイル名}
0000000 74 65 73 74 0a e3 83 86 e3 82 b9 e3 83 88 0a
0000017


rubyのCGIでアップロードされたファイルを読み込む

2011-02-09 22:07:52 | linux
rubyのCGIで、アップロードされたファイルを読み込む方法の備忘録です。

cgi = CGI.new
file = cgi.params['file_name'][0]

file でアップロードされたファイルのデータを扱うことができます。
アップロードされたファイルのサイズが 10240 バイト未満の場合には、StringIO、10240 バイト以上の場合には Tempfile のオブジェクトになります。

もし、両方とも Tempfile で扱いたい場合には、以下のようにして StringIO のデータをTempfile に書き込んでしまえばよいでしょう。

if file.class == StringIO
tf = Tempfile.new
tf.print(file_data.read)
tf.rewind
file = tf
end

rpmのオプション

2011-01-20 23:22:28 | linux
rpm コマンドのオプションの備忘録。
毎回同じことを調べているような気がするので。。。

■rpm が依存しているパッケージを調べる
$ rpm -qpR rubygems-1.3.5-1.el5.noarch.rpm
/usr/bin/ruby
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(VersionedDependencies) <= 3.0.3-1
ruby(abi) = 1.8
ruby-rdoc


■インストール可能かのテスト
$ rpm -ivh --test rubygems-1.3.5-1.el5.noarch.rpm
エラー: 依存性の欠如:
/usr/bin/ruby は rubygems-1.3.5-1.el5.noarch に必要とされています
ruby-rdoc は rubygems-1.3.5-1.el5.noarch に必要とされています


■依存関係を無視してインストール
$ sudo rpm -ivh --nodeps rubygems-1.3.5-1.el5.noarch.rpm
[sudo] password for xxx:
準備中... ########################################### [100%]
1:rubygems ########################################### [100%]

mysqlの正規表現

2010-12-22 23:45:51 | linux
mysqlのregexpをいろいろ試してみました。

mysql> select 'abcd' regexp '(b|bc)';
+------------------------+
| 'abcd' regexp '(b|bc)' |
+------------------------+
| 1 |
+------------------------+
1 row in set (0.00 sec)


この↓表記方法だとエラーになります。
mysql> select 'abcd' regexp 'b(|c)';
ERROR 1139 (42000): Got error 'empty (sub)expression' from regexp

たぶん普通の文字列ならマッチしないであろう[.NUL.]を使えばエラーになりません。
メリットがあるかは別として。
mysql> select 'abcd' regexp 'b([.NUL.]|c)';
+------------------------------+
| 'abcd' regexp 'b([.NUL.]|c)' |
+------------------------------+
| 1 |
+------------------------------+
1 row in set (0.00 sec)





rubyのファイナライザ

2010-12-10 23:37:42 | linux
ObjectShare.define_finalizerを使って、クラスの終期化処理をしてみました。

■プログラム

class TestObjectShare
@@obj = nil

private
def initialize()
print("初期化処理\n")
end

def self.finalizer()
proc do
print("終期化処理\n")
end
end

def self.do_something()
if ! @@obj
@@obj = self.new
ObjectSpace.define_finalizer(@@obj, TestObjectShare.finalizer)
end

print("メソッド実行\n")
end
end


TestObjectShare.do_something

■実行結果
初期化処理
メソッド実行
終期化処理


プログラム終了時に終期化処理が行われています。

flashからのURL抽出

2010-12-03 23:33:21 | linux
flashファイルからURLを抽出する方法です。

■flasmのインストール
flasmはSWFファイルの逆アセンブラです。

% gunzip flasm16src.zip
% make
% sudo make install

■flashファイルからのURL抽出
% flasm XXX.swf
で XXX.flm が作成されます。

% cat XXX.flm
...
defineMovieClip 171 // total frames: 55

frame 0
push 'URL11'
push 'http://xxx.co.jp/'
...

push 'http://...' となっている行を抽出すれば、URLを抽出できますね。



flashからのテキスト抽出(プログラム編)

2010-12-02 00:40:21 | linux
SWFファイルからテキストを抽出するプログラムです。
perlプログラムの標準入力にSWFファイルを入力すると、
標準出力にSWFから抽出されたテキストを出力します。


#!/usr/bin/perl
#
# SWF からテキストを抽出
#

use strict;
no encoding;
use warnings;
use SWF;
use SWF::Parser;
use SWF::Element;

sub header_callback
{
my($self, $signature, $version, $length,
$xmin, $ymin, $xmax, $ymax, $framerate, $framecount) = @_;
}

sub tag_callback_text
{
my($self, $tag_no, $length, $datastream) = @_;

# SWF::Element::Tag生成
my $e;
eval {
$e = SWF::Element::Tag->new(Tag => $tag_no, Length => $length);
$e->unpack($datastream);
};
if ($@) {
STDERR->print($@);
return;
}

# テキストを出力
if (eval { $e->isa('SWF::Element::Tag::DefineEditText') }) {
print($e->InitialText);
}
}


#
# メイン
#
my $parser = SWF::Parser->new('header-callback' => \&header_callback,
'tag-callback' => \&tag_callback_text);

# 読み込み
my $data = '';
while (my $line = <STDIN>) { $data .= $line; }

$parser->parse($data);

flashからのテキスト抽出(インストール編)

2010-12-01 00:41:03 | linux
flashからテキストを抽出する目的で、必要なものをインストールします。

■1. ming のインストール
flashムービーを生成するためのライブラリ。

% gtar zxvf ming-0.3.0.tar.gz
% cd ming-0.3.0
% ./configure
% make
% sudo make install


■2. ming-perl のインストール

% gtar zxvf ming-perl-0.3.0.tar.gz
ming-0.3.0/perl_ext にファイルが展開される
% cd ming-0.3.0/perl_ext
% perl Makefile.PL
% make
% sudo make install


■3. Data-TemporaryBag.pm のインストール
% gtar zxvf Data-TemporaryBag-0.09.tar.gz
% cd Data-TemporaryBag-0.09
% perl Makefile.PL
% make
% sudo make install


■4. SWF-File.pm のインストール
% gtar zxvf SWF-File-0.42.tar.gz
% cd SWF-File-0.42
% perl Makefile.PL
% make
% sudo make install

rpmのファイル確認

2010-11-25 01:01:28 | linux
rpmに収録されているファイルは以下で確認できます。

% rpm2cpio {rpmファイル} | cpio --list


rpmに収録されているファイルを抽出するには以下のようにします。

% rpm2cpio {rpmファイル} | cpio -id

カレントディレクトリにファイルが展開されます。