SeeMe」タグアーカイブ

SeeMe is to IronPython

C# で SeeMe for Windows を作るのはヤメにしたい。
Python ばかりやっているとやはり巷の噂どおり行末セミコロンを忘れるんだなぁこれが。
既定の型がバカみたく多い .NET Framework で型指定なんてもうやってられない。
何よりコンパイルしなきゃいけない、今では何故コンパイルする必要があるのかも疑問。

それより Visual Studio に嫌気が。
一昨日 Visual Studio の自動アップデートが掛かって一時間以上マシンが使えなかった。
サイズがデカ過ぎるんだよ!だから仮想の OS には入れたくないし又待たされるのはゴメンだ。
結果 Ubuntu と Vista の HDD を入れ替える回数が多くなる、いいかげんにコネクタが不安。
Ubuntu 上の仮想な Windows 7 上で気楽にサクッと小物アプリを作れるのが理想…
そうなるとやはり IronPython が一番の選択肢になる。

ところで IronPython で検索するとコンパイル方法とかよく見つかるんだが…
動的言語を何故コンパイルなんてしたい人がいるのか私にはまったく理解できない…
メリットをわざわざ自分で潰すなんて、コンパイルするなら C# で作ればいいんだし…
それよりなにより Windows 7 では exe にするとインストーラが必要に…
更にオープンソースにするもなにも配布は一つのアーカイブのみでオケになるのに…
Linux の /usr/bin 以下を見てそれでもコンパイルしたいのか?という感じ。

ということで SeeMe はとっとと IronPython で作り替える。

面倒くさいので XAML は C# のをそのまま使…えなかった、ハンドラ指定の部分で。
それと Python らしく Name 属性に大文字を入れたくないし Linux 版との整合性も整えたい。
エディタ部の腐った配置も書き換えたい、使う人には解らないだろうけど我ながらコードが酷い。
System.Windows.Window の継承クラスをトップレベルウインドウにしたいというのもあるけど。
のでやはり書き換えることに。

細かいパーツは XAML を三重クォートでまとめたのをいくつかコピペですませる。
XAML でやったほうが良いものは XAML で、コードのほうが都合がよいものはコードで。
inifile8.py は os モジュールが無いから Linux 版をそのままは使えなかった。
とりあえずツールバーまでは再現した。
とやっていたのでありますが。

seeme_ipy2

何故文字化けするの?
どうでもいいが IronPython は pyc キャッシュを作成しないことに今頃気がついた、遅!

原因が解らないけど、とりあえずココまでのバックアップ。
明日明後日はとある事情で田舎に帰りますのでまた来週。

seeme_a402.zip

SeeMe for Windows beta2

なんか Ubuntu の自動アップデートが失敗しまくる。
こういう時は Vista にチェンジだ、両方を使っているとこんな時に便利だね。

せっかくなので SeeMe for Windows の更新だ。
Linux 版の変更点をそのまま適用、どっちが元のアプリだかもう全然解らないや。
バージョン情報はタブをやめてダイアログにしたが XAML なんざ書きたくないのでコードで。

seeme_about

ぶっちゃけショボイ!

あれ?Snipping Tool が保存できなくなっているんですけど…
おかげでスゲェ久々に Alt+PrtSc と Paint.net を使ったよ。
まあそれはここでは関係無くて。

というかコード化しなきゃ後々で IronPython 化できなくなるんで…
と思ったけど beta1 からもう一ヶ月以上間が開いているのに今頃気がつく。

こんだけ間があったら本気でやれば IronPython 化が終わっていたかも…
とはいえ肝心な IronPython 2.6 もまだベータだったりするし、もうベータばっかや!

ところでインストーラは何か開発方法がおかしかったようで…
beta1 を必ず削除してからインストールをお願いします。
というか zip 版もせっかくなので追加!以上 SeeMe 更新のお知らせでした。

Align left

今日の SeeMe for Linux バックアップ。
はもうヤメにしてトップページにベータとして公開することにした。

しかし Windows 版の About をタブにしたのは失敗だったかな…
なるべく見た目を共通にも GTK+ では GtkAboutDialog を使うのが普通だ。
Windows はこういうのを提供しないのか?知らないだけで有るのだろうか?

