FrontPage

2021-1-11

「回想イトマン事件」のどうでもいい話

 

 
 大塚将司「回想イトマン事件」読了。事件当時大塚がやったジャーナリストとしての矩を踰える行為に対しては賛否がありそうだが、私はいいんじゃないかと思う。相棒の國重惇史の(川崎定徳の佐藤茂を介しての)稲川会とのつながりにも自覚的であったようだし。
 まあ、でも、やったことは、2016年に出た國重の著書「住友銀行秘史」でばれちゃってるから、今さら賛否もないのか。
 

 
 以下、「回想イトマン事件」の、本筋とは関係ない、どうでもいい話。
 イトマン事件発覚前の1990年1月ごろ、日本経済新聞記者の大塚は財界クラブ(経団連や経済同友会などを担当する記者クラブ)に属していたが、クラブ記者たちの大きな関心事は次期経団連会長人事で、新日鉄出身の斎藤英四郎が5月以降3期目も続投するのかどうかということだった。
 営業畑出身の斎藤は陽気で多弁だったが、記者たちの間での評判は芳しくなく、「暗愚の帝王」と言う者もいたほど。
 対して、巷間、次期会長候補と言われていた東京電力会長の平岩外四は、寡黙で訥弁だったが、読書家で博学多才と見られていた。

 当時、平岩さんは経済誌に書評などを書き、哲学書から文学書まで古今東西の古典を渉猟しているようなイメージができあがっていましたが、実は、それはちょっと違うんですね。
 本当は、東電の総務部にゴーストライターがいて、その人が本を読んで書いていたのです。僕は、その人の打ち明け話を聞いているので間違いありません。

 ただし、平岩が読書家ではなかったのかというと、そんなことはなくて、大塚は夜回り先の平岩邸の応接間で、紐でくくられた椎名麟三全集を目撃している(椎名麟三は財界人が読むような作家ではないため、大塚は、平岩の秘密を垣間見たような気がしたという)。また、平岩邸の地下にあった十畳ほどの書庫には、図書館にあるような移動式の書架が並んでいた。

作られたイメージの側面があったとはいえ、平岩さんが財界随一といってもいい“読書家”だったのは間違いなく、営業マンを地で行く斎藤さんに比べると、“知識人”“インテリ”の範疇に入り、人格識見のある人物だったのは間違いなかったんですがね。

 そう思ってんなら、イトマン事件とは何の関係もないんだから、ゴーストライターのことは暴露しなくてもいいのに。


2020-12-27

2021年のJRA重賞カレンダーの作成

 

calendar.png

 JRAは例年Googleカレンダーなどに登録できる開催日程や重賞日程をまとめたicsファイルを提供している(こちらのページ参照)。
 しかし、2020/12/27現在、2021年の開催日程のicsファイルはすでに提供されているが、重賞日程の方はまだ提供されていない。これは、一部の重賞の格付けがまだ確定していないためだと思われる。先のページには、

注記:	重賞スケジュールファイルは2021年1月中旬にアップ予定です。

とあるため、もう二、三週間待てばいいのだが、私としては、年明けには金杯の開催日程をどうしてもGoogleカレンダーに表示しておきたい!
 そこで、すでにJRAから提供されている格付け未確定の情報を含む2021年の重賞レース一覧のページのデータを元に、勝手にicsファイルを作成して、Googleカレンダーに登録してみた。
 以下のスクリプト(makevcal.pl)を実行し、

./makevcal.pl > grace.ics

 作成されたicsファイルをGoogleカレンダーにインポートするだけ。

#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use HTML::TableExtract;
use Time::Piece;
use Time::Seconds;
use utf8;
binmode(STDOUT, ":utf8");

my $url = 'https://www.jra.go.jp/datafile/seiseki/replay/2021/jyusyo.html';
my $ua = LWP::UserAgent->new();
$ua->agent('Mozilla/4.0 (compatible; MSIE 6.0\'; Windows NT 5.0;)');
my $res = $ua->get($url);
my $html = $res->decoded_content;

