技術資料

以前のバージョンはこちら
Blocly技術資料(2023/10以前)バックアップ

目次 

1. 目標 

ビジュアルプログラミングによるデータ処理を行う。Blocklyというオープンソースのビジュアルプログラミングを用いる。使用するプログラミング言語は主にJavascriptである。

2. 環境構築及び実行 

必要なもの 

Windows SubSystem for Linux2(WSL2)(Linux、UNIXでも可) 

とりあえず、WSL2のインストールから始める。以下のサイト見ながらでできる。 https://docs.microsoft.com/ja-jp/windows/wsl/install-win10

一応ここにその内容を記す。まず、管理者権限でPowerShellを開き、次のコマンドを入力する。

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

次に、同じくpowershellでwindowsのどのシステムを使用しているか次のコマンドで確認する。

systeminfo | Select-String  "システムの種類"
→ x64 や ARM64 などが表示される

コマンドプロンプトの場合はこれ
systeminfo | find "システムの種類"

次にwindowsのバージョンとビルド番号を確認する。
Windows ロゴ キー + R キー を押して、「 winver 」と入力し、 [OK] を選択する。 (または、Windows コマンド プロンプトで ver コマンドを入力)。

ver_build.png

上図が出るので、適切なバージョンを満たしているか確認する

WSL 2 をインストールする前に、" 仮想マシン プラットフォーム " オプション機能を有効にする必要がある。
管理者として PowerShell を開き、以下を実行する。

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

PCを再起動して WSL のインストールを完了し、WSL 2 に更新する。

次にWSL2Linuxカーネル更新プログラムパッケージをダウンロードする。システムがx64の場合はx64、ARM64の場合はARM64をクリックする。

x64

ARM64

ダウンロード後、ダウンロードしたファイルを実行する。

次に、次のコマンドで、新しい Linux ディストリビューションをインストールする際の既定のバージョンとして WSL 2 を設定する。

wsl --set-default-version 2

次に、Ubuntu 20.04 LTSをMicrosoft Storeからインストールする。 下のリンクに行って入手を選択する。

Ubuntu 20.04 LTS

複数のデバイスで使うか聞かれたら必要ないと答える。

その後、起動し、ユーザー名とパスワードを設定する。もちろん、どちらも覚えるか記録しておく。

WSL2のBlocklyのための環境構築 

ここから、Ubuntuで作業する。Ubuntuで次のコマンドを実行する。

sudo apt update
sudo apt -yV upgrade

WSL2を再起動する(Ubuntuを閉じて再度開く)。再起動後、次のコマンドを実行する。

sudo apt install apache2
apache2 -v

WSL2へのpyenv(python)のインストール 

以下のコマンドはpythonを使用するために必要な機能をインストールしている。

sudo apt install -y build-essential libffi-dev zlib1g-dev liblzma-dev libbz2-dev libreadline-dev libsqlite3-dev git net-tools libssl-dev

ここでWSL2(Ubuntu)を再起動。 次に以下のコマンドでpyenv本体のダウンロードとインストールをする。

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

次に、以下のコマンドで.bashrcの更新をする。

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc

WSL2(Ubuntu)を再起動。再起動後に次へ

以下のコマンドでpyenvがインストールできたかを確認(pyenvはLinuxにおいて、Pythonの実行環境を管理するツール。つまりいろんなバージョンのpythonを管理する有能)

pyenv -v 

以下のコマンドでpythonのインストール

pyenv install 3.8.5 # 例えば,version 3.8.5
pyenv versions # インストール済みのpyenvのバージョンを確認できる
pyenv global 3.8.5

以下必要なライブラリのインストール

   python -m pip install pyocr matplotlib pydotplus pulp pandas scikit-learn graphviz opencv-python docopt
   sudo apt install tesseract-ocr libtesseract-dev tesseract-ocr-jpn
   sudo apt-get dist-upgrade
   sudo apt-get install build-essential
   sudo apt-get update
   sudo apt-get install graphviz mecab libmecab-dev mecab-ipadic-utf8 
   cd ~
   sudo apt install swig
   →エラー(11)
   sudo apt install python3-pip
   sudo pip3 install mecab-python3
   sudo apt install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

https://www.engineer-log.com/entry/2019/10/31/tesseract5-install

下記のライブラリは必要に応じてインストールする(専門ゼミでは飛ばす)

