趣味のプログラム工房

2011年09月

WEB アプリケーションサーバ 文字化け発生問題

WindowsサーバにおいてColdfusion(アプリケーションサーバ)とIIS(WEBサーバ)の組み合わせに文字コードSJISでWEBサイトを作っているのですが、、、文字化けが発生。

今回のミソはWindowsで動かしているということで、
WindowsのSJISはSJISであってSJISでない。
正確にはWindows-31Jという文字コードなのです。

そのため、特に内部エンコードにUnicodeを使用しているようなJava系のWEBサーバ・アプリケーションサーバにおいては文字化けが発生するようです。

ソース(SJIS正しくはWindows-31J)→アプリケーションサーバ(Unicode:普通のSJISとして解釈し文字化けが①)→HTML(SJIS)→ブラウザ(Windows-31Jで解釈するため文字化け②)

という現象が起こるみたいなんですよね。
要するに2箇所で文字化けが起こっちゃってるんです。

まず、①を回避するため、Coldfusionでは内部エンコードを指定します。
<cfprocessingdirective pageencoding="Windows-31J">


次に②を回避するために、出力する文字コードを指定します。
<cfcontent type="text/html; charset=Windows-31J">


CFでWindows-31Jを指定するなんてマニュアルに無いんですよね、、、


あとは、HTMLのメタタグの部分は、SJISでもWindows-31Jでもどちらでもいいです。(クライアントがWindowsであれば、どちらにしてもWindows-31Jで解釈する)



2011年09月07日


USBへCentOS6インストール

記録メディアUSBメモリのみ(SSD、HDD、光メディア無し)というPCを作ったので、そこにCentOSを入れてみた!時のメモ


USBを2つ用意し、ひとつはインストール元(4GB)、もうひとつはインストール先(8GB)とする。

まず、インストール用のISOファイルをダウンロードしてくるのだが、これが4GBちかい容量がある。
しかし、これでは4GのUSBに入らない。

そこで、今回はネットワークインストール機能を使い、インターネット経由でインストールすることにしました。

とりあえず、ネットワークインストール用のイメージをダウンロード
ファイル名はこんな感じ→CentOS-6.0-i386-netinstall.iso
さらに、これをUSB bootできるようにしなければいけないのだが、ソフトによってうまくブートできないみたい。

とりあえず、いくつかのソフトを試したが、唯一成功したのが「DDforWindows」というソフト。
そのほか、Universal-USB、unetbootinといったソフトはダメでした。

あとは、USBからインストールするだけ。


インストール、、いろいろとソフトの更新があったので、アップデートしたら、ブートしなくなりましたが、、、なんかGRUBに変な設定が追加されたらしく設定を削除したら元に戻りました。
更新前にGRUBの設定をバックアップしておくとよいかも。
2011年09月23日


Ububtu11.04をDLNAレンダラー化

このたび、キューブ型のホームサーバ用のマシンを組んだので、それを音楽再生用のマシンにしてDLNAを使いiPhoneから操作できるようにしようとセットアップしました。

でも、Linuxマシンをメディアサーバ化するソフトはそれなりにあるみたいですが、レンダラー化するソフトってなかなかいいのがないんですね。
使いやすいDLNAクライアントすらない状態。

レンダラーとして唯一まともに動いたのがXBMCでした。
いわゆるメディアセンター系のソフトでレンダラーとしてだけ使えればいい自分としてはいささかオーバースペック。CPUも使いすぎなわけです。

また、iPhoneからの操作性がいまいち。
ここら辺はiPhoneで使ってるDLNAクライアントの操作性もあると思うのですが、iPhoneがスリープ状態になると次の曲が再生されないのはいただけない。
いろいろ試したなかでiPhoneで一番使いやすいDLNAクライアントのPlugPlayerからの操作が特にダメ。
8playerでは、スリープボタンを押さなければいいのですが、PlugPlayerでは、無操作時間によるスリープでも次曲を再生してくれません。。。


ほかに、何かよさそうなレンダラーソフトは無いかとUbuntuのSynapicパッケージマネージャを見ていると、、、あるじゃないですか!!
それが「rygel」というソフトです。
「rygel」に「rygel-playbin」というMedia Renderer Pluginを入れることで、いい感じに動きます!!と思ったのですが、、これがまた微妙にうまくいかない。
「rygel」は軽くていいソフトなのですが、、、肝心のPlugPlayerで動かない。
レンダラーとして認識してくれません。
8playerからは問題なく動きます。


何が悪いんだ、、、


とりあえず、DLNA間でやりとりしている設定ファイル(XML)を見ることにします。
設定ファイルの場所は
~/.config/Rygel/Playbin.xml (/home/ユーザ/.config/Rygel/Playbin.xml)

とりあえず、いろいろ試してわかったことは、
deviceTypeの値は「1」が良さそうです。(デフォルトは2になってます。)
ということで、
urn:schemas-upnp-org:device:MediaRenderer:2を
urn:schemas-upnp-org:device:MediaRenderer:1に変更します。

また、合わせて、
serviceTypeの部分も1から2へ変更します。

これで、PlugPlayerで動くようになります!!、、、が!
この、rygel-playbinというソフト、起動の度に設定ファイルが初期化される!!
なので、一度動くようになっても、再起動すると動かなくなりますorz
しかも、設定変更済みの設定ファイルを読み込み専用とするとrygel-playbinが起動しません。

なので、rygelを起動させるスクリプトで、設定ファイルを設定済みファイルで上書きすることにしました。

boot起動スクリプトより抜粋
/etc/init.d/rygel

sudo -u ユーザ rygel &
sleep 10
cat _Playbin.xml>Playbin.xml
exit 0
;;


てかんじ。
設定ファイルがユーザのディレクトリにあるため、sudo -u で任意のユーザ権限で実行するようにします。
また、sleepは起動待ちです。
&によるバックグラウンド実行にしているため、プロセス起動完了前に設定ファイルを上書きしても意味がないためです。
で、設定ファイルの上書きですが、cpコマンドではなくcatで行っているのは、何となくです。
更新日時も変えた方がいいのかなーって。

これでいい感じのネットワークオーディオプレイヤーシステムの完成!
(ただし、今の状態では音楽の再生にはiphoneが必須です。あくまでもレンダラーのため)
iphoneからの操作でパソコンで音楽が流せます!
2011年09月27日