Archive@2007/07

MacPortsにGUI!!

PorticusMacPortsGUI から操作出来るアプリがあるみたい。さっそくインストールしてみたよ。

解り易いレイアウトでパッと見でパッケージの内容が確認出来るのはかなり良いかも。 Installed なパッケージや Outdated なパッケージは分けて表示されるので直感的で良いと思う。

LocalPortfile は対象に含まれないのがちょっと残念ではあるものの、そこらへんは今後の対応に期待。 MacPorts ユーザの方は一度お試しあれ。なんて。

CUI からの使い方をちゃんと覚えないとなぁ。

Posted at: 
2007/07/30 22:35:23
3 Comments
0 TrackBacks
Tags: 
Mac
MacPorts
Trackback: 
http://humming.via-kitchen.com/2007/07/30/gui-for-macports/trackback/

mod_wsgi-1.0c1がリリース!!

mod_wsgi の1.0が遂に出たよ!まだc1って付いてるけどね。

現状TRUNK rev@308とかで走っているので、1.0がリリースされたら乗せ換えよう。 mod_python よりも設定とか簡単でパフォーマンスも良い気がする(憶測含む)。

かなり待ち遠しい!

Posted at: 
2007/07/28 04:16:31
0 Comments
0 TrackBacks
Tags: 
apache
mod_wsgi
Python
Trackback: 
http://humming.via-kitchen.com/2007/07/28/release-mod-wsgi-10c1/trackback/

PrivatePortfileでPostgreSQL+Ludia

PrivatePortfilePostgreSQL + Ludia をMacにも入れてみたよ。

前回MySQL + Senna 時に LocalPortfile の設定とかはやってたので、今回はわりとすんなり進んだ(と思う)。

まずは PrivatePortfile/Senna-PostgreSQL82 からファイルをダウンロード。落としてきたファイルを展開して LocalPortfile に入れる。

$ tar jxf ./postgresql82-ludia-1.0.0.tbz2
$ cd ./postgresql82-ludia-1.0.0/databases
$ mv ./postgresql82-ludia /usr/local/src/localports/

で、ココで Ubuntu には Ludia -1.1.0を入れた事を思い出した。 MacUbuntu でバージョンがズレるのはかなり避けたい!という事で Portfile 弄くってどうにか Ludia -1.1.0を入れる方向に決定。

とりあえず Portfile を見てみると以外に短い。で、いくつか気になるところがあったのでそこを書き換えていく事に。以下 Portfile のdiff。

7c7
< version         1.0.0
---
> version         1.1.0
15c15
< set sfj 24230
---
> set sfj 25644
20,22c20
< checksums       md5    d558826f151268fb7b696440fc7937ce \
<                 sha1   f0da11f5dd8f9eb12f0233723dfafe9ec73be979 \
<                 rmd160 63668787f3378e742adf8a6e2c9867e7d5dcc82f
---
> checksums       md5    4d784cfb6f3a5b0cfabf443efc588679 \

versionLudia のバージョン。 sfjsourceforge での Ludia の管理番号?か何か。 md5sourceforgeLudia -1.1.0のところに書いてあったものをコピペした。

ココで PortIndex を更新する。

$ pwd
/usr/local/src/localports
$ sudo portindex

ついでに MacPorts 自体もアップデートしておいてから search してみる。

$ sudo port -d selfupdate
...
$ port search ludia
postgresql82-ludia             databases/postgresql82-ludia 1.1.0        Ludia provides a fast full-text search interface for PostgreSQL.

ココまではちゃんと認識されてる模様。なのでインストールしてしまう事に。

$ sudo port install postgresql82-ludia

結構時間が掛かったものの、無事にインストールも完了したっぽい。 PostgreSQL のコマンドにパスが通ってなかったので若干焦ったけど、どうやらそういうものらしく、

  • /opt/local/lib/postgresql82/bin/
  • /opt/local/share/postgresql82/

にそれぞれ PostgreSQLLudia の一式が入ってた。

Ubuntuに入れた時 と同じようにテストしてみたけど問題無くちゃんと動いた!上手く行ったっぽい!

Posted at: 
2007/07/23 03:15:40
0 Comments
0 TrackBacks
Tags: 
Ludia
Mac
MacPorts
PostgreSQL
Trackback: 
http://humming.via-kitchen.com/2007/07/23/install-postgresql-plus-ludia-with-macports/trackback/

