Author Archives: SUNAGA Takahiro

About the Author: SUNAGA Takahiro
Webmaster of sunagae.net 須永 高浩 / SUNAGA Takahiro スナガラボ株式会社 代表取締役社長
Author Website: http://sunagae.net
Permalink to single post

[gentoo] Firefox 11.0のコンパイルできなかった

emergeすると謎のinternal compiler error:

# emerge -av firefox

(・・・中略・・・)

x86_64-pc-linux-gnu-g++ -o SpdySession.o -c -I../../../dist/stl_wrappers -I../../../dist/system_wrappers -include /var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/config/gcc_hidden.h -DMOZILLA_INTERNAL_API -D_IMPL_NS_COM -DEXPORT_XPT_API -DEXPORT_XPTC_API -D_IMPL_NS_GFX -D_IMPL_NS_WIDGET -DIMPL_XREAPI -DIMPL_NS_NET -DIMPL_THEBES  -DSTATIC_EXPORTABLE_JS_API -DOSTYPE=\”Linux3.2\” -DOSARCH=Linux -DEXCLUDE_SKIA_DEPENDENCIES  -DOS_LINUX=1 -DOS_POSIX=1  -DIMPL_NS_NET -I/var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/netwerk/protocol/http/../../base/src -I/var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/xpcom/ds -I/var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/content/base/src -I/var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/content/events/src  -I/var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/ipc/chromium/src -I/var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/ipc/glue -I../../../ipc/ipdl/_ipdlheaders  -I/var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/netwerk/protocol/http -I. -I../../../dist/include -I../../../dist/include/nsprpub  -I/usr/include/nspr -I/usr/include/nss      -fPIC -fno-rtti -Wall -Wpointer-arith -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -Wcast-align -Wno-invalid-offsetof -Wno-variadic-macros -Werror=return-type -pipe -march=core2 -mtune=core2 -mno-avx -fno-exceptions -fno-strict-aliasing -fshort-wchar -pthread -pipe -DNDEBUG -DTRIMMED -g -Os -freorder-blocks  -fomit-frame-pointer   -DMOZILLA_CLIENT -include ../../../mozilla-config.h -MD -MF .deps/SpdySession.pp /var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/netwerk/protocol/http/SpdySession.cpp
In file included from ../../../dist/include/nsAutoPtr.h:48,
from ../../../dist/include/gfxPattern.h:46,
from ../../../dist/include/IPC/IPCMessageUtils.h:54,
from ../../../ipc/ipdl/_ipdlheaders/mozilla/net/PNecko.h:14,
from ../../../ipc/ipdl/_ipdlheaders/mozilla/net/PNeckoChild.h:9,
from ../../../dist/include/mozilla/net/NeckoChild.h:44,
from /var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/netwerk/protocol/http/nsHttp.h:60,
from ../../../dist/include/mozilla/net/HttpChannelParent.h:45,
from /var/tmp/portage/www-client/firefox-11.0/work/mozilla-release/netwerk/protocol/http/HttpChannelParent.cpp:41:
../../../dist/include/nsCOMPtr.h: In function ‘nsQueryInterface do_QueryInterface(nsISupports*)’:
../../../dist/include/nsCOMPtr.h:316: internal compiler error: in tree_nrv, at tree-nrv.c:143
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugs.gentoo.org/> for instructions.

いろいろと調べるとgccのバグのもよう。しかも修正済みなんですね。

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41153

以前なんかのバグでgcc 4.4に戻してからそのままにしてしまってた。gcc 4.5でコンパイルしてみる。

# gcc-config 4.5.3
* Switching native-compiler to x86_64-pc-linux-gnu-4.5.3 …
>>> Regenerating /etc/ld.so.cache…                                                                                [ ok ]

* If you intend to use the gcc from the new profile in an already
* running shell, please remember to do:

*   . /etc/profile

# . /etc/profile
# emerge -av firefox

(・・・ 中略 ・・・)

>>> Original instance of package unmerged safely.
* Updating desktop mime database …
* Updating icons cache …                                                                                        [ ok ]
>>> www-client/firefox-11.0 merged.

