※当サイトの記事には、広告・プロモーションが含まれます。

ZDD(Zero-suppressed Binary Decision Diagram)ってものが存在するそうな

皆さ~ん、ZDD(Zero-suppressed Binary Decision Diagram) ってご存知ですか?

私は知りませんでした...あ、どうもボクです。

 

その前に、だいぶ時が経ってしまったのですが、常駐先の同僚の方に教えていただき、

f:id:ts0818:20190119223120p:plain

に参加してきました。
type.jp

⇧  定期的に転職フェアは開催されているみたいですね。

 

で、2019年の1/19(土)の座談会で、「株式会社LINE」の方の話がとても印象的でした。

『Take Ownership』

自分で決断することで、成長する度合いが変わってくるんだとか。何をするにも、流されてはいけないんだと...実践は難しそうですが。

そして、LINEの掲げる11か条がナイスな感じだったので、勝手に紹介。

linecorp.com

  1. Users Rule
    • 全ての原点は、ユーザーニーズ
  2. Stay a Step Ahead
    • 完璧さより、まず踏み出す勇気
  3. Perfect Details
  4. Always Data-driven
    • 感覚ではなく、データ=事実を信じる
  5. Build Lean and Exceptional Teams
    • 最高を目指す、少数精鋭のチーム
  6. Open Communication, Vertical Decision-making
    • オープンな議論と、リーダーによる決断
  7. Keep in Sync, Aiming for the Same Goal
    • 同じゴールを目指し、同期し続ける
  8. Work Intensely and Be Focused
    • 目的なき「一生懸命」は、いちばん危険
  9. 1% Problem-finding, 99% Solution-making
    • 「できない」から「できる」をつくる
  10. Go Brave. No Fear. No Regrets
    • 世界を変えるのは、大胆で勇気ある挑戦
  11. Enjoy the Challenges
    • ワクワクしなければ、仕事じゃない

『8. Work Intensely and Be Focused』は、最初の段階で何が問題なのかの着目点を誤ると、それについていくら考えたとしても正解にはたどり着けないということを戒めているようです。


論点思考

⇧  上記の書籍がオススメだそうです。

で、読んでみたのですが、確かに、初めの課題の方向性が定まってないと危ういというのは痛感するところですかね...ただし、論点は進化することもあると、臨機応変な対応も求められるようです。

 

『9. 1% Problem-finding, 99% Solution-making』については、できない理由(言い訳)を探すのは時間の無駄なので、できるようにするために全力を尽くすべきだと、という内容らしいです。

あとは、技術者に大切なことは、

f:id:ts0818:20190120125319p:plain

⇧  ということらしく、

https://www.kyocera.co.jp/inamori/philosophy/philosophy03.html

⇧  京セラの創業者の稲森さんの言葉にインスパイアされたと仰ていました。

やべぇ~、どれも持ってないっす(涙)。

 

というわけで、 早々にやる気を根こそぎ持っていかれましたが、ZDD(Zero-suppressed Binary Decision Diagram)に、レッツ~トライ。

 

ZDD(Zero-suppressed Binary Decision Diagram)とは?

Wikipediaさ~ん!

zero-suppressed decision diagram (ZSDD or ZDD) is a type of binary decision diagram (BDD) based on a new reduction rule, devised by Shin-ichi Minatoin 1993. This data structure brings unique and compact representation of sets, often appearing in combinatorial problems. With a modified reduction rule in node elimination, a ZDD distinguishes itself from a BDD by ensuring the canonicity of the representation of the sets. Canonical means that, under certain conditions, an object has only one representation of this kind. Whereas the node in BDDs is removed from the decision tree if both its edges point to the same node, the node in ZDDs is removed if its positive edge points to the constant node 0. The modifications in reduction rule especially improve performance when dealing with sparse sets.

Zero-suppressed decision diagram - Wikipedia

⇧  湊 真一さんという北海道大学の先生が発明したアルゴリズムらしい、なのに日本語のWiki無いのが謎すぎる、というか残念すぎる...。

 

http://www.orsj.or.jp/archive2/or57-11/or57_11_597.pdf

⇧  PDFの資料として公開してくれているようです。

BDD(Binary Decision Diagram; 二分決定グラフ)は,グラフ構造による論理関数の表現である。

http://www.orsj.or.jp/archive2/or57-11/or57_11_597.pdf

んで、BDDについては、

