2008/02/13(水)BDS2006(Turbo C++)でBoostをコンパイルするときのあれこれ
[環境]
BDS2006(Turbo C++) - bcc32(5.8.2)
Boost 1.34.1
boost-jam 3.1.16-1-ntx86
bjam.exe -sTOOLS=borland --toolset=borland --prefix="C:\Program Files\Borland\BDS\4.0" install
(cmd.exe上から)
さてこれは何度か失敗した上で結果的に成功したときの環境をメモしたもの。
失敗したときのことを思い返すに、何がダメだったのかよく分かっていないのだが、可能性がありそうなものを以下に全部列挙し次回の参考にしたいと思う次第。
・-sTOOLS=borlandだけだとborlandが無いといわれ、msvcでコンパイルされる(失敗)。
warning: No toolsets are configured.
warning: Configuring default toolset "msvc".
warning: If the default is wrong, you may not be able to build C++ programs.
・--toolset=borlandは必要なのかそれだけでいいのかよく分かっていないが、上記の失敗改善には有効。
・nyacusからだとダメかもしれない。
・Boost側がコンパイルさせるBCCのバージョンに対応していれば、BCBBoostは不要(おそらく通るライブラリは増えないし、コンパイルに失敗することがある)。
・今回のBoost-1.34.1はBCC32(5.8.2)には対応していた。(調査不足)
結局、
1.自分の使っているBCCのバージョンを調べ
2.Boostが対応しているか確認し
3.対応していなければBCBBoostを当て
4.--toolsetをつけてコンパイル
ということなのだろうか。しっくりこないなあ。
BCBBoostを当てたときは-STOOLの指定を自分のコンパイラに合わせたものにする。ここら辺はその都度BCBBoostのドキュメントやForumをあさること。
さて、Boostの対応はVC++のほうがしっかりしているのは周知の事実だ。Boostの機能をフルに使いたいならば、BCBは良い選択ではない。regexはいけそうだが、相変わらずtype_traits周りがダメくさい。
対応状況はBoostのtest項目などを調べればわかる。pythonは全滅しているようだが、python環境のインストールによってはいけるのかどうか?
[参考サイト]
http://www.kmonos.net/alang/boost/build.html
http://www.gesource.jp/weblog/archives/2006/12/borland_developer_studio_2006_1.html
http://d.hatena.ne.jp/ex_2/searchdiary?word=Boost
http://www.gesource.jp/programming/bcb/46.html
2008/02/12(火)BDS2006(Turbo C++)でSTLportをコンパイルするときのあれこれ
BDS2006(Turbo C++)
STLport5.1.5
minGW5.1.3
STLportのインストールで軽くはまったのでメモ。
STLportのドキュメント通りに作業したのだが、どうもパスがらみでmakeが上手く通らない。色々やってみたのだが、%BDS_DIR%\Binの.cfgを見にいっていないようである。プロンプトやシステム環境変数で指定してみたのだが、やっぱりダメ。むむ手強い。
一応の解決方法だが、まずSTLport内のREADME.borlandの指定通りに.cfgを書き換え(今回は必要なかった)、コマンドライン上でset INCLUDE=%BDS_DIR%\INCLUDE をしておく。しかしこれでも通らないようなので、.cfgをビルド作業ディレクトリ(%STLport_DIR%\Build\Lib)にコピーし、bcc.mak内の
STLPORT_INCLUDE_DIR = ../../stlport
を
STLPORT_INCLUDE_DIR = "../../stlport";"C:\Program Files\Borland\BDS\4.0\include"
に書き換える。
で、
mingw32-make.exe -fbcc.mak install
やっとコンパイル完了。
うーん、なにか根本的なところで理解が足りてない気がするなあ。ただ、やっぱりBCC32あたりの検索パスは何か変ではある。
http://members.jcom.home.ne.jp/komina/wiki/424453323030362F53544C706F7274A4F2BBC8A4A4A4BFA4A4.html
でやってるように、エラーが出たら-I/-Lオプション足して打ち込み直す方がシンプルな解答である気もする。
2008/02/12(火)BCC32周りの仕様
C++ Compilerとしての性能云々以前に、コマンドラインから扱う上でライブラリ検索の仕様が妙に整合性がない。Borland(Inprise)の中の人がこんなことに気づいてないはずはないのだが、一度出してしまってる以上影響が大きすぎて変えようがないのだろう。IDEとかどっかで吸収してくれということのようだ。
ライブラリやインクルードパスについて、まずBCC32,BRCC32,ilink32のいずれでも、PATH変数で汚く指定する方法では検索しにいってくれない。コマンドラインオプションで明示するか、.cfgに書く必要がある。bcc32,ilink32はこれでよいが、BRCC用の.cfgは無いようだ。
.cfgに書くときであるが、どうも.cfgをBinの中において、Binにパスを通しても見てくれないときがある。確実なのは、コンパイル作業するときの作業ディレクトリにコピーしてやること。これなら確実に見てくれるようだ。
ただこれらは、minGWからの中からの話なので、実のところ何かPATH継承外のシェルをforkしてるだけかもしれない。ということで、ここらへんはあくまでそうかもしれないという話だけで、次記事のSTLportコンパイルの時に具体的な話を書くことにする。
2008/02/03(日)Mechanize + Hpricot恐るべし
さてMechanizeに関して、どうもセレクタの仕様がよく分からない。Hpricotを取り込んでいる以上XPathやCSSセレクタが使えるはずなのだが…… バージョンが絡むからなあ。結局linksで全部返させたあとの処理は、select{} 使った方がわかりやすい感じ。安全確実。
2008/01/04(金)妄想
要望を出していいものかどうか判断付かないのでこれは独り言。
2007/11/30(金)hpricotで閉じてないタグを解析すると
<tt></tt> <tt></tt> </tt>ってhtmlがあったとしねえ。hpricotでこれを解析すると、ttの配列長は3になる。でもtt[3](1はじまり)にはnilがはいるよって話。
2007/11/30(金)Firebugがあまりに凄いので感動した
まず、開いているサイトのソースを見られる。そのソースをインタラクティブ変更してサイトへの反映を見られる。表示されてる画面の要素をクリックして該当するhtml elementをピックアップできる。ありとあらゆるリクエストをのぞける。XPathが取得できる(すばらしい!)。スタイルシートも見られる。スタイルシートもインタラクティブに変更して反映をチェックできる。
もう神過ぎて涙が出てきそう。
今のところ解析したHTMLで、存在しないTBODYを勝手に挿入してるのが不満だけど、ちっちゃい傷。
Firefoxのアドオンをきちんと調べたり探したりしているわけでもないのに、すでにValidatorとFirebugだけで欠かせないツールになりつつある。すごいねFirefox。
2007/11/30(金)Ruby on Rails[4]
・コントローラ内のインスタンス変数はどうもそのアクションで定義したものしかビューに伝わらないような感じ。ちょっとこれはまだ理解できていないのだが、変数のスコープはある程度動きを追わないと分からないかもしれない。
・関連して、@paramsとparamsは同一?
・text_fieldの階層構造が謎。アクセス方法は分かるけど何でこんなことをしている?
・SQL文を綺麗に書くメソッドがあると思うのだがみっからなかった。
・Routesの指定のしかたがわからない。
・image_tagを使わないとき、/public/imageファイルの場所は相対パスでどう書く?
・prefix的に'_'(アンダースコア)が使われることが多いので、アクション名にうかつに'_'を使うとバグった時にえらいことになりそう。セキュリティ的にも。どう解釈されるのか。そこで予約語はどう絡むのか。
[8]MySQLまわりのなぞ
・バイナリデータつっこんだときのまともなバックアップ・リストア法。
・予約語が多すぎませんか? 予約語ならつっこむときに警告を出してくれませんか? でもさすがに、fromとtoってカラム名を作ったのは私が悪かったと思います。
・MySQL AdministratorでUTF-8が文字化けするのは何でだろう。どういじっても解消せず。
・from節やwhere節って前後したらダメなの?
・ていうかSQLが優秀なのは認めるけど、書きづらいよ
・階層構造作りたい。楽に作りたい。
2007/11/30(金)Ruby on Rails[3]
renderは1アクションにつき1つという制約がある。Ajaxを使い始めると、Ajax部分を初回の表示に使いたかったりして、これが意外とこの制約に衝突することがある。打開策としては、ともかく設計段階から、Ajaxを使う予定があるところはrender :partial用にするとして、サブに分ける必要がある。
render :partialはアクションの実行がないというが一つ大事なところ。ここら辺は知識として知った上でないと設計で失敗しやすく、結構引っかかりやすいところだと思う。またrender: してからredirect_toもできない。メソッドを書いたとき、render :partialしたとき、redirect_toしたとき、どのアクションが実行されてどのビューが表示されるのか把握しておくのがRails理解の第一歩。
messageは知る限りもっともtypoが多い英単語。
[6]はまったところ、Ajaxまわり
link_to_remote, observe_formなど、Ajaxのメソッドを使うにはヘッダに
<%= javascript_include_tag :defaults %>
を書かなければいけない。けっこうどこにも書いてないので気をつける。あちこちで使いたいなら、/app/views/layoutsのモデルレイアウトに書いておけばよし。
RJSはerbではなく、純Ruby。RJSでは:partialを呼ぶだけにして、書き直す中身はサブビューに分離しておくのがスマートだと思う。
observe_formは:frequencyを書くと、Form.Observerになり、書かないと、Form.EventObserveになる。マニュアルにかいといて……
2007/11/30(金)Ruby on Rails[2]
自分のデスクトップ+WebRickで動かしていて、Apacheに移植するときの話。
基本参考サイトに従っていればいいのだが、いくつかはまりポイントがあるので記載。
fcgiで動かすために必要なことは、
・Apache側を対応させる
・Ruby側を対応させる
・アプリの設定で書く
と3つ必要になる。
(1)Apache側の対応
Apache用のFastCGIの実装には、fcgidとfastcgiで2種あるがApache2だとfastcgiがあやしいという情報があった。ただ、どっちでも動くとかどちらかはダメだとか情報が揃っていない。
aptitude searchして、debianのライブラリをのぞくと、fastcgiでもlibapache-mod-fastcgi,libapache2-mod-fastcgi2種あるので名前からfastcgiが動くと判断。
ということで、
#aptidue install libapache2-mod-fastcgi
する。aptが勝手に/etc/apache2/mods-available/fastcgi.confを作ってくれるので何も設定がいらない(なんて楽なんだ!)
#apache2ctl restart
してやる。
(2)Ruby側の対応
debianなので、
#aptitude install libfcgi-ruby1.8
してやるだけ。gemで入れた方が良かった?
(3)アプリ側の設定
a. public/dispatch.fcgiのRubyアドレスを書き換え。
#!/usr/bin/rubyとか。
b. .htaccess書き換え。
RewriteRule
↓
RewriteRule
c. パーミッション設定
dispatch.fcgi -> 755に
/log, /tmp(これ必要ないって噂あるけど)->777に
d. /config/database.ymlをサーバ側の設定に合わせる
データベース名、パスワードの設定など。場合によっては、MySQLのsocket位置を指定しなければいけないかもしれない。
また、以降アプリを更新する際は、/configと/public以外をコピーし、/public/images等に変更があった際はそれを個別にコピーでいいと思う。
[参考]
・pylori*style wiki - RailsでWikiクローンを作る12
http://tam.qmix.org/wiki/Minki12.html
・Apache2 + fcgid + Ruby on Railsメモ - sakuramateo.
http://d.hatena.ne.jp/sakuramateo/20060205/1139162716
・83's : /tmp/mysql.sockが見つからないって言われた
http://fg-180.katamayu.net/archives/2005/08/25/185402