2006年2月28日火曜日

男なんて単純なものよね。



んまぁ、昨日もなんとなくショットバーで飲んでいたんですわ。


カウンターのとなりは常連の顔見知りで、そのむこうに上司と思しき女性と、新入社員?ってぐらいの勢いのワカゾー。


そんな中で聞こえてきた女性の発言。



「残業でいらいらしててもコロッケひとつでご機嫌になるし、単純な人なんですよ。」



まぁ、そのワカゾーのことじゃないみたいだけど。。。。。


コロッケひとつでご機嫌になっちゃだめですか?


多分、残業中にコロッケが有るのと無いのでは、同一人物と思えないぐらい私は性格が違うきがする。


どーせ私の感情なんて、胃袋に半分直結してるんですよ。


誰かにぶちきれてるときは空腹のときばかりだし。たべもの与えられてなだめられたり。。。


いいじゃないか、人間だもの。


あ、その発言主はいい感じの眼鏡さんでした(ぉ





2006年2月26日日曜日

真理



犬鍋製作所様のブログで教えてもらったネタ。



延命を


   祈るうちにも


         減るいのち




http://ameblo.jp/inunabe/theme-10001202139.html


なんだか、私は好きです。こういう正直なの。


とりあえず、永遠の"自称いのち”をシャクティパッドであたえられるよりかはdouble.PositiveInfinity倍いいです。


祈るぐらいなら、現世に悔いを残すなってことなのかなぁ。





でびあんと戦う。



うーんさっぱーりです。まず、セキュリティホールがあるパッケージ一覧が欲しいのでFreeBSDでいうところのportauditを探してるんだけど。。。


みつからない。。。てか適切な検索語すら思い付かない。orz





ジャスミンティ



唐突だか私は邪道なジャスミンティの入れ方をしている。


写真のとおり、ちゃっぱをいれて上からお湯を注ぐだけ。


いたってらくちん。ってやってたら今日いれたらなにやら根っこ?小動物の手?


みたいなのが浮かんでた。ぎょえっておもってよくみたらジャスミンの花弁だった。


うみゅこれはこれでいいなぁ~。写真とろうとカメラを探している間に花弁は沈んじゃいました。(寂





2006年2月25日土曜日

バイナリでtelnetっぽくなツール



ものとしては非常になんともないけど、たまにむしょうに欲しくなるツール。


単に入力行を読んで%XXをみたら16進変換するだけ。


出力はout.tmpに出されるのでtail -fで読むっす。





参考までに








LF0x0A
CR0x0D
%0x25


#!/usr/bin/perl
#belnet host port
#using "output.tmp" for output
#STDIN is used only for sending message (printf format)
use IO::Socket;

($host,$port)=@ARGV;
open OUT,">output.tmp" or die("");
$sock = IO::Socket::INET->new(PeerAddr => $host,PeerPort => $port,Proto=> 'tcp',);
print STDERR "CONNECTED\n";
select OUT;
$|=1;
select $sock;
$|=1;
select STDOUT;
$|=1;
if(fork()){
while(<STDIN>){
chomp();
s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
print $sock $_;
}

}else{
while(sysread($sock,$_,1)){
print OUT $_;
}
print STDERR "WRITE END\n";
}




ruby電卓



しのさんの作ったirc電卓モジュールの単純なフロトエンド



#!/usr/local/bin/ruby
load "/usr/local/bin/Calculator.rb"
require "readline"
while $_=Readline.readline("> ", true)

bunsu=Calc.calculate( $_ )

if( bunsu)
syosu=bunsu.to_f
end
print bunsu," (",syosu,")\n"
end

んでもってしのさんが作ったモジュール.ぐぐってもでてこないので。。。張り付け



#----------------------------------------------------------------------
#
# Calculator.rb
# 電卓 ボットに電卓機能を!
#
# Programmed by SHINOHARA Takayuki (shino)
#
# 2003/06/22 shino 複素数リテラル('1+4i'のような)に対応
# 2003/06/15 shino 複素数(Complex)に対応
# 2003/06/12 shino いろいろ拡張
# 2003/05/25 shino いろいろ拡張
# 2003/05/10 shino 作成
#
# このソフトウェアはPublic Domain Softwareです。
# 自由に利用・改変して構いません。
# 改変の有無にかかわらず、自由に再配布することが出来ます。
# 作者はこのソフトウェアに関して、全ての権利と全ての義務を放棄します。
#
#----------------------------------------------------------------------
require 'rational'
require 'complex'

class Calc; INFO = false; end

# Ruby 1.6 には asin, acos, atan がないので
def Math.asin x; atan2 x,sqrt(1-x*x) end
def Math.acos x; atan2 sqrt(1-x*x),x end
def Math.atan x; atan2 x, 1 end

class Calc
# 型をなるべく簡単なものへ還元
# Complex --> Float/Rational/Integer
# Rational --> Integer
# Floatは有限精度なので、Integerへの変換はしない
def self.reduce_num( num )
if num.kind_of?(Complex) && num.image == 0
num = num.real
end
if num.kind_of?(Rational)
num = Rational.reduce( num.numerator, num.denominator )
if num.denominator == 1
num = num.to_i
end
end
return num
end
end

# デフォルトの Rational ** Rational は無条件にFloatで計算してしまうので、
# 10.to_r**100.to_r のような整数演算が精度良くできない。
# そこで右の値が整数の時は Rational ** Integer を呼び出すように再定義する。
class Rational
alias r_power **;
def ** (other)
self.r_power( Calc.reduce_num( other ) )
end
end
# Complexも同様
class Complex
alias c_power **;
def ** (other)
self.c_power( Calc.reduce_num( other ) )
end
end

# RationalとComplexには、
# Rational(123) == Complex(0,123) になってしまう問題があるので、
# == を再定義する。
class Rational
alias r_eq ==;
def == (other)
if other.kind_of?(Complex)
other == self
else
self.r_eq( other )
end
end
end
class Calc
public
# 定数
Infinity = 1.0/0
Inf = 1.0/0
NaN = 0.0/0
Pi = Math::PI
I = Complex::I
def self.infinity; Inf; end
def self.inf; Inf; end
def self.nan; NaN; end
def self.pi; Math::PI; end
def self.e; Math::E; end
def self.i; Complex::I; end

# 関数
def self.ln x; Math::log x; end
def self.sgn x; (x>0) ? 1 : (x<0) ? -1 : 0; end
def self.abs x; (x<0) ? -x : x; end

#
RS_const_Math = '(\b(PI|E)\b)'
RS_const_Calc = '(\b(Inf(inity)?|inf(inity)?|NaN|nan|Pi|pi|e|I|i)\b)'
RS_const_SP = '(\b(π|無限大|∞)\b)'
RS_func_Math = '(\b(sin|asin|cos|acos|tan|atan|exp|log|log10|sqrt)\b)'
RS_func_Calc = '(\b(ln|sgn|abs)\b)'
RS_numsuffix = '(I|i|PI|Pi|pi|π)'
RS_num = '(0x[0-9a-fA-F]+|(0|[1-9][0-9]*)(\.[0-9]+)?|\.[0-9]+)'
# RS_num = '(\b(0|[1-9][0-9]*)(\.[0-9]+)?\b|\.[0-9]+\b)'
RS_num2 = '('+RS_num+RS_numsuffix+'?)'
RS_binop = '(\+|\-|\*{1,2}|\/|\%|\^)'

# 値
RS_const = '(' + RS_const_Math +
'|' + RS_const_Calc +
'|' + RS_const_SP + ')'
RS_val = '(' + RS_num2 +
'|' + RS_const +
')'

RS_lparen = '('+ "(#{RS_func_Math}|#{RS_func_Calc})" + '?\()'

RS_binopex = '(\)*' + RS_binop + RS_lparen + '*)' #括弧付き

# 多項式
RS_expr1 = '(' \
+ '([\-\+]*' + RS_lparen + ')*' \
+ '([\-\+]*'+RS_val+'\s*'+RS_binopex+'\s*)+' \
+ '[\-\+]*' + RS_val \
+ '\)*' \
+ ')'
# 括弧または関数で始まって中身が単項式
RS_expr2 = '(' \
+ '[\-\+]*' + RS_lparen + '+' \
+ '[\-\+]*' + RS_val \
+ '\)+' \
+ ')'

# 正規表現
RE_Expression1 = Regexp.new( RS_expr1 )
RE_Expression2 = Regexp.new( RS_expr2 )

# 計算
def Calc.calculate( expr )
begin
expr = String.new( expr )

# 式をRubyに変換する
expr.gsub!( /\^/, '**' )
expr.gsub!( Regexp.new(RS_const_SP), 'Calc::const(\'\1\')' )
expr.gsub!( Regexp.new(RS_num2), 'Calc::literal(\'\1\')' )
expr.gsub!( Regexp.new(RS_const_Math), '(Math::\1)' )
expr.gsub!( Regexp.new(RS_func_Math), 'Math::\1' )
expr.gsub!( Regexp.new(RS_const_Calc), '(Calc::\1)' )
expr.gsub!( Regexp.new(RS_func_Calc), 'Calc::\1' )

STDERR.puts '==> ' + expr if INFO

# 評価
answer = do_with_safelevel( 4 ) { eval( expr ) }

answer = reduce_num( answer ) if answer

return answer

rescue => ex
STDERR.puts 'Exception:' + ex.message if INFO
return nil
rescue ScriptError => ex
STDERR.puts 'ScriptError:' + ex.message if INFO
return nil
end
end

def self.literal( str )
case str
when /(π|pi)$/i; return literal( Regexp.last_match.pre_match )*Pi
when /i$/i; return literal( Regexp.last_match.pre_match )*I
when /^0x/; return str.hex
when /\./; return str.to_f
else; return Rational( str.to_i, 1 )
end
end

def self.const( str )
case str
when 'π'; return Calc::Pi
when '∞','無限大'; return Calc::Inf
else; return Calc::NaN
end
end

def self.do_with_safelevel( level )
result = nil
Thread.start {
$SAFE = level
result = yield
}.join
result
end
end





ちょっ、おま、変な信号だすな。



友達からもらったvaioノートなだが、、、出力電圧の極性が逆になってやんの。。


だーかーらーやめてってばさ、、そういうの。


ネコミミサーボアダプタが楽につくれないじゃないの。





おしえてwindowsのエロい人。



会社では開発マシンとしてwindows XP Pro.を使ってるんだけども。。。


HDDアクセスが多いとCPUが余っててもUI系が使い物ににならなくぐらい重くなってしまう。


FreeBSDとか普通のOSだとmake worldしながらネット巡回とか普通なので、windowsでも設定でそれぐらいはできるはずとおもってたんですが、、、なにかがわるいのかなぁ?


ちなみに環境としては




  • WinXP Pro

  • なんか,ウィルス対策ソフト(EPO)(コーポレートエディション)

  • P4 2.6G

  • Mem 512

  • i845GM系位チップセット

  • graphic Onbord





警察につかまる



っても、別にチャリ盗んだんとちゃうん?って疑われただけだけど。。。


結局中古チャリ屋の手続きミスであることが判明。


やっぱりただ、聴取されるだけではつまらないので、世間話モード。


で、分かったこと




  • 中古屋にいくと車体番号を下のほうから1けたずつ消す。それで何回中古になったかわかる。

  • 前鍵がないと検問に引っかける。

  • 髭づらの怪しい風体だと学生だと思う。


まっ。それなりに収穫があったのでよしとしますか。





2006年2月24日金曜日

メディア芸術祭



いかなきゃ、3がつ4,5と上京するぞ。


がむばって上京するぞっとな。





2006年2月19日日曜日

にょん



なーんだかなー。


お金をセーブしなきゃとおもう今日このごろ





とりあえずカテゴリ切ってみる



無能ちゃん関連で、とりあえず大学のころ御世話になった先輩からごそごそ教えてもらう。


ってか、その先輩の修論テーマがかなりちかいところらしい。


とりあえず、今日の作業としてはHTMLから語尾抽出。


ま、見た感じいい感じなのでよしとしよう。


やっぱコーパスはブログがええよね~、無能ちゃんてきにはきっと。





2006年2月14日火曜日

面白いね!




http://blog.livedoor.jp/guideline/archives/50022553.html



酔狂さんのブログでおしえてもらったのだが、、、いいねー。


こうやって読み易く加工してくれる人神だね。


朝から、これを途中まで読んでから会社いったら、プログラミングがさくさく進む。きっと優良なダメ成分なんですわー♪





プログラマに必要なのは





  • 空気

  • 音楽


って言い張ってたけど、今日からは




  • ダメ成分


をちゃんと書き加えたいと思います。


(ちなみに今の勤務先、音楽は昼休みしかきけないので・・・複雑めな論理を整理して組むとかできなくてorz)





続々無能ちゃん



うーん、母音に情報を落としてみるというの、、、端的に言って失敗でした、対応としては




  • 主成分分析みたいなノリで有用な写像をさがす

  • チャットにはさまざまなTPOが混じってるのにくらべHTMLには混じってる確率は低いから800文なくてもクラスタリングできるよ。


というふたつが考えられます。


とりあえず後者かな。


続きはたぶん週末になりそう。


クラスタリングが完了したら主観評価を行いたいと思います。そのときはよろーってか主観評価の仕方をしらべなきゃ。


思っているところでは、各文章を




  • かたい

  • やわらかい

  • やさしい

  • きびしい

  • ふざけてる

  • まじめ


とかとか、思い付く限りの言葉じりの種類をあげて、それをいくつか選んでもらって(もしくは、対義語を対にして5段階評価)して、その分類と語尾クラスタリングに相関があるかどうかを見ればいいとおもうねん。


でもね~誰か良い本教えてください。





今日のおいしい



週末、手取川で有名な吉田酒造さんにお酒かいにいってだべってたら、大吟醸の酒粕をくれた。さすが、地酒研の人と一緒にいくといいことが♪。


で、その酒粕がうんまいのよ~。カセットコンロにさかなやきの網のせてやくんだけど、両面を軽くやいたらうえに糖分が多くて白くかちこちにかたまったはちみつのせるのね。


とろーととけはじめのはちみつと、大吟醸の吟醸香のなかでものごっつうまいです。


触感も米粒がまだ残ってる感じなのでしたにまとわりつくことなく、さらさらころり。といった感じでいいんですよぉ~。


ということで大吟醸の酒粕をやいてはちみつかけるのはお薦めです。





2006年2月10日金曜日

やりなおし。



さて、やりなおしました。デバグっつーかなにか勘違いして頭のなかにおもいついた数式をそのまま実装したらバグだったってことで。。。


ふつーにベイズ推定になおしますた。


sato-さんに一番ちかいのはsuikyoさんでした。


ま、そんなに劇にてるってわけじゃないけど





ついでにわかったこと



チャットのログだと、年単位でとった統計データにちかいデータをだすには


やっぱり1かげつぶん(860文)ぐらいのデータがひつようっぽい(さとーさんのばあい)


webで800文のったページって結構壮大なぺーじだよなぁ。。。


すこし考え直そう。


とりあえずお風呂でおもいついたアイディアとしては、母音n-gramをつかうってのかなぁ。。


まぁ母音といっても「っ」とか「ょ」とか濁音とかをすこし特別扱いするけど。





2006年2月7日火曜日

id:satos度チェッカー



http://d.hatena.ne.jp/aqualis/20060205 関連で


昨日作っていたデータでなんとなくサトー度チェッカーを作ってみた。


実験



学習データ


・ロボット技術研究会保有のチャットログコーパス2003/5/19~2006/2/6の偶数日


・文末から連続するひらがな語尾3-gram(話者ごとに準備)


判定方法


・文末から連続するひらがな語尾3-gramの尤度を上記データで計算する


・最尤のものがsatosさんのものだったらあなたはロ技研でいうsatosさんです。



ちなみに、ロ技研の2005及び2003年10月の奇数日satosさんで試すと、ちゃんとsatosさんだと判定しました(予想どおり)


ちなみに、二位はゆの人でした。





まとめ


少なくとも、ロ技研のチャットではひらがな語尾に個人性があることが分かりました。(他のn-gramもぱっと見はいけそう)


今後、HTMLを収集しボットで学習するまえに、ひらがな語尾n-gramを利用してクラスタリングし,学習する際に偏ったクラスタを選択することで個人性を持ったボット学習が期待できるものと思われます。


備考


私はひらがな語尾をそのひとの個人の特徴を示すだけの物とは考えていません。ひらがな語尾は何を話すか、どのように(批判するのか、褒めるのか)話すかなどのTPOと本人の性格がかけあわさったものがひらがな語尾を形成すると予測しています。ですので、webHTMLをクラスタリングした後のデータを学習する際にひとつのクラスタのみで学習するのではなく、複数のクラスタを適当な配分で学習する必要があると予測します。







  • 別にsatosじゃなくてロ技研の誰になるかをさいゆう推定してるだけじゃないかというツッコミは甘んじて受け流します。





課題



ゆの人とさとーさんってそんなに文体にてたっけぇ~?


うぅ~~んorz





次回予告!



ノルム二乗距離でk-meansいくよ~~~っ。


それ、みこみこ、りゃーく


(追記:いや、ゆうどでいい感じいったんならゆうどでいいだろ。。。何をかんがえてるんだかよくわからない<2時間前のわし)





まんざいらくがうまい



まんざいらくの去年のロットの酒(特別純米)がいい感じに熟成してうまい。


いいね~いいね~。


お湯割邪道はでいってやるとおもったけど、すなおに冷やでのんでしまったい。





2006年2月6日月曜日

おもしろそな無能ちゃん。



http://d.hatena.ne.jp/aqualis/comment?date=20060205#c


さとーさん経由でしったんだが。


萌えだね~「個性化」





ふとした思い付きなんだけど、文末ひらがなn-gramでてきとーにクラスタリングするだけで、ある程度の文章の雰囲気できないかなぁ?


この際ノイジーでもいいじゃん。


やってみよう。


とりあえずチャットのログの文章から、人物の違いを推定できたらモデルとしての予備検証としてはOKかな?





続:無能ちゃん



とりあえず、チャットのログからひらがな語尾を抽出。っていっても句読点とか括弧できって、後ろからひらがなが連続する限りとってくるだけ。


この段階で人間の発言にしぼっても84万行もあるうちのサークルのチャットログは偉い。


いまn-gramに整理中。ということでねまーす。





ネタとしては最高



http://itpro.nikkeibp.co.jp/article/NEWS/20060201/228362/


このファイルはN時間後に消滅する。。。


ぜひwrite onlyなファイルシステム上においてみたいとか。


デバッガでこのプロセスをアタッチしてみたいとか。。。記事どおりの製品なら考えてしまう。


あと、wordのふりをしたなにかで開くとか。


いろいろためしどころがあって楽しそう。





2006年2月5日日曜日

ポータブル、サーボモーションプレーヤー。



CDぷれーやでラジコンサーボ2個のモーション再生ができたらうれしいですか??


まぁ、できることといったら。ラジコンをあらかじめパソコンで作ったデータ


に基づいて走らせる程度しかできないけど。





誰か嬉しい人がいるのなら公開しようかと。





今日の製作物



今日はウェアラブル・エレクトリック・パーカッションをつくってました。


ようは、この手袋をはめて手拍子なり、足なり、あたまなりをたたくと


いろんな音がスピーカから出るってのだけど。


こまったことがひとつ。。。ウェアラブルにしなきゃいけないのに


裁縫がにがてです。だれかウェアラブルとかメディアアートとか


すきそうなコスプレーヤーさんおながいします(ぉ





2006年2月4日土曜日

ド近眼



いや~、近眼なんだけどね、なんとなく眼鏡を外してたら


ちょっとぴぼけなんだど鼻のあたまを怪我してるのがみえたのね。


うぶげとかに至っては焦点あわせられたりして。。。。


どーーこだけ近いところみるのに特化してるよ、おれの目!