http://www.ele.kochi-tech.ac.jp/tacibana/2018/DA/Handsout4-4.pdf

⇧  このへんの資料に大まかなイメージが載ってますかね。

 

http://www.ieice-hbkb.org/files/01/01gun_08hen_01.pdf

⇧  『論理関数 == ブール関数 == スイッチング関数』ってな具合であると。

論理演算子の記法は一定しておらず,文献により違い が見られる。

算術演算子との混同を避けるために,論理積を ∧, 論理和を ∨ とする記法も しばしば用いられている。否定演算も,∼ x や x 0 のように記述する場合もある。

上記の論理演算子と括弧 ( ),及び,任意の個数の論理変数(switching variable)と,必要 に応じて定数値 0,1 を組み合わせて計算手順を表した式を,論理式(switching expression) またはブール式(Boolean expression)と呼ぶ。

http://www.ieice-hbkb.org/files/01/01gun_08hen_01.pdf

⇧  論理演算子の記法は一致してないらしい...

 

BDD(Binary Decision Diagram; 二分決定グラフ)の改良系が、ZDD(Zero-suppressed Binary Decision Diagram; ゼロサプレス型二分決定グラフ)ってものらしい。

f:id:ts0818:20190120224944p:plain

BDD を構築する際に,まず二分決定木を生成してからそれを圧縮したのでは,常に指数関数的な時間と記憶量を要するため現実的でない.これに対して,BDD 同士の二項論理演算(AND, OR など)の結果を表す BDDを直接生成するアルゴリズム(通称 Apply 演算)が Bryant により提案され,以降,BDD が広く用いられるようになった.Apply 演算は,圧縮されたデータ
量にほぼ比例する計算時間で実行できる。

つまり,圧縮データを元に戻すことなく,圧縮したままで高速に演算処理できるという優れた特長がある.ほとんどのBDD の応用では,この Apply 演算を繰り返し適用して所望の BDD を構築している。

http://www.orsj.or.jp/archive2/or57-11/or57_11_597.pdf

 ⇧  バイナリーということで、「0」「1」の2進数で表せるということで、すべての要素への経路は2分岐。だったら、経路を圧縮しちゃえってのが、BDD。その圧縮方法をもっと圧縮したのが、ZDDってことらしい。

LCM-ZDD 法による高速化

計算結果の頻出アイテム集合を、メモリ上に圧縮してZDDで表現し、そのポインタのみを返す。

http://ibisml.org/ibis2018/files/2018/11/minato.pdf

⇧  ZDDを高速化できてしまうと...想像を絶する世界ですな。

 

qiita.com

qiita.com

⇧   湊さんの研究生の方が、Qiitaで記事を上げてくれていました。

 

ちなみに、組み合わせの話で、「組み合わせ爆発」って言葉があるそうなのですが、

www.miraikan.jst.go.jp

⇧  日本科学未来館の常設展示『フカシギの数え方』 というものがあり、そのアニメが壮大であると。

lne.st

nlab.itmedia.co.jp

⇧  「『フカシギの数え方』 おねえさんといっしょ! みんなで数えてみよう!」って動画として、かなり有名らしい...全探索の恐怖が伝わってくる内容となっているようです。

www.youtube.com

Made in JAPAN の偉大さが滲み出ていますかね。思わず、2回見てしまいました...また見てしまうかも...。

な、なんと、続編の動画が出ていたようです。ズバリ、タイトルは「数え上げおねえさんを救え」...ド直球!真っ直ぐ過ぎる!この思いは届きますね!

internet.watch.impress.co.jp

www.youtube.com

Pythonの「Graphillion」っていうモジュール(ZDDを用いた超高速グラフ列挙のツールボックス)が紹介されているのですが、なんと、その元となるプログラムを作り出したのが、湊さんの研究チームらしいです。

この時、実際に作ったプログラムは「Graphillion」という名前で、オープンソースソフトウェアとして公開しております。〇〇phillionというのは、「million」や「billion」のように非常に大きな数のイメージなので、何十億個ものグラフを扱えるという意味を込めて命名しました。

http://www.kecl.ntt.co.jp/openhouse/2014/talk/invite2/talk_minato.pdf

⇧  同じところを2度通ることはできない、「self-avoiding walk」っていう問題があるらしく、それの最短距離だけという制約を無くすと、途端に難しくなる問題に対しての取り組みとして生まれたプログラムらしく、2013年時点で、26 × 26 の経路の数を解きギネスになっているそうな。

 

 

