投稿者「sasakima-nao」のアーカイブ

wnck get_application

Ubuntu マシンを AMD 880G と Phenom II X4 955 に変更して一週間。
何もかも早くなったのは当然として終了に 10 秒掛からないのは衝撃である。

しかし Y901x が更に落ちやすくなった…
CPU が 4 コアになったからとしか思えない…

gtk.gdk.threads_init()

を呼ぶと落ちなくなるようだ、もう少し様子見。
マルチスレッドで動いている GStreamer をシングルスレッドで動かしていたから???

だけどコレを呼ぶと dbus による uri 転送でフリーズするんだなコレが。
これは uri 転送方法を変更するか、いっそ多重起動を許すか…
多重起動を許すのは簡単だ、多重起動防止処理を取っ払うだけだもの。

何か参考は無いかと /usr/bin を漁る。
少し違うけど gwibber のコードがおもしろい。

# Don't run again if we are already running
progname = "gwibber"
screen = wnck.screen_get_default()
while gtk.events_pending():
  gtk.main_iteration()
for w in screen.get_windows():
  if w.get_application().get_name() == progname:
    w.activate(int(time.time()))
    w.move_to_workspace(screen.get_active_workspace())
    quit()

そうか、今のワークスペースに移動って処理もあったほうがいいな。
ウインドウが移動するのではなくタスクバーに現れるのね、なるほど。

gwibber も Python 製だったのか。
インデントが滅茶苦茶だ、これでデフォルトアプリかよ…
ついでに、wnck を使うと WARNING が出るんだが…

get_application().get_name() と get_name() で違うんだね。
get_name() だけだとタイトルバー文字列になるんだけど。

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

import gtk
import wnck

screen = wnck.screen_get_default()
while gtk.events_pending():
    gtk.main_iteration()
for w in screen.get_windows():
    print w.get_application().get_name()
    print w.get_name()

さて Y901x はどうしよう、今日はもう寝るけど。

ubuntu C# matome

とりあえず Ubuntu での C# をまとめてみた。
Ubuntu で C# – L’Isola di Niente

-pkg 指定で pkg-config 展開ができるはずなんだが方法が見つからない。
MonoDevelop 使えで済ませようか、とも思うけどインストールするかどうかも迷っている。
というか見ての通りコッソリと Python を勧めているわけでw

とりあえずこんな感じで覚書ページを小分けで移植していこうと思う。

AMD 690G to 880G for Ubuntu

AMD 880G マザーボードを買ってきた、これに Ubuntu 10.10 を入れる。
AMD 690G と Athron64 x2 2.2GHz にそろそろ限界を感じてきたので。
コイツの内蔵グラフィックで fglrx は大丈夫なのかな?

ついでに Phenom II X4 955 と DDR3 4G メモリ。
今まで Duron とかしか買わなかった私なのに 4 コア CPU とはなんてリッチ。
全部で二万円ちょっとだったけど、安くなったもんだ。

三年前のドスパラマシンの中身を全とっかえ、自分で組むのも三年ぶり。
LED 配線のプラスマイナスを間違えた以外は問題なく終了。
余っている HDD に Ubuntu をインストール、これも問題無しで再起動。

流石は CPU パワーが 1.5 倍かつ 4 コア、体感速度も超早くなった。

fglrx は普通に有効になった、標準ドライバもよくできているけど一応。
とにかくコレで動画の CPU 負荷は減るはず。
標準ドライバの時と違ってスクリーンショットのラインが解りにくい…

後はいつものように旧 HDD をスレーブ接続してデータコピー。
Gedit プラグインや Nautilus スクリプト、Opera の設定はコピーだけで使える。

ところで Ubuntu 関連を探すとディレクトリ名変更に変なことしている人が多いけど

コレを off にして F2 キーで普通に変名するだけなんだが…
~.config/user-dirs.dirs も連動して書き換えしてくれるし。

後は必要なアプリを日本語セットアップヘルパと追加と削除から。
Opera を追加と削除にデフォルトで入れてくれないかなぁ…

Opera
Y901x
Gimp
VirtualBox ose
Sylpheed
Ghex
KeepassX
Apache2
PHP
Gjot2
Gnote

再構築完了まで四時間、旧 HDD はそのまんまバックアップになるので一石二鳥。
問題はコピーした VirtualBox 仮想マシンな Vista はアクチが通るかだ。
Vista を買った時に使っていた DVD-R は同じなのでライセンスは間違っていないが。

問題なかった、数値はあまり変わらないけど明らかに快適さが違う。
CPU を 2 に割り当てしたけどタスクマネージャは一つ、何故だろう。
ついでに起動時のサウンドが歪んでいたのも良くなった。

ま、仮想マシン上での Visual Studio が重すぎるのでパワーアップしたんだが。
それと Y901x とかの動画ファイル切り替えで落ちなくなると嬉しいんだが様子見。

やはり Linux もなるべく新しいハードで使わなければ快適にはならないや。
とにかく AMD 880G + SB710 なら Ubuntu 10.10 は問題無いみたい。

