とても、とても、ひさしぶりに

ひさしぶりにmixiとブログにアクセスしてみたら、、、やっぱり廃墟だった。

ブログ文化って廃れちゃったけれども、SNSと違って後から読み返せるところが良いのだ。

この2年あまり、僕が台北から帰国した直後に疫病流行で日本国に閉じ込められて、彼氏ともなかなか会えない日々が続いていた。

自分の死の間際に人生を回顧する場面があったとしたら、やっぱりこの2年間は特別な時期であったと思い返すのだろうな。

これからも想うことがあればここに書き残したいと思うんだ。

Windows10にGPU環境で動くYOLOv5を構築したら

 うちのPCは Intel(R) Core(TM) i5-6600 CPU @ 3.30GHz   3.30 GHz ……第6世代のCorei5という古いマシンなのですが、GeForce RTX 2060というグラフィックボードが搭載されています。

ゲームしているわけじゃないんですが、1年位前に税込みで4万円を切る価格で販売されていてなんとなく装着したのです。2021年6月5日現在6万円後半の値付けになっていて驚きなんですが。


で、GPU機能を使ったyolov5を動かしてみたわけです。

結論から言うと、ちゃんと動作しています。

レシピを残しておきましょう。


環境:

OS:Windows10(バージョン21H1)

GPU:GeForce RTX 2060

CUDA:11.3.109

miniconda利用


0.GeForceのドライバーのインストール

これはさすがにインストール済みだと思うが、念のためにここからダウンロードしてインストールすることが可能。

https://www.nvidia.com/Download/index.aspx?lang=en-us


1.Visual Studioをインストールする

https://visualstudio.microsoft.com/ja/downloads/

からCommunityバージョンをダウンロード・インストールする。

僕が使用したのは、Visual Studio 2019でした。

途中でワークロードについて問われるので、「C++によるデスクトップ開発」を選択しておく必要があります。


2.CUDA Toolkitをインストールする

https://developer.nvidia.com/cuda-toolkit-archive

ここから、CUDA Toolkitをダウンロードしてきます。

今回はCUDA Toolkit 11.3.1(May2021)をインストールします。


Pathが通っているか確認するため、スタートキーの設定ボタンから→システム→詳細情報→システムの詳細設定→環境設定へ移動


ユーザー環境変数Pathのところで

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3\libnvvp


が存在しているか確認(バージョンが変われば上記の記述は変わってゆくことでしょう。また、何らかの理由でCUDAのイントールドライブ、フォルダが異なれば変わってゆくことでしょう)。


システム環境変数で、

変数名:CUDA_PATH

変数値:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3


変数名:CUDA_PATH_V11_3

変数値:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3


になっていれば、まずはOK。


PCをリブートしてPathの設定を有効にします。

PCのリブートが終わったらコマンドプロンプトでも、PowerShellでもどちらでもよいので立ち上げて動作テストをします。


> nvcc -V

nvcc: NVIDIA (R) Cuda compiler driver

Copyright (c) 2005-2021 NVIDIA Corporation

Built on Mon_May__3_19:41:42_Pacific_Daylight_Time_2021

Cuda compilation tools, release 11.3, V11.3.109

Build cuda_11.3.r11.3/compiler.29920130_0


と表示されればCUDAのインストールは成功しています。


3.cuDNNをインストール

ダウンロードするにあたってnvidiaにアカウントを作る必要があります(無料)。

https://developer.nvidia.com/cuDNN


このページの「Download cuDNN」ボタンをクリックし、ログインページを進んでゆきます。


「Download cuDNN v8.2.0 (April 23rd, 2021), for CUDA 11.x」を選択。

cuDNN Library for Windows(x86)を選択し、ダウンロードしてきます。


ローカルでzipファイルを展開します。

展開したフォルダにcudaがありますからそこに入ると、

bin

include

lib

の3つのフォルダをコピーし、

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3

で上書き貼り付け(要は貼り付け)します。


先ほどのCUDAでPathを通したように、環境変数のところへ行き、システム環境設定に新規で下記情報を書き込みます。


変数名:CUDNN_PATH

変数値:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3


PCをリブートしてシステム環境設定を有効にします。

PCのリブートが終わったらコマンドプロンプトを立ち上げて動作テストをします。


a>where cudnn64_8.dll

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3\bin\cudnn64_8.dll


と表示されれば、cuDNNのインストールは成功です。


4.Minicondaをインストール

ノーマルにPythonをインストールして構築する方法もあるのですが、個人的にM1 Mac miniでMinicondaを動かしている関係で、Minicondaベースで構築します。


https://docs.conda.io/en/latest/miniconda.html

からPython 3.9をバージョンであるMiniconda3 Windows64-bitをダウンロード・インストールします。(僕は個人的事情でDドライブにインストールしました)

途中でPathを環境変数に登録するか尋ねられますが、僕はチェックを入れてインストーラーに登録してもらいました。


インストールが終わったらPCをリブートします。


スタートメニューにAnaconda Powershell Prompt(miniconda3)と、Anaconda Prompt(miniconda3)の二つがいると思います。僕はPowershellバージョンを使用しています。


> conda -V

conda 4.9.2


> python --version

Python 3.9.1


と表示されれば問題なしと思います。


Anaconda本体をアップデートしておきましょう。

> conda update -n base conda


僕の環境ではcondaのバージョンがconda 4.10.1にアップデートされました。


Anacondaのすべてのパッケージをアップデートしておきます。

> conda update --all


僕の環境ではPythonのバージョンがPython 3.9.5になっていました。

進化が速いですね。。。


5.gitをインストール

インストール済みの人はスキップしてください。

未インストールの人は下記を参考にインストールします。

https://www.curict.com/item/60/60bfe0e.html


6.Minicondaで仮想環境を作る

下記を入力します。環境名の部分はお好きな文字で。

> conda create -n 環境名 python


僕はべたにyolov5としたので下記のようになりました。

