弁護士鉄道遊郭編 #告発状202103 ### Twilogと,はてなダイアリーの過去記事

:CATEGORIES: @kanazawabengosi #金沢弁護士会 @JFBAsns 日本弁護士連合会(日弁連) #法務省 @MOJ_HOUMU #パソコン

 時刻は2021年2月28日12時56分になります。午前中,メインにしているBloggerAPIの投稿ができなくなりました。一定時間内にリクエスト処理が多すぎたためのリミットエラーになります。これまでにも何度かありました。今回は思いの外,回復が早く次の投稿が成功し再開となりました。

2021年02月28日09時13分の登録: 「松山事件」を@hirono_hideki @kk_hirono @s_hironoで検索 371件の該当 2021-02-28_09:13の記録 https://kk2020-09.blogspot.com/2021/02/hironohidekikkhironoshirono3712021-02.html
2021年02月28日12時24分の登録: 「「死刑捏造:」を@hirono_hideki @kk_hirono @s_hironoで検索 27件の該当 2021-02-28_09:15の記録 https://kk2020-09.blogspot.com/2021/02/hironohidekikkhironoshirono272021-02_28.html
2021年02月28日12時25分の登録: \?️つまらむ?️ @km0bake\わいせつ教員対策強化へ「検索ツール」拡充…40年分の免許失効が検索可能に : 社会 : ニュース : 読売新聞オンライン https://kk2020-09.blogspot.com/2021/02/km0bake_28.html
2021年02月28日12時39分の登録: 「^2021-02-27 .+」を@hirono_hideki @kk_hirono @s_hironoで検索 364件の該当 2021-02-28_12:39の記録 https://kk2020-09.blogspot.com/2021/02/2021-02-27-hironohidekikkhironoshirono3.html

 エラーが発生する直前の投稿が「09時13分の登録」,復旧したのが「12時24分の登録」になります。この間のことですが,いつもやっている処理ができなくなり,前回も半日以上は復旧がなかったような記憶なので,この間に,パソコンの利便性を高めることをやろうと考えました。

 当初は「grep ゲーム ./*」という処理を,コマンド履歴を遡ることなく実行することを目的としたのですが,検索結果がゼロの場合も記録を残せるようにしたいと考えました。義経や弁慶が出てくるプレステ2のゲームソフトのソフト名が探し出したのもきっかけでした。

 前から薄々とは考えにあったのですが,シェル関数を使ってやるつもりでした。シェル関数を使うのもずいぶん久しぶりで10年ほど使っていないような気もしたのですが,やってみるととても便利で今まで実行しなかったのが不思議で,魔法からとけたような気分になりました。

 Twilogのテキストデータは,手動でダウンロードする必要があり多少手間が掛かりますが,それでも1つに3分程度かと思います。それでもアカウントが3つあるのでやはり手間です。10分程度の時間ですが,その間に思考の中断となるのがやっかいです。

 beautifulsoup4というライブラリを使えば,ログインからダウンロードまで自動で処理することもできそうですが,そこまでやっていません。

 次が,このTwilogのダウンロードデータを利用したブログ投稿の最初の辺りの記事になるのかと思います。

(py37_env) ➜  twilog dp -p 2>/dev/null |grep 'を@hirono_hideki @kk_hirono @s_hironoで検索'|head -n 1
<span style="color: #C71585; font-size: 12px;">202102140612分の登録: 「蛸島丸」を@hirono_hideki @kk_hirono @s_hironoで検索</span> <span style="color: #01DFA5; font-size: 12px;">https://kk2020-09.blogspot.com/2021/02/hironohidekikkhironoshirono.html</span>

 これも最初は思いつきでやってみたコマンド処理だったのですが,途中で機能を増やし情報を付加しました。記事のタイトルに該当件数と実行日時の情報を加え,記事の最初には次のようにテキストデータのファイル名と件数を表示するようにしました。1行が1件のツイートになります。


222079 hirono_hideki210228.csv 128564 kk_hirono210227.csv 78504 s_hirono210227.csv 429147 合計
429,147件のツイートを検索し,364件の該当がありました。
2021-02-28_12:39の記録

 hirono_hideki210228.csvというファイル名は,Twilogの管理画面からダウンロードしたファイルを解凍したそのままのファイル名となります。圧縮されhirono_hideki210228.csv.gzだったファイルが,gunzipというコマンドの実行で,csvのテキストファイルになります。

 テキストファイルの内容は,別途作成した自作のコマンドで書式変換を行っています。この変換処理を行う前は,1行が1件のツイートにはなっておらず,ツイート内の改行がそのままになっています。Twilogの管理画面ではオプションがあるのですが,どちらも改行が入ります。

 本件告訴状と一緒にデータのDVDを添付する予定です。現時点でTwilogフォルダのデータサイズは137MBです。4GBは書き込みができると思うDVD-Rディスクです。wc -l *.csvはテキストファイルの行数を調べるコマンドですが,これも現時点で429147となっています。

 なお,これまでにブログに投稿した記事は,かなり失敗したものが含まれています。URLのリンクが無効になったものや,1行として処理されなかったツイートがあります。

 ファイル名はcsvになっていますが,データの区切りの記号を削除しているので普通のcsvファイルのようにエクセルでデータ区切りを読み込むことは出来ないと思います。規則性があるので,置換処理でcsv形式にすることはできると思います。その辺りはご自由にお使いください。


CSVファイルとは、「comma separated values」の略称を指し、その名の通り値や項目をカンマ(,)で区切って書いたテキストファイル・データのことをいいます。ファイルの拡張子は「.csv」となり、様々なソフトで開くことができるのが大きな特徴です。

 私の扱うテキストデータはすべて文字コードUTF-8になり,改行コードもUNIXです。おすすめなのがVSCodeというエディタですが,ある程度高機能のエディタであれば,文字コードや改行は自動で処理してくれると思います。Wordでも問題なく開いたように思います。

 次に,はてなダイアリーの過去記事になります。ずいぶん前に使っていたEmacsパッケージが自動で保存していたデータになります。hatena-modeだと思っていたのですが,違っていることが後になってわかってきました。まだ調べていないのですが,これから調べます。

(py37_env) ➜  twilog hatena-log-search "hatena.*mode" 1   
78件(該当) ”hatena.*mode”を過去のはてなダイアリーの記事から検索 ”2021-0228 14:15”の実行
(py37_env) ➜  twilog hatena-log-search "hatena-diary-mode" 1
20件(該当) ”hatena-diary-mode”を過去のはてなダイアリーの記事から検索 ”2021-0228 14:15”の実行
(py37_env) ➜  twilog hatena-log-search "hatena-diary-mode"  
./20110817:*1313608726*[Emacs]hatena-diary-mode.elをインストールしました。
./20110818:*1313664994*hatena-diary-modeを使ってプライベートモードの記事を復活してみました。
./20110818: まず使っていないノートパソコン(Fedora13)を起動し、scpでhatena-diary-modeのディレクトリをコピー。設定の記載もコピーし、ユーザ名をプライベートモード中のブログに変更。
./20110818: M-x hatenaでhatena-diary-modeを起動。M-x hatena-get-webdiaryを実行することで過去の全ての記事をローカルにダウンロード。
./20110818:*1313637528*[Emacs]hatena-diary-modeのインストール
./20110818: <a href="http://hatena-diary-el.sourceforge.jp/">hatena-diary-mode For Emacs</a>に一通りのことが書いてありました。以前のhatena-modeとほとんど変わりはないみたいですが、設定も簡単になりより使いやすくなったような気がします。
./20110818:*1313686126*[Emacs]hatena-diary-modeのインストール
./20110818: <a href="http://hatena-diary-el.sourceforge.jp/">hatena-diary-mode For Emacs</a>に一通りのことが書いてありました。以前のhatena-modeとほとんど変わりはないみたいですが、設定も簡単になりより使いやすくなったような気がします。
./20111117:*1321563766*hatena-diary-mode For Emacs
./20111118:*1321609560*hatena-diary-mode For Emacs
./20111118:hatena-modeから派生したhatena-diary-modeです。 Emacs上からはてなダイアリーを更新することができるElispです。
./20111118:プロジェクトを登録したあとで知ったのですが、 既に同名のhatena-diary-modeというものがあったのですね。 SourceForgeに申請してしまったからには変えるわけにもいかず、しょうがないのでこのままいきます。 既存のhatena-diary-modeはxyzzy上で動作するスクリプトのようですが、こちらはEmacs上で動作する Elispプログラムですのでよろしくお願いいたします。
./20120611:*1339423541*hatena-diary-mode形式のファイル名を「はてダラ」用ファイル名に一括変換 &#171; 日暮途遠(Linux)
./20120611:hatena-diary-mode形式のファイル名を「はてダラ」用ファイル名に一括変換 &#171; 日暮途遠(Linux) http://bit.ly/LNni3f
./20120611:昨日、久しぶりに使って、しばらくの間使えていたhatena-diary-modeが使えなくなっていました。エラーは出ないのですが、投稿も更新も反映されない状態です。エントリのIDらしき数字が取得できることもありますが、Hatena::Diaryのほうには全く登録されていないみたいです。データの取得の方は問題なく出来ているみたいです。
./20120704:*1341365892*[Emacs}NTEmacsにhatena-diary-modeをインストール
./20130507:*1367814643*[コマンド]hatena-diary-modeの投稿用にカレントディレクトリのHTMLファイルの内容を一時ファイルにまとめる
./20130507: 一応ファイル名はHTMLの拡張子をつけたものを対象にしています。ファイル名の拡張子を除いた部分を、エントリのタイトル名にし、続けて本文を読み込むという処理を繰り返しています。hatena-diary-modeでは、行頭に*をつけるとそれが見出しになるからです。
./20130507: Emacsのhatena-diary-modeを前提にしていますので、hatena-diary-modeのバッファで、一時ファイルの内容を読み込み、C-c C-pで全部投稿されますが、Hatena::Diaryでは一日あたりの投稿データ量に制限があり、警告もないまま切り捨てになってしまうので、要注意です。
./20130507:*1367814644*[コマンド]日付を指定してhatena-diary-modeの投稿用にカレントディレクトリのHTMLファイルの内容を一時ファイルにまとめる
(py37_env) ➜  twilog 

 「./20110817」が検索で該当したファイル名になります。20110817がファイル名になりますが,その前にある記号はカレントディレクトリを意味するものです。羽咋市に住んでいる頃に使っていたものと思い込んでいたのですが,2011年8月17日に初めてインストールしたみたいです。


 「.hatena.hirono-hideki」というパソコンのフォルダになるのですが,1,370のテキストファイルがあり,データサイズは16MB,1,31443行のテキスト,286,849のワード,13,388,205文字となっています。

 ファイル名は,00801014 19641126 19920401 19920402 19920408 19920409 19920410 19920411 19920412 19920413から始まり,20150301 20150302 20150303 20150304 20150305 20150306 20150307 20150308 20150309 20150310で終わっています。

 タイムスタンプをみると2月10日がほとんどでした。はてなダイアリーはサービス自体が数年前に終了しており,先にご紹介したTwilogとは異なり,今後内容が更新されることのないデータになります。これも他のものを探していてたまたまファイルを見つけたところから思いつきで始まりました。

 ファイル名は拡張子がついておらず,Windowsパソコンではアプリとの関連付けがなく,そのままでは開けないと思いますが,プログラムを指定して実行とか,起動しているアプリにファイルをドラッグ・アンド・ドロップしても開けると思います。

 Linuxの環境があれば,renameというコマンドをインストールして,「rename "s/([0-9]{8})/\1\.txt/" ./????????」とやれば,ファイル名を一括変換できます。他にもファイル名の一括変換方法がいろいろあると思います。

 このrenameコマンドで使ったのが正規表現,コマンドの引数でファイル名の一括してをしたのがワイルドカードになります。正式には半角の*がワイルドカードでパターンマッチはファイルグロブになるのかもしれません。滅多に見かけない用語ですが。


UNIX/Linux のシェル sh・bashcshtcsh で使うことができるファイルグロブ・ワイルドカードの使い方を説明する。ファイルグロブ・ワイルドカードとは、シェルが * ? {} [] ~ などの文字列を解釈し、ファイル名として展開することである。なお、正規表現と似てはいるが、別物である。

 正規表現はぜひともご活用していただきたいところですが,Twitterの弁護士でも話題はほとんど見かけず,不思議に思っていることの1つです。

 すでにシェル関数の使用例をご紹介しているのですが,次が午前中に作成した2つのシェル関数の内容になります。使っているシェルはzshになりますが,半年ほど前からデフォルトで使うようになりました。以前にも使いましたが長続きすることはなく,標準的なbashに戻っていました。

#2021-02-28
twilog-serch() {
    cdir=`pwd`
    cd ~/twilog

    if [ -z $2 ]; then
        egrep $1 ./*.csv
        if [ $? = 1 ]; then
            echo "0件(該当なし) ”${1}”を@hirono_hideki @kk_hirono @s_hironoで検索 ”`date '+%Y-%m%d %H:%M'`”の実行。"
        fi
    else
        cnt=`egrep $1 ./*.csv |wc -l`
        echo "${cnt}件(該当) ”${1}”を@hirono_hideki @kk_hirono @s_hironoで検索 ”`date '+%Y-%m%d %H:%M'`”の実行。"
    fi

    cd $cdir
}

hatena-log-search() {
    cdir=`pwd`
    cd ~/.hatena.hirono-hideki
    if [ -z $2 ]; then
        egrep $1 ./*
        if [ $? = 1 ]; then
            echo "0件(該当なし) ”${1}”を過去のはてなダイアリーの記事から検索 ”`date '+%Y-%m%d %H:%M'`”の実行"
        fi
    else
        cnt=`egrep $1 ./* |wc -l`
        echo "${cnt}件(該当) ”${1}”を過去のはてなダイアリーの記事から検索 ”`date '+%Y-%m%d %H:%M'`”の実行"
    fi

    cd $cdir
}

 $1が1番目の引数の値になります。2番目に引数を入れた場合は,処理を切り替え,結果の表示ではなく検索結果の該当数の表示にしています。数を確認したいという場合を想定しました。数が多すぎる場合の結果の表示にも使えます。実際にやってみます。処理時間も計測します。

(py37_env) ➜  twilog time hatena-log-search "(元検|モトケン|矢部.*弁護士)" 1
6927件(該当) ”(元検|モトケン|矢部.*弁護士)”を過去のはてなダイアリーの記事から検索 ”2021-0228 15:11”の実行
(py37_env) ➜  twilog time twilog-serch "(元検|モトケン|矢部.*弁護士)" 1     
22122件(該当) ”(元検|モトケン|矢部.*弁護士)”を@hirono_hideki @kk_hirono @s_hironoで検索 ”2021-0228 15:11”の実行。

(py37_env) ➜  twilog time ./cmd-agv "(元検|モトケン|矢部.*弁護士)"
"(元検|モトケン|矢部.*弁護士)"429,147件のツイートを検索し,22122件の該当がありました。

./cmd-agv "(元検|モトケン|矢部.*弁護士)"  0.72s user 0.19s system 145% cpu 0.621 total

 シェル関数はtimeコマンドで処理時間の計測が出来ないようです。ただの検索より工数の多いブログ投稿用のコマンドで計測をしてみました。「429,147件のツイートを検索し,22122件の該当」という処理で処理結果をブログ投稿用のテキストファイルに書き出しをしています。

 見た目に変化はないですが,セレクションというクリップボードに似た領域に「arg-bpost.py "「(元検|モトケン|矢部.*弁護士)」を@hirono_hideki @kk_hirono @s_hironoで検索 22122件の該当 2021-02-28_15:18の記録"」を格納し,マウスに中ボタンで貼り付けが出来ます。

 そのままブログへの投稿処理を行うのではなく,結果を確認してからコマンドのテキストを端末に貼り付け,エンターキーで実行しています。

 Windows10でもWSL2でほぼ同じことができる環境を整えているのですが,LinuxUbuntuの環境とはできることに違いがなくても処理に時間がかかります。1秒の処理に10秒掛かっても一時間に数回であればさほど影響はないのですが,セレクションがまともに使えないのがWSL2の悩みでした。

 このセレクションは,マウス操作以外にもコマンドの実行に使えます。コマンドの実行結果として変数に代入する処理です。これは他で見た記憶がなく,ずっと前になりますがやってみると出来たので,それからちょっとした処理には使うようになりました。

(py37_env) ➜  twilog word=`xsel -o`
(py37_env) ➜  twilog echo $word
"(元検|モトケン|矢部.*弁護士)"
(py37_env) ➜  twilog word2=`xsel -b`
(py37_env) ➜  twilog echo $word $word2
"(元検|モトケン|矢部.*弁護士)" 2021-02-28_15:18の記録

 余計なことを書いてしまったような気もしますが,WindowsパソコンとLinuxの違い,Linuxを使うことが多い理由をご紹介しました。Windowsパソコンでも工夫と環境整備で,Linux以上の効率化が図れるかもしれません。C#で告発事件専用のアプリを開発してみたいとも考えています。

 もともとは,過去に記述していない事柄を洗い出して確認したいという思いがありました。けっこう前から考えていたのですが,hatena-diary-modeの過去のデータの発見が契機になりました。2月10日のことでした。同じテキスト処理として発展させたのがTwilogになります。

 実際,はてなダイアリーで記述しているものと思っていた事実が存在しないと確認した例があります。蛸島関係ですが,こまかく繰り返し記述したと記憶にあったのは過去の裁判の書面になるのかもしれません。