Linux」カテゴリーアーカイブ

GtkAspectFrame shadow_type

最近 PyGtk ネタを書いていないことに気がつく。
てかセ CULV セレロンの検索で何人も来ているという始末。

culva

やっぱり需要の高そうなネタに終始したほうが…とか思ってしまいます。

ということで Y901x の現状。
Mandriva で Y901x を使うと GtkAspectFrame に枠が入ってしまう件はなんとか解決。

gtk.Frame

GtkAspectFrame の set_shadow_type メソッドで gtk.SHADOW_NONE にするだけ。
つまり Ubuntu で使っているテーマでは影が元々まっ黒だっただけということかな?
後はとにかく Compiz 有効にできる HDD インストールを行って試してから更新の予定。
2010.0 は 15 日だったような覚えがあるんだけど…気のせいだったか。

DistroWatch.com: Put the fun back into computing. Use Linux, BSD.

それとずっと解らないこと。
Compiz 無効の 2D 描写時はリストグリップのラインが再描写で上手く描写されない。
expose-event ってどうも Windows の WM_PAINT のように完璧にはいかないようだ。

ダブルバッファリングを無効にすると少しマシだがダメな場合もある。
そういえば Windows では DC に線を書くより画像を表示したほうが負荷が軽い。
ならば画像でやってみよう、self.grip_pix という変数に GtkPixbuf を格納し

def __on_expose_event(self, widget, event):
    # GetDC()(Windows)
    gc = widget.style.fg_gc[gtk.STATE_NORMAL]
    # Draw Vertical Line
    area = widget.window
    area.draw_pixbuf(gc,
                    self.grip_pix.scale_simple(event.area.width, event.area.height, gtk.gdk.INTERP_NEAREST),
                    0, 0, 0, 0)

もっと負荷が大きくなった…
てか pixbuf を引き伸ばして描写するにはこういう方法しか無いのだろうか?
Win32API の BitBlt みたいな転送方法があると思うんだけど今は解らない。

いっそ GtkImage で…こいつは GtkEventBox が必要になるので嫌だし引き延ばしが無理そう。
おまけにやっぱり上手くいかない、3D で使えば何も問題無いので放置のままかな。

しかしちっとも需要が無い GStreamer Player の更新を続けてどうする…
だが Windows でソレをやり続けたから Linux でもアプリが作れるようになったのだからね。

Mandriva に nano とか

Mandriva を色々試しているけどやはり Ubuntu に比べるとチト不便。
su で root になって gedit なんかを使うと警告を吐くとか。

端末内なら問題なく編集可能かな?と nano を導入、そう vi が解らないんです。
てゆーか nano はデフォルトでは入っていないのか…
結果 OK、システムファイルのテキスト編集はこれでいいかな。

検索すると Nautilus は su からは開けないとか見つかった、本当だ。
なら gksu を入れてみる。

gksu_mandriva

なんかやはり警告が、Ubuntu でも違うメッセージだけど出るけどね。
これで GUI にてファイル操作は問題なくできるので別に気にしなくてもいいと思う。
システムファイルは移動なんかしないし削除とかも端末で十分だけど一応入れておくか。

端末内なら普通に su で管理者になれるので sudo は必要無い。
一応書くけど nautilus-gksu なんてモンはありませんから自分でスクリプトを書こう。
でも gksu gnome-open ができないや、gksu gedit とか指定すれば開けるんだが。

Nautilus をスクリプトで拡張

追記

admin

orz

追記おしまい

gcc は gcc だけだと c++ は入らないようだ。
gcc-c++ にチェックすれば C++ のコンパイルも可能になるようだ。

gcc_mandriva

色々揃えると今の Ubuntu 環境とあまり違いが出なくなるような。
でもそれじゃないと困る、いきなり違う環境に移行なんてできないよ。

Mandriva ならでは利用方法は HDD インストールをしてからだ。
気がついたけど tomboy が入っていない、何故 mono は入っているのだ?

