スキップしてメイン コンテンツに移動

投稿

2011-03-30

Daily Memo grepにおいて,複数の検索条件を論理和で実行する方法.grep 'hoge|fefe|fuga' または grep hoge -e fefe -e fuga. (12:48 JST) Software RAID on Linux with mdadm. http://www.linux-mag.com/id/7939/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+LinuxMagazine+(Linux+Magazine%3A+Top+Stories) (23:33 JST) FreeBSDスクリプト言語としてのLua http://gihyo.jp/admin/clip/01/fdt/201103/29

2011-03-23

Daily Memo Emacs Lispでリージョン指定された範囲をソートするコードを書いた.その直後,デフォルトで入っている M-x sort-fields の存在を知る. (14:59 JST) bcで10進から16進数に変換するには,obase=16 を実行する.逆に16進数から10進数に変換するには,ibase=16 を実行する.それぞれ,出力および入力が何進数なのかを指定する. (18:08 JST) Firefox 4 が正式リリースされている. http://mozilla.jp/firefox/ . (21:32 JST)

Emacs Lisp でローカル関数を定義する

Emacs Lispにおいて、ローカル関数を定義し,これを呼び出すサンプルコードを以下に示す. (let ((p (lambda (a) (message a)))) (funcall p "hoge")) => "hoge" このコードで何がおこなわれているか,簡単に説明する.作成する関数の本体は (lambda (a) (message a)) である.このlambdaで定義した匿名の関数を,letを用いて変数pに代入する.funcallを用いて,変数pを関数として呼び出す.関数の引数は,pに続いて記述する. letで定義された変数はローカルスコープであるため,pはローカル関数であることがわかる.ちなみに,defunはグローバル関数を定義する関数である.ローカル関数を定義する関数は存在しない. ちなみに再帰関数も定義できる.以下は,再帰関数の代表例である,階乗を計算する関数.この例では,引数に7を与えて,7の階乗を求めている. (let ((f (lambda (num) (cond (( (t (* num (funcall f (- num 1)))))))) (funcall f 7)) => 5040

Emacs Lispのススメ

概要 私の受ける印象では,Emacs Lispを敬遠している人が多すぎる.多くの場合,この理由は,(1) Lispが嫌い,(2) Emacsが嫌い,のいずれかである.後者は思想の違いなのでどうしようも無いが,前者の理由で使わないのであれば,損をしていると私は考える. ここでは,私がEmacs Lispを実際に利用する場面を,ケーススタディとして示す.Lispが嫌いな方が退屈しないよう,Lispの構文については触れない. Emacs Lispを実行するには まず,Emacs Lispを実行する方法を知らなければならない.手っ取り早く実行する方法として,次の2種類の方法がある.この他にも数種類の方法があるが,ここでは省略する. *scratch*バッファを使う Emacsを引数なしで起動すると,*scratch*バッファが開かれる.このバッファで\C-jと入力すると,カーソルの直前にあるLispを実行する. 例えば次のコードは,hogeと出力するものである. (message "hoge") この「)」の次にカーソルを合わせて\C-jを入力すれば,カーソル位置に"hoge"と出力される. (message "hoge") [ここにカーソルを置いて\C-jと入力] => "hoge" eval-last-sexp関数を使う 上記のコードにて,上記と同様「)」の次にカーソルを合わせる.そして,\C-x\C-eと入力すると,直前のLispを実行する. 入力シーケンス \C-x\C-eは,M-x eval-last-sexpと同様.上記と同様,カーソル位置の手前にあるLispを評価する. *scratch*バッファとの違いは,実行結果がミニバッファに表示される点,一般のファイル(*scratch*バッファ以外)でも実行できる点,である. ケーススタディ 簡単な計算をする Emacs Lispを用いると,簡単な四則演算が可能. 例えば,次のLispは1日の秒数を計算する. (* 60 60 24) => 86400 また,あるファイルに次のような数値の羅列が保存されているとする. 34 42 ... 56 これらの数値の合計を求めるには,前後にLispを加えれば良い. (+ 34 42 ....

rubyの実行をトレースする

概要 Rubyスクリプトの実行の過程をトレースする.デバッグする際には知っておくと便利である. トレースできる情報スクリプトの1行の実行,関数呼び出し・復帰,などがある. 使い方 使い方は,次の2通りいずれかを使用する. rubyコマンドのコマンドラインに次を使用する. ruby -rtracer hoge.rb スクリプト内部に次を追加する. require "tracer" Tracer.on ... この間がトレースされる ... Tracer.off 例 とにかくトレースする 次のスクリプトを例に説明する. #!/usr/bin/env ruby class Hoge def initialize() puts "Hoge.initialize()" end def print() puts "Hoge.print()" end end hoge = Hoge.new hoge.print この実行をトレースするには,次のようにスクリプトを書き換える. #!/usr/bin/env ruby require 'tracer' class Hoge def initialize() puts "Hoge.initialize()\n" end def print() puts "Hoge.print()\n" end end Tracer.on hoge = Hoge.new hoge.print Tracer.off これを実行結果は次の出力する. #0:hoge.rb:17::-: hoge = Hoge.new #0:hoge.rb:17:Class:>: hoge = Hoge.new #0:hoge.rb:6:Hoge:>: def initialize() #0:hoge.rb:7:Hoge:-: puts "Hoge.initialize()\n" #0:hoge.rb:7:Kernel:>: puts "Hoge.initialize()\n" #0:hoge.rb:7:IO:...

シーケンシャルな数値を出力する

概要 jot.pl シーケンシャルな数値を出力する. jotコマンド をperlで実装したもの.jotはBSD系OSには標準で入っているが,Linux系OSには入っていないことが多い.Linux環境においてもjotを利用できると幸せになれると考え,実装した. 残念ながら,jotと似たコマンドで, seqコマンド というものがLinuxにあることを,後に知ったわけだが. 使い方 次の使い方がある. $ jot.pl 3 1 2 3 $ jot.pl 3 5 5 6 7 $ jot.pl 5 20 100 20 40 60 80 100 $ jot.pl -w "hoge %d" 3 5 hoge 5 hoge 6 hoge 7 コード #! /usr/bin/env perl $format = "%d\n"; if($ARGV[0] eq '--help') { my $help = << ENDOFLINE; JOT output sequential number command usage jot [-w format] the-number [begin-number [end-number]] option -w specify format like and a '\%d' or '\%2& and so on is available to print number e.g. % jot 3 1 2 3 % jot 3 5 5 6 7 % jot 5 20 100 20 40 60 80 100 % jot -w "hoge %d" 3 hoge 0 hoge 1 hoge 2 ENDOFLINE open(LESS, "| less"); print LESS $help; close(LESS); exit 1; } elsif($ARGV[0] eq '-w') { shift(@ARGV); $format = shift(@ARGV). ...

2011-03-20

Daily Memo UCBCのBenjamin Monreal氏が,核分裂・メルトダウン・福島の原発についての私見について述べている.非常にわかりやすい. http://online.kitp.ucsb.edu/online/plecture/bmonreal11/ (08:48 JST) その日本語版が,いつの間にか作られていた. http://ribf.riken.jp/~koji/jishin/zhen_zai.html (11:49 JST)