extern “C” について

なぜ extern “C” を使うのか。
メモメモ。。

C++とCではラベルの命名規則が違うようです。

Cで
test(){};
をコンパイルするとアセンブリでは _test: ラベルが生成されます

C++で
test(){};
をコンパイルするとアセンブリでは __Z4testv: ラベルが生成されます

C++からtest関数を呼ぼうとすると__Z4testv:を探します。
すると、当然にラベルが存在しないのでリンカエラーが発生します。

そこで extern “C” を使うと、C++からtest関数を呼ぼうとすると_test:を探します。
すると、ラベルが存在するので問題なくリンク出来ます。

サンプル
test.h

/* C Header */
#ifndef TEST_H_
#define TEST_H_

#ifdef __cplusplus
extern "C" {
#endif

void test();

#ifdef __cplusplus
}
#endif

#endif /* TEST_H_ */

test.c

/* C Source */
#include "test.h"

void test()
{

}

testp.cpp

/* C++ Source */
#include "test.h"

void aaa()
{

}

int main()
{

	aaa();

	test();

	return 0;
}

test.s

	.text
	.align 2
.globl _test
	.def	_test;	.scl	2;	.type	32;	.endef
_test:
	pushl	%ebp
	movl	%esp, %ebp
	popl	%ebp
	ret

■ extern “C” あり
testp.s

	.text
	.align 2
.globl __Z3aaav
	.def	__Z3aaav;	.scl	2;	.type	32;	.endef
__Z3aaav:
	pushl	%ebp
	movl	%esp, %ebp
	popl	%ebp
	ret
	.def	___main;	.scl	2;	.type	32;	.endef
	.align 2
.globl _main
	.def	_main;	.scl	2;	.type	32;	.endef
_main:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$8, %esp
	andl	$-16, %esp
	movl	$0, %eax
	addl	$15, %eax
	addl	$15, %eax
	shrl	$4, %eax
	sall	$4, %eax
	movl	%eax, -4(%ebp)
	movl	-4(%ebp), %eax
	call	__alloca
	call	___main
	call	__Z3aaav
	call	_test
	movl	$0, %eax
	leave
	ret
	.def	_test;	.scl	3;	.type	32;	.endef

■ extern “C” なし
testp.s

	.text
	.align 2
.globl __Z3aaav
	.def	__Z3aaav;	.scl	2;	.type	32;	.endef
__Z3aaav:
	pushl	%ebp
	movl	%esp, %ebp
	popl	%ebp
	ret
	.def	___main;	.scl	2;	.type	32;	.endef
	.align 2
.globl _main
	.def	_main;	.scl	2;	.type	32;	.endef
_main:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$8, %esp
	andl	$-16, %esp
	movl	$0, %eax
	addl	$15, %eax
	addl	$15, %eax
	shrl	$4, %eax
	sall	$4, %eax
	movl	%eax, -4(%ebp)
	movl	-4(%ebp), %eax
	call	__alloca
	call	___main
	call	__Z3aaav
	call	__Z4testv
	movl	$0, %eax
	leave
	ret
	.def	__Z4testv;	.scl	3;	.type	32;	.endef

C++では同じ関数名が利用できるので命名規則が複雑になってるようです。

ちなみに
extern “c” じゃなくて
extenn “C” ということに注意!

polipoのバイナリ

現時点で最新のpolipoバイナリを置いときます
2008年に1.0.4.0が公開されて少しずつ変更が加えられているみたいです

31 January 2010: Polipo 1.0.4.1:
polipo.zip 2011/03/25時点

下のサイトではpolipoの設定ファイルの書き方が紹介されています
Polipoの設定とチューニング

公式のconfigファイルのマニュアル(google翻訳)
The Polipo Manual

Torプロジェクトにpolipoが含まれていたので、そこのconfigファイルをテンプレートとして置いておきます
polipo_conf.zip

起動の仕方

polipo.exe -c polipo.conf

