[トップ][ノート][編集履歴][一覧][最近の更新][->English]

Programming

Category of Programming

プログラミング一般ねた。

OpenBSDの上でいろいろいじった痕跡のリスト。

uim/Programming/Scheme/skkserv

Category of uim
Category of Programming
Category of Scheme

SKK Advent Calendar16日目の記事です。 プログラミングねたを書いてみます。

プログラミング言語を学習する場合、 ネットワークプログラミングは避けて通れません。 手始めに書くのはおそらくechoサーバでしょうが、 その次はどれを書こうかな、とそんなときにskkservはいかがでしょうか。

  1. 簡単なプロトコル
  2. かな漢字変換エンジンが簡単
  3. 実際に動くと楽しい

skkのプロトコルは単純です。 skkserv.cの先頭部分のコメントに入りきるくらい単純なものです。 それでいて、なにがあってもクライアントと接続を維持しつづけないといけない、 というあたりがなかなか微妙な感じで、 学ぼうとしてる言語の癖が掴めてよろしいのではないでしょうか。

また、かな漢字変換の仕掛けが簡単で、 ここではまることがまずありません。 モチベーションの維持によいです。

書いてみる

せっかくですのでuimで書いてみました。

uimも1.5.xまではそれぞれのimが各クライアント付属のライブラリを使って通信していたのですが、 いまではソケットまわりの低レベルな操作より上のレベルでは、 schemeで書かれた各モジュールが各プロトコルでサーバと対話するようになっています。

ネットワークの基本的な部分は汎用の部品が用意されているわけです。

さて、肝心の漢字変換ですが、 uimにはlookというモジュールがありまして、 これはlook(1)をそのままライブラリとして使えるようにしたものです。 正確にマッチするようにすると普通の変換、 先頭にマッチするすべてのエントリを列挙すると予測変換ということになります。 辞書はソートされている必要があるのですが、 便利なのでuimのいろいろなところで使われています。

というわけで、部品は揃ったので、 これらをうまくつないでやれば結構簡単に書けます。 コードはこんな具合です。

サーバの機能よりも辞書のパースの方がコードが長いくらいですね。

 uim-sh /path/uim-skkserv

でport 1178で起動します。 辞書は~/.uim.d/dict/SKK-JISYOを使います。

ipv6も使えますし、予測入力も対応しています。

lookは単純に二分検索するだけですが、 手元の辞書500900エントリでも一瞬で出ます。

string-concatenate-reverseはuim-1.6.0に入れ忘れたものです。 ごめんなさい。

Programming/patch-tag

Category of Programming

http://patch-tag.com/ でdarcsのホスティングをやっているらしいので、 githubから移動中[移動先]。

darcsはメール経由でパッチ当てたりできて便利。

ユーザ間でレポジトリを共有するためにはレポジトリに直接書き込み権限を与えたりしないといけないので、 ホスティングするには結構難易度高いのじゃないだろうか。

Programming/ji

Category of Programming

patch-tag:tiの姉妹品でpatch-tag:jiというものを作ってみた。 これはxmppをfifoするためのもの。

tiと組み合わせて使ってるけど、こんな感じ。

 twitter <=> ti <=> ji <=> ejabberd <=> bitlbee <=> emacs

結構間にはさまってるけど、きちんと投稿できてるみたい。

Programmingに関するすべてのエントリ