都道府県境界用のデータ

都道府県境界を表す Geometry データはNatural Earthからダウンロードできます。
手順を以下に示します。

1. Large scale data, 1:10m の Cultural をクリック

データは、Large scale data, 1:10m が一番精度が高く(ファイルのサイズが大きい)、右に行くほど粗く(サイズが小さく)なるようです。

2. Admin 1 – States, Provinces の Download states and provinces をクリック

これでダウンロードが始まります。
内容は、日本に限らずアメリカの州や、中国の省なども含まれています。
解凍すると約30MB程のサイズになります。

display run-in に関するメモ

css において

のように、display の属性値として “run-in” の指定が可能だが
次の様に解説書には説明されている。

CSS3で指定可能な値です。その要素をラインボックスとして表示します。ラインボックスは、ブロックボックスが次に続く場合に、そのブロックボックスの内の先頭にインラインボックスとして配置されるボックスです。

分かり難いので、いろいろ調べた結果を次の図で説明する。

ここで、「One fish.、Two fish.」がインラインボックスで、それに続く”Pellentesque habitant morbi….” が後続するブロックボックスに該当する。
上に示した図を HTML で記述すれば、以下のようになる。
本来なら、”h3″ も “p” もブロック要素であり、そのまま表示すればこの要素間には改行が挿入されるはずだが、
“display : run-in”
の指定により “h3” と “p” を連結した形のインラインボックスを形成するようになる、というのがこの説明の意味するところ。

折角機能を調べたなら、確認してみたいのは当然の成り行き。
調べている過程で既に分かっていたのだが、FireFox は、噂ではこの仕様に不満で全くサポートしていない。
だが、Safari、Chrome、Opera、IE 8 はサポートしている。
とのことなので、このページを Chrome で開いてみる。
??? 機能しない。Edge、Vivaldi も(多分 Safariも)同様。
どういうことなんだろう。Chome もスペックダウンしたのか。

この “run-in” は、CSS2の仕様で定義されたが、CSS2.1で削除され、CSS3 で再度検討されているものとのこと。
そこで、ふと思いついたのが、Windows アクセサリに眠る錆びついた IE。
これを引っ張り出し、これで表示したところ、上の図と同じ内容が確認できた。
古いものでも、役に立つ場合があるんですね。

お疲れ!

参考:CSS Run-in Display Value

MySQL「MySQL shutdown unexpectedly」で動作停止

環境:windows10、xampp

自作のプログラムから、いつも通りデータを登録しようとしたら
登録済みのメッセージが返ってこない。
変に思い、xampp-control を立ち上げ確認したところ MySQL が
起動していない。
そのパネルから “start” しても、下記メッセージを吐きあえなくダウン。

雲をつかむようなメッセージで、手掛かりがないので
“Error: MySQL shutdown unexpectedly”
でググる。

有り難いもので、同じ問題に遭遇した方が、こちらに解決法を提示してくれていました。(感謝!)
内容は重複しますが、解決法は次の通りです。

解決法

(1) c:\xampp\mysql\data に移動
(2) 次のファイルを削除する
    ① ibdata1
    ② ib_logfile で始まる全ファイル
(3) xampp-control を開き、start ボタンをクリック
以上

私の場合には、これで解決できました。

AnacondaとMeCab

Ubuntu18.04のAnaconda3環境にMeCabをインストールしてみた。
MeCabとは、所謂分かち書き用のソフトで、案山子や茶筅と同種のもの。

インストールは、「ubuntu 18.10 に mecab をインストール」を参考にした。

UbuntuへのMeCabインストール

動作確認

前者は問題ないが、後者は「はくたか」と言う固有名詞が認識できていない。
そこで、次のインストールを行う。

mecab-ipadic-NEologdのインストール

NEologd(Neologism dictionary for MeCab)とは、MeCabのシステム辞書のこと。
詳細はGitHubを参照。

私の環境では、この最後の行で「curl not found」のようなエラーが発生した。
“which curl”とすると、”curl” 自体は存在しているが Anaconda の中。
原因がこれと思われるので、curl をシステムにインストールする。

その後、再度

これで、無事インストール完了。

辞書の変更

/etc/mecabrcの「dicdir」を次のように変更する。

動作確認

今度は、後者は問題ないが、前者の方は「すももももも」が固有名詞になっちゃいました。

NEologdのGitHubページに

「Web上の文書の解析をする際には、この辞書と標準のシステム辞書(ipadic)を併用することをオススメします。」

と書いてあるのは、こういうことなのかもしれない。
でも、どうすれば併用できるの?
これは、これからの課題としてとっておく!!

追記

この「併用」を、ipadic と Neologd を組み合わせて解析するものと解釈したのが大間違いでした。
「場合場合で辞書を使い分けなさい」というのが、この「併用」の意味するところのようで、つまり、
「前者なら iapdic を、後者なら Neologd を使いなさい。私達は、双方を満足するするような解析はできませんよ」
と言うことのようです。

