realplayer

RealPlayer Mini テスト版
http://jp.real.com/?mode=rp_mini
というものがあるらしい、まさかココが軽量プレイヤーを作るとは。
Windows で動画をほとんど見ないけど(だってミニノートだもん)試してみる。

インストール直後にアップデートでこんなのが。
どう考えたって FFMPEG だよな、GStreamer と同じ感じになるかな。

ちょー!
一つ再生したらプレイリストに同一ディレクトリのファイルがリストアップ!
矢印キーはボリュームだ、まぁ我がアプリが特殊なだけなのだが。
自動リストアップ以外はよくあるプレイリストなのね、ふむふむ。

単独数値キーでリサイズ。
右にくっついているプレイリスト。
ウインドウ左上部クリックでメニュー。
Esc で終了できる。
気のせいだろうか、何か見覚えが…

一時停止は Space キーだし使い勝手も悪くない、シークも早い。
そのまんま FLV も H.264 も再生できた、私はこれだけで十分。
いくつかのキーボード操作に違和感があるけどカスタマイズ可能。
機能や設定項目も豊富、私はどうでもいいものばかりだけど。

画面上にマウスカーソルを置いても本家のようなウザい枠は出ない。
どういう心境の変化だよ、この会社らしいウザさがまったく無い。

それより何より。
いくらリサイズしても画面をはみ出さない、タスクバーに食い込まない。
Windows Media Player や VLC で一番困ることがまったくおこらない。
GNOME ならあたりまえなんですけどね、Windows ではアプリ側の仕事なので。

関連付けはコッチに変更することにした、とにかくサイズで困らないのがいい。
正式版でまた余計なことをやらなければ最強プレイヤーになりそう。
てか、個人製作プレイヤーはマジで終わった。

Fedora 15 Keepassx

