読者です 読者をやめる 読者になる 読者になる

WELCOME TO EASTWORLD

Eastworld でドロイド遊び Rapiro が主人公 ラズパイが好物

番外編 Ubuntu on VirtualBox で Flask 遊び

Ubuntu VirtualBox Flask Python

Flask を 窓越しに楽しんでいたが、生 Linux でずっぽりと遊びたいがために、VirtualBox 上で Ubuntu を走らせるようにした。

生なのにVirtual という、まるで Augmented Reality の世界のようだが、窓越しに見ればあくまでも Virtual の世界。

小さなスペースしかない窓を曇らせたくないし、軽く小瓶を楽しむだけなので、USB memory stick という杖を取り出し、その杖の上でヒョイっと遊ぶことにした。(Bash on Ubuntu on Windows はとりあえずパス。)

 

Ubu 誕生後、新生児の予防接種みたいに、段階的に色々と注入していく。

 

まずは virtualenv のパッチテスト、

virtualenv --version

 

入っていない、耐性がないと判明。

 

そこで、

sudo apt-get install python-virtualenv

 

しかし、泣き叫んでいるためか、注射が逸れる。入らない。

 

そもそも Python もすんなりと立ち上がらない。

ヘビ使いの才能は後天的なものか、あるいは刺激を必要とするものか。

 

とりあえず、

sudo apt-get install update

 

のんびり update が完了するのを待った後、再び、

sudo apt-get install python-virtualenv

 

成功。

 

さらに、git も入っていなかったので、また、んぎゃーっと、

sudo apt-get install git

 

そして、さらに処方箋「 Flask Web Developement 」に従い、 example code を GitHub repository から引っ張ってくる、

git clone https://github.com/.. ../flasky.git

cd flasky

git checkout 1a

 

また、venv という名前の Python virtual environment を flasky folder 内に作る。

この世知辛い世の中への耐性を、また一層、重ね上げる、

virtualenv venv

 

その activate、

source venv/bin/activate

 

うまくいったら、きれいな注射痕が現れる、

(venv) $

 

あとは小瓶を杖に引っ掛ける、

(venv) $ pip install flask

 

さあ、ヘビを呼び覚まし、輸入物の小瓶を一振りしましょう、

(venv) $ python

>>> import flask

 

ということで、Flask 遊びの旅は振り出しから、Ubu ちゃんと一緒に再出発したのでありました。

 

「先は長い」

なぜだか源平討魔伝のフレーズが頭の中に木霊する

 

Rapiro 君のベース基地「 RasBase 」を建設するために小瓶の魔力を借りようという算段だが、その RasBase に乗り込み、浮世の世界 Eastworld を発てるのはいつの日か。

 

P.S.

かわいいネズミを発見

sudo apt install xfce4

番外編 一滴、二滴・・・

Python Flask

小瓶について記された巻物、「Flask Web Development」を手に入れる。

 

魔法の媚薬 Flask を使ってクモの巣を投げ、敵の心を絡めてこちら側にに惹き寄せるためのものか。はたまた世に散りばる情報をWebの投網で絡めとるための秘伝書か。

内容が如何なるものかはともあれ、フラスコ片手に、魔法のスクロールらしきその書物を読み解いていった。

 

Rapiro 君はおねんね中なので、「パイ」はお預けでフラスコを手酌。

独りで「窓」際族。独りなのに族気取り~

 

とりあえず、メモ、メモ:

 

窓族愛用の品、cmd を取り出し、

チンプイプイ cd flasky

Scripts\activate

git checkout 4a なんじゃらほい

python hello.py runserver

ドドーンと Chrome

http://127.0.0.1:5000/ よっこらしょ

 

週末から読み進めて Chapter 4 も佳境にさし掛かろうとしているが、実験をあまりやっていないのでイマイチ楽しめていない。

フラスコを手にしているのにね~

Rapiro 軽く一滴、もてなすの巻

Rapiro Raspberry Pi Python Flask