LXDE は確かに軽いけど

不良品だったメモリは交換してもらった。
家に帰りデュアルチャンネルで組み付けて Memtest86+ スタート、普通に動作。
Ubuntu 9.04 を起動し軽く動作チェック、よしよし 4GB メモリにすることができた。

これで Windows Vista を Linux の VirtualBox 上の仮想 OS にする準備完了。
なんたって Vista だし Visual Studio 2008 も入れる予定なのでとにかくメモリがいる。
1TB の HDD も先週買っておいたし後は各種 OS が出揃うのを待つだけ。

早く Mandriva 2010.0 と Ubuntu 9.10 と Windows 7 が出ないかなぁ…

とにかくソフトウエア作りは最新 OS 環境で動作チェックしたい。
blog も最新 OS ネタで行いたい、ということで今は待ちの状態。

Windows 7は最後の32ビットWindowsか (1/2) – ITmedia アンカーデスク

Windowsには、ほとんどの人が完全には理解しないであろうルールがある。
Windowsのすべての新版は、次世代ハード向けに設計されているということだ。

そうなんだよね、ハードウエアが出揃った今 Vista を悪く言う人はいなくなった。
仕事関係でしかたがなく以外で XP を選ぶ人がいたら病院へつれて行きましょう。

電卓の話 – NyaRuRuの日記

中身を変えても誰も気付かない

パソコン雑誌のライターはバカしかいないとよく解りました。
捏造ばかりで偏ったことしか伝えないテレビ局を笑えないね。

とにかく現在の環境では今何をやっても即化石になるかもしれない。

ということで、もう Ubuntu 9.04 が不安定になっても困らないので LXDE を試す。
死ぬほど軽いウインドウ・マネージャらしい、つまり低機能だということだけど。

sudo apt-get install lxde

でインストール、ログアウトしてログインのオプションで「セッションの選択」から LXDE を。
「デフォルトにする」を選択しなくても LXDE になっちまったぞこのやろう!

とにかく起動、うわぁ本当に軽い。
PCMan のファイルマネージャが本当に軽い、GTK+ 製なので GNOME からの違和感も少ない。

我が公開アプリも問題なく動く、Y901x のインストールもできる。
まぁそりゃ中身は Ubuntu そのものでウインドウ・マネージャだけが違うだけだもの。
gnome-screenshot も一応使えるようだ。

lxde

ただ、Linux では何というか知らないけど GDI 描写だね、 Windows XP と同じような方法。
ウインドウを掴んでグルグル動かした時の CPU 負荷を Compiz と比べればよく解るよ。

他 PCMan では FTP 接続ができないみたいだ。
動画はサムネイルされない、画像もできたりできなかったり。
Drag & Drop は CRLF 区切りの URI が渡る、ここは Nautilus と同じ。
詳細表示にすると Drag & Drop が上手くいかないんですけど…
それより script で拡張ができそうにない、Dolphin を諦めたのと同じことがまた。
Nautilus は端末から起動できるけどブックマークしていた FTP が消えている…

つか、だから Nautilus を使いたいのなら GNOME を使えばいいじゃない!

GNOME から新しい技術と便利機能をゴッソリ取っ払ったという感じ。
そりゃ軽いだろう、Windows を Vista から XP に戻したようなものだから。
つかメニューやタスクバーが XP 臭い、こんな所まで昔に戻さなくてもいいのに。

中身は Ubuntu そのものなんですけどやはり別物ですね。
とにかく軽いことは確かなので Windows XP 万歳な人にはいいのでは?
私は素直に GNOME に戻ります。

追記

LXDE の奴め、なんかイッパイアプリをインストールしやがった。

lxde_menu

Leafpad とか Windows のメモ帳レベルなエディタはいらないよ!
端末エミュレータやアーカイバーは2つも必要無いだろ!

