メイン | 2006年09月 »

2006年08月 アーカイブ

2006年08月14日

MacOSX * ruby * gdbm

rubyのmake時にgdbmが無いと当然gdbmライブラリも作られない。
なので、そっからどうやってgdbm入りのrubyにするかを以下にログ。
尚、rubyのmake時にはRailsを視野に入れてconfigureする。

■ここでの前提条件
・Mac OS X (10.4.7) Intel
・開発キットインストール済み(Xcode等)
・darwinportインストール済み


■手順1
darwinport経由でgdbmを入手。
finkだとなぜかできなかった。

$ port install gdbm
---> Fetching gdbm
---> Attempting to fetch gdbm-1.8.3.tar.gz from ftp://ftp.gnu.org/gnu/gdbm
---> Verifying checksum(s) for gdbm
---> Extracting gdbm
---> Applying patches to gdbm
---> Configuring gdbm
---> Building gdbm with target all
---> Staging gdbm into destroot
---> Packaging tgz archive for gdbm 1.8.3_1
---> Installing gdbm 1.8.3_1
---> Activating gdbm 1.8.3_1
---> Cleaning gdbm
でインストール完了。


■手順2
Rails用にreadlineをインストール。
わかりやすいよう展開用の/srcフォルダを作成。

$ cd src/
$ curl -O ftp://ftp.gnu.org/gnu/readline/readline-5.1.tar.gz
$ tar xzvf readline-5.1.tar.gz
$ cd readline-5.1
$ ./configure --prefix=/usr/local
$ make
$ sudo make install

でひとまず完了。


■手順3
続いてRuby本体をインストール。
darwinportでは/opt配下に色々と入れられるので、./configureのときに
--with-opt-dir=/opt/localオプションをつける。
そうすると、/opt/local/lib配下にあるgdbmモジュールを見つけてくれる。

$ curl -O ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.4.tar.gz
$ tar xzvf ruby-1.8.4.tar.gz
$ cd ruby-1.8.4
$ ./configure --prefix=/usr/local --enable-pthread --with-readline-dir=/usr/local --with-opt-dir=/opt/local
$ make
$ sudo make install
$ make install-doc

これで、/usr/local/lib/ruby/1.8/i686-darwin8.7.1配下に
gdbm.bundleがあれば成功。


■参考
http://gdbm.darwinports.com/
http://hivelogic.com/articles/2005/12/01/ruby_rails_lighttpd_mysql_tiger
http://mput.dip.jp/osx/?date=20030506



MacOSX * rails

gdbmライブラリを含むようにrubyをmakeすると、rails及びrubygemが起動しなくなる不具合が発生。
正確にはrubyのconfigure時に/opt配下のopensslを見に行くのが悪いっぽい。

gdbmを見つけられるようにrubyのconfigureの時に--with-opt-dir=/opt/localオプションをつけるのだが、そこでopensslも見に行っているらしく、その/optからインストールされたopenssl.bundleがrailsの中で存在しないメソッドを呼び出しているために↓のようなエラーが起きる模様。

$ rails $ dyld: NSLinkModule() error $ openssl.bundleがどうのこうの

普通はreadline.bundleの設定が出来ていない時にこのエラーが起きるらしい。
今回はreadlineは問題ない模様。

opensslを入れ直せば直るかと思い

$ sudo port install openssl $ sudo port selfupdate $ sudo port install openssl

とか色々するも、エラーが起きて続行できない。
その他何をどうやっても/optをconfigureオプションで渡したrubyとrailsは共存しないらしい。


しょうがないので、もう一度rubyをconfigureしなおしてmakeする。
configureのオプションは以下。

$ ./configure --prefix=/usr/local --enable-pthread --with-readline-dir=/usr/local

あとは

$ make $ sudo make install $ sudo make install-doc

で完了。
この設定でconfigureしたrubyだと、gemやrailsがちゃんと動くようになる。



2006年08月17日

YouTuber.jsp * Tomcat

YouTuberのjsp版を作成中。

フォームで空白区切りで2単語以上指定された場合は"+"で各単語を区切るが、そうするとなぜか1ページ分しかクロールしてこない問題発生。あと日本語も化ける。

