Ubuntu」タグアーカイブ

Ubuntu and Vista comparison 1

Ubuntu を壊しちゃった…

何を思ったか Youtube での CPU 付加が高いのをなんとかしようと考えた。
んで ATI ドライバーを入れたらログイン画面に到達できなくなってもーたわ。
他は何も問題無いのにアホなことやったら駄目だね。

こりゃ再インストールかな、データは 9.04 のライブ CD から取り出しできるはず。
ということで日曜まで Vista HDD に取り替え。

しかしせっかく HDD を取っ替え引っ替えしながら使っているのだから…
Ubuntu 9.04 と Windows Vista を私的に比較、なんて記事を超私的に書いてみよう。
なんたって HDD 以外は同じ構成だ、両方を使い込んだ人間として誰かの参考になるだろう。
Windows 7 も基本的には Vista と同じだしね。

ちなみに CPU は AMD Athlon 64 X2 4200+(2.2GHz)
VGA は AMD 690G 内蔵 ATI RADEON XPRESS 1250 の環境にての話である。

○ 起動時間

Vista はシャットダウンからの起動が死ぬほど遅いのはご存じのとおり。
その欠点を補ってあまりある「スリープ」は素晴らしいの一言ではありますが…
Ubuntu と併用な私のような使い方ではシャットダウンすることのほうが多いわけで…
上記環境でも 20 秒で起動できる Ubuntu 9.04 はやはりありがたいとしか言えない。

しかしアプリケーションの起動時間にまったくストレスが無い Vista も捨てがたい。
SuperFetch のおかげだが Gedit 一つ起動するにも待たされる Ubuntu とは比較にならない。

○ Compiz と Aero について。