my $te = HTML::TableExtract->new();
$te->parse($html);
my ($ts) = $te->first_table_found();

print("BEGIN:VCALENDAR\n");
print("VERSIONS:2.0\n");
print("X-WR-CALNAME:JRAGRADERACE2021\n");
print("X-WR-TIMEZONE:Asia/Tokyo\n");

#[0] \ "1月5日火曜",
#[1] \ "G恵羯涯眷",
#[2] \ "中山",
#[3] \ "4歳以上",
#[4] \ "芝2,000メートル",

for my $row ($ts->rows) {
    my $date = $row->[0];
    my $desc = $row->[1];
    my $location = $row->[2];
    my $age = $row->[3];
    my $course = $row->[4];

    next if ($date eq "月日");

    $date =~ m/(\d+)月(\d+)日/;
    my $mon = $1;
    my $day = $2;
    $date = sprintf("2021%02d%02d", $mon, $day);
    my $d = Time::Piece->strptime($date, '%Y%m%d');

    print("BEGIN:VEVENT\n");
    printf("DTSTART;VALUE=DATE:%s\n", $d->strftime("%Y%m%d"));
    $d += ONE_DAY;
    printf("DTEND;VALUE=DATE:%s\n", $d->strftime("%Y%m%d"));
    
    $desc =~ m/(G(||)|重賞)(.*)/;
    my $grade = $1;
    my $name = $3;
    $grade =~ s//I/;
    $grade =~ s//II/;
    $grade =~ s//III/;

    printf("SUMMARY:%s(%s)\n", $name, $grade);
    printf("LOCATION:%s競馬場\n", $location);
    printf("DESCRIPTION:%s %s\n", $age, $course);
    print("END:VEVENT\n");
}

print("END:VCALENDAR\n");

 注意点としては、上述の通り、2020/12/27時点では、格付け未確定の重賞があること。2021年の重賞レース一覧のページには、以下のような注意書きが添えられている。

注記:	葵SはG軍壁嫂柔礎
注記:	東スポ杯2歳SはG恭壁嫂柔礎

 多分、申請通りの格付けになるんだろうが、過去には申請が通らなかったこともあるらしく、油断できない。
 上記の重賞の格付けが確定したら、新たにicsファイルを作り直すか、JRAが提供するicsファイルをゲットするかして、Googleカレンダーにインポートし直すか、Googleカレンダー上で、2021/05/29(土)の葵S(「重賞」を「GIII」へ?)と、2021/11/20(土)の東スポ杯2歳S(「GIII」を「GII」へ?)の情報を手で修正してください。
 いや、それなら二、三週間待てよ、って話ですが。


2020-12-17

google-code-prettifyを使ったプラグイン

 

 FreeStyleWikiの本家のサイトに以下のようなプラグインが投稿されています。

  • BugTrack-plugin/376 google-code-prettify を使ったシンタックス・ハイライトです。

 このプラグインは、Googleが提供していたシンタックスハイライトのためのライブラリである「google-code-prettify」を利用したもの(左記のサイトを見ると「This repository has been archived and is no longer maintained.」なんて書いてありますが……)。
 でも、コメント欄に「1ページあたり複数回、同プラグインを記述するときに正しい結果になりません。」とあり、あまり使い勝手がよくなさそう。
 そこで、ちょこっと書き直して1ページに複数個書いても大丈夫にして、ついでに行番号表示にも対応してみました。

インストール

  • 以下のファイルをダウンロードし、解凍後、plugin以下にコピーしてください。
  • そのままでは行番号が5行おきにしか表示されません。毎行表示するためには以下をユーザー定義スタイルに設定してください。
.prettyprint ol.linenums li {list-style-type: decimal; }

使い方

 以下のようにブロックでくくるだけ。言語の指定を行う必要はありません。対応している言語はこちらを参照のこと。

{{pp
#! /usr/bin/perl
use strict;
use warnings;

print "Hello World.\n";
}}
#! /usr/bin/perl
use strict;
use warnings;

print "Hello World.\n";