ここを参考にserver.xmlの内に以下を追加したら、ひとまず"+"で区切っても検索できるようにはなった。

<Context> <!--YouTuberJsp--> <Context path="/YT" docBase="YT" debug="0" reloadable="true"/> <DecodeInterceptor defaultEncoding="UTF-8" useSessionEncoding="false" /> </Context> </Server>

要日本語対策。



2006年08月19日

YouTuber.jsp * Tomcat (2)


日本語対応の件を一応解決したのでログ。
JSP内でrequestを受け取る時に、


request.setCharacterEncoding("UTF-8");     <--コレ
String keyword = request.getParameter("q");
String pages = request.getParameter("pages");


コレにあるように指定すると、GETで飛んできたものをUTF-8にエンコードできる。
ところがこれは表示用文字化け対策としてGETで飛んできたものをエンコードするので、
それをそのままJSP内のJavaコンストラクタとかに投げると当然youtube側にリクエストできなくなる。


つまり、[漫才]で検索した場合、上のコードのままkeywordをJavaに渡すと、
youtube.com?q=漫才
みたいな感じで問い合わせてしまうので、当然結果は返ってこない。


なので、JSP側でもっかい
String encoded = URLEncoder.encode(keyword, "UTF-8");
として日本語文字列を
%E3%83%86%E3%83%AC%E3%83%93
のような形にエンコードしてからJava側に投げる。


これは最初Javaのクラスファイルの中でそう言う処理をさせていたが、それだと何故かうまくいかなかったので、JSP内で上記のエンコードを行ったら成功した。
ちなみにやはり一部日本語が完全に戻らない。。



2006年08月22日

prototype.js * YouTuber.jsp(Ajax)


YouTuber.jspのAjaxバージョンdevelopment版をローンチ。
YouTuber.jsp beta


