趣味のプログラム工房

プログラム

HP-UXのセグメンテーション違反耐性が高すぎる

hp-uxのセグメンテーション違反耐性が高すぎる問題が発生しています。

セグメンテーション違反耐性が高いのの何が問題なのかという話ですが、、、
hp-uxからLinux(RHEL)に移植したプログラムがバンバン落ちるのです。
セグメンテーション違反で。

悪いのは、100%元のプログラムを作ったやつですが、
何年も動いていたプログラムが想定外のところで落ちるのはイライラするわけです。


確保した領域外にアクセスしても、落ちないんですよねHP-UXって。
OS的に何か制御が入っているのか、、、逆に制御入っていないから何も言わないのか、、、(制御入ってないとしたら相当な時限爆弾)


移植性が高いCプログラムですが、、、純粋な環境依存よりも、
既存バグが怖いと思った今日この頃です。


ルータ用サーバに最適

2019年01月18日


Linux、Pro*C環境でsystem関数の挙動が変(signal?)

Oracle 11.2以降、Linux、Pro*Cを利用の環境でsystem関数などの子プロセスを呼び出した後のシグナルの挙動が変という問題。

具体的には、Oracle 11.2以降(当方は12cで確認)は、SIGCHLDSIG_IGNを設定したような挙動となります。(Oracleに接続する関数を呼び出した後)

つまり、どういうことかというと、Oracle 10gの場合は、system関数を利用して子プロセスを呼び出した後、普通にその結果(終了コード)を拾えるのですが、11.2の場合は、子プロセスはゾンビ化しないため、勝手に状態の開放を行うため、親プロセス状態を拾うことができなくなります。
つまり、system関数の結果(終了コード)が拾えなくなります。

どうも、Oracleでバグが発生し、こねくり回して対応した結果の仕様のようです。

解決方法としては、、
①SIGCHLDにSIG_DEFを設定しなおす。
②sqlnet.oraでBEQUEATH_DETACH=yesを設定。

らしいですが、Oracleがそのほかの部分でどういう挙動となるかはよくわかりません。
ほかの不具合が発生する可能性が高いです。。。

参考
https://www.developpez.net/forums/d1800160/bases-donnees/oracle/interfaces-programmation/pro-c-comportement-different-cmd-system-connecte-oracle/

2018年12月23日


Oracleの監査 auditについて

Oracleの監査の設定について調べてみた。

私がやりたかったことは、テーブルに対するアクセスのログ取得。
これは単純に、

オブジェクト監査を用いて
AUDIT insert table,update table,delete table by XXXX;
となるわけですが、さらに、YYYテーブルは監査を除外する、、、
ということをしたい。

結論から言うと、オブジェクト監査、もしくは、
オブジェクト監査と文監査の組み合わせなどではできなさそう。

結局、除外するテーブル以外をすべて列挙して
AUDIT insert ,update ,delete on XXX.AAA;
AUDIT insert ,update ,delete on XXX.BBB;
・・・
AUDIT insert ,update ,delete on XXX.XXX;
AUDIT insert ,update ,delete on XXX.ZZZ;
と監査するテーブルを登録していくこととしました。

、、、もうちょっとスマートな方法があればよいのですが。。。


2018年12月13日


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日


次へ