Python3へMeCabインストール

いよいよ佳境に入ってきた。
まずは必要なパッケージをインストール
注:ここでは、swig インストール以外の操作は不要かもしれない。)

続いてPythonのMeCabパッケージをインストール。

「conda」ではなく「pip3」であることに注意!

import確認

簡単にターミナルから確認する。

pip3 によるインストール自体は正常終了したものの、Anacondaにはそれ相応の閉じた世界があるので、”pip3″ を使用してしまうと Anaconda Python の監視下にはインストールされないようだ。
いろいろググった挙句、行き着いたのはこのブログ
jupyter notebook から pip インストールせよとのこと。

早速 jupyter notebook を立ち上げ、次を実行

!pip であることに注意)

これにより、Python にMeCab が import可能になった。感謝!

サンプルプログラム

Qiita の例に倣って、次のサンプルプログラムを作成して確認する。

ま、まずい!
辞書の変更が反映されていない。
でも、一応動作確認はできたので、今日はここまでにしておこう。

追記

気を取り直して続きを書く。
Ubuntu のターミナルからは、前述の通り /etc/mecabrc を変更すれば辞書が切り替わるのだが、
Python からは MeCab.Tagger に -d オプションを指定して辞書のディレクトリを指定する必要がある。

これで、動的に辞書を切り替えられるという訳ですね。

なお、windows 上でのディレクトリ指定は次のようにする。
(C ドライブの直下に mecab-ipadic-neologd を作成し、そこに辞書をコピーしたものとする)

ディレクトリは windows の記法に則ることに注意願いたい。

おしまい!!

メモ

連想配列の要素展開

連想配列の要素展開がエラーになるので調べてみた。
例えば、次のような配列があったとする。

要素にアクセスするには、次のように key をシングルまたはダブルコーテーションで括る。

コーテーションで括らない場合はエラーになる。

以上を踏まえて変数の展開を行ってみる。
下の方法は、変数の展開を使用しない場合のものである。

.(ドット)演算子を間に挟むのが煩わしいので、できれば使用したくない。
そのため、変数展開を使用し次のように記述する

この場合「PHP Parse error」となる。
変数展開を使用する場合、key をコーテーションで括らず次の様に記述しなければならないとのこと。

PHP との付き合いは長いが、どうも基本を理解していないようだ!

PHP 7 への v-up と WordPress の2つの問題

wordpressを久し振りに開くと、最新のPHPへのバージョンアップ促すようなメッセージが表示されている。
これを機にバージョンアップを行ったのだが、問題点が2つ発生したので今後のためにこのメモを残す。
なお、レンタルサーバはロリポップを使用している。

1. PHP の v-up 後に WordPress が動作しない

「Wordpress から MySQL へ接続できない」というようなメッセージが表示され、動作しなくなる問題が発生。
対策が手に負えそうもないので、ロリポップへへルプのメールを送ると翌日には回答が届く。

データベースのパスワード再設定を行い、パスワード形式を「old_password形式」から「native_password形式」に変更する必要があるとのこと。手順は以下の通り。

  1. ユーザー専用ページの〔サーバーの管理・設定〕→〔データベース〕メニューにアクセスします
  2. 利用中のデータベースの〔パスワード確認〕をクリックし、現在のパスワードをメモしておきます
  3. 〔パスワードを再設定する〕をクリックします
  4. 2で確認したパスワードを入力し、〔パスワードを再設定する〕をクリックします
  5. 確認画面が表示されたら〔OK〕をクリックします

この操作で動作するようになりました。
問題に素早く対応して頂いたロリポップ担当者には感謝いたします。

2. 投稿記事の一部が表示されない

動くようになり安堵していると、投稿の一部がタイトルしか表示されず記事内容が全く表示されていないのに気付く。
苦労して書き上げたものもあるので蒼褪めてしまう!
しかし、ダッシュボードの投稿には記事が残っている。
ただ表示されないだけ。
ググってみると、様々ヒットしたなかで一番有力だったのが Crayon。

php7 にバージョンアップした結果、preg-replace でエラーが出るようになったのが原因とのこと。

wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php に次の修正を加えれば動くようになる模様。

(ハイフォンをエスケースするように変更するもの。php7 になってチェックが厳しく(?)なったような気がします。)

自信がない場合は、こちらのサイトを参考に、修正版を再インストールした方が賢明かもしれません。

XAMPP for WindowsのPHP 7からMongoDBを使用する

タイトルが長いけど致し方ない。
情報が錯綜し、これだけの条件を指定しないと
誤った設定を指定してしまうためだ!

Windows10にxamppおよびMongoDBをインストール済みで
php7からMongoDBに接続するまでがこのブログの課題。

