プリンターを新調しました

10年間使っていたCannon のプリンターMG3230 が先週突然、壊れました。原因は給紙ローラーの不具合でした。

一応、[プリンターのプロパティ] から[給紙ローラーのクリーニング] をしてここ最近、だましだまし使っていたのですがとうとう買い替えの時が来たと感じました。

新しいプリンターはインクのランニングコストを抑えたいと思い、同じくCannon のG6030 を近くのケーズデンキで37,000円で購入。Amazon.co.jp | Canon プリンター A4インクジェット複合機 特大容量ギガタンク搭載 G6030 よりも1,500円安く買えました。

現在はメインのWindows機にUSB接続して使っています。ローラーの音も静かでヘッドの印刷速度も速いみたいです。給紙場所が全面カセットと後方トレイの2か所あってCDラベルなど特殊サイズのものは後方給紙を指定しないといけないようでした。(なんかプロっぽい?)

操作パネルを手前に引き出さないとエラーが出るのが面倒くさいですが追々慣れていくとして・・・。

to_csv のencoding オプション

Python3 でリストをcsv として保存したものをExcel で開くと文字化けする件。read_csv でencoding を指定したのと同じものをto_csv のオプションに指定したら解決しました。

・
・
csv_name = "\price_data.csv"
data.to_csv(OUT_DIR + csv_name, encoding = 'sjis', index = False)

to_csv のencoding のデフォルトは ‘utf-8’ なので指定必須でした。

TensorFlow2.1.0 環境構築(Windows10)

突然ですがAnaconda にディープラーニングのライブラリーTensorFlow 環境を構築したいと思い、Google先生に訊いたところ

初心者がGPU搭載Windows10にPython + Anaconda + TensorFlow + Kerasの環境を構築してみた[2018/4/28]

上記Tips が見つかったので試したことをメモします。

エディション Windows10 Pro
バージョン 1903
マザーボード Asrock Z370 Pro4
CPU    Intel Core i7 8700K
メモリ   16.0GB
GPU    Nvidia Quadro P2000

まずは下記手順にてAnaconda Promptを管理者として実行してAnacondaをアップデート。(参考:Windows環境でのAnacondaのアップデート

Anaconda本体をアップデートする
> conda update -n base conda

Anacondaすべてのパッケージをアップデートする
> conda update --all

AnacondaのPythonをアップデートする
> conda update python

Pythonのバージョン確認
> python --version
Python 3.7.6

Microsoft Visual Studio 2019 Community 無料ダウンロード
https://visualstudio.microsoft.com/ja/downloads/

からC++ のパッケージをインストール

続いてNvidia CUDA toolkit10.1 をダウンロード、インストール
https://developer.nvidia.com/cuda-toolkit-archive

バージョンは最新の10.2 だとdllエラーがでたので、ひとつ下のグレードでよかったみたいです。

https://developer.nvidia.com/rdp/cudnn-download から cuDNN v7.6.5 [November 5th, 2019] for CUDA 10.1をダウンロード、解凍して

bin,include, lib 各フォルダを C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1 に上書きコピー。

Anaconda Navigator の[Environments]から仮想環境を[Create]、tensorflow と入力して [Create]


[Not Installed] からanaconda 関連のパッケージを検索して、[Apply] すると仮想環境にanaconda のインストールが完了します。

Anaconda Prompt (tensorflow) をスタートメニューから管理者として起動してtensorflow-gpu, keras をインストール。

追記)Anaconda Navigator のEnvironments からGUIでtensorflow関連のパッケージをインストールもできますけどバージョン違いでエラーがでるのですべて信頼はできません。

> pip install tensorflow-gpu
> pip install -U tensorflow keras

最初、pip install keras したのですが、AtrributeError が出たので一旦、pip uninstall keras して再度、pip install -U オプションすると上手く行きました。(まぐれ当たりでしょうか?)スタートメニューからJupyter Notebook (tensorflow)を起動してバージョン確認。

pip list | find "tensor"
tensorboard 2.1.0 tensorflow 2.1.0 tensorflow-estimator 2.1.0 tensorflow-gpu 2.1.0 tensorflow-gpu-estimator 2.1.0
import keras print(keras.__version__)
Using TensorFlow backend. 2.3.1

めでたくUsing TensorFlow backend. が表示されました。

TensorFlow 2.x のバージョンからTensorFlow 1.x のコードを実行したいときは

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

とするとハッピーになれるようでした。(下記サンプルコード転記)

import tensorflow.compat.v1 as tf
import numpy as np

tf.disable_v2_behavior()
# Create 100 phony x, y data points in NumPy, y = x * 0.1 + 0.3
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data * 0.1 + 0.3