■[next]や[prev]を表示
色々と調べていて、検索結果に続きがあるとき[next]や[prev]を表示する所謂ページングを実装しようとしてなかなかうまくいかなかったが、表示アルゴリズムをJava側で処理させたらできた。
具体的には、単純に[List#size()が100を返すときだけ表示]そうじゃないときは表示しない、とかにしてdivを吐かせれば簡単に実装できた。


■にJavaScriptを埋め込む方法
jspオンリーバージョンだとsetTimeoutでパラパラと3枚の画像を入れ替えていたが、Ajax版だとに如何にして埋め込もうか思案中。JSPもう一個つくってそいつに吐かせればいい気もするが、処理が2倍かかる気がしてならない。。


■ラジオボタンの値を取得する。

prototype自身は単発でラジオボタンの値を取得するメソッドは持ち合わせていないらしい。
なのでラジオボタンの選択肢によってリアクションを変えたい場合、以下のようにコーディングするとラジオボタンの値を取得できる。


var option = Form.serialize($('optionform')).toQueryParams()['options'];


id名optionformのフォームに含まれるものを全て一旦クエリの形式に変形して、その中からoptionsという引数で渡されるものものだけを取り出している。

■Now Loading...の表示の仕方。

prototypeでは、Ajax.Requestする際にイベントを引数に取ると、特定イベントにメソッドを割り当てる事ができる。
なので、now Loading...やローディング画像を表示したい時には、

new Ajax.Request('target.jsp',
{
method: 'get',
parameters: params,
onLoading: showLoading,
onComplete: getResponse
});

このように明示的にonLoadingイベントでshowLoadingというメソッドが呼ばれるようにする。
showLoadingメソッドはこのように設定。

function showLoading() {
Element.hide('thumbnails');
Element.show('loading');
}

prototypeのElementクラスのshow / hideメソッドを用いる事で、簡単に指定したid(ここではthumbnailsというdiv)の表示・非表示を切り替えられる。今回はloading というdivにloading.gifを配置して初期化の際にhide、そしてonLoadingでshowすることでデータのロード中はローディング画像を表示するようにした。



2006年08月25日

Tomcat5.5.x * 日本語

Tomcat4.xからTomcat5.x(今回は5.5.17)に移行した際、文字化けに当ったのでログ。


Tomcat5.xになってから、デフォルトでGETパラメータのURIのエンコーディングにutf-8を利用するようになっているようだ。なので[TOMCAT_HOME]/conf/server.xmlのConnector要素で

<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true"/>
とすれば良いらしいが、今回はこれでは直らなかった。 ここを参考に、 受け取る側のJSPで

[変更前]


request.setCharacterEncoding("UTF-8");
String keyword = request.getParameter("q");

[変更後]


// request.setCharacterEncoding("UTF-8");
String keyword = new String(request.getParameter("q").getBytes("ISO-8859-1"), "UTF-8");

としたら直った。



Mac OSX * Apache2 * tomcat5 * mod_jk2

AjaxするにはなにかとJSP2.0だといいっぽいので、Tomcat4.1.18からTomcat5.5.17へバージョンアップ。ついでに MacデフォルトWebサーバであるApache1.3.33をApache2.2.3へアップグレード。さらにこの2つをmod_jk2で連携させる。結構ハマる感じなので、後を考えてログ。


■Tomcat5.5.17インストール
ここの左の[Download]からTomcat 5.x(今回は5.5.17)を選んで、Coreのzip版を選んでDL。tar.gz版だと何故か正常に解凍できない不具合があるっぽい。
これは普通に解凍後、/usr/localに置けばよい。
/bin/startup.shしてからlocalhost:8080にアクセスして正しく気持ち悪い猫がでてくれば、とりあえずよい。


■Apache2.2.3インストール
ここからUnix Sourceのhttpd-2.2.x.tar.gz(今回は2.2.3)をDL。/usr/localに移動させて,解凍。その後

$ sudo ./configure $ sudo make $ sudo make install

とやれば勝手に/usr/local/apache2というディレクトリにインストールしてくれる。
オプション無しで勝手にやってくれるようになったようだ。
bin/apachectl startとやってlocalhostにアクセスして

It works!

と表示されれば、よい。TOPページがすごく手抜きになった気が。。


■Tomcat5とApache2を連携させるj2のインストール。
ここからJK2 2.0.4 Source Release zipを落として、適当な場所に解凍。

そしてjk2作成用のディレクトリまで移動してconfigure。。。

$ cd /[解凍したディレクトリ]/jakarta-tomcat-connectors-jk2-2.0.4-src/jk/native2 $ ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-tomcat50=/usr/local/tomcat5

とやると、libaprが無いと言われるが、/usr/local/apache2/libにlibapr.soという空のファイルを作る
事でこのエラーは回避できるようだ。

$ cd /usr/local/apache2/lib $ pwd /usr/local/apache2/lib $ vi libapr.so

としてとりあえず中身を何も書かず保存。そして再度

$ sudo ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-tomcat50=/usr/local/tomcat5

とやると今度はちゃんと出来るはず。その後

$ sudo make

までやる。そうすると

$ /[解凍したディレクトリ]/jakarta-tomcat-connectors-jk2-2.0.4-src/jk/build/jk2/apache2

にmod_jk2.soというファイルが出来ているはず。それを

$ sudo cp mod_jk2.so /usr/local/apache2/modules/

とする。さらに

$ /[解凍したディレクトリ]/jakarta-tomcat-connectors-jk2-2.0.4-src/jk/conf

にworkers2.propertiesというファイルがあるので、これを

$ sudo cp workers2.properties /usr/local/apache2/conf/

して、httpd.confにLoadModule jk2_module modules/mod_jk2.soという行を追加する。後は、Tomcatのwebapps/jsp-examplesをexamplesに変えて(もしくは、workers2.propertiesを直接変更する)、Tomcat⇒Apacheと再起動してブラウザで localhost/examples/が見れれば完了。


■jk_2を使ったwebappsの登録。
/usr/local/apache2/conf/workers2.propertiesを開き、新規に作るwebappsのディレクトリ名を

[uri:/[ディレクトリ名]/*] info=[ディレクトリの解説] context=[ディレクトリまでのパス] debug=0

(例)
[uri:/hoge/*]
info=hoge is hoge
context=/hoge
debug

として、Tomcat⇒Apacheと再起動すればよい。httpd.confやserver.xmlをいじる必要は無い。
便利になったけど、jk2は公式サポートしなくなったらしい。。



2006年08月26日

MySQL GUI Tools



mysqlgui-tools.jpg

MySQLのGUIツールである

・MySQL Administrator
・MySQL Query Browser
・MySQL Workbench

という3つがユニバーサルバイナリになると共に、
抱き合わせで配布されるようになっていた。

さらにmysqldのステータスを逐一確認できるウィジェットも付いていた。
かっこよさげだ。

MySQL Workbenchはβ版らしいが、公式ウェブにも説明らしきものが無い。
これはなんだろう。。

あと、MySQLAdministratorのアイコンはWMPのアイコンとかぶってる。。



2006年08月29日

Mac OSX * Apache2 * php5

Mac OSXに入れたApache2でphpを実行するためのステップをログ。

■ステップ1
本家のここからソースを落とし、適度に/usr/localとかに移動して解凍。


■ステップ2
ここを参考に

$ cd php-5.x.x $ ./configure \ > --with-apxs2=/usr/local/apache2/bin/apxs \ > --with-mysql \ > --enable-mbstring \ > --enable-mbregex \ > --prefix=/usr/local/php5

とやるも、mysqlのヘッダーファイルが見つかりませんよと言われてエラーが出るので,今度は

$ ./configure \ > --with-apxs2=/usr/local/apache2/bin/apxs \ > --with-mysql=/usr/local/mysql \ > --enable-mbstring \ > --enable-mbregex \ > --prefix=/usr/local/php5

と明示的に指定してやると、できた。この後は

$ make $ sudo make install

をやればよい。
このconfigureの際のオプションが鬼門らしく、最初php4を入れようとして

$ ./configure \ --with-apxs2=/usr/local/apache2/bin/apxs \ --enable-roxen-zts \ --enable-zend-multibyte \ --with-pgsql \ --with-mysql \ --enable-track-vars \ --enable-mbstring \ --enable-mbregex \ --with-gd \ --with-png-dir=/opt/local/lib \ --with-jpeg-dir=/usr/local/lib \ --with-zlib-dir=/usr/local/lib \ --with-zlib

等とやってみたが、何度もlibpng not foundというエラーが出まくった。
ちなみにDarwinPorts経由でlibpngは/opt/local/libに入ってるのに見つけてくれなかった。
なので5を入れてみた。4でもwith-png-dirオプションを外してみると出来るのかもしれない。


■ステップ3
Apache用のphpモジュールが出来ているのを確認。

$ ls /usr/local/apache2/module/ libphp5.so

■ステップ4
PHPの設定ファイル php.ini を適切な場所にコピーする。

$ cp php.ini-dist /usr/local/php5/lib/php.ini


■ステップ5
デフォルトでインストールの際にApache2の設定ファイルにLoadModuleを書き込んでくれるらしいので、確認

$ vi /usr/local/apache2/conf/httpd.conf LoadModule php5_module modules/libphp5.so


■ステップ6
同httpd.confの最後に以下を追加して、再起動。
適当なphpファイルをhtdocs配下に置いて動作確認で完了。



AddType application/x-httpd-php .php .html
AddType application/x-httpd-php-source .phps

DirectoryIndex index.html index.php index.cgi index.shtml


Apache2 * /Users/*/Sites的な事

Mac OSXにデフォルトに代わってApache2.xを入れた時、80ではすぐ上がるようになるが、デフォルトApacheの如く/Users/*/Sitesを表示させるためにはもう一捻りする。

httpd.confの最後の方の

# User home directories # Include conf/extra/httpd-userdir.conf <= これ

のコメントアウトを外し

# User home directories Include conf/extra/httpd-userdir.conf

とする。
そしてこのInclude元である[Apache_home]/conf/extra/httpd-userdir.confを開き、下記のように編集する。

# Settings for user home directories # # Required module: mod_userdir

#
# UserDir: The name of the directory that is appended onto a user's home
# directory if a ~user request is received. Note that you must also set
# the default access control for these directories, as in the example below.
#
#UserDir public_html
UserDir /Users/*/Sites

#
# Control access to UserDir directories. The following is an example
# for a site where these directories are restricted to read-only.
#
#
<Directory /Users/*/Sites>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

これでApacheに再起動かけると、デフォルトApacheの如く/Users/*/Sitesを表示できるようになる。



About 2006年08月

2006年08月にブログ「what a bringdown」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

次のアーカイブは2006年09月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。