PCMan は得に酷い、この開発者って信じられない!
起動する毎に Nautilus に登録し直した FTP ブックマークを削除するってどういうこと?
つーか Nautilus のブックマークを利用スルナ!やはりこういうのを試すのは爆弾だよ。

sudo apt-get autoremove lxde

で削除できたけどまだメニューに幾つか残っているので後は手動で…
GPicView だけは激軽なので別途で入れよう、でもやはり低機能だが。

シェルスクリプトの初心者本

今月の日経 Linx を買った、付録の「シェルスクリプトの基本 10 項目」目当てです。

実はシェルスクリプトを今ひとつ使いこなせない現在の私である。
Python もいいけどシェルスクリプトくらい普通に書けないとエラそうにできないし。

パッと付録を読んだけどコレはいい。
分厚くてウンザリする bash の解説本とは違い基本の基本だけを解りやすく書いている。
Web だけじゃ解りにくい解説しか無いから買っておいたほうがいいよ。

このたった 34 ページの付録だけで 1490 円の価値はある。
久々に良い本を見つけたが Amazon に無かったのでアフィリにならん。
クソォ適当にまとめと追記をして覚書ページを作ってやるぞこのやろう。

でもせっかくの有用な付録なのに本の記事はフリーソフトの紹介ってのがどうなんだ?
bash のコマンドって実は CUI アプリだよと初心者に教えたほうが理解が早いのに。

それも紹介しているアプリがチト、w3m って Ubuntu には標準で…
リポジトリに Apache や PHP があるのに XAMPP とか Wine で秀丸を動かすとか…
だから FTP なんて Nautilus でも Dolphin でも簡単に可能なのに…

何より Opera が無いってどういうことだ!
KeepassX も無い、GHex も無い、つーかテキストエディタが無い、何故か Rails を紹介。
ワケワカンネェこのライター、ターゲットはどんな人を想定したの?

でも Ubuntu は標準で Memtest86+ が使えると知ったのは発見だった。
早速先日買ったはいいけど超不安定な 2GBx2 のメモリに換装してチェック。
動かしてイキナリまっ赤っ赤、こりゃ不安定なわけだ。

BIOS の設定を変更したり一枚ずつ付け替えたりして地味に実験。
どうやら片方が不良品のようだ、もう一枚買ってくるかトホホ。

対する日経ソフなんとかは ○uby 本が付録しているよ…
この雑誌もいいかげんに Python をやったらどうなのだ?と思うんだが。
ま、Windows じゃどっちも使い道が無い言語なのだが。

ネタとして MonoDevelop で WindowsForm を作ってみる。

WindowsForm を散々バカにしてきた私だが。
ネタとして MonoDevelop で WindowsForm を作ってみる。

空の新規ソリューションを作成する。
ソリューションエクスプリーラの参照の所を右クリックして下記メニューを選択。
こんなところまで Visual Studio のパクリかよ。

migimenu

出てきたダイアログから以下をチェック。
System.Windows.Forms
System.Drawing

02

次にプロジェクト部分を右クリックして「追加」「新しいファイル」
空のクラスを選択し OK でコードが書けるようになる。

main_class

コードを書いてみる

using System;
using System.IO;
using System.Drawing;
using System.Windows;
using System.Windows.Forms;

namespace winform_test
{
	/// <summary>
	/// WindowsForm 継承クラス
	/// </summary>
	public class MainWindow: Form
	{
		TextBox textBox;

