Jupyter Notebook+WordPress+MarsEdit

Jupyter Notebook hoge.ipynbをWordPressに貼り付ける手順

準備 外観→追加CSSに以下を追記

Web上にはいくつかのCSSが見つかる
その中から選んだCSS
https://andrewchallis.co.uk/articles/php-nbconvert-a-wordpress-plugin-for-jupyter-notebooks/

************** Jupyter Notebook CSS ************************/
div .dataframe {
  border:none;
  margin: 0 auto;
}
div.output_stdout pre {
  max-height:300px;
}

div.output_stderr pre
{
  background: #fdd;
  margin:0;
  max-height:300px;
}
div.hl-ipython3 pre {
  margin:0
}
.dataframe thead tr:only-child th {
  text-align: right;
  text-transform: capitalize;
}
.dataframe thead th {
  text-align: left;
}
.dataframe tbody tr th {
  vertical-align: top;
}

.rendered_html tbody tr:nth-child(odd),
.rendered_html tbody tr:nth-child(odd) td {
  background: #f5f5f5;
}
.rendered_html tr, .rendered_html th, .rendered_html td {
  text-align: right;
  vertical-align: middle;
  padding: 0.5em 0.5em;
  line-height: normal;
  white-space: normal;
  max-width: none;
  border: none;
}
div.highlight .kn, .n, .k, .nn, .s1, .ow, .p, .mi, .c, .mf, .nb, .kc, .sd, .nf {
  font-family: monospace;
  font-size:14px;
}
.input_prompt {
  color: #303F9F;
  font-weight: bold;
  float: left;
  margin-right: 5px;
  margin-top: 3px;
}
.input_area pre {
  border: 1px solid #cfcfcf;
  border-radius: 2px;
  background: #f7f7f7;
  line-height: 1.21429em;
  padding: 6px 3px 6px 6px;
}
.output_prompt{
  color:#cc0000;
  font-weight: bold;
}
.prompt{
  font-family: monospace;
  font-size: 14px;
}
.c, c1 {
  color: #408080;
  font-style: italic;
}
.k {
  color: #338822;
  font-weight: bold;
}
.kn {
  color: #338822;
  font-weight: bold;
}
.mi {
  color: #008800;
}
.mf {
  color: #008800;
}
.o {
  color: #9966ff;
}
.ow {
  color: #BA22FF;
  font-weight: bold;
}
.nb {
  color: #338822;
}
.n {
  color: #000000;
}
.s, .s1, .sd, .s2 {
  color: #cc2222;
}
.se {
  color: #cc2222;
  font-weight: bold;
}
.si {
  color: #C06688;
  font-weight: bold;
}
.nn {
  color: #4D00FF;
  font-weight: bold;
}
.output_area pre {
  background-color: #FFFFFF;
  padding-left: 5%;
}
.code_cell {
  padding-left: 1%;
}
.cell {
  margin-top: 10px;
  margin-bottom: 10px;
}
br {
  line-height: 2;
}
blockquote {
  font-size: 1em;
  text-align: left;
  font-weight: normal;
}
code {
  border: none;
  box-shadow: none;
  font-family: monospace;
}
div.rendered_html h1, h2, h3, h4 {
  margin-top: 30px;
  margin-bottom: 10px;
}
div.rendered_html p a {
  color: #4D00FF;
}

スクリーンショット 165

1. hoge.ipynb から hoge.html を生成

$ jupyter nbconvert --to html --template basic hoge.ipynb
[NbConvertApp] Converting notebook hoge.ipynb to html
[NbConvertApp] Writing 5129 bytes to hoge.html

2. hoge.html の中身をMarsEditにコピー

ここでhoge.htmlをWORDPRESSエディター上カスタムHTMLにコピーする方法を試してみると、TeXコード部分が変換されずそのままで表示されてしまう。

出力

