予定は未定

いやさ,蔦屋行ったらさ,店内放送で歌姫ベストに収録されてる曲が流れてさ,「あぁ,やっぱ明菜はえぇなぁ」なんて思ってたらさ,買っちまってたわけよ.それに,最近某歌姫伝説で稼がせてもらったもんだからさ,まぁ勢いって大切じゃない.
結果的に,買って良かったと思ってます.「あ〜この曲聞いた事あるわ〜」ってのばっかりで.てかほとんど.当分iTunesでエンドレスにループ.身内ネタで言うとこのループインフィニティ.


ジャケット明菜のイヤリング,ANエンブレムを見ると,なんだかゾクゾクするね.

グリフォン買えなかったのは少しショック.

ココ数日,体調極悪.

鼻水ズルズル,痰は止まらん,なんか奥歯痛い(親知らず?),髪の毛切りたい.
今日に限ったことだとは思うけれど,すげー胃が重い.恐らく昨晩のマクドナルド.ビッグマックのバリューセット+フィレオフィッシュ+マックチキンでドッシリ.食わせ過ぎだよ親父殿.


3/9の追い出しコンパ,万全の体調で臨めるかしら.


今日は朝から歯医者で奥歯を見てもらおうと思ったけれど,雨が降ったので延期.下手に治療して,追いコンで辛いものが食べられないようになると,結構凹むし.今日はダラダラと借りてきたDVDでも見て休日を満喫.


ところで,『サウンドオブサンダー』は駄作だと思う.超映画評論の75点とか嘘だぁ.ありえねーよ.
そもそもさ,恐竜狩りとか前提がおかしいよ.死ぬかもしれないスリルを求めてわざわざタイムスリップして恐竜殺しにいってるくせに,いざ死にかけたら「訴えてやる」はねーだろう.大体1時間ぐらいのトコをチラッと見ただけなんだけど,この時点で見る気を無くした.


今日は,これから『奇談』を見ます.諸星大二郎×阿部寛とか熱過ぎる.駄作でもそれだけで満足してしまいそうだ.

追記

みんなぁー!ぱらいそさいくんだー!おらといっしょに,ぱらいそさいくんだーー!!
「ぱらいそさいくだ!」じゃないのかよと思った.唯一,そこだけが気になった.


いやぁ,音楽が川井憲次とかビビった.ピアノのメーカーが『K. KAWAI』だったのが笑える.川井音楽は良いね良いね.

PRagger:notify_growlを書いてみた

書いてみたのはよいが,PRaggerの最新版が短くなりすぎててビビった.Configクラスとか消したんだ!やっぱgemを素直にrequireできないのは不都合なのかな?お陰で,notify_growlも最新版対応するともう少し簡単になりそうってことで,ちょっと修正,今に至る.

必要なもの

def notify_growl(config, data)
  require 'rubygems'
  
  begin
    require 'ruby-growl'
  rescue LoadError
    puts <<LERR
LoadError: Please install gem "ruby-growl"
           # gem install ruby-growl
LERR
    exit
  end
  
  default_setting = {
    :host     => "localhost", # host to connect
    :app_name => "PRagger",   # name of the application
    :password => nil,         # needed to send notifications to host
    :title    => "PRagger",   # title for notification
    :sticky   => false,       # makes the notification stick until clicked
    :jp       => false        # notify in Japanese (default English)
  }
  
  default_setting.each do |k, v|
    unless config[k]
      config[k] = v
    end
  end      
  
  if data.size > 0
    g = Growl.new(config[:host], config[:app_name], ["notify-growl"],
                  nil, config[:password])

    if config[:jp]
      message = "#{data.size}件の新着フィードがあります"
    else
      message = "#{data.size} new feeds available"
    end
    begin
      g.notify("notify_growl", config[:title], message, 0, config[:sticky])
    rescue
      puts <<NOGROWL
Error: Please install or start Growl
       http://growl.info/
NOGROWL
      exit
    end
  end
  
  return data
end

思ったんだけど,もうPRagger本体でrubygemsぐらいはrequireしといて損は無いかもね.ちなみに,ソースコード中の英文は適当.

久々にLisp

いまだに3章までしか読めてないANSI Common Lisp.読めてないっていうか,読んでない.なんでだろう,時間はあるのに.まぁそれは置いといて,本を読んでいて出てきた,以下の3つの関数を定義してみた.

> (union '(a b c) '(c b s))
(A C B S)
> (intersection '(a b c) '(b b c))
(B C)
> (set-difference '(a b c d e) '(b e))
(A C D)

unionはor,intersectionはand,set-differenceは差ってことかな.

(defun my-union (a b)
  (if (null a)
      b
      (adjoin (car a) (my-union (cdr a) b))))

(defun my-intersection (a b)
  (if (null a)
      nil
      (if (member (car a) b)
          (cons (car a)
                (my-intersection (cdr a) b))
          (my-intersection (cdr a) b))))

(defun my-set-difference (a b)
  (if (null a)
      nil
      (if (member (car a) b)
          (my-set-difference (cdr a) b)
          (cons (car a)
                (my-set-difference (cdr a) b)))))

何時も思うけれど,Emacsのifのインデントは何でヘンテコなんだぜ?上のは整形してあるんだけれど,実際はこうなってる.

(defun my-union (a b)
  (if (null a)
      b
    (adjoin (car a) (my-union (cdr a) b))))

不満.まぁそれは置いといて,動作確認.

> (load "my-set.lsp")
;; Loading file my-set.lsp ...
;; Loaded file my-set.lsp
T
> (my-union '(a b c) '(c b s))
(A C B S)
> (my-intersection '(a b c) '(b b c))
(B C)
> (my-set-difference '(a b c d e) '(b e))
(A C D)

オッケーだね.ところで,intersectionの挙動がちょっと嫌だな.

> (intersection '(b b c) '(a b c))
(B B C)
> (my-intersection '(b b c) '(a b c))
(B B C)

uniqueじゃないというか.再帰を考えずに反復マクロとか使ってやれば簡単なんだけど*1,面倒くさいし止めておく.


ところで,まだclispでフィボナッチとか階乗とか求めてない気がするので,やっておこう.

(defun fib (n)
  (if (< n 2)
      1
      (+ (fib (- n 2)) (fib (- n 1)))))

(defun fact (n)
  (if (eql n 1)
      1
      (* n (fact (- n 1)))))
      
> (mapcar #'fib '(1 2 3 4 5 6 7 8 9 10))
(1 2 3 5 8 13 21 34 55 89)
> (mapcar #'fact '(1 2 3 4 5 6 7 8 9 10))
(1 2 6 24 120 720 5040 40320 362880 3628800)

lispって文法が単純だから,疑似コードをそのまま書けば結構すんなり動いてくれるんじゃないかって思う.実際,今回書いた全てのコードは,一発で動いたし.まぁこの程度の問題だからかな.もっと複雑になると,テストしまくらないとダメなんだろうな.

*1:memberとか使って返すリストに要素が含まれてるか見れるし

LiveCoding行ってきましたよ & MeCabメモ

何とも言えん不思議な雰囲気で楽しかった.京大町家キャンパスもサイコー.うじひささん,お疲れさまでした.

MeCab

LiveCodingのなかでMeCabがチラッと出てきたので,その場でチャチャっとMacにインストールしてみました.

$ sudo port install mecab +utf8 # これでutf-8もバッチリ?+sjisでShift-JISの辞書ファイルも
$ sudo port install rb-mecab

これで,RubyからMeCabを呼ぶことができます.素敵ですね!PerlPython用のも用意されてるみたいです.


続きで,MeCabを試してみます.

続きを読む