> conda create -n yolov5 python


仮想環境で作業するときは、Anaconda Powershell Promptを立ち上げて、

> conda activate 環境名

を入力することで仮想環境に入って行けます。


★以降は仮想環境に入った状態であることが前提で進みます。


7.YOLOv5のダウンロードとインストール


下記コマンドを入力すると、Windpwsユーザーフォルダ内にyolov5というフォルダが作られます。

> git clone https://github.com/ultralytics/yolov5.git


作られたyolov5のフォルダに移動します。


下記コマンドを実行します。

>pip install -U -r requirements.txt


インストール作業が進んで行きます(トラブルのないインストールは見てて楽しい)。


Collecting matplotlib>=3.2.2

  Using cached matplotlib-3.4.2-cp39-cp39-win_amd64.whl (7.1 MB)

Collecting numpy>=1.18.5

  Using cached numpy-1.20.3-cp39-cp39-win_amd64.whl (13.7 MB)

Collecting opencv-python>=4.1.2

  Using cached opencv_python-4.5.2.52-cp39-cp39-win_amd64.whl (34.7 MB)

Collecting Pillow

  Using cached Pillow-8.2.0-cp39-cp39-win_amd64.whl (2.2 MB)

Collecting PyYAML>=5.3.1

  Using cached PyYAML-5.4.1-cp39-cp39-win_amd64.whl (213 kB)

Collecting scipy>=1.4.1

  Using cached scipy-1.6.3-cp39-cp39-win_amd64.whl (32.7 MB)

Collecting torch>=1.7.0

  Using cached torch-1.8.1-cp39-cp39-win_amd64.whl (190.5 MB)

Collecting torchvision>=0.8.1

  Using cached torchvision-0.9.1-cp39-cp39-win_amd64.whl (852 kB)

Collecting tqdm>=4.41.0

  Using cached tqdm-4.61.0-py2.py3-none-any.whl (75 kB)

Collecting tensorboard>=2.4.1

  Using cached tensorboard-2.5.0-py3-none-any.whl (6.0 MB)

Collecting seaborn>=0.11.0

  Using cached seaborn-0.11.1-py3-none-any.whl (285 kB)

Collecting pandas

  Using cached pandas-1.2.4-cp39-cp39-win_amd64.whl (9.3 MB)

Collecting pycocotools>=2.0

  Using cached pycocotools-2.0.2-cp39-cp39-win_amd64.whl

Collecting thop

  Using cached thop-0.0.31.post2005241907-py3-none-any.whl (8.7 kB)

Collecting cycler>=0.10

  Using cached cycler-0.10.0-py2.py3-none-any.whl (6.5 kB)

Collecting pyparsing>=2.2.1

  Using cached pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)

Collecting kiwisolver>=1.0.1

  Using cached kiwisolver-1.3.1-cp39-cp39-win_amd64.whl (51 kB)

Collecting python-dateutil>=2.7

  Using cached python_dateutil-2.8.1-py2.py3-none-any.whl (227 kB)

Collecting typing-extensions

  Using cached typing_extensions-3.10.0.0-py3-none-any.whl (26 kB)

Collecting tensorboard-data-server<0.7.0,>=0.6.0

  Using cached tensorboard_data_server-0.6.1-py3-none-any.whl (2.4 kB)

Collecting grpcio>=1.24.3

  Using cached grpcio-1.38.0-cp39-cp39-win_amd64.whl (3.2 MB)

Collecting tensorboard-plugin-wit>=1.6.0

  Using cached tensorboard_plugin_wit-1.8.0-py3-none-any.whl (781 kB)

Requirement already satisfied: wheel>=0.26 in d:\miniconda3\envs\yolov5\lib\site-packages (from tensorboard>=2.4.1->-r requirements.txt (line 15)) (0.36.2)

Collecting werkzeug>=0.11.15

  Using cached Werkzeug-2.0.1-py3-none-any.whl (288 kB)

Collecting markdown>=2.6.8

  Using cached Markdown-3.3.4-py3-none-any.whl (97 kB)

Collecting protobuf>=3.6.0

  Downloading protobuf-3.17.2-py2.py3-none-any.whl (173 kB)

     |████████████████████████████████| 173 kB 6.8 MB/s

Collecting absl-py>=0.4

  Using cached absl_py-0.12.0-py3-none-any.whl (129 kB)

Collecting google-auth<2,>=1.6.3

  Using cached google_auth-1.30.1-py2.py3-none-any.whl (146 kB)

Collecting requests<3,>=2.21.0

  Using cached requests-2.25.1-py2.py3-none-any.whl (61 kB)

Collecting google-auth-oauthlib<0.5,>=0.4.1

  Using cached google_auth_oauthlib-0.4.4-py2.py3-none-any.whl (18 kB)

Requirement already satisfied: setuptools>=41.0.0 in d:\miniconda3\envs\yolov5\lib\site-packages (from tensorboard>=2.4.1->-r requirements.txt (line 15)) (52.0.0.post20210125)

Collecting pytz>=2017.3

  Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB)

Collecting cython>=0.27.3

  Using cached Cython-0.29.23-cp39-cp39-win_amd64.whl (1.7 MB)

Collecting six

  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)

Collecting rsa<5,>=3.1.4

  Using cached rsa-4.7.2-py3-none-any.whl (34 kB)

Collecting cachetools<5.0,>=2.0.0

  Using cached cachetools-4.2.2-py3-none-any.whl (11 kB)

Collecting pyasn1-modules>=0.2.1

  Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)

Collecting requests-oauthlib>=0.7.0

  Using cached requests_oauthlib-1.3.0-py2.py3-none-any.whl (23 kB)

Collecting pyasn1<0.5.0,>=0.4.6

  Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)

Collecting chardet<5,>=3.0.2

  Using cached chardet-4.0.0-py2.py3-none-any.whl (178 kB)

Collecting urllib3<1.27,>=1.21.1

  Using cached urllib3-1.26.5-py2.py3-none-any.whl (138 kB)

