タグ:IT ( 110 ) タグの人気記事
あらゆるファイルをFASTA化する
 「どう書く?org」で進数の変換をごにょごにょやってみて、もう少し色々いじってみたくなったので、職場の先輩が作ってたジョーク(?)ソフトを Perl で再実装してみました。

 引数でファイルを指定してやると、ファイルの内容に従って、FASTAファイルを作成します。ファイルを読み込んだ後、10進->2進->4進(ヌクレオチド)という変換をしてます。Math-BaseCalcを使えば、ファイルの内容を直接4進数に変換できて楽そうだったんだけど、元の趣旨からはずれるので使ってません。

all_convert_to_fasta.pl

use strict;
use warnings;

my %dna = (
'00' => 'A',
'01' => 'C',
'10' => 'G',
'11' => 'T',
);

sub dec2bin {
unpack( "B8", pack( "C", $_[0] ) );
}

sub string2decs {
unpack( "C*", $_[0] );
}

sub print_fasta {
my ( $title, $seq ) = @_;
local $\ = "\n";
open my $fh, '>', "$title.fasta" or die $!;
print $fh ">$title";
while ( $seq =~ /([ACGT]{1,80})/go ) {
print $fh $1;
}
close $fh;
}

my $file = shift or die "usege: $0 path/to/your/file\n";
open my $fh, '<', $file or die "$!: $file\n";
my $data = do { local( $/ ) ; <$fh> } ;
close $fh;

my $bin = join '', map { dec2bin $_ } string2decs($data);
my @bin_list = split '', $bin;

my $result = '';
while ( my $nuc = join '', splice( @bin_list, 0, 2 ) ) {
$result .= $dna{$nuc};
}

print_fasta( $file, $result );


 100 KB ぐらいのファイルでも数秒かかっちゃうなぁ。もう少し速く出来ないかしら。

参考サイト:
Perl の数値変換
2進10進数変換
404 Blog Not Found:Perlで2進数

 
[PR]
by fkmn | 2007-09-18 23:55 | IT
「ITpro Challenge!」の江島さんの講演がニコニコ動画にアップされてます
a0057891_0255733.jpgニコニコ動画(RC)‐How we built Lingr - 江島健太郎さん

スライド

 先日行われた「ITpro Challenge!」の江島さんの講演の動画がニコニコ動画に上がってます。気づくのに遅れて参加できなかった身としては、ありがたいですね。ただ、再生数が異様に少ないのが気になりますが(まだ再生数が2桁w)。

なんというか、いろいろな意味で勇気づけられる講演です。