Rapiro 君、今日は server になって、client の私をもてなしてくれました。素敵!

 

” 濃い~のが欲しいの! ” っていうリクエストに応え、小瓶を一振り。ドピュッとトロトロ、じゃなくて、お口がとろけるような甘~い一滴をサーブしてくれました。

 

小瓶のラベルには、”one drop at a time” と書かれていました。

Flask というらしい。

魔法の媚薬?

 

小瓶は 、Eastworld でも Westworld でもない、蜘蛛族のアジト、通称 Web で手に入れたそうです。

その番地はというと、

 

https://www.raspberrypi.org/learning/python-web-server-with-flask/worksheet/

http://flask.pocoo.org/docs/0.11/quickstart/

 

旅のついでに、蛇が脱皮してダークスキンになるショーを見てきたそうな、

 

http://flask.pocoo.org/docs/0.11/quickstart/

 

 <メモ>

とりあえず、途中経過:

 

###   ~/flask/app.py   ###

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/pies')
def pies():
    return 'Yummy pies!'

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

 

 

###   ~/flask/templates/index.html   ###

<html>

<body>
<h1>Hello Eastworld from a template!</h1>
</body>
</html>

 

窓 PC のChrome という覗き窓に、192.168.100.104:5000 とか 192.168.100.104:5000/pies とかの呪文を吹き込むと、パイワールドからのメッセージが窓に浮き上がってきた。

簡単だけど感動モンだった。

 

Webブラウザー越しに Rapiro 君と交わりたい! っていう野望あり。

まずは一滴、一歩を踏み出したというところ。

番外編 お手玉遊び その4

Python

 

お手玉遊びに、新しいドリルを追加。

child.kill() という物騒な名前の金粉を振りかければ、うたた寝中の召使たちもサッと起き上がる。

 

import multiprocessing as mp
from time import sleep
from random import randint
from os import getpid
import psutil

parent_pid = getpid()
#print("parent process id: %d" % parent_pid)
parent = psutil.Process(parent_pid)


def worker(num,nap):
    print('Worker%d started napping...' % num)
    print('\n')
    sleep(nap)
    print('Worker%d wakes up after %d sec' % (num,nap))
    return