		public MainWindow()
		{
			this.Size = new Size(320, 320);
			this.Text = "WindowsForm はこんなに酷い";
			// 第一ボタン
			Button button = new Button();
			button.Text = "ポチッと押してちょ!";
			button.Location = new Point(10, 10);
			this.Controls.Add(button);
			button.Click += delegate {
				MessageBox.Show("クリックしたね!", "タイトル");
			};
			// 第二ボタン
			Button button2 = new Button();
			button2.Text = "Dialog";
			button2.Location = new Point(10, 30);
			this.Controls.Add(button2);
			button2.Click += HandleClick;
			// テキストボックス
			textBox = new TextBox();
			textBox.Multiline = true;
			textBox.AcceptsReturn = true;
			textBox.AcceptsTab = true;
			// サイズ変更追従にこんな面倒なことをやる必要がある
			textBox.Location = new Point(0, 40);
			textBox.Size = new Size(320, 280);
			textBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | 
				AnchorStyles.Left | AnchorStyles.Right;
			this.Controls.Add(textBox);
		}

		void HandleClick(object sender, EventArgs e)
		{
			OpenFileDialog dlg = new OpenFileDialog();
			if (dlg.ShowDialog() == DialogResult.OK)
			{
				StreamReader sr = null;
				try
				{
					sr = new StreamReader(dlg.FileName);
					string s = sr.ReadToEnd();
					textBox.Text = s;
				}
				finally
				{
					if (sr != null)
						sr.Close();
				}
			}
		}
	}
	
	public class main_class
	{
		/// <summary>
		/// エントリポイント
		/// </summary>
		public static void Main(string[] args)
		{
			MainWindow win = new MainWindow ();
			Application.Run (win);
		}
	}
}

winform

たったこれだけでも死ぬほど遅い。
Windows は最終的に Win32API だが mono の WindowsForm は全部ソフトウエア描写だから。
Gtk# なら最終的に GTK+ がやってくれるので少しマシ、それにダイアログに違和感バリバリ。

何より絶対位置配置しかできないので重なったりはみ出したりする。
これは意図的にそう書いたけど GTK+ や WPF ではこんなことはおこらないんだよ。
GTK+ でも GtkFixed レイアウタを使うと同じようになるけど。
自分の目で確かめればいいと思うならテーマを色々変えてみれば何を言いたいのかが解る。

同じものを PyGtk で作る。
もちろん GtkHBox, GtkVBox レイアウタを使う。

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

import gtk

class GtkForm(gtk.Window):
    """
        GtkWindow 継承クラス
    """
    def __init__(self):
        gtk.Window.__init__(self)
        self.resize(320, 320)
        # 第一ボタン
        button = gtk.Button()
        button.set_label("ポチッと押してちょ!")
        button.connect("clicked", self.messagebox)
        # 第一ボタン
        button2 = gtk.Button()
        button2.set_label("Dialog")
        button2.connect("clicked", self.opendlg)
        # テキストビュー
        self.textbox = gtk.TextView()
        # パッキング
        vbox = gtk.VBox()
        vbox.pack_start(button, False)
        vbox.pack_start(button2, False)
        vbox.pack_start(self.textbox)
        self.add(vbox)
        self.set_title("画像ビューア")
        self.connect("delete-event", self.on_quit)
        self.show_all()

    def on_quit(self, widget, event=None):
        gtk.main_quit()

    def messagebox(self, widget, event=None):
        dlg = gtk.MessageDialog(self, gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING, 
                                gtk.BUTTONS_OK, "クリックしたね!")
        dlg.set_title("タイトル")  
        r = dlg.run()  
        dlg.destroy()

    def opendlg(self, widget, event=None):
        dlg = gtk.FileChooserDialog(
            buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK))
        r = dlg.run()
        try:
            if r == gtk.RESPONSE_OK:
                f = open(dlg.get_filename())
                self.textbox.get_buffer().set_text(f.read())
                f.close()
        finally:
            dlg.destroy()

if __name__ == "__main__":
    """
        エントリポイント
    """
    w = GtkForm()
    gtk.main()

桁違いに早いし絶対に重なったりはみ出したりしない。
手抜きでスクロールバーを入れていないので小さいテキストファイルで試すのを勧める。

ネタが無いのでちょっと MonoDevelop を使ってみた。
9.04 にしてすぐ入れたのに結局使わなかったもの…