というわけで、実践

実際に使ってみようということで、

qiita.com

⇧  上記サイト様を参考にさせていただきました。

 

さっそく、

github.com

⇧  上記サイト様の手順を見て、インストールしていきたいのですが、その前にPython環境を整える必要があると。

Python環境 なんですが、Windowsの場合は、 

ts0818.hatenablog.com

⇧  手前味噌になりますが、こちら で環境構築できるかと。(Visual Studio CodePythonに関する設定は、他サイト様を参考していただければと...)

今回は関係ないのですが、Python 3.7 系に対応されていなかったTensorFlow が、

qiita.com

⇧  TensorFlow r1.13.1 から、Python 3.7 系に対応されたらしいですね。

というか、

qiita.com

⇧  TensorFlow 2.0 系が出るらしい...

すみません、脱線しました。

Python環境が整いましたら、

f:id:ts0818:20190309154917p:plain

⇧  今回のPythonプロジェクト用のフォルダを適当に作成。

で、Visual Studio Code を起動し、「フォルダーを開く(F)...」。

f:id:ts0818:20190309155143p:plain

さきほど作成したフォルダを選択し、「フォルダーの選択」で。

f:id:ts0818:20190309155330p:plain

開いたら、「ターミナル」が出てない場合は、「表示(V)」>「ターミナル」で。

f:id:ts0818:20190309160204p:plain

そしたら、Pythonプロジェクト用のフォルダに、pyhton仮想環境を作成。python.exe までのパスはご自分のお使いのものに合わしてください。

pipenv --python [python.exeを格納してるフォルダ]\python.exe     

f:id:ts0818:20190309160424p:plain

「.venv」ってフォルダにpython仮想環境の操作に必要なスクリプトとかできます。

f:id:ts0818:20190309160659p:plain

続いて、Visual Studio CodePythonの動作環境を準備します。

「ファイル」>「基本設定」>「設定」で、「ユーザー設定」を選択し、「Python: Python Path」に、python.exe までのパスを通す必要があるそうな...前までやってた覚えないけど。パスの区切りは、「/」にするそうです。

f:id:ts0818:20190309163113p:plain

f:id:ts0818:20190309170040p:plain

ワークスペースの設定」のほうも同じようにする必要があるそうです。

f:id:ts0818:20190309170020p:plain
⇧  そうすると、「.vscode」ってフォルダができ、「setting.json」ってファイルが作成されます。

f:id:ts0818:20190309170239p:plain

ここからデバッグ用の準備。

「F1」キーをクリックし、コマンドパレットを表示し、「task」と入力し、「タスクの構成」を選択。

f:id:ts0818:20190309171557p:plain

「テンプレートからtasks.json を生成」で。

f:id:ts0818:20190309171743p:plain

「Others」で。

f:id:ts0818:20190309171935p:plain

「tasks.json」が作成されました。

f:id:ts0818:20190309172031p:plain

みたいな感じで、Pythonデバッグ用の設定に編集。

f:id:ts0818:20190309173257p:plain

んで、適当なpythonファイルを作成しときます。

f:id:ts0818:20190309174428p:plain をクリックで、新規ファイル作成できます。

f:id:ts0818:20190309174402p:plain

「testGraphillion.py」とかって名前でpythonファイルを作成しました。

f:id:ts0818:20190309174900p:plain

f:id:ts0818:20190309161244p:plain のアイコンをクリックし、「構成の追加...」を選択で。

f:id:ts0818:20190309161223p:plain

Pythonに関する「launch.json」が作成されます。前までのVisual Studio Codeだと、Pythonファイルがなくても、Pythonに関する「launch.json」が作成できた気がしますが...

f:id:ts0818:20190309175135p:plain

デバッグのとこで、Python関連が選択できるようになりました。

f:id:ts0818:20190309175756p:plain

f:id:ts0818:20190309175551p:plain のアイコンをクリックで、「エクスプローラー」に戻ると、「launch.json」ファイルが作成されてるのが確認できます。

f:id:ts0818:20190309175522p:plain


ようやっと準備が整いましたので、Pythonのライブラリをインストールしていきます。まずは、Pythonの仮想環境(「.venv」のこと)にログインで。

WindowsPowerShellを使ってる場合は、「.venv\Scripts\activate.ps1」ってファイルでPython仮想環境を起動、ログインできると。

