Ruby言語やLinuxのネタが多いです。
October 19, 2004
■ [Ruby] pseudoiconv.rb
WindowsのOne-Click Installer等の一部の環境ってiconvが入ってなかったりする。
#最新版ならば入ってるかも。
そんな環境でもRuby/GLib2をインストールできる環境(つまりはWin32の環境なんだけどさ)用にpseudoiconv.rbというGLib.convertを使ってIconv.iconvをシミュレートするスクリプトを書いてみた。
エラーは全部Iconv::IllegalSequenceになっちゃうんだけどね。
begin
require 'iconv'
rescue LoadError
begin
require 'glib2'
module Iconv
class IllegalSequence < ArgumentError; end
module_function
def iconv(to, from, str)
begin
GLib.convert(str, to, from).split(//)
rescue
raise IllegalSequence.new(str)
end
end
end
rescue LoadError
module Iconv
module_function
def iconv(to, from, str)
warn "Iconv was not found." if $DEBUG
str.split(//)
end
end
end
end
■ ちなみに次期リリース版のRuby/GLib2では以下のようにもうちょっとだけエラー処理をIconvに近づけることができる予定。
begin
require 'iconv'
rescue LoadError
begin
require 'glib2'
module Iconv
class InvalidEncoding < ArgumentError; end
class IllegalSequence < ArgumentError; end
class InvalidCharacter < ArgumentError; end
module_function
def iconv(to, from, str)
begin
GLib.convert(str, to, from).split(//)
rescue GLib::ConvertError => e
case e.code
when GLib::ConvertError::NO_CONVERSION
raise InvalidEncoding.new(str)
when GLib::ConvertError::ILLEGAL_SEQUENCE
raise IllegalSequence.new(str)
else
raise InvalidCharacter.new(str)
end
end
end
end
rescue LoadError
module Iconv
module_function
def iconv(to, from, str)
warn "Iconv was not found." if $DEBUG
str.split(//)
end
end
end
end
■ require 'iconv'しているアプリは、iconvの代わりにこれを使っておけば、もしかしたらちょっとだけアプリケーションの適用プラットフォームが広がるかもしれない。
■ さらにnkfやuconv等を試すようなコードにすれば日本語関連では結構なところまでいけそうな気がする。uconvはともかくnkfはRubyに標準添付されてるしね。
■ 次のRuby-GetText-Packageはこの仕組みを利用しようかと考え中。
October 19, 2005
■ [Misc] Understanding and Customizing the Apache HTTP SELinux Policy (Beta Document)
昨日の続きでちょっと調べてみたところ、Fedoraのサイトに上記のナイスなドキュメントを見つけた。
Using Other Types To Lock Down CGI Scriptsを読んで試したところ、昨日のDir.globの件は、httpd_sys_script_exec_tの代わりにhttpd_sys_script_ro_tと設定しても良いことがわかった。なるほど。
■ [Misc] SELinux上のApacheをPort 8088でListenさせたい
httpd.confにListen 8088を追加するだけではダメなのね....。httpdが起動しやしない(-_-;)。
■ /etc/selinux/targeted/src/policy/net_contextsというファイルを編集して、「portcon tcp 8088 system_u:object_r:http_port_t」という行を追加、そのディレクトリ内でmake loadとしてhttpdを再起動したらようやくアクセスできるようになった。これで良いのかな?
$ su - Password: # cd /etc/selinux/targeted/src/policy/ # vi net_contexts (編集) # make load # /etc/init.d/httpd restart
■ 一つのターゲットを設定する際に、SELinuxの設定とApacheの設定をそれぞれ別々にしなければいけないってのは結構苦痛だな....。
それがセキュア、ってことなのかな。
■ [Ruby-GNOME2] GnomeFiles
GnomeFilesのRuby-GNOME2エントリがアップデートされました。voteよろしく!もちろんratingは10で!
■ [Ruby] open-uri, Easy-to-Use and Extensible Virtual File System
方々で話題になっている田中哲さんのRubyConf2005プレゼン資料。とても感銘を受けた。
この文章を今のRuby-GetText-Packageに当てはめて考えるといろいろと考えることも多そうだ。特に、毎回include GetTextするのってどうよ、とか。いっそ、Kernelレベルにメソッド追加しちゃおうかな。そっちの方が圧倒的に使い勝手良いしね。
でも、一方で短すぎる名前は良くない、とも。よく使われてるなら良いよ、ということなら、GetTextのメソッド名はRuby以外でも使われているという意味では「よく使われてる」って言っちゃっても良いかな。
うーん、悩ましいなぁ。

▲ なかだ [Iconvのエラーは、一括して捕まえられるようにIconv::Failureをincludeしてます。]
▲ むとぽん [なるほど。includeしてるかどうかまでは意識してませんでした。情報ありがとうございます。]