Collecting idna<3,>=2.5

  Using cached idna-2.10-py2.py3-none-any.whl (58 kB)

Requirement already satisfied: certifi>=2017.4.17 in d:\miniconda3\envs\yolov5\lib\site-packages (from requests<3,>=2.21.0->tensorboard>=2.4.1->-r requirements.txt (line 15)) (2021.5.30)

Collecting oauthlib>=3.0.0

  Downloading oauthlib-3.1.1-py2.py3-none-any.whl (146 kB)

     |████████████████████████████████| 146 kB 6.4 MB/s

Installing collected packages: urllib3, pyasn1, idna, chardet, six, rsa, requests, pyasn1-modules, oauthlib, cachetools, typing-extensions, requests-oauthlib, pytz, python-dateutil, pyparsing, Pillow, numpy, kiwisolver, google-auth, cycler, werkzeug, torch, tensorboard-plugin-wit, tensorboard-data-server, scipy, protobuf, pandas, matplotlib, markdown, grpcio, google-auth-oauthlib, cython, absl-py, tqdm, torchvision, thop, tensorboard, seaborn, PyYAML, pycocotools, opencv-python

Successfully installed Pillow-8.2.0 PyYAML-5.4.1 absl-py-0.12.0 cachetools-4.2.2 chardet-4.0.0 cycler-0.10.0 cython-0.29.23 google-auth-1.30.1 google-auth-oauthlib-0.4.4 grpcio-1.38.0 idna-2.10 kiwisolver-1.3.1 markdown-3.3.4 matplotlib-3.4.2 numpy-1.20.3 oauthlib-3.1.1 opencv-python-4.5.2.52 pandas-1.2.4 protobuf-3.17.2 pyasn1-0.4.8 pyasn1-modules-0.2.8 pycocotools-2.0.2 pyparsing-2.4.7 python-dateutil-2.8.1 pytz-2021.1 requests-2.25.1 requests-oauthlib-1.3.0 rsa-4.7.2 scipy-1.6.3 seaborn-0.11.1 six-1.16.0 tensorboard-2.5.0 tensorboard-data-server-0.6.1 tensorboard-plugin-wit-1.8.0 thop-0.0.31.post2005241907 torch-1.8.1 torchvision-0.9.1 tqdm-4.61.0 typing-extensions-3.10.0.0 urllib3-1.26.5 werkzeug-2.0.1


インストールが終わったら動作確認をしてみます。

yolov5ではおなじみのヤツです。




> python detect.py --source .\data\images\zidane.jpg
Namespace(weights='yolov5s.pt', source='.\\data\\images\\zidane.jpg', img_size=640, conf_thres=0.25, iou_thres=0.45, max_det=1000, device='', view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, update=False, project='runs/detect', name='exp', exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False)
YOLOv5  2021-6-5 torch 1.8.1+cpu CPU

Fusing layers...
Model Summary: 224 layers, 7266973 parameters, 0 gradients
image 1/1 C:\Users\ユーザー名\yolov5\data\images\zidane.jpg: 384x640 2 persons, 2 ties, Done. (0.156s)
Results saved to runs\detect\exp
Done. (0.189s)

結果を見てみましょうか。

yolov5\runs\detect の中にexpというフォルダが並びます。
今回はexpへ行けという指示でしたのでそこへ行くとyolov5の判定結果が保存されているはずです。




8.CPU利用環境からGPU利用環境へ移行する

先ほどの動作検証で、下記のメッセージが出ていました。
YOLOv5  2021-6-5 torch 1.8.1+cpu CPU

今の環境を調べる方法はこちらです。

> python
Python 3.9.5 (default, May 18 2021, 14:42:02) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
False
>>> exit()

cudaが動いていない(False)の状況です。
ここからGPUが動く環境に移行させます。

まず、CPUで動く Pytorchを削除します。
下記のコマンドを入力します。

> pip uninstall torch
> pip uninstall torchvision

次にPytorchのサイトへ行きます。
https://pytorch.org/

Installボタンをクリック(またはGet Starttedタブをクリック)するとページ遷移し、START LOCALLYのページが表示されます。
ここで、
PyTorch Build:Stable1.8.1
Your OS:Windows
Pakage:Conda
Language:Python
Computer Platform:CUDA11.1

を選択するとコマンドが表示されます。
Run this Command:
conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch -c conda-forge

これをコピーし、Anaconda Powershell Promptで実行(もちろん指定の仮想環境で)。インストールが終わったらGPUが使用できるようになったか確認してみましょうか。

> python
Python 3.9.5 (default, May 18 2021, 14:42:02) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
True

True表示が出たのでめでたくGPUが利用できる環境が手に入りました。
続けて下記を入力してみます。

>>> print(torch.cuda.get_device_name(0))
NVIDIA GeForce RTX 2060

GPUボード名も表示されたので環境は完成した模様。

CPU環境でも試したzidane.jpgの判定をやってみました。

> python detect.py --source .\data\images\zidane.jpg
Namespace(weights='yolov5s.pt', source='.\\data\\images\\zidane.jpg', img_size=640, conf_thres=0.25, iou_thres=0.45, max_det=1000, device='', view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, update=False, project='runs/detect', name='exp', exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False)
YOLOv5  2021-6-5 torch 1.8.1 CUDA:0 (NVIDIA GeForce RTX 2060, 6144.0MB)

Fusing layers...
Model Summary: 224 layers, 7266973 parameters, 0 gradients
image 1/1 C:\Users\ユーザー名\yolov5\data\images\zidane.jpg: 384x640 2 persons, 2 ties, Done. (0.022s)
Results saved to runs\detect\exp
Done. (0.057s)

0.189s → 0.057sですので約30%程度の時間で判定が終わった計算になります。
速いな。。。

下記コマンドでWebカメラからの映像を判別できます。
> python detect.py --source 0

CPUだとカクカクした処理がGPU環境になるとヌルヌル動くのが感動的です。

