Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

情報システムの受託開発中に発見されたバグの情報の行方

まず、あなたの会社では、知財管理の関係から、「業務情報」の社外提供には役員レベルの判子が必要だとしよう(大きな会社の場合、これは非常にハードルが高い)。また、あなたの作業に対する支出はすべて、あなたが現在作業中のプロジェクトの財布から出るとしよう。

また、このバグは、OSS自体の修正なしに(ラッパーを書くとかで)回避可能であるとしよう。プロマネからは、OSS自体の品質保証の責任を負わないように、OSS本体に手を入れるのは避けること、という指示も来ているとしよう。

そんなに無茶な前提ではないと思うが、どうだろう?「OSSは利用上問題となるバグがないのを精査してから利用すること」「バグはそのうち誰かが直すか、過去に誰かが回避策を見つけてるだろ」みたいな考え方の会社なら、この程度は普通なんじゃないか?

さて、あなたはこのバグを業務アプリの開発中に見つけたので、このバグの情報は業務時間中に得られた業務情報と判断され得る。業務情報であれば、まず「これってバグかな?」という質問をそのOSSのフォーラムとかに投げることは、個人的な活動としては行えない。

「業務情報であれば」というより、公開されているソフトウェアの挙動に関する知識を「業務情報である」と判断している相手が社内にいた場合、「それは業務情報には当たらないのでは」という合意を形成するのが困難、という方が実態に近いな。

さて、ここで既に自分で当該バグの回避策を見つけていたとしよう。この場合、プロジェクトの職務上の作業として、同様の質問を当該OSSのフォーラムに投げる(で、誰かにBTSに登録してもらう)ことはできない。これは、プロジェクトの財布に影響があることに起因する。

すでに回避策があるのだから、その作業はプロジェクトの財布に対して追加の支出にしかならない。そのため、フォーラムへ投げるという作業内容について、プロジェクトの作業として妥当であるという説明責任が果たせない(プロジェクトの金を関係ない作業に流用したことになってしまう)。

では未解決の問題なら質問ができるかというと、そうでもない。開発用ツールのサポート契約に「提供した情報は問題の原因調査以外に使わない」等の条項があるケースなら、業務としての開発元への問い合わせにもOKが出やすいが、サポート契約のないOSSではそうはいかない。

次にBTSへの登録についてだが、これもフォーラムへの投稿と似たような理由で行えない。

じゃあいきなりパッチ書いて送り付けたらいいじゃないか、となるが、そうもいかない。バグの回避策としてラッパーを書いてたりすると、ラッパーの内容とパッチの内容がどうしても似通ってしまう。知財部門に「このソース社外に持ち出したでしょ、社則違反ね」と言われると切り返せない。

幸運にも知財部門がOSSにある程度理解があって「パッチ出すなら業務としてやりなさい(そこから生まれるうまみを期待してる)」と言ってたとしよう。今度は、開発作業の認可を出す部署が問題になる。

開発作業認可を出す部門の目標に「不要不急の開発は避ける」とかがあったりすると不幸で、知財部門は「出すなら業務として出せ」と言ってるのに、開発作業の認可をする部署は原価低減のために「じゃあそもそも出さなきゃいいじゃん」と言ったりする。

社内に緊縮財政が敷かれてたりすると、そういう目標が設定されがちですね。で、その結果、プロマネはパッチの作成と投稿に必要な工数をプロジェクトに積むことができず、「そのパッチの公開に必要な作業、誰のお金でやるの?」ということになる。

さて、幸運にもプロジェクトの財布に余裕があり、知財部門もプロマネOSSへのコントリビュートに対して理解があったとしよう。かなり幸せな環境だが、それでもパッチの提供はできない可能性がある。

業務アプリの受託開発では、お客様へソースを納品する際に「成果物の著作権はお客様へ譲渡する、開発元は著作者人格権を行使しない」という契約になってることがよくある。

そのため、問題のバグの対策用ラッパーを含むアプリをお客様へ納品した後では、パッチの提供可否の判断は自社では行えず、お客様の組織の役員レベルの判子が必要になるという、かなりな無理ゲーになってしまう。

また、お客様に納品する前にパッチをOSS本体へ組み込めたとしても、結果としてお客様に納めるソースにはOSSの一部によく似たコードが含まれることになる。お客様が自己監査でそのコードを見つけたときにどうなるかを考えると、パッチの提供はためらわれる。

開発の初期にOSSのバグを発見し、パッチを提供して、それが取り込まれた最新バージョンのOSSを使ってアプリの再テストを消化し納品、とトントン拍子で行けば、これまで挙げた条件をクリアできなくもない。

ただ実際には、そもそも開発初期に利用にあたって致命的なバグの見つかったOSSは「利用しない」という判断がされるだろうし、それにバグが見つかる頻度はテストケースの消化が本格化する開発中期以降の方が高いから、これは成立するケースの方が少ないだろう。

