Lazy Diary @ Hatena Blog

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

相談窓口にLINEを用いる根拠が示されてる資料がほしい

奥村先生も言っている通り、これのソースが欲しいんよ……

なんでかと言うと、NISCが出している「政府機関・地方公共団体等における業務での LINE 利用状況調査を踏まえた今後の LINEサービス等の利用の際の考え方(ガイドライン)」*1

相談業務等のコンタクトポイントの一つとして LINE サービスを利用する場合は、相談内容等の機密性を要する情報等が LINE 社側に残らず、これらの情報は委託先等のデータベースに直接格納・保管されるシステム構成とすること

と示されているから。もちろん

ただし、身体人命に危険が及ぶ可能性の高い相談事業(いじめ、虐待相談等)において、緊急性を要する相談(画像含む)が LINE サービス上で寄せられ、例外的に LINE サービス上で要機密情報を含む緊急対応をすることは排除されない。

とされてはいるんだけど、「例外的に」という但し書きつきなんだよなぁ……

実際、相談窓口としてはLINEは非常に優秀で、チャットと比べて桁が違うというデータ*2*3厚労省から出ている。 ここで、相談窓口を設けたとしても「LINEでのやりとりじゃないから」という理由で離脱率が上がってしまうと業務として意味がなくなってしまうので、「NISCのガイドラインはあるけど、それでもこういう理由でLINEを使う意味があるんですよ」と言いたい状況はあるはずなんですよ。

ちなみに上記ガイドラインを考慮しつつ、チャット型でないと離脱率が上がるのでは?という仮説のもとに問題の対策を狙ったと思われるシステムをトランスコスモスが提供*4している。だけど上記の厚労省のデータの通り、「メッセージアプリと類似したインターフェイス」ではダメでLINEが必要っぽいんだよね。

あとは、自治体が法令に基いて相談窓口を設けている場合、ガイドラインはあるにせよLINEでの相談受付が正当業務行為にあたるとかはないのかな?(ガイドラインには罰則規定はないけど、ガイドラインに従っていなかったことにより発生した事件に対して)。

*1:https://www.nisc.go.jp/pdf/policy/general/guideline210430.pdf

*2:https://www.mhlw.go.jp/content/h30h-2-4.pdf 相談延べ件数10,129件のうち、LINEが10,017件、チャット(LINE等のメッセージアプリと類似したインターフェイス)が87件、Twitterが25件

*3:https://www.mhlw.go.jp/content/12200000/000494974.pdf#page=21 相談延べ件数9,548件のうち、LINE 8,551件、チャット 997件

*4:https://www.trans-cosmos.co.jp/company/news/210819.html

SQLite: Get the information of all tables as HTML

You can get the information of all tables as HTML with headers with a one-liner like this:

for i in `sqlite3 AdventureWorks.db ".tables"`; do echo "<h3>$i</h3><table>"; sqlite3 -html -header AdventureWorks.db "PRAGMA table_info('$i');"; echo "</table>"; done

Note that you can't use .schema in the same manner because .schema get the DDL of all tables in the database automatically.

SQLite: Count the number of records in multiple tables with a shell script

Background

In SQLite, you can list the name of tables with the .tables command or the following SQL:

SELECT name FROM sqlite_master WHERE type = 'table' and name NOT LIKE 'sqlite_%'

Problem

You can't list the number of columns of multiple tables with SQL because all table names in a SQL statement need to be known at the compile time (see https://stackoverflow.com/a/59160460/3902663).

Solution

You can list the table names and the number of their records with the following shell script:

for i in `sqlite3 AdventureWorks.db ".tables"`; do echo $i; sqlite3 AdventureWorks.db "SELECT COUNT(*) FROM $i"; done

Postgres-WASMの環境に日本語を入力できない

問題

Postgres-WASMをオンラインで試せるサイト、たとえばSupabaseのPostgres-WASMCrunchy DataのPostgres-WASMを使ったチュートリアルでは、コンソールから日本語を入力しようとすると文字化けしてしまう。たとえば、Linkedin LearningのSQL基本講座の内容を実行しようとしても、日本語を含むデータをINSERTできない。

原因

SupabaseのPostgres-WASMでは\qでshに落ちることができるが、localeに関する環境変数は設定されていない*1。そのため、localeがCになっておりUS-ASCII以外の文字は入力できないものと思われる。

psを見てもTTYらしきものがないし、who am iでもログイン中のユーザが表示されないのでコンソールのlocaleがどうなっているのか分からない。whoの出力を見るとBusyBoxベースの環境みたいだけど、BusyBoxだとlocale設定ってどうやるの? それともlocaleの設定方法ってlibcごとに変わるんだっけ。現在の環境で使われてるlibcの種類が何か知る方法ってあるんだっけ?(コンテナベースのLinux環境にぜんぜん触れてない年寄り)

*1:localeコマンドは用意されていないようで実行できない

EdgeのIEモードだとJavaScriptでCtrl-Nの入力をキャプチャできない

IEではCtrl-Nの入力に反応する処理をonkeydownイベントで実装できたんだけど、EdgeのIEモードではそれが使えなくなっているらしいので実験した。

準備

  • ReplitでこんなHTMLとJavaScriptを用意しておく。
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>replit</title>
  <link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>
  <ul id="parent"></ul>
  <script src="script.js"></script>
</body>

</html>
function consoleKeycode(event) {
  var ul = document.getElementById("parent");
  var li = document.createElement("li");
  li.textContent = event.key + ", Ctrl = " + event.ctrlKey;
  ul.appendChild(li);
  event.stopPropagation();
  event.stopImmediatePropagation();
  event.preventDefault();
  event.keyCode = 0;
  return false;
}

document.onkeydown = consoleKeycode;
(New-Object -ComObject InternetExplorer.Application).Visible = $true
  • 上記Replitのページ(Replitの右ペインでWebviewのアドレスバーに表示されているURL。https://【repl名】.【ユーザ名】.repl.co)をIEとEdgeでそれぞれ開く。Edgeは「Internet Explorerモードで再読み込みする」を実行しIEモードにしておく。

  • 以下の処理を「SendKeys.vbs」として保存する。

Set WshShell = CreateObject("WScript.Shell")
WScript.Sleep(2000)
WshShell.SendKeys ("^n")
  • SendKeys.vbsをダブルクリックで実行したあと、2秒以内にブラウザウィンドウにフォーカスを当てる。

結果

いずれの場合も、まずCtrlキーが入力され、次にCtrl-Nが入力された動きになる。

  • IEでは以下のように表示され、新しいウィンドウは開かない。
•Control, Ctrl = true
•n, Ctrl = true
  • EdgeのIEモードでは以下のように表示され、新しいウィンドウが開く。
•Control, Ctrl = true
  • EdgeをAppモードで開いたうえでIEモードにした場合 *1 も、以下のように表示され、新しいウィンドウが開く。
•Control, Ctrl = true

*1:Edgeの設定で「Internet Explorerページ」にReplitのURLを指定したうえで、PowerShellから「& 'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe' --app="https://【repl名】.【ユーザ名】.repl.co"」で起動する。