bokusui

bokusui の紹介

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

違うと考えるか、同じと考えるか??

 とあるWebサービスにアクセスするところを、去年書いたものに追加するという要件でしたが、どうも去年作ったものと違うところが結構あるなあと。
 でも、こちらからすると同じような事をしているだけなんですが、微妙に要求パラメータの名前が違ったり、Webサービス側からの応答も何故か同じようではないようです。
 
 これと、それと、何が違うのか?  って、意識して設計していますかね?
 
 なんらかのシステムという仕組みを作ろうと思うと、まず、検討しなければならないのは、そのシステムが対応する範囲に存在する多様性(パターン)ですが、その多様性の中に共通するものは一体何処にあるのか?というのを整理し最適化するのがシステム設計者の醍醐味なんだと思います。逆に言うと、そう考えないと、やってられませんよ?全てのパターンに対して別物として用意すると言うのは、かなりの無駄な仕事が発生しますが、これとこれは同じですと整理出来れば、そのパターンに対応するものを一つ用意して、ちょっとだけバリエーションに対応すればよいだけなんで、とても楽になるんです。

 でも、これと、それと、が違うとされると、ちょっと待ってよ、これとそれは殆どこの辺りが同じなんだけど何で違うの?と思えるところがあると、とても残念な気持ちになります。ま、もっと残念なのは、同じとも違うとも何も考えた形跡が無い場合なんですが。

 これと、それ、に対して違うところに着目すると、半目が生まれますが、同じところに着目すれば共有が生まれませんか?
 この感覚って、とても重要な気がします。
 歴史上の悲劇や戦争は相手が敵=自分達と違う存在、という感覚から起きてませんか?
 貴方と私はここが同じだね!これとそれはここが同じで、この辺りだけがちょっとだけ違うみたいですね、っと思える感覚がとても重要なんだと思います。
 とは言え、何でもかんでも一緒くたというのとは違います。最初のアプローチとして、まず同じところは何処と何処なのか?
 という所から始めた方がいい事が多いような気がします。

テストの価値

 某国製のロボット掃除機をAmazonで買いましたが2ヶ月で動かなくなりました。最初はとても良い感じで掃除してくれていたんですが、何か喋ってすぐ止まるようになり、自分で治せそうにない、でも保証とかよくわからないし、買った当初はいい買い物したというという満足感がありましたが、今となっては、どこに連絡して、どこに持っていけば治してくれるの??
 Amazonでは購入後1ヶ月間の初期不良しか対応していないようで、一応、メーカーのサービス窓口メアドに故障の旨を少し英語、詳細は日本語で送ってみましたが、今の所、何のレスもありません。。。(追伸  3日後返信が来て、その後少しやり取りした後、部品を無償で送ってもらえる事になりました)
 これが少なくとも半年後だったら、値段を考えるとある程度は納得出来ていたかも知れませんが、たった2ヶ月でこうなると安いからと言って納得出来ませんよね。

 最近、ポルシェ博士の本を読んでたんですが、所謂ワーゲンビートルの元になったポルシェ博士が設計したクルマは、ナチスの親衛隊200人が試作車30台を昼夜問わずで約8ヶ月間走行テストをしたそうです。
 ベストな製品に至るまで必要なテストのコストをナチスが負ってくれていた訳で、それによりクルマのプラットフォームとしての信頼性を極限まで追求出来たのでしょう。戦後になってビートルが生産されるようになり、ポルシェ博士が夢みた大衆の為のクルマを設計するという面では大成功となった経緯になるのですが、元々はナチスからの大衆車を設計して欲しいという依頼から始まったものです。しかし、戦前・戦中に生産されたクルマは、殆どが軍用車であるキューベル・ワーゲンで、しかも、大衆車を手に入れようと宣伝し、購入を予約した国民から集めた貯金までもがナチスにいいように使われていたのです。
 
 単純に製品の値段だけみても、テストにどれだけコストをかけたのかは解りません。ただ、高価な製品でも、スペックだけみても解らないテストの価値も含まれていると感じた場合、それがメーカーに対する信頼なんだと思います。特に摩耗するような部品があるものは、安いから、スペックがよいからと安易にポチっとするのは避けようと思う今日この頃です。