Fedora 15 で Keepassx を使って困ったことがあった。
Ctrl+V での貼り付けでは @ が [ になって貼り付けされる。

ユーザー名にメールアドレスを利用するトコって多いから困る。
日本語キーボードの @ 位置は英語キーボードだと確か [ だよなぁ。
とりあえず setxkbmap -print コマンドで見てみる。

pc104 って何だ?よくわからん。
とりあえず ~/.bash_profile に以下を追記して再ログイン。

setxkbmap -model jp106

これで Keepassx の貼り付けは問題無くなった。
しかし setxkbmap -print コマンドは何も変わらない。
もっと正しい方法があるんだろうな。

iter_previous @ GTK+ 3 only

seemex を Ubuntu 11.04 で動かすテスト。
あらら色々問題が。
まず前回書いた StyleContext は GTK+ 2 では使えない。

# Toolbar Style
toolbar = self.uimanager.get_widget('/ToolBar')
toolbar.set_style(gtk.ToolbarStyle.ICONS)
try:
    style = toolbar.get_style_context()
    gtk.StyleContext.add_class(style, gtk.STYLE_CLASS_PRIMARY_TOOLBAR)
except Exception, s:
    pass # GTK+ 2

コレでいいや、GNOME 3 に合わせたいだけの処理なのだし。

AboutDialog の get_major_version() メソッドも使えなかった。
MAJOR_VERSION とかの定数はどちらでも使えるからコッチに変更しよう。

更に GtkTreeView 順番を上に移動する iter_previous もダメか。
GtkTreePath には確か prev メソッドがあったよな。

def on_item_up(self, widget, event=None):
    selection = self.custome_treeview.get_selection()
    model, it = selection.get_selected()
    p = model.get_path(it)
    if it:
        path = model.get_path(it)
        if path.prev():
            itprev = model.get_iter(path)
            model.swap(it, itprev)
            self.change()
        """ GTK+ 3
        itprev = it.copy()
        if model.iter_previous(itprev):
            model.swap(it, itprev)
            self.change()"""
    else:
        self.messagebox(MESSAGE_NON_SELECT)

せっかく簡単になったけど GTK+ 2 のままの Ubuntu を考慮しなきゃとは…

しかし Fedora の VirtualBox ose アップデートはまだか。
右 Ctrl+F でもそのまんま XGA サイズだし \ は打てないし辛い。

Fedora 15 Trash icon on your desktop

Fedora 15 x86_64 を二週間も使って何を今頃気がついた。
dconf-editor で

/org/gnome/desktop/background/show-desktop-icon
にチェックすればデスクトップに物が置けるようになるこうしておけば

/org/gnome/nautilus/desktop
以下で GNOME2 同様にデスクトップアイコンの表示切り替えができる、ついでに

/org/gnome/desktop/interface
以下でツールバー文字を消したりメニューやボタンにアイコンを付けたり。

やっぱりデスクトップには物が置けたほうが便利だ、ゴミ箱も表示できるし。
特にスクリーンショットの整理が今まで面倒だったのよね。

**********

ところでこの Gedit ツールバーのように seemex はできないのだろうか?
GNOME アプリは全部この色付きスタイルになっているので違うと気になる。

そんな時はソースコードを見れば解るはず、Eye of GNOME のサイトから FTP だ。
Eye of GNOME の「情報(A)」から普通にアクセスしてとっとと落とす。

gtk_style_context_add_class
という関数を使うようだ。
そうか Style がどうとかドキュメントにあるのはこういうことか。
今まで知らなかった、とにかく Python から利用するにはこう書けばいいようだ。

# Toolbar Style
toolbar = self.uimanager.get_widget('/ToolBar')
toolbar.set_style(gtk.ToolbarStyle.ICONS)
style = toolbar.get_style_context()
gtk.StyleContext.add_class(style, gtk.STYLE_CLASS_PRIMARY_TOOLBAR)

おぉ同じになった、こうすればいいようだ。
しかしこんなページを見つけたけどこうしなきゃダメなのかな?

“Hello World” in Python with GTK+ 3

というか PyGtk ではないので Python with GTK+ 3 と書くべきなんだろうなと。

**********

ところでアップデートしたら何故か gcc が入っていた。
/usr/include にヘッダとかも、自分で入れた覚えは無いがいつのまに。

何かにくっついてきたのだと思うけど、まあいいや。
Python のほうが便利なので気が向いたらでしか使わないと思うけどさ。

pygtk3 Variable Parameter

いきなり本題だが、GtkTreeView の並び順を変更するコードを書いていた。
以前の PyGtk では GtkTreePath が単なるタプルだったけどそうではないようだ。

GtkTreeModel
とにかく C 言語と同じように書けばいいだろう。
やってみると凄く簡単にできた、しかし…

''' old
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)
                self.change()
    else:
        self.messagebox(MESSAGE_NON_SELECT)
'''
# new
def on_item_up(self, widget, event=None):
    selection = self.custome_treeview.get_selection()
    model, it = selection.get_selected()
    if it:
        itprev = it.copy()
        if model.iter_previous(itprev):
            model.swap(it, itprev)
            self.change()
    else:
        self.messagebox(MESSAGE_NON_SELECT)

Python なのに戻り値で代入ではなく引数の値が直接変更されている。
model.iter_previous(itprev) が bool 値しか戻さないのでしばし悩んだ。
もしかして、とやってみたらこの結果。

こんなの ctypes の byref 以外で見たことが無い。
IronPython でさえ out だったら戻り値とまとめてタプルで戻すというのに。

てゆーか可能だったんだ。
明示的な型宣言ができない Python では問題がでないだろうか心配。

**********

それより Opera 11.11 の search.ini はどうなっているんだ?
Default Search キーの UUID を手書きで書き換えても本体に適用できない。
書き換えるとたとえ非表示にしていても Google と Yahoo が復活するんだが。
並べ替えは何も問題なく行われるのですが。
わけがわからないよ。

コンボボックスで簡単に変更できるようにしたけどまったく無意味になった。
こんなの酷いよ、あんまりだよ…

しかも Deleted を 1 にして Opera 本体機能で編集するとそのセクションが消滅する。
こんなの絶対おかしいよ。

とにかく現状では Default Search を弄くらず deleted を利用しなければ多分問題ない。
需要ゼロに等しいアプリだからこんなんでいいよね、もう少し改造と Debug をするけど。

GNOME3 の雰囲気に合わせて激シンプルへと向かっている。
バックアップ
seeme-1.9.1.tar.gz