f:id:ts0818:20190309180746p:plain

[Pythonの仮想環境ディレクトリ]\Scripts\activate.ps1     

f:id:ts0818:20190309181207p:plain

⇧  Visual Studio Codeのターミナルで、コマンドを実行すると、Python仮想環境にログインできました。

では、Pythonライブラリのインストール。
まずは、networkx ってライブラリのインストール。 

pip install networkx     

f:id:ts0818:20190309181614p:plain

f:id:ts0818:20190309181638p:plain


続きまして、matplotlibってライブラリのインストール。 

pip install matplotlib

f:id:ts0818:20190309181933p:plain

では、graphillionをインストール。

pip install matplotlib

f:id:ts0818:20190309182522p:plain

⇧  はい、エラー...。出た、Windows 特有問題。

⇧  Visual C++ 2015 が必要ってなってるけども、

www.microsoft.com

f:id:ts0818:20190309192948p:plain

⇧  vc_redist.x86.exe、vc_redist.x64.exe ってファイルをダウンロードして実行すれば良いらしい。

っていうか、インストールされてないか調べてみた。

f:id:ts0818:20190309192341p:plain

f:id:ts0818:20190309192702p:plain

f:id:ts0818:20190309192601p:plain

f:id:ts0818:20190309192835p:plain

Microsoft Visual C++ 2015 Redistributeable(x64)」ってのは、2つほど存在するんだけども...微妙に、バージョンのIDっぽいのが「14.0.24210」「14.0.24215」で違ってるけど

とりあえず、ダウンロードしたexeファイルを実行。

f:id:ts0818:20190309194004p:plain

f:id:ts0818:20190309194339p:plain

⇧  失敗したけど...

x86 のほうならいけるかと思いきや、

f:id:ts0818:20190309195438p:plain

f:id:ts0818:20190309195531p:plain

⇧  失敗するという...

なんか「Microsoft Visual C++ 2017 Redistributeable(x64)」のほうが先にインストールされてると、旧いバージョンのほうがインストールできないらしい...

www.xlsoft.com

⇧  上記サイト様でも同じような問題に直面なさっていたようです。

というか、「Microsoft Visual C++ 2017 Redistributeable(x64)」と「Microsoft Visual C++ 2015 Redistributeable(x64)」の共存ができなくなるのは厳しいですね。

何、そのどうしようもない仕様...Microsoft 大丈夫かいな...

っていうか、

sanuki-tech.net

⇧  Apache Httpd 2.4系とPHP 7系は、「Microsoft Visual C++ 2017 Redistributeable(x64)」が必要らしいんだが...

Microsoftの残念過ぎる仕様のせいで、

  • Microsoft Visual C++ 2017 Redistributeable(x84)-14.15.26706」「Microsoft Visual C++ 2017 Redistributeable(x64)-14.15.26706」をアンインストール
  • Microsoft Visual C++ 2015 Redistributeable(x86)-14.0.23026」「Microsoft Visual C++ 2015 Redistributeable(x64)-14.0.23026」をインストール
  • Microsoft Visual C++ 2017 Redistributeable(x84)」「Microsoft Visual C++ 2017 Redistributeable(x64)」を再インストール

ってことをしないといかんらしい... 

上手くいくことを祈るばかり。

f:id:ts0818:20190309201718p:plain

f:id:ts0818:20190309201833p:plain

f:id:ts0818:20190309201909p:plain

f:id:ts0818:20190309201944p:plain

f:id:ts0818:20190309202012p:plain

f:id:ts0818:20190309202036p:plain

32bit 版のほうもアンインストールで。

f:id:ts0818:20190309202114p:plain

f:id:ts0818:20190309202142p:plain

f:id:ts0818:20190309202213p:plain

では、「Microsoft Visual C++ 2015 Redistributeable(x86)-14.0.23026」をインストール。

f:id:ts0818:20190309202411p:plain

f:id:ts0818:20190309202440p:plain

f:id:ts0818:20190309202506p:plain

一応、「Microsoft Visual C++ 2015 Redistributeable(x64)-14.0.23026」もインストール。

f:id:ts0818:20190309202539p:plain

f:id:ts0818:20190309202614p:plain

f:id:ts0818:20190309202639p:plain

とりあえず、graphillion の再インストールを試みるも、同じエラー...graphillionの要件と合ってないやんけ~!

