chakokuのブログ(rev4)

日々のごった煮ブログです

iOS上で動くPythonインタープリタ、Pythonista3を買った→分からない事多いけど結構楽しい

普段、コンパイルが不要なケースではPythonを使ってます。あれこれいろんなインタープリタを使うより一つに絞った方がいろいろノウハウも溜まるのでもっぱらPythonです。で、iPhoneを買ってSwiftでボチボチプログラミングをやってみてますが、言語のむつかしさというより、UIとかのGUIをどういうフレームワークや部品を組み合わせて作ったらいいのか?がイマイチ分からない。特にクロスの開発環境だとTATに時間がかかってもどかしい。そんな中、スタンドアロンコンパイルも不要なPythonistaというのを知った。これはかなり作りこまれたソフトのようで、あれこれGUIの部品やVIEWをTry&Errorで試すのにいいかと思い、有料だけど買ってみた。

ちょっと使って分かった事
1.GUIのパーツ(UI部品)はiOSで用意されるのと同じものが使える
2.グラフィックス(VIEWや線描、アニメーション)等はiOSのライブラリとは違っているようだ
3.補完が激しく働くので小さいiPhoneでもプログラミングはそれほど苦にならない(といいつつ、外付けキーボードを使用)
4.作成したPythonプログラムはiPhoneのスクリーンにPythonアイコンを貼り付けて、直接起動可能

Pythonistaの言語仕様はPythonなので勉強しなおすことはないけど、iPhone用のアプリを作るにはPythonistaでGUIやグラフィックスの処理をどう実装すればいいのか?を学ぶ必要がある。そのためには、、PythonistaのWebSiteのドキュメントページにサンプルがたんまりと載せられているので、それらを打ち込んで、ライブラリの使い方を自分なりに習得するのが良いのでは?と思った。

とりあえず、、Pythonia3の拡張ライブラリsceneを使ってサンプルプログラムを作成(Pythonia3のDocumentを読みながら作ってみた)
sceneライブラリを使ったサンプルプログラム

実行した結果。エイリアンが表示されている。。それだけだけど、、グラフィックのプログラミングは楽しい

さすがにスクリーン上のキーボードでコードを入力するのは骨が折れるので、外付けのBluetooth接続のキーボードを繋いで使ってみた。外付けにするとスクリーンキーボードは不要になって、フルスクリーンで編集ができるのでいい感じです。

■追記
不明点
1.デバッグはどうやってやるのか?BreakPointを設定しても止まらないような。。pdbデバッグする?
 →sceneのメソッド内ではbreakpoint設定しても動作しない?
 →メソッド;setup()等の定義行にbreakpointを仕掛けたら実行が停止、変数等が参照できた
2.sceneとui(標準ui部品)は併用できるのか?
 →viewのインスタンスにアクセスできるようなので、このインスタンスを使ってどうにかする?
 →サンプルソースを見ると、scene+ドローメソッドでゴリゴリui部品を手書きのような。。

悩み点
PythonistaではGUI周りはiOSのラッパではあるけど独自仕様のようで、Pythonistaを掘り進める事がiOSの理解に繋がるのかどうか。。

分かった事
1.sceneライブラリはゲームに特化したクラスで、ProcessingとかArduinoに見られるように、セットアップ実行後、ループに入るプログラミングモデルと理解。sceneの独自ループと標準UI部品のイベント待ちルールとの相性の問題で、sceneではiOSの標準UIが使えないのではと思ったが、以下のように実装すればUI部品をscene内で使えることが分かった。

def setup(self):
   #略
   b = ui.Button('test')
   self.view.add_subview(b)

■追記(170818)
Pythonia3で試作した歯磨き支援アプリ。ぼーっと磨いてるだけだと磨き残しとかできるので、歯一本一本に集中して歯磨きできるように試作。iPhone上で動作する歯磨き支援アプリが、次どの歯を磨けと指示をしてくれる*1。また、各歯に対するブラッシング回数と速度をカウンターとドラムのリズムで随伴してくれる。今はまだ実装していないけど、歯磨き終了までどれぐらい時間がかかるかも出す予定。
しかーし、、すでにこういったソフトはあるようで、他人のアプリの方が非常に出来がよさそうだったのでこれ以上は作る気が失せた。。とりあえず、、他人の先行アプリを一通り調べて、機能的に改善できると思えたら開発を続行して最終的にはSwiftで作り直す予定。。今回Pythonia3で試作したので、ボチボチ動き出すまではそんなに時間がかからなかった。sceneライブラリを使ったプログラミングにおいて、UIパーツをどうやって貼り付けるのか?とか、UIパーツのCallBack関数(デリゲート?)からscene内のリソースにどうやってアクセスするのかとかはあまり情報がなくてちょっと調べたりしましたが。。 思いついた時にアプリの試作がサクッとできるのがPythonia3の素晴らしい点だと思います。SwiftとXCodeで作っていたら何倍も時間がかかったと思う。敢えて難点としては、、入力や編集手段でしょうか。自分はiPhoneなので画面が小さくて目が辛い。


■ご参考URL
iOS上で動作する革命的ものづくり環境「Pythonista 3」の魅力をとくと語る
http://hitoriblog.com/?p=42145

http://omz-software.com/pythonista/docs/ios/ui.html
http://omz-software.com/pythonista/docs/ios/sound.html

*1:文字化けとか面倒なので今は英文字のみ