SAKAI Masahiro - さかい::進捗報告::2003-05-08 Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
= 進捗報告 (2003-05-08)
慶應義塾大学 総合政策学部 3年
酒井 政裕 <sakai at tom.sfc.keio.ac.jp>
= 進捗報告 (2003-05-08)
* What is GNOME?
* GNOME2のCygwinへの移植
* ActiveScript
= What is GNOME?
* GNU Network Object Model Environment
* 統合デスクトップ環境
* gtk+を使ったGUI
* CORBAに基づいたコンポーネント技術
= gtk+を使ったGUI
gtk+
* ((<URL:http://www.gtk.org/>))
* 元々Gimpのために作られたGUIツールキット
* C言語で書かれている
* 多くの言語向けのバインディングが存在
= CORBAに基づいたコンポーネント技術
* ORBit2
* Bonobo Activation
* Bonobo
= すること
(1) GNOME2のCygwin への移植
(2) WindowsでIActiveScript周りに相当するものを実装
= (1) Cygwinへの移植
基本的な作業は既にある程度終わっている。
(Nautilusも動く!!)
((<URL:http://web.sfc.keio.ac.jp/~sakai/cygwin/>))
= スクリーンショット
* ((<GImageView|URL:http://web.sfc.keio.ac.jp/~sakai/cygwin/screenshots/2.jpeg>))
* ((<Nautilus|URL:http://web.sfc.keio.ac.jp/~sakai/cygwin/screenshots/nautilus.jpeg>))
= 移植作業
* configure.inでAC_LIBTOOL_WIN32_DLLを呼び出す
* libtoolのオプションに-no-undefinedを追加
* Cygwin固有の変更
* その他
= AC_LIBTOOL_WIN32_DLL
DLLを作りたい場合は、AC_PROG_LIBTOOL/AM_PROG_LIBTOOLを呼び出す前に呼び出すことになっている。
-no-undefinedと両方指定しなくてはいけないのは冗長に思える。
= -no-undefined
このオプションを指定すると、libtoolはすべてのシンボルが*.loファイルまたは-lで指定されるライブラリで定義されているとして振舞う。
ELFの*.so(shared object)ではこのような制約はないが、
Win32のPE-COFFのDLLは実行ファイルと同様に、
リンク時にすべてのシンボルが解決される必要がある。
= -no-undefined (その2)
libtoolが自動的に検出してくれればこんなオプションは不要なのに……
<lxo> ideally libtool should go ahead and try to create a shared
library on such systems, and fall back to a static library if the
shared linking fails, but I'm not sure all such systems will actually
give an error status, and not just create a broken shared library
= Cygwin固有の変更
例: NTSec(NT Security)等を使用する設定になっていないと、UNIXのようなパーミッションを持てないので、パーミッションをチェックするようなコードが問題になる。
対処法:
(1) そのようなコードをCygwinでは無効化する
(2) NTSec等を利用できるか調べて、利用できるときだけチェックする
後者のコードは本家に取り込んでもらう際に説明するのが面倒なので、
とりあえず前者の方針で。
= パッチのStatus (その1)
: 取り込まれた
libglade, GtkGLArea, librsvg, linc, libIDL, libwnck, startup-notification, metacity, ORBit2, bonobo-activation, libbonobo, gnome-vfs, libbonoboui, libgnome, libgnomeui, libgnomeprint, libgnomeprintui, eel, gal
: 部分的に取り込まれた
GConf, Nautilus
= パッチのStatus (その2)
: 交渉中(?)
gnome-utils
: 送ったけどまだ反応がない (T_T)
audiofile, esound, gnome-themes, gnome-desktop, gnome-panel, gnome-session
= パッチのStatus (その3)
: 残り
glib, atk, fontconfig, pango, gtk+, gtkmm, gtk-engines, gtk-thinice-engine, gail, libgnome, libsoup, at-spi, control-center, gtkhtml
= 今後の予定
既にだいぶパッチを取り込んでもらったので、
残りのパッチやまだパッチを作っていないパッケージについて作業する。
= (2) ActiveScript
目標その2:
WindowsでのActiveScriptingに相当するものをGNOME2に実装する。
= What is ActiveScript?
* Windows Script Interfaces
* スクリプティングのための汎用インターフェース
* COMベース
= 対応関係
COM | Bonobo/CORBA
---------------------------------
IUnknown | Bonobo::Unknown
IDispatch | (存在しない)
IActiveScript | (存在しない)
= IUnknown / Bonobo::Unknown
* リファレンスカウンタの管理
* 他のインターフェースのクエリー
= IUnknown
interface IUnknown
{
typedef [unique] IUnknown *LPUNKNOWN;
HRESULT QueryInterface(
[in] REFIID riid,
[out, iid_id(riid)] void* ppvObject);
ULONG AddRef();
ULONG Release();
};
= Bonobo:::Unknown
module Bonobo {
interface Unknown {
void ref ();
void unref ();
Unknown queryInterface (in string repoid);
};
};
= IDispatch
汎用のインターフェース。スクリプト言語からは通常このインターフェースを使って、オブジェクトを操作する。
interface IDispatch : IUnknown
{
...
HRESULT GetIDsOfNames(
[in] REFIID riid,
[in, size_is(cNames)] LPOLESTR *rgszNames,
[in] UINT cNames,
[in] LCID lcid,
[out, size_is(cNames)] DISPID *rgDispId);
HRESULT Invoke(
[in] DISPID dispIdMember,
[in] REFIID riid,
[in] LCID lcid,
[in] WORD wFlags,
[in, out] DISPPARAMS *pDispParams,
[out] VARIANT *pVarResult,
[out] EXCEPINFO *pExcepInfo,
[out] UINT *puArgErr);
...
}
= IActiveScriptの基本的な使い方
* IActiveScriptSiteを実装したオブジェクトを用意しておく
* CoCreateInstanceでスクリプトエンジンを得る
* IActiveScript::SetScriptSiteで、IActiveScriptSiteを実装したオブジェクトを、スクリプトエンジンにセット
* トップレベルオブジェクトの名前をIActiveScript::AddNamedItemで追加。ここで追加した名前が参照されると、実行時にIActiveScriptSite::GetItemInfoが呼ばれる。
* スクリプトのロード
* IPersist*
* IActiveScriptParse
= 今後の予定
Bonoboを介してRubyを使うコードを実験的に書いてみる予定。
= 参考文献
* Rubyを256倍使うための本 邪道編
慶應義塾大学 総合政策学部 3年
酒井 政裕 <sakai at tom.sfc.keio.ac.jp>
= 進捗報告 (2003-05-08)
* What is GNOME?
* GNOME2のCygwinへの移植
* ActiveScript
= What is GNOME?
* GNU Network Object Model Environment
* 統合デスクトップ環境
* gtk+を使ったGUI
* CORBAに基づいたコンポーネント技術
= gtk+を使ったGUI
gtk+
* ((<URL:http://www.gtk.org/>))
* 元々Gimpのために作られたGUIツールキット
* C言語で書かれている
* 多くの言語向けのバインディングが存在
= CORBAに基づいたコンポーネント技術
* ORBit2
* Bonobo Activation
* Bonobo
= すること
(1) GNOME2のCygwin への移植
(2) WindowsでIActiveScript周りに相当するものを実装
= (1) Cygwinへの移植
基本的な作業は既にある程度終わっている。
(Nautilusも動く!!)
((<URL:http://web.sfc.keio.ac.jp/~sakai/cygwin/>))
= スクリーンショット
* ((<GImageView|URL:http://web.sfc.keio.ac.jp/~sakai/cygwin/screenshots/2.jpeg>))
* ((<Nautilus|URL:http://web.sfc.keio.ac.jp/~sakai/cygwin/screenshots/nautilus.jpeg>))
= 移植作業
* configure.inでAC_LIBTOOL_WIN32_DLLを呼び出す
* libtoolのオプションに-no-undefinedを追加
* Cygwin固有の変更
* その他
= AC_LIBTOOL_WIN32_DLL
DLLを作りたい場合は、AC_PROG_LIBTOOL/AM_PROG_LIBTOOLを呼び出す前に呼び出すことになっている。
-no-undefinedと両方指定しなくてはいけないのは冗長に思える。
= -no-undefined
このオプションを指定すると、libtoolはすべてのシンボルが*.loファイルまたは-lで指定されるライブラリで定義されているとして振舞う。
ELFの*.so(shared object)ではこのような制約はないが、
Win32のPE-COFFのDLLは実行ファイルと同様に、
リンク時にすべてのシンボルが解決される必要がある。
= -no-undefined (その2)
libtoolが自動的に検出してくれればこんなオプションは不要なのに……
<lxo> ideally libtool should go ahead and try to create a shared
library on such systems, and fall back to a static library if the
shared linking fails, but I'm not sure all such systems will actually
give an error status, and not just create a broken shared library
= Cygwin固有の変更
例: NTSec(NT Security)等を使用する設定になっていないと、UNIXのようなパーミッションを持てないので、パーミッションをチェックするようなコードが問題になる。
対処法:
(1) そのようなコードをCygwinでは無効化する
(2) NTSec等を利用できるか調べて、利用できるときだけチェックする
後者のコードは本家に取り込んでもらう際に説明するのが面倒なので、
とりあえず前者の方針で。
= パッチのStatus (その1)
: 取り込まれた
libglade, GtkGLArea, librsvg, linc, libIDL, libwnck, startup-notification, metacity, ORBit2, bonobo-activation, libbonobo, gnome-vfs, libbonoboui, libgnome, libgnomeui, libgnomeprint, libgnomeprintui, eel, gal
: 部分的に取り込まれた
GConf, Nautilus
= パッチのStatus (その2)
: 交渉中(?)
gnome-utils
: 送ったけどまだ反応がない (T_T)
audiofile, esound, gnome-themes, gnome-desktop, gnome-panel, gnome-session
= パッチのStatus (その3)
: 残り
glib, atk, fontconfig, pango, gtk+, gtkmm, gtk-engines, gtk-thinice-engine, gail, libgnome, libsoup, at-spi, control-center, gtkhtml
= 今後の予定
既にだいぶパッチを取り込んでもらったので、
残りのパッチやまだパッチを作っていないパッケージについて作業する。
= (2) ActiveScript
目標その2:
WindowsでのActiveScriptingに相当するものをGNOME2に実装する。
= What is ActiveScript?
* Windows Script Interfaces
* スクリプティングのための汎用インターフェース
* COMベース
= 対応関係
COM | Bonobo/CORBA
---------------------------------
IUnknown | Bonobo::Unknown
IDispatch | (存在しない)
IActiveScript | (存在しない)
= IUnknown / Bonobo::Unknown
* リファレンスカウンタの管理
* 他のインターフェースのクエリー
= IUnknown
interface IUnknown
{
typedef [unique] IUnknown *LPUNKNOWN;
HRESULT QueryInterface(
[in] REFIID riid,
[out, iid_id(riid)] void* ppvObject);
ULONG AddRef();
ULONG Release();
};
= Bonobo:::Unknown
module Bonobo {
interface Unknown {
void ref ();
void unref ();
Unknown queryInterface (in string repoid);
};
};
= IDispatch
汎用のインターフェース。スクリプト言語からは通常このインターフェースを使って、オブジェクトを操作する。
interface IDispatch : IUnknown
{
...
HRESULT GetIDsOfNames(
[in] REFIID riid,
[in, size_is(cNames)] LPOLESTR *rgszNames,
[in] UINT cNames,
[in] LCID lcid,
[out, size_is(cNames)] DISPID *rgDispId);
HRESULT Invoke(
[in] DISPID dispIdMember,
[in] REFIID riid,
[in] LCID lcid,
[in] WORD wFlags,
[in, out] DISPPARAMS *pDispParams,
[out] VARIANT *pVarResult,
[out] EXCEPINFO *pExcepInfo,
[out] UINT *puArgErr);
...
}
= IActiveScriptの基本的な使い方
* IActiveScriptSiteを実装したオブジェクトを用意しておく
* CoCreateInstanceでスクリプトエンジンを得る
* IActiveScript::SetScriptSiteで、IActiveScriptSiteを実装したオブジェクトを、スクリプトエンジンにセット
* トップレベルオブジェクトの名前をIActiveScript::AddNamedItemで追加。ここで追加した名前が参照されると、実行時にIActiveScriptSite::GetItemInfoが呼ばれる。
* スクリプトのロード
* IPersist*
* IActiveScriptParse
= 今後の予定
Bonoboを介してRubyを使うコードを実験的に書いてみる予定。
= 参考文献
* Rubyを256倍使うための本 邪道編