2008年8月24日日曜日

find の正規表現を使い検索したファイルにコマンド実行するには

FreeBSD
bash

な環境でfindを使い正規表現で検索するには

"apple"を含むファイル名を検索し表示する

  find . -regex ".*apple.*" -print

"apple"を含むファイル名の最後に"red"を付ける

  find . -regex ".*apple.*" -exec mv {}red ¥;

"apple"を含むファイル名のファイルを削除する

  find . -regex ".*apple.*" -exec rm {} ¥;


shellによっては"¥"が不要だったりするみたいです。

FreeBSD man find

2008年8月19日火曜日

SELECT WHERE の話

MySQLで、いままで気にしていなかったのですが相関問い合わせを使って初めて気がついたこと。

たとえば、

SELECT * FROM 記事 WHERE 記事.id=2122

のようなSQLを実行したとき、データベースサーバー側では、
2122をハッシュなどで記事.idから高速検索するという考え方よりも、
実際の動作で考えると、
記事.idを順に最初から調べていき、

記事.id=2122が成り立つものを返す。

というのも
副問い合わせでツリー構造になっている掲示板で考えたとき、
親記事でコメントのついていない記事を検索するには
つぎのような副問い合わせで検索できます。

SELECT * FROM 記事 as A
WHERE 0=(
SELECT COUNT(*) FROM 記事 AS B
WHERE 記事.id = B.parentid
)

つまりWHERE 0=... は条件文としてしか評価していないのです。


ps.
実際にはオプティマイザがあるので、

WHERE 記事.id=2122

はハッシュなんでしょうけどね。

2008年8月17日日曜日

No such file or directory: Failed to enable the 'httpready' Accept Filter

再びApache2.2をインストールしてみたらこんな警告が出た。

#apachectl start

[Sun Aug 17 18:14:46 2008] [warn] (2)No such file or directory: Failed to enable the 'httpready' Accept Filter

と警告が表示される。

グーグル先生に聞いてみたら。ネットにこんな記述が見つかりました。

FreeBSDの場合、accf_http.koというFreeBSDのカーネルモジュールが必要ということでした。

起動時にこれを組み込むには

[/boot/loader.conf]
accf_http_load="YES"

を加えればいいそうです。


というか、ビルド時にコンパイルオプションで、
Accept Filterを無効にしておけばよかったような。。。気もする。。

2008年8月4日月曜日

FreeBSDで ImageMagick... RMagick2 のインストール

FreeBSDにRMagickのインストール

環境
FreeBSD 6.3-RELEASE
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-freebsd6]
ImageMagick-nox11 6.4.1.8
RMagick 2.5.2

RMagickはImageMagicのRubyインターフェースです。
JPEG,JPEG2000,PNG,GIF,TIFFファイルの入出力に対応し、
画像サイズ変更や図形描画、文字の表示を行うことが出来ます。
Web画像のサムネイルの自動生成などが出来るようになります。


まずImageMagickをインストールします。

#cd /usr/ports/graphics/ImageMagick/
#make install

l
l Options for ImageMagick-nox11 6.4.1.8
l +------------------------------------------------------------------
l l[ ] X11 X11 support
l l[X] IMAGEMAGICK_TESTS Run bundled self-tests after build
l l[ ] IMAGEMAGICK_OPENMP Enable OpenMP for SMP
l l[X] IMAGEMAGICK_PERL Perl support
l l[ ] IMAGEMAGICK_MODULES Modules support (broken)
l l[X] IMAGEMAGICK_BZLIB Bzlib support
l l[X] IMAGEMAGICK_16BIT_PIXEL 16bit pixel support
l l[ ] IMAGEMAGICK_DJVU DJVU format support (needs threads)
l l[X] IMAGEMAGICK_LCMS LCMS support
l l[ ] IMAGEMAGICK_HDRI High Dynamic Range Images (HDRI)
l l[X] IMAGEMAGICK_TTF Freetype support
l l[X] IMAGEMAGICK_FONTCONFIG Fontconfig support
l l[X] IMAGEMAGICK_JPEG JPG format support
l l[ ] IMAGEMAGICK_OPENEXR OpenEXR support (needs threads)
l l[X] IMAGEMAGICK_PNG PNG format support
l +------------------------------------------------------------------
l [ OK ] Cancel
+------------------------------------------------------------------

サーバーで利用を考えているのでX11とAcrobat PDFとあまり使われなくなったTIFFサポートをはずしました。

[ ]X11
[ ]IMAGEMAGICK_TIFF
[ ]IMAGEMAGICK_PDF

でOKを選択
続いてRMagicをインストールします。
Ruby gem からインストールするので、先にgemをインストールしておいてください。
gemからRMagicをインストールします。