PostgreSQL+Ludia入れたメモ@Ubuntu

PostgreSQL やっとインストールしたよ。って言うより Ludia を触ってみたくていれたので、どちらかと言うと Ludia がメイン。

今回インストールしたのはこんな感じ。

Senna は前に MySQL + Senna + tritonn インストール時に1.0.5を入れているのでそれを使いまわす。

とりあえずpostgresなユーザ作成から。

$ sudo useradd -m postgres
$ sudo passwd postgres

PostgreSQL は普通にビルドしてかまわないみたい。なので最低限のオプションだけつけてコンパイル。 --enable-multibyte っていつから無くなったんだろ?

$ ./configure \
>--prefix=/usr/local/pgsql \
>--enable-thread-safety
$ make
$ sudo make install

データディレクトリの初期化。

$ PATH="/usr/local/pgsql/bin:${PATH}"
$ sudo -u postgres mkdir /home/postgres/data
$ sudo -u postgres initdb -D /home/postgres/data --encoding=UTF-8
...

okな文字が流れてたので、 PostgreSQL を起動してみて、テスト用のデータベースを作っておく。

$ sudo -u postgres postgres -D /home/postgres/data &
$ sudo -u postgres createdb ludia_test

一通り上手く行っているようなので、ここから Ludia のコンパイルに入る。

$ ./configure \
>--with-senna-cfg=/usr/bin/senna-cfg \
>--with-pg-config=/usr/local/pgsql/bin/pg_config
$ make
$ sudo make install

Ludia をインストールすると /path/to/pgsql/share/ に一式はいるらしい。で、 PostgreSQLLudia を使うことを教えるために postgresql.conf を編集する。

custom_variable_classes='ludia'
ludia.max_n_sort_result = 10000
ludia.enable_seqscan = on
ludia.sen_index_flags = 31
ludia.max_n_index_cache = 16
ludia.initial_n_segments = 512

設定値はどっかに載ってたモノをコピペしたので良く解ってない。 custom_variable_classesLudia を追加する事だけは絶対って事だけ覚えた。

postgresql.conf の変更を反映させる為に一度再起動してから、さっき作ったデータベースに Ludia を使うのに必要な設定?とかを pgsenna2.sql を使って放り込む。

$ sudo -u postgres psql -f /usr/local/pgsql/share/pgsenna2.sql ludia_test

コレで一通り完了っぽい。上手く出来たかテストしてみる。

CREATE TABLE test1 (
    id SERIAL,
    body TEXT NOT NULL
);

INSERT INTO test1 (body) VALUES ('すもももももももものうち');
INSERT INTO test1 (body) VALUES ('ももから生まれた桃太郎');

CREATE INDEX test1_body ON test1 USING FULLTEXT(body);

SELECT * FROM test1 WHERE body @@ 'もも';
 id |           body
----+--------------------------
  1 | すもももももももものうち
  2 | ももから生まれた桃太郎
(2 rows)

ちゃんと部分一致で引っ張ってきてる。どうやら上手くいったっぽいよ!

ちょっとコレを期に PostgreSQL もちゃんと覚えようと思う。設定の仕方とか全然知らないし覚えてないし。

Ludia に関しては1.1.0から VACUUM に対応したり、設定が senna.conf から postgresql.conf に移ったりと、かなり使い勝手が上がってるみたい。ある程度まで( PostgreSQL の)使い方を覚えたら Django でも使ってみようかな?

全文検索は凄い!って事を再確認しましたとさ。

Posted at: 
2007/07/22 05:32:51
0 Comments
0 TrackBacks
Tags: 
Ludia
PostgreSQL
Senna
Ubuntu
Trackback: 
http://humming.via-kitchen.com/2007/07/22/postgresql-plus-ludia-install-memo-at-ubuntu/trackback/

Feedを全文配信するようにしたよ

またそのうち変えるかも知れないし、変えないかもしれません(気分)。

いや、変えないか。

他にも色々イジりたいところが出て来てるので、そのうち時間作って変えていこう。

Posted at: 
2007/07/21 23:26:53
0 Comments
0 TrackBacks
Tags: 
memo
Trackback: 
http://humming.via-kitchen.com/2007/07/21/output-fulltext-on-feed/trackback/

jQueryとマルチプルセレクトの値

endless 氏より「マルチプルセレクトの値って jQuery でどうやって取るの?」な質問が飛んで来たよ。

