tag:blogger.com,1999:blog-72850323044996219172024-03-13T17:28:01.545+09:00abexsoftのブログabexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.comBlogger27125tag:blogger.com,1999:blog-7285032304499621917.post-32732001738380579242012-06-01T17:37:00.000+09:002012-06-01T18:06:57.182+09:00UbuntuにGithub連携Redmineサーバを立てるとにかく急いでRedmineと戯れたい人向けです。<br />
<div>
<div>
<br />
<div>
目標は</div>
<div>
<ul>
<li>Ubuntu 12.04上にとにかく簡単に構築する</li>
<li>Webricを使い、Redmineをport 80に立ち上がらせる</li>
<li>githubで公開しているrepositoryと連携させる</li>
</ul>
<div>
構築のポイントは</div>
<div>
<ul>
<li>redmineのインストールと設定<br />インストール方法が乱立しておりますが、簡単なaptで入れます。</li>
<li>redmineのgithub対応設定<br />githubと連携するためのpluginを入れます。</li>
<li>githubからredmineサーバへ更新情報転送設定<br />上記pluginへの入力として、githubから更新情報を自動的に送信するgithub側の設定をします。</li>
</ul>
</div>
<div>
<div>
の3点です。</div>
<div>
それでは、行きます。</div>
<div>
<br /></div>
<div>
<span style="font-size: large;">1. Redmineをサーバにinstall</span><span style="font-size: large;"> </span></div>
<div>
aptで必要なファイルをインストール</div>
<div>
$ sudo apt-get install python-software-properties</div>
<div>
$ sudo add-apt-repository ppa:ondrej/redmine<br />
$ sudo apt-get update<br />
$ sudo apt-get install redmine redmine-mysql</div>
<div>
<br /></div>
<div>
起動スクリプト作成</div>
<div>
/etc/init/redmine.conf</div>
<div>
-----</div>
<div>
# Redmine</div>
<div>
description "Redmine"</div>
<div>
<br clear="none" /></div>
<div>
start on runlevel [2345]</div>
<div>
stop on runlevel [!2345]</div>
<div>
<br clear="none" /></div>
<div>
expect daemon</div>
<div>
exec ruby1.8 /usr/share/redmine/script/server webrick -e production -b 0.0.0.0 --port 80 -d </div>
<div>
-----</div>
<div>
<br /></div>
<div>
起動</div>
<div>
$ sudo service redmine start</div>
<div>
<br /></div>
<div>
この段階でredmineのWeb serverがport 80 (HTTP)に立ち上がっています。</div>
<div>
browserにサーバのIPを入力すれば、見えるはずなので確認してください。</div>
<div>
<br /></div>
<div>
参考: http://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_in_Ubuntu</div>
<div>
<br /></div>
<div>
<span style="font-size: large;">2. Redmine上でプロジェクト作成</span></div>
<div>
github上のrepositoryに対応したredmineのプロジェクトを作成します。<br />
管理者権限などredmine の使い方は、ここでは説明しません。</div>
<div>
redmine helpなどを参考にしてください。</div>
<div>
<ul>
<li>Projects -> New Projectで、新しいプロジェクトを作成します。</li>
<li>中身は適当で良いですが、Identifierの値は後で使います。</li>
</ul>
</div>
<div>
<span style="font-size: large;">3. Redmineのgithub対応設定</span></div>
<div>
redmine server用github hookを設定することにより、githubからの更新情報を受けとることができるようにします。</div>
<div>
githubから自動的に更新情報を送信させる設定は、もう少し下でします。</div>
<div>
$ sudo gem install json</div>
<div>
$ cd /usr/share/redmine</div>
<div>
$ sudo ruby1.8 script/plugin install git://github.com/koppen/redmine_github_hook.git</div>
<div>
$ Redmine を再起動</div>
<div>
<br clear="none" /></div>
<div>
<span style="font-size: large;">4. Redmineがローカルで管理するgithubのremote repository設定</span></div>
<div>
githubのrepository内容のミラーリングです。redmineは上記hookでgithubから送られてきた更新情報を元にこのremote repositoryを更新します。</div>
<div>
$ cd /var/redmine/git_repositories</div>
<div>
$ git clone --mirror git://github.com/<git_user>/<project>.git</div>
<div>
<br /></div>
<div>
次に、ミラーリングした/var/redmine/git_repositories/<project>.git ディレクトリをRedmineで管理するプロジェクトのリポジトリとして設定します。</div>
<div>
<ul>
<li>2.で作成したプロジェクトのSettingsを表示します。</li>
<li>Repositoryタブを選択します。</li>
<li>SCM: Gitを選択</li>
<li>Path to Repository: /var/redmine/git_repositories/<project>.git</li>
</ul>
</div>
<div>
この段階で、プロジェクトにRepositoryタブが現れ、中身が見えるようになるはずです。</div>
<div>
<br /></div>
<div>
<span style="font-size: large;">5. Githubからredmineサーバへ更新情報転送設定</span></div>
<div>
<ul>
<li>github のプロジェクトのAdmin->Service Hooks->WebHook URLsを選択</li>
<li>URLに、http://<redmine server ip>/github_hook?project_id=<project id>を入力</li>
<li>Update Settings</li>
</ul>
</div>
<div>
上記のようにURLには、Redmine の URL に "/github_hook" をくっつけたものを入力します。また、オプションとして?project_id=<project id>をつけておけば間違いないです。</div>
<div>
<project id>には、2.でIdentifierに設定した値を入れます。</div>
<div>
<br /></div>
<div>
設定は以上です。</div>
</div>
</div>
</div>
<div>
<br /></div>
<div>
以後、Github へのpush は自動的にredmine serverへ転送され、redmineが管理しているremote(mirror) repositoryが更新されます。更新されない場合は、5.の設定が正しくない可能性があります。</div>
</div>abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-74253419752266993812012-05-29T01:29:00.000+09:002012-05-29T01:45:16.922+09:00さくらVPSのUbuntuを10.04から12.04にアップデートさくらVPSのUbuntu10.04アップデートメモです。<br />
<div>
ポイントは2点。</div>
<div>
<ol>
<li>grubの設定アップデートを確実に</li>
<li>resolv.conf自動生成の再設定</li>
</ol>
<div>
<br /></div>
<div>
<span style="font-size: large;">1. grubの設定アップデートを確実に</span></div>
</div>
<div>
<span style="font-size: large;"><br /></span></div>
<div>
Ubuntuのアップデートは、基本的には<br />
<blockquote class="tr_bq">
sudo do-release-upgrade -d</blockquote>
を実行後、ひたすらYesで問題はありません。が、唯一grubの設定だけはさくらサーバ向け(VPS向け?)設定をしておかないとreboot後立ち上がりません。<br />
(grub promptがさびしく表示される事になります)<br />
<br />
このgrubの設定とは<br />
<br />
<ol>
<li>"grubを最新にする" or" 既存のままにする"など4択ぐらいの選択肢が出た際、上位2つのどちらかを選択します。</li>
<li>"Continue without installing GRUB?"と聞かれますので、ここで"No"を選択します。</li>
<li>その後、grubのインストール先を聞かれるので、"/dev/vda"を選択します。</li>
</ol>
<br />
<br />
参考: <a href="http://d.hatena.ne.jp/tilfin/20120330/1333108053">http://d.hatena.ne.jp/tilfin/20120330/1333108053</a><br />
<br />
<br />
<span style="font-size: large;">2. resolv.conf自動生成の再設定</span><br />
<span style="font-size: large;"><br /></span><br />
アップデート後、普通に再起動させると名前が引けなくなっていると思います。原因は、/etc/resolv.conf設定が消えているためです。<br />
<br />
Ubuntuは、resolv.confを起動スクリプトでごにょごにょ置き換える仕組み(/etc/init/resolvconf.conf)を導入しているようなのですが、その際使用する設定値が消えているために本現象が起きています。よって、これを再設定します。<br />
<br />
設定するファイルは"/etc/resolvconf/resolv.conf.d/base"<br />
内容は<br />
---<br />
search sakura.ne.jp<br />
nameserver 210.188.224.10<br />
nameserver 210.188.224.11<br />
<div>
---</div>
<div>
再起動、または再読み込み("sudo resolvconf -u")すれば、/etc/resolv.confが復活します。</div>
<br />
<br />
参考: <a href="http://blog.libero-tecnologia.net/?p=6">http://blog.libero-tecnologia.net/?p=6</a></div>abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-53524913191134072772012-03-31T16:00:00.000+09:002012-03-31T20:44:54.938+09:00MiniatureGarden using OgreIrrlichtからOgre3Dへの移行を始めてはや半年。<br />
やっといろいろ遊べる形になってきました。<br />
まずは、サッカーでも作って基本的な機能を揃えたいところです。<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgam9caIeZarps41Mu_FLJdthOEpQOai_hDZN6Wvg-JN1F1NJLsLKWRU68rbZokoucEvdtOBszj6s81Q8Z1_IkwmWzloxpcYk1tw0I1XN9lj0j7IIlWCTIBsXEaEi09RnOVs4qTJTrxSpo/s1600/soccer_03312012_151155315.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgam9caIeZarps41Mu_FLJdthOEpQOai_hDZN6Wvg-JN1F1NJLsLKWRU68rbZokoucEvdtOBszj6s81Q8Z1_IkwmWzloxpcYk1tw0I1XN9lj0j7IIlWCTIBsXEaEi09RnOVs4qTJTrxSpo/s200/soccer_03312012_151155315.png" width="200" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEZeiBZ3-UTiW2dxc_7kFSQlQTQGj887jQen5xNBFOwpRvR6xnZfnuDCf4Ykw-CpoII16Y2BkFBDhz9M5Eg_6fJvDVEOZ4_jzoG-iAxvlpyai83Rt9zB9XTVroG1q1BIYO-wGeDFBrbOQ/s1600/soccer_03312012_151209374.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEZeiBZ3-UTiW2dxc_7kFSQlQTQGj887jQen5xNBFOwpRvR6xnZfnuDCf4Ykw-CpoII16Y2BkFBDhz9M5Eg_6fJvDVEOZ4_jzoG-iAxvlpyai83Rt9zB9XTVroG1q1BIYO-wGeDFBrbOQ/s200/soccer_03312012_151209374.png" width="200" /></a></div>
<br />
CPU: Intel(R) Core(TM) i3 CPU 530 @ 2.93GHz<br />
Mem: 2G<br />
Video: GeForce 7600 GS<br />
OS: Ubuntu<br />
<br />
Ogre3Dは、影を使った時の性能がIrrlichtより圧倒的に良いですね。<br />
まだ速度的な最適化をやっていないのに、影を入れたまま11vs11で遊べそうです。<br />
<br />
<br />
<br />abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-80197440451891448452012-03-29T01:41:00.000+09:002012-03-31T20:45:30.754+09:00シャギーなアニメーションになったらBoneに関連付けられていない(Vertex Groupに所属していない)浮いているVertexがあるMeshをOgre Mesh Exporterなどでexportさせてアニメーションさせると下図のように飛び出ることがあります。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcBR4y1lmzm0zrJ6ytJAegmCeOY1yblNZNGUTms0tzjLXTJiK5joNFw20YOvGqtHc451DQPsvRCDqnp8eF6xt__PdqqKRTm1lRs-MrpUW6RaOk0kBhQtHN1dIZCkxQLPAAcfkGT3KabPc/s1600/shaggy.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcBR4y1lmzm0zrJ6ytJAegmCeOY1yblNZNGUTms0tzjLXTJiK5joNFw20YOvGqtHc451DQPsvRCDqnp8eF6xt__PdqqKRTm1lRs-MrpUW6RaOk0kBhQtHN1dIZCkxQLPAAcfkGT3KabPc/s320/shaggy.png" width="320" /></a></div>
<br />
<br />
対策: どこかのVertex GroupにAssignさせてあげると解決します。<br />
<br />
<br />abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-39362106722762083062012-03-21T01:23:00.001+09:002012-03-23T02:17:14.337+09:00blender 2.62 で ogre mesh を exportするBlender 2.5 exportの最新版を使ってmeshを出力する事に少し手間取ったのでメモ。<br />
<div>
<div>
<br /></div>
<div>
1. 最新のexporterは、最新のtreeにあるので</div>
<div>
hg clone https://bitbucket.org/sinbad/ogre</div>
<div>
2. Tools/Blender2.5Export/の下にある全ファイルをblenderのaddonを置く場所にコピー</div>
<div>
例えば、blender/blender-2.62-linux-glibc27-i686/2.62/scripts/addons/ogre_mesh_exporter/</div>
<div>
3. blender起動</div>
<div>
4. File->User Preference->addonsで、Ogre Mesh Exporterを有効にする</div>
<div>
5. 再立ち上げ (いらないかな)</div>
<div>
6. cube作る</div>
<div>
7. cubeにMaterialを作り、名前をOgre/SkinなどのOgre環境上のMaterial Nameにしておく。</div>
<div>
6. cubeを選択して、"T"を押す。</div>
<div>
7. 出たメニューの下の方に、Ogre Mesh Exporterがある。</div>
<div>
8. 書き出すパス(Export Path)指定。</div>
<div>
8. exportボタンをぽちっと押す。</div>
<div>
9. できたmesh.xmlをOgreXmlConverterで.meshにする</div>
<div>
<br /></div>
<div>
という手順で作成したmeshをOgre Engineで表示できるところまで確認。</div>
<div>
また、Properties->ObjectData にもなにやらメニューがあるが、今のところ使い方がよく分からない。</div>
<div>
<br />
P.S.<br />
どうやら、Textureを適切に貼るには、UV設定にして出力する必要があるようなのですが、現在のscriptでは対応していないようです。なので、お急ぎの方はblender-2.49bとTools/BlenderExportで出力させるのが無難なようです。<br />
<br />
<br /></div>
<div>
参考</div>
<div>
<a href="http://www.ogre3d.org/tikiwiki/Blender+2.5+Exporter">Blender 2.5 exporter Web</a></div>
<div>
<a href="http://www.ogre3d.org/forums/viewtopic.php?f=8&t=64019">スレッド</a></div>
<div>
<br /></div>
<div>
Good work, lf3thn4d</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghkpurGLAHhDZydVfc3bzo5402ond87o8wr4SbHTXwJBo7M2PNJxerbQ12-0XRjPSTpGm88FBRL3F-L5zOuCISjHi9CvTQhC8PiOLdLK33zaIgJnPccqa3JqonNxrL9uiAA7iZ9H947mY/s1600/OgreExporter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghkpurGLAHhDZydVfc3bzo5402ond87o8wr4SbHTXwJBo7M2PNJxerbQ12-0XRjPSTpGm88FBRL3F-L5zOuCISjHi9CvTQhC8PiOLdLK33zaIgJnPccqa3JqonNxrL9uiAA7iZ9H947mY/s400/OgreExporter.png" width="400" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
</div>abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com1tag:blogger.com,1999:blog-7285032304499621917.post-58779607941687117012012-03-19T00:32:00.000+09:002012-03-19T00:32:04.499+09:00blenderで3D Viewにテクスチャが表示されないプログラムの基盤環境の方の目処が立ってきたので、素材作りのためにBlender 2.6を入れてみた。1年ぶりぐらいなのですがI/Fが変わって、格好良くなっている!<br />
(まぁ、どんなにツールが良くなっても、私のセンスじゃどうしようもないのですが...)<br />
<br />
ところで、Texture張っても、3D Viewに表示されない (1年前もハマった気が =)ことで<br />
1時間ぐらい浪費したので、メモ。<br />
<br />
ググったところ、<a href="http://blender.jp/modules/newbb/viewtopic.php?viewmode=flat&topic_id=1279&forum=3">対策</a>の7番目<br />
7.3D View画面でNキーを押してShadingをGLSLにする<br />
が今回の原因でした。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTBKbojUzjK2-gTd1Ida6Gu6SGir6i6H7eLku4ww2xtn2abPXRkja5HzHmFIAEF6JZV-XjSzKbPyN33-IyBIs7GYiCeji8zBamiUwUCvc-FcaXg31BWkQghXFO9gAh0QIRb2J1zdZeepI/s1600/blender.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTBKbojUzjK2-gTd1Ida6Gu6SGir6i6H7eLku4ww2xtn2abPXRkja5HzHmFIAEF6JZV-XjSzKbPyN33-IyBIs7GYiCeji8zBamiUwUCvc-FcaXg31BWkQghXFO9gAh0QIRb2J1zdZeepI/s400/blender.png" width="400" /></a></div>
<br />
<br />
<br />abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-31803157943740163292012-03-04T16:33:00.000+09:002012-06-11T12:17:37.890+09:00Swig対処メモSwig 2.0.4を対象としています。 <br />
<ul>
<li>privateコンストラクタだから生成できない<br /> %templateでそのクラスのwrapperを作成している。(wrapper作るとinstantつくるので)<br />対策: wrapperを作らない。必要なら、コンストラクタをpublicに置いたclassをswig用interfaceファイル内で再定義。</li>
<li>allocate がかぶる<br />wrapper作成対象クラスにallocate関数があると、swigが内部生成するallocate関数とかぶる模様。<br />対策: クラスのallocate関数を%rename。</li>
<li>typedefで定義された別名クラス名でインスタンスは作れない<br />そもそも、その別名クラス名のwrapperが作成されない。(元の型と別名型の共通性はswig内で管理されている)<br />対策: 元の名前のクラスを使う。</li>
<li>template内typedefを利用した何か<br />概ねswigでうまく扱えない。もしかしたらできるのかもしれないが、%templateの展開地獄と型不一致地獄に延々巻き込まれるので、精神衛生上swigのversion upを待った方が良い。(2.0.5でtypedef絡みのpatchがありそうなので)。<br />対策: そのクラスのwrappingを諦める。伝家の宝刀 %extendを使い、その諦めたクラスを使っているクラスに諦めたクラスに対する代替I/Fを追加する。</li>
<ul>
<li>例1: map::mapped_typeを使ってごちゃごちゃするOgre::MapIterator<br />対策: Managerクラス内のデータ参照に使っているので、Managerクラスにeach_datatypeを作る。</li>
<li>例2: Ogre::vector::typeを使うStringVector <br />対策: StringVector自体は、RubyのArrayと等価。なので、StringVectorの代わりにArrayを受け取る/返す操作をするI/Fを追加する。もしくはArrayの代わりに別途StringVectorを内部で使用している新しいクラスを自作、それ向けのI/Fを同様に追加。</li>
</ul>
<li>Listener/Handler対策<br />C++側にListenerクラスを継承したRubyクラスを登録し、C++側からRuby側のクラスを呼び出すタイプの話。SwigのドキュメントのCross language polymorphismに対策が書いてある。<br />対策<ol>
<li>トップの%moduleにdirectors="1"<br />%module(directors="1") "MyNameSpace"</li>
<li>Ruby側で継承するListenerクラスwrapperにdirector<br />%feature("director") Ogre::FrameListener; </li>
</ol>
</li>
</ul>abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-26877294329106146942012-02-25T20:41:00.000+09:002012-03-01T01:09:32.970+09:00再びswigと戦うもう単純な手動ラッパー生成作業など、いやじゃぁ!<br />
もっとおもしろいことしたいんじゃ。<br />
<br />
前回の敗因は、「対処が綺麗じゃない」みたいな軟弱さにちがいない。<br />
今回は手段を問わず、生成コードにパッチをあててでも完遂させていただきます。abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-2732838903506610722012-02-14T09:53:00.000+09:002012-02-22T09:08:34.262+09:00クラス名文字列からクラスオブジェクトを得る方法klass = Object.const_get("MyClass")<br />
<br />abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-14790337974015935602012-02-03T09:50:00.000+09:002012-02-21T22:12:06.619+09:00ruby 拡張ライブラリのクラス定義の一部をrdocが認識してくれない時のメモ そ
の2以前書いた、C++コードで書いたruby wrapperの<a href="http://abexsoft.wordpress.com/2011/07/01/ruby%E3%81%AE%E6%8B%A1%E5%BC%B5%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92c%E3%81%A7%E6%9B%B8%E3%81%8F%E5%A0%B4%E5%90%88%E3%81%AE%E3%83%A1%E3%83%A2/">rdocに関する話</a>の続き。<br/><br/>同じファイルに<br/><pre>ogre = rb_define_module_under(mg, "Ogre");<br/>klass_= rb_define_class_under(ogre, "AnimationBlender", rb_cObject);</pre><br/>と書いていたものを、別々のファイルに置いて<br/><pre>-- fileA.cc ---<br/>ogre = rb_define_module_under(mg, "Ogre");<br/>AnimationBlenderWrapper::init(ogre);<br/>----------------<br/><br/>--- fileB.cc ---<br/>void<br/>AnimationBlenderWrapper::init(VALUE module) {<br/> klass_= rb_define_class_under(module, "AnimationBlender", rb_cObject);<br/>}<br/>-----------------</pre><br/>とした途端、<br/>Enclosing class/module 'module' for class AnimationBlender not known<br/>と言われた時のメモ。<br/><br/>rdocのcのパーサ(c.rb)のmoduleやclassの認識で気をつけておくべき点は以下3つ。<br/><ol><br/> <li>moduleやclassの定義は、その名前と返り値を格納した変数名がセットで覚えられている。なにを言っているのか自分でもよく分からないが、つまり<br/>ogre = rb_define_module_under(mg, "Ogre"); と記述した場合。<br/>"Ogre"と言う名前と"ogre"という返り値がまずセットで覚えられる。</li><br/> <li>class定義などで指定する上位class/module objectのVALUE変数名は、1の返り値を格納した変数名と同じである必要がある。klass_= rb_define_class_under(module, "AnimationBlender", rb_cObject);と書くと、rdocは上位のclass/module名を特定するために"module"という変数名とセットになっている名前を探しに行く。該当する変数名に返り値を格納した定義が無いとそのセットは記録されていないので、上記のようなエラーになる。正しく認識させるためには<br/><pre>--- fileB.cc ---<br/>AnimationBlender::init(VALUE ogre) {<br/> klass_= rb_define_class_under(ogre, "AnimationBlender", rb_cObject);<br/>}<br/>-----------------</pre><br/>として、そのclass/moduleを定義した時の変数名と一致させる必要がある。</li><br/> <li>パーサは、判断を先送りにはしない男らしい設計<br/>上記を対処しても、fileA.ccより、fileB.ccを先にパーサが読み込んでしまうと<br/>Enclosing class/module 'ogre' for class AnimationBlender not known<br/>と言われる。なので<br/>rdoc fileA.cc fileB.cc<br/>と順序性を指示してあげる必要がある。</li><br/></ol>abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-77925323498144616392012-01-29T08:05:00.000+09:002012-02-21T22:12:06.619+09:00Ogre3Dのruby wrapper<h2><a href="http://www.swig.org/">Swig</a></h2><br/>Swigを使って自動生成を試みたところ、以下の2点の対処が困難。途中からSwigのコード解析をする羽目になり、人力で必要な部分だけwrapperを書いた方が早い気がしてきたので断念。<br/><ul><br/> <li>ネストされたネームスペースがうまく扱えない。</li><br/> <li>ネストされたテンプレートの展開が大変</li><br/></ul><br/>それぞれ暫定対処があるものの、Iterator関係で両方絡んでくると、なかなか思い通りのwrapperコードが生成されず、発狂しそうになる。コードの自動生成ではよくあること。自動コード生成の試み自体は好きなので、嫌いになる前に、そっと距離を置くことにした...<br/><h2><a href="http://ogrerb.rubyforge.org/index.html">Ogre.rb</a></h2><br/>Rice及びgccxmlを使ったruby wrapper生成プログラム(Rb++)を作成した作者自身が、それらのツールをOgre1.7.1に適用して生成したもの。とても便利なツール群を使った自動生成環境なのですが、Ogre1.7.4で試した際に以下の問題があり断念。<br/><ul><br/> <li>使用しているRiceの制限で、コンストラクタを一つだけ選択する必要がある。</li><br/> <li>gccxmlのtr1 parse問題のためにOgre3Dのコードにパッチを当てる必要がある。</li><br/> <li>template系でコード生成エラーが出るため対象から外さないといけないlass/methodあり。</li><br/> <li>ネストされたtemplateクラス用wrapperコードのファイル名が254バイトを超え、書き出せない。</li><br/> <li>単一ファイル生成モードによる回避を図ったが、gccxmlのファイル書き出し最中にError。</li><br/></ul><br/>こちらもコード生成ツールのデバッグモードに突入。また、コード生成に必要なツールが多く、それぞれの動作を追いかけるのが少々面倒くさい。こちらも、再び気が向くまでそっとしておくことにした...<br/><h2><a href="https://github.com/Hanmac/libogre-ruby">Libogre-ruby</a></h2><br/>普通に人力wrapperを作成しているが、まだ完成していない。進捗度は自作のwrapperと大差なく、開発も止まっているようなので、遠くから見守ることにした...<br/><h2>まとめ</h2><br/>ざっとググってみたが、意外に少なく、また今のところ決定打が見当たらない。C++からのruby wrapper自動生成に関しては、Ogre3Dで多用しているtemplateとネストの対処が鬼門のようで、皆さん苦労しているように見受けられる。人力生成は途中で飽きてくるため、各自必要な部分だけ作ったら止めてしまっているようだ。 どれかを手伝うのが世の中的には良い気がするが、シャイな私には無理のようだ。abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-79842050826652433372011-12-05T03:55:00.000+09:002012-02-21T22:12:06.619+09:00Skyrim恐るべしおもしろすぎて、休日の時間が吸い取られる...abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-82366684083879383612011-10-31T07:56:00.000+09:002012-02-21T22:12:06.619+09:00swig生成コードがerror: no matching function for callとのたまったら以下の条件に当てはまるか確認します。<br/><ol><br/> <li>エラー該当コード行が以下のようなデフォルトコンストラクタを呼ぶコード<br/>Ogre::ResourceManager::ResourceMapIterator result;</li><br/> <li>Ogre::ResourceManager::ResourceMapIteratorはデフォルトコンストラクタを呼べない</li><br/></ol><br/>当てはまる場合は、デフォルトコンストラクタを呼ばないコード生成をswigにさせましょう。<br/>具体的には、以下のような2行を、該当コードを生成するクラス用interface宣言より前に記述します。<br/><br/>%feature("valuewrapper") Ogre::ResourceManager::ResourceMapIterator;<br/>class Ogre::ResourceManager::ResourceMapIterator;<br/><br/>詳しい説明は、<a href="http://www.swig.org/Doc2.0/SWIGPlus.html#SWIGPlus_nn19">こちら</a><br/><br/>結果、コードが以下のように代わり、デフォルトコンストラクタが呼ばれないコードとなります。<br/>SwigValueWrapper< Ogre::ResourceManager::ResourceMapIterator > result;<br/><br/>keywords: swig, default constructorabexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-72452643484482112982011-10-07T08:26:00.000+09:002012-02-21T22:12:06.619+09:00Ubuntuでkey repeatが効かなくなった時の対処Ogre3Dライブラリを使用して遊んでいると、頻繁にkey repeatが効かなくなることがあります。<br/>その時は<br/><ol><br/> <li>メニューのシステム => 設定 =>キーボードを選択</li><br/> <li>全般タブのリピート・キーのチェックボックスを、一度OFFして、すぐにON</li><br/></ol><br/>で復帰させることが出来ます。<br/><br/>ちなみに、Ogre3Dでkey repeatが効かなくなるのは、Ogre3Dがinput methodとして使っているOISの終了処理が適切に行われていないためと思われます。abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-9075370052490937952011-09-09T22:36:00.000+09:002012-02-21T22:12:06.620+09:00cmake環境におけるmake実行状態を詳細に表示するcmakeは非常にすばらしいツールなのですが、コンパイル時に問題が起きたときに何をやっているのか良く分からない事が良くあります。これは、生成するMakefileに.SILENTが設定されているために、実行処理のほとんどが表示されないことが要因の一つと考えられます。(順調にコンパイルできているときは、すっきりした見栄えで好きなのですが...)<br/>そのような時は、CMakeLists.txtに<br/><pre>set(CMAKE_VERBOSE_MAKEFILE true)</pre><br/>実行コマンドの全てが表示されるMakefileが生成されるようになるので、自動設定されたコンパイルフラグやリンクパスの確認ができます。abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-55029883862094649422011-09-08T10:23:00.000+09:002012-02-21T22:12:06.620+09:00Ubuntu 11.04にastah(旧JUDE)を入れるUmbrelloも良かったんですが、今時なツールも使ってみようかと思いましてastahを入れてみました。Ubuntu 11.04にastahを入れるポイントは2点です。<br/><ol><br/> <li>sun-javaを入れる<br/>Sun JavaはPartnerリポジトリに移動しています。リポジトリに追加してインストールしましょう。</li><br/> <li>フォントを入れる<br/>日本語に豆腐(ーとかが豆腐になる)がある場合、vlgothicを入れるとなくなります。またフォントが綺麗になります。</li><br/></ol>abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-53185420513087020932011-08-26T10:39:00.000+09:002012-02-21T22:12:06.620+09:00華やかさをサポートしてみたいま日本でもっとも多く手に入るモデル形式、PMD/VMDをサポートしてみました。<br/><br/><a href="http://abexsoft.files.wordpress.com/2011/08/latmiku1.png"><img class="alignnone size-medium wp-image-43" title="LatMiku1" src="http://abexsoft.files.wordpress.com/2011/08/latmiku1.png?w=300" alt="" width="300" height="193" /></a><a href="http://abexsoft.files.wordpress.com/2011/08/miku2.png"><img class="alignnone size-medium wp-image-44" title="Miku2" src="http://abexsoft.files.wordpress.com/2011/08/miku2.png?w=300" alt="" width="300" height="193" /></a><br/><br/>まずは何とか動いているというレベルですが、自作のショボい棒人形と違って、とても華やかになりますね。でも時々スカートが荒ぶって、あられもない姿になってしまうので、まだ多くの修正/調整が必要そうです。まぁ、男の子遺伝的にはウェルカムなんですが、見えそうで見えないところに夢があるような気がするので…<br/><br/>PMDは、Lat式ミクVer2.3(Latさん作)<br/>VMDは、スイートマジック(くきょ@せっきょんさん作)<br/>コードは、<a href="http://d.hatena.ne.jp/ousttrue/">irrmmd</a>と<a href="http://sourceforge.jp/projects/meshio/">meshio </a>(ousttrueさん作)を取り込む形で作成しました。<br/>皆さん、いい仕事してますね。abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-37774855998579894232011-08-15T13:20:00.000+09:002012-02-21T23:15:58.232+09:00仮想3D空間を作って遊びたい理由はよく分からない。<br />
世界征服を目指す男の子遺伝子のせいなのだろうか?<br />
とにかく作ってみた。<br />
<br />
<a href="http://abexsoft.files.wordpress.com/2011/08/miniaturegarden2.png"><img alt="" class="alignnone size-large wp-image-25" height="257" src="http://abexsoft.files.wordpress.com/2011/08/miniaturegarden2.png?w=1024" title="MiniatureGarden2" width="400" /></a><br />
<br />
シュールな絵になってしまった。<br />
世界征服感がまったくない。<br />
もっと人が必要な気がする。<br />
<br />
<a href="http://abexsoft.files.wordpress.com/2011/08/miniaturegarden3.png"><img alt="" class="alignnone size-large wp-image-26" height="258" src="http://abexsoft.files.wordpress.com/2011/08/miniaturegarden3.png?w=1024" title="MiniatureGarden3" width="400" /></a><br />
<br />
う~ん、いいんじゃないか。<br />
世界征服っぽい感じがでてますね。<br />
ただ、ちょっと世界に動きが感じられないのが問題だ。<br />
物理エンジンを搭載してみよう。<br />
<br />
<a href="http://abexsoft.files.wordpress.com/2011/08/ballattack0.png"><img alt="" class="alignnone size-medium wp-image-28" height="194" src="http://abexsoft.files.wordpress.com/2011/08/ballattack0.png?w=300" title="BallAttack0" width="300" /></a><a href="http://abexsoft.files.wordpress.com/2011/08/ballattack1.png"><img alt="" class="alignnone size-medium wp-image-29" height="192" src="http://abexsoft.files.wordpress.com/2011/08/ballattack1.png?w=300" title="BallAttack1" width="300" /></a><a href="http://abexsoft.files.wordpress.com/2011/08/ballattack21.png"><img alt="" class="alignnone size-medium wp-image-31" height="192" src="http://abexsoft.files.wordpress.com/2011/08/ballattack21.png?w=300" title="BallAttack2" width="300" /></a><br />
<br />
拳王様のお通りだぁ~<br />
<br />
あれ、こんな事したかったんだっけ・・・abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-66532156793575302592011-08-15T09:05:00.000+09:002012-02-21T22:12:06.620+09:00MMDのモデルに対応してみるのはどうだろうか今時のモデルフォーマットといえば、MMDのモデルデータ(PMD)かな?<br/>初音ミクと戯れるのもいいかもしれない。abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-1776414950821360032011-08-03T04:39:00.000+09:002012-02-21T22:12:06.628+09:00Rubyの拡張ライブラリのプロファイルをとる方法メモ<div class="section"><br/><br/>Rubyからロードされて実行される拡張ライブラリの処理をプロファイルする方法です。<br/>(gprofなどの一般的な方法は、拡張ライブラリ内の処理まではプロファイルしてくれません)<br/>現状、プロファイルできることが判明しているのは、oprofileとgoogle-perftoolsです。<br/>どちらもubuntuならaptで簡単にinstallできました。<br/><h4>oprofile</h4><br/>システム全体のプロファイリングを目的としているものなので、まわりで動いているプロセスも全部プロファイルされてしまいます。<br/>また、カーネル側の設定によっては使えないので、クラウド系サービスなどの環境でカーネル設定を変更できない場合は使えません。<br/><blockquote>$ sudo opcontrol --reset<br/>$ sudo opcontrol --start<br/>$ ruby load-ext.rb<br/>$ sudo opcontrol --shutdown<br/>$ opreport -l</blockquote><br/><h4>google-perftools</h4><br/>私としては、こちらがお勧めです。<br/>下記の方法で、サンプリングによる関数呼び出しのプロファイル結果が出ます。<br/><blockquote>$ LD_PRELOAD=/usr/lib/libprofiler.so CPUPROFILE=./profile.out ruby load-ext.rb<br/>$ google-pprof --text /usr/bin/ruby ./profile.out_5941</blockquote><br/>5941はプロセスIDです。<br/>プロファイル絡みでは、これ以外にヒープのメモリリークチェックやプロファイル結果のグラフ化などができます。<br/><br/></div>abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-85855939413977571172011-07-15T07:35:00.000+09:002012-02-21T22:12:06.628+09:00スマートフォンリンク ナビクレイドル(SPX-CS01)<div class="section"><br/><p>とても面白そうだったので<a href="http://pioneer.jp/carrozzeria/splink/cradle/" target="_blank">SPX-CS01</a>を購入しました。<br></p><br/><h4>特徴</h4><br/><ol><br/><li>クレイドルなのでスマートフォンを車に置く場所として使える</li><br/><li>クレイドルについているmicroUSB端子でスマートフォンを充電できる</li><br/><li>クレイドルについているBluetoothでスマートフォンと通信でき、スマートフォンの音を出せる</li><br/><li>クレイドルにステレオミニジャックがついているので、車の音声外部入力(AUX)に接続することで車から音を出せる</li><br/><li>クレイドルのジャイロ/GPS連携でスマートフォンが高性能ナビになる</li><br/><li>ハンズフリー電話になるらしい(まだ電話がかかってこないので...)</li><br/></ol><br/><h4>感想</h4><br/><p>わたし的には大ヒットです。スマートフォンを充電しながら音楽が聞けるので、とても便利です。また、クレイドルにスマートフォンを載せなくてもBluetoothリンクできるので、同乗者のスマートフォンからでも(リンクさせれば)音楽を流せるはずです。<br><br>音楽再生手順は以下。</p><br/><ol><br/><li>PCで音楽入手し、DropBoxフォルダに置く</li><br/><li>スマートフォン側DropBoxアプリで同フォルダを同期(ダウンロード)</li><br/><li>クレイドルとスマートフォンをBluetoothでリンク</li><br/><li>スマートフォンで音楽再生すると車のスピーカから音楽が流れる</li><br/></ol><br/><p>CD焼きから解放されて大満足です。<br><br>本来のメイン機能であるナビもクレイドルのジャイロ/GPSのおかげで精度/追従性が極めて高く、十分使えます。<br>ですが</p><br/><ul><br/><li>ダッシュボードに配置すると(夏なので)スマートフォンが焼けそう</li><br/><li>スマートフォンの画面はナビとしては少し小さい気がする</li><br/><li>別に7年前の純正ナビで困ってない</li><br/><li>なんか邪魔</li><br/></ul><br/><p>という保守的な理由からナビ機能は当面ベンチを温めてもらうことにしました。<br>何で買ったんだっけ…</p><br/><h4>愛車(初期型アテンザ)メモ</h4><br/><ul><br/><li>音声外部入力(AUX)なんて近代的なものはついていないので、<a href="http://sol20.com/ATENZA/maz_aux.htm" target="_blank">確保</a>する必要あり。愛車には純正ナビがついていたので「純正ナビの外部入力への接続」をディーラに付けてもらった。</li><br/><li>クレイドルの配置に関しては、運転席と助手席の間にあるカップ置きがちょうどいい</li><br/><li>クレイドルの音声外部出力端子から音を出すには、DriveNetアプリの設定->クレイドル設定にある「内蔵スピーカを使用する」をオフにしないといけない。</li><br/><li>「純正ナビの外部入力への接続」した場合、外部入力をスピーカに出すには、テレビのチャンネルにあるVTRを選択すればよい。</li><br/><li>音が聞こえない場合は、(クレイドルではなく)スマートフォンの音量を確認。</li><br/></ul><br/></div>abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-41448382620506804592011-07-07T10:03:00.000+09:002012-02-21T22:12:06.629+09:00Debian からUbuntuへ<div class="section"><br/><br/>お堅いDebianから元気一杯なUbuntu(11.04)に乗り換えてみました。<br/>予想に反してほとんど困ることがなく移行できてしまいました。同系統だからでしょうか。<br/>しかし、インストール環境もデスクトップも、とてもグラフィカルで安定したものになりましたね。<br/><br/>ネタがないので、ちょっと戸惑った事だけメモとして残しておきます。<br/><h4>ディスクの準備に気をつけよう</h4><br/>昔と違ってインストーラがグラフィカルかつスムースなのでシステムの根幹を変更しているような、あの緊張感に浸れません。<br/>でも観光気分でのんきにクリックを繰り替えしていると、ディスク上の全パーティション消されます。<br/>かわいい顔してても、やることはやるんですね。<br/>ディストリビューションとは関係ない大事なファイルが入っているパーティション(別途確保している/homeとか)まで消されますので慎重に進めましょう。<br/><h4>PPPoEの設定はDSL</h4><br/>ネットワークの設定もGUIなんですね。設定->ネットワーク接続を開くと、ルータ予定のPC(今回移行実施PC)とかだと認識されている2つのEther I/Fが表示されているタブが見えるはずです。ここでどっちが外につながるんだっけ?、とか考えながら設定項目を見てしまいがちなんだけど、これはフェイクです。この設定はPPPoE設定では使いません。<br/>設定は、DSLタブ->追加ボタン->DSLタブにあり、そこにあるユーザ名とパスワードエントリに入力するだけ。Ether I/Fは勝手に適切な方を選んでくれるみたい。どうやってんだろ...<br/><h4>FirewallやNAT設定は、UFW</h4><br/>なんだか強そうな名前になりましたね。iptablesのラッパーかな?<br/>設定方法はググったらたくさん出てくるので、変更点メモだけ残しておきます。<br/><h5>パケットの転送を許可</h5><br/>/etc/default/ufw<br/><pre>DEFAULT_FORWARD_POLICY="ACCEPT"</pre><br/>/etc/ufw/sysctl.conf<br/><pre>net/ipv4/ip_forward=1</pre><br/><h5>NATの設定</h5><br/>/etc/ufw/before.rulesの最初にnatルール追加。<br/>また、MTU調整用ルール追加。<br/><pre># nat Table rules<br/>*nat<br/>:POSTROUTING ACCEPT [0:0]<br/><br/># Forward traffic through ppp0 - Change to match you out-interface<br/>-A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE<br/><br/># don't delete the 'COMMIT' line or these nat table rules won't<br/># be processed<br/>COMMIT<br/><br/># Don't delete these required lines, otherwise there will be error<br/>*filter<br/>...<br/># Path MTU Discovery Problem<br/>-A ufw-before-forward -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu<br/>...</pre><br/>あと、ppp0をフレッツなら1454にしないとアクセスできないサイトが出ますので、ifconfigを使ってppp0のMTUを1454に変更します。<br/><a href="http://progma.blog136.fc2.com/blog-entry-10.html" target="_blank">http://progma.blog136.fc2.com/blog-entry-10.html</a><br/><br/></div>abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-41099790830451965072011-07-05T11:05:00.000+09:002012-02-21T22:12:06.629+09:00スマートフォン(MEDIAS WP N-06C)とPCとUSB接続<div class="section"><br/><p>付属のUSBケーブルをN-06Cに挿してPCに接続する状況下で<br>N-06CがUSB接続を認識してくれない(USB認識通知が出ない)事があります。<br><br>そんな時は、迷うことなく伝家の宝刀「再起動」です。<br>N-06Cの電源を一度off/onすると、私の場合は直りました。<br><br>まぁ、データ移動(音楽とか)だけでしたら、いまどきは<br><a href="https://www.dropbox.com" target="_blank">Dropbox</a>などのクラウド系サービスを使った方が楽ですね。<br><br>不具合繋がりでもう一つ。<br>N-06Cはまれに(2回/4日確認)再起動してますね。<br>条件はよく分かりませんが、夜中にされるとなかなか不気味です。<br><br>次のアップデートに期待しましょう。<br><br>P.S.<br>7/7のアップデート以降、再起動しなくなった気がする</p><br/></div>abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-66939987202222736762011-07-05T10:21:00.000+09:002012-04-18T07:55:12.997+09:00GitHubにpushするREADME.mdの見た目を事前に確認する方法<div class="section">
<br />
<br />
見栄え調整のためだけに、3回もcommitしてしまいました。<br />
<ul><br />
<li>gem install github-markup</li>
<br />
<li>gem install rdiscount</li>
<br />
<li>github-markup REAME.md > README.html</li>
</ul>
<br />
rdiscountは、.md(markdown)フォーマットで必要になります。<br />
その他のフォーマットに関しては、下記にて確認しましょう。<br />
<a href="http://rubydoc.info/gems/github-markup/0.5.3/frames" target="_blank">http://rubydoc.info/gems/github-markup/0.5.3/frames</a><br />
<br />
P.S.<br />
もっとよい方法がありました。<br />
下記リンクに書き込めばリアルタイムで変換結果を見ることができます。<br />
<a href="http://github-preview.herokuapp.com/">http://github-preview.herokuapp.com/</a><br />
これは非常に便利ですね。</div>abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0tag:blogger.com,1999:blog-7285032304499621917.post-54021452403888368482011-07-05T01:52:00.000+09:002012-02-21T22:12:06.629+09:00ws2_32.dllとmsvcrt-ruby191.dllとSocket Error<div class="section"><br/><br/>MinGW環境上においてRuby拡張ライブラリでネットワークプログラムを書くときのメモ。<br/><ul><br/> <li>リンクの際には-lmsvcrt-ruby191より先に-lws2_32をいれるべし。</li><br/></ul><br/>WSARecvFrom()がエラーで、WSAGetLastError()結果がWSAENOTSOCKだったら上記を確認。<br/><br/></div>abexsofthttp://www.blogger.com/profile/16927908256975701869noreply@blogger.com0