VSCodeとPython環境連携初挑戦(日経ソフト2021年1月号を読んで)

日経ソフトウェア 2021.01 Pythonユーザのための VSCode活用術
を読みながらお勉強。

      • -

仮想環境上(VirtualBox)に用意したまっさらな Windows 10 64bit上にて。


(1)VSCodeインストール
https://code.visualstudio.com/Download#

(2)Ancondaインストール
https://www.anaconda.com/products/individual/download-success

(3)仮想環境の作成
Anaconda Navigator の 左ペイン「Environments」から [Create]
名前を 「vscode」として作成。



(4)作った仮想環境にライブラリをインストール
作った vscode を選択して、まず、その右側上部にある「Update index...」。
右ペインのドロップダウンを「Not installed」に変更して、「plotly」を選択してApply。
同じように、notebook と seaborn もインストール(検索すると便利)。
これらを入れる必要があるのは、今回、base(root)とは別に新たに vscodeという仮想環境を作ったから。こちらはサラの状態なので入っていない。

(5)VSCodeの起動と日本語化
Anaconda Navigator の Home-VS Code で [Launch]。
(画面上部の Application on [xxxx]が 今つくった vscode になっていることを確認してから)

英語モードになっていたので日本語モードにする。
View-Command Pallete を選択して、Install additional language。 Japanese
Language をインストール。
指示に従い VSCodeをリスタート

(6)VSCode拡張機能をインストール
VSCode画面左部「拡張機能」から、Pylance を検索してインストール。
そのほか以下のものも。
Rainbow CSV
Excel Viewer
SandDance for VSCode

(7)ぐりぐり遊んでみる
csvがカラフルになってちょっと見やすくなったり、
SandDanceで lng-lat 値をグラフ上にプロットしたり。
「Z-orderを指定して高さのあるグラフにしてみましょう」という説明があったが、何故か Z-orderがdisableで変更できず。


vscodeとjupyterの連携のお試し
コマンドパレットから Python: Create New Blank Jupyter Notebook
画面左下のPythonバージョンや環境が出ているところをクリックして(今回は) vscode:conda のものを選択
セルと呼ぶらしき▽のところにコードを入れていって実行できる模様。データを様々にグラフィカルに見せる仕組みがあって面白い。

読了:CodeZine「Flutterとは何か?」

 Flutter という言葉をまったく初めて聞いた身としては、他の開発環境との比較も含めて非常にわかりやすく、ありがたかった。スマホアプリを久々に作ろうと思ったものの、開発環境(言語)をどれを選んで良いかまったく浦島で、この機会に
Flutter 触ってみようという気分になった。
 第2回以降にも期待。

 個人的には、AndroidiPhone
の両方に向けたツールを作れるよという話よりは、とりあえず自分で作って動くのを楽しめるところに辿り着きたいという思いから、Android向きだけを意識した指向に関心があります。


CodeZine: Flutterで始めるモバイルアプリ開発 第1回
Flutterとは何か? 使うメリットや特徴を理解する
https://codezine.jp/article/detail/12718

Android を VirtualBox にインストールして起動させる方法

android-x86_64-9.0-r2.iso を VirtualBox上にインストール。

起動すると、console:/ # のプロンプトで止まる(操作はできるけど、私がやりたいのは linux コンソールの操作じゃなくて
AndroidGUIだ!)。

以下のURLを参考に設定
https://android.stackexchange.com/questions/144535/android-x86-marshmallow-not-booting-on-virtualbox-and-vmware-workstation/169684#169684

要約

  • ブート時の選択(GRUB)で、「(Debug mode)」となっているやつを選択して起動(起動後にプロンプトが出てこないので、暫く待って、あれ?と思ったら、enterキーを押してみるとプロンプトが出てくる)
  • 以下のコマンドを順次。

