Hatena::ブログ(Diary)

gymnoの自由談

a b link friendfeed twilog iceberg earlymusic

2011-07-28

swigでJavaとc++連携 01:13 swigでJavaとc++連携を含むブックマーク

http://d.hatena.ne.jp/gymno/20110728/1311868581

の続き


今度は

すみっこのメモ - SWIGでJNI〜JavaからCのプログラムを呼ぶ

http://www.sabamiso.net/yoggy/hiki/?SWIG%A4%C7JNI%A1%C1Java%A4%AB%A4%E9C%A4%CE%A5%D7%A5%ED%A5%B0%A5%E9%A5%E0%A4%F2%B8%C6%A4%D6

SWIG and Java

http://www.swig.org/Doc1.3/Java.html

を参照した

同様にhello.cppとhello.hとhello.iを用意した後 同様に

swig -java -c++  hello.i

とやると hello.javaとhelloJNI.javaとMyClass.javaができる

MyClassはc++コード自分で書いたクラスだが 別ファイルになるのか

c++の明示的なメモリ管理をjavaのポインタにうまく置き換えるためのものであるように見える



g++ -c -fpic hello.cpp
g++ -c -fpic hello_wrap.cxx -I//System/Library/Frameworks/JavaVM.framework/Headers/
g++ -shared hello.o hello_wrap.o -o libhello.jnilib 

でhello.oとhello_wrap.oとlibhello.jnilibができ

javac hello*.java

MyClass.class hello.class helloJNI.classができる

而して

javac Main.java

とやると

$ java Main 4

Hello World!!

sum to 4 = 6

のようになる


Main.java

public class Main {
    static {
	System.loadLibrary("hello");
    }
    public static void main(String [] args) {
	hello.hello();
	if (args.length!=1) {
	    return;
	}
	int d = Integer.parseInt(args[0]);
        int ret = hello.sum(d);
	System.out.println("sum to "+d+" = "+ret);
    }
}

swigで pythonとc++連携 00:56 swigで pythonとc++連携を含むブックマーク

pythonやjavaが遅いのなら その部分だけ別の言語で書けばよいではないか という拡張の話

参考にしたページは以下

SWIG and Python

http://www.swig.org/Doc1.3/Python.html

distutils with boost.python - おびなたん☆

http://d.hatena.ne.jp/earth2001y/20070611/p1

C++とPythonのコラボレーション ― PythonMatrixJp

http://python.matrix.jp/tips/cpp_extension/

nesugi.net - swigの使い方のメモ書き

http://www.nesugi.net/hiki/?swig%A4%CE%BB%C8%A4%A4%CA%FD%A4%CE%A5%E1%A5%E2%BD%F1%A4%AD


手順は以下

続きを読む

2011-06-11 このエントリーを含むブックマーク

天と地の守り人文庫


f:id:gymno:20110611121214p:image:left

出ていたのか 5月28日

これで文庫でも完結

買おう

しかし 現時点で

Amazon ベストセラー商品ランキング: 本 - 105位 (本のベストセラーを見る)

1位 ─ 本 > 文学・評論 > SF・ホラー・ファンタジー

2位 ─ 本 > 文庫総合 > 一般文庫 > 新潮文庫

ってのもすごいな

Amazon.co.jp ベストセラー: SF・ホラー・ファンタジー の中で最も人気のある商品です

そして

Amazon.co.jp: 上橋 菜穂子: 本

守り人シリーズ完全ガイド

なんてのも6/8に出たらしい

2011-06-03 マザー牧場にてアルパカと蹴爪陸亀 このエントリーを含むブックマーク

f:id:gymno:20110603122401j:image

マザー牧場といえばアルパカ

アルパカ - gymnoの自由談

もともとアルパカを見に行こうとは思っていたのだが 社員旅行でマザー牧場を訪れるという契機を得て勇んででかけた

のだが 一頭しかおらず しかも前髪がやや過多でアルパカならではの憂いにみちたまなざしが見えず がっかりしていた ところへ

f:id:gymno:20110603122408j:image

蹴爪陸亀登場

ケヅメリクガメ - Wikipedia

サハラ砂漠原産で陸亀としては大きさ3位だったかな

草食で マザー牧場にも一匹しかいないらしい

なぜいるのだろう

めったに見られない出会い と思いきや 両者はさらなる接近を見せる

f:id:gymno:20110603122420j:image

f:id:gymno:20110603122430j:image

f:id:gymno:20110603122444j:image

f:id:gymno:20110603122502j:image

分かりづらいかもしれないけれど かめ一生懸命アルパカの柵に侵入しようとし しかし甲羅がつかえて入らないので 場所を変えて何度も挑戦している