リモートワークを阻害するもの

 働き方改革とかで、リモートワークや在宅勤務とかが話題にはなっていますが、なかなか普及しているようには思えないですよね。筆者のような業種は比較的リモートワークしやすい業種と言えますが、リモートワークが確立されているところは日本ではかなり少ないように思います。

 その時々の仕事内容にもよりますが、コミュニケーションツールでメンバーと少しやりとり出来れば一人で進められる期間が実際にあるので、1時間くらいかけて仕事場に行って、1時間くらいかけて自宅に戻るなんて、1日2時間無駄にしているよなあと感じてしまうものです。この時間に何も報酬は付かないですから、ワークシェアって事で3時間だけ仕事したいといっても、仕事の場に行くためには住んでいる所次第で往復2時間かかったら合計5時間ですよ?全然3時間になってませんよ。

 先日、仕事先でOffice365が導入されて、Microsoft Teamsというツールが使えるようになりました。チャットやテレビ会議が出来るので、リモートワークツールとして使えそうです。とはいえ、今の所は使う機会が無いので使い方を覚えようとしてませんけど。
 結局ツールはリモートワークする人は是非使いたいけど、してないメンバーが使うのはメンドクサイだけになっちゃうんですよね。だってリモートワークツールを使わざるを得ないのは来てない人に合わせなきゃいけないだけなんで、それってリモートワークしていない方としては、何でここに居ないの?って思ってしまいます。

 リモートワークの普及を阻害している要因は、企業側と働く側双方にあるかと思いますが、筆者の主観では、

企業側
 ・リモートワークにより生産性を落とさない為の仕組みが整理出来ていない(殆どがツールの話になるかも)
 ・勤怠管理以外に仕事の評価方法が確立出来ていない

働く側
 ・リモートワークの仕方が解らない(ツールの使い方が理解出来ていないとか含め)
 ・同じ仕事をするメンバーと同じ場所で仕事をしなければいけないという気持ち

なのかと。

 特に、働く側の気持ちが一番難しいように思います。事務所を無くして全員リモートワークとまでは今の所そんな仕組みが出来てる企業は皆無なので、リモートワークをする人とリモートワークができない業務を仕事にしている人とでいろんな思いが出てきます。

 子供の頃から毎日通学し、同級生と長い時間一緒に居ることが当たり前だったし、不登校の同級生にどのような感情を持っていたか覚えているし。。
 でも、家庭環境等で止むを得ない理由があると知ったら、しょうがないんだねと腑に落ちてしまうので、リモートワークも同じように、本人に子育てや介護といった通勤するのが難しいという強い動機付けがあって、それがメンバーと情報共有出来ていれば、リモートワークする人も、リモートワークをしていないメンバーも受け入れやすいんだと思います。でも、これって、その人の止むを得ない状況なのか、それをしたいというその人の要求なのか、それだけの違いです。

 将来的には、リモートワークが当たり前と思えるようになるんでしょうが、筆者自身も含めて、人の意識が変わるには、もう暫く時間が掛かりそうですね。

源泉徴収の法定調書を提出し忘れてました。。

 今月中旬あたりに税務署から書類が届いていたので、何だろうと開けてみると、
「給与所得の源泉徴収票」等の法定調書の提出について
とのタイトル、やんわりと未提出なら早く提出を、確認後結果を郵送で返信を、という内容でした。

あれ、提出してなかったかな?と、eTaxで送信履歴を確認すると、1月に納税は済んでますが、法定調書の提出履歴が見当たらない・・
そういや、そのタイミングは住基カードの有効期限が切れていたので、マイナンバーカードの発行を申請し、到着待ちだった時でした。
法定調書の提出は、eLTaxの方から国税と市役所宛てに同時に送れるようになっていますが、提出時に電子署名が必要なので、そのまま忘れてしまったようです。。
慌ててeLTaxで源泉徴収の法定調書を提出、書類は提出しましたと書いて郵送。。3ヶ月遅延してますけど、ま、今となってはしょうがない。。
 
 税務関係はちゃんと事業年度内に発生するイベントのスケジュールを管理しなきゃいけませんね。

