Chaton > Archives > 2009/05/17

2009/05/17 00:59:26 UTCshiro
#
わーい、まはろ>えんどう
#
アイコン入れ替えました。リロードしたら出ます。
#
badgeで小さくなるとちょっとわかりづらいかな。後で加工して背景色を変えるかも。
2009/05/17 06:33:40 UTCshiro
#
@えんどう、他既にAPIを使い始めてる方々へ。
#
現在のCometパケットの'text'フィールドはやっぱり名前がおかしいと思うので、今夜あたり'content'に変えます。変えるなら早いほうがいいと思うので。
#
いつ入れ替えるかはまだはっきりしませんが、明朝までには置き換わってるでしょう。
#
Cometサーバから返ってくるリプライパケットの話ね。
2009/05/17 06:53:47 UTCえんどう
#
りょうかいです。
#
http://www.flickr.com/photos/yasuyuki/2895043944/in/datetaken/
#
http://farm4.static.flickr.com/3234/2895043944_f586434fef.jpg?v=0
#
元の写真はこれです。
#
正面の写真ならこちらもよいかも
#
http://farm4.static.flickr.com/3190/2895042964_14a6cba3ac.jpg?v=0
2009/05/17 07:52:30 UTCえんどう
#
おかしいなあ、observerが呼ばれない気配
#
あ、まるごと来るのか。 ((pos . 10591) (nc . 5) (ver . "kjod0a") (cid . 231155069) (t ...
#
ちょっとログとってみよう
2009/05/17 10:31:48 UTCshiro
#
Cometのリプライパケットのフィールド名を'test'から'content'に変更しました。
#
s/test/text/
2009/05/17 10:49:18 UTCえんどう
#
りょうかいしました
2009/05/17 13:14:44 UTCshiro
#
テスト
2009/05/17 15:10:24 UTCえんどう
#
10651 gosh 99.8% 2:25:15 1 31 102 668K 212K 236K 25M
#
(while #t)は破壊力あるな
2009/05/17 15:53:08 UTCえんどう
#
(define (main args)
  (let-args (cdr args)
      ((cfile "c|conf=s" => (cut read-config <>))
       (help  "h|help" => (cut show-help <>)))
    (let1 client (chaton-connect
		  (url-of (*chaton-config*))
		  (client-of (*chaton-config*))
		  rader-handler)
      (thread-join! (ref client 'observer-thread)))))
#
9502 gosh 0.0% 0:00.23 1 14 96 16K 184K 212K 17M
#
平和です。
#
いきなり落ちた
#
./rader2 -c chaton-chaton.conf
#?=sx
#?-    ((pos . 4358) (nc . 4) (ver . "kjsajg") (cid . 219279748) (co ...
*** UNCAUGHT-EXCEPTION
Stack Trace:
_______________________________________
#
chaton-log-openってexportされてないですね
#
gauche.clientをアップデートしてなかった orz
2009/05/17 16:03:30 UTCえんどう
#
#!/usr/bin/env gosh

(use chaton.client)
(use gauche.parameter)
(use gauche.parseopt)
(use gauche.process)
(use gauche.threads)
(use util.list)
(use util.match)

(define-class <chaton-config> ()
   ((client :init-keyword :client
	    :accessor client-of :init-value #f)
    (url    :init-keyword :url
 	    :accessor url-of :init-value #f)
    (npath   :init-keyword :npath
	     :accessor npath-of :init-value #f)
    (ipath   :init-keyword :ipath
	     :accessor ipath-of :init-value #f)))

(define *chaton-config*
  (make-parameter
   (make <chaton-config> :client "ChatonRader"
	 :url "http://practical-scheme.net/chaton/gauche"
	 :npath "/usr/local/bin/growlnotify"
	 :ipath "/Users/yasuyuki/Downloads/chaton-room-gauche.gif")))

(define (send-notify npath ipath title message)
  (process-output->string
   (list npath "--image" ipath "-t" title "-m" message)))

(define (rader-handler sx)
	(match #?=sx
	       [((name (sec mil) body) ...)
		(for-each
		 (cut send-notify (npath-of (*chaton-config*)) (ipath-of (*chaton-config*)) <> <>)
		 name body)]))

(define (show-help progname)
  (print #`",|progname| [-c conf-file]"))

(define (read-config cfile)
  (let* ((sx (and cfile (call-with-input-file cfile (cut read <>))))
	 (url (and sx (assoc-ref sx 'url)))
	 (npath (and sx (assoc-ref sx 'npath)))
	 (ipath (and sx (assoc-ref sx 'ipath)))
	 (conf (*chaton-config*)))
    (when url (set! (url-of conf) url))
    (when npath (set! (npath-of conf) npath))
    (when ipath (set! (ipath-of conf) ipath))
    (*chaton-config* conf)))

(define (main args)
  (let-args (cdr args)
      ((cfile "c|conf=s" => (cut read-config <>))
       (help  "h|help" => (cut show-help <>)))
    (let1 client (chaton-connect
		  (url-of (*chaton-config*))
		  (client-of (*chaton-config*))
		  rader-handler)
      (thread-join! (ref client 'observer-thread)))))
#
svn updateしてインストールし直したけどやっぱり落ちます。
#
tesot
#
$ ./rader2 -c chaton-chaton.conf
#?=sx
#?-    ((pos . 7031) (nc . 4) (ver . "kjsajg") (cid . 86995921) (con ...
*** UNCAUGHT-EXCEPTION
Stack Trace:
_______________________________________
#
てすと
#
test
#
a
#
b
#
c
#
d
#
e
#
f
#
#!/usr/bin/env gosh

(use chaton.client)
(use gauche.parameter)
(use gauche.parseopt)
(use gauche.process)
(use gauche.threads)
(use util.list)
(use util.match)

(define-class <chaton-config> ()
   ((client :init-keyword :client
	    :accessor client-of :init-value #f)
    (url    :init-keyword :url
 	    :accessor url-of :init-value #f)
    (npath   :init-keyword :npath
	     :accessor npath-of :init-value #f)
    (ipath   :init-keyword :ipath
	     :accessor ipath-of :init-value #f)))

(define *chaton-config*
  (make-parameter
   (make <chaton-config> :client "ChatonRader"
	 :url "http://practical-scheme.net/chaton/gauche"
	 :npath "/usr/local/bin/growlnotify"
	 :ipath "/Users/yasuyuki/Downloads/chaton-room-gauche.gif")))

(define (send-notify npath ipath title message)
  (process-output->string
   (list npath "--image" ipath "-t" title "-m" message)))

(define (rader-handler sx)
  (match sx
	 [((_ . pos) (_ . nc) (_ . var) (_ . cid) (_ (name (sec mil) body)) ...)
	  (for-each
	   (cut send-notify (npath-of (*chaton-config*))
		(ipath-of (*chaton-config*)) <> <>)
	   name body)]))


(define (show-help progname)
  (print #`",|progname| [-c conf-file]"))

(define (read-config cfile)
  (let* ((sx (and cfile (call-with-input-file cfile (cut read <>))))
	 (url (and sx (assoc-ref sx 'url)))
	 (npath (and sx (assoc-ref sx 'npath)))
	 (ipath (and sx (assoc-ref sx 'ipath)))
	 (conf (*chaton-config*)))
    (when url (set! (url-of conf) url))
    (when npath (set! (npath-of conf) npath))
    (when ipath (set! (ipath-of conf) ipath))
    (*chaton-config* conf)))

(define (main args)
  (let-args (cdr args)
      ((cfile "c|conf=s" => (cut read-config <>))
       (help  "h|help" => (cut show-help <>)))
    (let1 client (chaton-connect
		  (url-of (*chaton-config*))
		  (client-of (*chaton-config*))
		  rader-handler)
      (thread-join! (ref client 'observer-thread)))))
#
できた
#
快調。
#
a
#
b
#
c
#
d
#
e
#
f
#
g
#
h
#
i
#
j
#
h
#
i
#
j
#
k
#
l
#
m
#
n
#
o
#
p
#
q
#
r
#
(define (rader-handler sx)
  (match sx
	 [((_ . pos) (_ . nc) (_ . var) (_ . cid) (_ (name (sec mil) body) ...))
	  (for-each
	   (cut send-notify (npath-of (*chaton-config*))
		(ipath-of (*chaton-config*)) <> <>)
	   name body)]))
#
おちるな。もしかしてこう↑か?
#
a
#
b
#
c
#
d
#
e
#
f
2009/05/17 16:39:15 UTCえんどう
#
だいじょうぶっぽい。
#
Cocoa本でおすすめありますか?>Macな人
2009/05/17 19:05:55 UTCshiro
#
@えんどう sxの中身の順番は保証されてないのでそのmatchはまずいです。sxをalistとみなしてassqかなんかでcontentに対応するのを取り出してください。
#
あと、radar-handlerの返り値には意味があります。#fを返すようにしてください。
2009/05/17 20:33:49 UTCenami
#
sxはリストでなくerror objectの場合もありますよね。
2009/05/17 20:43:42 UTCshiro
#
そうだ。
2009/05/17 22:40:19 UTCえんどう
#
(match sx
	 [((_ . pos) (_ . nc) (_ . var) (_ . cid) (_ (name (sec mil) body) ...))
	  (for-each
	   (cut send-notify (npath-of (*chaton-config*))
		(ipath-of (*chaton-config*)) <> <>)
	   name body)]))
#
まちがえた
#
#
b
#
c
#
d
#
e
#
f
#
(define (rader-handler response)
  (when (pair? response)
    (let1 content (assoc-ref response 'content)
      (match content [((name (sec mil) body) ... )
		      (for-each (cut send-notify
				     (npath-of (*chaton-config*))
				     (ipath-of (*chaton-config*)) <> <>)
				name body)]))))
#
こんな感じでしょうか。
#
あ、そうだ、提案。
#
LingrRaderはLingrサーバーからroom iconを得ていたみたいなので、room iconのURLを返すAPIが必要なのかと思いました。
#
現状では画像のローカルファイルのパスを渡しています。
2009/05/17 22:58:53 UTCえんどう
#
てすと
2009/05/17 23:30:29 UTCshiro
#
細かいけどs/rader/radar/g じゃないかな
#
room icon了解。apiloginの戻り値に入れるようにします。
2009/05/17 23:35:32 UTCえんどう
#
ありがとうございます
2009/05/17 23:42:42 UTCshiro
#
あ、あとradar-handler、#f返してね。#<undef>じゃなく。
2009/05/17 23:50:38 UTCえんどう
#
(define (radar-handler response)
  (when (pair? response)
    (let1 content (assoc-ref response 'content)
      (match content [((name (sec mil) body) ... )
		      (for-each (cut send-notify
				     (npath-of (*chaton-config*))
				     (ipath-of (*chaton-config*)) <> <>)
				name body)])))
  #f)
#
りょうかいしました。