# mount -o remount,rw /mnt
# cd /mnt/grub
# vi menu.lst

  • 編集内容は以下。
    • title からはじまるひとつのブロック(3行ひと組)のうち一番最初のブロックをコピーしてもう1ブロック追加。
    • kernel と書かれた行の最後に vga=834 nomodeset xforcevesa を追加
    • title 行の最後にも何か括弧書きでも追加して、見分けがつくように
  • 以下コマンドでmount解除してリブート

# cd /
# umount /mnt
# reboot -f

SDシェル芸人連載からのお勉強

Software Design 2019/07から(問題1)

mkdir shellgei
cd shellgei

wget https://raw.githubusercontent.com/ryuichiueda/ShellGeiData/master/sd201907/user1
wget https://raw.githubusercontent.com/ryuichiueda/ShellGeiData/master/sd201907/user2
wget https://raw.githubusercontent.com/ryuichiueda/ShellGeiData/master/sd201907/user3
wget https://raw.githubusercontent.com/ryuichiueda/ShellGeiData/master/sd201907/user4

awk '{print $0, FILENAME}' user* | sort | \
awk '(pre!=$1){print "";printf $0}(pre==$1){printf " "$2}{pre=$1}' |\
awk 'NF>3'
sort user* | uniq -c | awk '($1>=3){print $2}' | \
grep -f - user* | awk -F":" '{a[$2]=a[$2]" "$1}END{for(k in a){print k""a[k]}}'


これもおもしろい

$ awk '{print $0, "第"FNR"候補", FILENAME}' user*| sort -k1 -k2n |
datamash -s crosstab 2,1 unique 3 -t ' '|sed '1s/^/-/' | column -t

学んだこと

  • awk でセパレータを指定するのって -F":" のように指定できるのか。今まで(FS=":")みたいに書いていた。
  • sort ってそういえばいきなりファイル名を指定してもいいんだね。何故か必ず cat してから、パイプで渡すのがクセになっていた。
  • awk でのセパレータで分けられた列数を見るの、"awk 'NF>3'"。知らなかった。
  • パイプで渡された結果(一覧)を入力ファイルとして受け取る "awk -f -"。いつもこれがわからなくて、遠回りしていた。

問題4

* A B
X 4 2
Y 3 1
* A B C D
X 1 2 3 4
Y 12 34 56 78
Z 3 1 4 1
$ awk 'FNR==1{$1="";h=$0}FNR!=1{print FILENAME, $0,h,NF-1}' data_* |\
 awk '{for(i=NF-$NF;i<NF;i++) print $1, $2, $i, $(i-$NF)}'

学んだこと

  • とりあえず、awkで「1行目に対して」処理したい時は FNR==1 のブロックで扱えば良いらいしことは分かった
  • そのブロックで保持した値(h)をその後の処理で使えるのかー。
  • NF がその行の列数なので、$NF で最終列の値 が取れる。へぇぇ

PygameZeroのお勉強(4)

日経ソフトウェア2020年5月号付録を見ながらお勉強

「4日目」月着陸ゲーム

 まず「3日目」の画像加工プログラムが動かなかった件。
コマンドプロンプトより

> mygame03.py

で実行していたらエラーとなったが、

> python mygame03.py

とすれば期待通りに動作した。当方環境には、いくつかの pythonが入っているようで(Anacondaのものと
VSのものは認識している)、たぶん Anaconda とは別の
Pythonが起動されたものと思われるが、今は「動いた!おっけー!」で進めることにする。


・例によって、使用する画像の選定。今回も「この画像を使うと良いよ」と記事が教えてくれているので、ダウンロードして、↑で解決したサイズ変換プログラムを使って変換。この、サイズ決めにも経験が必要(たぶん画面全体のサイズとのバランスを考えて決めたと予想)だと思うので、実際に一人で作るときにはこの部分だけで平気で1時間とか使いそう。

・今回、一気にプログラムらしくなってきた。ゲーム中とそれ以外のステータス管理とかリアルタイムでキーボード入力を受け付けて動かすとか