エラー対応集 

(11)「E: Unable to locate package swig」の表示で,swigのインストールができない

WSL2内でのBlockly環境構築 

ダウンロードすべきファイルを以下のzipファイルにまとめたので、これをダウンロードし任意のフォルダに置く。

エクスプローラーのパスのところで、\\wsl$と入力しEnter。アクセス許可がないと言われたら許可する。

「/var/www/html」内に先ほどダウンロードしたhtmlの中身を、「/usr/lib/cgi-bin」内にcgi-binの中身を入れる。

htmlにはサイトを構成するファイル、cgi-binにはpythonで動かすデータ処理に関するファイルが入っている

次に以下のchmodコマンドでファイルのアクセス権限を変更する

sudo chmod 755 /usr/lib/cgi-bin
sudo chmod 755 /usr/lib/cgi-bin/kaiki*.cgi
sudo chmod 755 /var/www/html

例題では「回帰分析ブロック」を動かすので、以下のコマンドで「kaiki~.cgi」の編集画面を開く

「Ctrl+X」→「y」→「Enter」で保存する。

次のコマンドでcgiモジュールを有効にできる。これはcgi-binに入っているファイルを実行するためのmodを有効にしている。

sudo a2enmod cgid

次に、CSVファイル入れるところ作る。

cd
mkdir kaiki
sudo chmod 777 kaiki

入れるとき拒否られたら次のコマンドをubuntuで。chmodで読み込みや書き込みを他の人からでもできるようにしている。
sudo chmod 777 /var/www/html
sudo chmod 777 /usr/lib/cgi-bin
cgi-binなかったら次のコマンド。cgi-binディレクトリを作成している
mkdir /usr/lib/cgi-bin

その後以下を実行。ファイルの権限を変えてる。755にするのは、この後のウェブ上のサイトから他のパソコンからでも使えるようにするため。(しかし書き込みはできない。これについて知りたかったらchmodについて調べて)
sudo chmod 755 /usr/lib/cgi-bin
sudo chmod 755 /usr/lib/cgi-bin/kaiki.cgi

python -m pip install pandas
python -m pip install scikit-learn

以下のコマンドでエディタ開ける。
sudo nano /usr/lib/cgi-bin/kaiki.cgi

上のコマンドで開いた後、以下の二つの部分のzetaというところを自分のUbuntuのユーザー名に変える
#!/home/zeta/.pyenv/shims/python
wine.to_csv('/home/zeta/kaiki/123456.csv', header=False, index=False)

「Ctrl+X」→「y」→「Enter」で保存する。

次のコマンドでCGIモジュールを有効にできる。これはcgi-binに入っているファイルを実行するためのmodを有効にしている。
sudo a2enmod cgid

Blocklyの実行 

次のコマンドをWSL2上で実行するとサーバーが立ち上がる。

sudo service apache2 start

自分のWSL2のIPアドレスを調べるためにWSL2上で次のコマンドを実行する。

ifconfig
ifco.PNG

WSL2のIPアドレスはeth0のinetのところに書かれているIPアドレスである。次に自分のWindowsでそのIPアドレスをGoogle Chromeに入力し移動すると、Blocklyを開くことができる。

blockly_index.png


ビジュアルプログラミングの例題(回帰分析) 

以下のデータを用いる。

kaiki_data.png
Block1.png

まず、「FILE_INPUT」から入力「CSV読み込み」ブロック、「ANALYZE→DIV1」から分析「回帰分析」ブロック(上図オレンジ)、「OUTPUT」から出力「CSV出力」ブロックを取り出す。

Block2.png

赤ブロックの「CSVファイルを選択してください」をクリックして、先ほどのcsvを入れる


Block3.png

中央の歯車をクリックし、ラベルリストに左のブロックのいずれかを入れる

単回帰or重回帰、回帰予測or回帰係数を選択したら、右上の「実行」をクリックする

3. 【課題】新たな分析ブロックの作成 

Analyze1.png

分析ブロックの作成方法 

以下2つの手順を行う

average.jsには実行ボタンを押したときの動きが定義されている。
平均値を出すブロックとconsole.logを出すブロックの定義の仕方が以下である。

blockly_average2.PNG

