Linux で GUI アプリケーションをつくる

自分で使っている OS でちょいアプリをつくれると何かと便利です。 この手のは多くはコマンドラインですむことが多いので、シェルとかスクリプト系の言語でぱらっとかいて終われますが(このへんの環境がそろっているのが UNIX のいいところ)、たまに GUI も使いたいときがあります。 たまのことなので、あんまり学習コストをかけたくないので、知ってるものをくみあわせて、、ってことで mono + C# + GTK でためしにやってみました。

mono というのは、Microsoft の .NET Freamwork のオープンソース実装です。

Mono (ソフトウェア) – Wikipedia

Monoは、ノベルの主導で開発されている、Ecma標準に準じた.NET Framework互換の環境を実現するためのオープンソースソフトウェア群、 またそのプロジェクト名である。共通言語基盤 (CLI) の実装やC#コンパイラなどが含まれる。Monoはマルチプラットフォームであり、LinuxFreeBSDUNIXMac OS XSolarisWindowsで動作する。

これをつかうと Linux 上で C# でアプリがかけます。 おまけに、Linux で標準的に使われている画面描画ライブラリの GTK とバインディングできるためきれいに、違和感なくウインドウが出せます。

Java でもいいんですけどね、、ちょっと Linux で JRE 設定するのフォントとか面倒なのでさけぎみです。

mono は JIT も持っているので、ネイティブコードでうごいてくれるみたいで、なかなかさくさく動きますね。  Linux で有名な、F-Spot という画像管理ソフトも mono でできているみたいです。

mono には Mono Develop という統合開発環境があります。 ためしにこれをいれてみました。

mono01

まるで Visual Studio ですが(VS のプロジェクトも読めます)、ベースは Sharp Develop のようです。 カーソルの動きが違ったり、キーアサインが違ったりしますが違和感はあまりなく操作できます。 (1.0 ではまだデバッグはできないようです。現在 2.0 アルファ中)

よーわからんかったですが、ソリューション作成しようとしたら面白いものを発見。

mono03

おー、Glide ともバインディングできるらしい。 Glide で XML で画面とイベント定義してそれを C# とバインディングして GTK アプリがつくれるようです。

[tegaki]やってやるぜ[/tegaki]

Mono Develop 自体にも UI デザイナーついているのですが、Glide の場合は Glide インターフェースデザイナを使います。 まうすでぺたぺたコントロールはりつけて、XML を作成。

mono02

ここで、コントロールの名前とか、イベント名とかを定義します。

で、できたら C# でコーディング。 VB.NET とかもいけそうです。 🙂

GTK 系を using して、たとえばメンバに さっき Glide でつくったコントロールを定義します。

using System;
using System.Xml;
using Gtk;
using Glade;
using Yedda;
 
public class GladeApp
{
    