見た目はどっちも良い、Windows XP 以前を使っている奴は「仕事用カヨ!」と。
一時期流行した「スキン」みたいなウインドウは過去の遺物にしか思えない。
決してタイトルバーをシマシマとかにしてはいけません(ぉい!

どちらが優れているかなら間違いなく Aero だろう。
3D がどうのより Compiz 環境ではダイアログがアクティブにならない場合が多々ある。
ウインドウを移動した直後の描写安定性も Aero が圧倒的。

楽しいのは Compiz だ。
ブヨンブヨン動くことよりデスクトップの隅に吸着等の動作が統一されるのが嬉しい。
こういうのは Windows ではアプリ側の仕事だったけど環境側がやったほうがイイね。

○ アプリケーション

箇々のアプリがどうとかよりインストール場所が決定的に違う。
Linux は実行するファイルが /bin か /usr/bin ディレクトリに集中している。
なので長々とパスを指定する必要が無い、Firefox も端末で firefox と打ち込むだけ。
bash 等の端末を利用する時にとても楽である。

Windows は主にショートカットを利用するが実際は長い長いパスを経由している。
なので Windows Power Shell 等で端末操作をやるにしても非常に面倒。
しかし利点もある、沢山の実行ファイル管理やバージョン違いの同時利用が簡単である。

スクリプトをよく利用する人は Linux のほうが便利。
小物アプリを細かく使い分けするような人は Windows のほうが便利。
なんて結論になるでしょう。

ぱっと思いついたものだけでも両方に長所短所があるわけで。
どちらかが良いとか比較するより良さを生かした使い方をすればいいかなと思う。
多分続く。

Comix

Comix – GTK Comic Book Viewer

こんなのを見つけた、思いっきり PyGtk 製の画像ビューアである。

私は動画プレイヤー同様で画像ビューアにもそんなには機能を求めていない。
なので Eye of Gnome で十分なんだが 9.04 から急に重くなってっしまったし。
PyGtk の勉強ついでに自分で軽いのを作ろう、と覚え書きページを作っていた。

見事に詰まった…ということで何か参考が欲しい所に見つけたということです。

でも検索すると…
せっかくの Python 製なのに参考にして何か作ってみようという人いないの?
UNIX 系の人はバリバリスクリプトを書いて利用しているイメージが昔はあったのに。

まあそれはよくて。

普通に「追加と削除」にあるのでパッケージ管理のためにインストールはそちらから。
URL を貼ったのは Python コードを参照のために落とす用。

HDD は Vista にしてしまったから VirtualBox 上の 8.10 を使って…
あれ?何もファイルが無い、そういえば 8.10 からはホストに変更したんだっけ。
せっかく Comix をインストールしたのに画像が何も無いとはこれいかに。

しかたがない、手っ取り早くエロサイト…はやめておいて。
この Blog から先月の画像を FTP で丸ごと落とせばいいや。

comix

縮小描写の画質がイマイチですので双一次補完以上にしませう。
GtkRadioAction でラヂオメニューとツールバーを同期させる
image.py でコレと同じようにスケーリングをしているので、名前で解るわな。

tile

こういうのは自前で補完の算出をするより GTK+ にまかせたほうが早い。
なんたってスクリプト言語ですので…まあイイんでないかい。

それはそうとソースコードだ。

GtkUIManager を使ってオリジナル画像や右寄せをしている、コレやりたかった。
方法の解析は…もう少し時間が掛かりそう。

画像は GtkLayout を使って大きさを調節して GtkImage に描写している。
こんな方法があったのか、それなら expose_event シグナルを利用しなくてもイケる。
それでいいのか?という疑問もあるけど。

ステータスバー表示は分割せずにまとめて str で描写。
うーん、私とは随分考え方が違う人のようだ。

予想していたコードとは随分違うけどこれはこれで参考になる。
というか 8.10 の Eye of Gnome はこんなに軽かったっかな?

テンプレートとスクリプト

nanikore

Nautilus にあるこのテンプレートって何だろうと気になった。
多分よく使うテンプレートをコピーして新規作成してくれる機能だと思う。
私だったら当然

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

とかかな、「 py 」って打って Tab キーを押すだけでスニペットが挿入してくれるけど。
それでもあったほうが便利かなと思うので使い方を探す、が見つからないんですけど。
せっかく堂々とメニューに乗っているのに誰も使っていないのかな?

でも調べているうちにスクリプトで Nautilus が拡張できると知った(今頃…
面白そうと思って早速作ってみた、これで端末のお世話になる時間が減りそうだ。

Nautilus をスクリプトで拡張

しかし gedit といい Nautilus といい gimp といい Eye of GNOME といい…
Opera と自作以外は標準アプリしか使っていないのを思い知る。

しかし他のモンをあんまりインストールしていないので私の 9.04 は超安定しています。

Compiz と DWM は結果が同じ

Y901x 0.1.5 公開しました。

で、前回困っていた動画の背景を黒くする処理ですけど。
メソッドからは塗りつぶしができないので expose-event を処理して GDK で塗った。

def on_aframe_expose(self, widget, event):
    gc = widget.style.fg_gc[gtk.STATE_NORMAL]
    gc.set_foreground(gtk.gdk.Color(0,0,0))
    widget.window.draw_rectangle(gc, True, event.area.x, event.area.y,
                                    event.area.width, event.area.height)

なんか Windows でデバイス・コンテキストを使うのと同じ感覚。
ペンや色の情報はグラフィック・コンテキストが持っているってことですよね。
GTK+ から色の変更をする関数も実はコレをラッピングしているだけなんだろうきっと。
つまりは GDI+ のように、とか考えていたら気になった。

Linux ではこれはどうなるのだ?

ぱぇぽぃ2 ? Blog Archive ? Aero の TextOut

Compiz は言うまでもなく Aero と同じようにタイトルバーが透けたりとかする。
ウインドウをマウスで掴んでグルグルとかでは 3D のほうが CPU 負荷が極端に少ない。
ということは 3D 状態では DWM 有効時と同じ結果になるのであろうか?
2D 描写と 3D 描写でどうなるか今回は円を描写して実験。

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

import gtk

class Wm_Paint(gtk.Window):
    """
        ボタンクリックで円を描く最低なコード
    """
    def __init__(self):
        gtk.Window.__init__(self)
        # DrawingArea
        self.drawing_area = gtk.DrawingArea()
        self.drawing_area.set_events(gtk.gdk.EXPOSURE_MASK | 
                                    gtk.gdk.STRUCTURE_MASK | 
                                    gtk.gdk.VISIBILITY_NOTIFY_MASK )
        self.drawing_area.connect("expose-event", self.on_paint)
        # GtkButton
        button = gtk.Button("クリック")
        button.connect("clicked", self.on_button_click)
        # pack
        vbox = gtk.VBox()
        vbox.pack_start(button, False)
        vbox.pack_start(self.drawing_area)
        self.add(vbox)
        # いつもの処理
        self.connect("delete-event", gtk.main_quit)
        self.resize(320, 150)
        self.show_all()

    def on_button_click(self, widget, event=None):
        # GetDC()
        gc = self.drawing_area.style.fg_gc[gtk.STATE_NORMAL]
        # window メンバが GdkWindow
        self.drawing_area.window.draw_arc(
            gc,    # グラフィックコンテキスト
            True,  # 塗りつぶすなら True
            0,     # x 座標
            0,     # y 座標
            self.drawing_area.allocation.width,  # width
            self.drawing_area.allocation.height, # height
            0,     # 開始位置、3時方向の位置から反時計回りに 1/64度刻みで指定
            64*360) # 64 の倍数が描写する円の角度
        #pass

    def on_paint(self, widget, event):
        # 本当はココに書く、てか widget パラメータが使える
        """gc = widget.style.fg_gc[gtk.STATE_NORMAL]
        widget.window.draw_arc(
            gc,
            True,
            0,
            0,
            widget.allocation.width,
            widget.allocation.height,
            0,
            64*360)"""
        pass

if __name__ == "__main__":
    w = Wm_Paint()
    gtk.main()

と、ボタンを押したら Window いっぱいに円を描写するだけの GUI アプリを作る。
コレを起動させ、上に何かウインドウを少し被せてみたら描写した円はどうなるか。
まず Compiz で 3D 有効状態は…やはり Vista の DWM 有効時と同じで何も起こらない。

次に 2D にして同じようにやってみる。

paint1

paint2

あーあ、結局 X も基本描写関連は Windows とそんなに変わらないということだわ。
Compiz の 3D 表示も Vista の DWM と同じ結果になると考えておけばよさそうだ。

3D 描写がもう少し普及したら勘違いしてしまう人が続出しないだろうか?
この手の情報が圧倒的に少ない Linux から開発に入ると理解に苦しむだろうなと思う。
いや、Windows も既にそうなって(略

ついでにコレを試したおかげで widget に allocation メンバがあることを知った。
サイズを得るのに今まで get_allocation() していたけどこのメンバから簡単に得られた。
実践は最大の練習だと本当に思う。

g_file_trash ってのがあった

何を今頃気がついた。
Eye of GNOME って Delete キーで「ゴミ箱へ移動」ができるんだね。

sakura241

これは…早速ソースコードを拝ませてもらわなきゃ、ダウンロード。
このポイントだけ知りたいんだから GPL 関係は大丈夫だろう。
というか Y901x はオープンソースだし。

Eye of GNOME

とにかく g_file_trash なんていう関数を使えばいいと解った。
しかしスゲェ、ゴミ箱に入れられるかどうかチェックして g_file_delete と振り分けている。
標準アプリはやはりこういう部分をキチンと考えて作っているんだなと関心する。

コレってやはり Gnome てか Nautilus に依存するのかな?
でもそんなの関係ねぇ(古い…最近マジでテレビ見ないし
つーか Y901x は D&D 処理自体から Nautilus に依存だ、わっはっはシラネ!

それよりこれって Python バインディングではどう書くのだ?
海外を探してもなーんにも見つからないんだが。

思いつくかぎりのワードで探して gio なんてモジュールがあると解った。
後は dir(gio) で gio.File を見つける、どうやらコレっぽい。

gio

あぁやっと見つかった。
何かもの凄い無駄なことをしているような気がしなくもないが私はいつもこんなだ。
ということで実験で書いてみたコード。

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

import gtk
import gio
import urllib
import os.path

class TrashWin(gtk.Window):
    """
        ドロップされたファイルをゴミ箱に捨てる
    """
    def __init__(self):
        gtk.Window.__init__(self)
        # D&D の準備
        dnd_list = [("text/uri-list", 0, 0)]
        self.drag_dest_set( gtk.DEST_DEFAULT_MOTION |
                            gtk.DEST_DEFAULT_HIGHLIGHT |
                            gtk.DEST_DEFAULT_DROP,
                            dnd_list, gtk.gdk.ACTION_MOVE )
        self.connect("drag_data_received", self.on_drop)
        # いつもの処理
        self.connect("delete-event", gtk.main_quit)
        self.resize(320, 150)
        self.show_all()

    def on_drop(self, widget, context, x, y, selection_data, info, time):
        drops = selection_data.data.split("\n")
        for drop in drops:
            name = urllib.unquote(drop)[7:-1]
            if os.path.isfile(name):
                # ゴミ箱へ Go!
                obj = gio.File(name)
                obj.trash()

if __name__ == "__main__":
    w = TrashWin()
    gtk.main()

こんなにアッサリ作れてしまった…例外や失敗の処理無しならたったの二行。
trash メソッドの引数は不要みたい、成功すると True が帰ってくる。

つーことで早速 Y901x に入れて更新!
ボタンも真似させてもらった、set_default_response で OK ボタンが選択できるのね。