Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2009-05-31

ループ変数のふるまいと破壊的変更

| 00:38 | ループ変数のふるまいと破壊的変更 - わだばLisperになる を含むブックマーク はてなブックマーク - ループ変数のふるまいと破壊的変更 - わだばLisperになる

kozimaさんの loop の気持ち悪い使い方 - kozima の日記 - cadr groupを読んで確かにここで挙げられているようなパターンは避けてるかもしれないなー、と思いました。

どれもコードを書いている時の意図を裏切るようなパターンですね。

最初の例は、

(loop for i from 1 to 10 collect (lambda (x) (+ x i)) into funs
    collect i into nums
    finally (return (mapcar #'funcall funs nums)))
;=> (12 13 14 15 16 17 18 19 20 21)

ですが、多分

(loop for i from 1 to 10 collect (let ((i i)) (lambda (x) (+ x i))) into funs
    collect i into nums
    finally (return (mapcar #'funcall funs nums)))
;=> (2 4 6 8 10 12 14 16 18 20)

のような動きを意図しているんだと思います。

dotimesや、dolistでも同じですが、これらは、処理系依存ということなので、

(let (funs nums)
  (dotimes (i 10)
    (push (lambda (x) (+ i x)) funs)
    (push i nums))
  (nreverse (mapcar #'funcall funs nums)))
;=> (10 11 12 13 14 15 16 17 18 19)
; もしくは
;=> (0 2 4 6 8 10 12 14 16 18)

こういう場合は、

(let (funs nums)
  (dotimes (i 10)
    (let ((i i))
      (push (lambda (x) (+ i x)) funs)
      (push i nums)))
  (nreverse (mapcar #'funcall funs nums)))
;=> (0 2 4 6 8 10 12 14 16 18)

のように明示的に束縛をつくってあげる必要があるようです。

loopも同じかなと思って調べたのですが、どうもみあたらないのでloopでは束縛を作らないんじゃないかなと思いました。(詳しい情報希望!!)

他もこれに類する感じで

(loop for i from 1 to 10 collect (incf i))
;=> (2 4 6 8 10)

(loop for i from 1 to 10 collect (let ((i i)) (incf i)))
;=> (2 3 4 5 6 7 8 9 10 11)
(loop for x on (list 1 2 3 4 5 6 7 8) collect (pop x))
;=> (1 3 5 7)

(loop for x on (list 1 2 3 4 5 6 7 8) collect (let ((x x)) (pop x)))
;=> (1 2 3 4 5 6 7 8)

という風に新しい束縛を作ってあげて回避することになります。

対策として、

(defmacro let-new ((&rest vars) &body body)
  `(let ,(mapcar #'list vars vars)
     ,@body))

のようなマクロを定義してみたら役に立つかもと思いましたが、微妙な感じです。

新しい束縛を作っても、

(loop for x on (list 1 2 3 4 5 6 7 8) collect (let-new (x) (pop (cdr x))))
;=> (2 4 6 8)

こういうのは守り切れないので(´▽`*)…

どうもポインタ操作系と、代入操作系に魔が潜んでいる気がしました(*'-')

変更不可能データ & 束縛 ならこういうこともないのでしょう。

2009-05-29

第32回たまたま帰ってきたCL勉強会@Chaton8時だョ!全員集合 ネタ募集

| 00:27 | 第32回たまたま帰ってきたCL勉強会@Chaton8時だョ!全員集合 ネタ募集 - わだばLisperになる を含むブックマーク はてなブックマーク - 第32回たまたま帰ってきたCL勉強会@Chaton8時だョ!全員集合 ネタ募集 - わだばLisperになる

Lingr CL部屋もshiroさんが作られたChatonのお蔭さまで無事Chaton CL部屋として存続することができました。

折角部屋も作って頂けたことですし、何かできないかと考えたのですが、移行記念ということでオンラインのCL勉強会をやってみようかと思い立ちました。

開催は恒例の土曜の20時を考えているのですが、ネタを準備するのが割と大変なので今回は15分以上のものでネタを募集し、それが4本以上集まったら開催告知→開催という流れにしたいと思います。

それでテーマなのですが、色々考えた末、濃い割には深追いしてる人口が多そうなformatにしたいと思います。

ということで、ネタ披露の方を募集です!!

開催回テーマ
第32回CL勉強会@Chatonformatをテーマにした15分ネタ

我こそはという方は、

に「formatネタ応募」とでも書き込んでみて下さい!

15分なので割と1発ネタでもどうにかなると思います。ちなみに最低15分位ということなのでこれを超過するのは問題ありません。

とりあえず、自分も、formatのMacLISPから数えて30年位の歴史を俯瞰するか、ローマ数字オプションは学生時代のGLSが夏休みにいたずらで入れたものだったのかの真偽を調べて報告するネタで1本やりたいと思います。

Chaton CL部屋でのshiroさん曰く、「~?で自分自身を読むことを許した場合、Turing completeになったりしないかなあ」とのことです。

これは興味深いテーマ!

このブログを読んでいるチューリング完全判定師さんも是非、判定結果をネタとして披露頂ければと思います。

私を含めて4人なので、あと他に3人やってくれる人が現われれば開催することになります。のんびり開催告知をお待ち下さい。

2009-05-23

10分でコーディングx2〜リストの破壊的操作篇〜【まとめ】

| 19:53 | 10分でコーディングx2〜リストの破壊的操作篇〜【まとめ】 - わだばLisperになる を含むブックマーク はてなブックマーク - 10分でコーディングx2〜リストの破壊的操作篇〜【まとめ】 - わだばLisperになる

元ネタが10分だったのでそれを踏襲して10分ということにしましたが、どうも10分は短過ぎたようですw

自分の解答は、

(defun nalist-to-plist (alist)
  (do ((a alist (cddr a)))
      ((endp a) alist)
    (rotatef (cdr a) (caar a))
    (rotatef (caar a) (cdar a))
    (rotatef (cdr a) (car a))))
(defun nplist-to-alist (plist)
  (do ((p plist (cdr p)))
      ((endp p) plist)
    (rotatef (cdr p) (car p))
    (rotatef (caar p) (cdar p))
    (rotatef (cdr p) (caar p))))

という感じです。

解答に掛った時間ですが、「そういえば、alist/plistの変換ができるな〜」と考えてからコードが完成するまで2〜30分掛ったと思います、当人が10分で解けてなくて、すいません(笑)

考え方

((foo . 1) (bar . 2)...)→(foo 1 bar 2 ...)

という形で考えると難しいので、セル一つ一つを省略しないで記述したものを元に考えると良いかなと思いました。

'((foo . 1)) ⇒ '((foo . 1) . ())

ということで、更に分かりやすいように

'((1 . 2) . 3)

と置きます。

alist->plistの場合、これが、

'(1 . (2 . 3))

となれば良いわけなので順番は色々ありますが、

  1. ((3 . 2) . 1) ;1と3を交換
  2. ((2 . 3) . 1) ;2と3を交換
  3. (1 . (2 . 3)) ;1と(2 . 3)を交換
  4. 以下、3の指しているコンスでも同様

とすれば良いことになります。

ちなみに交換の方法はCLには色々あります。

rotatefかsetfとvaluesを組み合わせたものが一番分かりやすいかなと個人的には思っています。

;; setf+valuesの場合
(defun nplist-to-alist (plist)
  (mapl (lambda (p)
          (setf (values (cdr p) (car p)) 
                (values (car p) (cdr p))
                
                (values (caar p) (cdar p))
                (values (cdar p) (caar p))
                
                (values (cdr p) (caar p))
                (values (caar p) (cdr p))))
        plist))

交換の部分は、rotatefを駆使すれば1式で書けると思い最初はそれで書いたのですが、意図したように動かないので自分は分割しました。

この件についてはquekさんが探究されています。さすが!

2009-05-21

10分でコーディング x 2 〜リストの破壊的操作篇〜

| 21:36 | 10分でコーディング x 2 〜リストの破壊的操作篇〜 - わだばLisperになる を含むブックマーク はてなブックマーク - 10分でコーディング x 2 〜リストの破壊的操作篇〜 - わだばLisperになる

今日の問題はかなり簡単です。

できるだけ短い時間でエレガントなコードを書きましょう。

あまりに簡単なので制限時間を10分としてやってみてください。

これ以上かかった人は

自分はLisperの癖にかなり破壊的リスト操作プログラミングができない。

とつらい事実を認識しましょう。

そして、これからすごくなりましょう。

では、10分だけこの問題に付き合ってみてください。

スタート!!

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

その1(nalist-to-plist)

難易度 激簡単 目標時間10分以内

alist 例.((foo . 1) (bar .2) ...)とplist 例.(foo 1 bar 2 ....)の使うコンスセル数は同じことが知られています。

ということは、alistからplistへの変換は、余計なコンシングを一切せずに組み換えることができるということです。

alistを破壊的にplistに変換する関数を書いて下さい。

CLなら、nalist-to-plist、Schemeなら、alist->plist!のような命名になりそうです。

CLで書いてみたものをテストすると下記のようになる筈です。

(nalist-to-plist (copy-tree '((foo . 1) (bar . 2) (baz . 3))))
;=> (FOO 1 BAR 2 BAZ 3)

;; alistからplistへの変換を計測
(prog ((data (loop :repeat 100000 :collect (cons 1 2))))
      (time (nalist-to-plist data)))
;=> NIL
----------
Evaluation took:
  0.003 seconds of real time
  0.000000 seconds of total run time (0.000000 user, 0.000000 system)
  0.00% CPU
  6,267,654 processor cycles
  0 bytes consed
  ^^^^^^^^^^^^^^

;; 非破壊版
(prog ((data (loop :repeat 100000 :collect (cons 1 2))))
      (time (loop :for (x . y) :in data :collect x :collect y)))
;=> NIL
----------
Evaluation took:
  0.023 seconds of real time
  0.020000 seconds of total run time (0.020000 user, 0.000000 system)
  [ Run times consist of 0.020 seconds GC time, and 0.000 seconds non-GC time. ]
  86.96% CPU
  56,597,643 processor cycles
  3,198,976 bytes consed
  ^^^^^^^^^^^^^^^^^^^^^^

その2(nplist-to-alist)

ついでなので、nplist-to-alistも作ってみて下さい。

こちらの方が難しい気がしますが、前の問題で馴れたと思うので同じく10分で。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

難易度 超簡単 目標時間10分以内

(nplist-to-alist (list 'foo 1 'bar 2 'baz 3))
;=> ((FOO . 1) (BAR . 2) (BAZ . 3))

※註. とりあえず煽った方が面白いかと思って煽り気味で書いていますw

2009-05-18

国産CL処理系は割とあったらしい

| 03:02 | 国産CL処理系は割とあったらしい - わだばLisperになる を含むブックマーク はてなブックマーク - 国産CL処理系は割とあったらしい - わだばLisperになる

CiNiiで過去の論文を無料で読めることを知ってから、LISP関係のものをダウンロードして眺めています。

自分は、90年代位のCLの論文を読んでいてKCL以外にも国産CL処理系は割とあったらしいことを知りました。

自分がみつけただけでも、

処理系会社方言プラットフォーム
Tachyon Common Lisp沖電気ANSI/CLtL2ワークステーション
HiLisp日立CLtL2VOS3(汎用機)
NX-LISPNECCLtL2+MOPACOS(汎用機)
ELIS Common LispNTTCLtL1?+拡張ELIS(Lispマシン)
富士通LISP富士通??

という感じで、意外なことに大手企業から処理系が出ていたようです。

「富士通LISP」だけCLなのかどうか不明なのですが、ベンチでLucid CLと比較してたりするのでCLなんじゃないかなと想像しています。

Tachyon CLやHiLispに関しては開発環境もリッチだった様で便利そうな機能が結構あり、NX-LISPに関しては、CLOS MOPにも準拠して実装されてたようです。

CLでは、仕様で文字コードがASCIIを前提としないようにしているようなのですが、実際にEBCDICな汎用機で動いていたとは知りませんでした(*'-')

この辺の国産CL処理系の状況は全然知らなかったのですが、自分が思うに、どれも1994年位より前のことでウェブが本格化する以前のできごとということもあり、ウェブに情報が載っていることが少ないので今ググっても全然みつからないのではないかと予想しています。

2009-05-17

「15分でコーディング」を18分で

22:32 | 「15分でコーディング」を18分で - わだばLisperになる を含むブックマーク はてなブックマーク - 「15分でコーディング」を18分で - わだばLisperになる

一部で地味流行りつつあるので自分もまたやってみました。

とりあえず、問題を読んでノープランでコーディングを始めたんですが、どんどん後半にツケが回ってきて辻褄合せに必死なコードになりました(笑)

それでも3分位超過。果して時間内に解ける日は来るのか!

(defun who-can-see (user-names allowed-data report-data)
  (let ((ht (make-hash-table :test #'equal)))
    (mapc (lambda (u a)
            (setf (gethash u ht) (ppcre:split " " a)))
          user-names
          allowed-data)
    (if (null (cdr report-data))
        (let (ans)
          (mapc (lambda (r)
                  (maphash (lambda (k v)
                             (when (member r v :test #'equal)
                               (push k ans)))
                           ht)
                  ans)
                report-data)
          ans)
        (apply #'intersection 
               (mapcar (lambda (r)
                         (let (ans)
                           (maphash (lambda (k v)
                                      (when (member r v :test #'equal)
                                        (push k ans)))
                                    ht)
                           ans))
                       report-data)))))

一応OKみたいですが…

(who-can-see '("joe" "nick" "ted")
             '("clients products" "products orders" "clients orders")
             '("clients" "products"))
;=> ("joe")

(who-can-see
 '("kathy"  "john"  "dan"  "steve"  "cheryl"  "tony")
 '("users data"  "data orders"  "users permissions"  "system users controls"  "default"  "admin users")
 '("users"))
;=> ("kathy" "dan" "steve" "tony")

(who-can-see
 '("jim"  "scott"  "barbara")
 '("users order products"  "products shipping"  "tracking products orders")
 '("admin"))
;=> NIL

上のはちょっと酷いのでもう一回alistでだらだら書きました。

こういうのはあせらず最初に良く考えてから取り組んだ方が良いんでしょうなー。

(defun who-can-see (user-names allowed-data report-data)
  (let ((data (mapcar (lambda (u a) (cons u (ppcre:split #\Space a))) 
                      user-names 
                      allowed-data)))
    (labels ((pick (rd ad)
               (if (endp rd)
                   ad
                   (pick (cdr rd) 
                         (remove-if-not (lambda (a)
                                          (member (car rd) (cdr a) :test #'equal))
                                        ad)))))
      (mapcar #'car (pick report-data data)))))

のsubsetpを使うというのは思い付きませんでした。これはsubsetpがぴったりはまった用法ですね!

2009-05-15

「10分でコーディング」を13分で

22:49 | 「10分でコーディング」を13分で - わだばLisperになる を含むブックマーク はてなブックマーク - 「10分でコーディング」を13分で - わだばLisperになる

kozimaさんがエントリされてたので自分も挑戦してみました!

元ネタ:

全然問題の意味が分からない!、時間がない…などと、あわあわしながら

(defun deal (n cards)
  (let ((ans (make-list n)))
    (loop :for i :from 0 :below (* n (floor (length cards) n))
          :do (push (char cards i) (nth (mod i n) ans)))
    (map-into ans (lambda (x) (coerce (nreverse x) 'string)) ans)))

というのが13分後にできました。

ちなみに最初は、同じ種類の文字だけ集めてみたりして無駄な努力をしていました(笑)

(deal 3 "123123123")
;=> ("111" "222" "333")

(deal 4 "123123123")
;=> ("12" "23" "31" "12")

(deal 6 "012345012345012345")
;=> ("000" "111" "222" "333" "444" "555")

(deal 4 "111122223333")
;=> ("123" "123" "123" "123")

(deal 1 "012345012345012345")
;=> ("012345012345012345")

(deal 6 "01234")
;=> ("" "" "" "" "" "")

(deal 2 "")
;=> ("" "")

コードに謎の部分はあるものの、まあ良しとします。

どうも自分は、あらゆる配列的なものはリストとして考えているようで、インデックス付きの配列という発想がぱっとは出てこないようです。

先頭から順に配ってるのに気付くのに多分7、8分かかりました…(´▽`*)

しかし、これ3分とかで解くのは自分の頭じゃ無理ですなー。

2009-05-13

CiNii素晴らしい!

| 02:55 | CiNii素晴らしい! - わだばLisperになる を含むブックマーク はてなブックマーク - CiNii素晴らしい! - わだばLisperになる

ふとTAO/ELISをググってみた結果に、CiNiiというのがあったので、何気なくクリックしてみました。

論文のPDFへのリンクもあったので、ここからは会員登録して有料でのダウンロードなのかなと思いつつ進んでみると無料でPDFが見れることが分かりました!

この無料で論文のPDFがみれるCiNiiというサービスはいつからあったのでしょうか!

全然知りませんでした。

ということで、きっかけとなったTAO/ELISや、Common Lispの論文を漁って眺めています。

色々面白いものがあるのですが、やはり、個人的な趣味のところでは、TAO/ELIS関係が貴重かなと思います。

また、

も1986年当時の背景や考えが伺えて面白いです。策定当時からマルチプロセス/スレッドはCLの仕様からは切り離された、という風な認識だったんですね。なるほど、なるほど。ちなみに竹内先生も面白いです(*'-')

また、Tachyon Common Lisp関係も結構あるようでした。

眺めてみるとTachyon Common Lispは、CLtL2だけでなく、後にANSIにも対応してたんですね。

それも考えると今流通してないのが非常に残念です。

CL系では他に、ELISの上で動くELIS Common Lispという処理系についても結構論文があるのが意外でした。

しかし、Prolog的なものとの融合が実装されていたりして、どうもTAO的な謎のCommon Lispのようです(笑)

と、無料で色々興味深いものが読切れない程読めるのですが、面白い論文を発見されましたら是非教えて下さい!!

2009-05-10

Common Lispの本はどれだけ日本で出版されているのか

| 02:45 | Common Lispの本はどれだけ日本で出版されているのか - わだばLisperになる を含むブックマーク はてなブックマーク - Common Lispの本はどれだけ日本で出版されているのか - わだばLisperになる

ふと思ったのでAmazon等から集めてみました。

(2012-06-15アップデート)

1986CLtL1Common LISP—Common LISP言語仕様書Guy L. Steele Jr.
1986CLtL1Common Lisp 入門湯浅 太一、萩谷 昌己
1986CLtL1Common LispプログラミングRodney A. Brooks
1987CLtL1Common Lispハンドブック湯浅 太一、萩谷 昌己
1987CLtL1実用Common LISP衣笠 成一
1987CLtL1Common Lispドリル湯浅 太一
1988CLtL1bit別冊 Common Lisp オブジェクトシステム -- CLOSとその周辺
1988CLtL1プログラマのためのCOMMON LISPガイドDeborah G. Tatar
1989?これがLISPだ!アンダーソン
1989CLtL1Lispプログラミング入門白川 洋充
1991CLtL1+αCommon Lispオブジェクト指向(CLOS)S.E. キーン
1991CLtL1/ZetalispLISPマシン・プログラミング技法ハンク ブロムリー、リチャード ラムソン
1991CLtL1LISP〈1〉 (情報処理シリーズ)P.H. ウィンストン、B.K.P. ホーン
1992CLtL1LISP〈2〉 (情報処理シリーズ)P.H. ウィンストン、B.K.P. ホーン
1992CLtL2COMMON LISP 第2版Guy L. Steele Jr.
1993ANSI対話によるCommon Lisp入門栗原 正仁
1998?LISP言語演習鈴木 寿
2001ANSIプログラミング言語Lisp入門からマルチメディアまで石丸 清登
2002ANSIANSI Common LispPaul Graham
2004ANSIやさしいLisp入門酒井 皇治
2006ANSI入門Common Lisp—関数型4つの特徴とλ(ラムダ)計算新納 浩幸
2007CLtL2On LispPaul Graham
2008ANSI対話によるCommon Lisp入門 POD版(pod化され再販)栗原 正仁
2008ANSI実践Common LispPeter Seibel
2009ANSI関数プログラミング教科書赤間 世紀
2010CLtL2実用 Common LispPeter Norvig

眺めてみるに、これまで年に1冊は出版されているんだなあという感じです。

絶版になっているものも多いのですが、古くても入手可能な本もそれなりにあります。古い本の場合のはまりどころとしてCommon Lispには、CLtL1、CLtL2、ANSI CLと3つの版があることが挙げられます。

読んでいて、どうも関数が見当たらないんだよなあ、という時には、

のようなページを参照するか、上記ANSI Common Lisp(Paul Graham)の巻末の付録を参照すると良いかと思いかもしれません。

また、CLtL2とANSIの差はそれ程でもありませんが、CLtL1とCLtL2/ANSIの差は割とあるのでCLtL1時代の著作の単純なコード例がエラーになって上手く動かない場合は、仕様の違いが原因の可能性が高いかもしれません。

2009-05-09

さようならありがとうLingr、こんにちは破壊力ばつ牛ンChaton

| 00:12 | さようならありがとうLingr、こんにちは破壊力ばつ牛ンChaton - わだばLisperになる を含むブックマーク はてなブックマーク - さようならありがとうLingr、こんにちは破壊力ばつ牛ンChaton - わだばLisperになる

なかなかLingrのような使い勝手のツールがみつからず、このままではCLerの寿命がストレスでマッハなんだが・・「こんな日本で生きるれるわけがない・・」とあきらめが鬼なっていました。

「俺はIRCへの移住にはどちかというと大反対だな」という意見もあり、friendfeed、はてなハイク、色々模索していましたが、このたびshiroさんの御好意によりChatonでCL部屋も開設して頂けることになりました!!

まるで「今回あきらめ顔になってるのでCLer移住してきても良いぞ」といわれると「やった許しが出たか!」「封印がとけられた!」と仲間がもじもじしだした感じです。

Chatonは、Lingrが閉鎖するという告知からshiroさんが作り始め、あれよあれよという間にできあがり、「もうできたのか!」「はやい!」「きた!Lingrきた!」「メインLinguruきた!」「これで勝つる!」と大歓迎状態でした。

ものを作るのは真にハッカーの人だからハックしたくて作るんじゃない作ってしまう者がハッカー。この話は実際にあった内容で英語で言うとノンフィクション。

shiroさんを凄いと感じてしまってる私は本能的に長寿タイプだと思いました。

「LISP界のイチローですね」と言たくもなろうものです。

こちらChaton CL部屋:

こちら本家Chaton Gauche部屋:

どこに棲息していてどこで活動しているのかなかなか把握困難な日本のCLerですが、hai!!他の人も早く集まってください!はやくあつまっテ!!

2009-05-02

Lingr難民

| 20:18 | Lingr難民 - わだばLisperになる を含むブックマーク はてなブックマーク - Lingr難民 - わだばLisperになる

昨日の深夜、Lingrがメンテのために止まっていたのですが、再開したらなんと5/31でLingr終了という告知!

これまでオンラインのCL勉強会等でお世話になっていて、また使い勝手も個人的に好みであっただけに非常に残念です。

今迄の発言データは、5/15までに申請すれば、5/16からエクスポートできるようになるらしいので早速申し込みましたが、今後どこを拠点にしたら良いのか悩みどころです。

今迄のLingr CL部屋の傾向

  1. 気軽に一見さんも発言できて
  2. ウェブからでも簡単にアクセスできて
  3. ログが取れて
  4. 画像が貼れる

というところがLingrの良いところでした。こういうサービスが他にあると最高なのですが、今迄のCL部屋の傾向を鑑みるに、オンライン勉強会の拠点として使うならば、リアルタイムのチャット機能が重要にはなりますが、それ以外の日常ではチャットというより掲示板的な使い方が重要なのかなと思っています。

対策案1: 既存の場所に合流

他の部屋を眺めてみるに、IRCに移動するところが多いようですが、現在、日本語のLISP系のIRC部屋で一番栄えてそうなのはfreenode.netの#lisp_schemeなので、こちらに合流するというのも良いかもしれません。

対策案2: 新しいところへ移動

friendfeedに移住

friendfeedのグループ機能というのをiratqqさんから教えてもらったのでとりあえずで試しに作ってみました

はてなハイクに移住

Lingrをメインに使ってる方は、はてながあまり好きじゃない気がするので無駄な気はするんですが、とりあえず試しに作ってみました。

IRCに移住

#lisp_schemeは現在ログが完全公開ではないので、ログも誰でも見れるのが良いなと思う自分としては、完全公開なポリシーで新しく部屋を作成した方が良いのかなと思っています。#common-lisp-ja/jpとか。

ということで、試しに、freenodeで、#common-lisp-jp作ってみました。

ちなみに、現在、ロガーもなんにもありませんので、上でいうポリシーもなにもありません、すいません(笑)

ウェブブラウザからIRCということだと

を利用している人を良くみかけます。

chatterie

また、shiroさんがGauche部屋の方々にchatterieというのを作り始めたようです

ソースが公開されたらどこかのサーバに置いて運用というのも良いかもしれません。


という感じですが、何かLingr的な良いサービスはないでしょうか。情報お待ちしています(*'-')