# gem install rmagick

ただこれで
Bulk updating Gem source index for: http://gems.rubyforge.org
Building native extensions. This could take a while...
Successfully installed rmagick-X.Y.Z

とメッセージが出てもインストールできていないことがあるらしい。
gemではインストールが成功したかは確認できないのが原因。
そこで、irbでインストールの状況を確認します。

# irb -rubygems -r RMagick
irb(main):001:0> puts Magick::Long_version

This is RMagick 2.5.2 ($Date: 2008/07/13 21:18:28 $) Copyright (C) 2008 by Timothy P. Hunter
Built with ImageMagick 6.4.1 08/03/08 Q16 http://www.imagemagick.org
Built for ruby 1.8.6
Web page: http://rmagick.rubyforge.org
Email: rmagick@rubyforge.org
=> nil

のように表示が出れば成功しています。
irbを終了します。

irb(main):002:0> exit

/usr/local/lib/ruby/gems/1.8/gems/rmagick-2.5.2
にインストールされ、そこにREADME.htmlが生成されます。
この説明書をよみながら次の手順を進めていきます。
バージョン番号は自分でインストールしたバージョンに読み替えてください。

#cd /usr/local/lib/ruby/gems/1.8/gems/rmagick-2.5.2

RMagicのテスト
#ruby setup.rb
---> lib
---> lib/rvg
<--- lib/rvg
<--- lib
---> ext
---> ext/RMagick
/usr/local/bin/ruby18 /usr/local/lib/ruby/gems/1.8/gems/rmagick-2.5.2/ext/RMagick/extconf.rb
checking for Ruby version >= 1.8.2... yes
checking for cc... yes
checking for Magick-config... yes
checking for ImageMagick version >= 6.3.0... yes
checking for HDRI disabled version of ImageMagick... yes
checking for stdint.h... yes
checking for sys/types.h... yes
checking for magick/MagickCore.h... yes
checking for InitializeMagick() in -lMagick... no
checking for InitializeMagick() in -lMagickCore... yes
checking for snprintf() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,magick/MagickCore.h... yes
checking for AcquireQuantumMemory() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,magick/MagickCore.h... yes
:
:
/usr/local/bin/ruby18 -I /usr/local/lib/ruby/gems/1.8/gems/rmagick-2.5.2/./lib -I /usr/local/lib/ruby/gems/1.8/gems/rmagick-2.5.2/./ext/RMagick writing_mode02.rb (example 185 of 185)
#

のように表示が出て、サンプルプログラムの実行が行われます。
エラーが5個以内なら正常終了します。

つづいて
#ruby setup.rb install
rm -f InstalledFiles
---> lib
mkdir -p /usr/local/lib/ruby/site_ruby/1.8
install RMagick.rb /usr/local/lib/ruby/site_ruby/1.8/
install RMagick2.so /usr/local/lib/ruby/site_ruby/1.8/
---> lib/rvg
mkdir -p /usr/local/lib/ruby/site_ruby/1.8/rvg
install stretchable.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install rvg.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install deep_equal.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install transformable.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install embellishable.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install describable.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install units.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install paint.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install container.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install clippath.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install pathdata.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install text.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install stylable.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
install misc.rb /usr/local/lib/ruby/site_ruby/1.8/rvg
<--- lib/rvg
<--- lib
---> ext
---> ext/RMagick
mkdir -p /usr/local/lib/ruby/site_ruby/1.8/i386-freebsd6
install RMagick2.so /usr/local/lib/ruby/site_ruby/1.8/i386-freebsd6/.
<--- ext/RMagick
<--- ext

post-install.rb: installing documentation...
mkdir -p /usr/local/share/RMagick
mkdir -p /usr/local/share/RMagick/scripts
mkdir -p /usr/local/share/RMagick/ex
mkdir -p /usr/local/share/RMagick/ex/images
mkdir -p /usr/local/share/RMagick/css

これで完了。

動作確認
100x100ピクセルの赤色単色のgifファイルの生成を行ってみます。

[red.rb]
require 'RMagick'
include Magick
# Create a 100x100 red image.
f = Image.new(100,100) { self.background_color = "red" }
f.write("red.gif")
exit

#ruby red.rb

でred.gifが生成され表示してみて確認し完了!


ドキュメントのインストール先
/usr/local/lib/ruby/gems/1.8/gems/rmagick-2.5.2/doc/index.html

RMagickのインストール先
/usr/local/lib/ruby/gems/1.8/gems/rmagick-2.5.2/lib/

ご参考:
RMagic
http://studio.imagemagick.org/RMagick/doc/

ImageMagic
http://www.imagemagick.org/script/index.php