Gabor function
########################### #Gabor function real part gabor_r = function(x){ exp(-alpha^2*(x-x0)^2)*(cos(2*Pi*beta*(x-x0)+gamma)) } #Gabor function imaginary part gabor_i = function(x){ exp(-alpha^2*(x-x0)^2)*(sin(2*Pi*beta*(x-x0)+gamma)) }
########################### alpha=1; #分散(波の幅) beta=1; #空間周波数(波の数) gamma=0.5; #振動の位相 x0=0 x <- seq(-3,3,length=500) ylim_un=-1 ylim_up=1 plot(x,gabor_r(x),type="l",ylim=c(ylim_un,ylim_up)) par(new=T) plot(x,gabor_i(x),type="l",lty = 2,ylim=c(ylim_un,ylim_up)) axis(2, pos = 0, at = -3:3, adj = 1, col = 2) # 赤で X 軸を描く
########################### alpha=1; beta=2; gamma=2.5; x0=0 x <- seq(-3,3,length=500) ylim_un=-1 ylim_up=1 plot(x,gabor_r(x),type="l",ylim=c(ylim_un,ylim_up)) par(new=T) plot(x,gabor_i(x),type="l",lty = 2,ylim=c(ylim_un,ylim_up)) axis(2, pos = 0, at = -3:3, adj = 1, col = 2) # 赤で X 軸を描く
高速で時間を表示するスクリプト
Auto.pl
#!/usr/bin/perl use strict; use warnings; my @command = ('perl', 'testprint.pl'); while(1){ my $ret = system @command; if ($ret != 0) { print "code[$ret]\n"; } sleep(0.1); }
testprint.pl
#!/usr/bin/perl use strict; use warnings; use POSIX 'strftime'; my $time = strftime( "%Y-%m-%d %H:%M:%S" , localtime ); print "$time\n";
はてなブックマークよりタグを取得
#Userdata.pm package Userdata; use strict; use warnings; use XML::FeedPP; use XML::Simple; use Array::Uniq; #http://b.hatena.ne.jp/'.$userid.'/atomfeed?tag='.$tag.'&of=0'; 特定のタグの数を取得 sub allnum { my @arry = @_; my $arrynum = @arry; my $userid = $arry[0]; my $source; my $num; if ($arrynum == 2){ my $tag = $arry[1]; $source = 'http://b.hatena.ne.jp/'.$userid.'/atomfeed?tag='.$tag.'&of=0'; my $feed = XML::FeedPP->new( $source ); if($feed->title() =~ /\s\([0-9]+\)$/){ my $str = "$&"; if($str =~ /[0-9]+/){ $num = $&; } } }else{ $source = "http://b.hatena.ne.jp/".$userid."/rss"; my $feed = XML::FeedPP->new( $source ); $num = $feed->get('opensearch:totalResults'); } return $num; } #最新のブックマークについたタグを10個取得 sub getmaintag { my (@user) = @_; my @tags = (""); my $allnum = allnum(@user); my $userid = $user[0]; for (my $i=0;$i < $allnum;$i = $i+20){ print $i,"\n"; #tagを取得 my $source = 'http://b.hatena.ne.jp/'.$userid.'/atomfeed?of='.$i; my $feed = XML::FeedPP->new( $source ); foreach my $item ( $feed->get_item() ) { my @feedtags = $item->get("dc:subject"); foreach my $tag (@feedtags){ if(defined($tag)){ @tags = uniq sort {"\L$a" cmp "\L$b"} @tags; #重複削除 my $tagsnum = @tags; my $cut = 0; for (my $i = 0;$i<$tagsnum;$i++){ if(lc($tags[$i]) eq lc($tag)){ $i = $tagsnum; $cut = 1; } } if (lc($tag) ne lc($tags[$#tags]) && $cut !=1){ push(@tags,$tag); } } if($#tags >= 10){ #10個タグを取得したら,終わり $i = $allnum; } } } } return @tags; } #ブックマークのタグをすべて取得 sub getalltag { my (@user) = @_; my @tags = (""); my $allnum = allnum(@user); my $userid = $user[0]; for (my $i=0;$i < $allnum;$i = $i+20){ print $i,"\n"; #tagを取得 my $source = 'http://b.hatena.ne.jp/'.$userid.'/atomfeed?of='.$i; my $feed = XML::FeedPP->new( $source ); foreach my $item ( $feed->get_item() ) { my @feedtags = $item->get("dc:subject"); foreach my $tag (@feedtags){ if(defined($tag)){ @tags = uniq sort {"\L$a" cmp "\L$b"} @tags; #重複削除 my $tagsnum = @tags; my $cut = 0; for (my $i = 0;$i<$tagsnum;$i++){ if(lc($tags[$i]) eq lc($tag)){ $i = $tagsnum; $cut = 1; } } if (lc($tag) ne lc($tags[$#tags]) && $cut !=1){ push(@tags,$tag); } } } } } return @tags; } 1;
okok.
はてなブックマークの総ブックマーク数
http://b.hatena.ne.jp/infinity_th4/atomfeedには,総ブックマーク数が,ないようである.
http://b.hatena.ne.jp/infinity_th4/rssの
以下のようにすれば取得できる.
#!/usr/bin/perl use strict; use warnings; use XML::FeedPP; sub allbookmarknum { my ($url) = @_; my $feed = XML::FeedPP->new( $url ); return $feed->get("opensearch:totalResults"); } my $url = "http://b.hatena.ne.jp/infinity_th4/rss"; allbookmarknum($url); #4680
tex 環境の設定+emacsで野鳥(やてふ)の設定+Mozcでime-tex辞書の導入
1. Tex環境
sudo apt-add-repository ppa:texlive-backports/ppa sudo apt-get update sudo apt-get upgrade sudo apt-get install texlive sudo apt-get install texlive-lang-cjk
2. emacs で野鳥(やてふ)を使う。
cd .emacs.d wget http://www.yatex.org/yatex1.77.tar.gz tar zxvf yatex1.77.tar.gz emacs init.el
.emacs.d/init.el
;; yatex1.77 (setq load-path (cons "~/.emacs.d/yatex1.77" load-path)) (autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t) ;; YaTeX-mode (setq auto-mode-alist (cons (cons "\\.tex$" 'yatex-mode) auto-mode-alist)) (setq dvi2-command "xdvi" tex-command "platex" dviprint-command-format "dvips %s | lpr" YaTeX-kanji-code 3) ;; YaHtml-mode (setq auto-mode-alist (cons (cons "\\.html$" 'yahtml-mode) auto-mode-alist)) (autoload 'yahtml-mode "yahtml" "Yet Another HTML mode" t) (setq yahtml-www-browser "netscape") ;; http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?YaTeX#j78164d5 ;;; nil=YaTeX-kanji-code が nil なら coding-system に感知しない ;;; 0=no-converion -> Emacs内部で使用されている文字コード (Emacs23ではutf-8-emacs) ;;; 1=Shift JIS (Shift_JIS) ;;; 2=JIS (ISO-2022-JP) ;;; 3=EUC (EUC-JP) ;;; 4=UTF-8 (setq YaTeX-kanji-code 4)
を追加。
M-x byte-compile-file でコンパイルする。
emacs sample.texを開いた時に、emacs のモードのところに、以下のように「やてふ」と出れば、適用されています。
注意:
emacs -nw で開くときに,もし,システムが英語なら,
File mode specification error: (args-out-of-range "giveup!" 56639 56643)
と表示されて,yatexが起動しません.ご注意を.これにはまってしまいました.
-UUE:----F1 sample.tex All L1 (やてふ Fill)
\documentclass{jarticle} \begin{document} Hello, World! こんにちは世界。 $$a^2+b^2=c^2$$ \end{document}
と書いて、C-c C-t dでコンパイルできます。
また、C-c C-t pでプレビューできる。
コンパイルしたとしても、日本語が文字化けしている場合があります。
もし、あなたが、windowsで編集していたファイルが、SJISなどになっていたなら、utf8に変更しておきましょう。なぜなら、.emacs.d/init.elで(setq YaTeX-kanji-code 4)としましたから。
-j JISコードに変換する -e EUCコードに変換する -s SJISコードに変換する -w UTF8コードに変換する
$ nkf -w --overwrite sample.tex #nkf -w sample.tex > sample_utf-8.txtでsample.texを残してsample_utf-8.txtに書き出せる。 $ nkf -g sample.tex UTF-8
(nkf がなかったらsudo apt-get install nkf で入れましょう)
emacs でC-c C-c dでコンパイルして確認しましょう。
また、以下の方法でも、コンパイルできます。
platex --kanji=utf8 sample.tex #compile xdvi sample.dvi #preview dvips -Ppdf sample.dvi #convert ps ps2pdf sample.ps #convert pdf
3. Mozcをインストールする。
sudo apt-get install ibus-mozc
終わったら、コンピュータを再起動し、Dashホームからibusと入力し、「インプット・キーボードメソッド」をクリックし、
インプットメソッド>日本語>Mozcを選択し、追加する。
Mozcを一番上にしましょう。
以下のように。
ime-texの辞書とは、id:infinity_th4がtexの入力を支援するために作った辞書です。
約450程度の単語が登録されており、Mozcを使っているときに、例えば「しき」と入力すれば、「$ $」が候補に上がります。「あるふぁ」は「\alpha」や「わ」は「\sum_{}^{}」や「\sum_{i=1}^{n}」や「へんびぶん」は「\partial」,「ぃm」は「\lim_{\rightarrow } 」や「\lim_{n\rightarrow \infty} 」などが登録されています。
詳しくは、辞書の中身をご覧ください。
以下が、例。
または、
ime-tex-v1.5.xls
でご確認ください。
それでは、辞書を設定しましょう。
ime-tex-v1.5.txt
が辞書です。ダウンロードしてください。
ユーザー辞書>ユーザ辞書の編集
Mozc辞書ツールが開いたら、管理>新規辞書にインポートから、辞書をダウンロードした辞書を選択し、以下のように、設定しインポートしましょう。
これで、Mozc使用時に、texの支援のための単語が登録されました。
お疲れ様でした。
参考:
Linux - Ubuntu 12.04でLaTeX環境を構築する - Qiita [キータ]YaTeXのインストールの仕方Yet Another LaTeX mode for Emacs.ÌîÄ»¡ÊYaTeX¡Ë [ʪÍý¤Î¤«¤®¤·¤Ã¤Ý]文字コード変換コマンドnkfの使い方まとめ LinuxYaTeX - TeX Wiki
リモートデスクトップ
どちらも12.04のとき。
接続される側でDashホームで、「デスクトップの共有」を起動する。
(ウィンドウがMac的な感じだが)
というように設定しておく。
vncserverを入れておく
接続される側のアドレスをifconfigで調べておく。
inetアドレスと書いてあるところ。
(vmnetとかは多分違う)
$ vncviewer
として
のVNCServerの部分にサーバ側のアドレスを入れる。
パスワードは、デスクトップの共有で指定したパスワード。
これで、サーバ側で許可すれば、画面に現れる。
MacからUbuntuへ
Macのシステム環境設定>共有>画面共有にチェックを入れる。
Finderの左のメニューの共有から、接続したいPCを選択し、画面を共有をクリックし、
Ubuntuのデスクトップの共有で設定したパスワードを入力し、接続すればリモートデスクトップが起動する。
Ubuntu でログイン出来なくなったときの解決法
今日というか昨日の夜、院生室で作業をしようと思って、いつも通りUbuntuを起動しようと思ったが、パスワードを入力したら、一瞬(肉眼では確認できないくらい)、文字列
ナンチャラカンチャラ〜 ...... checking battery state ...
が表示されて、ログイン画面に戻ってしまった。何度やっても同じだった。
解決方法として、ログイン画面で、Ctrl+Alt+F1を押して、CUI上で
username login $
ユーザ名を入れてログインする。
/home/username/にある.Xauthorityを
$ sudo rm .Xauthority
で削除して、
$ sudo shutdown -r now
で再起動する。
GUIのログイン画面で、パスワードを入れれば、ログインできた。
なんてことはなかったですね。
独立成分分析について
- 作者: アーポビバリネン,エルキオヤ,ユハカルーネン,Aapo Hyv¨arinen,Erkki Oja,Juha Karhunen,根本幾,川勝真喜
- 出版社/メーカー: 東京電機大学出版局
- 発売日: 2005/02
- メディア: 単行本
- 購入: 1人 クリック: 16回
- この商品を含むブログ (3件) を見る
- 作者: 村田昇
- 出版社/メーカー: 東京電機大学出版局
- 発売日: 2004/07
- メディア: 単行本
- クリック: 4回
- この商品を含むブログ (3件) を見る
特にFastICAについて。FastICAは、独立成分分析の中のアルゴリズムでは最も優れている(らしい)。収束性や誤差の意味で。確かに勾配法だと、洒落にならないくらい計算時間がかかるし、かなりの誤差が多々ある。
- 独立成分分析は何ができるか?
混合されているデータの分類または復元です。
例えば、音声はだいたい以下のの画像の上部の2つのような分布になります。
今はシュミレーションのため、優ガウス分布のラプラス分布を上部に、下部に一様分布を書きました。(源信号とする)
これら4つの信号を混合したデータから、源信号を復元したいと思います。
つまり、源信号(人の話し声)が、混ざり合った状態からそれぞれの声に分類するということになります。
モデルは、
になります。
(p:次元数,n:標本数)
Xが観測データだと考えることになります。
Xの情報から、未知のAとSを見つける必要があります。
Xは、Sの混合なので、元の非ガウス分布よりもガウス分布に近づいています。(中心極限定理より)
独立成分分析は、ガウス分布をより非ガウス分布に近づけることで、源信号の復元を可能にしています。
その際、非ガウス性の尺度として、尖度やネゲントロピーを用います。ちなみに、尖度は外れ値に関して頑健でないので、ネゲントロピーを使いましょう。
また、前処理として白色化(無相関化)をすることで、より独立な状態に近づけています。
白色化については、以下参照。
白色化 - 機械学習の「朱鷺の杜Wiki」
実際、以下のコードによって復元したデータのヒストグラムを書いてみると、以下のようになります。
すばらしいですね。
実際の音声データでは、時間相関がある場合があり、その点を考慮しなければなりません。
mathematicaで書いていたが、データセットの扱いで問題があったので、新たにRで書きなおしました。
スター下さい。
#複数の独立成分を推定するfastICA library(splus2R); library(VGAM); source("signaldata.R"); source("fastICA_func.R"); n=10000 #標本数 p=4 #独立成分の数 S1<-signaldata("laplace",2,n) #row:2,col:n S2<-signaldata("unif",2,n) #row:2,col:n S<-rbind(S1,S2) #row:4,col:n plot(S[1,],type="l") hist(S[1,],breaks="Scott",freq = FALSE) lines(density(S[1,]), col = "orange", lwd = 2) rug(S[1,]) #混合行列の作成 A<-matrix(runif(p^2,-sqrt(3),sqrt(3)),p) A<-t(A) dim(A) #観測データXの作成 X=A%*%S #p,n dim(X) X<-X-apply(t(X),2,mean) # plot(X[1,],type="l") hist(X[1,],breaks="Scott",freq = FALSE) lines(density(X[1,]), col = "orange", lwd = 2) rug(X[1,]) X<-t(X) ################### m=4 #独立成分の数 result<-fastICAmult(X,m) V<-result$V dim(V) W<-result$W W Z<-result$Z t(W)%*%V%*%A #順序行列になれば成功 restoredsignal<-result$restoredsignal par(mfrow=c(2,2)) for(i in 1:4){ hist(restoredsignal[i,],breaks="Scott",freq = FALSE) lines(density(restoredsignal[i,]), col = "orange", lwd = 2) rug(restoredsignal[i,]) }
signaldata.R
library(VGAM); signaldata <-function(func,p,n){ S<-matrix(0,p,n); #n*p i=1; while(i<=p){ if(func == "unif"){ u<-runif(n,-sqrt(3),sqrt(3)); }else if(func == "laplace"){ u<-rlaplace(n, location=0, scale=1); }else if(func == "norm"){ u<-rnorm(n); } S[i,]<-u; i<-i+1; } return(S); }
fastICA_func.R
fastICAmult<-function(X,m,W=signaldata("unif",m,m),maxcnt=10000,epsilon=0.0001){ if(dim(X)[2]>dim(X)[1]){ #行:signal,列:標本 X<-t(X); } V<-svd(var(X))$u%*%diag(1/sqrt(svd(var(X))$d))%*%t(svd(var(X))$u); Z<-V%*%t(X); #whitening #Z=V%*%X #ok #W <- matrix(scan("W_init01.txt"), nrow=m) #ok W<-t(W) #ノルム1にする for(i in 1:m){ W[,i]<-W[,i]/vecnorm(W[,i]) } i=1; while(i<=m){ cat("Independent Component:",i,"\n"); cnt=0; while(cnt<maxcnt){ #cat("cnt:",cnt,"\n") #5. wbefore<-W[,i] W[,i]<-apply(t(t(Z)*tanh(t(W[,i])%*%Z)[1,]),1,mean)-mean(1-(tanh(t(W[,i])%*%Z)[1,])^2)*W[,i]; #6.グラムシュミットの直交化 if(2<=i){ Sum=0; for(j in 1:(i-1)){ Sum<-Sum+(t(W[,i])%*%W[,j])*W[,j]; } W[,i]<-W[,i]-Sum; #2<=i } #7.収束したか? W[,i]<-W[,i]/vecnorm(W[,i]); #cat("W[,i]:",W[,i],"\n\n") if(1-epsilon<=abs(t(wbefore)%*%W[,i]) && abs(t(wbefore)%*%W[,i])<=1+epsilon){ cat("cnt:",cnt,"\n"); cat("W[,i]:",W[,i],"\n\n"); i<-i+1; cnt=maxcnt; } cnt=cnt+1; } } return(list(V=V,W=W,Z=Z,restoredsignal=as.matrix(t(W)%*%Z[,1:n]))) }
Reminder Beta版を開始しました。
Reminderは、(http://reminder.asia)
ブックマークをしておいても、結局読まないという問題を解決するために作られたサービスです。
はてなブックマークで「あとで読む」タグをつけたブックマークが溜まっていませんか?
そんな、あなたにReminderはブックマークを読む最適なツールとなるでしょう!
あなたの好きな時間に、ブックマークをお知らせします。
今後、メモを保存しておくと、好きな時間にお知らせするサービスを提供する予定です。
バグや改善点がまだありますが、宜しくお願いいたします。
フィードバック等は、reminder.asia@gmail.comへお願いします。
もしくは、このブログのコメント欄にお書きください。
XML::Parserが入らないとき。
XML::Parserが入らないとき。
ログは、Expat.xs:12:19: error: expat.h: No such file or directory。
sudo apt-get install libexpat1-dev
で入る。
$useridのブックマークのタグを取得。
#!/usr/bin/perl use strict; use warnings; use HatenaBookmark::Number; #my director use XML::FeedPP; use Data::Dumper; use Array::Uniq; my $userid = "infinity_th4"; my @user = ($userid); sub gettag { my (@user) = @_; my @tags = (); my $allnum = HatenaBookmark::Number::allnum(@user); #ユーザーのすべてのブックマーク数 for (my $i=0;$i < $allnum;$i = $i+20){ #tagを取得 #? my $source = 'http://b.hatena.ne.jp/'.$userid.'/atomfeed?of='.$i; my $feed = XML::FeedPP->new( $source ); foreach my $item ( $feed->get_item() ) { my @feedtags = $item->get("dc:subject"); foreach my $tag (@feedtags){ if(defined($tag)){ push(@tags,$tag); } } @tags = uniq sort {"\L$a" cmp "\L$b"} @tags; #重複削除 } } return @tags; } #Get tag of $userid. print Dumper gettag(@user);
これでは、http://b.hatena.ne.jp/infinity_th4/にあるタグの数に一致しない。
なぜなら、atomfeedでは、
例えば、Mysqlとmysqlを区別している。
しかし、http://b.hatena.ne.jp/infinity_th4/では、Mysqlとmysqlを同一視している。
lc()をつかって同一視をなくす。
$useridのブックマーク数を取得。
$source = "http://b.hatena.ne.jp/".$userid."/rss"; my $feed = XML::FeedPP->new( $source ); $num = $feed->get('opensearch:totalResults');
それでも僕は、花粉症だと信じていなかった
僕は、1年前、花粉症(杉)だと診断されたが、それを信じていなかった。
なぜなら、ほぼ高校3年から365日鼻水が止まらない。
1日何度か波のようなものがあり、鼻がつーんをすると、それが合図。
鼻炎だと思う。
そして最近になって目がとてもかゆくなった(ここ3日くらい前)。
今まではこんなことはなかったので、やはり花粉症だと思う。
鼻炎と花粉症の合わせ技かな?
screen
screen を使って、sshを切っても処理を実行させたいので、
$ screen $ script/myapp_server.pl -r
という感じにする。
僕の場合は、script/myapp_server.pl以外に別の.plを走らせる必要があるので、
新しくCtrl+Shift+tとして、ssh接続し、
$ screen $ sample.pl
などとする。
まだよくわかってないが、
script/myapp_server.plを走らせたくなくなったら、どうするか?
複数走らせていて$screen -r ってすると以下のように出る。
$ screen -r There are several suitable screens on: 41412.pts-0.dti-vps-srv81 (2013年02月28日 07時33分57秒) (Detached) 42312.pts-3.dti-vps-srv81 (2013年02月28日 07時21分36秒) (Detached) 11432.pts-7.dti-vps-srv81 (2013年02月28日 07時20分56秒) (Attached) 58233.pts-0.dti-vps-srv81 (2013年02月28日 07時14分54秒) (Attached) Type "screen [-d] -r [pid.]tty.host" to resume one of them.
てな感じででてくるので、Detachedのやつの例えば、
$ screen -r 41412.pts-0.dti-vps-srv81
ってやるとさっき走らせたやつが開ける。