FileMakerでツールバー、ステータスバーが消えてしまった場合

 最初に言っとくけど、FileMakerのヘルプサイトはマジカス。

見通し悪いし、欲しい情報になかなか当たらない。


さて、連休最終日、休日返上で仕事していた私。

テスト作業中にツールバー、メニューバーが消えて詰んだ。。。

マジ切れしながら情報を集め解決。

日本語でロクな情報がなかったので記録しておく。


環境:Windows10 Pro、FileMaker19.1.2.219

状況:ツールバー、メニューバーが非表示になる。

   レイアウト移動等が制限されるため、開発作業続行不可。

   PC再起動、FileMaker再起動しても回復しない。


回復方法:

英文のコミュニティで下記回復方法が記載されていた。


1.メニューバーを回復させる

Ctrl+Alt+S でメニューバーが回復する。

(逆に無意識にこれを押してしまうとメニューバーが消失する)

レイアウトボタンが表示されるようになる。

ここで適当にボタンを作成し、「単一スクリプト」「ツールバーの表示切替[表示する]」を書き込んで置きレイアウトを保存。


上記ボタンをクリックすればツールバーが回復する。


2.スクリプトワークスペースを立ち上げる

Ctrl+Shift+S でスクリプトワークスペースが立ち上がる。

適当な名前で新規スクリプトを作成し、


ツールバーの表示切替[表示する]


を書き込み保存・実行するとツールバーが回復する。


緊急事態用に管理用レイアウトにツールバー復活ボタンを仕込んでおくのが安全かもしれない。

ケータイプランをどうしようか。。。

 3月からahamoを始めとして各社の新プランが始まります。

で、僕もahamoに魅かれたんですよ。

なんといっても「5分間電話かけ放題」「パケットを海外でも利用可能」がとにかく魅力的。海外旅行先の空港で、まず最初にやる仕事「現地のsimカードを買うこと」から解放されなんてTrès bien!!


なんだけど、国内での僕のパケット消費量は微々たるもの。

自宅はnuroでハイスピードのWiFi環境が構築されてるし、屋外では動画見ないしね。

3GBを使い残すこともしばしば。

なので、前月使い残したパケットを繰り越しができるUQmobileで十分だったのです。


で、最近やっていることといえば、M1 Macminiをホームサーバにして、pythonプログラムを作って遊ぶこと。

カフェにノートPC(これはSurface Laptop3)を持って行って、sshでM1 Macminiにリモート接続してプログラムを書く。


Visual Studio Codeが最高すぎる~!!


リモートサーバ側にあるプログラムコードを書き換えるならばターミナルを立ち上げてvimあたりを使うことになるのでしょうが、自分にはちょっと使い難く。

atomエディタで直接サーバ側のファイルをいじれれば良いのですが、ftpを使うなどちょっと煩雑な感じがした。


ところがですね。

Visual Studio Codeだとsshターミナル機能を内蔵しているのです。

なのですでに.ssh/configで設定してあるリモート接続設定を拾ってきてくれてシレっと接続。

リモートサーバ側のファイルを開いて、あたかもローカルで編集しているように作業できるのが最高!


で、話はQUmobileに戻るわけですが。

QUmobileは「パケット繰り越し」以外に「高速・節約モードの切り替え」ができるという特長があります。「高速モード」は契約パケット容量から消費されるのですが、「節約モード」は低速(僕の契約だと300kbps)ながら無制限の通信が可能。

で、いま現在spotifyを聴きながらVisual Studio Codeでプログラムの編集をしつつ、時々コンソールでプログラムを動作させていますが、「まあまあ行けんじゃね!?」という感触です。


もっかい言うよ。

Visual Studio Codeが最高すぎる~!!


とりあえず、不満が出るまではUQmobileにいようと思います。

2021年のはじまり

去年の今頃、台湾旅行していたことが夢のよう。

僕らが帰国した直後から新型コロナが日本に飲み込んでいって1年経った。

twitterでたまにつぶやいても、あの時僕たちはどんな気持ちで日々を送っていたのか後日思い出すのは困難だ。

もはやオールドメディアだけど、ブログがいずれ「あの時の空気」を後世に伝えてゆくのだろうと思う。


煉獄さんが日本一の漢になって嬉しかったこと。

長い間彼氏に会えなくて寂しかったこと。

學猫叫がとても好きなこと。


きっといつか懐かしく思い出す日が来るのだろう。


先の見えない日々

コロナウイルス第3波が来ている。

春先、緊急事態宣言が出た時を上回る感染者が出ているけれど、いまだ緊急事態宣言は出ていない状況。

本当に難しいところなんだろう。

経済と命、どちらが大切なのか!?とイキり立つ人は少なからずいると思う。

けれど、経済を止めることで経済的に破綻し、結果生活ができなくなる人も出てくるわけで、テレビで適当なことをしゃべってお金もらえる人たちとは切実さが全然違うのだろう。


GO TOトラベルも大阪、札幌出入りはいったん中止。

1月の僕らの予約は今のところキープしているけれど、どうなるかねぇ。

それこそ僕らが二人で過ごすために予約した旅行は不要不急の最たるものだろうけど、こうやってだんだん先の予定が見えなくなってゆくのは、遠距離交際者には地味に影響があるんだよねぇ。

那覇滞在中

仕事で出張をこなした後、那覇市内に滞在しています。
3年位前から、実は足に故障を抱えていました。
1ブロックくらい歩いたところで足の踵の縁が痛み出し、よちよち歩きみたいになる。
病院に行こうかどうか、本当に悩んでました。

去年の10月。
那覇大綱引きのあった日(綱が切れるハプニングがあった日。あの群衆の中にいました)、人ごみにもみくちゃにされたあと、とあるマッサージ店に入ったのです。
そこでとあるマッサージ師に「ふくらはぎがパンパンに固くなってますね。ふくらはぎが固くなると老廃物が足にたまって痛むのです」と指摘されたのです。
当時はフィットネスクラブで無理していたこともあり、ふくらはぎは子持ちシシャモ状態にはなっていましたね。

