趣味のプログラム工房

プログラム

Windowsでフォルダの監視・同期 inotifyのような、、、

Linuxではinotifyという仕組みで通知を受け取り、
ファイルの更新をチェックすることで、フォルダ・ファイルの監視ができるのですが、Windowsでは無いようなんですよね。

なので、リアルタイムファイル同期ファイル同期をするためにはと調べたのですが、ちょうどいい感じのソフトは転がっておらず、、、

一応、.NETにて「System.IO.FileSystemWatcherクラス」を使えばいいらしいことがわかりました。
実装自体はわりと簡単みたいなので、作ってみました。

FileSystemWatcher


引数に、監視フォルダと、コピー先を渡してあげると、
監視フォルダに新しいフォルダやファイルが作られるとコピー先にコピーされるという動きをします。
2つのフォルダで同期をとるときに使います。

2019/08/17 一部の起動方法にてCPU使用率が1コア占有となる不具合を対策(4コアの場合はCPU使用率25%となる不具合)

また、Windowsサービス版を作成
FileSystemWatcher サービス化版


2019年08月07日


Oracle 異なるインスタンスのテーブルのデータを比較

同じデータベース インスタンス内であれば、MINUS演算子を使うだけで、簡単に差異のあるレコードを抽出可能です。
しかし、異なるインスタンス、異なるデータベースのテーブルを比較しようとするとちょっと悩みます。

手っ取り早くであれば、、、データを抽出してExcelに張り付けて比較するという力業(スマートではない)もありますが、データが多いと時間がかかるし、めんどくさいです。


というわけで、私のおすすめとしては、Database Link機能の利用です。
データベース・リンクとは、他のデータベース上のオブジェクトにアクセスできる、データベース上のスキーマ・オブジェクトです。
このオブジェクトを経由することで、MINUS演算子を使って比較ができるようになります。

systemなどアクセス権限の高いユーザ(スキーマ)に対してリンク張れば、xxx.table@dblink_systemなどと全部のテーブルにアクセスできるので結構楽です。


2560 * 1600液晶、10コアのハイスペックタブレット!
値段はチョットしますが、このスペックはあまりない珍しいタブレットですね。

2019年02月06日


Oracle 監査ログ Aud$のSQLTEXT切れてる問題

Oracleの監査ログですがAUD$を直接ではなく、DBA_AUDIT_TRAILのViewを使って監査ログを参照すると、SQLTEXTが切れて、すべて見えない問題が発生します。

というのも、AUD$のSQLTEXTはCLOBですが、DBA_AUDIT_TRAILはVARCHAR2 2000桁で表示されるため、2000文字以上は切れてしまう。
なので、2000文字以上のSQLTEXTを見る場合は、AUD$を直接見る必要がありますが、その場合も、CLOBではなく、VARCHAR2に変換してみるため、SELECT時に工夫が必要。

https://stackoverrun.com/ja/q/1875751

を参考に、2000文字ずつとか、4000文字ずつ表示する必要があります。

SELECT SUBSTR (t1.clob_col, 1, 4000) AS pt1,
CASE WHEN LENGTH (t1.clob_col) > 4000 THEN SUBSTR (t1.clob_col, 4001, 4000) END AS pt2,
CASE WHEN LENGTH (t1.clob_col) > 8000 THEN SUBSTR (t1.clob_col, 8001, 4000) END AS pt3,
CASE WHEN LENGTH (t1.clob_col) > 12000 THEN SUBSTR (t1.clob_col, 1201, 4000) END AS pt4
FROM t1


まあ、分岐する必要があるかは微妙。
別に、0文字~4000文字、4001文字~8000文字、、、を表示するsubstrをそのまま連結でもよさそう。


スマートテレビの新基準
4Kテレビ

2019年02月03日


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日


次へ