・そういえば、ロケットの炎の描画は必ずロケット画像よりもZ-orderが下のように見えるけど、そんな指定は指定ない(駄洒落)な。

・このプログラム、draw()関数が呼ばれる度に全体を描画しているけど、全然速度や見え方(ちらつき)に問題がないなぁ。でも、もっと良い書き方がありそうな気がして、少し気持ち悪い。


そして今回、2日目の疑問が解消しました。関数内でグローバル変数の値を参照するときには、global
を使うのですか。2日目のプログラムを少しいじって、左右往復するようにしてみたもの。

import pgzrun

WIDTH=400
HEIGHT=200

p=1

alien = Actor('p3_walk01' , midleft=(0,60))

def draw():
  screen.clear()
  alien.draw()

def update():
  global p
  alien.x += p
  if alien.midright[0]>WIDTH or alien.midleft[0]<0:
    p *= -1
    alien.y += 5

pgzrun.go()

PygameZeroのお勉強(3)

日経ソフトウェア2020年5月号付録を見ながらお勉強

「3日目」迷路ゲーム(背景描画とキャラクタ操作)

・画像ファイルの用意。この過程が私はすごく苦手。できあがりをイメージして部品を選ぶことができないんです。今回は素材集から、記事で指定されたものをコピーして、リネーム(例によって
images フォルダの下に小文字で←大文字不可)

・画像加工ライブラリ、pip install Pillow しようとしたら、既に入っていた模様。以前入れたのかな。Anacondaに含まれていたのかな。
→しかし、画像変換プログラム(下記)を実行したところ、PILがないとエラー。

from PIL import Image

img = Image.open('./images/alien.png')
img_resized = img.resize( (70,70) )
img_resized.save('./images/player.png')

Anaconda を使っている時に pip ってすごく相性が悪いらしい(本来は conda
コマンドでパッケージ管理すべき)。軽く調べたけど解決には至らず、ここは単に
70x70の画像に変換したいだけだったので、boxItemAlt.png を player.pngにして続行することにした。

ちなみにライブラリ追加時のエラー:

ERROR conda.core.link:_execute_actions(337): An error occurred while
installing package 'anaconda::tqdm-4.44.1-py_0'.
CondaError: Cannot link a source that does not exist.
C:\usr\local\Anaconda3\Scripts\conda.exe
Running `conda clean --packages` may resolve your problem.
Attempting to roll back.


・リストとタプル
 リスト:a= [xxx,xxx,xxx] 変更可
 タプル:b=(xxx,xxx,xxx) 変更不可

・PygameZeroドキュメント:イベントのフック
https://pygame-zero.readthedocs.io/ja/latest/hooks.html


イベントハンドラ 「def on_key_down(key):」
・if key == keys.UP: のように押下キーにより条件分岐可能
・上端、右辺、下辺、左辺それぞれに上右下左キー押下時は何もしない判断をした上で、それ以外の時に、自機のそれぞれのlocationに相当する位置(xまたはyに1を加減した座標)にブロックがある(mapdata[]の当該座標が1である)場合には移動させない。全体を再描画。