なんか、

github.com

⇧  Visual Studio 2015 で、インストール時にオプションで、C++コンパイラー(cl.exe)をインストールしてないとマズイらしい...っていうか、Visual Studio 2015も結局必要になるという...自分はインストールしてましたが...

本来なら、「C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\cl.exe」ってのがいないといけないらしい、無いけど...

f:id:ts0818:20190309224446p:plain

 

っていうか、graphillion の必要要件に追記しといて欲しいっすわ...

 

qiita.com

⇧  上記サイト様を参考に、Visual Studio 2015で機能追加。

コントロールパネルから、

f:id:ts0818:20190309225037p:plain

「プログラム」>「プログラムと機能」から、「Microsoft Visual Studio Community 2015 with Updates」を右クリックし、「変更」。

f:id:ts0818:20190309224922p:plain

f:id:ts0818:20190309225237p:plain

「変更(M)」で。

f:id:ts0818:20190309225322p:plain

で、どれを追加するかですが、

f:id:ts0818:20190309225501p:plain

stackoverflow.com

⇧  「Visual C++ 2015 用の共通ツール」は必須っぽいですね。Visual StudioPythonを使うか分からないけど、一応、「Python Tools for Visual Studio」ってのもチェックしました。「次へ(N)」。

f:id:ts0818:20190309225728p:plain

「更新」で。

f:id:ts0818:20190309225820p:plain

インストールが始まります。

f:id:ts0818:20190309225845p:plain

f:id:ts0818:20190309225915p:plain

f:id:ts0818:20190309230010p:plain

f:id:ts0818:20190309230410p:plain

「閉じる」で。

f:id:ts0818:20190309231016p:plain

「cl.exe」とかもインストールされましたね。

f:id:ts0818:20190309231405p:plain

エラーが変わった、けどエラー...。

arakan-pgm-ai.hatenablog.com

⇧  上記サイト様によりますと、「VS2015 x64 x86 Cross Tools」から、pip install で行けるよう。もしくは、「C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin」までのパスを環境変数に追加すれば良いのかしら?

今回は、「VS2015 x64 x86 Cross Tools」でいってみましょう。

f:id:ts0818:20190309232238p:plain

インストールされたようです。

f:id:ts0818:20190309233401p:plain

どこに?

qiita.com

⇧  上記サイト様によりますと、pip show [パッケージ名] でいけるそう。

f:id:ts0818:20190309234532p:plain

⇧  インストール先、「C:\Python37\Lib\site-packages」って...これで大丈夫なんか?

あんまり、宜しくないらしい。

qiita.com

blog.chocolapod.net

⇧  上記サイト様によりますと、Pythonプロジェクトが複数ある場合に、グローバルインストールされたライブラリは、すべてのPythonプロジェクトから参照されてしまう、そのため、プロジェクトごとに別バージョンを使うとかができない。

というわけで、一旦、アンインストールで。pipでアンインストールできないフォルダなんかは、手動で削除するしか無いかと...pipも中途半端っすな。

f:id:ts0818:20190310095517p:plain

で、インストール先に、PythonプロジェクトのPython仮想環境を指定してgraphillionをインストールで。 

f:id:ts0818:20190310102029p:plain

なんか、いろいろインストールされました。

f:id:ts0818:20190310102515p:plain

んで、「graphillionTest.py」のソースコードを編集して、

# 必要なモジュールのインポート
from graphillion import GraphSet
import graphillion.tutorial as tl

# グリッドのサイズを指定
universe = tl.grid(2, 2)
GraphSet.set_universe(universe)
tl.draw(universe)

start = 1 # スタート位置
goal = 9 # ゴールの位置
paths = GraphSet.paths(start, goal)
len(paths)    

実行してみたところ(「graphillionTest.py」のエディタ上に開かれたファイルの上で右クリックし、「ターミナルでPython ファイルを実行」)、

f:id:ts0818:20190310105712p:plain

モジュールが見つからんと...

f:id:ts0818:20190310105938p:plain

「graphillionTest.py」の配置場所が駄目でした...

f:id:ts0818:20190310110120p:plain

「.venv」の中に移動で。移動すると、LinterのPylintがインストールされてないって出るので、「Install」で。

f:id:ts0818:20190310110328p:plain

f:id:ts0818:20190310110607p:plain

f:id:ts0818:20190310110647p:plain

f:id:ts0818:20190310110737p:plain