まあ出来ますわな。

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41153
Permalink to single post

移設中。。。

sunagae.net移設中。。。投稿テスツ

あ、ソフトウェア科学会で発表してきました。題目は「リアルタイムプロファイラのための汎用的なフレームワークの設計と実装」です。

ものすごくいろいろあって精神的・体力的にくたばっていた部分もありましたが無難に終わったという感じ。

ということで移設作業再開。。。ていうかphpがまったくわけわかんねくて困る。

島とかそのうちうぷしたい。

Permalink to single post

セキュリティ&プログラミングキャンプ2011に参加しました

今年もセキュリティ&プログラミングキャンプ (2011)に、後半3日間だけですが特別チューターとして参加しました。

僕は2004年(第一回)のセキュリティコース参加者だったのですが、前年と同様プログラミングコースに関わることになりました。しかもなぜか「特別チューター」という肩書きに。僕はレベル的にはチューターと同じですよ。

ちなみにチューターのお仕事としては、Rubyの実行の可視化をしていたお二方のサポートを主にしていました。

今年のキャンプも例年どおりの奇人変人具合でした。毎年レベルが上がっているというのもあるかもしれませんが、なんか毎年幅が広がっている気もします。

BASICという以前からの王道から始まり突っ走る人、いろいろWebアプリとか作ってる人、実装よりも計算理論面からせめてる人もいる。今年はAndroidやってるところもあったと思います。毎年いろんな方がいるけど、それ幅が広くなっている気がします。まぁそもそもコンピュータの世界が広がっているっていう部分もあるんでしょうね。

あと今年の印象としては

  • 謎のGentooブーム
  • 謎のRedbullブーム

こんな感じです。とりあえず参加者の皆様のプレゼンも (笑える、興味深いの両方の意味で) おもしろかったし、いろんな人と今年もお話しすることができてとても楽しかったです。

個人的に悔やまれる点としては

  • 自分がじぇん厨なのでGentooブームにもっと乗っかれば良かった
    • 前半の2日間にいなかったのが災いしたか
  • スナガラボの売り込みをもっとしまくれば良かった
    • というか名刺作った量がそもそも少なすぎた

まぁこんな感じです。

そういうわけで、今後ともスナガラボ株式会社と須永をよろしくお願いします。

各種情報へのポインタ (自分のためにも今後追加します。。。)

http://d.hatena.ne.jp/nishiohirokazu/
Permalink to single post

会社設立しました

なんだかんだで便利そうなので、法人を設立してしまいました。

会社名は「スナガラボ株式会社」です。これから会社のサイトとかある程度つくります。はやめに体裁を整えねば。。。

このタイミングなのはルビィ会議とかの関係があるわけではなく、ただわたくしの誕生日であったからという理由だけでございます。

ということでこれからよろしくお願いします。

Permalink to single post

RubyKaigi2011で発表しましたよ