プラグインとかにありそうだけど、今回は勉強ついでに自分で書いてみる事に。さらに勉強ついでにプラグインにしてみる。

HTMLはとりあえずこんな感じ。

<form id="target_form" method="post">

    <select name="hoge" multiple="multiple">
        <option value="0">zero</option>
        <option value="1">one</option>
        <option value="2">two</option>
        <option value="3">three</option>
        <option value="4">four</option>
    </select>

    <select name="hige" multiple="multiple">
        <option value="0">zero</option>
        <option value="1">one</option>
        <option value="2">two</option>
        <option value="3">three</option>
        <option value="4">four</option>
    </select>

    <input type="submit" value="send" />

</form>

とりあえずこのフォームの submit をフックしてやる。

$(function ()
{
    $('#target_form').submit(function ()
    {
        var v = $('select', this).serialize();

        alert(v);

        return false;
    });

});

最後に return false してるのはいちいちサブミットされるとめんどくさかっただけで、それ以上の意味はとりあえず無い。で、ここでセレクトボックスを複数選択した状態でサブミットしてみると、一番最初に見つかった値しかシリアライズされない。これじゃマルチプルセレクトがの意味が全く無くなってる訳で。

で、作ってみたのがコチラ。若干手抜きが見え隠れするのはご愛嬌。

(function ($)
{
    $.fn.extend({

        /**
         * selectのみをシリアライズ。
         */
        selectSerialize : function ()
        {
            var _$ = $(this).children('option:selected');

            return $.map(_$, function (e)
            {
                return e.parentNode.name + '=' + e.value||'';

            }).join('&');

        }// END: selectSerialize

    });// END: extend

})(jQuery);

コレを使ってみるとこうなる。

$(function ()
{
    $('#target_form').submit(function ()
    {
        var v = $('select', this).selectSerialize();

        alert(v);

        return false;
    });

});

選択されたモノ全部がちゃんとシリアライズされてるハズ。 DjangoManyToMany なフィールドを Ajax で投げる時とか、結構使えそうかも?

Posted at: 
2007/07/19 00:46:18
4 Comments
0 TrackBacks
Tags: 
JavaScript
jQuery
Trackback: 
http://humming.via-kitchen.com/2007/07/19/jquery-and-multiple-select-value/trackback/

$.postのレスポンスタイプ@jQuery

jQuery を使って Ajax する時のお話。

GETの時には $.get とか $.getJSON とかレスポンスの種類によってメソッドも色々種類があるのに、POSTの時には $.post 以外にそういうの無いの?と思ってちょっと調べてみた。

結論、メソッド自体は無い。

メソッド自体は用意されてないものの、 $.get$.post も内部で動いてるのは $.ajax 。 なので、 $.ajax のオプションに dataType を指定出来れば良い。で、 $.post を見てみると4つ目の引数で dataType を指定出来るみたい。

// 4つ目の引数がdataType
post: function( url, data, callback, type ) {
    if ( jQuery.isFunction( data ) ) {
        callback = data;
        data = {};
    }

    return jQuery.ajax({
        type: "POST",
        url: url,
        data: data,
        success: callback,
        dataType: type   // ココ
    });
},

なので、実際使う時には、

$('form').submit(function ()
{
    var $$ = $(this);

    $.post(
        $$.attr('action'),
        $('input', $$).serialize(),
        function (response, status)
        {
            // responseはJSONオブジェクト。
        },
        'json'
    );

    return false;
});

みたいな感じで出来る。今まで自分で eval してた。小さい事だけど、このへんの使い勝手は物凄く大事。

また一つ jQuery が好きになりましたとさ。

Posted at: 
2007/07/14 19:51:44
4 Comments
0 TrackBacks
Tags: 
JavaScript
jQuery
Trackback: 
http://humming.via-kitchen.com/2007/07/14/response-type-of-post-at-jquery/trackback/

jQueryメモ

jQuery$.get を使うのにIEだとキャッシュしてしまってちょっと困る。かといって URL の最後にランダムな文字列を付けると、毎回ローカルにキャッシュを作ってしまってかなり迷惑な話に。

リクエストヘッダで If-Modified-Since を指定してやるとちゃんと見に行くらしいので、現状こんな感じで対処してる。コレで良いのかは分からないものの、ちゃんと動いてるので一応メモ。

