UNIXプロセスを切る方法いくつか
実際のところ
Bottleで動いているアプリを止めたいとき
pkill
$ pkill python
kill -9とpidof
$ kill -9 $(pidof python)
UNIXプロセスを切る方法いくつか
Bottleで動いているアプリを止めたいとき
$ pkill python
$ kill -9 $(pidof python)
cURLでレスポンスヘッダを表示する場合、includeオプションを付けてやります。
前回の記事でJSONを吐き出すパートを作りました。
includeオプションをつけて表示すると、この通り
$ curl --include http://localhost:8080/api/status HTTP/1.0 200 OK Date: Tue, 27 Sep 2016 15:03:09 GMT Server: WSGIServer/0.2 CPython/3.4.3 Content-Length: 50 Content-Type: application/json {"status": "online", "time": "09-28_00:03:09_JST"}
通常のHTMLなら、こんな感じ
$ curl --include http://localhost:8080/time HTTP/1.0 200 OK Date: Tue, 27 Sep 2016 15:03:25 GMT Server: WSGIServer/0.2 CPython/3.4.3 Content-Length: 148 Content-Type: text/html; charset=UTF-8 <h1>jade sample</h1> <p>var : <p>09-28_00:03:25_JST</p></p> <p>Jade is outdated. Use Pug! </p> <li>https://pugjs.org/api/getting-started.html</li>
python版sinatraな軽量WEBフレームワークbottle - Bye Bye Mooreの続き。
bottleでJSONをゲットしたい場合……何も考えずに辞書型を放り込むと"Content-Type: application/json"で返してくれます。
文字と現在時刻を返したい場合、以下のようにします。
from bottle import get, run, template from time import strftime @get('/api/status') def api_status(): return {'status':'online', 'time': strftime('%m-%d_%H:%M:%S_%Z')} run(host='localhost', port=8080)
試しにcurlでチェック
$ curl http://localhost:8080/api/status {"status": "online", "time": "09-27_23:42:23_JST"}
とはいえ、この挙動だと困る事もあるでしょう。
bottleの設定で変更できます。
bottle.default_app().autojson = false
FlashAirにはLuaという軽量言語が内蔵されています。
RubyやPythonのような文字列、配列を軽く操作できる便利関数が揃っています。
それに加えて、極めて高速。
どれほどかと言えば、ゲームエンジンの開発初期段階でパラメータ調整なんかに使われる程。
フットプリントも軽いのでSDカードのような非力な実行環境でもサクサク動きます。
FlashAirではデフォからos系の機能を削り、代わりにWEBやSDカードIOまわりを強化した独自パターンのものを採用しています。
今回はこの独自Luaを使ってLチカさせる方法を考えてみます。
まずは設定。
SDカードをスロットに
$ nano /Volumes/NO\ NAME/SD_WLAN/CONFIG
キモは
です。
前の記事で紹介したツールを使うと、これら値の設定は空白で出てませんでした。
最終的に私のは、こんな感じに
[Vendor] CIPATH=/DCIM/100__TSB/FA000001.JPG VERSION=FA9CAW3AW3.00.00 CID=02544d535733324731ea8ec97900f701 PRODUCT=FlashAir VENDOR=TOSHIBA APPMODE=5 APPAUTOTIME=300000 DNSMODE=1 APPNAME=flashair APPSSID=YOURSSID APPNETWORKKEY=********* LOCK=1 WEBDAV=1 TIMEZONE=36 IFMODE=1
設定が終わったら、いよいよファイルです。
場所は"/Volumes/NO\ NAME/index.index"のように、SDカード直下でよいです。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Test</title> </head> <body> <form action="index.lua" method="GET"> <button type="submit" name="light" value="on">ON</button> <button type="submit" name="light" value="off">OFF</button> </form> </body> </html>
-- /Volumes/NO\ NAME/index.lua print[[ HTTP/1.1 303 See Other Location: index.html ]] local arg = ... local light = arg:match("light=(%a+)") local LED_PIN = 0x01 -- CMD if light == "on" then fa.pio(LED_PIN, 0x01) print "ON" else fa.pio(LED_PIN, 0x00) print "OFF" end
http://flashair.local/index.htmlを見ると、ブラウザに簡単なボタンが二個表示されている筈です。
indexはsubmitからluaスクリプトを呼び出しています。
呼び出されたluaは303を返すので、そのままindex.htmlに返します。
が、バックでは動いているのでLEDがボタン通りに動きます。
FlashAirにはWIn/OS X用のGUI形式の設定ツールが用意されています。
直接設定ファイル書き換えもできるのですが、楽な方がいいですよね。
下記サイトからツールをダウンロード。
私はMacBookProなので、OS X用のdmgです。
www.toshiba.co.jp
起動すると二つのアプリがあります。
FlashAirをSDカードスロットに差し込んだ状態で右側のFlashAirがあるアイコンの方をクリック。
完全に新規な状態で読み込むと、当然デフォ値なので初期化プロセスで環境を
まずはネットワーク設定。接続先のWiFiの情報を書き込みます。
疎通の確認。
一旦引っこ抜いて、電源付きのガジェットに接続。
普通はカメラ、僕らだと電源付きのSDカードリーダ子機でしょうか?
全ての設定が終わると、以降ローカルネットワーク内でSDカードに保存されたデータが確認できます。
一連の設定が終わると、次回以降はこんな感じの画面が出てきます
たとえばRasbianを書き込んでいる場合、リモートでRasbianの中身を書き換えたりリブートできたりするみたいです。
flashair-developers.com
今回はpythonで使えるORMapperの「peewee」を試してみます。
今回は既存のDBを流用するパターン。
from peewee import * from playhouse.sqlite_ext import SqliteExtData db = SqliteExtDatabase('blogtest.sqlite') db.connect()
で、このpeeweeは利用のため自前でちゃんとクラスを設定してあげる必要が
class BaseModel(Model): class Meta: database = db class Blog(BaseModel): body = TextField() date = DateTimeField(default=datetime.datetime.now) Blog.select().order_by(Blog.body).count() #>> 6
from datetime import date newblog.save() #>> 1 Blog.select().order_by(Blog.body).count() #>> 7