趣味のプログラム工房

プログラム

RHEL(LINUX)でSJISを利用!

Red Hat Enterprise LinuxSJISを使おうとすると、警告が出ます。

# localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS
character map `SHIFT_JIS'' is not ASCII compatible, locale not ISO
compliant

ご存知のように、LinuxSJISは通常サポートされていません。
が、実は、CP932を指定した場合は、警告が表示されない。

参考:http://blog.tomoattori.info/article/152612890.html


というのも、単に「SJIS」はサポートされないというのは、奥が深く、
例えば、同じSJIS系の正統Shift JISとCP932(MSの拡張版)とでも扱いが違う。


[日本 OSS 推進フォーラム]という何となく権威がありそうなところが出している
『Linux マイグレーションガイド』の中で、
特に、正統 Shift JIS ロケール sjis では、 0x5C=U+00A5 というマッピングのために、オープン系プログラム(C言語、Java など)の動作が保証されない。cp932 などでは問題ない。

とも記載されており、CP932だと、問題が少ないことがわかる。

あと、gcc(C言語)においても、コンパイルの際は、
-finput-charset=cp932 -fexec-charset=cp932
のオプションを指定するので、やっぱりCP932がよい。

というわけで、SJISを使うなら、CP932を使いましょうということですね。
というか、わざわざ正統なSJISを使うほうが問題多い気が、、、SJISを使いたいという場合は、正統なSJISではなくCP932を使っているほうが多そう。



2018年11月03日


Android Studio webviewでJavascriptが動かない

スマホ用に特定のWEBページをワンタップで開くアプリを作りたいと試行錯誤。
webviewを使って、アプリにURLをハードコーディングしたらいいかなぁとやってたんですが、ページが表示されない。

正直原因は不明。
おそらく、Javascriptの部分で、ソースが別ファイルになっているからとか、理由はある気がするのですが、結局解決しませんでした。
(サイト側に問題がある場合は解決不能!)


いろいろ解決策を探していて、見つけたのが、「XWalkView」というモジュール。
使いにくい、webviewを使うのはあきらめて、別のを使おうということですね!

使い方は、
build.gradleに下記を追加

repositories {
maven {
url 'https://download.01.org/crosswalk/releases/crosswalk/android/maven2'
}
}

dependencies {
implementation 'org.xwalk:xwalk_core_library:23.53.589.4' //追加
}


XWalkViewを紹介している他のサイトでは
implementation 'org.xwalk:xwalk_core_libraryではなく、
compile 'org.xwalk:xwalk_core_library:~~を追加するように書いてあるのですが、「implementation」と記載するのが正解。
compile は古い書き方みたいです。あと、バージョンにも注意。

これを記載した後に、syncをかけると、ライブラリが読み込まれ使えるようになります。

あとは、他のサイトに書かれているように、webviewの代わりに使えばOK。
ビルドされたパッケージが50MB近くになる以外は問題ないです。(webviewだと2MBもいかないのにw)

とりあえず、満足いく結果になりました。
これで、スマートディスプレイっぽいものが作れるぞ!(ぉ

2018年08月30日


PostScriptからPDFを作成

PostScriptのファイルからPDFファイルを作成するには、、、

まずは、これがないと始まらないghostscript
https://ghostscript.com/download/gsdnld.html

これをダウンロードし、普通にインストール。
デフォルトだと、「C:/Program Files/gs/gs9.21/bin」にプログラムがインストールされるので、ここにパスを通します。
というわけで、環境変数にパスを追加。

これで、準備が整いました。
あとは、C:/Program Files/gs/gs9.21/libにあるバッチからコマンドを実行するだけなのですが、、、
ps2pdf -dNOSAFER f:/test.ps
「-dNOSAFER」のオプションが結構肝のようです。
これがないと、うまく変換がされない。
変換されても、日本語が文字化けするという現象が発生します。
これに結構ハマりました。。。

いろいろなサイトを参考にしていると、「cidfmap」を編集しないと文字化けするとかという情報もありましたが、私は特に何もしなくても大丈夫でした。

とりあえず、ここにあるサンプルは無事変換完了。
あと、下はEUCで保存する必要がります。
最初、適当にメモ帳でそのまま保存したら見事に文字化け(笑)
http://d.hatena.ne.jp/sirocco/20120821/1345554887



2017年04月27日


UPNP(DLNA) メディアコントローラー:MediConWEB

UPNP(DLNA)用メディアコントローラーソフト「MediConWEB」を公開しました。

WEBインタフェースのメディアコントローラーです。
世になかったので自分用に作成したものです。


ソフトに添付のreadmeからの抜粋ですが、
DLNA(UPNP)のメディアコントローラーWEBアプリです。
Perl、WEB上で動作します。
当然、実行にはWEBサーバ、および、Perlの実行環境が必要です。
また、Perlのモジュール「Net::UPnP::ControlPoint」が必要です。
CPANを使い、「install Net::UPnP::ControlPoint」などでインストールをしてください。

本WEBアプリは、同一ネットワーク上にある、UPNP機器を検出し、
その中から、メディアサーバとメディアレンダラーを選択して、
メディアサーバのファイルをメディアレンダラーで再生させることができます。

メディアサーバ、レンダラーのレスポンスの調整は
「conf.cgi」で適当に行ってください。単位は秒です。
サーバ・レンダラーの反応が早いならば短くしたほうが快適です。
逆に、反応が返ってこない。デバイスが検出されない等の場合、値を大きくしてください。

動作確認:
メディアサーバ:MiniDLNA
メディアレンダラー:Sony BRAVIA KDL-40EX700/B

気が向いたら使ってください。
ダウンロードはこちらから。
UPNP(DLNA) メディアコントローラー:MediConWEB


スクリーンショット


何かあったらこちらへ
◆掲示板



BUFFALO リンクステーション ネットワーク対応HDD 2TB LS410D0201
もちろんDLNA メディアサーバ機能搭載です。(最近のネットワークディスクは大体対応していますよね。)

2015年04月26日


UPnP ControlPoint(コントロールポイント) WEBインターフェース

LinuxマシンにてPT2で録画サーバ、MiniDLNAにてメディアサーバを立てたのですが、これを簡単にTVに出力する方法はないかということで、
WEBインタフェース作ってみました。
(というか、意外とこういうソフトってないんですね。。。)

Perlで「Net::UPnP」というライブラリが見つかったので、それを使って作成しました。
本当はPHPのほうがよかったのですが、使えるライブラリがなかったので断念。
gupnpというのが見つかりはしたのですが、インストールができなかった。


PerlのNet::UPnPを使えばそれなりに苦労せず目的は達成できましたが、
もうちょっと使いやすくなるとうれしい。
毎回毎回、「Net::UPnP::ControlPoint」の「search」でUPnPデバイスを取得しないといけないのは正直パフォーマンスが悪いです。
ページ遷移が発生するたびにこれでは、時間がかかりちょっとイラッとする。
ネットで検索した例だと↓のようなものばかりですが、

$upnp->search(st => 'upnp:rootdevice', mx => 3);

そのほか、オプションとして、hostでIPアドレスやIP:ポートが指定できるようです。
参考:http://nazuna.sakura.ne.jp/software/upnp/get_device.html


ちなみに、UPnPのサービス名やパラメータを調べるのに、
Linuxに入っていた「GUPnPユニバーサルコントロールポイント」が大変便利でした。


2015年02月24日


cfspreadsheet の挙動がおかしい Sheet指定無効?

Coldfusion(ver9)でcfspreadsheetタグを利用してExcelファイルの編集をと考えているのですが、マニュアル通りの挙動にならない。

複数のシートのあるブック(ファイル)で、複数シートの編集をしたいのですが、マニュアルによると

◾複数のシートを持つ Excel ファイルを読み取るには、read オプションで複数の cfspreadsheet タグを使用し、シートごとに異なる name および sheet または sheetname 属性を指定します。
◾単一ファイルに複数のシートを書き込むには、write アクションを使用してファイルを作成し、最初のシートを保存します。update アクションを使用して、各追加シートを追加します。

http://help.adobe.com/ja_JP/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec17cba-7f87.html


とあるのですが、cfspreadsheetのreadオプションではシートごとに読み込むことはできず、すべてのシートが読み込まれます。
また、writeオプションでも、シート指定しての書き込みができないため、「最初のシートを保存」ということもできません。
そのため、updateオプションを使用したとき、シートが既に存在しているとエラーとなってしまいます。(updateは更新というより、シートの追加)

いろいろと検証した限りでは、cfspreadsheetのsheetオプション、sheetnameオプションは、アクティブシートを指定するだけの代物のようです。


というわけで、実際に複数シートを扱う際には、
cfspreadsheetで全シートを読込、
cfscriptのSpreadsheetSetActiveSheet関数で、シートを切り替えながら編集するのが正解みたい。
で、書き出す時も、cfspreadsheetのwriteオプションで一度に書き込み。

まあ、全部cfscriptのSpreadsheetRead関数とかで操作でいいんですが。

なんか釈然としないが、とりあえず解決!

2013年05月26日


Coldfusion9.0.2 うぜー!!

Coldfusion9.0.2ですが、9.0.0から変わりすぎじゃないですか??

マイナーバージョンアップとは思えないほどの互換性orz

勘弁してくれ。。。。


まず、一番の致命的なのは、9.0.0で使えていた
COMオブジェクト(cfobjectのtype=com)が使用できない。

続いて、「HTTPレスポンスヘッダに改行コードが含まれている」と自動的に削除される。。。ohhh

これにより、クッキーに改行コード付きの値を格納できなくて困りました。


改行コードについては、仕様だし、セキュリティ上必要だから許せるが、comについては完全なバグだろ?

2013年04月28日


SJISからEBCDICへコード変換

SJISからEBCDICへ変換する必要があったのですが、これがなかなか難しいようです。
特に、マルチバイトコード(全角文字)を含む場合。

Linuxの場合、ddコマンドやiconvコマンドで変換可能。
ddコマンドの場合は、シフト文字(シフトイン、シフトアウト)が付かない、
で、iconvの場合は付きます。
一般的には、シフト文字がつく、iconvが利用されるっぽい。

ただし、これをwindowsでやると難しい。
というか、windowsにはコード変換してくれる無料のツールが見当たらない。

なんでだろう、、、

2013年02月08日


Webベース mpd client NeoMPC

以前紹介した、NeoMPCというWEBのMPDクライアントについてです。


NeoMPCの前の記事

NeoMPCは非常に使いやすいクライアントソフトだと思います。
バグさえなければ、、、

これは使い物にならなくなった、iphone用クライアントの「MPod」に代わり、iphoneから利用しているWEBベースのMPDクライアントですが、実はバグがあります。

というわけで、その修正方法を紹介します。

バグ
1、Browseのメニューで曲の一覧を表示時、一画面に一覧が全部入らない時に、曲を追加する操作を行うと、その後の画面で下へスクロールできなくなる。
(リストの下にあるはずの曲が操作できない)

これの修正方法は簡単で、
./templates/default/style.css
①24行目あたりにある、「#menu」のpositionの設定をコメントアウト。
②12行目のbodyのmarginをすべてゼロにする。
以上です。


2、Playlistが空の時、Browseのメニューでファイル名が表示されない。
ファイル名は表示されないが、タグが設定されていればタグの内容は表示される。(タイトルなど)
通常は、タグが設定されていればタグが、タグが設定されていなければファイル名が一覧として表示されるが、Playlistが空のときはファイル名が表示されれなくなる。

修正方法は、
./lib/page.php
①246行目のforeachの行をコメントアウト。
②その閉じるカッコの、254行目のカッコをコメントアウト。
これでOK。

うーん、このループ文は何をしてるんだろう。。。


あと、個人的に修正した点は、
Browseでの曲の追加リンク「+」。
これを押したときに、一番上まで自動スクロールして戻ってしまうのを、ボタンを押した曲の位置でとどまるように修正。
曲を何度も追加するときに、いちいちスクロールしなおすのに便利です。

改修対象のファイルは
./template/browselist_item.html
①27行目のaタグに「name="{:$browselist_item.file|escape:'url':}"」といったラベルを設定。
②上記アンカータグのリンク先のURLとして、リンク先URL末尾に「#{:$browselist_item.file|escape:'url':}」を追加。
意味は分かりますよね??


NeoMPCお勧めですよ!

2013年01月18日


IIS7.5でPerlを実行【Windows2008R2】

大人の事情で、IIS+Perlの環境でプログラムを動かすことになりました。
そのための検証を行ったのですが、意外にメンドクサイ。


IISのインストールは、ISAPI拡張だけあればよさそう。
CGIはおそらく不要です。(必要ならインストールして)


続いて、ActivePerlのインストールですが、64bitOSであっても32bit版のほうがよさそうです。


インストールが完了したら、あとはIISPerlのマッピング。

『ハンドラーマッピング』の設定から、スクリプトマップの追加を行います。
そこで拡張子「*.cgi」にたいし、「perlis.dll」(デフォルトのままだと、C:\perl\binの下にある)を指定します。
ここで、perl.exeは指定しないこと!

マッピングが追加できたら、念のため、「機能のアクセス許可の編集」を選び、実行にチャックが入っていることを確認。


これで、Perlが使えるようなっているはずです。

ただし、注意点として、どうもIISが出力するヘッダがおかしいらしく、perlスクリプトに手を入れる必要があります。

具体的にはヘッダの出力前に、下記の文字列を返す必要があります。何故か。
print "HTTP/1.1 200 OK\n";


この修正が面倒な場合、マッピングとして「perl.exe」を使う方法もありますが、こちらの場合、スクリプト内で呼んでいるライブラリやデータファイルなどのパスを絶対パスで書く必要あります。
おそらく、ヘッダ出力の書き換えより影響範囲が広いと思われるため、私としては、perlis.dllを使うのがお勧め。

あと、perlEx30.dllを使う方法もありますが、こちらも、パスがうまく通らないっぽいです。

2012年09月14日


次へ