{0:02d}

Y901x 0.3.5 公開。

Y901x はシークバーを弄くるのに gst.SEEK_FLAG_KEY_UNIT 指定で軽くしている。
けどたまに動かしたピチッとした位置で止めたい場合が多々ある。
面倒くさいので放置していたけどそろそろやろうかと。

def set_play_position(self, location):
    """
        Media Seeking
        SEEK_FLAG_KEY_UNIT -> LightWaight
    """
    if self.seekinfo.button == 1:
        seek = gst.SEEK_FLAG_KEY_UNIT
    else:
        seek = gst.SEEK_FLAG_ACCURATE
    event = gst.event_new_seek(
            1.0,
            gst.FORMAT_TIME,
            gst.SEEK_FLAG_FLUSH | seek,
            gst.SEEK_TYPE_SET,
            location,
            gst.SEEK_TYPE_NONE,
            0)
    self.player.send_event(event)

とシークバー上で押されたマウスボタンを記憶しておいて振り分けにしてみた。
GtkHScale はホイールクリックだと正確な位置に移動できるので合わせてみたんだが。
つーてもホイールクリックでシークはやりにくいので右ボタンでもオケにと。
こんなに簡単に振り分けできるならもっと早くやればよかった、我ながら。

それと一時間以上のファイルの場合は自動で
00:05/85:45 → 00:00:05/01:23:45
なんて切り替わるように表示したくなった。

こんな処理にしたけど、今見るともしかしてジャスト一時間だとアウト…
まぁ手持ちのは問題無いし次で直せばいいか。

def put_time_status(self, location):
    """
        self.player is PlayBin2
    """
    sec = location / 1000000000
    allsec = self.player.query_duration(gst.FORMAT_TIME)[0] / 1000000000
    if allsec > 3600:
        s = time.strftime("%H:%M:%S", time.gmtime(sec))
        t = time.strftime("%H:%M:%S", time.gmtime(allsec))
    else:
        s = time.strftime("%M:%S", time.gmtime(sec))
        t = time.strftime("%M:%S", time.gmtime(allsec))
    self.statusbar.label[0].set_text("{0}/{1}".format(s, t))
    """
    今までの処理
    secv = "%02d:%02d/%02d:%02d" % ((sec / 60), (sec % 60), (allsec / 60), (allsec % 60))
    self.statusbar.label[0].set_text(secv)"""

自分で計算しなくても time モジュールを使えばいいと今頃気がついた私って…

そういえば新しいフォーマッタで %02d みたくゼロ詰めするのはどうやるのだ?
どうせ V2 を使いつづけるのでほとんど気にしていなかった。

7.1. string ? Common string operations ? Python v2.7.1 documentation

# old
print "%02d:%02d" % (1, 2)
# new
print("{0:02d}:{1:02d}".format(1, 2))

スゲェ分かり辛いと思うんですけど…
せっかく C 言語とほぼ同じで覚えやすかったのに今後はこうなるんだよなぁ…

GNOME3 and PyGtk3

Fedora 15 beta を試している、もちろん HDD インストールで。
しかし何故かアプリのインストールがうまくいかないのでデフォルト状態のみ。

AMD 880G 内蔵グラフィックで GNOME3 の 3D デスクトップはイケる。
ダイアログの表示がカッチョイイ、まんまコレだった。
GNOME 3 – Made of Easy

日本語フォントは今までどおり VL ゴシック。
アプリも 14 とあまり変わらない、GNOME アプリは全部 GTK3 化されている。
GUI では gnote が無くなったくらいかな、使い込んでいないから細かい違いは解らない。
mono はやはり無かった、Fedora は本当に mono が嫌いであるようです。

Windows でいうタスクバーがなくなったのでチト迷う。
アクティビティをクリックして選択、使い勝手は微妙。

Nautilus の左ペインはツリー表示にできなくなってしまったの?
というかデスクトップに物が置けない、XDG_DESKTOP_DIR 指定が無意味。
ゴミ箱とかのウィジェットがタスクバーに表示できなくなった?
細かい設定ファイル類が微妙に今までと位置が違う。

仮想デスクトップは今までと違い何かウインドウを置くと一つ追加になる方式っぽい。
アクティビティをクリックして右端にマウスを持っていくと選択できる。
すべてのウインドウを閉じた仮想デスクトップは自動で消える、なるほどという感じ。

通知スペースはマウスを右下に持っていくと表示される。
私の作った clipolix もココに配置された。

なんというか、とにかく何をやるにもマウスをいっぱい動かす必要がある。
アイコンも大きいしタブレットだと凄く便利そうなんだけど慣れるまで迷いそう。

Firefox は GTK2 だと思うけどスクロールバー等のウィジェット形状が以前のまま。
GTK3 のアプリかどうかはウィジェット形状で見分けがつくってことみたいね。

~/.local/share/gedit/plugins
に gedit プラグインを置けばいいみたいだけどまるっきり仕様が変わっている。
拡張子も違うし import も継承元も callback 名も全部変更されている。
まいった、移行するなら全部作り直しか。
Gedit/PythonPluginHowTo – GNOME Live!

