ふと気になってた、GUIの開発環境。ちょっと調べて
見たくなったので調査。
http://picavr.uunyan.com/warehouse_midi_mon.html
以前VBで書いたMIDIモニタのGUIプログラムを、
もっと汎用的な環境で書き直したいなぁというのが
元々の狙い。
開発環境が陳腐化してるのもあるんだけど、VBだと
シリアルから受け取った1文字1文字を順に格納して
いくのに、配列みたいなアクセスの早いデータ形式
がないので、数キロ程度受け取った時点で、もう
まともに動かないってところをナントカしないと
使えない。
あと、できればwindowsでもLinuxでも動かせられる
プログラムにできるといいなぁと。あとまぁ、
それ以外のGUIプログラムを書く環境としても
使いたい。
んで、比較的好きなC言語を使って、どちらでも動く
モノが作れるといいんだけど、C言語でどちらでも
動くGUIって言うのは…色々面倒っぽいなぁ。
無くはないけど。WideStudioも、そういう意味では
そうなんだけど。
まぁ、その点ではC言語系にこだわる必要はない
ので、PythonでGUI関係の情報を漁ってみる。
んで、GTK+がなかなかヨサゲかなと思ったので、
チュートリアルとして、
https://www.youtube.com/watch?v=MxYl3cnn4yw
この動画を1つずつ、手を動かしながら眺めていく。
解り易い!とりあえずその6まではやってみた。
ちなみに、実行環境はWindows7上のVMwareで
動かしてるUbuntu上のPython。
ホントは何かインストールが必要になるのかも
しれないんだけど、VMwareのUbuntuには、すでに
色々なソフトをインストールしているので、
とりあえずGTKとかも一通り入ってたみたい。
動画見ながら入力してみたら、そのまま動いた。
GIMPが入ってると、やっぱりGTK+はそのまま
動くのかな?
何も無い素のウィンドウを出力するところから
始まって、ボタンを配置したり、表示したり
消したり…
いわゆる基本中の基本のプログラム。
とりあえず動いたんだけど、ウィジェットを1個1個
細かく指定するのは当然面倒でイヤだと思うのが
人の常。で、いわゆるRAD環境っぽいGUIのデザイン
ツールを探す。
http://symfoware.blog68.fc2.com/blog-entry-894.html
「glade」あたりがヨサゲだな。
このツール自体は、画面デザインをxml形式で
出力するだけだから、画面設計自体はUbuntu側
でもWindows側でもどちらでもよくて、実行環境
とは切り分けて考えてよいはず。
なので、上記のyoutubeのレッスンと、それぞれの
部品にどうやってアクセスするのかを紐付けできれば、
そこそこ複雑なGUI環境の開発も、そんなに難しくは
ないはず。
実行環境の準備は、Windows側のほうはちゃんと
やらないといけないかな。標準ではPythonは入って
なかったし、今入ってるのもPython3だし。
http://pyserial.sourceforge.net/pyserial.html
シリアル入力も必要だから、pySerialもwindows
側でも動かす必要があるんだろうなぁ。Pythonは
バージョンが色々面倒なんだよな。
あともう一つ考えておかないといけないのは、
配列のようなアクセスの速いデータ形式が
使えるのかどうか。
Pythonのリストが、どんな実装になっているのか。
いわゆる「連結リスト」的な実装だと、インデックス
を昇順でアクセスすると、追記や検索はO(log n)
じゃなく、O(n)になるだろうと。
仮に1MB分のデータをリストに追記しながら、
ランダムアクセスで要素を取り出す…と言うことを
行うプログラムをでっち上げて、動かしてみる。
#!/usr/bin/env python
import random
list1 = [1]
for a in range(1,1000000):
r = random.randint(0,a-1)
list1.append(r)
#print (a)
#print (" ", list1[r])
b = list1[r]
動かしてみる。print文を有効にしてみても、
30秒くらいで終了するみたい。無効にすると、
2~3秒くらいで終わるみたい。実行開始付近
と終了直前付近で、実行速度に変化はない
みたい。
さらに、Windows上のPythonでも動かしてみる。
…無効にした場合、1秒程度で実行が終わる。
有効にすると…「IDLE」の画面処理が遅過ぎて、
2~30分動かしてても、1割くらいしか終わらない
けど、まぁ、リストへのシーケンシャル追記と、
ランダム読み出しは、普通に早く処理できる
みたい。
んで、このPythonのリストって、どんな実装に
なってるんだろう?
オイラの好きなAVLツリーなら、O(log n)で、
100万回でも、1回の検索は17回以下になるはず。
でも、ツリーの入れ替えとか面倒な処理を考え
ると、さすがにこんな早く処理できるとも思え
ないんだけどな。
でもまぁ、処理時間といい、実行開始時点と
実行終了時点の速度の変化の無さを見ても、
今回の使い方なら、Pythonでも充分速い処理速度
が得られそうだなぁと判った。
まぁ、C言語で、minGW入れてGTK+を
http://blog.michinari-nukazawa.com/2013/07/windowsgtk.html
このあたり使うのも悪くないかもしれないな。
http://akizukidenshi.com/catalog/g/gM-06724/
秋月で、3軸加速度モジュールを手に入れておいた。
とりあえずハンダづけだけ。そういえば、SPIだけ
かと思ってたら、I2Cも使えるんだなぁ。
http://headlines.yahoo.co.jp/hl?a=20140323-00000411-yom-int
台湾の立法院のお話。なんか、オイラの気のせい
じゃぁないよなぁ。
なんで中国政府に配慮したような、偏った報道
しかないのかな。学生側の主張が全然書かれて
ないじゃん。
暗に、デモをしている学生を異端児か悪人みたいな
印象にしたいのかな?
久々に、metasequoia弄ってみたら、操作方法を
すっかり忘れてた。
まぁ、昔買った本が残っているから、あとでまた
読み返しながら、少しリハビリしてみたいところ。