実際は、開発の初期にOSSに軽微なバグが見つかり、パッチをupstreamへ提供したらラッパーは削除、テスト環境は古いバージョンのOSSのままでテスト消化を継続。件のバグが再現するテストケースの消化は後工程まで保留するのが現実的かな。

その上で、パッチが取り込まれた最新バージョンのOSSがリリースされたら、正式なテスト環境は古いバージョンのOSSのまま、別に新しいバージョンのOSSを入れたテスト環境を立ち上げ、保留にしてたテストケースは但し書きつきでそっちで実行する、とかかなぁ。

新しいバージョンのOSSには、提供したパッチ以外の変更も入ってるだろうから、これまで積み上げたテスト結果について「新しいバージョンのOSSでも大丈夫です」とは言いにくい。修正箇所が限定される保証もないしね。

他にも、そのOSSへのコントリビュートって、プロジェクトの財布で賄うもんなの?という問題もある。アプリをお客様に納めるか、自社資産になるかで、プロジェクトにかけるお金は税制上の扱いが違うと思うのだけど、どうなってるんだろうね?ここは専門外なので、よく分からない。

とにかく、業務で使ってるOSSのバグ修正には、かようにややこしいハードルを色々クリアする必要がある、という話。じゃあどうしたらいいか、というと、各社どうしてるんだろうね?(投げっぱなしでおしまい)

You should disable Adblock Plus (Chrome) in Alfresco

Context:

Problem:

“New Topic” button on the discussion forum disappear.

Reason:

Adblock Plus added “display: none” to the area that has the “New Topic” button and the RSS feed button, if you subscribe some filter list.

Solution:

Set Adblock Plus to “Disabled on this site” on Alfresco site. This operation adds the site to the whitelist in Adblock Plus.

Chrome sends another request for "View page source"

Context:

  • You are developing a web application that has anti-CSRF function (transaction tokens).
  • You are using Chrome to test and debug the application.

Problem:

Once you had viewed the HTML source with “View page source” on the context menu, following requests will be failed because of unmatched token.

Reason:

If a page had received with HTTP headers like “Cache-Control: private, no-store, no-cache, must-revalidate”, Chrome will send another request for “View page source” operation to show the source of the page. It seems by design.

Solution:

  • Use TCP/IP monitor in Eclipse to see what returned from server.
  • Use Chrome Developer Tools to inspect the DOM of the page.

三重は中部か近畿か、静岡は東海か関東かみたいな表

三重県のサイトに「三重県は中部地方?近畿地方?」という面白い情報があった。 同様の話は静岡県などにも言える(警察庁としては関東管区警察局の管轄区域だが、国土交通省としては中部地方整備局の管轄区域)。 他にも、Chakuwikiには「もし道州制の境界線があの政府機関と同じになったら」なんていうページがあって、カオスさがよく分かるようになっている。

そこで、様々な機関において各県がどの区域に入っているかを表にまとめてみた。順序はJIS X 0401 の県コードに従っている。 結果としては、新潟県(中部・関東・北陸・信越)の4パターンが最大で、他3パターンとなるのは石川県・福井県・長野県・静岡県三重県

  • 法務局・財務局・矯正局・管区気象台などは管区が決まっているだけで地域名を示していないため本表の対象外とした。
  • 地方整備局の管区は河川流域等に沿って1つの県を3つに分けるケースがあるため本表の対象外とした。
  • 管区の下に支局がある場合(例:中国四国管区行政評価局 四国行政評価支局)は支局の区分(四国)を優先した。
  • 複数地域名をつなげた管区(例:新潟県の「北陸信越」)は、より近い地域名(例:「信越」)と同じとして扱った。
    J-LIS 管区警察局 経済産業局 地方運輸局 地方農政局 森林管理局 地方事務局 公正取引委員会 管区行政評価局 総合通信局 地方厚生局 パターン