ステップ1:
MongoDB PHP ドライバをpeclから「7.X Thread Safe (TS) x86.」をダウンロードする。
ステップ2:
ダウンロードしたzipファイルを展開し、その中の「php_mongodb.dll」を “/xampp/php/ext” にコピーし、”/xampp/php/php.ini” に次の行を追加する。

ステップ3:
xampp-control パネルから Apache を再起動。
ステップ4:
phpinfo を使用し、次の図のようにMongoDBの動作を確認する。

ステップ5:
次の php-mongo.php というファイルを作成し、PHP 7 から MongoDB に接続できるかテストする。

ブラウザに次のように表示されれば接続成功です!

【参考】

  1. 公式ドキュメント
  2. Configure MongoDB with PHP 7 for XAMPP on Windows

VirtualBox Guest Additions のアップデート

よく分かっていなかったので、アップデート方法をメモしておく。

デスクトップの上部に「Virtualbox Guest Additions update available」と言うようなメッセージが表示されたら、以下の手順でアップデートする。
(1)デスクトップ上の「VBoc_GAs_XXXX」(XXXX:バージョン番号)をダブルクリック

(2)autorun.sh の実行

以上

ナンクロにはまる(4)検索

SQL に精通していない私にとり、「くり121」のような検索(slelect)でも何とかなるだろうとボンヤリと考えていたが、調べてみると SQL で出来るのは精々「くり___」まで。
「くり」を含む5文字の単語検索は SQL で出来ても、「121」の部分は自力で対応せざるを得ないようだ。

年の所為か妙案が全く浮かばない。
華麗なロジックを諦め、捻り出したのが超ダサい
全文字総当たり方式
つまり、
(p1) 「くり___」で得られた結果の集合から配列Aを作る。
(p2) 1 の部分に「あ~ん」+ 「-(カナ長音)」、2 の部分に「1 以外の文字」
を割り当てた文字列aを作る(実際には、「く」と「り」を除く必要がある)。
(p3) 「くり+a」が配列Aに存在するかチェックする。
(p4) 存在した「くり+a」だけで配列Bを作成すれば「くり121」に絞り込める。
という次第。
ダサいが確実、でも処理時間 & 処理方式が・・・
ということで、無い知恵を絞り考え出したのが以下の改善策。

検索文字数の絞り込み

(1) 変数の「1と2」に該当するのは、「くり___」で得られた文字の範囲に限られる。
(2) その中に「く」と「り」が含まれていれば、既に使用済みなのでそれを削除する。
この集合をCとする。
(3) 上記(p2)の「あ~ん」+ 「-(カナ長音)」に代え、集合Cを使用すれば、検索する
文字数を減らすことが可能ではないか。
この方式以外に名案が思い浮かばないのでこれに決定。
配列A内の全単語を一文字ずつに分解し、重複する文字を削除して文字集合Cを作るのは
それ程難しくはない。

存在チェック

(p3)の存在チェック処理方式は、「正規表現」の一択のみ!
その汚いロジックを見られたくないのでサーバサイド(PHP)でやることに!

正規表現パターンの生成と絞り込み

① 「1→あ」の場合、「くり121」から正規表現のパターン
/’くりあ[^あ]あ’/
を生成する。

  • preg_replace(/’1’/, ‘あ’, ‘くり121’) → くりあ2あ
  • preg_replace(/’2’/, ‘[^あ]’, ‘くりあ2あ’) → くりあ[^あ]あ

② このパターンを配列Aとマッチング
preg.match(/’くりあ[^あ]あ’/, 配列A[n])

処理に関しては、方式のみでこれ以上の深入りは避けようと思います。
完成品はナンクロ単語検索をご覧ください。

ナンクロにはまる(3)辞書

ナンクロ用の単語辞書作成手順を以下に示します。
辞書には次の2つを使用することにしました。
(1)豚辞書(第12版)……. ①
(2)SKK辞書(SKK-JISYO.L)..②
豚辞書(第14版)が最新らしいが、現在は公開していないらしく入手できませんでした。
版を重ねている分、14版の方が単語数が多いのだろうと推測できるので、その少ない分をSKK辞書から追加しようとの作戦です。

SKK辞書を使用するに当たり、次の変更を加えています。
(1)動詞の活用形部分等は不要なため、先頭から英字単語までの全体を削除
(2)かな部分に “>” や “#” を含むものを削除
(3)拗促音「ぁぃぅぇぉっゃゅょ」を「あいうえおつやゆよ」に変換

この ①、② からcsvファイル(1フィールドの単純なプレーンテキストファイル)を作成し、sqlite3 にインポートしました。
この DB 操作には、「DB Browser(SQLite)」がお勧めです。

このデータを公開するには、著作権上問題なしとはしないので公開は控えます。
個人的にプログラミングの練習に必要な方は、コメントを残してください。
対応を検討します(2019年内のみ)。