質のないDiary H

2010-01-13

twittering-mode + saykana で Timeline を読み上げるっぽいもの

| 23:32

saykana必須 なので、一応 MacOSX 用です。

まだほとんどできてないんですけどね。

動きとしては

  1. twittering-mode で新着 tweets が来たら起動
  2. 「ユーザ1」</>「tweet」<next>「ユーザ2」</>「tweet」<next>「ユーザ3」</>「tweet」<next>というよくわからないフォーマットで文字列を生成
  3. そいつを外部スクリプトである saykana_wrapper (名前も適当)に投げる
  4. 発言「誰さんの発言:ほげほげ!」みたいな

フォーマットに関しては、かなりやっつけです。正直なんでもいいです。受け取り側で認識さえすれば。

ちなみに以下が emacs 側。こいつを.emacs なり、emacs が認識するファイルに書けばおk

(add-hook 'twittering-new-tweets-hook
          (lambda ()
            (let ((n (1- twittering-new-tweets-count))
                  (s ""))
              (while (<= 0 n)
                (setq s
                      (concat s
                              (cdr (nth 8 (nth n twittering-timeline-data))) ;; ユーザ名
                              "</>"
                              (cdr (nth 1 (nth n twittering-timeline-data))) ;; tweet
                              "<next>"))
                (setq n (1- n)))
              (start-process "twittering-saykana" nil "saykana_wrapper" s))))

8 がユーザ名で、1 が tweet とかいちいち調べましたからね。

twittering-mode で既に getter があるかなーと思ったんですけど、よくわからんかったです。

start-process は非同期で外部プログラム実行ですね。以下が saykana-wrapper です。ruby です。

#!/usr/bin/env ruby                                                             
# -*- coding: utf-8 -*-                                                         

timeline = ARGV.join.split('<next>')

timeline.each do |tl|
  user,tweet = tl.split('</>')
  t = `echo #{tweet} | mecab -Owakati | mecab -Oyomi | sed -e 's/ハ/ワ/g'`
  `saykana '#{user}さんのはつげん'`
  `saykana '#{t.strip}'`
end

saykana は 「11月」とかはいい感じで呼んでくれるのですが

それ以外の漢字は読めないので、カタカナに変換して saykana に渡しています。