{{ppl
#! /usr/bin/python

print("Hello World")
}}
#! /usr/bin/python

print("Hello World")

テーマ

 Install.pmの13行目でskinを「desert」に決め打ちで設定してます。

my $js = "<script src=\"https://cdn.jsdelivr.net/gh/google/code-prettify\@master/loader/run_prettify.js?skin=desert\"></script>";

 他のテーマがいい場合は書き換えてください。

2020-12-16

ISBNの13桁から10桁への変換

 

 RakutenBooksSearch プラグインを書いたとき困ったのは、楽天ブックス総合検索APIで得られる情報の中に、10桁のISBNがなく、13桁のものしかないこと。Amazonでは、10桁のISBNが書籍の商品管理のための番号として使われており、例えばこれが「4150314624」である「信長島の惨劇」の商品ページへのリンクは、

と書けるのだが、13桁の方がわかってもリンクは作れない。
 しかたないので、13桁のISBNを使ってAmazonで検索した結果のページへのリンクでお茶を濁しておいたのだが、今さらながらちょっと調べてみたら、Wikipediaの「ISBN」のページに、13桁から10桁への変換方法(というかチェックディジットの計算方法)が書いてあった。
 そもそもWikipediaには、

2007年以降の新刊書には当初から13桁の新規格ISBNが付けられており、10桁ISBNは新たに発番しない。

とあるのだが、Amazonでは今も10桁のものが商品管理に使われているのは上述の通り(Amazonの書籍の商品ページには、2007年以降の出版物であっても、13桁のものと10桁のものの両方が記載されている)。
 で、13桁から10桁への変換は、

  • 頭の3桁(接頭記号)を取り去り
  • 末尾の1桁(チェックディジット)も取り去って
  • 残った9桁からチェックディジットを計算し直して
  • それを末尾にくっつけて10桁にする

というもの。
 10桁のISBNのチェックディジットの計算方法は以下の通り。Wikipediaからそのまま引用する。

旧規格のISBN (ISBN-10) のチェックディジットは、「モジュラス11 ウェイト10-2」という計算法にて算出される。(チェックディジットを除いた左側の桁から10、9、8…2を掛けてそれらの和を取る。和を11で割って出た余りを11から引く)

ここで、例として ISBN4-10-109205-□ のチェックディジット(□部分)を求めてみる。

4×10 + 1×9 + 0×8 + 1×7 + 0×6 + 9×5 + 2×4 + 0×3 + 5×2
= 40  +  9  +  0  +  7  +  0  +  45 +  8  +  0  +  10
= 119
119 ÷ 11 = 10 あまり 9
11 - 9 = 2

よって、このISBNのチェックディジットは2である。なお、計算結果が10になった場合、10の代わりにX(アルファベットの大文字)を用いる。また、11になった場合は、0となる。

 これをPerlで書いてみた。Qiitaなんかを見ると、一行で書いてみた的なかっこいいコードがザクザク見つかるのだが、以下はアホみたいに愚直なもの。

#! /usr/bin/perl
use strict;
use warnings;

my $isbn13 = "9784334790721";

my $cd = 0;
for my $i (3..11) {
    my $c = substr($isbn13, $i, 1);
    $cd += $c * (10 - ($i - 3));
}

$cd = $cd % 11;
$cd = 11 - $cd;
if ($cd == 10) {
    $cd = "X";
} elsif ($cd == 11) {
    $cd = 0;
}
my $isbn10 = substr($isbn13, 3, 9).$cd;

print "$isbn10\n";

 これをRakutenBooksSearch プラグインにも組み込んで、Amazonへのリンクをすっきりしたものに修正しておいた。


2020-12-15

Leaflet Map プラグイン

 

 Google Maps APIの仕様変更のせいで動かなくなって久しい「Google Maps API V3を用いたプラグイン」に代わる、LeafletというJavaScriptのライブラリを使った地図表示のためのFreeStyleWiki用プラグインを作ってみました。
 