あと少しで広めの柵から侵入成功か というところで飼育員に連れ戻されていた

そのあいだアルパカはずっと見守っていた

助けてあげればいいのに

しかし りくがめは存外な攻撃心を見せるので アルパカの身も実は危険だったのかもしれない


ページが見つかりません |Pouch[ポーチ]

そこに足があるから・・・登るカメ : カラパイア


社員旅行は最下位はいえオリエンテーション 観覧車  21mのバンジージャンプ ジンギスカン 海ほたる 内房の山奥 ベイブリッジから見えた立ち並ぶガントリークレーンの壮観など盛り沢山でした

追記

最新情報|マザー牧場

2頭いるのか

今日見たのは スリ のほうだね

しかしもう一頭はどうしたのだろうか

2011-05-01

[]XcodeでwxWidgets 開始 14:02 XcodeでwxWidgets 開始を含むブックマーク

Xcode 3.2.3にて。

なんか 有料開発者向けにはバージョン4が出ているらしいが、別にiPhoneアプリを作るわけでもないので今はいらない。

Xcodeのバージョン3.1と3.2でいろいろ仕様が変わったらしい。

コマンドラインで作るのもよいけれどappにパッケージバンドルするのがめんどい

Xcodeで作ればそのあたりはやってくれる。

XCodeとはMac版Visual Studioで、だいたいやっていることは同じで、どちらも

というところをやりたい。 CAEソフトでいうところのプリプロセッサ というところか。

今回必要なのは後者。前者は別にemacsでもよい。

コードの編集能力はVisual Studioの方がやりやすいように感じたが慣れの問題かもしれない。

XCodeのプロジェクトはCocoaアプリケーションで作成。

f:id:gymno:20110501130949p:image

Carbonがないので げ Object-C限定か と焦るけど実際はc++も使える。ここでの選択はCocoaかCarbonか にあまり関係ないらしい。

プロジェクトのプロパティを見ると「言語」の「コンパイルでのソースの解釈」がデフォルトでは「ファイルタイプに基づいて」ということになっている。

f:id:gymno:20110501135437p:image

プロジェクトができる。

f:id:gymno:20110501130950p:image

ごちゃごちゃいっぱいあるけれど、フレームワークという概念などはVisual Studioより分かりやすくてよい。

ある操作に必要なライブラリをまとめて設定できる。OpenGLとかOpenCLとかWebKitとか。

プロジェクトが作成できたらクラスとか拡張子.mのファイルは抹殺し、c++のコードを新規作成して追加する。

f:id:gymno:20110501130951p:image

c++ファイルの中身はとりあえずwxWidgets付属のsample/minimalからコピペ。

このサンプルだけXcodeのプロジェクトが付属しているためいろいろ参考になる。

それにしても全てのサンプルにプロジェクトファイルが付いていたWindows のVisual Studioとの扱いの差。

プロジェクトの設定でいじるところは以下。

かなりしんどいけど、プロジェクトごとに一度設定してしまえばよいので。

GUIプログラムなんてそうそう書き捨てるものでもないし。 そうでもないかな。

  • アーキテクチャは32-bit Universal
  • 有効なアーキテクチャはi386
  • sampleフォルダ直下にあるsample.xpmを追加 これはコピーで。
    • nclude するパスを../sample.xpmから./sample.xpmに変えること
  • ユーザヘッダ検索パスをwx-config --cxxflagsに基づいて変更する。

~/dev/wxMac-2.8.12/macbuild2/lib/wx/include/mac-unicode-release-static-2.8

~/dev/wxMac-2.8.12/include

~/$(PROJECT_DIR)/src

最後の環境変数は xcodeprojフォルダのあるディレクトリ。Visual Studioだと$(SolutionDir)に対応する。

この下にsrcというフォルダをつくってそこに実装ファイルを放りこむやり方が個人的に好み。

  • ライブラリ検索パスを wx-config --libsに基づいて変更する。

~/dev/wxMac-2.8.12/macbuild2/lib

  • プリプロセッサマクロを wx-config --cxxflagsに基づいて変更する

_FILE_OFFSET_BITS=64 _LARGE_FILES __WXMAC__

  • プレフィックスヘッダをプリコンパイルする を オフ
  • プレフィックスヘッダを空にする
  • リンカの設定で 「他のリンカフラグ」として

-lexpat -lwxregexu-2.8 -lwxtiff-2.8 -lwxjpeg-2.8 -lwxpng-2.8 -lz -lpthread -liconv

リンクには

まずwx関係のライブラリをすべて追加 これは参照で。

追加するフレームワークは

Carbon OpenGL IOKit QuickTime

