カテゴリー: Programming

Programming

gitについての記事

git の話をしているところにピッタリなタイミングでこんな記事がありました

ソーシャル化するOSS開発者たち

この記事を読むと、CVS や Subversion(svn) と git が全く違うということがわかります。

特に目から鱗だったのが、CVS や svn の中央レポジトリが物理的な”土地”と同じく政治的な意味を持つのに対して、 git のようなどこにでも同じレポジトリが存在するようになるとレポジトリという形は意味をなさなくなり、それぞれのレポジトリ上で何が行われているかが意味を持ってくるという話でした。
分かれたレポジトリで興味深い変更がされたら、自分のところに持ってくる(git pull)ということなんですね。へー。

この文章を読むと、 git 内での物事の考え方がわかる気がします。私も早速 lucille のクローンでも作ってみますかねw

CG, lucille, Programming

lucille@github を使ってみよう

仕事が一段落して、久しぶりに心休まる週末なので github を使ってみることにしました。
とは言っても、github を使うのが目的ではなく lucille の最新コードを手元に持ってきていつでも最新版を使えるようにしたいのです。

github?
ここ最近開発者の間で流行っている Git のリポジトリを公開するためのサイトです。Git は…CVS とか Subversion とかのソースコード管理システムの一つみたいな認識でいいんじゃないかと。何で流行ってるのかと言うと…何でだろ?

Git?
そもそも Git って何よ?という感じだったので Wikipedia を参照すると、なるほど、

  • Linuxカーネルを開発するためにリーナスが作った
  • 分散バージョン管理システム

ということですか。これは流行るわけだと妙に納得。

使ってみる
とりあえず github から lucille のコードを持ってきます。
これはもう簡単。Web ページからダウンロードできます。download ボタンを押すと zip か tar で持ってこれるようです。

ダウンロードしたら適当な場所に解凍してビルド。