$(function ()
{
    if ($.browser.msie)
    {
        $(document.body).ajaxSend(function (evt, request, settings)
        {
            if (!settings.ifModified && settings.type.toLowerCase() == 'get')
                request.setRequestHeader('If-Modified-Since',
                                         'Thu, 01 Jan 1970 00:00:00 GMT');
        });
    }

});

ココで使ってる ajaxSendドキュメント を見る限りだと引数は2個のはずなのですが、 この通りにやるとエラーになってしまう。

色々試してみると、どうやら第1引数にイベント(の拡張)が入って来てるらしく、その次から ドキュメント 通りの引数が入って来てる。 なので、とりあえず実際に入って来てる順番で受け取ってあげて、後は $.post とか getIfModifiedloadIfModified を邪魔しないように分岐してヘッダを埋めてやる。

現状これでちゃんと動いてるけど、IE 7とかってどうなんだろ?

Posted at: 
2007/07/10 22:19:08
2 Comments
0 TrackBacks
Tags: 
IE
JavaScript
jQuery
Trackback: 
http://humming.via-kitchen.com/2007/07/10/jquery-memo/trackback/

プラガブルって素敵

Django 使ってまた別のものを作り始めた。

で、ログイン用のフォームクラスとか使い回したいと思い svn でエクスポート。あとは urls.py とかちょこっと書き直したら動いた。

プラガブルって素敵。

svn で新しく add した時に svn:ignore 付け忘れて *.pycなファイル群が入ってしまった時にちょっと悲しくなりましたとさ。

Posted at: 
2007/07/07 23:01:29
0 Comments
0 TrackBacks
Tags: 
Django
Python
Svn
Trackback: 
http://humming.via-kitchen.com/2007/07/07/plugable-is-wonderful/trackback/

DjangoでXMLとか吐くメモ

DjangoXML とか吐くメモ。 template 部分の勉強も含めて簡単に試してみた。

まずは簡単に静的なファイルの吐き出し。

xml_test1.xml

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <errorcode>0</errorcode>
</response>

views.py

from django.http import HttpResponse
from django.template import loader, Context, RequestContext


def xml_test1(request):

    t = loader.get_template('example/xml_test1.xml')
    c = Context()
    return HttpResponse(t.render(c), mimetype='text/xml; charset=utf-8')

HttpResponse の引数に mimetype を渡す事でヘッダに適応してくれる。念のために charset も指定しておく方が良いと思う。 Firefox で確認してみたら、 XSLT に関連づけされていないのでドキュメントツリーが見れた。

次に適当に変数を渡してみる。

xml_test2.xml

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <errorcode>{{ errorcode }}</errorcode>
    {% if message %}
    <message>{{ message }}</message>
    {% endif %}
</response>

views.py の続き。

def xml_test2(request):

    p = {}
    p['errorcode'] = 1
    p['message'] = 'This is test message.'
    t = loader.get_template('example/xml_test2.xml')
    c = Context(p)
    return HttpResponse(t.render(c), mimetype='text/xml; charset=utf-8')

Firefox で見るとこんな感じ。

<response>
    <errorcode>1</errorcode>
    <message>This is test message.</message>
</response>

ちゃんとパースされてる。(当たり前)

ココでちょっとソースを見てみると render_to_string なんてのもある。 引数は全部で3つで、それぞれテンプレートのパス・テンプレート変数(dictionary)・コンテクスト(context_instance)。うち必須はテンプレートのパスだけ。 今度はコレを使ってテストみる。テンプレートはさっきの xml_test2.xml を使い回し。

def xml_test3(request):

    p = {}
    p['errorcode'] = 0
    return HttpResponse(
        loader.render_to_string('example/xml_test2.xml', p),
        mimetype='text/xml; charset=utf-8'
    )

Firefox で確認するとこんな感じになった。

<response>
    <errorcode>0</errorcode>
</response>

今回は message をテンプレートに渡してないので、 message の部分はちゃんと非表示になってる。

以下まとめ?

  • 基本的には HTML と操作は同じ。
  • render_to_response はデフォルトだと使えない。
  • mimetype 指定である程度はこなせる。
  • もっと詳しい情報は 本家サイト和訳ドキュメント で。
Posted at: 
2007/07/04 03:08:58
0 Comments
1 TrackBack
Tags: 
Django
Python
templates
Trackback: 
http://humming.via-kitchen.com/2007/07/04/output-xml-file/trackback/

Categories

Archives