bokusui について

ソフトウェアハウスでのPG・SEから始まり、10年近く勤めた金融系企業の社内SEを数年前にやめ、フリーランス時代を経たのち法人成りしました。システム開発の全工程をこじんまりとやり続けています。

画面エラーのログ出力を整理

今作っているJavaEEアプリですが、画面エラー発生時のログ出力を検討しました。ま、アプリケーションサーバであるWebLogicが勝手にログを出してくれますが、エラー以外にも勝手に出るので量が多くて見るのが辛いし、アプリとしては別途log4j2でロギングする方向にしているので、画面エラー発生時もlog4j出力に統一するという要件になります。WebLogicでlog4jとログを連携させるとかFilter使うとかいろいろやり方はありそうでしたが、画面個々に手を入れずに最も簡単なやり方は無いかなと考えたところ、画面エラー発生時はエラーページに遷移するようにしておいて、そのエラーページでログ出力させるという形にしてみます。

web.xml抜粋(今の所・・・)

エラーページ用JSF管理Bean

最後にweb.xmlで指定した/errors/index.xhtmlで、エラー内容は見せないように下記を忍ばせておけば、管理Beanのメソッドが実行されるという形になります。

TeraTermマクロでStack overflow発生

だいぶ前に作ったTeraTermマクロのUNIXサーバ運用作業自動化ツールでエラーが出たというので見に行くと、Stack overflowというマクロのエラーダイアログが。
要件的には、psコマンドで特定のJVMプロセス終了を持って次に進む、20回チェックして終わってないならダイアログを表示し、その前の処理に戻るという内容ですが、たまたま今回の作業中に長時間動作するプロセスが実行中となっており、psを11回実行したところで停止した状態になってました。
これまで何回も使われているマクロの自動化ツールですが、この事象は今回初めて。
ちょっとググるとすぐに下記が出たのでマクロスクリプトを見直したら、ループ中にgotoで飛ぶというダメな作りを痛感。。
https://osdn.jp/ticket/browse.php?group_id=1412&tid=8024
goto否定主義者では無いし、多重ループだと解りにくくなるので、素直にループの外にgotoを出して対応。

上記の33行目以降を下記に変更

e-Taxを使って感じたこと

源泉徴収手続きの期限が迫ってきたので、e-Taxでやってみました。と、言っても仕事のタイミング的に昨年中は特に払うものは無いのですが、無いなら無いとしての手続きをしなくてはなりません。。
 ルート証明書をインストールし、Webから開始届出の手続きをすると、利用者識別番号が表示されるので、その番号でログインして利用者情報の登録をしたら、各種申告の入力をするだけです。筆者の場合は、特例の申請をしているので、「給与所得・退職所得等の所得税徴収高計算書(納期特例分)」で入力して終わりです。
 ちょっと違和感を覚えたのが、開始届出を画面から入力している時点で殆どの利用者の属性情報を入力しているはずなのに、またログイン後に利用者情報を入力しなければならないという事。2重入力しなければならない理由は何なのか、職業上いろいろ想像してしまいます。ま、殆どの場合システム構成とかデータ設計上の問題でそうなっているだけだと思いますが。。
 他にも、拡張子がdoだからStrutsを使っているっぽいとか、Javaアプレットを使う必要性ってホントにあるの?ブラウザはともかく、端末環境に依存することはやっちゃダメだよね、とか、画面デザインの野暮ったい感じは開発ベンダーに丸投げしたのでは?とか、画面上の文言表記だけでなくユーザー目線で設計された感じが全くしない、とか、既存の用紙や手続フローを置き換える以外のシステム化コンセプトを少しも考えなかったんだろうな、とか、そもそも肥大化・複雑化しすぎたスキームの再設計や膨大な種類の取扱用紙の再整理をせずに表面だけシステム化したところで解りやすくなることはない、など、いろいろ示唆に富んだシステムですね。
 イータ君ってイタキャラって事かな?

要件はちゃんと確認しないと・・・VFSで作り直し

ちょっと前に書いたログファイルをダウンロードする機能ですが、実機となるLINUX上にデプロイすると動きませんでした。。。サーバへ接続はできているようなのですが瞬時に切断されているようです。原因切り分けの為、作業中に使っているユーザーIDで試してみると特に問題無く動いてます。TeraTermから指定のIDでログインしてみると即切断されたようになり、WinSCPでSFTPログインすると問題無くアクセスできます。
 で、要件を思い出すと、「SFTPはOK」ではなく、「SFTPのみOK」であった事に気が付きました。与えられたユーザーIDでは、SSH接続ができないセキュリティ設定になっていたという事なんです。(sshd_configでSFTP専用にされてました)
 要件上はたった2文字の違いですが、実装上は明らかに別物であり、SSHで接続するような実装ではNGという事になります。
 となるとGamynedのようにSSHを前提にしたライブラリでなく、SFTPのみでサーバへアクセスできるライブラリを探し、ApacheCommonsのVFSに落ち着きました。なお、VSFにはJschが必要みたいです。
 login,logoutはなさそうなんで、ManagedBeanの呼び出しメソッド引数にID、パスワード、ホスト名を追加して、SFTP処理クラスが殆どの変更箇所となります。とりあえず、ファイル受信は出来ましたので別途整理します。

源泉徴収の知らせがきた

税務署から「源泉所得税及び復興所得税の納付期限のお知らせ」というハガキが来ていました。
9月末に「給与支払事務所等の開設申請書」の届けを出してから、それ以降、いつ手続きすればよいのかわからなかったんですが、ハガキに納付期限が1月20日と書いてありました。となると、「源泉所得税の納期の特例の承認に関する申請書」によって半年に一度手続きすればよいはずなので、1月と7月がそのタイミングなんですね。ようやく解りました。