よし動画を見まくるぞ!
いや、サイト整理は地味にやっているけどちっとも進まないんで…

clipoli 1.0.0

clipoli を正式公開。
それとトップページのレイアウト変更、ついでに幾つかのアプリを公開終了をした。
vector に放置している奴も公開停止以来を、何を今ごろだが…

コンパイルしないで Blog と同じようにビルドバッチ付きソースコード配布にした。
これでイケそうだったので、一応オンラインヘルプにビルド方法は書いた。
というかソレがやりたいから作ったといっても過言ではないわけで。

アイコンは Windows 7 のデザインに合わせたつもり、XP だとカッチョワルイ。

WindowsForm を使いたくなかったのでバージョン情報はヒントウインドウで。
レイアウタという概念が無い化石 GUI なんて早くサポートを終了してください。
Forms 名前空間を使わないでトレイが使えるようにならないかな。

INI の読み直し機能を付けた、この機能以外は全部 INI でまかなう方向にした。
つまり作者サイトへのランチャも default.ini を開く機能も消せるという凄い仕様…

ソースコードに <summary> も書いた、あんまり意味ネェ。
今気がついたけどコンストラクタの param name 間違えた!次で直そう。
そういえば readme.txt を付けていない…まあいいか、ソースコード配布だし。

とりあえずこんな仕様になった、初版なんだから何だっていいや!
本日はお知らせのみ。

Clipoli 0.0.2

Clipoli で読み込む ini ファイルはどこに置くか。
exe と同じ位置では昔の古い考え方バリバリなアプリになってしまう。
やはり環境変数 %APPDATA% に置くべきだろう。

echo %APPDATA%

と cmd.exe で打てばそれが何なのか解らない人も理解できるだろう。
Opera や Firefox の設定もココにありますね。

ということで書いてみる。
C# では Environment を使わないと環境変数展開は無理みたい、まぁ ini 側はイケるだろう。
SeeMe の設定で sasakima というディレクトリを作るので同じ所に置くように。

string appdata = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "sasakima");
if (!Directory.Exists(appdata))
{
	Directory.CreateDirectory(appdata);
}
appdata = Path.Combine(appdata, "clipoli");
if (!Directory.Exists(appdata))
{
	Directory.CreateDirectory(appdata);
}
appdata = Path.Combine(appdata, "default.ini");
if (!File.Exists(appdata))
{
	string s = "[Launcher]\r\ndefault.ini を開く=notepad %APPDATA%\\sasakima\\clipoli\\default.in";
	var sw = new StreamWriter(appdata);
	sw.Write(s);
	sw.Close();
}
var app = new TrayIcon(appdata);
Application.Run();

んでコンストラクタ引数に default.ini 位置を渡してコレを読み込むと。
こんな感じでいいかな、やってみる。

Process.Start じゃ環境変数の %APPDATA% を展開してくれない…

引数を半角スペースではなく別オーバーロード引数で渡さないと駄目みたい…

Linux に慣れすぎたのでコマンドラインと GUI の区別が付かなくなってしまった。
だって Linux はどちらも同じだもん、Windows では別物なんだよね。

えっと、%APPDATA% は自前で展開するしかないみたいなので Format するか。
コマンドを引数と分離するには、とりあえずファイル名に使えない | でも利用してみよう。

string appdata = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "sasakima");
if (!Directory.Exists(appdata))
{
	Directory.CreateDirectory(appdata);
}
appdata = Path.Combine(appdata, "clipoli");
if (!Directory.Exists(appdata))
{
	Directory.CreateDirectory(appdata);
}
appdata = Path.Combine(appdata, "default.ini");
if (!File.Exists(appdata))
{
	string s = "[Launcher]\r\ndefault.ini を開く=notepad|{0}";
	s = string.Format(s, appdata);
	var sw = new StreamWriter(appdata);
	sw.Write(s);
	sw.Close();
}
var app = new TrayIcon(appdata);
Application.Run();

これで

private void on_launcher(object sender, EventArgs e)
{
	try
	{
		string s = (sender as ToolStripMenuItem).Name;// MessageBox.Show(s);
		int lPos = s.IndexOf('|');
		if (lPos == -1)
		{
			System.Diagnostics.Process.Start(s);
		}
		else
		{
			string name = s.Substring(0, lPos);
			string args = s.Substring(lPos + 1, s.Length - lPos - 1);
			System.Diagnostics.Process.Start(name, args);
		}
	}
	catch (Exception ex)
	{
		MessageBox.Show(ex.Message);
	}
}

と分離して Process.Start する、意外に面倒な処理になっちまったなぁ。
後は多重起動防止させて、えっとそれから…
あぁアイコンを作る時間も無かった、つか十二時過ぎた、とりあえずバックアップ。

clipoli002.zip

今日は日経平均株価は上がってくれるだろうか…
木金で今月の稼ぎが吹っ飛んでもーたんだが…