で、ふくらはぎをガシガシ揉まれて悶絶したんですが、翌日、それまでの足の痛みが嘘のようになくなって、ほんと感謝しかない状態。
その後のメンテナンスを兼ねて再訪したわけですが、あれだけ強く揉まれても翌日痛みは全くでないわけで、僕にとってゴッドハンドな人なのです。

それだけの理由で那覇を再訪したくなります。

朝ごはんはC&C BreakFastでスープとビーフサンドイッチ。
優しい味、柔らかい肉。
サンドイッチをデップ(スープ)につけながら食べるのがおもしろい。

むつみ橋かどやでソーキそば



そのほか、赤とんぼでタコス・タコライス。
まきし食堂でゴーヤチャンプル定食。
晩御飯に新茶屋でギョーザとビールなんかを食べてました。

沖縄土産はちんすこうでもなく、幸せそうな善逸です。



あれから

最後にブログに投稿してから3か月が経過したんですね。
すごいなあ。
生きてますよー、生きてます。

彼氏とは4月に一度来日中に会ったきり。
フライトの関係で1ヵ月会えないという経験はあるけれど、さすがにこれだけ長い間会わなかったのは初めてだ。
といっても、毎日Line電話で話している。
大体1時間くらい。
お互い外出がないので、話すネタがちょっとなくなってきて困ってるくらいかな??

明日、緊急事態宣言が解除されると思うけれど、仕事場はしばらく在宅勤務をつづけるらしい。
というか、いろいろな人と話していると社内に「こういう勤務も悪くないね」という声が上がっているそうで、事業継続の観点からもVPNを取り入れた仕事スタイルが増えていきそうな感じ。

僕が面倒を見ているネットワークにも、VPN機能の拡充と、セキュリティ対策のあれこれ実装で忙しくなりそう。

とりあえず、生存確認ということで。

遠距離恋愛だから……

普段からテンション高い方だと思う。
(どっちか疲れていて、そうじゃない時もあるけどさ)

今月に入ってからは、「新型コロナウイルスにやられて、もう会えないかもしれない」「今日が今生の別れ。次は来世で~」みたいにさらに無駄にテンションが上がってる。

僕だけだが。

眠っていた

自室の椅子に座ってたら、しばらく眠っていたみたいだ。
僕の部屋は南・西に二つの窓があって、一日中良く陽が差し込んでくる。
ケルトの中世音楽が低く流れる部屋で全身を温められて、ふわふわとキモチいい。

先月、日月潭のThe Laluの湖の見えるバルコニーで、まるでベッドのように大きいソファでまどろんでいたことを思い出した。
チェックアウトまで1時間余りしかないのに。
陽光に包まれて、彼氏に添い寝して二人でうとうとまどろんでいる時間は夢のようだった。
このまま死んでもいいって思った。

ここで死んでもいいって、具体的にイメージしたのは過去に一度ある。
あれは高雄で、あまり美味しくない朝食を食べていた時。
グランドピアノが曲を奏でていて、音楽を聴きながら食事をしている最中にそのまま死んでしまえたら幸せだろうなあと思った。

両方とも彼氏が隣にいて、先に逝っちゃうのはホント申し訳ないけれど、きっと幸せな死に際なんだろうなあと思う。

僕が見送った祖父母は最期は日当たりの良くない病室で亡くなった。
その姿を見ていたから、病院で死ぬことになったとして、例え意識がなかったとしても、日当たりの良い部屋で陽光に包まれて逝きたいなあと思うんだよね。


あれから……

以前列挙した未整理の旅行たち。

・2016年8月2日〜8月6日 東北3県(青森、秋田、宮城)旅行
・2016年9月8日〜9日 長野(軽井沢→茅野)旅行 小海線初体験
・2016年9月30日〜10月2日 大分(別府)滞在 iPhone破壊の悲劇
・2016年10月22日〜10月23日 河口湖滞在
・2017年1月5日〜1月9日 タイ旅行(パタヤ・バンコク)
・2017年3月8日〜3月9日 軽井沢滞在
・2017年3月15日〜3月16日 軽井沢滞在
・2017年3月22日〜3月25日 軽井沢滞在
・2017年3月28日〜3月29日 茅野滞在
・2017年4月10日〜4月12日 勝浦滞在
・2017年4月19日〜4月21日 茅野滞在
・2017年5月6日〜5月11日 ベトナム旅行(ダナン・ホイアン)
・2017年6月1日〜6月2日 茅野滞在
・2017年6月5日〜6月7日 軽井沢滞在
・2017年7月15日〜7月16日 伊豆(松崎)滞在
・2017年9月17日〜9月19日 千葉(南房総市)滞在
・2017年10月7日〜10月9日 大阪滞在
・2017年10月28日〜10月29日 箱根滞在
・2017年11月3日〜11月5日 上高地滞在
・2017年12月12日〜12月13日 軽井沢滞在
・2018年1月19日〜1月22日 香港(マカオ)滞在
・2018年1月24日〜1月25日 茅野滞在
・2018年3月10日〜3月11日 千葉(安房小湊)旅行
・2018年4月8日 山梨(富士吉田市)旅行
・2018年5月19日〜5月20日 名古屋滞在
・2018年7月7日〜7月11日 インドネシア(バリ島)旅行
・2018年7月22日 山梨・長野(清里)旅行
・2018年9月15日〜9月17日 伊豆(松崎)滞在
・2018年9月20日〜9月24日 大分(別府)滞在
・2018年10月10日〜10月14日 大分(別府)滞在
・2018年10月25日〜10月26日 茅野滞在
・2018年10月26日〜10月29日 大阪(京都)旅行
・2019年1月11日〜1月17日 タイ(ホアヒン・バンコク)旅行
・2019年3月2日〜3月5日 大分(別府)滞在
・2019年3月23日〜3月24日 千葉(南房総市)滞在
・2019年4月26日〜4月30日 大分(別府)滞在
・2019年5月1日〜5月3日 新潟旅行
・2019年6月6日〜6月9日 沖縄旅行
・2019年6月27日〜6月30日 大分(別府)滞在
・2019年7月6日〜7月9日 伊豆(松崎・熱海)旅行