    [Widget] Gtk.TextView textview1;

こんな感じ。 でもって、コンストラクタとかで Glide の XML を読み込みます。 GTK のお約束は、IDE がかいてくれます。

public GladeApp (string[] args) 
{
    Application.Init ();
    Glade.XML gxml = new Glade.XML (null, "gui.glade", "window1", null);
    gxml.Autoconnect (this);
    Application.Run ();
}

Autoconnect(this) が妙で、これで Glide のコントロール・イベントと C# をバンディングしてくれます。 ここで名前食い違うと間違うとぬるりするので注意のこと。 🙂

イベントハンドラは以下のように。

private void OnButton1Click(object sender, EventArgs e)
{
    TextBuffer buffer = textview1.Buffer;
    buffer.Text = "TEST!!";
}

各 GTK コントロールの操作の仕方は「のり」もしくはマニュアルで。。(笑) ちなみに、ためしていませんが System.Windows.Forms も動くようです。

で、実行。

mono04

お~うごいた~。

みえないとおもいますが、twitter にログインして XML もってきて表示しています。 よくみるとスクロールペインとかもちゃんど動いていますね。 また、C# の twitter ライブラリがそのまま動きました。

.NET のクラスライブラリの使い勝手がそのまま Linux でもつかえるので、.NET 知っている人には便利ですね~。 GTK も簡単に呼べるので、画面も GNOME 的なアプリが簡単につくれます。

あまり時間が無くておおくはさわっていませんが、何か不具合あっても知恵と勇気でのりきれるレベルの完成度と感じました。 UNIX でちょい GUI アプリつくりたいときには良いかもしれません。 🙂

裏からいろいろなものが

経験的に PC 部品で壊れやすいのは、光学ドライブと電源。 どちらも物理的に動くものが入っているので、そのうち壊れるみたいですね。 てなわけで、メイン PC の DVD ドライブがどーも調子が悪いので交換しました。 🙂

現在のメインマシーン。 Ubuntu で動作しております。 基本的に、ブログ書きと Windows アプリ作成以外はこれで行っております。

黒キューブなのにドライブが白でだっさい(笑)

img_0692

エアダスターきれててちょっとショック。。 いい機会なのでお掃除もかねるであります。

img_0693

ファンのほこりはとりましょう。 で新ドライブ換装!

img_0696

うむ。 かっこいい。 満足じゃ。 🙂

SP3 適応済みの Windows XP も入手。 DSP 版でたばっかり?、タイムリー。

img_0698

さて、実はメイン PC はいつもは机の下にいるのですが、ドライブつけるためにがさごそ机の下にもぐったら、裏からいろいろなものがでてきました。。

img_0699

昔の携帯とか、mini sd のアダプタとか、、ヘッドフォーンのふくろとか、すすきの祭りのチケットとか。。 なくした爪切りがでてきました!!

3ヶ月に一回は潜ってみようと思った本日でした。 😉

最近の衝撃事件

うーん、どうも忙しいとだめっすね。 無理にブログのネタとか考えちゃうわけですが、こういうときは自然体で行くのが一番、ていうことでテーマもなくつらつらと。 ええと、じゃー最近起こった衝撃的なことを。 🙂

うちのアパートの下には、住民用の駐車場があります。 事件の時間は、4:50。早朝。

[tegaki]ぷーーー[/tegaki]

けたたましいクラクションの音が。 なんぞそれ、とねぼけながらおもいつつ、「あ~、だれか変な車のとめかたして、車でれなくなったんだな、、とうつらうつら。

5分経過。 ・・・鳴りっぱなし。 ねばるなー。

10分経過。 ・・・鳴りっぱなし。 何かおかしい。。

なにか常識を逸している早朝の騒音に、アパート中の住民が起き出す音がきこえました。

ベランダから顔をだして下をのぞいてみると、既に不審に思い駐車場までいっているひとが。 こいつだ、こいつ。 と車をさして、ベランダから顔をだしている人たちにアピール。 なんと、その車、無人。

どーも、クラクションが壊れたらしく鳴りっぱなしに。。 イモビライザーっていうんですか? ぼくは車のことがまるで分からないのであれですが(なんたって免許をとったのが30すぎてからだ)、どーもその手の警報ではなくって、単純に壊れたようです。

ややしばらく鳴り続け、持ち主現れ、JAF の人が到着した模様。 ボンネット開けるも解消されず。

お客様の中に、自動車整備士の免許をお持ちの方はいらっしゃいませんか?

と、お医者さまを探すスッチーさんのまねをしてみたかったですが、みんな殺気立っている中で言う勇気はありませんでした(笑)

結局、鳴りっぱなしでレッカーされていったようでした。。 早朝 50分間クラクション鳴りっぱなしの悲劇的な事件、。

自分って無力だなぁとおもいましたが、きっと専門家ならすぐなおしちゃうんだろーなー。 後日談で原因は「接触」とのことでしたが(なんの接触だったかまでは不明)、素人かんがえだと、バッテリーを抜くとか、ハンドルをはずすとか? ・・・まったくわからんす。。

PHP のちょいなおしなんて比じゃない、高度な知識と手先をつかう難しい作業に違いありません。

なんもしらないひとの、分からないなりの知識って笑えると思うので、ぼくの車について知っていることをいっぱいかいてみます。 200% 間違っている確信がある。(笑)

車といえばエンジン。 ピストンがついてるやつっすね。。 ピストンの数が気筒数?その中にはいる容量が排気量? 昔、F1 は V12 っていってた気がする。

4サイクルってのが、吸入圧縮膨張排気で、ガソリンを圧縮してプラグで点火? これは技術家庭の時間にならったなー。 でもって、この発火点とかがマイコン制御になっていて、ROM 書き換えるとなんかかえれるって友達がいってた。

おでこのくるまは、オデッセーではない。 間違えがちなので要注意。(←関係ない

エムズライフ by みなみ、のくるまはライフである。(←豆知識

ターボは、走っている速度で空気をすいこんで、強制的にエンジンに酸素をいっぱいとりいれて、大爆発?

2サイクルは、YAMAHA のバイクで、えっと、後ろにオイルをかけれたりする?(←わけわかんない昔の記憶) バイクといえば TRX である。(←Masayan さんのところで覚えた

バイクで知っている車種は、、TRX と、ハヤブサ?(なんか速い?)、ZZR?(絶対違いそう)、ハーレー(ぼぼぼぼって鳴る)、ベンリー50(誰か乗ってた)、えっとあとなんだっけ、50cc のクラッチついてるほんだのやつ。。

うーんと、殿様スタイル。 ちょっぱー。 (←急に出てきた言葉を言ってみた

・・・きっとめちゃあほやな。 まいっか、笑ってください。(笑)

ええと、、、気を取り直して。 PC ねたでも。。

なにかいろいろつくりたいものがあるのですが、お疲れ気味でひとさまに使っていただけるようなものはありません。。

ぴこん、と突如思いつき、実質1時間くらいでできたのが「しょこたんぶろぐ screenlets」。

syokotan

しょこたんぶろぐの RSS を定期観測して、その中から画像を抽出してデスクトップがジェットとして表示するものです。 画面右、はちゅねさんの上のねこちゃんがそれで、左の画像達は取得してきて順次表示用にキャッシュしているものです。 最新の RSS に含まれる画像の中でぱたぱた1分おきに変わっていきます。

画像ぴこっとおしたら、その URL にとんでくとか、こういう Vista とか Google ガジェット芸能人とかの公式ブログで配布したらおもしろいのかな~と思いついてつくりました。 まぁこれは勝手に作っているもので(おまけに UNIX 用だ)、配布なんかできませんが、しょこたんみたいな更新が多いブログではなかなかいいかもです。 🙂

あと関係ないですが衝撃的だったのが、オープンソースメディアプレイヤーの Songbird がアップデートされ「白く」なったことです。。

songbird30

う~、黒い鳥さんが好きだったのにしろくなっちまいました。。 もちろんテーマでかえれるのは知っていますが、サイトのトレードカラーも白くなってしまい、ちょっとしょんぼり。 なんかクローズトソースの商用メディアプレイアーに対する挑戦ぽいソフトで、ダークカラーがお似合いだったのですが、ちょっと残念です(笑)

しかしながらパフォーマンスもチューニングされてきて速くなってきているので、なかなか良いですね!

てなわけで、つれずれでした。。 おしまい、。 🙂

あ、もーいっこあった! このブルーチーズがやばいくらい強烈だった!! ぼくはだいじょうぶだけど、ふつーのひとはだめにちがいない。。

DVC00045