if __name__ == '__main__':
    jobs = []
    for i in range(5):
        time_to_nap = randint(1,30)
        p = mp.Process(target=worker, args=(i,time_to_nap))
        #print(p)
        jobs.append(p)
        print('Worker%d, you can nap for %d sec' % (i,time_to_nap))
        p.start()
        #print(p)
        sleep(0.1)
    while True:
        i = raw_input('Press any key to interrupt...\n')
        if not i:
            try:
                for child in parent.children():
                    child.kill()
                print('Everybody woke up')
                break
            except Exception as e:
                print(e)
    print('\nAll right, everybody back to work!\n')
    sleep(0.1)
    for i in range(5):
        print(jobs[i]

 

<メモ>

実行結果の例:

$ sudo python test.py
Worker0, you can nap for 8 sec
Worker0 started napping...


Worker1, you can nap for 22 sec
Worker1 started napping...


Worker2, you can nap for 3 sec
Worker2 started napping...


Worker3, you can nap for 22 sec
Worker3 started napping...


Worker4, you can nap for 6 sec
Worker4 started napping...


Press any key to interrupt...
Worker2 wakes up after 3 sec
Worker4 wakes up after 6 sec
Worker0 wakes up after 8 sec

*** ここでキー入力した ***

Everybody woke up

All right, everybody back to work!

<Process(Process-1, stopped)>
<Process(Process-2, stopped[SIGKILL])>
<Process(Process-3, stopped)>
<Process(Process-4, stopped[SIGKILL])>
<Process(Process-5, stopped)>

Worker1と3(Process-2と4)を、うたた寝中に叩き起こした。

(実際には、まだ sleep 中の子プロセスを kill()  。 )

 

なお、オンライン・エディターではエラーになる。

番外編 お手玉遊び その3

Python

Rapiro 君がお休み中、一人でお手玉遊び。

5つの魔法の玉をジャグリング~

 

あ~ら不思議、5人の召使が現れました!

 

import multiprocessing as mp
from time import sleep
from random import randint

def worker(num,nap):
    print('Worker%d started napping...' % num)
    print('\n')
    sleep(nap)
    print('Worker%d wakes up after %d sec' % (num,nap))
    return

if __name__ == '__main__':
    jobs = []
    for i in range(5):
        time_to_nap = randint(1,9)
        p = mp.Process(target=worker, args=(i,time_to_nap))
        #print(p)
        jobs.append(p)
        print('Worker%d, you can nap for %d sec' % (i,time_to_nap))
        p.start()
        #print(p)
        sleep(0.1)
    sleep(10)
    print('\nAll right, everybody back to work!\n')
    #for i in range(5):
    #    print(jobs[i])

 

<メモ>

オンライン・エディターでも遊んでみました。

https://www.python.org/shell/

Rapiro お手玉で遊ぶ その2の巻

Rapiro Raspberry Pi Python Pi Camera PS4 コントローラー

 

Rapiro 君、今日も玉いじり。

玉と玉が感じ合って、お互いにテレパシーを送りだしたんだって~

memory のシェアだと道場では言ってるらしいけど、私も Rapiro 君と思い出を共有したい!

ということで、今日の二人の思い出をメモメモ:

 

# to use psutil on Python2.7.9:
# sudo apt-get install python-dev
# sudo python2.7 /usr/bin/pip install psutil

# another tip - how to make 2.7 the default:
# vi ~/.bash_aliases   (cf. comment in ~/.bashrc)
# alias python=usr/bin/python2.7
# . ~/.bashrc   (to apply the configuration change)

# or, for super user:
# sudo update-alternatives --config python
# sudo python --version

import sys
import multiprocessing as mp
from os import getpid
import psutil
size = 5
cam_processes = mp.Array('I', size)
arr_i = 0
from datetime import datetime
import picamera
cammode = 1

parent_pid = getpid()
print("parent process id: %d" % parent_pid)

def rapiroCam(cammode,cam_processes):
    cam_pid = getpid()
    cam_processes[arr_i] = cam_pid
    print(cam_processes)
    print("rapiro cam process id: %d" % cam_pid)
    try:
        with picamera.PiCamera() as camera:
            print("Activating camera...")
            camera.framerate = 10
            camera.hflip = True
            camera.vflip = True
            t = str(datetime.now())
            if cammode == 1:
                picn = "rapiro_pic_" + t + ".jpg"
                camera.capture(picn)
                print("Snapshot " + picn + " taken")
            else:
                vidn = "rapiro_vid_" + t + ".h264"
                camera.start_recording(vidn)
                print("Started video recording " + vidn)
                camera.wait_recording(10)
                camera.stop_recording
                print("Stopped recording")
            camera.close()
            print("Camera closed")
    except Exception:
        print("Camera is busy")
        print("Wait a moment...")

import serial
ser = serial.Serial('/dev/ttyS0', 57600, timeout = 10)

import pygame
pygame.init()
pygame.joystick.init()
joystick = pygame.joystick.Joystick(0)
joystick.init()
buttons = joystick.get_numbuttons()
axes = joystick.get_numaxes()

done = False

while done==False:
    try:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done=True

            if event.type == pygame.JOYBUTTONDOWN:

                 for i in range( buttons ):
                    button = joystick.get_button( i )
                    if button == 1:
                        print("button #%d pressed" % i)
                        if i == 0:              # Square
                            ser.write("#M6")
                        elif i == 1:            # X
                            ser.write("#M0")
                        elif i == 2:            # Circle
                            ser.write("#M8")
                        elif i == 3:            # Triangle
                            ser.write("#M5")
                        elif i == 9:            # OPTIONS
                            cammode *= -1
                            if cammode == 1:
                                print("Picture mode")
                                raise Exception
                            else:
                                print("Movie mode")
                                raise Exception
                        elif i == 10:           # Left Stick push
                            if arr_i >= size:
                                print("No more shooting")
                            else:
                                p = mp.Process(target=rapiroCam, args=(cammode,cam_processes))
                                p.start()
                                arr_i += 1
                        elif i == 12:
                            print("PS button pressed. Goodbye!")
                            try:
                                if p.is_alive():
                                    print("Closing camera...")
                            except Exception:
                                sys.exc_clear()
                            ser.write("#M0")
                            done=True

    except Exception:
        sys.exc_clear()

pygame.quit ()

#print(psutil.pids())
for joy_process in cam_processes:
    if joy_process >0:
        print("pid %d exists: %s" % (joy_process, psutil.pid_exists(joy_process)))

 

お手玉の練習もいいけど、今度は気分転換に他のことをしようね!

お疲れ~

 

<メモ>

子プロセスを呼び出す度にカメラを設定し直しているが、そこらへんはとりあえず置いておいて、multiprocessing をちょろっとかじりながら蛇の道をぼちぼち歩んだ。

蛇の道は蛇、盗人のことは盗人同士がよく分かっているってなことを西の世界の人が呟いていたが、そのうち仲間入りできるのでしょうか・・・

Rapiro お手玉で遊ぶの巻

Rapiro Python Pi Camera PS4 コントローラー Raspberry Pi

 

Rapiro 君、以前から興味があった multiprocessing というお手玉に興じてみました。

ちょろっと、かじってみたのがこちら:

 

from multiprocessing import Process

from datetime import datetime
import picamera
cammode = 1

def rapiroCam(cammode):
    with picamera.PiCamera() as camera:
        camera.framerate = 10
        camera.hflip = True
        camera.vflip = True
        t = str(datetime.now())
        if cammode == 1:
            picn = "rapiro_pic_" + t + ".jpg"
            camera.capture(picn)
            print("Snapshot " + picn + " taken")
        else:
            vidn = "rapiro_vid_" + t + ".h264"
            try:
                camera.start_recording(vidn)
                print("Started video recording " + vidn)
                camera.wait_recording(10)
                camera.stop_recording
                print("Stopped recording")
            except Exception as e:
                print(e)
        camera.close()
        print("Camera closed")

import serial
ser = serial.Serial('/dev/ttyS0', 57600, timeout = 10)

import pygame
pygame.init()
pygame.joystick.init()
joystick = pygame.joystick.Joystick(0)
joystick.init()
buttons = joystick.get_numbuttons()
axes = joystick.get_numaxes()

done = False

while done==False:
    try:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done=True

            if event.type == pygame.JOYBUTTONDOWN:

                 for i in range( buttons ):
                    button = joystick.get_button( i )
                    if button == 1:
                        if i == 0:              # Square
                            ser.write("#M6")
                        elif i == 1:            # X
                            ser.write("#M0")
                        elif i == 2:            # Circle
                            ser.write("#M8")
                        elif i == 3:            # Triangle
                            ser.write("#M5")
                        elif i == 9:            # OPTIONS
                            cammode *= -1
                            if cammode == 1:
                                print("Picture mode")
                                raise Exception
                            else:
                                print("Movie mode")
                                raise Exception
                        elif i == 10:           # Left Stick push
                            print("Activating camera...")
                            p = Process(target=rapiroCam, args=(cammode, ))
                            p.start()
                        elif i == 12:
                            print("PS button pressed. Goodbye!")
                            try:
                                if p.is_alive():
                                    print("Closing camera...")
                            except Exception as e:
                                print(e)
                            ser.write("#M0")
                            done=True

    except Exception as e:
        print(e)

pygame.quit ()

 

<メモ>

お手玉も極めれば強力な武器になるとの甘言に釣られ、蛇拳 multiprocessing 流派の門を叩くことに。行きはよいよい、帰りは・・・

まずは軽くジャブを繰り出すように玉遊び。適当にコードを削ぎ落として、ビデオ録画も10秒間だけ録画する設定で試してみた。