bokusui

bokusui の紹介

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

e-Taxで給与所得税の納付をしてみた

 小規模な法人では半期に一度、毎年1月・7月期限となっている給与所得税(社員的には源泉徴収)の納付を行う必要がありますが、これまでは銀行に行って支払っていたのを今回はe-Taxで納付してみました。
 納付書は「給与所得・退職所得等の所得税徴収計算書(納期特例分)」というもので、e-Taxに久しぶりにログインし、申告・申請・納税メニューに行き新規作成から該当の書類を選択し、必要事項を記入していきます。この辺りは紙に記入した経験があるし、入力項目も少ないので簡単です。
 次から次へと入力して最後に送信、その後、「受信通知の確認」というボタンを押すと、事前に金融機関を登録しておけばそこから納税が出来きます。
 で、納付オペレーションをした後暫くするともう「登録口座からの引き落としが完了しました」と表示されて終了。
 だいぶ楽になりました。住基カードの期限が切れて、まだマイナンバーカードが到着していないのですが、納付するだけなら電子証明書は要らないのですな。

今どきはXCOPYでなくROBOCOPY

ファイルサーバからWindows端末にディレクトリ毎ファイルを同期させたいような話があり、昔ながらXCOPYのオプションなんだっけ?とググっていたところ、今はROBOCOPYなる便利なコマンドがある模様。

今回は、完全にディレクトリを同期させ、うざい出力も消したいので下記のコマンドで対応

robocopy \\fileserver\targetdir %USERPROFILE%\targetdir /mir /NDL /NFL /NJH

スタートアップにバッチを仕込んで、Windowsローカルアプリ更新時の同期とか簡単に出来ますね。

複数のWebサイトからpostgreSQLのテーブルを一部だけ分離する

 postgreSQLを使っているphpのWebアプリを2つのサイトにして、テーブルの一部を共有し、その他は分離したいという要件があったので、Oracle歴が長かった筆者にとっては、別ユーザー作って、シノニム作ればいいじゃんと思いきや、postgreSQLにはシノニムは無い模様。。

 既にpublicとしてテーブルが作成されている状態なので、別ユーザーとそのユーザーのスキーマを作成し、分離したいテーブルのみをそのスキーマに作成、既存のテーブルを別ユーザーに対しアクセス権を付与するという形で何とかなりました。

まず、別ユーザーを作成し、DBに対する権限を付与します
CREATE USER anotheruser WITH PASSWORD ‘******’;
GRANT CONNECT ON DATABASE 既存DB TO anotheruser;
GRANT CREATE ON DATABASE 既存DB TO anotheruser;

共有するテーブル全てにアクセス権を付与します
GRANT ALL ON TABLE common_table1 TO anotheruser;
GRANT ALL ON TABLE common_table2 TO anotheruser;
・・・