このあとも……

・2019年7月20日〜7月23日 大分滞在
・2019年8月10日〜8月12日 新潟滞在
・2019年8月15日〜8月17日 大分滞在
・2019年9月11日〜9月13日 成田滞在
・2019年9月24日〜9月25日 成田滞在
・2019年10月10日〜10月14日 沖縄滞在
・2019年10月24日〜10月27日 札幌旅行
・2019年11月2日〜11月3日 新潟滞在
・2019年11月8日 勝浦滞在
・2019年11月11日〜11月13日 長野滞在
・2019年12月1日〜12月3日 大分滞在
・2019年12月10日〜12月12日 軽井沢滞在
・2019年12月16日〜12月18日 茅野滞在
・2020年1月11日〜1月15日 台湾(台北・日月潭)旅行

結構移動が続いた。
iPhoneの中には撮り溜めた写真がたくさんあるのに、まとめる暇なし。
しばらくは写真の整理と旅行記をまとめたいと思ってるんだが。。。。

Anaconda3をPowershellから使用するTips

自分用メモ。

とにかくActivationが通らない。
Pythonを立ち上げると、必ず下記警告が出てしまう。

Warning:
This Python interpreter is in a conda environment, but the environment has
not been activated. Libraries may fail to load. To activate this environment
please see https://conda.io/activation.

これを解消するには、Powershellから次のコマンドを実行する。

> conda init powershell

これで良いようだ。

で、続きを。
これをやってしまうと、PowerShellを立ち上げるたびにconda環境になってしまうそう。
解消方法はこちらだと。

profile.ps1というファイルを探す。

これが変更前の内容。
#region conda initialize
# !! Contents within this block are managed by 'conda init' !!
(& "c:\Users\user\Anaconda3\Scripts\conda.exe" "shell.powershell" "hook") | Out-String | Invoke-Expression
#endregion

これを下記のように変更。
#region conda initialize
Function condaini{
  (& "c:\Users\user\Anaconda3\Scripts\conda.exe" "shell.powershell" "hook") | Out-String | Invoke-Expression
}
#endregion

修正を終えたら保存する。

PowerShellでconda環境に入りたくなったときは、
> condaini

を入力する。

参考サイトはこちら。
本当に助かりました。ありがとうございました。

Anaconda がやっと PowerShell に公式対応した
https://qiita.com/yniji/items/668f805a72a6ced6a2bd

令和2年最初の投稿

令和元年から2年になって、今年の年末年始は9連休で終わった。

まあ、ドラマ漬け、甥姪漬けの日々。
Switch Liteを買ってやったり、お年玉巻き上げられたりと出費がすごかった。

連休最終日。
近所のショッピングモールで買い物して、コメダ珈琲店でAnaconda3の再インストール作業しながら今年最初のブログを更新してる。