ADOでCSVファイルを読み込むと255文字以上でエラーになる

 ちょっと前にVBScriptで作られたツールがあるのですが、最近になってエラーが出るとの連絡。
エラーになるケースは、CSVファイルを読み込んで255Byteを超えている値を扱う時と判明。
対象のツールは実装上ADOが使われており、下記のようにCSVへアクセスしてます。

対象のCSVファイルが改行を含む値を扱う都合でADOを使ったようなのですが、どうやら、CSVテキストドライバとしての仕様上、255を超える項目数だったり、255を超えるサイズといった、昔ながらの壁がある模様。
回避策としては、Schema.iniで逃げるのが定番らしいのですが、試したところエラーにはならないが、255文字超が勝手に切られる形に・・・

というか、これ以上ADODBについて調べる時間が無駄!!なので、テキストファイル読み込みとして作り直しました。。

こちらを少し参考にして、さらにダブルクォーテーション内のカンマも考慮し(ここではカンマは削除してます)、ADOのレコードセットっぽく1レコード毎に配列へ列の値をセットしてから処理を行っていきます。

redmine plugin DMSFを入れてみた

文書管理をしたいという話があがり、redmineプラグインにDMSFってのがあるよ!
って事で、対象のredmineが3.3なので、DSMFは現時点の最新より一つ古い 1.5.9 を入れてみました。

redmine/pluginsにダウンロードしたソースを置き、redmineのルートディレクトリに移動。
最初
bundle install –without development test
とした後に
bundle execでインストールしようとしたが、redmineローカル内のGemとして入ってないと怒られた。
また、xapian-full-alaveteliというgemがどうも入らないので、こちらはGemfileの該当箇所をコメントアウト。

結果、
bundle install –without development test –path vendor/bundle
とした後に
bundle exec rake redmine:plugins:migrate NAME=redmine_dmsf RAILS_ENV=production
でとりあえず入った。

プラグイン設定画面はこんな感じ
一番下のテキスト検索の箇所が、入らなかったgemと関係している模様。文書検索できるならさらに素晴らしいが日本語は選択対象に無いので、とりあえずOFF。

利用対象とするプロジェクトの設定から、「文書管理」ってモジュールにチェックを入れて使用開始。

wikiの隣あたりから「文書管理」が開くようになり、ファイルをドラッグアンドドロップでアップロードできるようになりました。
同じファイル名はアップロードするごとに自動的にマイナーバージョン番号がアップされ、メジャーにするときはアップロード時に画面で指定します。

文書の更新履歴はこんな感じ。

他に承認ワークフロー機能があるようなので試したところ、承認ワークフローの設定で新規ステップと押しても反応しないのでログを見たら、DBエラーが出てました。
該当ソースのgithub履歴をみるとバグフィックスしたコミットがあったので、ステップが登録できるようになりました!承認者をORかANDで設定していく形です。

で、該当文書の右端チェックを押すとワークフローを適用できます。
今回試しに「ソフトウェア資料」というワークフローを作りレビュアー3名をOR設定、承認者1名をセットするとこんな感じで履歴が見れます。

とは言え、1.5.9は他にもバグがあるのでパッチをあてないとredmineの動きがちょっとおかしくなります。最新バージョンを入れてみれば良かったと後悔。。

DMSFによる文書管理をこれからどう運用していくかは、既存のファイルサーバ管理からの移行方針とか、プロジェクトの切り方といったredmine運用も考えた上でやらないといけませんね。

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を使いましたが、こういう環境依存箇所は昔から相変わらず厄介なままですが、それ以外は使い込めば結構使えそうな感じですね。