ここまでやれば なんとか。

f:id:gymno:20110501140111p:image



ところでmacのスクリーンショットって影まで含むのか

茗荷谷ラリールにてヴァルター・ファンハウヴェリサイタル 10:32 茗荷谷ラリールにてヴァルター・ファンハウヴェリサイタルを含むブックマーク

ヴァルター・ファンハウヴェさんリサイタル

with 田中せい子さん ダニエレ・ブラジェッティさん

もうだいぶ前になるけれど

2月7日 月曜日


仕事を無理やり抜け出し いざ茗荷谷へ

余裕をもったのにまさかの東海道線の運転見合わせ

よくあることらしい

急いで別の路線で10分遅刻くらい 

駅でざっと場所を尋ね 暗い教育の森公園をかけぬけて 抜けたところにある建物にすべりこむ

ちょうど一曲目ボワモルティエが終わったところでTRETのいつもの仲間と合流した

僕の席を取ってくれていた友人は 吉澤実さんが空いている席を探してきょろきょろしているのを見て気が気ではなかったらしい

2曲目のテレマン無伴奏はファンハウヴェさんのソロ



http://www.avanti.gr.jp/concerto/110207tanaka.html

ラリール

http://www.lalyre.jp/

フォンテガーラ

http://www16.ocn.ne.jp/~fonte/index.html


まあ近江楽堂同様小さな部屋がぎっしり埋まる感じ 特にこれ以上宣伝する必要もないか

曲はボワモルティエやテレマンのほかは現代曲がメイン



松永通温 組曲 層

http://www.michiharu-matsunaga.com/list.html

フースヤンセンという クラシックピアニスト出身ジャズの人のリコーダーソロ曲

ユンイサン 




前回はこんな感じだったか

http://www.nihonoranda.jp/ja/events/item/705

ヴァルター・ファンハウヴェ リサイタル〜ソロ&トリオによる響きの競演

日程: 2009年09月12日

場所 : 東京オペラシティ 近江楽堂

主催者 : ストゥディオ・フォンテガーラ

2011-02-10

macでwxglade 01:04 macでwxgladeを含むブックマーク

Mac OS X 10.6.6

wxWidgesをやろうと思い立ち wxWidgets本体およびwxPythonとwxGladeをインストールする

f:id:gymno:20110211010416p:image

wxWidgetsはソースを落としてきて

% arch_flags="-arch i386"
% mkdir macbuild
% cd macbuild
% ../configure  --with-opengl --enable-geometry --enable-graphics_ctx --enable-sound --with-sdl --enable-mediactrl --enable-std_string --enable-display --enable-monolithic --enable-unicode --enable-odbc CFLAGS="$arch_flags" CXXFLAGS="$arch_flags" CPPFLAGS="$arch_flags" LDFLAGS="$arch_flags" OBJCFLAGS="$arch_flags" OBJCXXFLAGS="$arch_flags"

でよく (参照 Development: wxMac - WxWiki)

また wxPythonはバイナリパッケージがある


問題はwxGladeで 単にソースを落としてきて実行しても まず

%python wxglade

ImportError: /usr/local/lib/wxPython-unicode-2.8.11.0/lib/python2.6/site-packages/wx-2.8-mac-unicode/wx/_core_.so: no appropriate 64-bit architecture (see "man python" for running in 32-bit mode)

と怒られ さればとて

% export VERSIONER_PYTHON_PREFER_32_BIT=yes

とやっても

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

が出て悲しくなるだけだ

解決は

/usr/lib/python2.6/site-package/sitecustomize.py

というファイルをつくって

import sys
sys.setdefaultencoding('utf-8')

と画像のように書くとうまくいく

スタートアップファイルにこれを書いてもだめで 実際dir(sys)してもsetdefaultencodingなんて出てこない

[Python] UnicodeEncodeErrorが発生した場合は、sitecustomize.pyでデフォルトのエンコーディングを指定する。 - SumiTomohikoの日記

によると 

これは、pythonは起動が終了したら、sysモジュールからsetdefaultencoding関数を削除するためです。

ここで、pythonの起動時の処理を、少し詳しく説明します。pythonは起動時に、モジュールの検索パスを設定し、siteモジュールを読み込みます。Ubuntuなら、/usr/lib/python2.4/site.pyになります。sitecustomizeモジュールも、このsite.pyから読み込まれています。

以下興味深い説明が続く


これでwxGladeによるGUIアプリ作成にかかれる

windowsやlinuxでは見慣れたwxGladeの画面がmacっぽいルックアンドフィールになっていて面白い

たまに一部反応しなくなったりバグっぽい挙動もある