以下、講演を見ながらググったもの。
ポール・グラハム論法 - いやなブログ
社内ブログ導入記(1):江島健太郎 / Kenn's Clairvoyance - CNET Japan
社内ブログ導入記(2):江島健太郎 / Kenn's Clairvoyance - CNET Japan
社内ブログ導入記(3):江島健太郎 / Kenn's Clairvoyance - CNET Japan
[PR]
by fkmn | 2007-09-17 23:55 | IT
SICP 2.2 まで(やっと)読了
a0057891_040211.jpg

 相変わらずの超スローペースで読み進めております。

 この章は、部品化とか階層化のテクニックを使った抽象化の方法が主な内容。関数指向的な抽象化だけではなく、構造化設計でも、オブジェクト指向でも、この手の話は出てきますね。それだけ重要かつ基本的なテクニックってことなんでしょか。

 それから、有名な図形言語もこの章で登場。個人的にはあまり興味持てなかったけど(ぉ。

 出来れば、今年中に全部読み終わりたいなぁ。今までのペースを考えると、かなり無理がありますが。。。



 
[PR]
by fkmn | 2007-09-15 23:55 | IT
再実装の楽しさ

なんかの実装がオープンソースで公開されているときに、同じ機能の実装を行うのは「車輪の再発明」で無駄な行為だといわれた時期がありました。でも、それは「再発明」ではなく「再実装」であって、とても大切な行為です。

きしだのはてな - 2007-09-10より引用】


 仕事みたいに、周りに与える影響が大きい場合は、「車輪の再発明」は止めるべきだとは思う。けど、ある程度自分の自由にできるプログラムの話であれば、何かを「再実装」のは、素直に楽しい事だよねぇ。

 例えば、「どう書く?org」に投稿するためのコードを書くのは、「再実装」に他ならない(コードの規模は小さいけど)。でも楽しいんだよなぁ。色々試行錯誤していると、勉強にもなるし。

 なんだか、再実装ブームが来そうな予感。
[PR]
by fkmn | 2007-09-11 23:55 | 日記
iPod touch (16GB) を予約注文しちゃったんだZE
アップル - iPod touch

Apple iPod touch 16GB
Apple iPod touch 8GB


 今日発表された iPod touch ですが、その素敵さに耐えきれず、16GBの方を注文してしまいますた。アメリカ在住の人たちが iPhone の素晴らしさを語るのを、歯噛みしながら眺める日々もこれで終わりそうです。届く日が楽しみだなぁ。

 ただ、ちょっと失敗したのが、Apple Store で注文しちゃった事。Amazon で注文しとけば、5%のポイントが付いたのに・・・。今から注文する人は、Amazon から買うといいですよ。出来れば上のリンクから(笑)。


*関連リンク
・イベントでのジョブズのキーノートの様子
アップルスペシャルイベント速報 スティーブ・ジョブズ キーノート - Engadget Japanese

・「iPhone」と「iPod touch」の相違点
iPhone & iPod touch Japan | 知っておきたい「iPhone」と「iPod touch」の相違点
[PR]
by fkmn | 2007-09-06 23:36 | 日記
GNU Screen 覚え書き
WEB+DB Press Vol.40 のはてなおやさんの記事に影響されて、GNU Screen を使い始めました。

各種設定ファイルは、上記記事と下記サイトを元に、以下のような感じに。

.screenrc
escape ^Tt
vbell off
hardstatus alwayslastline " %`%-w%{=b bw}%n %t%{-}%+w"
autodetach on
defutf8 on
bind ^k kill

markkeys "h=^B:l=^F:$=^E"

bind -c REGION 2 split
bind -c REGION 1 only
bind -c REGION 0 remove
bind -c REGION o focus
bind -c REGION ^ resize
bind x command -c REGION


.zshrc (screen に関係ある部分だけ)(9/5 一部修正)(9/7 さらに修正)

preexec () {
[ ${STY} ] && echo -ne "\ek${1%% *}\e\\" # 20070907 修正
}
[ ${STY} ] || screen -rx || screen -D -RR # 20070905 修正


スクリーンショットはこんな感じ。
a0057891_19512891.jpg


備忘録的に、少し解説します。

画面の分割をEmacs風のキーバインドで操作



bind -c REGION 2 split
bind -c REGION 1 only
bind -c REGION 0 remove
bind -c REGION o focus
bind -c REGION ^ resize
bind x command -c REGION

画面の分割をEmacs風のキーバインドで操作できるようになります。分割(split)は、^T x 2。リージョン間の移動(focus)は、^T x oとか。

subtech - Pink Blossom Diary - screen emacs風bindnaoyaのはてなダイアリー - GNU screen いろいろまとめ。経由)からいただきました。

ウィンドウタイトルに最後に打ったコマンドを表示(*修正あり)



preexec () {
echo -ne "\ek${1%% *}\e\\"
}

ウィンドウのタイトルが、最後に打ったコマンドになります。どのウィンドウで何の操作をしているかが一目で分かるので便利。ちなみに、zsh限定。

titles [GNU screen]からいただきました。bashでの設定方法も、こちらに書いてあります。

9/7 追記
上記の設定だと、screen を使っていない時には、打ったコマンドが画面に表示されてしまって、イヤな感じです。例えば、以下のようになってしまいます。

%echo "Hello World"
echoHello World

これを避ける為に、設定を以下のように修正しました。

preexec () {
[ ${STY} ] && echo -ne "\ek${1%% *}\e\\"
}

これで、screen を使っていないときは、打ったコマンドが余計なところに表示されるという事が無くなります。ずっとscreen を使っているのであれば、あまり必要ない設定ですが。

ログインしたらすぐにscreen起動(*修正あり)



[ ${STY} ] || screen -D -RR

ログインした際に、screenのプロセスがあればそこにアタッチ(screen のセッションがあった場合、そのセッションをデタッチしてしまいます)。なければ新しくウィンドウを作ります。必ずユーザホームの .zshrc等に設定する事。/etc/zshrc あたりに設定すると、su した時にループして大変な事になります。