作成したユーザーでログインし、ユーザー名と同名のスキーマを作成します
create schema anotheruser AUTHORIZATION anotheruser;
分離するテーブルをこのスキーマ上に作成します
create table anotheruser.devide_table
(id serial, ~

で、片方のWebサイト側DB設定を別ユーザーに変えて、要件通りの動きになりました。
postgreSQLにはサーチパス指定等があるようですが、スキーマ名とユーザー名が同一であれば、勝手に優先してくれるみたいでした。
という事はアクセス権付与はテーブル個別でなくALLでもよかったかも?

VisualStudio2017でビルドしたDLLが動かない

ちょっと前に作られたBeckyPluginDLLの追加開発をしていましたが、それまでVisualStudio2012で開発されていたものを、今回 VisualStudioCommunity2017に変えたところ、Pluginが動作する端末と動かない端末が出てきて困ったことに。。
動かない端末環境との相違点がパッと解らないので、下記ツールでDLL依存を確認。
http://www.dependencywalker.com/

元のDLLがこれで

VS2017でビルドしたのがこれ

確かにだいぶ変わってしまったようです。

 しょうがないので過去のVisualStudioをインストールしたところ、VS2017のデバッグ→プロジェクトのプロパティで「プラットフォームツールセット」を変える事が出来るようになり、それでビルドしたところ、依存しているDLLが変わり動くようになりました。

 結果的にVS2017にした影響で、再配布可能パッケージが必要になってしまっていたようです。
再配布可能パッケージを各端末に導入してもらうのも厄介な話なので、この形でビルドして配布する事にしました。
 久しぶりにVisualStudioを使いましたが、こういう環境依存箇所は昔から相変わらず厄介なままですが、それ以外は使い込めば結構使えそうな感じですね。

AI・業務自動化展を見てきた

 今やってる仕事のテーマ的に、業務自動化みたいな開発案件が多いので、何かいいものがあればという事で、幕張でやってるAI・業務自動化展に行ってきました。

 メッセの会場は、他テーマの展示とかも含まれているので結構な人でしたが、対象の展示範囲は狭く、今話題?のRPAから自動梱包マシーンまであり、対象は様々。AIというテーマではチャットとかボット、自動化というテーマではRPA系が多かったでしょうか。RPA系の中でも操作手順(シナリオ)の登録UIがいい感じの展示もありましたが、画面操作を自動化するという機能があればRPAって事になっているような感じなので、各展示の違いは解りませんでした。
 ちゃんと見たのは、昔DBツールとしてよく使ったObjectBrowserが、これからはAIを活用して画面イメージから設計書を自動作成するみたいなプレゼンくらい。これだと使用者がシステム開発関係者に限定されるので、何にAIが活用されどんなアウトプットが期待出来るか使用ケースが解りやすい感じです。

 結局、AI活用として今のところ実用性があるのは、画像認識と音声認識くらいですかね。それもGoogleとかMicroSoftとかが用意しているAPIを使用して何かするレベル以上にはまだまだな感じ。AIとかRPAとか言葉だけが先行して、その定義も曖昧なまま。。
 RPAとされているものが実現できるものって、ネイティブアプリを対象にさえしなければ、これまでエクセルマクロとかでちょいと1時間で作ったものと特に変わらないような。。

ZendFramework1でREST APIを試してみた

既存の業務アプリ内にある機能を外部から利用出来たらなあ・・・のような要件があり、RestAPIで実装を検討しました。対象のアプリは、今となっては・・・ですが、ZendFramework1が使われています。

こちらにいろいろ書いていますが、Zend_Rest_Controllerを使えばいいっぽい。

開発環境はEclipse + php + XAMPP
XAMPP内のphp/pearの中に、ダウンロードしたZendFramework1.12.20のZIPからlibrary内のZendを配置、XAMPP内のapache/conf/extra/httpd-xammp.confに該当プロジェクトのAliasをセットして環境ができました。

テスト用のEclipceプロジェクトはこんな感じで最少構成。

.htaccess でindex.phpに仕向けます。

index.phpでdispatchします。

ControllerにZend_Rest_Controllerとして必要なメソッドを追加していきます。

で、ブラウザから動作確認

URLをいろいろ意識すると難しそうですが、これなら簡単ですね。

Windows10でHTAがエラーになる

 HTA&VBSの構成で社内利用向けに作ったツール(社内端末はwin7)について、今後のWindows10導入へ向けて稼働確認をしたところ、エラーメッセージが出て動作しませんでした。

で、ネットでいろいろ調べたところ、
https://msdn.microsoft.com/ja-jp/library/cc817574.aspx
等を見ながら、

を入れてみたところ、エラーは無くなったのですが、画面レイアウトが崩れる結果に・・・
 社内ではこれからの新しい端末はWin10に、既存は当面Win7という方針なので、ツールとしてはどちらも同じように動作して欲しいところです。

 で、上記metaタグを外して結局何がエラーなの?と調べていくと、WMIのExecQueryを使った箇所がWin10ではエラーとなる事が判明。どうもセキュリティがらみの変更っぽいですが、詳細はよくわかりませんでした。。

 今回は別命令で置き換えが可能だったので、それに置き換えて問題無く動作するようになりましたが、画面だけは、フォントサイズの影響があったので微調整しておきました。
 そろそろHTAを止めたいのですが、Windowsマシン前提で簡易な画面ツールを作るとなると、まだ代替え手段が見つかりません。。

Apache CommonsのDateUtilsに機能を拡張する

 よくあるケースと思いますが、メジャーなライブラリにもうちょっと機能が欲しい時、そのライブラリを拡張して共通ライブラリとして使いまわしたりしますよね?
筆者がJavaを使う場合は、だいぶ前からApache CommonsのDateUtilsを拡張し、String・Dateの相互変換メソッドとかを追加していろんな開発案件で使いまわしてましたが、今回、文字列から日時型に変換するけど、どんな文字列パターンになるかが不明確、、という要件があったので、拡張していたクラスに機能を追加し、一般的に日時として使われる文字列からのDate変換機能を追加してみました。

で、テストです。

テスト結果
20170131 is null
2017-9-2 15:00:00 is 2017/09/02 15:00:00
2017/9/2 15:25:00 is 2017/09/02 15:25:00
2017年9月2日8時34分51秒 is 2017/09/02 08:34:51
2017年1月2日8時32分 is 2017/01/02 08:32:00
2017年12月31日午後11時集合 is 2017/12/31 23:00:00
2017年12月2日8時 is 2017/12/02 08:00:00
2017.12.2 PM8:00 is 2017/12/02 20:00:00
2017.12.3 AM8:25 is 2017/12/03 08:25:00
2017.01.31 is 2017/01/31 00:00:00
2017.1.32 is null

YYYYMMDDってのは、ここでは対象外です。だって、ただの数字の羅列は文字として日付とは言えないし。

カテゴリー: Java

法人住民税の中間納付を忘れてました。。

 そろそろ法人2期目の申告をする時期なんですが、いろいろ書類を整理していた所、
「法人県民税・事業税・地方特別税の予告申告について」
という黄色い書類が出てきて、あれ?中間納付って3月にしたよなあ?と銀行の通帳とかを調べたら、やっぱりどこにも該当が無い。。
 国税の中間申告だけ対処していて、県民地方税の納付がされていない事が判明。。
 今月中に決算申告しなきゃいけないので、ヤバいと思い、管轄の県税事務所に電話した所、とりあえず、そのまま申告して下さいとの事。
 この辺の納付って一元化して欲しいなあ。って、国税管轄の地方法人税もあり、県民地方税とか解りにくいし。。

redmineでたまにInternalErrorが出るようになった。

 筆者が通っているユーザーさんでは、redmineに独自開発含めプラグインを10個くらい入れて使っているのですが、何時からかInternalErrorが出るようになり、その調査を依頼されました。
 状況的にはチケットの一覧や詳細を表示する時、たまにInternalErrorとなる事があり、ただ再表示すれば普通に表示されるという何とも解りにくい状況。。
 redmineのログには下記InternalError発生時の内容が出力されています。

i18nが関係しているようですが、たまにしか起きないし、それ以外に問題箇所を特定できそうな出力は読み取れません。
いろいろ試行錯誤してみますが原因は不明。。で、国際化対応が絡んでいるという事で、ログインユーザーの言語設定を英語に変えてみた所、相変わらずInternalErrorがたまに出るものの、ログの出力内容が変わりました。

で、エラーが出始めた時期とかを考慮すると、独自プラグインを入れた後なので、そのソースを眺めていると、en.ymlに不備を発見。直して入れてみると問題が解消したようです。