01 北海道 北海道 なし(北海道警察 北海道 北海道 北海道 北海道 北海道 北海道 北海道 北海道 北海道 北海道
02 青森県 東北 東北 東北 東北 東北 東北 東北 東北 東北 東北 東北 東北
03 岩手県 東北 東北 東北 東北 東北 東北 東北 東北 東北 東北 東北 東北
04 宮城県 東北 東北 東北 東北 東北 東北 東北 東北 東北 東北 東北 東北
05 秋田県 東北 東北 東北 東北 東北 東北 東北 東北 東北 東北 東北 東北
06 山形県 東北 東北 東北 東北 東北 東北 東北 東北 東北 東北 東北 東北
07 福島県 東北 東北 東北 東北 東北 関東 東北 東北 東北 東北 東北 東北・関東
08 茨城県 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東
09 栃木県 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東
10 群馬県 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東
11 埼玉県 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東
12 千葉県 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東
13 東京都 関東 なし(警視庁) 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東
14 神奈川県 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東
15 新潟県 中部 関東 関東 北陸信越 北陸 関東 関東 関東 関東 信越 関東 関東・信越・中部・北陸
16 富山県 中部 中部 中部 北陸信越 北陸 中部 中部 中部 中部 北陸 東海北陸 中部・北陸
17 石川県 中部 中部 中部 北陸信越 北陸 近畿中国 中部 中部 中部 北陸 東海北陸 中部・北陸・近畿
18 福井県 中部 中部 近畿 中部 北陸 近畿中国 中部 近畿中国四国 近畿 北陸 近畿 中部・近畿・北陸
19 山梨県 中部 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東 関東・中部
20 長野県 中部 関東 関東 北陸信越 関東 中部 関東 関東 関東 信越 関東 関東・信越・中部
21 岐阜県 中部 中部 中部 中部 東海 中部 中部 中部 中部 東海 東海北陸 中部・東海
22 静岡県 中部 関東 関東 中部 関東 関東 中部 中部 中部 東海 東海北陸 中部・関東・東海
23 愛知県 中部 中部 中部 中部 東海 中部 中部 中部 中部 東海 東海北陸 中部・東海
24 三重県 近畿 中部 中部 中部 東海 近畿中国 中部 中部 中部 東海 東海北陸 中部・近畿・東海
25 滋賀県 近畿 近畿 近畿 近畿 近畿 近畿中国 近畿 近畿中国四国 近畿 近畿 近畿 近畿
26 京都府 近畿 近畿 近畿 近畿 近畿 近畿中国 近畿 近畿中国四国 近畿 近畿 近畿 近畿
27 大阪府 近畿 近畿 近畿 近畿 近畿 近畿中国 近畿 近畿中国四国 近畿 近畿 近畿 近畿
28 兵庫県 近畿 近畿 近畿 近畿 近畿 近畿中国 近畿 近畿中国四国 近畿 近畿 近畿 近畿
29 奈良県 近畿 近畿 近畿 近畿 近畿 近畿中国 近畿 近畿中国四国 近畿 近畿 近畿 近畿
30 和歌山県 近畿 近畿 近畿 近畿 近畿 近畿中国 近畿 近畿中国四国 近畿 近畿 近畿 近畿
31 鳥取県 中国 中国 中国 中国 中国四国 近畿中国 中国 中国 中国四国 中国 中国 中国
32 島根県 中国 中国 中国 中国 中国四国 近畿中国 中国 中国 中国四国 中国 中国 中国
33 岡山県 中国 中国 中国 中国 中国四国 近畿中国 中国 中国 中国四国 中国 中国 中国
34 広島県 中国 中国 中国 中国 中国四国 近畿中国 中国 中国 中国四国 中国 中国 中国
35 山口県 中国 中国 中国 中国 中国四国 近畿中国 中国 中国 中国四国 中国 中国 中国
36 徳島県 四国 四国 四国 四国 中国四国 四国 四国 四国 四国 四国 四国 四国
37 香川県 四国 四国 四国 四国 中国四国 四国 四国 四国 四国 四国 四国 四国
38 愛媛県 四国 四国 四国 四国 中国四国 四国 四国 四国 四国 四国 四国 四国
39 高知県 四国 四国 四国 四国 中国四国 四国 四国 四国 四国 四国 四国 四国
40 福岡県 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州
41 佐賀県 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州
42 長崎県 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州
43 熊本県 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州
44 大分県 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州
45 宮崎県 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州
46 鹿児島県 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州 九州
47 沖縄県 九州 九州 なし(沖縄総合事務局 なし(沖縄総合事務局 なし(沖縄総合事務局 九州 沖縄 なし(沖縄総合事務局 沖縄 沖縄 沖縄 沖縄・九州

他の気付きとしては、以下の点が挙げられる。

  • 中国・四国・九州の各県は間違えられようがないのでこんな心配はない
  • 栃木県民に「南東北」と言うと怒るというネタがあるが、どの機関でも関東になってる
  • 各省庁はみんな「山梨は関東」と言っているのに一人だけ中部と言い張るJ-LIS(旧LASDEC)

How to reduce the size of monochrome almost-binary image from scanners

I scanned a B4-size monochrome paper document with Epson EP-805A through Epson iPrint iOS app, and resulted a 1.9MB jpeg file (It’s too big, isn’t it?).

You can reduce the size of monochrome almost-binary image with Imagemagick convert command. I prefer options like this (I also converted to PNG):

convert -gamma 0.7 -posterize 3 -colors 16 EPSON001.jpg EPSON001.png

And you can convert all the jpeg files in current directory at once like this:

for i in *.jpg; do convert -gamma 0.7 -posterize 3 -colors 16 $i `basename $i .jpg`.png; done