googleのweb履歴をダウンロードするperl スクリプトを発見した.
https://gist.github.com/2283935/a9bde2f42942178c735988e5da0c249f5548cbd0
でもパスワード直書きは怖いので,標準入力にしたバージョンを書いてみた
https://gist.github.com/2283935
2012/04/02
2012/03/27
perlでFFT
モジュールを使えば簡単
use Math::FFT;
my $PI = 3.1415926539;
my $N = 64;
my $in;
#set data
for (my $k=0; $k<$N; $k++) {
$in->[$k] = cos(2*$PI*$k/$N)+ sin(3*$PI*$k/$N);
}
#fft
my $fft = new Math::FFT($in);
my $coeff = $fft->rdft();
my $spectrum = $fft->spctrm;
my $original_data = $fft->invrdft($coeff);
#input data and inverse-fft
open FH, ">data.d";
for (my $k=0; $k<$N; $k++) {
$tmp1=0;
$tmp2=0;
for (my $j=1; $j<$N/2; $j++) {
$tmp1+=$coeff->[2*$j]*cos(2*$PI*$j*$k/$N);
$tmp2+=$coeff->[2*$j+1]*sin(2*$PI*$j*$k/$N);
}
$tmp=(($coeff->[0] +$coeff->[$N/2]*cos($PI*$k))/2 +$tmp1 +$tmp2)*2/$N;
print FH "$k\t $in->[$k] \t$tmp \t $original_data->[$k]\n";
}
close FH;
#coefficient
open FH, ">coeff.d";
for (my $k=1; $k<$N/2; $k++) {
print FH "$k\t $coeff->[2*$k] \t$coeff->[2*$k+1]\n";
}
close FH;
#power spectrum
open FH, ">spct.d";
for (my $k=1; $k<$N/4; $k++) {
my $tmp=($coeff->[2*$k]*$coeff->[2*$k]+ $coeff->[2*$k+1]*$coeff->[2*$k+1])/$N/$N*2;
print FH "$k\t $spectrum->[$k] \t$tmp\n";
}
close FH;
3/28追記
上記では,直流成分の係数は表示していないので注意
use Math::FFT;
my $PI = 3.1415926539;
my $N = 64;
my $in;
#set data
for (my $k=0; $k<$N; $k++) {
$in->[$k] = cos(2*$PI*$k/$N)+ sin(3*$PI*$k/$N);
}
#fft
my $fft = new Math::FFT($in);
my $coeff = $fft->rdft();
my $spectrum = $fft->spctrm;
my $original_data = $fft->invrdft($coeff);
#input data and inverse-fft
open FH, ">data.d";
for (my $k=0; $k<$N; $k++) {
$tmp1=0;
$tmp2=0;
for (my $j=1; $j<$N/2; $j++) {
$tmp1+=$coeff->[2*$j]*cos(2*$PI*$j*$k/$N);
$tmp2+=$coeff->[2*$j+1]*sin(2*$PI*$j*$k/$N);
}
$tmp=(($coeff->[0] +$coeff->[$N/2]*cos($PI*$k))/2 +$tmp1 +$tmp2)*2/$N;
print FH "$k\t $in->[$k] \t$tmp \t $original_data->[$k]\n";
}
close FH;
#coefficient
open FH, ">coeff.d";
for (my $k=1; $k<$N/2; $k++) {
print FH "$k\t $coeff->[2*$k] \t$coeff->[2*$k+1]\n";
}
close FH;
#power spectrum
open FH, ">spct.d";
for (my $k=1; $k<$N/4; $k++) {
my $tmp=($coeff->[2*$k]*$coeff->[2*$k]+ $coeff->[2*$k+1]*$coeff->[2*$k+1])/$N/$N*2;
print FH "$k\t $spectrum->[$k] \t$tmp\n";
}
close FH;
3/28追記
上記では,直流成分の係数は表示していないので注意
2012/03/23
UPSの状態をRS232で知りたい
UPSのデータシートによると, RS232ポートのあるピンの電圧をみると,電源駆動か電池駆動かが分かるそうな.
テスターを挿して測ってみると,確かにLowとHighになる.
実際にこのピンに掛かる電圧を監視すればいいことがわかった.
でもRS232は通信用のポートらしく,特定のピンの電圧を測るようなことは出来ないっぽい.
きっちり理解して,ドライバを書く時間もないしな.
また,調べてみるとapcupsdというプログラムで監視ができるみたい.
でもシリアルポートの認識ができない.
クロスとかストレートとかのケーブルの問題なのかな.
しばらくpendingだ.
参考
http://www.itmedia.co.jp/help/howto/linux/ups/
http://h2np.net/tips/fwf10.html
http://archive.linux.or.jp/JF/JFdocs/Serial-HOWTO-16.html
http://linuxjf.sourceforge.jp/JFdocs/Serial-HOWTO-8.html
テスターを挿して測ってみると,確かにLowとHighになる.
実際にこのピンに掛かる電圧を監視すればいいことがわかった.
でもRS232は通信用のポートらしく,特定のピンの電圧を測るようなことは出来ないっぽい.
きっちり理解して,ドライバを書く時間もないしな.
また,調べてみるとapcupsdというプログラムで監視ができるみたい.
でもシリアルポートの認識ができない.
クロスとかストレートとかのケーブルの問題なのかな.
しばらくpendingだ.
参考
http://www.itmedia.co.jp/help/howto/linux/ups/
http://h2np.net/tips/fwf10.html
http://archive.linux.or.jp/JF/JFdocs/Serial-HOWTO-16.html
http://linuxjf.sourceforge.jp/JFdocs/Serial-HOWTO-8.html
2012/02/14
javaの文字コード指定について
javaなのにshift_jisで書かれたコードなんて...
それでも,ターミナルはUTF-8で固定しておきたいので,
コンパイルと実行時に以下のようにすれば,強制的にutf8に出来る.
javac -J-Dfile.encoding=UTF-8
java -Dfile.encoding=UTF-8
それでも,ターミナルはUTF-8で固定しておきたいので,
コンパイルと実行時に以下のようにすれば,強制的にutf8に出来る.
javac -J-Dfile.encoding=UTF-8
java -Dfile.encoding=UTF-8
2012/01/29
Net::Twitter 3.18001 におけるmentionの扱い
Net::Twitterのバージョンをあげたら,
現行のバージョンでは,以下のようにする
なんでだろ?
参考
http://search.cpan.org/dist/Net-Twitter/lib/Net/Twitter.pod
$twit->search({q => "to:$username",since_id => $sinceId})
が使えなくなっていた.現行のバージョンでは,以下のようにする
my $ms=$twit->;mentions({ since_id => $sinceID, count =>10 });
for my $res ( @$ms ) {
my $text = Encode::encode('utf8', $res->{'text'});
print "$text \n";
}
引数は無くても動くらしいが,指定しないと動かなかった.for my $res ( @$ms ) {
my $text = Encode::encode('utf8', $res->{'text'});
print "$text \n";
}
なんでだろ?
参考
http://search.cpan.org/dist/Net-Twitter/lib/Net/Twitter.pod
2012/01/06
google製 bugspotsを使ってみる
gitのリポジトリからバグが含まれるファイルを予測するbugspotsを使ってみた.
OSXへのインストールは
> sudo gem install bugspots
でオッケ.でもって
> git bugspots git-repo
で結果がでる.
ファイル更新の日時と回数をフェルミ分布みたいな評価関数で評価して,
どのファイルにバグが含まれるかを予測するらしい.
http://www.publickey1.jp/blog/11/post_193.html
近日中に更新が多いファイルにはバグが含まれるだろうという静的な解析.
ファイルサイズとかは影響しないんだろうか.
個人開発な規模のリポジトリでは,使い道がわからんなぁ.
OSXへのインストールは
> sudo gem install bugspots
でオッケ.でもって
> git bugspots git-repo
で結果がでる.
ファイル更新の日時と回数をフェルミ分布みたいな評価関数で評価して,
どのファイルにバグが含まれるかを予測するらしい.
http://www.publickey1.jp/blog/11/post_193.html
近日中に更新が多いファイルにはバグが含まれるだろうという静的な解析.
ファイルサイズとかは影響しないんだろうか.
個人開発な規模のリポジトリでは,使い道がわからんなぁ.
2011/11/25
Javaの拡張構文
使うことは無いと思うけど,読むことはあるであろう構文について.
Javaでは以下のように,後にピリオドを3つつけた引数の宣言が可能.
この場合
イチイチ配列に格納し直す手間が省けるという意味.
この書き方には,一つのメソッドに一つ,しかも最後の引数のみという制約がある.
考えたら当たり前な制約.
んで,
foreachみたいなもん.こちらは使えそうだ.
Javaでは以下のように,後にピリオドを3つつけた引数の宣言が可能.
void method(String... str) {
for (String s : str){
System.out.println(s);
}
}
この場合
this.method("aaa", "bbb", "ccc");
や
this.method("aaa");
などと,任意の変数の個数を引数として,メソッドを呼び出すことが可能.イチイチ配列に格納し直す手間が省けるという意味.
この書き方には,一つのメソッドに一つ,しかも最後の引数のみという制約がある.
考えたら当たり前な制約.
んで,
for (String s : str)は,配列を1つずつ取り出して,sに入れるという意味.
foreachみたいなもん.こちらは使えそうだ.
2011/11/10
JNIを使ってみる
> javac JNITest.java
> javah -jni -o JNITest.h JNITest
> javac JNITest
> gcc -fPIC -g -c -I/System/Library/Frameworks/JavaVM.framework/Headers HelloJniWorldImpl.c
> gcc -shared -o libHelloJniWorldImpl.jnilib HelloJniWorldImpl.o
そして
> java -Djava.library.path=. -cp . HelloJniWorld
で実行されるはず.
linuxの場合は
> gcc -fPIC -g -c -I/java/header HelloJniWorldImpl.c
> gcc -shared -o libHelloJniWorldImpl.so libHelloJniWorldImpl.o
> javah -jni -o JNITest.h JNITest
> javac JNITest
> gcc -fPIC -g -c -I/System/Library/Frameworks/JavaVM.framework/Headers HelloJniWorldImpl.c
> gcc -shared -o libHelloJniWorldImpl.jnilib HelloJniWorldImpl.o
そして
> java -Djava.library.path=. -cp . HelloJniWorld
で実行されるはず.
linuxの場合は
> gcc -fPIC -g -c -I/java/header HelloJniWorldImpl.c
> gcc -shared -o libHelloJniWorldImpl.so libHelloJniWorldImpl.o
2011/10/17
Fedora15でネットワークデバイスの名前をeth*に変える方法
/etc/grub.conf
に
/etc/udev/rules.d/70-persistent-net.rules
として
でも,現時点でPGIコンパイラのFLEXLMはFedora15に対応していないので,
こんな小手先の調整をしても無駄.
これで1週間くらい無駄にした.
に
biosdevname=0
を追加.そして/etc/udev/rules.d/70-persistent-net.rules
として
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="MAC_ADDR", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
を保存して,再起動すればいい.でも,現時点でPGIコンパイラのFLEXLMはFedora15に対応していないので,
こんな小手先の調整をしても無駄.
これで1週間くらい無駄にした.
2011/10/16
yumでdropboxを入れる
/etc/yum.repos.d/dropbox.repo
として
を作成.そして
として
[Dropbox] name=Dropbox Repository baseurl=http://linux.dropbox.com/fedora/$releasever/ gpgkey=http://linux.dropbox.com/fedora/rpm-public-key.asc
を作成.そして
$yum install nautilus-dropbox
でOK
2011/10/11
perlのGetOpt::Longでクオートの扱い
GetOpt::Long を利用して
./mail.pl -subject 'test mail' fugafuga
などといった,クオートで囲ったコマンドラインオプションを扱う場合は
GetOptions ("subject=s" => \@sub);
のように,引数の型はsだが,格納する変数を配列にすれば良い.
2011/10/10
linuxでUSBRHで温度を測る
先日,計算機室のクーラーが停止して室温が50度くらいまで上がって,マシンが熱暴走した.その為,室温を計測して緊急メールを出すというシステムを作る必要があった.
それで,PCに接続可能な温度計があればなぁと思っていたら,見つけた!
USBRH (http://strawberry-linux.com/catalog/items?code=52002) という温度計はUSBでPCに接続して温度と湿度を得ることができる.
付属のライブラリとソフトウエアはウインドウズ用だけど,libusbがあればlinuxでも使用可能.
linuxで使うには,yumでlibusb-develを入れて,http://www.dd.iij4u.or.jp/~briareos/soft/usbrh.html にある usbrh-0.05.tar.gz をダウンロード&解凍&makeすれば使える.
ただし,230行目あたりの
if((rc = usb_set_configuration(dh, dev->config->bConfigurationValue))<0){
を
if( rc = usb_detach_kernel_driver_np(dh, dev->config->interface->altsetting->bInterfaceNumber)<0 ){
に変更しなければならない.
ちなみに,usbrh-0.05はアプリケーションで,ドライババージョンの usbrh-0.08 (http://green-rabbit.sakura.ne.jp/usbrh/)もあるけど,ドライバ関係は苦手だし,後輩君たちも分からないと思うので,アプリバージョンを選択した.
さらに問題があって,あるマシンでusbrhを実行すると,
Temperature: -40.00 C Humidity: -4.25 %
となり,温度が正しく表示されない.
この-40.00と-4.25という値は初期値で,温度を取得できていないことを意味している.
ソースをみてみると,usbrh_main.c の
usb_bulk_read(dh, 1, buff, 7, 5000);
の呼び出しは成功を示す返り値が返ってきているのだが,buffに値が入っていない...
google先生に聞いてみると,ちらほらそういう事例があるようで,例えばhttp://d.hatena.ne.jp/oxon/20101205/1291499466
では,二回に一回読取が出来ないらしい.
うちの環境では,読取が出来ないマシンでは,一切読み取れないけれど.
この問題は,恐らくOSが原因で,ドライバの読み込まれる順序が悪いんじゃないかなと思っている.
ひとまず,正常に計測できるマシンに2つのUSBRHをさして,
cronで
usbrh -f1 > log1
usbrh -f2 > log2
を実行させている.
そしてtwitter botで最新の温度を読み取って,昼間の時間体だけ室温をつぶやかせて,
設定した閾値を超えたらスタッフにメールするようにした.
2011/09/30
TimeCapsuleの設定
大学ではTimeCapsuleを使っているのだが,無線LAN基地局としての機能は停止せよとのお達しがあったので,その設定について記しておく.
AirMacユーティリティを起動して,
AirMacの項目で,ワイヤレスのモードを切にする
これだけ.
インターネットの項目の接続共有は有線に関する設定らしいので,
切(ブリッジモード)でも,有線接続しなければブリッジングもしないとのこと.
基盤センターの人が言っていたので,問題ない(ハズ).
AirMacユーティリティを起動して,
AirMacの項目で,ワイヤレスのモードを切にする
これだけ.
インターネットの項目の接続共有は有線に関する設定らしいので,
切(ブリッジモード)でも,有線接続しなければブリッジングもしないとのこと.
基盤センターの人が言っていたので,問題ない(ハズ).
2011/09/29
jnlpで配布するjarに署名を与える
まず署名を作る.
keytool -genkey -keystore hogehoge -alias fugafuga
いろいろ聞かれるが,適当に答えるべし.
署名をjarに当てる
jarsigner -keystore hogehoge Hoge.jar fugafuga デフォルトだと,6ヶ月しか有効ではないようだ.
2011/09/15
Dialogにデフォルト値を入れる JFileChooser
仮想的なFileを引数に与えれば良い.
つまり
などとすればよい.
デフォルトのファイルは存在していなくても可.
フルパスしていだと挙動があやしくなることもあるそうだ.
つまり
chooser.setSelectedFile(new File("default.txt"));
chooser.showSaveDialog( null );
chooser.showSaveDialog( null );
などとすればよい.
デフォルトのファイルは存在していなくても可.
フルパスしていだと挙動があやしくなることもあるそうだ.
2011/09/11
yumでffmpegを入れる.Fedora15
http://aruneko.f-space.org/archives/1295
にあるように,
にあるように,
yum localinstall --nogpgcheck
http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm
http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpmでリポジトリを追加すれば,yum install ffmpegでインストール可能
2011/08/25
Java: クラスパスの動的追加
追加したいクラスファイルを引数に以下の関数を呼べば良い.
プラグイン形式で機能拡張する場合は必須と思われる.
プラグイン形式で機能拡張する場合は必須と思われる.
void addClassPath(File classPath){
try{
URLClassLoader classLoader=(URLClassLoader)ClassLoader.getSystemClassLoader();
try{
URLClassLoader classLoader=(URLClassLoader)ClassLoader.getSystemClassLoader();
Class classClassLoader = URLClassLoader.class;
Method methodAddUrl =
classClassLoader. getDeclaredMethod("addURL", URL.class);
methodAddUrl.setAccessible( true);
methodAddUrl.invoke( classLoader, classPath.toURI().toURL());
System.out.println("added "+classPath);
}catch(Exception e){
e.printStackTrace();
}
}
Method methodAddUrl =
classClassLoader.
methodAddUrl.setAccessible(
methodAddUrl.invoke(
System.out.println("added "+classPath);
}catch(Exception e){
e.printStackTrace();
}
}
プラグイン形式で機能拡張できるJavaアプリの作り方
http://oshiete.goo.ne.jp/qa/1947916.html
を参考に,動的にクラスファイルを読み込むだけ.
インターフェースにはこんな使い方もあるのかと,目からウロコ.
質問のページには,たまに珠玉の回答があるから,読まざるをえない.
を参考に,動的にクラスファイルを読み込むだけ.
インターフェースにはこんな使い方もあるのかと,目からウロコ.
質問のページには,たまに珠玉の回答があるから,読まざるをえない.
2011/08/24
gitとかでパスワードを保存させておく方法
主にgoogle codeで使う. ~/.netrcに machine SERVER
login NAME
password PASSWORDを記述する.パーミッションに注意しないと,盗み見られるので注意!!
登録:
投稿 (Atom)