bootstrapのdatepickerを使ってみる

前回、今作成中のWebLogicアプリにbootstrapを使う事にしたので、次は日付入力にdatepickerを使ってみることにしました。datepickerって、使う方も入力しやすいし、作る方も余計な日付チェック処理を作らなくて済むし、素晴らしいコンポーネントだと思います。昔はテキスト入力エリアを年/月/日と3個繋げて、日付妥当性やメンドクサイうるう年チェックとかしてたんですよ・・・
しかも、ダウンロードURLではオプション設定の書き方も教えてくれてます。
bootstrap-datepicker
JSF2画面xhtmlの該当箇所は下記ですが、そのままだとBean側が更新されないので、f:ajaxで通知してます。

画面メニューにbootstrapのnavbarを使ってみる

今作っているWebアプリですが、ログインユーザー権限によりメニューのリンク表示を切り替える要件の実装について、一緒に作ってるメンバーに聞いてみたら、bootstrapのnavbarがかっこいいとの事で使ってみました。
各画面で指定するテンプレートxhtmlにbootstrapのnavbarをセットする形です。なお、bootstrapのバージョンは少し古いですが2.3.2を使ってます。
bootstrapをダウンロードしたら、Webソース内のresourcesにダウンロードした各ディレクトリを入れ、メニューを表示する各画面xhtmlでは、下記のようにテンプレートを指定します。

テンプレートとして指定したmenu.xhtmlですが、その中の「SessionManager」はログイン情報を保持しているSessionScopedBeanで、ログイン時にログイン日時をlogintimeに、各権限の値をroleCdにセットし、xhtml側ではui:fragmentのrenderedで表示を切り替えます。

ログインした権限に従い下記のようにメニューを表示されます。
navbar

税務講習会に行く

新規起業者向けの税務講習会をやりますと前にハガキが来ていたので、今日、松戸法人会に行ってきました。
講習会の構成は法人税、消費税の概要と源泉徴収の3点。税務署の人が講師で、参加者は15人くらいでしょうか、9時半から2時間程度で終わりました。
税務署の人に直接聞いて確認したところ、前に保留していた役員報酬に関する届け出は、定額であれば特に税務署に届け出の必要は無く、普通に帳簿を付けて申告するだけ、あとは源泉徴収で行えばいいとの事。なので、法人税は基本的に決算期まで特に何もいらないし、消費税も2年後からだし売上的にも当面考えなくてよさそう。。まずは、源泉徴収ですが、「源泉所得税の納期の特例の承認に関する申請書」を出しているので、半期に一度、今はE-Taxで申告や引落の手続きができるみたいなので、起業に関してはだいぶ整理が付いた気がします。
源泉徴収って、サラリーマン時代は会社がやってくれていたので、ほとんど内容を知りませんでしたが、計算の仕方とかみてると国の方もいろいろと所得再分配とか考えてこうしているのでしょうが、もうちょっとシンプルにならないものでしょうかね?

P-COMマクロでホスト作業を自動化

 ホスト(=メインフレーム)ってまだ結構使っているところが多いように思います。
筆者が知る限り(3270系しか知りませんが)、エミュレータにPersonal Communications(P-COM)かFalconのどちらかを使っていて、どちらもマクロ機能があり、主に画面操作を自動化することが出来ます。
で、ちょっと前に、とあるホストの運用作業を自動化したいという話があったので、P-COMのホスト・アクセス・クラス・ライブラリーを使ったVBスクリプトを作ってみました。P-COMのホスト・アクセス・クラス・ライブラリーについては下記が参考になります。
http://www-01.ibm.com/support/knowledgecenter/SSEQ5Y_5.9.0/com.ibm.pcomm.doc/books/html/host_access08.htm?lang=ja
基本的にP-COM起動やホスト接続、終了以外は、画面の座標軸(縦と横)に対して文字を入力したり、指定場所に表示されているのが特定の文字かをチェックするという繰り返しになると思いますので、VBSではそれらをサブルーチンにしてます。
また、スクリプトの引数として、ログインIDとパスワード及び、事前に用意が必要な接続プロファイル(拡張子がwsのやつ)を指定する形になってます。

やっかいなのは、あくまで画面操作なので接続とか応答に時間が掛かったり、いろいろ問題が出てきます。
ちょっと雑にSleepをガンガンかましていますが、お察しください。。

JSF2カスタムコンバータでデコードしつつdataTableの背景を変える

今作っているWEBアプリで、画面に一覧を表示して、一覧表示内の項目値によって背景色を変えたいという要件がありました。
で、JSF2のカスタムコンバータを使って、コード値を文言にデコードしつつ、裏でCSSクラスを変えることで背景色が動的に変わる形にしてみました。コンバータは一つで、どのコード体系でデコードするかは、attributeでコンバータに情報を渡す構成になってます、とりあえずは。。

CSS抜粋

xhtmlのdataTable部分抜粋
※wordsはwords.propertiesのファイル側に定義している項目タイトルの文言です

カスタムコンバータ

ManagedBean抜粋
※一覧表示対象のitemInfoの実装は割愛します。プロパティとゲッタ・セッタがあるだけです。。

こんな感じで表示できそうなので、別途整理して実装します。
上記例では色が変わるのは行でなくセル単位になります。なお、dataTableの場合、その中のoutputTextはdivに置き換えらえるようなので、コンバータではtdのスタイルを変えているのではなくdivが対象になってます。それをCSSでカバーしているのですが、CSSは得意でないので。。