画面上の迷路内を、キー操作に応じて自機が動くだけなのだけど、すごく楽しいですね。こういう単純に楽しい!という感覚は久しぶりかも。
 一方で、そこそこ業界歴は長いので、この4方向への条件分岐の処理記述面倒くさく感じたりもしています。パターン化してまとめられそうだな、と思ったり。(たぶん条件分岐内では
新しい[x,y]の増減値だけを求めて、計算は条件分岐抜けたところでやる、とかしたいかも。・・・いやそう簡単でもないな。まぁいいや。


今回は、(自分が記事指定の環境と異なる Anacondaを使っていたために)環境の差異で苦労。結構時間がかかってしまった(しかも根本的には解決していない)。

PygameZeroのお勉強(2)

日経ソフトウェア2020年5月号付録を見ながらお勉強

「2日目」キャラを動かしてみる

昨日の、

alien = Actor('alien01_2' , center=(100,100))

center 以外に、
top, mid, bottom と left, right の組み合わせ(topleft, midrightのように)と、
midtop, center, midbottom がある。


defとかインデントとか命名規則とかは、知っていたり、まぁそうだろうなと思うことだったので、OK.

draw() 関数をどこからも明示的に呼び出していないけれども、pgzrun.go()
の中の処理で、draw()を探して、あれば実行してくれる、という感じなのかな。そういう「pygame zeroで決められた
名前固定の関数」にどのようなものがあるのか分かるといいな。今後のレッスンで出てくるのかな。
(とりあえず draw() と update() があることは分かった)

 キャラクタを左から右に動かすサンプル。

import pgzrun

WIDTH=400
HEIGHT=200
p=1

alien = Actor('p3_walk01' , midright=(0,100))

def draw():
  screen.clear()
  alien.draw()

def update():
  alien.x += p
  #if (alien.x>=WIDTH):
  #  p *= -1

pgzrun.go()

コメントアウトしてある部分を記述して、右端に着いたら反転を試みたが、以下のエラー。コメント部分を無効にしておけば p
自体は見えているようなので、なぜ計算式が含まれるとエラーになるのかは、少し考えたが分からずじまい。まぁいいや。今は。

  File "mygame02.py.txt", line 16, in update
    alien.x += p
UnboundLocalError: local variable 'p' referenced before assignment

PygameZeroのお勉強(1)

日経ソフトウェア2020年5月号付録を見ながらお勉強

「1日目」概要と環境作成

・(私は)Anacondaをインストールした環境にて
・D:\> pip install pgzero
・作業フォルダを決める(study\python\にした)
・その下に images フォルダを作り、画像(png)ファイルを配置(フォルダ名は pygame zero が決めているものなのでこの名前で)
・作業フォルダに以下の mygame01.py ファイルを作成

import pgzrun

WIDTH=200
HEIGHT=200

alien = Actor('alien01_2' , center=(100,100))

def draw():
  screen.clear()
  alien.draw()

pgzrun.go()

※ alien01_2 の部分は、imagesの下にある画像ファイル名から拡張子を除いたもの

・D:\study\python> python mygame01.py を実行すると画像が表示される

今日はここまで。

Office365 のExcelでぬるぬるをやめる

最近のExcelでは、セル移動時にぬるぬると表示されて、気持ち悪い。
気持ち悪いだけでなく、操作がワンテンポずつ遅れている感覚で、やっぱり気持ち悪い(結局気持ち悪いw)

古い Office の場合は、Windowsの設定で「視覚効果」を緩くすることでぬるぬるをやめられるようだが、
Office 365 のExcelの場合は、

ファイル - オプション - 簡単操作
の中から、
「操作をアニメーションで表示する」のチェックマークをはずせば、
脱ぬるぬるでハッピー。

*[android][linux]Androidでターミナルとウィンドウを使用する方法

[android][linux]Androidでターミナルとウィンドウを使用する方法

 Androidlinuxコマンドラインを使えるターミナルを入れる方法のメモ。
ついでに、Windowシステムも。



Android に termux をインストール(Playストアから。無料)
Androidvnc viewer をインストール(Playストアから。無料)

termuxを起動して:
$ apt update
$ apt upgrade

$ pkg install openssh
$ pkg install sl
$ plg install termux-api

$ termux-setup-storage しておくと、Android内部のストレージにアクセス可能になる


$ pkg install x11-repo
$ pkg install tigervnc

$ vncserver -list で一覧
$ vncserver -kill :1


$ pkg install aterm
$ pkg install xorg-twm
してから、vncserverを再起動(killしてから起動)


vnc viewerを起動:
127.0.0.1:5901 へ接続(nameは好きなものを)