ブラウザからも設定が変更できるようです

http://localhost:8123/polipo/

Desireのシャッター音を消す方法

メモメモ

DesireHDではなくx06htです
※root化必須

検索すると音声を無音データで差し替える方法も有りますが、
カメラの設定ファイルを書き換える方法のほうが良さそうです。

/data/data/com.android.camera/shared_prefs/com.android.camera_preferences.xml

<boolean name=”pref_play_shutter_sound” value=”true“>

となっているところを
<boolean name=”pref_play_shutter_sound” value=”false“>

とすればOK

“Root Explorer”で問題なく出来ました。

Evernote ノートブックを間違えて、 消した・削除してしまった時の対処法

 

今すぐEvernoteの同期を停止してください!「自動的に同期する」をOFFにしてください!

※ゴミ箱からも消してしまった場合

Evernoteクライアントで操作した処理は、「同期」ボタンを押して初めてサーバに反映されます。
なので消してしまっても焦らなくてもいいです。焦りながら「取り消す」を連打してもしょうが無いです。

ローカルのデータベースを削除する方法もありますが、他の同期されてないノートも消えてしまいます。

ノートを消してしまった場合

1. Web阪のEvernoteを開く
2. 消してしまったノートを編集(何でもいい)して保存する
3. クライアント側で同期ボタンを押す

これでクライアント側のデータベースへ「削除する前の状態 + 編集内容」で復元されます

ノートブックごと消してしまった場合

1. Web阪のEvernoteを開く
2. ノートブックを新作成する(名前は何でもいい) ※ノートブックの名前を変更するのはダメです!
3. 消してしまったノートブックの中身をすべて新作成したノートブックへ移動する
4. クライアント側で同期ボタンを押す
5. ノートブックの名前を変更する

これでクライアント側のデータベースへ「新しいノートブックへ中身を移動した状態」で復元されます

ノートブックごと消してしまった場合(たくさんのノートブック)
他の同期されてないノートが消えてもいい場合はデータベースをまるっと削除します。

「ノートを編集 + 同期をしていない」状態でノートブックごと消してしまった場合は今のところ諦めるしか無いかもしれません。

ちなみに自動同期は常にOFFにしておくのを おすすめします。
編集中のファイルを定期的に保存する気で「Ctrl + s」ではなく「F9(同期)」を押すのが おすすめです。

ubuntu11.4にgnome shellを導入する


メモメモ。

ubuntu11.4では

sudo apt-get install gnome-shell

だけでセットアップ完了です。

パッケージ gnome-shell はデータベースには存在しますが、利用できません。
おそらく、そのパッケージが見つからないか、もう古くなっているか、
あるいは別のソースからのみしか利用できないという状況が考えられます
E: パッケージ ‘gnome-shell’ にはインストール候補がありません

と出る場合は

sudo add-apt-repository ppa:gnome3-team/gnome3
sudo add-apt update

でリポジトリを追加してから再トライするといけます。

ubuntu10.10のを使ってる方は

sudo apt-get install gnome3-session

で行けるようです。

sudo apt-get dist-upgrade

で11.4に更新してから、gnome3-sessionを入れるのも有りだと思います。

またubuntu11.4を入れたけど見た目(Unity)が変わらない!って人は
windowsのAeroみたいにハードウェアが対応していない場合があるようです
Unityの動作要件

/usr/lib/nux/unity_support_test -p

でUnityに対応しているか確認できました。

正直Unityが使いにくい!。ランチャーっぽいけど、サーバへ接続の項目を見つけるのに苦労したり
ターミナル何処?とか。ALT+F1で全てアクセス出来ていたところが、殆どランチャー経由になって
ますますもっさりして、マウス有りきなUIだと思った。
Edubuntuに乗るのは分かる気がするけどxubuntuを見習ってubuntuにはスッキリしていてもらいたいです

と思いつつ、GNOME shell を入れると・・・あんま大差ないじゃないか…