Lazy Diary @ Hatena Blog

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

Software Development

Dan Abramovにビジネスロジックを開発させたらできそうなこと

Reactの共同開発者であるDan Abramovが「俺はなんでも知ってるわけじゃない」として書いたブログがある。 overreacted.io 「あれも知らない、これも知らない」という調子で書かれているのだが、じゃぁ(本人が専門分野だと言っているReactやJavaScript、忘れ…

システム開発に使用する言語の習得にかける時間の例

まったくの素人から平均的プログラマとなるまでの時間*1の他に、システム開発への採用可否を判断できるまでにはどれくらいの時間が必要か?というのもある。 全く見ず知らずの言語をシステム開発に採用するのはリスクが高い、一方で言語に完璧に精通してから…

情報システムにおける「排他処理」のバリエーション

一言で「排他処理」と言っても、Javaで実装したWebシステムで「排他」というキーワードに関連する処理を考えただけでもこれだけある。初学者はこれらがごっちゃになることも多いんじゃないかと思うのだけれど、こういう切り口でノウハウをまとめた書籍とかっ…

Comparison of JavaScript libraries for QR code generation

# name URL License Last commit Stars 1 QR-Code-generator https://github.com/nayuki/QR-Code-generator MIT 2024/1/31 4640 2 node-qrcode https://github.com/soldair/node-qrcode MIT 2023/4/22 7036 3 qrcodejs https://github.com/davidshimjs/qrcod…

平均的プログラマとなるまでに必要な教育時間

satob.hatenablog.com このようなスキルレベルの指標を設けたとしよう。では、まったくの素人から、ある仕事に最低限求められるスキルレベル、たとえばレベル13~15あたりまで教育するにはどれくらいの時間が必要なのだろうか? 自分のエピソードとしては、…

HTTPメソッドのセマンティクスとビジネスロジックのインピーダンスミスマッチ

Webアプリケーションを実装する際に、各処理の実装のトリガとなるHTTPメソッドは何であるべきか?という話は議論の的になりやすいようだ。たとえばStackOverflowによる以下の議論など。 stackoverflow.com ここでは、特にエンタープライズアプリケーションの…

Webアプリケーションにおける誤った悲観ロックの実装方法(Q&A形式)

※(2024/02/11 追記)本記事内で「悲観排他」「悲観ロック」と表記がゆれているが、いずれも悲観的ロック(optimistic locking)を使った排他制御(mutual exclusion)のことを意味している。 Q1: ググると「悲観排他の実装にはSELECT FOR UPDATEを使え」と書い…

Webアプリケーションにおける誤った楽観ロックの実装方法(Q&A形式)

Q1: 排他キーに時刻を使わないほうがいいのはなぜ? A1: 以下のようなケースで楽観ロックが働かず更新が後勝ちになってしまうため。 https://qiita.com/NagaokaKenichi/items/73040df85b7bd4e9ecfc でいう「同一秒に複数の操作」というのがこれにあたる。 最…

デジタル庁デザインシステムで氏名が必須入力になっている理由

デジタル庁で公開されているデザインシステムのテンプレートでは、個人情報入力時になぜか氏名が別々の入力項目になっていて、しかも両方が必須入力になっている。 www.figma.com 名前に氏がない地域*1や、名前が4つのパーツに分かれる地域(スペインとか)…

ソフトウェア受注開発類型(ソース納品や著作権譲渡の有無の観点)

ソフトウェアの受注開発と一言で言ってもいろいろあるよなぁ、と思ったので、まずはソース納品や著作権譲渡の有無の観点で類型を列挙してみた。 # ベンダ既存ソース利用 ソース納品 ソースの著作権譲渡 改造部分 改造部分の著作権譲渡 コメント 1 しない し…

ブラウザのスクリーンショット取得を禁止する調達仕様の例

ブラウザでスクリーンショット取得を禁止しているシステムってどんなものがあるんだろう?と調べていたところ、ちょっと古いが、「厚生労働省LANシステムの更改整備及び運用・保守業務」で、iOSおよびAndroidでスクリーンショット取得を禁止する仕様が盛り込…

JaCoCoのデータから行単位のbranch coverage (C1 coverage)は復元できない

JaCoCoはC1 Coverageが取れると言っておきながら実際に取れるのはC1(分岐網羅)でなくC2(条件網羅)という問題がある。 この問題に対して、JaCoCo組込みのReportGeneratorを改造するか、またはReportGeneratorを改造するかして、コードカバレッジのデータ…

AltCoverでVB.NETのコードカバレッジが取れるか?

結論 OpenCoverがアーカイブモードに入ってしまった。後継として推されていたAltCoverでも、OpenCoverと同じように行単位のC1が取れそう。 手順 QuickStart Guideに記載の通り、テストケースの格納されているプロジェクト中でdotnet add package AltCoverす…

Pythonプログラム中からimport文レベルの依存関係ベースで不要なファイルを除外する

動機 ソースコード調査ツールの中には、調査対象となるソースコードのサイズで価格が決まるものがあります*1*2。そういったツールの利用価格を低く抑えるには、調査対象のソースツリーから不要なファイルはできるだけ除外したいところです。 米国大統領令でS…

ツールごとのC1カバレッジ取得方法比較

Java ReportGeneratorでは、分岐カバー率50%を超える行は緑色で表示されてしまい、条件網羅を記録するJaCoCoのようなツールでは逆に表示が分かりにくいという問題があることが分かったので、JaCoCoはEclipseの画面をそのまま表示。 JaCoCoはバイトコード単位…

OpenCloverでC1カバレッジが取れるか?

結論 JaCoCoでは行単位のC1カバレッジが取れないのだ、OpenCloverでは行単位のC1カバレッジが取れそう。C1が100%実行されていないのに100%と表示されてしまうといった問題もなさそう。 手順 手元の環境ではなぜかEclipseでOpenCloverを使う手順が上手く動か…

OpenCoverでVB.NETのコードカバレッジが取れるか?

結論 OpenCover VB.NETとかでググってもぜんぜん事例が出てこないので心配になるが、OpenCoverでVB.NETのコードカバレッジも取れる。ちゃんと行単位でのC1 coverage(branch coverage, 分岐網羅)も取れる。Coverletと違って、C1が100%実行されていないのに1…

CoverletでVB.NETのコードカバレッジが取れるか?

結論 https://docs.microsoft.com/ja-jp/dotnet/core/testing/unit-testing-code-coverage では「Coverlet とは、C# 用のクロスプラットフォームのコード カバレッジ フレームワーク」と言っているが、実際にはCoverletでVB.NETのコードカバレッジも取れる。…

セキュリティ対策を発注元に断わられたことを記録する方法は?

背景 要求仕様にセキュリティ対策の記載がない場合でも、十分に認知されているリスクはベンダが対策を行う必要があるとした東京地裁平成26年1月23日判決(平23(ワ)32060号)*1が出て以降、この点についてソフトウェア請負開発を行うベンダの立場は弱く、また…

バイナリファイルをアップロードするときのエンコーディング

Q: ブラウザからバイナリファイルをPOSTリクエストでアップロードするとき、HTTPリクエストボディ上ではどういう見た目になるんだっけ? URLエンコードされる?Base64になる? A: バイナリがそのまま渡される。ChromeのAdvanced REST Clientで確認。こんな感…

Spring Frameworkのmax-file-sizeによるアップロードファイルサイズ制限のまとめ

satob.hatenablog.com application.propertiesにspring.servlet.multipart.max-file-size=100のように設定することでサイズ制限設定可能。 Spring Frameworkのファイルアップロード機能は、Webコンテナが持っているmultipartリクエストの処理機能をそのまま…

Spring Frameworkのアップロードファイルサイズ制限のテスト

spring.servlet.multipart.max-file-size=100を設定した状態で、以下のようなControllerに様々なmultipart/form-dataリクエストを送信して結果を比較した。 @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile fi…

Validate memory consumption in a JUnit test case

For load test If you want to run a load test in a JUnit test case and get maximum memory consumption or GC count as a Java variable, the way to do it doesn't seem to be. For memory consumption of whole Java VM If you want to run some tests…

テストデータに使う電話番号の作りかたの案

ダメだぞ、03-1100-xxxx とか 03-1199-xxxx みたいな番号を例に使ったら。 https://t.co/BEAaGJatJZ— AoiMoe a.k.aしお兄P (@AoiMoe) 2021年9月23日 example.com のような例示用番号というのが明確には存在しないようなので。テストエース*1とかどうしてるん…

マークアップ言語に対する静的解析

JSPやXMLなどのマークアップ言語に対して、たとえば JSPで<form:password>タグのshowPassword属性はtrueにしたらダメ JETTでxlsxファイルに<jt:comment>タグは使ったらダメ Apache FOPで<fo:external-graphic>タグのsrc属性に#や%や空白が入っていたらダメ myBatisのMapper XMLでLEFT OUTER JOINのOUTERを省略</fo:external-graphic></jt:comment></form:password>…

監査証跡の記録をビジネスロジックとして実装する理由

多くのRDBMSでは、それぞれ監査証跡を記録する機能を備えている*1*2*3。一方で、RDBMSの監査証跡機能を利用せず、ビジネスロジックとして証跡を取得する(監査証跡を機能要件として定める)ケースもある。そこで、RDBMSの監査証跡機能を利用しない・できない…

外部プロセスとしてシェルスクリプトを起動する方法

任意の処理系から外部プロセスとしてシェルスクリプトを起動したい場合、大きく以下の2つの方法が考えられます。 (1) shの引数にシェルスクリプトを指定する /bin/sh foobar.sh のように、shの引数にシェルスクリプトを指定して起動する。 shに与えるパラメ…

Equivalent of native2ascii and native2ascii -reverse in CyberChef

CyberChef Unescape string is equivalent to native2ascii -reverse. CyberChef Escape string is almost equivalent to native2ascii. Escape level should be "Special chars". native2ascii never escape Escape single quotes, double quotes, or backt…

テスト用HTTPスタブサーバに適したプログラム

以下の条件で、以下のページで挙げられているツールをながめてみた。 nordicapis.com ボディの内容がこのパターンにマッチしたらこの内容を返す、また別の内容にマッチしたらこの内容を返す……というテストができること HTTPヘッダも含めたレスポンスの内容を…

匿名加工情報の作成に使う鍵つきハッシュの鍵をPBKDF2で生成する

個人情報を含むデータをもとにプログラムのテストデータを作成する場合などには、データの匿名化が必要になります。個人情報保護委員会「個人情報の保護に関する法律についてのガイドライン(匿名加工情報編)」*1には、管理用IDなど特定の個人の識別に使え…