それと最初は国際化を狙って日本語部分を strs.py に分けて作っていたんだけど…
面倒だし英語サイトを作る語学力は無いし需要は微妙このうえないし。
Windows 版と表記が違うというのは避けたいのでやはりリテラルで済ませるかと。

それにしてもコードでウィジェット配置は面倒だ。
GtkLabel を GtkTable 内で左寄せするにはどうすればいいのか?

label2 = gtk.Label("標準のサーチエンジン UNIQUEID")
label3 = gtk.Label("Speed Dial サーチエンジン UNIQUEID")
label2.set_alignment(0.0, 0.5)
label3.set_alignment(0.0, 0.5)
table.attach(label2, 0, 1, 0, 1, gtk.FILL)
table.attach(label3, 0, 1, 1, 2, gtk.FILL)

今試したら上記みたくすればイケそう、あまり試していないので問題あるかも。
HTML の table タグは左寄せがデフォルトなのに何故中央配置がデフォルトなんだろう?

それとラヂオボタングループをインデントさせたいのだがどうすれば?
GtkBox の set_spacing では上下左右全部の指定しかできないんだよね。
mono で作った時は GtkHBox を挟んで左側に空文字を置くというアホな方法を使ったけど。
左だけにマージンを指定するにはやはりそういう方法しか無いのかな?意外と難しい。

GtkTreeView in Get front Iterator

今日の SeeMe for Linux バックアップ。
バックアップ機能とか細かいものはまだ作っていないけど編集は可能になったよ。
wnck を使った Opera 起動チェックも行っている、しかし私以外に使う人がいるのだろうか?。
見た目は前回と変わらない、いや、セパレータのラインなんかは表示するようにしたけど。

seeme4_t6

seeme4_t6.tar

ところで Gtk# をやっていた頃にもリンクしたけど

PyGTK FAQ Entry

GtkListStore で手前の GtkTreeIter を得て順番を入れ替える方法なんですけど。
PyGtk における GtkTreePath は単なるタプルなので

def on_item_up(self, widget, event=None):
    selection = self.custome_treeview.get_selection()
    model, it = selection.get_selected()
    if it:
        path = model.get_path(it)
        if path[0] > 0:
            path2 = (path[0]-1, )
            itprev = model.get_iter(path2)
            if itprev:
                model.swap(it, itprev)

def on_item_down(self, widget, event=None):
    selection = self.custome_treeview.get_selection()
    model, it = selection.get_selected()
    if it:
        itnext = model.iter_next(it)
        if itnext:
            model.swap(it, itnext)

とまあコレでイケちゃうんですね、無駄に型に厳しい Gtk# でやるより楽。
WPF の ListView はデータの加減算だけでイケるけど GTK+ はチト面倒なのが本音。
それでも GtkTreeView から得られる情報のみで賄えるのが嬉しい。
データと表示が繋がっているってやはり素晴らしい、Windows SDK じゃありえない。

Table Layout

今日の SeeMe for Linux バックアップ。

自分の設定は保存するようにした、

~/.seeme/seeme4.ini

に作成しますので試したい奇特な人はお気をつけて。

seeme4_t5

seeme4_t5.tar.gz

とりあえず GtkTable でエディタ部分をレイアウトしてみたけどイマイチ。
あまりのんびりと作るのもあれなのでこのままいくと思うけど。
GtkTable って HTML のようにセルをまたいでレイアウトできるが…
こういうのには向かないみたい。

せっかくエディタ部を別個のクラスにしてみたはいいのだけれど
GtkListStore の値を参照する必要があるのでシグナル処理は本体というはめに。
GtkTreeSelection で選択状態を知る必要があるしどうにもならん。

んで編集できるようにまで作ったけどまだ保存はできない。
だってデフォルトのほうの処理をまだ作っていないもので。

ところで
inifile 読み書きクラスと読み込み専用クラスで同じメソッドを持ってもしょうがない。
ということで InifileBase クラスを作って継承するように変更したんだけど。
先頭にアンダースコア2つのメソッドだと継承先から直接利用できないんですね。

そんなの Python の常識だろ?と思う人もいるんでしょうけど私は実践しないと覚えない人なので。

しかし、検索していてよく見かけるんだが…
INI を読み書きする程度のクラスすら自分で作れないプログラマーって何が作れるんだろう?