In [12]:
# フィボナッチ数列の一般項 F_n
# F_0 = 0,  F_1 = 1
# F_{n+2} = F_n + F_{n+1} n=0,1,2,...
In [13]:
import sympy
sympy.init_printing()
sympy.var("n")
A = sympy.Matrix([[1, 1],[1, 0]])
f1 = sympy.Matrix([1, 0])
Fn = sympy.simplify(A**(n-1)*f1)
display(Fn)
print("F_n =")
display(Fn[0,0])  # F_n = Fn[0,0]
$\displaystyle \left[\begin{matrix}\frac{2^{- n} \left(- \left(1 – \sqrt{5}\right)^{n} + \frac{2 \sqrt{5} \left(1 – \sqrt{5}\right)^{n}}{5} – \frac{2 \sqrt{5} \left(1 + \sqrt{5}\right)^{n}}{5} + \left(1 + \sqrt{5}\right)^{n}\right)}{-2 + \sqrt{5}}\\- \frac{2 \sqrt{5} \left(1 – \sqrt{5}\right)^{n}}{5 \left(- 2^{n} \sqrt{5} + 2^{n}\right)} + \frac{2 \sqrt{5} \left(1 + \sqrt{5}\right)^{n}}{5 \left(2^{n} + 2^{n} \sqrt{5}\right)}\end{matrix}\right]$
F_n =
$\displaystyle \frac{2^{- n} \left(- \left(1 – \sqrt{5}\right)^{n} + \frac{2 \sqrt{5} \left(1 – \sqrt{5}\right)^{n}}{5} – \frac{2 \sqrt{5} \left(1 + \sqrt{5}\right)^{n}}{5} + \left(1 + \sqrt{5}\right)^{n}\right)}{-2 + \sqrt{5}}$
In [14]:
for i in range(10):
    print(int(Fn[0,0].subs(n, i)))
0
1
1
2
3
5
8
13
21
34
In [ ]:
 

MacPro2009でTensorflow+Kerasを使う

私のメインマシンはMacPro2009
拡張性の大きさから10年以上現役バリバリ
M1MacBook Proはサブ
他に
MacBook Pro Late 2013
MacBook Air Mid 2012
Dell OPTIPLEX 3020(Ubuntuメイン+NAS)
HP EliteBook 820(SSD分割Ubuntu+Win10)
東芝DynaBook T350(win7)
Macpc 001
これだけのマシンを駆使して
桜井進のPython・UNIX教室で使うUSBメモリーブートUbuntuシステムを作成できます
本当はテスト用に2016年〜2020年のMacBook Proが欲しい

さて本題
これらのマシンにPythonの実行環境がある
Pythonのバージョンメンテナンスで面倒なのがTensorFlow
それぞれのマシンで動くバージョンが違う(CPU、GPUの性能に異存)
Tensorflowのインストールだけでも手間がかかるのに
異存するライブラリのバージョンも関係するのでさらに面倒

なかでもメインマシンMacPro2009(10.15.6)はCPUが古いので
新しいTensorFlowは入らない
それでもTesorFlow 1.5.0なら動くことがわかった

ところが、
そこに画像認識をさせようとKerasを動かそうとするとこれが中々動いてくれない

試行錯誤の末、ようやくTnsorflow+Kerasが動く組合せを見つけた

Macにはpyenvを使ってPythonをインストール
これでPythonのバージョンを自在にコントロールできる
Python 3.6.5のインストール

$ pyenv install --list
$ pyenv install 3.6.5
$ pyenv global 3.6.5
$ pyenv rehash

同様にPython 3.6.6のインストールすると
次のように異なるバージョンのスイッチングが簡単にできて便利

$ pyenv versions
  system
* 3.6.5 (set by /Users/sakuraisusumu/.pyenv/version)
  3.6.6

TensorFlow 1.5.0 インストール

$ python -m pip install --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.5.0-py3-none-any.whl

組合せその1
Python 3.6.6
TensorFlow 1.5.0
keras 2.6.0(最新)

TensorFlow OK
Tnsorflow+Keras NG

組合せその2
Python 3.6.6
TensorFlow 1.5.0
keras 2.4.3(2.3.0、2.2.1)

TensorFlow OK
Tnsorflow+Keras NG

組合せその3
Python 3.6.5
TensorFlow 1.5.0
keras 2.2.1

TensorFlow OK
Tnsorflow+Keras OK

