日記を書く [・w・] はやみずさん

東京電力管轄内での節電にご協力ください
ヤシマ作戦:節電へご協力ください

2008-11-21

Outputz の結果表示について

ぱーまりんく欲しい!

3D円グラフ

3D円グラフによる表示は、あまり望ましくないそうです。時間帯別の表示は、全部棒グラフに統一したほうがわかりやすいと思います。

参考:3D円グラフを使うのはやめよう | Okumura’s Blog

あと、曜日と時刻の表示をしてくれるTweetStatsはなかなかおもしろいので、これも実装されるとうれしいですね。

http://gyazo.com/064b3f481e9bd3d903c51029caae0378.png

参考:TweetStats :: for hayamiz

流れはやすぎワロタ

ここ数日で、Outputzで捕捉できる情報が一気に増えて、ほとんどのアウトプット情報が記録されるようになってしまった。すごい。

outputz.el を改良しますた

id:antipop さん ++

EmacsからOutputzに文字数を投げる - antipop

気になったところがあったので、いくつか修正しました。CodeReposなのでそのままコミットしてもよかったけど、とりあえず diff をおいておきます。

http://hayamin.com/upload/outputz.diff.el

変更した点は以下のとおり。

outputz-mode をカスタム変数

このてのユーザーがいじりたい変数は、カスタム変数にしておくのがよさげですね。 M-x customize-variable で変更できるようになります。

url.el の mailcap 問題

url.el が依存している gnus/mailcap.el は、flim の mailcap.el と名前がかぶっているので、load-pathによっては film のほうの mailcap.el が require されてしまって、必要な関数が取得できずエラーになってしまう、という有名な問題があるようです。

oddmuse.elとmailcap.elの問題 - (rubikitch loves (Emacs Ruby CUI Books))

なので、(require 'url)の後に mailcap-parse-mailcaps という関数が束縛されてなかったら、load-path にある mailcap を全部ロードするという強引な回避策をとっておきました。

outputz-count 周りの改良

現状の問題点として考えられるのが以下の2点

  • ファイルを開いた段階で outpuz-count 変数初期化されないので、たとえば 1000文字のファイルを開いて、1文字追加して保存すると、1001文字更新したと Outputz に記録されてしまう
  • 文字数が増えたときにしか outputz-count を更新しないので、ファイルの内容を大幅に削除したときなんかに、その後多少内容を書き加えても Outputz に記録しようとしない

前者は、 find-file-hook を使って outputz-count を初期化するようにしました。後者は、outputz関数が呼ばれるたびに、outputz-count は毎回更新するようにしました。

outputz.el レシピ

outputz.el で、編集しているマシン、ユーザー名、ファイルの種類、ファイル名を区別するために、こんなことをやってみた。

こんなかんじで記録されて、いいかんじ。

http://gyazo.com/b04d208c929d0ce09b28e6adedf69c7a.png

(defun outputz-percent-encode (str &optional coding-system)                                                                  
  (if (or (null coding-system)                                                                                               
            (not (coding-system-p coding-system)))                                                                           
      (setq coding-system 'utf-8))                                                                                           
  (mapconcat                                                                                                                 
   (lambda (c)                                                                                                               
     (cond                                                                                                                   
      ((outputz-url-reserved-p c)                                                                                            
       (char-to-string c))                                                                                                   
      ((eq c ? ) "+")                                                                                                        
      (t (format "%%%x" c))))                                                                                                
   (encode-coding-string str coding-system)                                                                                  
   ""))                                                                                                                      
                                                                                                                             
(defun outputz-url-reserved-p (ch)                                                                                           
  (or (and (<= ?A ch) (<= ch ?z))                                                                                            
      (and (<= ?0 ch) (<= ch ?9))                                                                                            
      (eq ?. ch)                                                                                                             
      (eq ?- ch)                                                                                                             
      (eq ?_ ch)                                                                                                             
      (eq ?~ ch)))                                                                                                           
                                                                                                                             
(require 'outputz)                                                                                                           
(setq outputz-key "**********")
                                                                                                             
(setq outputz-base-uri                                                                                                       
      (concat "http://" (user-login-name) "." (system-name) ".emacs.jp/"))
(setq outputz-uri outputz-base-uri)                                                                                          
                                                                                                                             
(defadvice outputz (before outputz-setup-uri)                                                                                
  (setq outputz-uri                                                                                                          
        (outputz-percent-encode                                                                                              
         (concat outputz-base-uri                                                                                            
                 (symbol-name major-mode) "/"                                                                                
                 (file-name-nondirectory (or (buffer-file-name) (buffer-name)))))))                                          
                                                                                                                             
(ad-activate-regexp "outputz-setup-uri")