⇧ Pylintがインストールされたようです。
「"C:\Users\Toshinobu\Desktop\GraphillionTest\.venv\testGraphillion.py"」に配置されました。
f:id:ts0818:20190310110454p:plain

でも、エラーは変わらず、何でやねん!

Pythonプログラマがしばしば遭遇する問題に、import したいモジュールやパッケージが見つからないというものがあります。

この問題の解決の第一歩は、Pythonインタプリタがインポートするモジュールやパッケージを探す場所は sys.path という変数に格納されているということを理解することです。

Pythonのimportについて | Xoxzoの公式ブログ

blog.xoxzo.com

⇧  上記サイト様を参考に、sys.path を調べてみた。

import sys
print(sys.path)    

で実行してみた。

[
 'c:\\Users\\Toshinobu\\Desktop\\GraphillionTest\\.venv', 
 'C:\\Python37\\python37.zip', 
 'C:\\Python37\\DLLs', 
 'C:\\Python37\\lib', 
 'C:\\Python37', 
 'C:\\Users\\Toshinobu\\AppData\\Roaming\\Python\\Python37\\site-packages', 
 'C:\\Python37\\lib\\site-packages'
 ] 

ものの見事に、「C:\Users\Toshinobu\Desktop\GraphillionTest\.venv\Lib\site-packages」は無視されとるけど...

stackoverflow.com

⇧  上記サイト様を参考に、sys.pathに追加。 

import sys
sys.path.append('C:/Users/Toshinobu/Desktop/GraphillionTest/.venv/Lib/site-packages')
    
# 必要なモジュールのインポート
from graphillion import GraphSet
import graphillion.tutorial as tl

# グリッドのサイズを指定
universe = tl.grid(2, 2)
GraphSet.set_universe(universe)
tl.draw(universe)

start = 1 # スタート位置
goal = 9 # ゴールの位置
paths = GraphSet.paths(start, goal)
len(paths)
print(len(paths))

で実行。起動はしたんだけど、

f:id:ts0818:20190310205530p:plain

Figure1ってダイアログの描画が進まない...バグ?ダイアログ閉じると経路のパターンの総数結果は表示されるけども。

f:id:ts0818:20190310212311p:plain

描画は無いものと考えて、で、「『フカシギの数え方』 おねえさんといっしょ! みんなで数えてみよう!」で、25万年かかってた計算。

import sys
sys.path.append('C:/Users/Toshinobu/Desktop/GraphillionTest/.venv/Lib/site-packages')
    
# 必要なモジュールのインポート
from graphillion import GraphSet
import graphillion.tutorial as tl

# グリッドのサイズを指定
universe = tl.grid(10, 10)
GraphSet.set_universe(universe)
tl.draw(universe)

start = 1 # スタート位置
goal = 121 # ゴールの位置
paths = GraphSet.paths(start, goal)
#len(paths)
print(paths.len())

相変わらず描画は動かないけど。

f:id:ts0818:20190310214725p:plain

一瞬で結果が出る、ああ無情...。 「1𥝱(じょ)  5678 (がい)5803(けい、きょう)0464(ちょう)7500(おく)1321(まん) 4100」通りですね。

f:id:ts0818:20190310214907p:plain

描画は上手く動かないみたいだけど、計算できたということで。
 

 

Microsoft Visual C++ 2017 Redistributeable(x64)」はどのバージョンIDでいけば?ってとこですかね。

とりあえず、ダウンロードしてみました。前のが「14.15.26706」で、今回が「14.16.27027」って...むっちゃバージョンが上がるけど大丈夫かいな...

f:id:ts0818:20190309204430p:plain

f:id:ts0818:20190309204520p:plain

まぁ、行くしか無いかと...

f:id:ts0818:20190309204751p:plain

f:id:ts0818:20190309204843p:plain

f:id:ts0818:20190309204907p:plain

f:id:ts0818:20190309204939p:plain

f:id:ts0818:20190309205009p:plain

「アプリと機能」の表示では、2017に上書きされて2015が消えてしまうようですね...

f:id:ts0818:20190310220211p:plain

Python環境についても、Windowsは向いてない感じですかね... 

昨日、今日と、貴重な時間がまた奪われたという...本当に、Windows はいろいろ中途半端な気がしますかね、素人なんでそう思うだけかもしれませんが...。

モヤモヤが残ったところで、今回はこのへんで。