#わーい、まはろ>えんどう
#アイコン入れ替えました。リロードしたら出ます。
#badgeで小さくなるとちょっとわかりづらいかな。後で加工して背景色を変えるかも。
#@えんどう、他既にAPIを使い始めてる方々へ。
#現在のCometパケットの'text'フィールドはやっぱり名前がおかしいと思うので、今夜あたり'content'に変えます。変えるなら早いほうがいいと思うので。
#いつ入れ替えるかはまだはっきりしませんが、明朝までには置き換わってるでしょう。
#Cometサーバから返ってくるリプライパケットの話ね。
#りょうかいです。
###元の写真はこれです。
#正面の写真ならこちらもよいかも
##おかしいなあ、observerが呼ばれない気配
#あ、まるごと来るのか。 ((pos . 10591) (nc . 5) (ver . "kjod0a") (cid . 231155069) (t ...
#ちょっとログとってみよう
#Cometのリプライパケットのフィールド名を'test'から'content'に変更しました。
#s/test/text/
#りょうかいしました
#テスト
#10651 gosh 99.8% 2:25:15 1 31 102 668K 212K 236K 25M
#(while #t)は破壊力あるな
#(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
##!/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
#だいじょうぶっぽい。
#Cocoa本でおすすめありますか?>Macな人
#@えんどう sxの中身の順番は保証されてないのでそのmatchはまずいです。sxをalistとみなしてassqかなんかでcontentに対応するのを取り出してください。
#あと、radar-handlerの返り値には意味があります。#fを返すようにしてください。
#sxはリストでなくerror objectの場合もありますよね。
#そうだ。
#(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が必要なのかと思いました。
#現状では画像のローカルファイルのパスを渡しています。
#てすと
#細かいけどs/rader/radar/g じゃないかな
#room icon了解。apiloginの戻り値に入れるようにします。
#ありがとうございます
#あ、あとradar-handler、#f返してね。#<undef>じゃなく。
#(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)
#りょうかいしました。