2009年2月27日金曜日

Mac OS X で Glade のためのメモ

GTK+ で開発するなら,Glade でしょってことでインストールしてみた.(じつは,Glade 使ったこと無いけどwww)起動画面はこんなかんじ.


とはいっても,メニューのキーボードアクセラレータのキー表示が化けたり,かなーり不完全.Mac OS X 用の Glade パッケージをつくりたいという猛者のために,ここにメモっておくよ.GTK+ OS X Framework インストール済みの環境なら大丈夫だと思う.(いろいろやったんで,実際ここに書いたことだけじゃ足りないかもしれない…….)
$ cd ~
$ curl -O http://github.com/rhult/gtk-osx-build/raw/master/gtk-osx-build-setup.sh
$ sh gtk-osx-build-setup.sh
$ JHB=fw-10.4 bin/jhbuild bootstrap
$ JHB=fw-10.4 bin/jhbuild shell
(ここから開発用シェルに切り替わる.)
$ curl -O http://ftp.gnome.org/pub/GNOME/sources/glade3/3.1/glade3-3.1.5.tar.gz
$ tar -vxzf glade3-3.1.5.tar.gz
$ cd glade3-3.1.5
(ここでデフォルトフォントに日本語フォントを指定するようにソースを書き換える.)
$ vim src/main.c
/* Pass NULL here since we parsed the gtk+ args already...
* from this point on we need a DISPLAY variable to be set.
*/
gtk_init (NULL, NULL);
/* 次の行を追加する. */
gtk_settings_set_string_property (gtk_settings_get_default (), "gtk-font-name", "Hiragino Kaku Gothic Pro 13", NULL);
$ ./configure
$ make
$ make check
$ sudo make install
$ glade-3


参考文献:
GNOME Live!: GTK+/OSX

Mac OS X でのファイルをダウンロードするコマンド

wget や fetch の Mac OS X における代替コマンドってかんじ.
$ curl -O URL

GTK+ OS X Framework で日本語を表示する方法

林檎生活100: GTK+ on Mac OS X 入門で GTK+ OS X Framework を紹介したんだよね.そのエントリのコメントに,デフォだと日本語表示できないのでこうやったらできますよっていうのを教えてもらった.その解決策は,GTK+ on OS Xで日本語を表示するにはにある.

それを参考にして,別の解決策を考えたのでそれも紹介しとこうと思う.

まず,なぜ日本語が表示できないかというと,デフォルトのフォントが Lucida Grande 12 になってるからみたい.

なので,デフォルトのフォントを変更するようにソースを書き換える.デフォルトのセッティングを取得して,デフォルトのフォントを「ヒラギノ 角ゴ Pro」にする.Mac OS X の UI で使われているフォントのサイズが13ptみたいなので,サイズはそれにあわせてみた.
#include <gtk/gtk.h>

int
main (int argc, char **argv)
{
GtkWidget *window;
GtkWidget *label;
GtkSettings *settings;

gtk_init (&argc, &argv);

settings = gtk_settings_get_default ();
gtk_settings_set_string_property (settings, "gtk-font-name", "Hiragino Kaku Gothic Pro 13", NULL);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show_all (window);

/* Add your widgets to the window here. */
label = gtk_label_new ("こんにちは,世界!");
gtk_container_add (GTK_CONTAINER (window), label);
gtk_widget_show (label);

/* Run the main loop. */
gtk_main ();

return 0;
}

これで,日本語が表示できるようになる.


ほかの環境のことを考えると,フォントがあるかチェックしたり,OS 判別したり,ロケールにあわせたりすべきなんだろうけど,その方法がよくわかんなかったので,とりあえずベタ書き.

2009年2月26日木曜日

GTK+ on Mac OS X 入門

GTK+ が Mac OS X の X11 上じゃなくて,Quartz 上で使えるようになった.GTK+ on OSX から,GTK+ OS X Framework をダウンロードしよう♪


使い方はこんなかんじ.

1. Download Framework をクリックしてダウンロード.

2. パッケージをインストール.

3. Xcode を起動して,新規プロジェクトから GTK+ Application を選択してプロジェクトを作成



最近 GTK+ を使ってないので,全然覚えてないので正確性に欠けそうだが,とりあえず Hello, world! っぽいものをつくろう.デフォルトの状態でコンパイルするとウィンドウがひとつ表示されるだけのコードが書かれてるので,ウィンドウに Hello, world! と書かれたラベルを表示することにする.