Rubyで使えるリアルタイムプロファイラって題目で発表しました。とはいえ実態はPythonのほうが(ry

何だかんだで言いたいことは言えたし、Pythonのところで狙いどおりウケてくれたので、よしといった感じでしょうか。

実際に使っている方もいらっしゃってそれはうれしかったです。

公開場所→sunagae.netのllprofページ

取り上げていただいたサイト

とかを自己満のためリストする。(順不同)

デモ動画

これだけみてもなかなか分かりませんが・・・

Permalink to single post

gnome3@gentooのキーボード設定がうまくでてくれない

キーボードリピートの部分の設定がなぜか表示されず。デフォルトではディレイが遅すぎて使い辛い。

仕方ないので直接編集しよう、とおもってgconf-editorつかってやってみてもうまくいかず。

最終的にgsettingsコマンドでやればいいこととが分かった。

gstetings set org.gnome.settings-daemon.peripherals.keyboard delay 120

gstetings set org.gnome.settings-daemon.peripherals.keyboard repeat-interval 25

Permalink to single post

ゴールデンウィークのきろく (2) – 伊豆大島

ゴールデンウィークのきろく (1) – 神津島 からの続き

5/3 (くもり) − 神津島→伊豆大島

天気悪い。うみねこ。

うみねこ

波浮集落のあたりをあるく

波浮集落

5/4 (はれ) − 伊豆大島

めちゃ晴れ。とりあえずジェットフォイル。こいつはコンピュータ制御で浮いてるらしい。すごいなぁ。

ジェットフォイル

三原山を登る。

三原山遊歩道

砂漠

三原山砂漠

テキサスルートをずっとあるく。

砂漠テキサスルート

後半はひたすら森

テキサスルート後半

上だけ枯れてる草。この状態のやつが結構たくさんあったけどなんだろう。

上だけ枯れてる

パックンフラワー

パックンフラワー

最後に温泉はいってぐたぐた

ひこーき雲

5/5 (くもり) − 伊豆大島

野田浜のほうへチャリをひたすらこぐ

大島から船でかえる

元町

おわり

と、こんな感じで初神津島と4回目の伊豆大島でした。

Permalink to single post

ゴールデンウィークのきろく (1) – 神津島

最近いまさらな書き方をすることが多いなぁ。

ということでいまさらGW。

4/30 − 竹芝発

夜行船 (さるびあ丸) で神津島へ向かう

なんとなく夜景が暗い感じがしてじゃっかん残念だった。なによりもレインボーブリッジのライトアップがきえていたのが残念。

5/1 (くもり) − 神津島到着

めっちゃ曇ってたけどやっぱり海は綺麗。

多幸湾

ジュリアの十字架とか見る

ジュリアの十字架

5/2 (はれ) − 神津島

ものすごい晴れた。でも黄砂がものすごかった。

前浜

とりあえずのジュリア墓地。十字架とは離れている。

ジュリア墓地

秩父山を登る。

天上山に登る。けっこう大変だった。

天上山の千代池

千代池

表砂漠。黄色いマーカーをたよりに歩く

表砂漠

山頂

天上山山頂

集落へかえる

前浜の夕焼け

ゴールデンウィークのきろく (2) – 伊豆大島へつづく

Permalink to single post

軽量言語向けプロファイラ

とってもいまさらではありますが、研究で作っていたプロファイラの公開をしました。
MIT-Licenceです。

http://sunagae.net/software/llprof

リアルタイムに取れる+CCT(コールツリー)でとれる、しかもruby-profよりも速いっぽい、というやつです。

まだまだ使い物にはなりませんが。。。

Permalink to single post

並列実行の視覚化ツール

個人的なプログラム書いてるとき、並列実行の視覚化ツールがあったら便利だなぁと思って作ってしまった。

マルチスレッドとかで並列実行されるプログラムを実行させて、記録されるログからシーケンス図っぽいものを自動的に作ってくれます。

なんかそれなりにまとまったものができたので、たまにはちゃんと公開してみる。

まぁなんか似たようなソフトってあるんだろうなぁ。。

VizEXECのページ

・・・なんかこういう脇道にそれるのばっかりで、メインの作業がなかなか進まないんだよなぁ。

Permalink to single post

Monoを組み込み処理系として使う: 処理系サイズ

Monoを組み込んだプログラムをWindows向けに配布するときは一緒に配布してしまうのが多分楽。しかしその時にサイズがあまり大きすぎるとちょっと困る。

ということで、サイズ削減版のMonoを作るとどの程度のサイズになるかを調べてみた。

使ったのは本家で配布されているWindows版バイナリのMono 2.8.2。

とりあえずさっきのサンプルが動く最小構成と、Gtk#が動く範囲での最小構成で作ってみる。

結果:

  • ミニマム: 5.1 MB
  • Gtk#ミニマム:  46.4 MB
  • Gtk#ミニマムをzip: 17.4 MB

ミニマムはサンプルプログラム+mono-2.0.dll+mscorelib.dllだけなので、 (リビルドとかしない限り) 最小限構成だと思う。

Gtk#ミニマムのほうはなんかもう少し削れるかもしれない。ただし、まともなアプリ作ると参照が増えるかもしれないので、まぁこの程度なんでしょう。

zipすれば20MB切るし、初期配布サイズとしてはまぁOKかなぁという感じですかね。

Permalink to single post

Monoを組み込み処理系として使う

Monoの言語(C#、Boo、etc.)をスクリプティングとして使う場合とかに使える、C++の小さいサンプルを作ってみた。

スクリプティングとして使う場合は「C++→スクリプト」と「スクリプト→C++」の2方向の呼び出しができる必要がある。ということで最小限それができるサンプルを。

「C++→スクリプト」はMonoのAPI (mono_runtime_invokeとか) をつかってがんばる。「スクリプト→C++」はP/Invokeを使えばできるらしい。とりあえずやってみる。

試験環境はGentoo Linux、Mono 2.8.2です。monotest.cppがメインで、test.dllを呼び出している。test.dllはBoo言語でかかれている。ちなみにBoo言語はPythonライクなMonoの言語。まぁべつにC#でつくっても動くはず。。。

monotest.cpp:


#include <mono/jit/jit.h>
#include <mono/metadata/assembly.h>
#include <mono/metadata/debug-helpers.h>

#include <string>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>
using namespace std;


extern "C" {
extern void PrintFunc(int val);
}

void error(const string &msg = "")
{
	cerr << "Error:" << msg << endl;
	abort();
}

int main(int argc, char* argv[])
{
	// Export Check
	void *ThisModule = dlopen(NULL, RTLD_LAZY);
	cout << "Module Handle:" << ThisModule << endl;
	void *pFunc = dlsym(ThisModule, "PrintFunc");
	cout << "Function Handle:" << pFunc << endl;
	if(!pFunc)
		error("No symbol: PrintFunc");
	

	MonoDomain *domain;
	const char *file;
	int retval;
	
	if (argc < 2){
		fprintf (stderr, "Please provide an assembly to load\n");
		return 1;
	}
	file = argv [1];

	domain = mono_jit_init("monotest");

	MonoAssembly *assembly = mono_domain_assembly_open (domain, "test.dll");
	if (!assembly)
		error();

	
	PrintFunc(0);
	
	MonoImage *image = mono_assembly_get_image(assembly);
	MonoClass *klass = mono_class_from_name(image, "TestNamespace", "TestClass");
	MonoMethodDesc *desc = mono_method_desc_new(":TestStaticMethod(int)", false);
	MonoMethod *static_method = mono_method_desc_search_in_class (desc, klass);
	
	void *args[1];
	int val1 = 1234;
	args[0] = &val1;
	mono_runtime_invoke (static_method, NULL, args, NULL);

	mono_jit_cleanup (domain);
	return 0;
}

void PrintFunc(int val)
{
	cout << "In PrintFunc :" << val << endl;
}

test.boo:

namespace TestNamespace

import System.Runtime.InteropServices

[DllImport("__Internal", EntryPoint: "PrintFunc")]
def PrintFunc(val as int):
	pass

class TestClass:
	static def TestStaticMethod(val1 as int):
		print "In TestClass: ", val1
		PrintFunc(val1 * 2)
		return

コンパイル:

$ g++ -export-dynamic -g monotest.cpp -o monotest `pkg-config --cflags --libs mono-2`
$ booc test.boo

実行結果:

$ ./monotest test.dll
Module Handle:0x46d048e0
Function Handle:0x8048ff0
In PrintFunc :0
In TestClass:  1234
In PrintFunc :2468

P/Invokeはちょっと注意が必要。たぶんdlopenで自分自身を開いてやってるので、シンボルを参照できるようにする必要がある。具体的には、関数をextern “C”する必要があったり、コンパイル時に-export-dynamicをつける必要があったり。monotest.cppのmainの頭についているdlopenのテストコードはそれのチェック用。もしかしたらこれは外部ライブラリとかにしたほうがいいのかもね。

まぁとりあえずそれなりに簡単にMonoを組み込むことができそうということが分かった。

あとはWindowsでどうなるかだな。。。

« 以前のエントリ 最近のエントリ »