一応動いてくれてはいますが、やはりやっつけで書いたのでかなりおかしいです。

  • @hoge とか RT とかの対処(消すなり「〜さん宛」に直すとか
  • 英字をそのまま呼んでしまう (gongo → ジーオーエヌジーオー)
  • そのまま読むのでhttp 〜が長い場合はうざすぎる

saykanji *1 っぽく作ると発音はよくなるでしょう。いずれパクります。

あと、URLなどのいらん箇所も省けばいいと思う。すぐできるけどめんどいから今はやらん。

他にもいろいろあるけど、どうせお遊びなので気にしない気にしない。誰か直して。


ちなみに、Windows であればソフトークだったりがあるけど、Linux って say コマンドっぽいのあったかなー


追記 2010/01/17 17:24

id:hayamiz さんのコメントにより、以下な感じで直せました。

(add-hook 'twittering-new-tweets-hook
          (lambda ()
            (let ((tweets twittering-timeline-data)
                  (s ""))
              (setq s (with-output-to-string
                        (while tweets
                          (princ (twittering-format-status (car tweets)
                                                           "%S</>%t<next>"))
                          (setq tweets (cdr tweets)))))
              (start-process "twittering-saykana" nil "saykana_wrapper" s))))

あとは Ruby 側をちゃんとすればいいかなー

hayamizhayamiz 2010/01/14 04:42 文字列生成はこんなかんじでどうでしょう。
twittering-format-status関数のフォーマット文字列は、twittering-status-format変数のドキュメントを見るとわかると思います。

(with-output-to-string
(let ((n 3)
(tweets twittering-timeline-data))
(while (< 0 n)
(princ (twittering-format-status (car tweets) "%S</>%t<next>"))
(setq tweets (cdr tweets))
(decf n))))

gongoZgongoZ 2010/01/17 17:22 作者様ありがとうございます。以上のやり方で取得できました!
twittering-status-format、見落としていました。

fhaircutfhaircut 2010/01/17 17:31 当ウェブサイトはいろいろな髪形のビデオがあって、ピクチャーな

ど、長髪、短い髪型はすべてあって、あなたのご光臨を歓迎します
ようこそwww.fhaircut.com へ
どうぞよろしくお願いします.

2009-12-22

カーソルの位置にある数字列をインクリメントする emacs lisp 改修

| 13:06

http://d.hatena.ne.jp/kitokitoki/20091219/p1

上記リンク先にある http://www.emacswiki.org/emacs/IncrementNumber に良い感じのものが

looking-at、match-string、replace-match のコンボを見た。すごいなー。関数の存在すら知らなかった。

そんなわけで、パクリつつ引数やマイナスにも対応したのが以下

今度は数字の後ろに(ry


追記 2010/01/08

他サイトをパクリ、move-to-column を使ってカーソルの位置を覚えるようにしました。

まあこれで終わりじゃないっすか

2009-12-18

初ボーナス!

| 11:31

そんなわけで、社会人っぽさが彩られる「ボーナス」を頂きました。わっしょいわっしょい。

せっかくなので、最近の近況を

  • 12月頭にベヨネッタサントラが届いて作業用BGMとして活躍
  • その次の週にアサシンクリード2が届いた
  • 今日にはFF13も届く

アサシンは、残る実績は羽100と暗号です。暗号はいいとしても羽はもう飽きたお。

FF13は噂ではゆとり仕様らしいですが、ゆとり仕様でも面白いものはあると信じて楽しみにしてます。

2009-11-27

カーソルの位置にある数字列をインクリメントする emacs lisp

| 23:06

久々に elisp 書いたよー。

vim だと C-a とかでできるらしいものなんだけど、emacs には無いみたい。

ありそうなんだけどなーと思いつつ、とりあえず書いてみた。

(defun increment-string-as-number (number)
  "Replace progression string of the position of the cursor
by string that added NUMBER.
Interactively, NUMBER is the prefix arg.
 
examle:
  At the cursor string \"12\"
 
  M-x increment-string-as-number        ;; replaced by \"13\"
  C-u 10 M-x increment-string-as-number ;; replaced by \"22\"
 
  At the cursor string \"-12\"
 
  M-x increment-string-as-number         ;; replaced by \"-11\"
  C-u 100 M-x increment-string-as-number ;; replaced by \"89\""
  (interactive "P")
  (if (string=~ "[0-9]" (char-to-string (char-after)) t)
      (save-excursion
        (save-restriction
          (let ((p (if (integerp number) number 1))
                begin end augend)
            (re-search-backward "^\\\|[^0-9]")
            (if (string=~ "[^-0-9]" (char-to-string (char-after)) t)
                (forward-char))
            (setq begin (point))
            (re-search-forward "[0-9]+")
            (setq end (point))
            (narrow-to-region begin end)
            (setq augend (string-to-number (buffer-string)))
            (delete-region (point-min) (point-max))
            (insert (number-to-string (+ augend p)))
            (widen)
            )))
    (error "Can't calculation because not number at cursor point")))

おおむね良好な動作だとは思うが、不満としてはインクリメント後に、その数字列の

先頭に移動してしまうこと。narrow -> widen だとカーソル位置覚えてないんだっけ?

一応 save-excursion は入れてるけど・・あんまよくわかりませんね。


まぁ、久々の elisp ってだけで満足してるのでいいです。誰か書き直してください。

2009-11-01

BAYONETTAしてましたよー

| 22:38

konozamaくらいましたが、なんとか30日についたので、そこからひたすらプレイしてました。

金曜夜に少しやって、土曜は一日中。こういう系はあまりやったことないので、

ノーマルでもかなり苦戦しましたが、なんとかクリアしました。ゲーム時間12時間弱でしたね。


敵の攻撃とかは事前に光ったりしてわかるので、混戦でもそれなりによけれるのですが

ボスのあのいつくるんだ的なのは反射神経弱い俺には難しい。あれも光ってるんだけどね。タイミングが・・

まあそれでも楽しいです。爽快感。なによりべヨネッタ姐さんがエロい。


天使とのダンスバトルだったり、天使の一目惚れが一瞬で終わったり、

チェシェだったかニコだったかリコがまあまあのイケメン(笑)ぶりだったり

そういったギャグ要素はさすがプラチナゲームズと言ったところでしょうか。

ゴッドハンド経験者には、時折「こういうのゴッドハンドにもあったな」ってのがわかるかも。


今は、攻略サイトでついつい知ってしまったお金稼ぎ方法でコスを全部買いました。

体操服のバリエーションあると思ったら、なんでその色だけ変わるのw

体操服はいらないわけじゃないけど、せめて秘書とかスーツ系が欲しかったです。

DLCとかで出てきたらどうすっか・・!


しばらくはまだまだ遊べます