GNU screen その5の >>463 からいただきました。

9/5 追記
上の設定だと、複数のターミナルからログインした時に、既にアタッチされているセッションがある場合、そのセッションが強制的にデタッチされてしまいます。つまり、1枚のターミナルしか使えません。それはちょっと嫌なので、以下のように修正しました。

[ ${STY} ] || screen -rx || screen -D -RR

これで、期待通り、セッションがあればそこにアタッチ、なければ新規作成、という動作になるので、複数ターミナルで作業が出来るようになります。

その他のリンク


[PR]
by fkmn | 2007-09-04 23:55 | IT
【感想】WEB+DB PRESS Vol.40


 今号からFujisan.jpでWEB+DB PRESSの定期購読を始めた。いちいち注文しなくていいのは楽なんだけど、Amazonで注文したよりも遅く届くのがちょっとした難点。

 今回は、はてなおやさんの記事の丁寧な解説が好印象。Screen は未導入だったので使ってみようかな。

 あとは、さくらの消費電力問題の話が面白かった。僕自身は、この手のハード的なハウジングがほとんど分からないので、たまにデータセンタなんかに行ってもラックの配置云々についてはよく分からなかったんだけど、この記事で、その裏側がかいま見れた気がした。
[PR]
by fkmn | 2007-08-31 23:55 | IT
どう書く?org の残骸
隣り合う二項の差 どう書く?org
整数のリストがxsが与えられたときに、隣り合う2要素の差のリストを作る関数diffを作ってください。

いろいろ試して、結局投稿しなかった残骸を置いておきます。

普通に書いたもの
sub diff {
my @a;
push (@a, $_[ $_ + 1 ] - $_[$_]) for 0 .. $#_ - 1;
@a;
}

pairwise を使いたくて書いてみたもの
use List::MoreUtils qw/pairwise/;

sub diff {
my @a = @_[ 1 .. $#_ ];
my @b = @_[ 0 .. $#_ - 1 ];
return pairwise { $a - $b } @a, @b;
}

関数内で再帰
sub diff {
my $a = shift or return;

sub diff_rec {
my $b = $a;
$a = shift or return;
return ( $a - $b, diff_rec(@_) );
}
return diff_rec @_;
}

[PR]
by fkmn | 2007-08-22 23:55 | IT
Emacs で C-- とか M--
 いい加減 "->" とか "=>" をそのまま打つのに疲れたので、emacs上で C-- とか M-- とかで簡単に入力できるようにならないかと思って調べてみた。

 結論から言うと、"\C-\-" みたいな書き方ではダメで、ベクタというものを使って以下のように書くヨロシ。[] で囲まれているのがベクタ。


(global-set-key [?\C--] (lambda () (interactive)(insert "->")))
(global-set-key [?\M--] (lambda () (interactive)(insert "=>")))

 基本かもしれないけど、一応備忘録として書いておきまうす。

参考:GNU Emacsマニュアル: AE. カスタマイズ
[PR]
by fkmn | 2007-08-09 23:31 | IT
ソフト開発は人の為ならず
 LL魂でいろんな人の話を聞いて、良いソフト(あるいはプログラミング言語)っていうのは、やっぱり、どこかしら制作者自身が必要として作ったものが多いなぁ、という印象を強くした。

 そう考えると、やっぱり、SI ってのはソフト開発的には微妙。あくまで、ソフトの仕様に関するモチベーションは、お客さんに起因するわけだし。

 そんな感じで、いろいろモヤモヤ考えてたり。
[PR]
by fkmn | 2007-08-06 23:47 | 日記


とあるWebアプリケーションエンジニアの日記
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
カテゴリ
以前の記事
ブログパーツ
リンク
検索
タグ
最新のトラックバック
プログラミングが「出来る..
from とりあえず9JP?
Genographic ..
from ナンジャモンジャ
ジュセリーノ
from ありの出来事
くちこみブログ集(ライフ..
from くちこみブログ集(ライフ)(..
以降、丁寧語で行こう!
from エッセイ的な何か
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧

fkmnの最近読んだ本 フィードメーター - フッ君の日常 あわせて読みたい AX