書きたいことは何かなあ。。。。
おっさんずラブ in the skyがまずまずの着地をしたと思った。
春田成瀬カップルを期待したけれど、四宮ファンがあれだけ増えてしまった手前、成瀬四宮で纏めるしかなかっただろう。成瀬、かわいい顔して絶対タチだと思う(w
となれば、春田失恋コースかと思うけれど、本家本妻の黒澤武蔵とくっつける。
まあかなり強引な展開だけど、あれしかなかったんだろう。



田中圭・吉田鋼太郎のペアで今後も続編作り続けるにはもう無理があった。
今回の天空不動産粘着ファンの炎上を見ていたら、制作側としては手仕舞いしたくもなるだろうよ。あれは本当にキチガイ過ぎた。
僕としては獅子丸にももっと活躍して欲しかったし。
in the sky第二期も見てみたかった。
だけど、あの惨状はなあ。。。
制作側の意欲を挫くようなキチガイっぷりだったと思うよ。

ぶっちゃけ男性同志愛、同性愛に、ぶっちゃけ部外者の女性があれだけ介入して、ネット上でキチガイみたいに騒いだり、呪怨のような怨嗟を垂れ流している様子を眺めていて、なんなんだろこの人たち。。。と当事者の一角としては頭を抱えたわけです。
なんで女性が、同性愛者のドラマをあたかも自ら所有しているかのように振る舞えるのだろう。。。LGBTうんたらとか置いといて。そういう風に乱暴に手を突っ込んでくることに、勝手な思い込みをごり押ししてくることに、当事者たちがどれだけ嫌がっているのか分かんないんだろうな。。。

きのう何食べたは定常運転。
文句の付けようのない展開だけど、ときめきはないの(w
そうだよなあ。
長く付き合ってるゲイカップルなんてあんなもんだから。
ただ、お互いを思いやって慎ましく生きてゆく姿は、子無しノンケカップルも参考になるところがあるという指摘は、なるほどなあと。

というわけで、2020年もよろしくお願いします

AI美空ひばり あれから

出張先のホテルでたまたまTVを見たら、ちょうどサビの部分が流れてきた。
瞬間で、泣いた。
そのあと目を真っ赤にしたNHKアナのMCのあと二度目の歌唱が流れてきて、ベッドの上で号泣したんだ。

寒い場所にいて。
先週から微熱や腰の痛みがあったりで身体はボロボロで。
日中、ディスプレイに向かいながら仕事して。
夜はさびれたレストランで独りでご飯を食べる。
自覚できていないところですごく消耗していたんだと思う。

「あなたのことをずっと見ていましたよ
 がんばりましたね
 さあ、私の分まで
 まだまだ頑張って」

なんか、この語りの部分にやられた。
それから何回も何回も聴いたよ。

秋元康、ほんと天才。
こんな歌詞を紡ぎだすなんて。
曲自体がとても良い。

だけど、AIとはいえ美空ひばり以外の人が歌っても、こんなに感動したかどうか。。。

Vocaloidの特別版らしい。
生粋の美空ひばりファンには申し訳ないけれど、僕にはストンと腑に落ちた。
DeepLearningで作られたものは、電子楽器「美空ひばり」にすぎない。
新曲「あれから」は、発表されるまで苦労したエンジニア、ダメ出しし続けた後援会のコアのおばちゃんたち、その他たくさんの人たちの想いがあの形に結実したのだと。

AIに感情も人間味もない。
だって人間じゃないから。
それっぽくふるまって見せてるだけで。

それを美空ひばりっぽく歌わせてみせるエンジンが、実はとても泥臭い人間の作業だったことにAIの限界と希望を見たような気がしたよ。

でも、僕は泣かされたんだ。

おっさんずラブ in the sky 6話

ほんと、このシリーズとてもおもしろい。
前半の火鍋シーンも、バッティングセンターシーンは笑った。
いきなりホームランで存在バレちゃうし。

最後に捨て身でシノさんに抱き着く成瀬が切ない。
ああいう形の慰め方しか知らなかった、セックスの経験だけ積み重ねてきただけの子供。
切なかったな。

このドラマはいろんなことを教えてくれているなあ。
S1至上主義の狂信者の存在。
それを煽ったドラマライターという存在。
同性愛者のドラマに葛藤がないから不満という腐女子たちに対する「同性愛者に苦しんでほしい彼女たちへ」というカウンター。それを考察する者たちの存在。
世の中は尻馬に乗って騒ぐやつが多すぎだよ。

それにしても、なんかね。
ドラマはこういう狂乱を飛び越えて、最終回に向かっているんじゃないかな?といま時点の僕は感じていたりする。

BOY'S LOVEってよく知られたキーワードがある。
「おっさんずラブ」と日本語で書くとわからないが、Ossan's Loveなんだよね。

今回、天空不動産から天空ピーチエアラインに舞台が移ったことについて「おっさんずラブは部長がはるたんと結ばれる世界線を探すループものだと思おう。。」「おっさんずラブ、はるたんと恋が上手するまで何度も出会いや時間を変えてやり直す吉田鋼太郎ってもうこれ魔法少女まどかでしょ…」って指摘があった。

現在放送された6話までを見る限り、確かに春田創一が主人公で露出が一番多いことは間違いないが、実質的な主人公はばーちー成瀬竜だ。視聴者の興味は成瀬竜の成長に集中しているといっても過言ではないと思う。かわいすぎるおっさん成瀬竜が、どうやって恋を成就させるのか、その一点に関心が集まっている。
もはや、おっさんずラブは、今回春田創一と黒澤武蔵の物語でも、春田創一と牧凌太の物語でもなく、すでに群像劇(Ossans)に拡張されたといっても良いのではないかと。

そういう意味では、LGBTへの理解が深いと言われる航空業界を舞台にしたのは英断だったとしか言えない。ギャレーの噂話が「あいつ今度結婚するんだって」「マジ?あいつノンケだったの?!」みたいな業界だそうだから。だから「男同士の葛藤」を描かなくて済んだ。いいんだよ、そういう世界にシフトしていって欲しいのが同性愛者の願いだから。

あとね。
山崎育三郎に抱きしめられる田中圭を見ていて、このドラマはブロマンスについても啓蒙しようとしているのかなあとも思った。
フェミニストたちは想像したこともないかもだけど、男だって庇護して欲しい時もある。抱きしめられて、泣きたい時だってある。元々そんなに強い生き物じゃないんだよ男って。


春田に向ける冷めた目線と、シノさんを見つめる潤んだ瞳と、千葉雄大はいい役者だなあとちょっとファンになった。かわいさのプロだね。

個人的な件。
昨日、僕たちは付き合い始めて丸11年目が終わり、12年目に入った。
空港に着いた彼氏におめでとうのメッセージを送りたかったのに、風邪に押し倒されて寝込んでいた。
ベッドの中で彼氏からのメッセージにほこほこしていた12年目初日。

僕にとって一番かわいいのは彼氏です。

おっさんずラブ in the sky

前作ファンと宗教戦争になってるおっさんずラブ。
それだけ注目度が高いってことなんだろうけど。

僕は今のところ in the skyの方が好きなんですよ。
単発ドラマ→視聴済み
S1→途中で挫折
映画→視聴済み
S2→絶賛お楽しみ中

正直言うと、S1の10年越しの想いがドロドロしてる黒澤武蔵、「先輩が巨乳好きなのは知っています。でも……巨根じゃダメですか?」って迫る牧凌太、僕は気持ち悪いと感じたんですよ。そーいう迫り方、ノンケから見たら相当ホラーでしょ?って。

それに比べると、S2は相当にソフト路線だと思います。
だって第4回まで直接的にセクシャルなセリフは出てきてない。
S1に比べて洗練されて、薄味になった。
「なぜ恋に落ちたのか?」を描こうとしている。
S1では牧に押されっぱなしだった春田が、S2では成瀬の唇を奪いに行く。
S1では最後までなんか腰が定まっていないようにしか見えなかった春田が、今回はちゃんと恋愛しようとしているように見えるんだけど。

あと、航空業界の人たちの近くにいる身として、時々クスッと笑えるシーンもあって。
「あたしは売られたケンカ全部買うけどね。こっからここまで全部くださいって」と言ってのけるMEGUMIにかなり笑ったし。
彼氏の同僚さん、これくらい気の強そうな人ばかりだし。

春牧に思い入れが強すぎてin the sky をボロクソに貶している人たち、即時放送停止を求めて署名活動している人たち、なんで他人事に無駄な時間と労力をつぎ込んでいるのか、僕には理解できない。S1のDVDを擦り切れるまで眺めてりゃいいじゃん、と思うのです。春牧に思い入れが強すぎてTwitterで暴れている人たちは、自分たちの傲慢さに早く気付いた方がいい。それ、行きすぎたらテロリズムと変わらんですよ。田中圭も、おっさんずラブもあなた方の所有物でもなんでもないんだから。彼らの自由を妨害する権利はないんですよ。
そんなに嫌いならば、深夜番組なんだからテレビを消して、さっさと寝てしまえばいいんですよ。なぜそんなことで疲弊してるの?
じゃなかったら二次創作で発散すれば良いのでは?

僕的には成春に期待したいところだけど、後半投入される山崎育三郎は誰とくっつけるための役割を与えられたのか気になるところ。

成瀬の小動物的可愛さはウチの彼氏にもあって。
成瀬を愛でながら、次の彼氏のフライトスケジュールを確認してる。
いつか萌え袖をやらしてやる。

勝間和代やっちまったなあ……

2018年5月31日にこの記事「どうでもいいニュースランキング2位……勝間和代」を書いたこともあるしで、このネタの終焉を締めくくる義務感に駆られた今週。

元祖意識高い系オンナ勝間和代の高転びをせせら笑うつもりはないけれど、いい勉強になっただろう?って思ったりはする。

去年、勝間和代のカミングアウトと増原裕子との交際がメディアに載った時、「いい年した人間がなに舞い上がっているんだか……」と思った。そしてレズビアンカップルで荒稼ぎするつもりなのかと思いきや、勝間和代がいいように使われて捨てられたようだ。

なんかさ。
同性愛を拗らせて、人権屋界隈に足を踏み入れ、そこにうようよ巣くってるサヨクに浸潤されると人生壊れるんだよね。パートナーシップ制度にこだわって色々やらかしている人たちが、あんなに情熱をかけて紙一枚をもぎ取ってきたのに、案外あっさりと別れたりする。そこになんかサヨクっぽさを感じるんだ。

なんていうか。
彼らはパートナー=同志みたいなイメージでとらえているのではないだろうか。
僕はその考え方は自分たちを苦しめるだけだと思っている。
「パートナーなんだからこうすべき」「パートナーなんだから協力するのは当たり前」というような縛り……その本質はモラハラかDV。
特に政治活動している人間なんかに関わったら彼らの政治思想・信条に振り回されるのは必至。しかもサヨク界隈の人間は自分の思想は無謬、絶対だから、それとズレが出てきた相手を切り捨てることに躊躇しない。
そして身勝手な人が多いよ。
客観的に見ればやってることはヒトデナシ。
彼らはそれを「自由」と強弁するけどね。

本当のパートナーシップって、例えば「きのう何食べた」で描かれているようなシロさんとケンジくんのような、時々ケンカもするけれど穏やかな日々を過ごすことなんだと思う。

勝間和代と増原裕子の交際が始まったことをBuzzFeedNews、朝日新聞デジタル、Forbesジャパンとか、まあ主にリベラル系のメディアが取り上げていたことを覚えている。
彼らはこの結末をどう総括するつもりだろうか。
「個人の自由」とか言って取り繕うつもりだろうか。
メディアが嬉々として取り上げていたのは、いい年してパートナーを捨てることに躊躇のないヒトデナシだったわけだよ。

話題にさえなれば何でもいい。
そういう意味では最も人権意識の欠落しているメディアの狂騒に嫌気がさす。

最後に勝間和代「さん」に僕から一言。
お仕事柄、政治活動家と接することは多かっただろう。
あなた自体が政治活動家なのかもしれない。
今回、悪質なLGBT活動家に関わって、あなたはとても傷ついたと思う。
世間の注目を集めるために何でもやる人たちを、少なくない同性愛者達は冷ややかに見ている。
そのことは知っていて欲しい。

同性愛者のパートナーシップってのは、派手な打上花火じゃない。
何千人の人たちの注目を集めるための道具じゃない。
静かに、肩を寄せ合ってパチパチ爆ぜる線香花火を見つめるように、流れていく日々を共に見つめてくこと。
そういう穏やかな、静かなものなのだと僕は思ってます。


あなたの傷が癒えますように。

ダメだ、、、時間がない

先月は沖縄、北海道に出かけていて、いい写真たくさん撮った。
沖縄は思いがけずリゾートだったし、札幌は彼氏としっとりデートの日々。
楽しかったなあ。。。

それ以外は怒涛の仕事漬けで、週末は自分のためのPythonコード書く暇もなく。
代わりに仕事用のコードを書いてる。
今日もカフェでコードを書く合間にブログ更新。

僕はSEでもプログラマでもなくて、自分の仕事を効率的に捌くためにPythonのコードを書くようになった。
今ではいきなり手を動かさず、プログラム化して手を抜けないだろうかと考える癖がついたよ。

あ、Surface Laptop3 とても良い。
Macでコードを書いた場合、Windowsで動作するかどうか検証しなきゃならないのが時間の無駄で。
といいつつ、PowerShellの出来が良くないのには悩まされます。

ラグビーワールドカップ、すごかったよ

先週土曜日。
札幌の太助で晩御飯を食べながら、彼氏と一緒にイングランド×ニュージーランド戦を見てた。
イングランドが巧みで、「イングランド上手だなあ」となんどもつぶやいていた。

決勝戦は新潟のホテルで一人で観ている。
それぞれの国歌が流れている映像で、鳥肌が立った。
とても神々しい姿だった。
これから90分後には勝敗が決まる。
だけど、その80分間は、とてつもない光景を固唾をのんで見守るのだろうと。

南アフリカが勝利したいま。
なんか虚脱状態。
おめでとう南アフリカ。
ワールドカップを戦ったすべての選手たちが素晴らしかった。
ありがとう。
戦う選手の姿は美しいと、ただそう思った。

Surface Laptop3 到着!

早速ぶっ壊して文鎮化。
オレは何をやっているんだろう。。。