GaucheFest:kiyoka
- w3mを使ったhtmlレイアウトモジュールを作成中
- w3mの -halfdump の出力を SXML化
- SXMLライクなS式に変換する部分が出来ました
- SXMLからテキストフォーマットにレイアウトされた文字列のリストに変換する部分を作成中です。((write-tree tree)できるリストになる)
- aタグ,imgタグの処理はクロージャを渡す事によって自分の好きな処理を組みこめる様にする予定です。例えば、R@eply.orgではURLの代わりにhrefにメールアドレスを埋めこむ必要があります。そんな風に独自のテキストブラウザのサービスを作れる様になります。
- 最後にはBSD Licenseで公開したいと思います。
- URLを引数に呼びだすとw3mでレイアウトした結果が返る RESTベースのWebサービスも合わせて作りたいと思います。
- Plaggerのplug-inで集めたWebページをPlain text化してメールで送るとか、色々応用が考えられます。
- Kahuaのelem.scmとGaucheのhtml-liteを読む
- どちらもマクロを上手に使ってあり、マクロの力が分かりました。
- でも、w3mのモジュールにうまくマクロの力を使うことができませんでした。
- w3mのモジュールでは、ソースコードではなくパースした結果のツリーがS式化されるので、htmlタグのノードを関数としてevalで発火させる方法が分かりませんでした。直感的にできると思っていたんですが、出来ないんですね。やってみないと理解できないものもある、とはこのことですね。
2006年 11月 04日(土曜日の方)にリモート参加しました。
- Lingr.com上にGaucheの部屋を作りました。GaucheFestでIRCの代わりに使えます。
Lingr用の時計を作る
- timezoneのGMTからの差分テーブルをどうやって手にいれるかに時間がかっかってしまった。
- Debianの /usr/local/zoneinfo/zone.tab で定義されているタイムゾーンだけを扱うことにする。
- タイムゾーンはサマータイムとかを考えるといろいろ大変なのでサマータイムは無視することにした。
- タイムゾーンの定義からschemeのalistを出力するスクリプト
#!/bin/bash
#
#
# zone.tab file is a Debian's /usr/share/zoneinfo/zone.tab ( originally from glibc6 )
#
lst=`awk '!/^#/ { print $3; }' ./zone.tab`
for i in ${lst} ;
do
zdump -v ${i} | tail -1 | awk -F '[\t =]' '{ printf( " (%s . %s)\n", $1, $NF ); }'
done
- 後は、タイムゾーンを二つ以上選択して gif画像へのpermalinkを表示するCGI(Gauche)と、時刻を表示するCGIを作れば良いです。
- ちなみにLingrは次の様な形式でもgif画像を表示してくれるので .gif拡張子を CGI実行するようにすれば楽勝です。
http://hogehoge/tzwatch.gif?unixtime=134093093&tz=1,2,4
- .htaccessにこんな行を入れれば良いだけ。楽勝楽勝。
AddHandler cgi-script .gif
- まだまだ時間がかかりそうなのでぼちぼち楽しみながら作って行きます。
2006年 8月 6日(日曜日)にリモートで参加しました。
LL Gongの準備をする
- 大体デモする内容を文章にまとめる。
- 5分間なので外観だけのデモだけ行い、内部構造がどうなっているかは、触れないことにした。
- 言葉ではなくなるべく画面を見るだけで分かるデモで落ちついた。
- 後は本番までにどんな言葉を変換するのが楽しいかをたくさん挙げておけば、なんとかなるかな。
Sumibiの変換履歴によるパーソナライズ機能を実装
- sumibiエンジンにAddHistoryコマンドを追加してユーザー履歴をテンポラリデータベースに追加できるようになった。
- このテンポラリデータベースを利用したアルゴリズムの変更はこれから。
Guacheのバインディングの方法を勉強する
- これは出来なかった。Sumibiの方がだいぶ時間が掛かりそうなのでもっと先になりそう。
Sumibi.orgのサーバー入れかえ
- Sumibi.orgへのアクセス状況を分析すると土曜日、日曜日の昼間に潮目が変わり、少しアクセスが少なくなります。もし失敗しても被害がなるべく少なくなるように、土曜日の午前中に切りかえ作業を行いました。
- ほぼ問題なくスムーズに切りかえ作業が終わりました。
Gauche 0.8.7をインストール
- Debian 3.1(sarge)の0.8.3の環境と競合しないようにインストールする
- /usr/bin/gosh ... 0.8.3 on Debian sarge
- /usr/local/bin/gosh ... 0.8.7 ( build from Gauche source distribution )
- Gauche 0.8.7をinsuot-ruする前にDebianのslibをインストールしておく
これをしていないと、Gaucheのインストール時にslib-catというファイルが生成されない
$ apt-get install slib
- Gauche-0.8.7.tgzをインストールする。
$ configure --enable-multibyte=utf-8
$ make
$ make install
- Gauche-kakasi-0.1.tgzをインストールする。
(足りないパッケージ『libkakasi2-dev等』はそのつどapt-get install する必要があります。)
$ configure
$ make
$ make install
- Gauche-dbd-mysql-0.2.2.tgzをインストールする。
(足りないパッケージはそのつどapt-get install する必要があります。)
$ configure
$ make
$ make install
$ gosh -V
Gauche scheme interpreter, version 0.8.7 [utf-8]
$ gauche-package list
Gauche-dbd-mysql 0.2.2
Gauche-kakasi 0.1
Sumibiのデプロイ
- sumibi-0.5.5のデプロイはチョー簡単なのです。基本的にはこちらに書かれている通りです。
atp-get install mysql-server-4.1
$ mysql
> GRANT ...(以下略)
> GRANT ...(以下略)
> quit
- 辞書データベースをリストアする(Sumibi.orgで使う辞書ははてなコンテンツを読みこんだ自家製の炭です)
$ mysql
> create database データベース名 DEFAULT CHARACTER SET utf8;
> quit
$ cat 辞書データ | mysql データベース名
- sumibi.cgi(SumibiWebAPIを提供するCGI)を置きたいディレクトリで以下を実行する。
tar zxf sumibi-0.5.5
cd sumibi-0.5.5
make deploy
- .sumibiファイルにDBサーバーへの接続先を設定する
Riece 3.0.0の設定方法メモ
- Emacs上のIRCクライアントRieceをインストールして日本語でIRC参加する
- AM9:00頃 Emacs 22.0.50の標準のrcircで #kahua に接続したがiso-2022-jp文字列が文字化けして会話不能だった。
- その場でcut-seaさんに教えてもらったRieceを早速インストールした。
$ configure
$ make
$ make install
(autoload 'riece "riece" "Start Riece" t)
- GaucheFestに必要な設定はこれです。ファイル ~/.riece/init を次の様に設定すると、irc.freenode.net経由でのチャットがiso-2022-jpに設定されます。これで日本語も安心です。
(setq riece-server-alist
'(("freenode" :host "irc.freenode.net" :coding iso-2022-jp)))
(setq riece-server "freenode")
Gauche 0.8.6をインストールする
- Debianの0.8.3の環境と競合しないようにインストールする
- /usr/bin/gosh ... 0.8.3 on Debian sarge
- /usr/local/bin/gosh ... 0.8.6 ( build from source )
- 自家製Debianパッケージを作成してインストール
- checkinstall でインストールできるようにパッチを作成
- 全てのディレクトリのMakefile.in の install -m 444 となっている場所を全て削除
- cmmiでビルドしてDebianパッケージ化してインストール
無事入った
$ /usr/local/bin/gosh -V
Gauche scheme interpreter, version 0.8.6 [utf-8]
- 今cronで動いているいろんなバッチを #/usr/local/bin/gosh から #!/usr/bin/gosh に書きかえる。
- mysql用のDBDをインストールする
- Gauche 0.8.6には DBIが入っているが、DBDは入っていないのでGauche-dbd-mysql-0.2.1.tgz (GPL) をインストールする
- [補足]なぜ、GaucheにDBIが標準添付されていなのか
gauche-devel-jpメーリングリストで確認すると、GaucheがBSDライセンスで、MySQLのクライアントライブラリがGPLなので Gauche-dbd-mysql-0.2.1.tgz (GPL) を添付してしまうとライセンスの競合が起きるためのようだ。残念。MySQLのクライアントライブラリは昔 LGPL だったのに... おしいなあ。
- 問題発生: ビルドできない
Gaucheには srfi-2何か含まれていないのでは?
なぜ、/usr/share の方を参照に行くの?
$ make
/usr/local/bin/gauche-package compile --verbose \
--cflags="-I/usr/include/mysql -DBIG_JOINS=1" \
--libs="-L/usr/lib -lmysqlclient -lz -lcrypt -lnsl -lm" \
dbd_mysql dbd_mysql.c dbd_mysqllib.stub
*** ERROR: Compile Error: Compile Error: no such module: srfi-2
"/usr/share/gauche/0.8.3/lib/gauche/parseopt.scm":36:(define-module gauche.parseopt (use ...
"/usr/local/bin/gauche-package":39:(use gauche.parseopt)
Stack Trace:
_______________________________________
0 ',(%require feature)
At line 52 of "/usr/share/gauche/0.8.3/lib/gauche-init.scm"
1 ',(%require feature)
At line 52 of "/usr/share/gauche/0.8.3/lib/gauche-init.scm"
2 ',(%require feature)
At line 52 of "/usr/share/gauche/0.8.3/lib/gauche-init.scm"
3 ',(%require feature)
At line 52 of "/usr/share/gauche/0.8.3/lib/gauche-init.scm"
4 ',(%require feature)
At line 52 of "/usr/share/gauche/0.8.3/lib/gauche-init.scm"
5 (%require feature)
At line 52 of "/usr/share/gauche/0.8.3/lib/gauche-init.scm"
make: *** [dbd_mysql.so] Error 70
$
- 結局、原因は環境変数GAUCHE_LOAD_PATHに /usr/share/gauche/0.8.3/lib等のパスが入っていた... Gaucheが標準で持っているのでわざわざ指定するべきではない。
(use xxxx)でロードできるモジュールの作り方を覚える
- そもそも自分はめんどくさいので load関数しか使ったことがなかった。そこで、use が使えるモジュールを作れるようになって、いつか自分のライブラリをモジュールとして切り出したい
- useって何?
- リファレンスを見てuseの意味を確認する
- useは以下のフォームと等価
(require "foo")
(import foo)
- requireって何?
- PHPのrequire_onceと似ている。
- Emacsのrequireとほぼ同じ考え方。
- Perlのrequireと同じかと思っていたが、じつがPerlのrequireはGaucheのuseと似ている。
- 何度requireしても一度しか読み込まれない。
- provide関数でfeatureしたものが require可能となる
ここでDBI部分の不具合らしきものに遭遇したのでおべんきょうタイム終わり。
(後日、これはDBIの不具合ではなくSumibi側の問題であることが分かった。)
- 後日 sumibi-0.5.5では(use "")でロードできるライブラリとして実装し直しました。
Last modified : 2013/05/09 09:58:37 UTC