average_block.jsには、ブロックの見た目と表示されたときの動作が定義されている。
平均値を出すブロックとconsole.logを出すブロックの定義の仕方が以下である。

blockly_average.PNG

index.htmlにはページの構成と使うjavascriptファイルが定義されている。
toolbox.xmlにブロックを書くことによって初めて使えるようになる。

toolboxxx.PNG

4. Common Gateway Interface(CGI)プログラム(データ処理)の作成 

こちらからデータを送ってそのデータに基づいてサーバで処理を行ない、結果を返すものをCGIという。今回は、CGIプログラムをpythonで作る。pythonを使う理由は、機械学習やデータ処理の部分を書くことが簡単だからである。以下がpythonで書かれた拡張子.cgiのプログラムである。

このプログラムを実行できるようにjavascript内で記述することで実行できる。 実行すると、単回帰分析ができる。

EX.作ってほしいもの 

入出力ファイル 

今回、入力出力に使うファイルの形式が決まっているので説明する。

まず、拡張子は.csvである。そしてファイルの中身は以下のようになっている。

このファイルの入力で動作して、この形式のファイルで出力するように、pythonのデータ分析等のプログラムを作成してほしい。

pythonのCGIデータ分析プログラムのブロック 

作ってほしいものは、回帰分析などのデータ分析ができるものである。とりあえず、pythonで出来るデータ分析を調べて、 通常のpythonで動かしてみる。できるだけ、csvファイルやjsonファイルを使っているものが好ましい。

そして、次に入力出力を上記で説明したcsvファイルに対応させて動作させる。

入出力を変更して動いたら.cgiのプログラムを作成して先ほどのpythonのコードをコピーペーストする。

pythonのcgiプログラム(といかajaxを使ってPOST通信で動かすときのpythonプログラム)は以下のようなプログラムの形にする必要がある。コメントに書いてあるように動作する。filekaiki_yosoku.cgi

cgiteigi1.PNG
cgiteigi2.PNG
cgiteigi3.PNG

cgiプログラムの上に以下のようなおまじないをつける。zetaの部分を自分の名前に変える。これは、上が自分の使うプログラミング言語の実行コマンド(今回はpython)を入力している。下が、このcgiプログラムの文字コードを記述する。UTF-8が楽なのでUTF-8を推奨する。

#!/home/zeta/.pyenv/shims/python
# -*- coding: utf-8 -*-

これは、上が自分の使うプログラミング言語の実行コマンド(今回はpython)を入力している。下が、このcgiプログラムの文字コードを記述する。UTF-8が楽なのでUTF-8を推奨する。

そしてmoduleをimportした後のところに次のおまじないをつける。 追記:ガセでした。importの後から最後のおまじないの間なら動きます。

print("Content-type: application/json")
print("\n\n")

このおまじないは、ajax通信で送られてきたものがjson形式で書かれていることをcgiプログラムに認識させている。

そして下のコードに送られてきたデータが入る。

data = sys.stdin.read()

最後にクライアントに返すためのおまじないをつける。resultの部分がクライアントに送信するものである。JSONにエンコードしているのは、ajax通信ではjsonで送られてきたものはjsonで返信しなければならない掟があるからである。

print(json.JSONEncoder().encode(result))
print('\n')
スキャン_20201209.png
スキャン_20201209 (2).png

ゼミ  ブロッコリー

1.横井ページの添付ファイルから、最新版のブロックが入っているzipファイルとWine ~red4 .csvをダウンロードする。

2.エクスプローラーで「\\WSl$」を打つ。アクセス許可がないと言われたら許可する。エクスプローラーのどこにあるか

3.Ubuntu > var > www > html ...①
  Ubuntu > usr > lib > cgi-bin...2⃣
両方を右クリックで「クイックアクセスにピン止めする」

4.Ubuntuを開いて、①のwwwまでアクセス(cd)する

sudo chmod 777 -R html

※「ls -l」を入力すると"-rwxrwxrwx"と表示されていれば大丈夫
2⃣も同様にする(libまでアクセス)

sudo chmod 777 -R cgi-bin


⑤Ubuntuで、Ubuntu > var > logにアクセスする。

sudo chmod 777 -R apache2


⑥apache2の中の「error.log」にAjax通信に関するエラーのみ表示される

⑦cgi-binの中にある

kojinnnobunnseki 

⑭課題のブロックは3つのフィル


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS