「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



ふと気になってた、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弄ってみたら、操作方法を
すっかり忘れてた。
まぁ、昔買った本が残っているから、あとでまた
読み返しながら、少しリハビリしてみたいところ。



コメント ( 0 )