2011年12月5日月曜日
2011年10月31日月曜日
swig生成コードがerror: no matching function for callとのたまったら
- エラー該当コード行が以下のようなデフォルトコンストラクタを呼ぶコード
Ogre::ResourceManager::ResourceMapIterator result; - Ogre::ResourceManager::ResourceMapIteratorはデフォルトコンストラクタを呼べない
当てはまる場合は、デフォルトコンストラクタを呼ばないコード生成をswigにさせましょう。
具体的には、以下のような2行を、該当コードを生成するクラス用interface宣言より前に記述します。
%feature("valuewrapper") Ogre::ResourceManager::ResourceMapIterator;
class Ogre::ResourceManager::ResourceMapIterator;
詳しい説明は、こちら
結果、コードが以下のように代わり、デフォルトコンストラクタが呼ばれないコードとなります。
SwigValueWrapper< Ogre::ResourceManager::ResourceMapIterator > result;
keywords: swig, default constructor
2011年10月7日金曜日
Ubuntuでkey repeatが効かなくなった時の対処
その時は
- メニューのシステム => 設定 =>キーボードを選択
- 全般タブのリピート・キーのチェックボックスを、一度OFFして、すぐにON
で復帰させることが出来ます。
ちなみに、Ogre3Dでkey repeatが効かなくなるのは、Ogre3Dがinput methodとして使っているOISの終了処理が適切に行われていないためと思われます。
2011年9月9日金曜日
cmake環境におけるmake実行状態を詳細に表示する
そのような時は、CMakeLists.txtに
set(CMAKE_VERBOSE_MAKEFILE true)
実行コマンドの全てが表示されるMakefileが生成されるようになるので、自動設定されたコンパイルフラグやリンクパスの確認ができます。
2011年9月8日木曜日
Ubuntu 11.04にastah(旧JUDE)を入れる
- sun-javaを入れる
Sun JavaはPartnerリポジトリに移動しています。リポジトリに追加してインストールしましょう。 - フォントを入れる
日本語に豆腐(ーとかが豆腐になる)がある場合、vlgothicを入れるとなくなります。またフォントが綺麗になります。
2011年8月26日金曜日
華やかさをサポートしてみた
2011年8月15日月曜日
仮想3D空間を作って遊びたい
2011年8月3日水曜日
Rubyの拡張ライブラリのプロファイルをとる方法メモ
Rubyからロードされて実行される拡張ライブラリの処理をプロファイルする方法です。
(gprofなどの一般的な方法は、拡張ライブラリ内の処理まではプロファイルしてくれません)
現状、プロファイルできることが判明しているのは、oprofileとgoogle-perftoolsです。
どちらもubuntuならaptで簡単にinstallできました。
oprofile
システム全体のプロファイリングを目的としているものなので、まわりで動いているプロセスも全部プロファイルされてしまいます。
また、カーネル側の設定によっては使えないので、クラウド系サービスなどの環境でカーネル設定を変更できない場合は使えません。
$ sudo opcontrol --reset
$ sudo opcontrol --start
$ ruby load-ext.rb
$ sudo opcontrol --shutdown
$ opreport -l
google-perftools
私としては、こちらがお勧めです。
下記の方法で、サンプリングによる関数呼び出しのプロファイル結果が出ます。
$ LD_PRELOAD=/usr/lib/libprofiler.so CPUPROFILE=./profile.out ruby load-ext.rb
$ google-pprof --text /usr/bin/ruby ./profile.out_5941
5941はプロセスIDです。
プロファイル絡みでは、これ以外にヒープのメモリリークチェックやプロファイル結果のグラフ化などができます。
2011年7月15日金曜日
スマートフォンリンク ナビクレイドル(SPX-CS01)
とても面白そうだったのでSPX-CS01を購入しました。
特徴
- クレイドルなのでスマートフォンを車に置く場所として使える
- クレイドルについているmicroUSB端子でスマートフォンを充電できる
- クレイドルについているBluetoothでスマートフォンと通信でき、スマートフォンの音を出せる
- クレイドルにステレオミニジャックがついているので、車の音声外部入力(AUX)に接続することで車から音を出せる
- クレイドルのジャイロ/GPS連携でスマートフォンが高性能ナビになる
- ハンズフリー電話になるらしい(まだ電話がかかってこないので...)
感想
わたし的には大ヒットです。スマートフォンを充電しながら音楽が聞けるので、とても便利です。また、クレイドルにスマートフォンを載せなくてもBluetoothリンクできるので、同乗者のスマートフォンからでも(リンクさせれば)音楽を流せるはずです。
音楽再生手順は以下。
- PCで音楽入手し、DropBoxフォルダに置く
- スマートフォン側DropBoxアプリで同フォルダを同期(ダウンロード)
- クレイドルとスマートフォンをBluetoothでリンク
- スマートフォンで音楽再生すると車のスピーカから音楽が流れる
CD焼きから解放されて大満足です。
本来のメイン機能であるナビもクレイドルのジャイロ/GPSのおかげで精度/追従性が極めて高く、十分使えます。
ですが
- ダッシュボードに配置すると(夏なので)スマートフォンが焼けそう
- スマートフォンの画面はナビとしては少し小さい気がする
- 別に7年前の純正ナビで困ってない
- なんか邪魔
という保守的な理由からナビ機能は当面ベンチを温めてもらうことにしました。
何で買ったんだっけ…
愛車(初期型アテンザ)メモ
- 音声外部入力(AUX)なんて近代的なものはついていないので、確保する必要あり。愛車には純正ナビがついていたので「純正ナビの外部入力への接続」をディーラに付けてもらった。
- クレイドルの配置に関しては、運転席と助手席の間にあるカップ置きがちょうどいい
- クレイドルの音声外部出力端子から音を出すには、DriveNetアプリの設定->クレイドル設定にある「内蔵スピーカを使用する」をオフにしないといけない。
- 「純正ナビの外部入力への接続」した場合、外部入力をスピーカに出すには、テレビのチャンネルにあるVTRを選択すればよい。
- 音が聞こえない場合は、(クレイドルではなく)スマートフォンの音量を確認。
2011年7月7日木曜日
Debian からUbuntuへ
お堅いDebianから元気一杯なUbuntu(11.04)に乗り換えてみました。
予想に反してほとんど困ることがなく移行できてしまいました。同系統だからでしょうか。
しかし、インストール環境もデスクトップも、とてもグラフィカルで安定したものになりましたね。
ネタがないので、ちょっと戸惑った事だけメモとして残しておきます。
ディスクの準備に気をつけよう
昔と違ってインストーラがグラフィカルかつスムースなのでシステムの根幹を変更しているような、あの緊張感に浸れません。
でも観光気分でのんきにクリックを繰り替えしていると、ディスク上の全パーティション消されます。
かわいい顔してても、やることはやるんですね。
ディストリビューションとは関係ない大事なファイルが入っているパーティション(別途確保している/homeとか)まで消されますので慎重に進めましょう。
PPPoEの設定はDSL
ネットワークの設定もGUIなんですね。設定->ネットワーク接続を開くと、ルータ予定のPC(今回移行実施PC)とかだと認識されている2つのEther I/Fが表示されているタブが見えるはずです。ここでどっちが外につながるんだっけ?、とか考えながら設定項目を見てしまいがちなんだけど、これはフェイクです。この設定はPPPoE設定では使いません。
設定は、DSLタブ->追加ボタン->DSLタブにあり、そこにあるユーザ名とパスワードエントリに入力するだけ。Ether I/Fは勝手に適切な方を選んでくれるみたい。どうやってんだろ...
FirewallやNAT設定は、UFW
なんだか強そうな名前になりましたね。iptablesのラッパーかな?
設定方法はググったらたくさん出てくるので、変更点メモだけ残しておきます。
パケットの転送を許可
/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
/etc/ufw/sysctl.conf
net/ipv4/ip_forward=1
NATの設定
/etc/ufw/before.rulesの最初にnatルール追加。
また、MTU調整用ルール追加。
# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic through ppp0 - Change to match you out-interface
-A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
# don't delete the 'COMMIT' line or these nat table rules won't
# be processed
COMMIT
# Don't delete these required lines, otherwise there will be error
*filter
...
# Path MTU Discovery Problem
-A ufw-before-forward -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
...
あと、ppp0をフレッツなら1454にしないとアクセスできないサイトが出ますので、ifconfigを使ってppp0のMTUを1454に変更します。
http://progma.blog136.fc2.com/blog-entry-10.html
2011年7月5日火曜日
スマートフォン(MEDIAS WP N-06C)とPCとUSB接続
付属のUSBケーブルをN-06Cに挿してPCに接続する状況下で
N-06CがUSB接続を認識してくれない(USB認識通知が出ない)事があります。
そんな時は、迷うことなく伝家の宝刀「再起動」です。
N-06Cの電源を一度off/onすると、私の場合は直りました。
まぁ、データ移動(音楽とか)だけでしたら、いまどきは
Dropboxなどのクラウド系サービスを使った方が楽ですね。
不具合繋がりでもう一つ。
N-06Cはまれに(2回/4日確認)再起動してますね。
条件はよく分かりませんが、夜中にされるとなかなか不気味です。
次のアップデートに期待しましょう。
P.S.
7/7のアップデート以降、再起動しなくなった気がする
GitHubにpushするREADME.mdの見た目を事前に確認する方法
見栄え調整のためだけに、3回もcommitしてしまいました。
- gem install github-markup
- gem install rdiscount
- github-markup REAME.md > README.html
rdiscountは、.md(markdown)フォーマットで必要になります。
その他のフォーマットに関しては、下記にて確認しましょう。
http://rubydoc.info/gems/github-markup/0.5.3/frames
P.S.
もっとよい方法がありました。
下記リンクに書き込めばリアルタイムで変換結果を見ることができます。
http://github-preview.herokuapp.com/
これは非常に便利ですね。
ws2_32.dllとmsvcrt-ruby191.dllとSocket Error
MinGW環境上においてRuby拡張ライブラリでネットワークプログラムを書くときのメモ。
- リンクの際には-lmsvcrt-ruby191より先に-lws2_32をいれるべし。
WSARecvFrom()がエラーで、WSAGetLastError()結果がWSAENOTSOCKだったら上記を確認。
2011年7月1日金曜日
携帯(N905i)からスマートフォン(MEDIAS WP N-06C)へメール移動
N905iに与えた度重なる衝撃のせいか、SDカードを認識してくれません。
しかたがないので、USB経由でメールを移動/変換/導入させました。
その方法をメモしておきます。
ちなみに、N905i側はi-modeメール、N-06C側はSPモードメールを前提としています。
この場合のポイントは、i-modeメールのデータをSPモードメールがimportできる.eml形式にすることです。
- datalinkを使って、メールをN905iから吸い出す
- datalinkを使って、メールをOutlook Expressにexport
- Outlook Expressを起動させ、取り込まれたメール(docomoディレクトリができてる)を一覧を表示させる
- メールを全選択、それらをドラッグ&ドロップ(※これ重要)でどこかのtmpフォルダに放り込む (これにより.emlファイルになる)
- PC Link Toolを使って、N-06CのSDカード内を見えるようにする
- PC Link Toolのメニューのファイル追加を使って、上記tmpフォルダに放り込んだ.emlファイルを、private/docomo/mail/importにコピーする
- SPメーラを立ち上げ、メニューボタン->取り込み、で上記importディレクトリからファイルを取り込む
ところが、最近のWindowsには、Outlook Expressがついて無いんですね!
我が家はWindowsXPなので上記で移行できましたが、もしいまどきのOSを使用されているなら、調べた限りでは
datalink[export] => Outlook => [import]Thunderbird[名前を付けて保存] => .eml
という手段でできるような気がします。
そろそろ、新しいWindowsとPC買おうかな。
Rubyの拡張ライブラリをC++で書く場合のメモ
ライブラリとしてロードされる関数は、C リンケージ化しておく
require “libcore.so”
としてRubyプログラムからロードしたい場合は以下のように書く。
extern "C" {
void Init_libcore();
}
void
Init_libcore()
{
// ロード時に呼び出したい初期化処理
// ここではSoundというRubyクラス作成処理を呼び出している
SoundAdapter::init();
}
作成するRubyクラスのC++実装部は、class method化しておく (static付けとく)
SoundというRubyクラスを実装する例
class SoundAdapter
{
public:
static VALUE cSound;
static void init();
static VALUE ruby_new(VALUE self);
static VALUE ruby_loadSound(VALUE self, VALUE fileName);
}
void
SoundAdapter::init()
{
cSound = rb_define_class("Sound", rb_cObject);
rb_define_singleton_method (cSound, "new",RUBY_METHOD_FUNC(ruby_new), -1);
rb_define_method(cSound, "loadSound",RUBY_METHOD_FUNC(ruby_loadSound), 1);
}
rdocに認識してもらうためには
- rb_define_method()等では、RUBY_METHOD_FUNC()を使用 (これによりrdocのパーサが定義クラスのメソッドとして認識してくれるため)
- class method処理内容は自動で認識してくれないので、コメントで頑張る
/*
* Document-method: new
*
* call-seq:
* new() -> SoundObject
*
* fileNameの音声ファイルをロードし、そのfileIdを返却するメソッド。
*
* ====Return
* 音声ファイルID
*/
VALUE
SoundAdapter::ruby_new(VALUE self)
{
Sound* sound = new Sound();
return Data_Wrap_Struct(cSound, NULL, NULL, sound);
}
/*
* Document-method: loadSound
*
* call-seq:
* loadSound(fileName) -> fileId
*
* fileNameの音声ファイルをロードし、そのfileIdを返却するメソッド。
*
* ==== Args
* fineName: 音声ファイル
* ==== Return
* fileId: 音声ファイルID
*/
VALUE
SoundAdapter::ruby_loadSound(VALUE self, VALUE fileName)
{
Sound *sound;
Data_Get_Struct(self, Sound, sound);
int fileId = sound->loadSound(StringValuePtr(fileName));
return INT2NUM(fileId);
}