ビルド
INSTALL を読むと幾つか依存するツールがあります。

  • python ( for scons )
  • scons > 1.0 ( http://www.scons.org/ )
  • flex
  • bison
  • gcc > 4.0 (If you use gcc)
  • cunit ( Optional. Used for unit testing. http://cunit.sourceforge.net/ )

足りないツールはサクサクと入れちゃう。昔はソースコード原理主義で一から作る派だったけど、今はそんな元気ないので Fink を使っちゃう。
環境が整ったらドキュメント通りに build/install。私の環境(Mac OSX 10.5)だと特につまづくところもなくおわりました。

レンダリング

>lsh tut1.rib

とかでレンダリングできる。…がっ! muda とかいうファイルができるだけ。何これ?私のやってることはムダだって言われてる?(言ってません)
rib をいじって出力先を muda.tif に変えてみる

Display “muda.tif” “tiff” “rgb”

muda.hdr ができる。出力は問答無用で HDR ファイル?なんて漢仕様(涙

3Deliht についている hdri2tif でも読めない。うむむ。。。

とりあえずドキュメントでも読むか
lucille のドキュメントは SPHINX というものを使っているみたいです。doxygen みたいなもの? Python の easy_install というものでサクッとインストール。

>sudo easy_install sphinx

その後、doc/userman に移って make。

chiyama@lain:~/Projects/OpenSource/syoyo/lucille-git/doc/userman[668]% make
make html
mkdir -p build/html build/doctrees
sphinx-build -b html -d build/doctrees . build/html
Running Sphinx v0.6.1
loading pickled environment… done
building [html]: targets for 5 source files that are out of date
updating environment: 0 added, 0 changed, 0 removed
looking for now-outdated files… none found
preparing documents… done
Exception occurred: 20%] cgkit
File “/Library/Python/2.5/site-packages/Jinja2-2.1.1-py2.5-macosx-10.5-i386.egg/jinja2/environment.py”, line 357, in parse
raise e
TemplateSyntaxError: expected token ‘lparen’, got ‘block_end’
File “/Users/chiyama/Projects/OpenSource/syoyo/lucille-git/doc/userman/_templates/layout.html”, line 7
{%- macro relbar %}
The full traceback has been saved in /var/folders/Jo/Jonjry+EHaeb9BGfWDzB2k+++TI/-Tmp-/sphinx-err-VdNq5_.log, if you want to report the issue to the author.
Please also report this if it was a user error, so that a better error message can be provided next time.
Send reports to sphinx-dev@googlegroups.com. Thanks!
make[1]: *** [html] Error 1
make: *** [all] Error 2
chiyama@lain:~/Projects/OpenSource/syoyo/lucille-git/doc/userman[669]%

エラー!!ガッデム!!
ドキュメントが生成できない問題は syoyo さんが早速対応して下さって解決しました 😀
ありがとうございました。

とりあえず置いておいて git 環境を作る
すぐに解決しなさそうなので最初の目的に戻る。Web 経由ではなく、コマンドラインから手軽に最新のコードを持ってこれるようにする。

GitHubを使い始めてみたメモ

このあたりを参考に、git 環境を作る。これも Fink で一発。

Binary がなくて source から入れることになって小一時間かかってしまった。。。

気をとりなおして環境構築の続き。

git にユーザー名とメールアドレスを登録する。

> git config –global user.name “Hiroshi Chiyama”
> git config –global user.email “hchiyama@gmail.com”

clone でマスターと同じものを手元に持ってくる。

> git clone git://github.com/syoyo/lucille.git
Initialized empty Git repository in /Users/chiyama/Projects/OpenSource/lucille/.git/
remote: Counting objects: 3139, done.
remote: Compressing objects: 100% (1457/1457), done.
remote: Total 3139 (delta 1946), reused 2757 (delta 1626)
Receiving objects: 100% (3139/3139), 4.72 MiB | 384 KiB/s, done.
Resolving deltas: 100% (1946/1946), done.

できたので試しにビルドしてみたりレンダリングをしてみたりする。

日々の更新
ここまでこれば常に最新版を手元に持ってくることができるようになる。

> git pull

まとめ
これでひとまず環境は整いました。ちょっと使った感じ、git は個人で使うにはちょっとオーバースペックすぎるかなぁという気もします。分散開発とかの概念が入ってる分、CVS や Subversion よりも複雑な印象を受けます。慣れれば便利なんでしょうけどね。

今後は lucille の開発動向を追いつつ、いろいろと試してみようかなと思います。今回解決できなかった問題もいくつかあるし。

Blender, CG, Programming

Blender一人読書会

CGソフトの内部構造が知りたかったので、Blenderのソースを読んでみました。ドキュメントを色々探したところ、blender.org – Architecture がBlenderの内部構造解説の決定版ぽいです。

ここを読めばアナタも Blender Master!! …というわけにはいかないですが、解析のための大きな手掛かりになります。
特にページ下部にあるソースコードの構造図はものすごく参考になります。この手の解説は古すぎて最新版では全く参考にならないことが多いのですが、私が見た限りこの図の通りの構造になっているようです。

あとは、Adding new Space Window のように、機能を追加する際の手順を解説してあるドキュメントを参考にするとデータや関数の相互関係の理解がしやすいです。で、これを読んでわかったんですが Blender って機能拡張しようとするとかなり厄介です。ソースコードのあちこちに依存関係が散らばっていて、それを把握するだけでも一仕事です。最近であればきちんとクラス化して、必要な部分を埋めていくだけで機能拡張できるようなアーキテクチャにするんでしょうがBlenderは定数定義、新関数の定義の嵐で目が潰れそうですwww

このあたりまで目を通せれば当初の目的は大体達成できたので、これぐらいでやめておきます。

Blender は思っていた以上にドキュメントが充実していて、比較的簡単にソースコードを読むことができたのはうれしい誤算でした。オープンソースの統合型3DCGソフトなんて他にないので、とても助かります。

ただ、内部の構造が余りにもスパゲティすぎるのが困りものです。ガイドがないと手も足も出ません(苦笑。
アーキテクチャも柔軟性に欠けるし、コアから書きなおしたほうがいいんじゃないか?というのが正直な感想です。


(追記)Hackers Guideに、実際にコードを書く時の情報がまとまってます。

Programming, コンピュータ

Study of Graph Programming

週末に手をつけていたグラフ作成・描画プログラムがとりあえず動いた。
データ部分はちゃんと作ったのだけれども、描画部分がものすごいヤッツケなのでいろいろと直さないといけない。

YouTube にアップしたら、映像がジャギジャギで何が何だかわからなくなってる(涙。アップロード方法ももうちょっと研究しないと。

CG, Proce55ing, Programming

Proce55ing/Javaの罠

帰省の新幹線の中で Proce55ing を使ってちょっとしたプログラムを書いていた時に気づいたのが、Proce55ing(というより、Java)って演算子のオーバーロードに対応してないんじゃん!!ということ。

これは困る。ものすごく困る。行列演算ができないなんてレベルじゃなく、この環境でプログラムを書くのは無理無理!!ってくらい困る。

だって、ベクトルの演算をするときに

Vector3 v1(1,0,0);
Vector3 v2(0,1,0);
Vector3 v3 = v1+v2;

とかできなくて、

Vector3 v1(1,0,0);
Vector3 v2(0,1,0);
Vector3 v3 = v1.add(v1,v2);

みたいなことをしないといけないんですよ。これは余りにも直感的じゃなさすぎです。こんなので複雑な計算とかできません。

しかたないので、P5で書いたコードは捨てて C++ で一から書き直すとします。どの道、ある程度動作確認ができたら書きなおすつもりだったのでいいんですけどね。

Proce55ingは手軽にプログラムが書けて描画も楽チンと思っていたのに、いろいろ罠があるなぁ(涙

Programming, コンピュータ

テレビ番組予約システム

これも数年前に作ったシステムの焼き直し版ですが、地デジをブラウザ経由で録画予約するシステムを作りました。

一番の特徴は何と言っても iEPG 対応です。画面を見て気づく人はすぐ気づくでしょうが、テレビ王国のデータを持ってきて、サーバー側でゴニョゴニョ(笑 して、クリック一発で録画予約ができるようにしてあります。また、録画しながらの追っかけ再生もできます(ムービー後半でやってます)。

録画には Mac 上で recfriio-018(改)+friio を使って、サーバー側は Ruby で書いてます。このベースになるシステムを作った時は RoR なんてなかったので、ベタに CGI モジュールを使ってます(笑。

久し振りにソースコードを引っぱり出して手を入れたのですが、これがまた酷いコードで辟易しましたww。今書き直せば 1/10 ぐらいのコード量になるんじゃないかという有り様です。

まだいろいろ不具合はあるんですが、まあ個人で使うのならこれぐらいで問題ないかなと思います。

Programming, コンピュータ

fltk Programming on OSX(2)

動いた〜!!いろいろハマって、休暇終了ギリギリになっちゃった。本当ならば、ここから話が始まるはずだったのにw

思ったよりも細かいところで仕様が変更されてて、それがバグなのか仕様なのか突きとめるのに時間がかかった。でも、これで fltk2.x 系に移行することができたしこれからは楽ができるんじゃないだろうか。
それにしても、今改めて見直してみると、いろいろ拙いところが目につく。社会人になりたての頃に 3DCG の理論を勉強しながら作ったプログラムだからしかたないけど、このまま流用するんじゃなく、一から作りなおしたいなと思う。
ただ、習作ながらもオブジェクトの選択・移動はもちろん、階層化やオブジェクトの動的な追加・削除も実装しているので CG ツールとして最低限必要な機能は揃っている。あとはインターフェースを作りこめばいろいろ遊ぶこともできたのだけれども、当時は一通り動かすことができただけで満足してしまったのを覚えている。
そうそう。開発環境は結局 XCode に移行した。ウィンドウが際限なく表示されるのさえ慣れてしまえば、まあまあ快適なんじゃないかと思う。少なくとも Emacs+gdb とは比較にならない(笑。あとは、全てのウィンドウについてくるゴテゴテしたボタンさえ何とかなってくれればいいんだけど…

Programming, コンピュータ

fltk Programming on OSX

半日かけて数年前に作った fltk1.x+OpenGL on Windows なアプリを fltk2 on OSX に移植してみた。

fltk1 から fltk2 への変更はほとんどがネームスペースまわりの扱いなので機械的な作業なのだけれども、たまにクラスが無くなっていたり定数の定義が変わっていたりするので、それを追いかけながら修正するのに結構時間を取られてしまった。

今日の作業で一通りコンパイルが通るようになったのだけれども、立ち上げようとすると Bus error で落ちてしまう。gdb で追いかけてみると、数年前にも似たような症状でハマった記憶があるようなところで落ちている。落ちた記憶はあるけれども、どうやって直したのかが覚えてない(笑。もしかしたら、応急処置的に動くようにしただけだったのかも。

こういうことは長期休暇ぐらいにしかできないし、半年以上まともにプログラムを書いていなかったリハビリも兼ているのでちょっと気合いを入れて動くところまで持っていきたい。

今回ほぼ初めて OSX 上でまともにコードを触っているのだけれどもそろそろ Xcode を使って開発をすることも試さないと。21世紀になって早数年、未だに Emacs+gdb で頑張るのもどうかと思うし。でもなぁ。Linux でも使える環境と言ったら Emacs+gdb が一番な気もするし。最近だと Eclipse もアリなのかな? 何だかんだ言って VisualStudio ってよくできてると思う。特にデバッギング環境は充実してて使いやすい。あれに匹敵するぐらいの環境ってないものかな。

ただ、VisualStudio を使うっていうことはあのメモ帳並の機能しかないエディタを使うっていうことになるのがたまらなく苦痛でしかない。あそこに Emacs が入ってればいいのに。昔はキーバインドだけ Emacs モドキにするようなことも試したけれども、中途半端すぎてむしろストレスが溜まるだけだったな。今でもかわらないんだろうか?

そういえば最近やねうらおさんのとこでもIDEの話をしてたよなーと思ったら見つけた。何かやねさん(VS派) vs 他(Eclipse派)みたいになってるような(笑。業界が違うんで鵜呑みにはできないけど、議論は参考になる。

 

Programming, コンピュータ

fltk bug on OSX(2)

昨日目をつけていた不具合を手当り次第修正したら、エディタの文字が崩れるのはなおった。ただ、まだカーソルを移動するとサブピクセル単位で文字がウネウネ動くのでちょっと気持ち悪い(笑。これもどこかで数値を丸めてしまっているんだろう。

 とは言え、自分用に使う分には問題ないのでこのまま放置してしまおうかと思っているw。今は単に手軽に使える(そして一番慣れている)ツールキットを使って 3D の描画がしたかっただけだから。それに、このままだと fltk のバグを直すだけで休みが終っちゃうし(笑。