上記の Plugin URL を見て気がついたけど PyGtk で GTK3 が使えるんだね。
gi.repository.Gtk という名前空間(モジュール)でイケるようだ。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from gi.repository import Gtk

class Test(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.connect("delete-event", Gtk.main_quit)
        cb = Gtk.CheckButton("Check Button だよ")
        cb.set_active(True)
        self.add(cb)
        self.show_all()

if __name__ == '__main__':
    w = Test()
    Gtk.main()

おぉ、GTK3 のウィジェットだ。
こうすればいいのか、あまり GTK2 の時と変わっていないみたいだね。
コレさえできれば私は素直に GNOME3 に移れる。

でも Gedit で External Tool に追記しても動かないんだが…
まだベータだし、とりあえず正式版が楽しみだ。

Python and .NET Methods

.NET と Python メソッド対応表 – L’Isola di Niente

自分で利用したかったので作ってみた。
ついでに覚書ページのも少しまとめた、整理進んでねぇ…

表を作るので何年かぶりに table タグを使おうと思ったけど面倒くさい。
せっかく PHP なんだからコードで作ってしまえ!
ということでこんなのを作ってみた、PHP に関しては私はサルです。

<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
<title>PHP table</title>
<?php
function put_table($items, $count, $separator) {
    echo "<table border=1 cellspacing=0 cellpadding=3>\n";
    $header = true;
    $array1 = explode("\n", $items);
    foreach ($array1 as $s1) {
        $array = explode($separator, $s1);
        echo "<tr>\n";
        for ($i=0; $i<$count; $i++) {
            if ($header) {
                echo "<th bgcolor=\"#eeeeee\">$array[$i]</th>";
            } else {
                echo "<td>$array[$i]</td>";
            }
        }
        echo "</tr>\n";
        $header = false;
    }
    echo "</table>\n";
}
?>
</head>
<body>
<?php
$items = <<<ITEMS
名前|デスクトップ|リリース予定
Ubuntu 11.04|Unity|2011-04-28
Fedora 15|Gnome 3|2011-05-24(2011-04-19 Beta)
Mandriva 2011|KDE 4|2011-06-13
ITEMS;
put_table($items, 3, "|");
?>

</body>
</html>

みたくヒア・ドキュメントにしてセル数とセパレータ指定にしてみた。
ヒア・ドキュメントなら後で書きたしや書き換えをやりたくなっても簡単だ。

PHP は HTML 中にそのまんま書き込めるから楽でいいよね。
まぁ言語仕様はどうかとは思うけど…

しかし次の Linux はドレでいくかなぁ?
GTK+ 3.0 がやりたいので Fedora にしたいけど初版は不安定かもしれないし…

GNOME 3.0 depends on Mono

4 月、新しい Linux がワンサカ出る季節になった。
ついに GNOME3 が Fedora に正式採用されるようです。

Linux Daily Topics:2011年4月5日 Fedora 15のGNOME 3は慣れるまでに時間がかかるかも─Fedoraアンバサダー|gihyo.jp … 技術評論社

って GTK+ も GTK3 になるのか、そりゃそうだ!
おいらの PyGtk アプリはどうなる、GTK2 のアプリは動くの?
Python も可能ならいいかげん 3 にならないか、2 に依存しすぎて無理かも。

fedora はコレを落としてみたけど完全に作りかけだよ…
独学Linux:Fedora15(Lovelock)の開発版

Ubuntu 11.04 はベータが出ている。
とにかく VirtualBox で動かして解る範囲でチェック。

Ubuntu は基本 GTK2 のままか、正式版で何がどうなるか解らないけど。

Python から PyGtk を使うと Fedora も GTK2 になる。
pygtk.require(‘3.0’)
とやりたくても現状 site-packages に gtk-2.0 ディレクトリしか無い。

そういうわけで Y901x も起動できる。
今までの GTK2 アプリも PyGtk も問題無しということでいいのかな。。

Ubuntu は GtkMenuBar が Mac 風になる、変則配置の Y901x はどうなる?

あれ、メニューがあるはずの部分が少しズレているけど問題無いみたい。
動画の縦ピクセル数も合っている、これなら得に変更する必要は無いかな。
GtkMenuBar.allocation.height がゼロを戻しているのだろうきっと。

とりあえず Ubuntu がこのままなら我がアプリは 11.04 でもイケるようだ。
今まで Ubuntu の更新毎にどこかがおかしくなっていたけど…
何も問題がないってのも逆に面白くないな…

ついでだから 11.04 のデフォルトアプリを見てみる。
OOo が LiberOffice に変わっている。
なんと Tomboy が残っている、今渡こそ Gnote になると思っていた。
Rhythmbox が Banshee に、だから何故 mono 製を選ぶかな…

GNOME3Myths – GNOME Live!

GNOME は mono 依存に戻ったのか。
Fedora にも mono が復活するのだろうか?アルファ版には無いんだが。
つか GTK3 が Gtk# から使えるということなのかな、Python はどうなる?

とにかく Fedora のベータ待ちだ、ディストリ側がどうするか解らないと。
場合によっては Fedora 移行に再挑戦するつもり。