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

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

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

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

google-http-clientを使ってみた

 とあるWebAPIサービスを提供しているサイトへアクセスするクライアントをjavaで書こうかと、最初はjerseyを試してみたのですが、これがなかなか厄介で、次から次と依存が判明して動作するまで一苦労。。
最終的には、とあるサイト側の認証における制約により、jerseyの仕様ではどうやってもアクセスが出来ない事が判明。。

 失敗の原因は概ね当たりが付いていたので、その辺りに問題が無さそうなライブラリとしてgoogle-http-clientを使うことにしました。
 jerseyで途中まで実装していたものをそのままgoogle-http-clientを使う形に置き換えて疎通確認レベルまでやってみます。

 google-http-clientは依存が無く構成がとてもシンプルで置き換えた途端に、サックリとAPIアクセスに成功しました。proxy経由でもJVM引数で指定してあっさり通りました。

 細かいところでは、どうも指定したタイムアウトは効いてないような気がしますが、まあ、今回の実務上問題無さそうなので、利用しやすいように整理して実装しようと思います。

テストの価値

 某国製のロボット掃除機を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レコード毎に配列へ列の値をセットしてから処理を行っていきます。

自分が使わなきゃ、誰かに使ってもらえない

 先月、新居に引っ越したところ、備え付けのガス操作パネルに昨日と今日のガス代が表示される機能が付いていました。入居時にガス開栓に来てくれた係員曰く、一定の計算方法に基づいて表示している金額なので、実際のガス代とは違うとの事。
 使用状況を管理して、請求されるガス代と見比べられればガス代を節約出来ると思い、毎日のガス代を記録していく事にしました。
 で、どう記録しようと、ふと数年前に作ったAndriodアプリを思い出しました。

 ガス代の入力項目を設定して、

 こんな感じで毎日登録していきます。

 たまに登録忘れてますけど。。


 このアプリは、筆者が前職を辞めた後に、プログラミングのリハビリを兼ねて、JavaでAndroidアプリを作ったものですが、5年くらい経ってもまだ、ダウンロードは100レベル。。完全ほったらかしなんで、そんなもんでしょうし、どちらかというと仕事利用がターゲットで、利用者が自分でデータ項目を決めるというコンセプト自体がそもそも理解しにくいでしょうね。UIもAndroid2.X時代のままですし。。

 作ろうと思った経緯自体は、ビル管理の仕事をしている人から、計器類の記録を取るツールが欲しいなあという話を聞いたのがきっかけですが、コンセプトとしたのは

 ・汎用的なデータフォーマットに対応
 ・オフラインでも記録が可能
 ・記録したデータは他システムと連携可能
 という3点でした。

 最初の汎用的なデータフォーマットという所で、偶々見つけてくれた人でさえ、データを定義して設定しないと何もできないという難しさがあったと思います。
 2点目は、スマフォアプリなら出来て当たり前ですが。。
 3点目は、スマフォ内部でのデータ保存はあくまで一時的なもので、DBサーバとかに連携出来るよう、結果的にメール送信として実装しています。メールをインターフェース手段としておけば受信側で何か用意すればどうにでも取り込めるだろうと、SMTPの設定をすれば、送信ボタン一発で送れます。
入力画面から1件単位で送信するのと、例えば1か月とか貯めて一覧画面からCSVで送信するのと2パターンを用意しました。今回のガス代は後者を使ってあとでエクセルとかで確認する予定です。
完全フリーですが、この連携箇所に何等かのニーズがあればユーザー開拓が出来るかなあという目論見もありましたが、何も無かったですね。。

 コンセプトうんぬん以前に、作ったアプリを自分自身が使う機会が無かったという事が、ほったらかしにしてしまったようです。
 作った人が使わないものを他の誰かに使ってもらえるという事は期待しちゃいけないですね。5年くらいの時を経て改めて使ってみましたが、暫く使い続けて問題と感じたところを改良してみようと思います。

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運用も考えた上でやらないといけませんね。

Windows10でHTAの画面フォントが崩れる

 少し前にHTAで作られたツールのWindows10対応をしていましたが、一部の画面で文字が巨大化したりで表示が崩れて目も当てられない状況。。

 でも全ての端末で起きる事象では無いらしく、特にパナのLet’s Note の場合に発生しているらしい。どうも、Win10のデスクトップ右クリックでディスプレイの設定を開き、「拡大縮小とレイアウト」が100%でないと崩れる模様。
 パナのLet’s Noteは、ディスプレイの解像度が高い為、文字を大きく表示したいと設定を変更する人が多いようです。

「拡大縮小とレイアウト」より設定を変更しながら対応結果の確認をしますが、HTAは「一部のアプリは、サインアウトするまで、拡大縮小の設定に応答しません」の対象なので、設定を変更してはサインアウトの繰り返しが必要。

 結局、HTAに書かれているCSSを確認したところ、%指定とかem指定とか結構適当になっていた事に起因している事が判明。
 フォントサイズを全てピクセル指定にして一件落着。

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

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