これでMacPro2009でもTnsorflow+Keraを使った画像認識ができるようになった
本当に微妙なバージョン違いです

$ python ai.py cat.jpg
Using TensorFlow backend.
2021-09-17 03:28:56.088497: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.2

keras+TensorFlowによる画像認識結果
                     確率
           tabby     71.12%
    Egyptian_cat     14.72%
       tiger_cat     10.62%
        radiator     0.55%
         doormat     0.27%

桜井進のPython・UNIX教室(入門コース全3回Zoom)の第3回授業風景
Dell OPTIPLEX 3020(Ubuntuメイン+NAS)でTnsorflow+Keraを使った画像認識を実行しているところ
スクリーンショット 66

MacOS UNIXコマンド locate

$ locate pytest

pipでpytestをインストールした際、whichとwhereisでpytestを探しても見つけられなかった
pipでアンインストールしようとしたら

$ python -m pip uninstall pytest
Found existing installation: pytest 6.2.4
Uninstalling pytest-6.2.4:
  Would remove:
    /Users/sakuraisusumu/.local/bin/py.test
    /Users/sakuraisusumu/.local/bin/pytest
    /Users/sakuraisusumu/.local/lib/python3.6/site-packages/_pytest/*
    /Users/sakuraisusumu/.local/lib/python3.6/site-packages/pytest-6.2.4.dist-info/*
    /Users/sakuraisusumu/.local/lib/python3.6/site-packages/pytest/*
Proceed (Y/n)? 

となり、/Users/sakuraisusumu/.local/bin/pytest にあることがわかった
これはこれで解決だが、
UNIXコマンドに検索があったはず(使ったことがなかった)と思いだし
findとlocateでpytestを探してみた

findは使い物にならない
locateはあらかじめデータベースを作っておくので全検索に近い
ところがだ
/Users/sakuraisusumu/.local/bin/pytest
が引っかからない
なぜだ?

locateを調べる

GNU版locateはfindutilsに入っているので

$ brew install findutils

によりインストールできる
glocateでpytestを検索するも変わらない

locateがデータベースをつくる歳にすべての領域を範囲とするわけでないことが判明
パーミッションが700である自分のディレクトリィの下は検索しない
そうだ

ということでHOMEにあるディレクトリでパーミッションが700のものを755に変更して
データベースをつくりなおしたところ今度は
/Users/sakuraisusumu/.local/bin/pytest
が見つかった

おかげでlocateについてだいぶわかった

MacOS Pythonにpytest インストール

$ python -m pip install pytest

インストールできたものの

$ pytest
zsh: command not found: pytest

あれれ?

$ which pytest
$ whereis pytest

だめだ、見つからない!
そこで一旦アンインストールすることに

$ python -m pip uninstall pytest
Found existing installation: pytest 6.2.4
Uninstalling pytest-6.2.4:
  Would remove:
    /Users/sakuraisusumu/.local/bin/py.test
    /Users/sakuraisusumu/.local/bin/pytest
    /Users/sakuraisusumu/.local/lib/python3.6/site-packages/_pytest/*
    /Users/sakuraisusumu/.local/lib/python3.6/site-packages/pytest-6.2.4.dist-info/*
    /Users/sakuraisusumu/.local/lib/python3.6/site-packages/pytest/*
Proceed (Y/n)? 

ここでようやくpytestの場所が判明
さっそく.zprofileにPATHを通してOK

dateで元号(令和平成昭和大正明治)表示

date → gdate

MacOS標準シェルzshのdateコマンドよりも
GNU系のdateコマンド(gdateコマンド)の方が気に入っている

$ which date
/bin/date
$ date
2021年 8月25日 水曜日 03時28分37秒 JST

このdateコマンドは次のようなGNU系dateコマンド(gdateコマンド)の作文ができない

$ date -d'10year 6month 3day 5hour 23minute 10second ago'

そこでgdateが使えるようにする

$ brew install coreutils

これによりglsやgdateのようなGNU版コマンドが100以上インストールされる
コマンドリストは次により確認できる

$ brew ls coreutils

ただgdateの標準出力が気にくわない

$ gdate
火  9  7 12:41:56 JST 2021

これはdateの出力のいいのでそれにあわせる
ついでに元号表示も工夫してみる

シェルスクリプト

.zprofile
に以下を追加

alias date="gdate +'%Y年%m月%d日%A%T'"
# 元号表示
function gendate()
{
y=$(gdate +'%Y')
r=$((y+1-2019))
h=$((y+1-1989))
s=$((y+1-1926))
t=$((y+1-1912))
m=$((y+1-1868))
n=$(gdate +'%Y年%m月%d日%A%T')
echo '令和'$r'年 平成'$h'年 昭和'$s'年 大正'$t'年 明治'$m'年 '$n
}

これで

$ date
2021年09月07日火曜日12:46:08

MacPro:~
$ date -d'10year 6month 3day 5hour 23minute 10second ago'
2032年03月10日水曜日18:09:05

MacPro:~
$ gendate
令和3年 平成33年 昭和96年 大正110年 明治154年 2021年09月07日火曜日12:46:19

これでOK

2段組PDFからテキスト抽出するコマンド

Mac標準でPDFからテキストを抜き出す簡単な方法はありません
Mac標準のAutomatorや専用アプリを使う必要があります
さらに二段組みPDFからテキスト抽出となると難しくなります

unixの「pdftotext」コマンドを使う方法なら1行でOK
二段組みのPDFにも対応します
hoge.pdf
から
hoge.txt
を生成するコマンドです

pdftotext -raw hoge.pdf - | sed ':loop; N; $!b loop; ;s/\n//g' >> hoge.txt
pdftotextのインストール

brewでpopplerをインストールすればOK

brew install poppler

次のコマンドがすべてインストールされる

pdftotext: converts PDF to text
pdftops: converts PDF to PostScript
pdftoppm: converts PDF pages to netpbm (PPM/PGM/PBM) image files
pdftopng: converts PDF pages to PNG image files
pdftohtml: converts PDF to HTML
pdfinfo: extracts PDF metadata
pdfimages: extracts raw images from PDF files
pdffonts: lists fonts used in PDF files
pdfdetach: extracts attached files from PDF files
pdfseparate: PDF to PNG/JPEG/TIFF/PDF/PS/EPS/SVG
pdfunite: PDF page merger

https://poppler.freedesktop.org/

pdfgray・pdfmin

pdfgray *.pdf → *.gray.pdf

スクリーンショット 71
MacOSのプレビューにはPDFグレイ変換オプションがある
ファイル→書き出す→グレイトーン
スクリーンショット 65
ところがやってみるとちゃんとグレイ変換されない
なぜか一部だけカラーのまま
これでは使い物にならない

そこでgsによるshellスクリプトの出番
以下のスクリプトを.zprofileに以下を追記するだけ
これでバッチリグレイPDFに変換できる

# pdfgray *.pdf
function pdfgray()
{
    local cnt=0
    for i in $@; do
        gs -sDEVICE=pdfwrite \
           -sColorConversionStrategy=Gray \
           -dProcessColorModel=/DeviceGray \
           -dCompatibilityLevel=1.4 \
           -dNOPAUSE -dQUIET -dBATCH \
           -sOutputFile=${i%%.*}.gray.pdf ${i} &
        (( (cnt += 1) % 4 == 0 )) && wait
    done
    wait && return 0
}

コンソール上で
pdfgray hoge.pdf
とすれば
hoge.gray.pdf
が出来上がる

$ pdfgray hoge.pdf
[3] 38381
[3]  + done       gs -sDEVICE=pdfwrite -sColorConversionStrategy=Gray  -dCompatibilityLevel=1.4
$ ls
hoge.pdf  hoge.gray.pdf
pdfmin *.pdf → *.min.pdf

おなじくプレビューのファイルサイズを減らすもイマイチ

.zprofile
に以下を追記

# pdfmin *.pdf
function pdfmin()
{
    local cnt=0
    for i in $@; do
        gs -sDEVICE=pdfwrite \
           -dCompatibilityLevel=1.4 \
           -dPDFSETTINGS=/ebook \
           -dNOPAUSE -dQUIET -dBATCH \
           -sOutputFile=${i%%.*}.min.pdf ${i} &
        (( (cnt += 1) % 4 == 0 )) && wait
    done
    wait && return 0
}

コンソール上で
pdfmin hoge.pdf
とすれば
hoge.min.pdf
が出来上がる

$ pdfmin hoge.pdf
[3] 38523
[3]  + done       gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE 
$ ls
hoge.pdf  hoge.min.pdf

解決問題「コラッツ・角谷予想」(後半)

空間情報連載
Pythonで数学を学ぼう!

桜井進のPython+Math教室 第9回

Pythonで数論!未解決問題「コラッツ・角谷予想」(後半)
1.コラッツ予想

2.コラッツ・シークエンスのステップ数
コラッツ・シークエンスのステップ数を求めるコード

# colg.py
# ステップ数(最大ステップ数)と頻度のグラフ描画
import numpy as np                  # 配列を扱う数値計算ライブラリNumPy
import matplotlib.pyplot as plt     # グラフ描画ライブラリmatplotlib
import japanize_matplotlib          # matplotlibの日本語化
import datetime as dt
from decimal import Decimal

while(1):
  Model = input('1.a≦n≦bに対するコラッツ・シークエンスのステップ数の最大値とnを算出\r\n'
                '2.a≦n≦bに対する横軸ステップ数、縦軸頻度の棒グラフ描画\r\n'
                '1、2のどれかを入力 ')
  if Model.isdecimal():
    Model = int(Model)
    if 1 <= Model <= 2:
      break

winzipインストール

Macを使っていて面倒なのが
WindowsユーザーにZipファイルを送ることです

ZIPANG.appがおすすめ
https://apps.apple.com/jp/app/zipang/id882655968?mt=12
私はこのアプリをツールバーに登録して使っています
フォルダをZipする際にアクセスが楽です
スクリーンショット 100

ZIPANG.appは暗号化もたやすくできるので完璧

そこで、暇つぶしがしたくなります
ターミナルで同じことができないのか?

 

windowsで文字化けしないzipを, macで作成

 

 

System Integrity Protection (SIP) を無効disableにする
csrutil disable
System Integrity Protection status : disabled

PHP7.4インストール

.zshrc

export PATH="/usr/local/opt/php@7.4/bin:$PATH"
export PATH="/usr/local/opt/php@7.4/sbin:$PATH"
export LDFLAGS="-L/usr/local/opt/php@7.4/lib"
export CPPFLAGS="-I/usr/local/opt/php@7.4/include"

.zprofile

alias brew="PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin brew"

curl -s -O https://pear.php.net/install-pear-nozlib.phar
とすると
warning: pear/pear dependency package “pear/Archive_Tar” downloaded version 1.4.9 is not the recommended version 1.4.4
エラー

php@7.4削除
brew uninstall php@7.4
rm -rf /usr/local/etc/php

=PEAR自身をアップグレード=
URL
https://aknot.hatenablog.jp/entry/20090716/1247726269

pear upgrade –force Archive_Tar
pear upgrade pear
pear version
PEAR Version: 1.10.12
PHP Version: 7.3.28
Zend Engine Version: 3.3.28

Running on: Darwin MacBook-Pro.local 19.6.0 Darwin Kernel Version 19.6.0: Mon Apr 12 20:57:45 PDT 2021; root:xnu-6153.141.28.1~1/RELEASE_X86_64 x86_64

history

  978  2021-05-09 14:47  brew install php@7.4
  979  2021-05-09 14:50  brew info php@7.4
  980  2021-05-09 15:53  brew info httpd
  981  2021-05-09 17:43  source .zprofile
  982  2021-05-09 17:43  source .zshrc
  983  2021-05-09 17:43  cd /tmp
  984  2021-05-09 18:01  curl -s -O https://pear.php.net/install-pear-nozlib.phar
  985  2021-05-09 18:01  sudo php install-pear-nozlib.phar -d /usr/local/lib/php -b /usr/local/bin 
  986  2021-05-09 18:04  pear upgrade --force Archive_Tar
  987  2021-05-09 18:04  pear upgrade pear
  988  2021-05-09 18:05  sudo php install-pear-nozlib.phar -d /usr/local/lib/php -b /usr/local/bin
  989  2021-05-09 18:05  pear version
  990  2021-05-09 18:41  pecl download https://pecl.php.net/get/zip
  991  2021-05-09 18:41  cd /tmp
  992  2021-05-09 18:42  l
  993  2021-05-09 18:42  curl -s -O https://pear.php.net/install-pear-nozlib.phar
  994  2021-05-09 18:42  sudo php install-pear-nozlib.phar -d /usr/local/lib/php -b /usr/local/bin
  995  2021-05-09 18:43  pecl download https://pecl.php.net/get/zip
  996  2021-05-09 18:43  brew doctor
  997  2021-05-09 18:43  cd ~
  998  2021-05-09 18:44  brew uninstall php@7.4
  999  2021-05-09 18:44  rm -rf /usr/local/etc/php
 1000  2021-05-09 18:44  brew install php@7.3
 1001  2021-05-09 18:47  cd /tmp
 1002  2021-05-09 18:47  curl -s -O https://pear.php.net/install-pear-nozlib.phar
 1003  2021-05-09 18:47  sudo php install-pear-nozlib.phar -d /usr/local/lib/php -b /usr/local/bin
 1004  2021-05-09 18:48  pear upgrade --force Archive_Tar==1.4.4
 1005  2021-05-09 18:49  pear upgrade --force Archive_Tar@1.4.4
 1006  2021-05-09 18:49  pear upgrade --force Archive_Tar=1.4.4
 1007  2021-05-09 18:49  pecl download https://pecl.php.net/get/zip
 1008  2021-05-09 18:49  tar -xzvf zip
 1009  2021-05-09 18:50  sudo find /Library -name php.h
 1010  2021-05-09 18:51  cp /usr/bin/phpize /usr/local/bin/phpize
 1011  2021-05-09 18:52  cp /usr/bin/php-config /usr/local/bin/php-config
 1012  2021-05-09 18:53  cd zip-1.19.2
 1013  2021-05-09 18:53  phpize
 1014  2021-05-09 18:53  ./configure -with-php-config=/usr/local/bin/php-config
 1015  2021-05-09 18:54  make
 1016  2021-05-09 18:59  mkdir -p /usr/local/php/extensions
 1017  2021-05-09 18:59  sudo mkdir -p /usr/local/php/extensions
 1018  2021-05-09 18:59  cp modules/zip.so /usr/local/php/extensions/zip.so
 1019  2021-05-09 18:59  sudo cp modules/zip.so /usr/local/php/extensions/zip.so
 1020  2021-05-09 19:00  sudo apachectl restart
 1021  2021-05-09 19:01  cd ~
 1022  2021-05-09 19:01  ./winzip
 1023  2021-05-09 19:02  com
 1024  2021-05-09 19:03  cp winzip /usr/local/bin
 1025  2021-05-09 19:03  winzip
 1026  2021-05-09 19:03  l
 1027  2021-05-09 19:03  winzip history.txt
 1028  2021-05-09 19:04  l

WAVLINK USB3.0 Docking Station+DisplayLink USB

Wavlink USB 3.0ユニバーサル デュアル ディスプレイ ドッキングステーション UG39DK4-BL
USB経由でHDMIモニタ出力を可能にしてくれる

MacBook Airで使っていたがubuntu20.04LTSでも使えないか試してみた
WAVLINKのWEBにはMacOSとWindowsのドライバしかなく、Linux / Unixはサポートされていませんとあった

https://qiita.com/menphim/items/ff0a708a917d2b8256b5
https://www.displaylink.com/downloads/ubuntu
https://support.displaylink.com/knowledgebase/articles/615714#ubuntu
https://www.it-swarm.jp.net/ja/usb/ubuntu%E3%81%A7displaylink-usb%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%82%92%E5%8B%95%E4%BD%9C%E3%81%95%E3%81%9B%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/957257278/
https://github.com/AdnanHodzic/displaylink-debian
を参考に使えるようになった