# Try to find values for W and b that compute y_data = W * x_data + b
# (We know that W should be 0.1 and b 0.3, but TensorFlow will
# figure that out for us.)
W = tf.Variable(tf.random.uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
y = W * x_data + b

# Minimize the mean squared errors.
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

# Before starting, initialize the variables.  We will 'run' this first.
init = tf.global_variables_initializer()

# Launch the graph.
sess = tf.Session()
sess.run(init)

# Fit the line.
for step in range(201):
    sess.run(train)
    if step % 20 == 0:
        print(step, sess.run(W), sess.run(b))

# Learns best fit is W: [0.1], b: [0.3]

パーティションの削除

WD のNVMe M.2 SSDをシステムドライブにしたのでデフォルトのSamsung 860 EVO(SATA3)をデータドライブ用にフォーマット。

すると旧システムドライブのパーティションの残骸がコントロールパネルの管理ツールから削除できず、ハタと困りました。Google 先生によると「Windows10 – 回復パーティションの削除」で、コマンドプロンプトから削除できることが分かったので、コマンドプロンプトを管理者として実行。

C:\WINDOWS\system32> DISKPART
DISKPART> LIST DISK
DISKPART> SELECT DISK (ディスク番号)
DISKPART> LIST PARTITION
DISKPART> SELECT PARTITION (パーティション番号)
DISKPART> DELETE PARTITION OVERRIDE

無事、パーティションをひとつにすることができました。

Linux JPEG のexif 情報一括削除

スマホのjpeg画像をwordpressにタグ付きでアップロードしている場合、画像のGPS情報など削除しておきたいですね。Windowsの場合、画像の[プロパティ] – [詳細]から[プロパティや個人情報を削除]から削除することができます。Linux でも画像のプロパティを削除できるフリーソフトがいくつかあります。今回はJhead を使ってwordpressディレクトリのjpeg ファイルのプロパティを一括削除してみたと思います。

Jhead-3.03.tar.gz をダウンロードして解凍

# cd /usr/local/src/
# tar -zxvf jhead-3.03.tar.gz
# cd jhead-3.03
# make & make install
# find /DocumentRoot/wordpress/wp-contents/uploads/ -name *.jpg -type f | xargs jhead -purejpg

jhead をmake するときにmktemp コマンドは危険 mkstemp コマンドをお勧めします。みたいなエラーが出たときは素直にコマンドを置き換えてトライしてみましょう。

ディレクトリのAilias設定

Apache のconf ファイルでディレクトリのAlias設定をしたのでメモ。

/DocumentRoot/wordpress/ ディレクトリにWordpress をインストールしているとしてhttp://{ホストネーム}/computers/ とブラウザのアドレス欄に入力してアクセスしたいときに、httpd.conf ファイルを開いてAlias を設定しました。

<If Module alias_module>
    Alias /computers "/usr/local/apache2/htdocs/wordpress"

Apache 再起動。

WordPress のダッシュボードから[設定]-[一般]-[Wordpress アドレス] と[サイトアドレス]のURLにhttp://{ホストネーム}/computers としてディレクトリ設定を追加。

ブラウザでhttps://{ホストネーム}/computers でアクセスできることを確認。

これがやりたかったんですね。

ただ、旧URL でのアクセスをリダイレクト処理は別途、必要ですね。(くぅ~ん

Apache のアクセス解析的なツール

Linuxメモ : GoAccessでリアルタイムにWebログ解析 – もた日記

yum でインストールできるApache のアクセス解析を探していたらベストマッチなツールを見つけたのでメモ。

yum で引っ張って

# yum install goaccess

apache のlogファイルのパスを指定。

# goaccess /usr/local/apache2/logs/access_log

logファイルの形式を選択、[Enter]キー押下。

ターミナルに動的アクセス解析を表示できました。

こんなのが欲しかったんですね。

https へのリダイレクト

httpプロトコルのアクセスをhttpsへのリダイレクトの方法はいくつかあるそうですが今回は、.htaccess で試してみました。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^stuffy.dip.jp/        ←(追記
RewriteRule ^(.*) https://stuffy.mydns.jp/$1 [R=301,L]  ←(追記
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

 

RewriteRule ^(.*)$ https:// の後の % を付けずに表示させたところ、{HTTP_HOST}エラーがでました。
正しく表記して正常に転送できるかどうかトライ。うん、良いですね。。

 

追記)旧サイトからアクセスしてくるリクエストをSSL化した新サイトへのリダイレクトを追加しました。

try-except (Python)

Python で受け取った入力値の型が間違っているときはエラー(この場合はValueError)がでますが、そんな例外を処理する予約語としてtry except 文が用意されています。以下のコードは西暦を干支に変換するコードですが、半角数字が入力されないときのエラーを例外処理しています。
try:
(処理)
except(ValueError):
(例外処理)

eto.py

eto = ["申","酉","戌","亥","子","丑","寅","卯","辰","巳","午","未"]
try:
    x = input("生まれた年を西暦で入力してください。: ")
    y = int(x)
    y = y % 12
    print("あなたの干支は {} です。".format(eto[y]))
except(ValueError):
    print("4桁の半角数字を入力してください。")

あらかじめエラーが予想される処理をtry 文に投げて、except(エラーの種類)文で例外処理をします。エラーの種類は、データ型のエラー(ValueError)のほかに、0で割り算をした時のZeroDivisionError などがあります。