インストール

  • 以下のファイルをダウンロードして、plugin以下にインストールします。
  • さらに以下のモジュールをインストールします。
    • JSONのインストール
      • このプラグインでは、JSONからPerlのデータ構造への変換にJSONというモジュールを使っていますので、これをインストールします。本サイトが運用されているさくらインターネットのサーバーの場合、こちらのページに書かれているとおりの手順で、一般ユーザー環境にモジュールをインストールするための準備を整えれば、後は簡単。
      • CPANシェルから、以下のようにやればOK。
cpan[1]> install JSON

 

モジュールのパスの追加

 上記でインストールしたモジュールがFreeStyleWikiのプラグインから使えるように、一般ユーザー環境でのCPANモジュールのパスを、FreeStyleWikiのwiki.cgiに追加します。
 wiki.cgiの20行目辺りの以下の行に、

use lib './lib';

 一般ユーザー環境でCPANモジュールをインストールしたパスを追加すればOK。

use lib qw(/home/xxxxxxxxx/perl5/lib/perl5/ ./lib);

 

llmap プラグイン

{{llmap 35.658780957303776, 139.745411447452,500,500,16,gsi}}

 

  • 「35.658780957303776」「139.745411447452」は、それぞれ緯度、経度。必須のパラメータです。
  • 「500」「500」は、マップ領域のサイズ(それぞれ「横の画素数」「縦の画素数」)。省略するとそれぞれ「400」「300」になります。
  • 「16」はマップ領域のズームの設定。「0」が最小(地球全体)で「18」が最大。省略すると「16」になります。値が小さすぎると、地図のタイプによっては何も表示されなくなることがあります。
  • 「gsi」は表示する地図のタイプ。「gsi」(国土地理院標準地図)、「gsiphoto」(国土地理院写真)、「osm」(オープンストリートマップ)のいずれかが設定できます。省略すると「gsi」になります。

 

lmap プラグイン

{{lmap 東京都港区芝公園4丁目2−8,500,500,16,gsiphoto}}

 

  • 「東京都港区芝公園4丁目2−8」は住所。必須のパラメータです。
  • 「500」「500」は、マップ領域のサイズ(それぞれ「横の画素数」「縦の画素数」)。省略するとそれぞれ「400」「300」になります。
  • 「16」はマップ領域のズームの設定。「0」が最小(地球全体)で「18」が最大。省略すると「16」になります。値が小さすぎると、地図のタイプによっては何も表示されなくなることがあります。
  • 「gsiphoto」は表示する地図のタイプ。「gsi」(国土地理院標準地図)、「gsiphoto」(国土地理院写真)、「osm」(オープンストリートマップ)のいずれかが設定できます。省略すると「gsi」になります。

 lmap プラグインでは、ジオコーディングに国土地理院のAPIを使っています。ちょっと時間がかかる処理なので、ジオコーディングの結果を保存しておき、ページ内容の変更があるまではAPIを呼び出さず保存してある結果を使うことにしました。

 このAPIはhttpsなのですが、何が悪いんだかよくわからないのですが(すいません)SSL証明書のエラーでアクセスできないことがあります。こういう場合は(あんまりよくないようですが)、lmap.pmの63行目のコメントアウトを外して、証明書のホスト名による検証を抑制してください。

 また、与える住所はなるべく詳しく記した方が無難です。参考情報にもリンクを示したこちらのページで、国土地理院のジオコーディングAPIがテスト実行できますが、2020/12/15現在、「札幌駅」でジオコーディングすると、レスポンスのJSONの最初の要素は、なぜか「茨城県鉾田市札」のものになっています。lmap プラグインでは、何も考えず最初の要素の座標で地図を表示するようにしてあるので、住所として「札幌駅」を与えると茨城のマップが表示されることになってしまいます。
 これを防ぐためには、面倒でも「札幌駅」ではなく「北海道札幌市北区北6条西4丁目」を与えるようにするしかありません。
 

参考情報

 

追記

  • 2020/12/17に地図タイルのURLをhttpsに変更し、さらにオープンストリートマップのタイルはjpから本家に変更しました。



これより前の5日分