と,その前に,main.c の内容についてざっと説明する.いかにも,C というかんじのプログラムであることは,なんとなくわかってもらえるかなぁと思う.(Win32API とか C のプログラムに見えなくなってくるからねw)#include の行はおまじないwということで,GTK+ を使うときにはこうやって書く必要がある.main 関数の定義は,C とまったく同じなので問題ないよね.GtkWidget 型ってなんじゃって思うかもしれないけど,これはウィンドウやボタン,ラベルなどの部品のための型なんだな.まぁ,こういう Gtk~ 型がいろいろと定義されてるんだよね.C の FILE 型みたいなもんで,実体は構造体だったりする.いわゆる隠蔽(カプセル化)の手法.gtk_init() は,おまじ……といいたいところだが,まあ初期化して,GTK+ 向けの引数を処理してくれるらしい.次の3行は,ウィンドウを作成して,ウィンドウが消されたらプログラムを終了するようにして,ウィンドウを表示するという意味.gtk_main() でマウスクリックやキーボード入力のイベントを待ち受ける状態になる.というかんじ.
#include <gtk/gtk.h>

int
main (int argc, char **argv)
{
GtkWidget *window;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show_all (window);

/* Add your widgets to the window here. */

/* Run the main loop. */
gtk_main ();

return 0;
}

これを次のように書き換えよう.ラベル変数を宣言して,ラベルを作成して,ウィンドウのコンテナに追加して,ラベルを表示する.なんとなく,わかってもらえるだろうか.
#include <gtk/gtk.h>

int
main (int argc, char **argv)
{
GtkWidget *window;
GtkWidget *label;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show_all (window);

/* Add your widgets to the window here. */
label = gtk_label_new ("Hello, world!");
gtk_container_add (GTK_CONTAINER (window), label);
gtk_widget_show (label);

/* Run the main loop. */
gtk_main ();

return 0;
}

これで,コンパイルして実行すると,Hello, world! という文字列が表示されたウィンドウが表示されるはずだ.

GTK+ の基本的なプログラミングは,部品 (GtkWidget) を作成して,部品のシグナル(マウスクリックなどのイベントによって生じる.)に関数を指定して,部品をコンテナに入れて(パッキング),表示して,イベント待ちをするってかんじ.

C で GUI プログラミングをするにはもってこいだと思う.大学の課題で,GUI プログラミングの課題が出たら,Xlib や Win32API で組むよりは,GTK+ で組んだ方がだいぶ楽だと個人的には思う.(実際のところ,僕は Win32API でプログラムを組むことが多かったがw)もしくは,GLUT という選択肢もある.ボタンやダイアログを使うなら GTK+ で,画像表示だけなら GLUT ってのがいいのかな.普通の GTK+ なら,OpenGL を中に表示させるライブラリもあるんだけど,ちょっとこの Mac OS X 版で使えるかどうかは不明.だれか教えてください(*- -)(*_ _)

追記(2009年2月26日):
コメントに,日本語の文字列の表示の仕方の説明をいただいたたので紹介.どうやら,そのままでは日本語フォントが設定されてなくて日本語の文字列が表示できないのだ.GTK+ on OS Xで日本語を表示するにはに方法が説明されているので参考にしてね♪

参考文献:
GTK+ 2.0 Tutorial
GTK+ 2.0 チュートリアル (2003-01-24版)

2009年2月21日土曜日

読解を助ける Wiki みたいなのがあったらいいなぁ

と思った.いま,数学書を読んでるんだけど,僕の馬鹿頭では,理解できないことが多すぎて,なかなか読み進まなかったりする.本質的に知識が足りないというのはもちろんだが,すこし言ってもらえればわかる程度のことで,ほかの本を読んだり,ググったりするのは面倒だ.

なので,読解を助ける Wiki みたいなのが,あったらいいなぁと思う.基本的なシステムは,Wiki で実現できそうだ.本ごとにページをつくって,そこにページ(行数もかなぁ.)とわからないことを書く.誰かが,それについて解答する.それを共通の知識として,Wiki に保存しておく.

こうすれば,同じ本を読む人が,ここがわからないなぁって思ったときに,そこの情報を調べればわかるかもしれない.わからなければ,そこに書けばいいし,書かれてないことは,あまりにも当然すぎることなのかもしれない.まあ,一言二言で済むのであれば,書いておいた方がいい情報だとは思うけどね.

ということで,こういう Wiki があったらどう?

2009年2月11日水曜日

ZIP ファイルにパスワードを付ける

Mac OS X でパスワード付き ZIP ファイルをつくる方法について.

ZIP ファイルをつくるのは,対象となるファイルやフォルダ上でコンテキストメニューを開いて”○○○”を圧縮を選択するだけなのは,知っていると思う.じゃー,パスワード付き ZIP ファイルはどうやってつくるのかというと,この方法で ZIP ファイルを作成しておいて,ターミナルからパスワードを付加するのだ.

その方法はこんなかんじ.
$ zipcloak sample.zip

あとは,設定したいパスワードを入力するように指示されるので,そこに入力すればいい.これでパスワードが設定された ZIP ファイルになる.ただし,標準のアーカイブユーティリティでは解凍できないため,StuffIt Expander などを使うようにしよう.まぁ,unzip コマンドで解凍してもいいと思うけどね.