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

投稿

3月, 2011の投稿を表示しています

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 ((<= num 1) 1) (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). &qu

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)

後藤弘茂のWeekly海外ニュース:注目の記事

2010/09/17 なぜSandy Bridgeはそんなにパフォーマンスが高いのか Intelの次世代CPUアーキテクチャSandy Bridgeの情報が公開された.アーキテクチャの概要は次のようになる.市場への投入は2011年を予定.コア数は,2,4,8の3モデルを用意する.コアとキャッシュをリングバスで接続し,コア数のスケーラビリティを確保している.2,4コアでは,GPUをオンダイでサポート.メモリコントローラはDDR3. Sandy Bridgeでは,Core MAをベースに,次の改良を加えている. #フロントエンドクラスタでのuOPキャッシュの追加#実行エンジンクラスタでのAVXユニットの実装と再編成#物理レジスタファイルへの移行とスケジューリングのリソースの強化#メモリクラスタでのロード/ストア機能の強化 第1に,命令デコード回数を減らすため,命令のデコード結果を保持するキャッシュを追加する.電力と時間を食う命令デコードステージの使用回数を減らすことで,電力を削減しつつ,性能を高めるのが狙い. 多くのx86命令は,CPUの内部命令であるuOPにデコードされる.直近のデコード済みuOPを,Sandy Bridgeでは1,500個キャッシュする.Intelによれば,ヒット率は80%以上を達成するとしている.これにより,(1)デコーダの稼働率を20%に落とすことで電力消費を抑える,(2)デコード処理を80%スキップすることで演算速度を向上する,といった改善に繋がる.加えて,キャッシュには過去に実行された命令列が保存されるため,命令のトレースが可能となる.このため,分岐命令に起因するストールの解消などにも利用できる. 第2に,SIMD演算を強化するため,AVX (Advanced Vector eXtensions) を追加する.従来のSSEとは別に新ユニットとして設け,命令セットも合わせて拡張する.AVXでは256bit幅で並列実行する.これはSSEの128bit幅の2倍であり,演算性能が2倍になることを意味する.AVXの高い演算性能を引き出すため,以降で説明する3点目および4点目の改良を加えている. 第3に,命令スケジューリング機能を強化し,演算器の高い稼働率を実現する.加えて,レジスタファイルを物理レジスタファイルにリネームすることで,電力を削減しつつ性能

2011-03-18

Daily Memo emacs lispにて,次のように使うとローカル関数のように使える.(let ((p (lambda (a) (message a)))) (funcall p "hoge")) (10:38 JST)

2011-03-18

Daily Memo emacs lispにて,次のように使うとローカル関数のように使える.(let ((p (lambda (a) (message a)))) (funcall p "hoge")) (10:38 JST)

2011-03-17

Daily Memo emacsでファイル名変更 hoge -> fefe.(rename-file "hoge" "fefe") (09:49 JST) emacs lisp 現在のファイル名は (buffer-file-name) で取得できる. (09:55 JST) 停電に備え,節電してWIndows PCを使用する方法 http://technet.microsoft.com/ja-jp/windows/gg715287 (12:49 JST) U.S. supercomputer experts assess radiation risks amid crisis at Japanese nuclear facility http://www.nextgov.com/nextgov/ng_20110314_3634.php (13:02 JST)

ドキュメント関連

TeX関連Tips TeXマクロプログラミング beamerを使う beamerでしおりを付ける しおりの文字化け対策 Postscript関連 Postscriptのページ統合・分割 プログラミング PDF関連 PDFのページ統合・分割

2011-03-14

Daily Memo 2011-03-14 松岡先生のtwitterを見ている.主に電力関係で,普段聞けない貴重なコメント.↓ (23:23 JST) ProfMatsuoka/twitter SRのような性能電力効率の悪いスパコンは止めてしかるべきです。Tsubameはラップトップの3倍良いので、止めると同仕事量なら寧ろ悪影響で 不急の同定が先で。@takeshun1984 地震研のeicは止める可能性があるとアナウンス&東大のSRはとりあえず月曜日までは止まって 11:53 PM Mar 13th (23:23 JST) ProfMatsuoka/twitter ここでもう一度、何故TSUBAME2とか京とか性能電力効率が良いスパコンを安易に止めてはいけないか、むしろ節電に協力という意味では状況を悪化させる恐れがあるのか、を述べておきます。 1:04 AM Mar 14th (23:23 JST) ProfMatsuoka/twitter 例えばGreen500の結果からは、高度にGPUチューンされたアプリケーションではTSUBAME2.0はラップトップの3倍、京でも2倍以上の性能電力比を示します。CPUオンリーでも莫大なバンド幅で良い。このあたり細かい議論は色々あるのですが省略します。 1:08 AM Mar 14th (23:23 JST) ProfMatsuoka/twitter 無論多くのアプリは並列化しますが、その場合ユーザも弱スケーリングの範囲で使うことが多いのです。つまりCPU/GPU数を100倍にしたら性能も50-100倍になると。強スケーリングで並列化効率がアララの範囲だと課金でムチャ損するので実際のユーザでは余り見られません。 1:11 AM Mar 14th (23:23 JST) ProfMatsuoka/twitter つまり、もしTSUBAME2.0を停止して、同じジョブをユーザが自分のパソコン等で実行すると、電力効率は最悪で数倍も悪く、あるいは強スケーリング性が多少あるとき問題サイズを小さくして、かつCPUオンリーとかでもTSUBAMEの電力効率を抜くことはラップトップ上でも難しいのです。 1:14 AM Mar 14th (23:23 JST) ProfMatsuoka/twitter じゃあその分問題を小さく

2011-03-12

Daily Memo AICS International Symposium@神戸にやってきた. (09:39 JST) 日本を除くアジア圏の方が話す英語は,やはり今の私には聞き取れない. (11:03 JST) 産総研の研究者,理研の研究者,阪大の名誉教授,と同じテーブルを囲んで昼食.この顔ぶれの中に研究者でもない私が存在することに違和感. (12:48 JST) 松岡先生のTwitterが興味深い -> 逆に考えれば今すぐ人類に絶対的に必要ならエクサフロップのスパコンは3兆円かければ電気も足りて作れる訳だ。@RyzeVia: 足りない電力がTSUBAME2.0フル稼働の750倍とか、全く想像の出来ないおおきさ。どこがこんなに電力使うんだ? 1:42 PM Mar 12th http://twitter.com/ProfMatsuoka/status/46430882973749248 (13:16 JST) コーヒーブレイク中.学会の休憩時間といえば,研究者同士が互いに名刺交換なり情報交換なりを交わすのが普通だ.しかし今は,ほとんどの人がテレビで震災の状況を真剣に見ている. (14:29 JST) 松岡先生が会場にいらっしゃった. (14:32 JST) やはり昨日のセッションにも出たかったなあ. (15:07 JST) 海外の研究者が数名,松岡先生に握手を求めてご挨拶なさっている.松岡先生がかっこよすぎる. (16:08 JST) 権威ある学会に参加していつも思うのは,すごすぎる人が多すぎるということ.専門の違いこそあれど,研究力で勝てる気がしない.しかし,だからといって負けたままで良いわけではない. (17:59 JST)

2011-03-11

Daily Memo export GREP_OPTIONS='--color=auto' としておくことで,grepの出力の中でパターンマッチした部分が赤色に. (11:22 JST) export GREP_COLOR=7 でも可能なはずなのだが,できない. http://www.debian-administration.org/articles/460 (11:23 JST) rubyにおいて,Kernelクラスのメンバ関数は組み込み関数という扱いになる.すなわち,クラス名を省略可能で,かつプログラムのあらゆる箇所から呼び出せる.有名なもので,gets exec open loop puts p などがそうである.逆に,同名のメンバ関数を実装する場合,区別するためにKernel.getsなどと記述すればよい. (16:05 JST)

2011-03-04

Daily Memo Linuxのデバイスドライバの内部では,printk(KERN_INFO "hogehoge")でコンソールに文字列を出力する. (11:49 JST) デバイスドライバで,一定の時間間隔で特定の処理をおこなうには,タイマを利用すると良い http://homepage3.nifty.com/rio_i/lab/driver24/003timer.html (17:28 JST)

2011-03-03

Daily Memo 誰もいない夜中の時間帯に重い処理を走らせるため,atコマンドを使い任意の時刻にコマンドを実行する.起動にはシェルスクリプトと起動時刻が必要.スクリプトは,引数に-fオプションでスクリプトファイルを指定するか,標準入力からスクリプトの内容を伝える.時刻は引数で指定し,フォーマットはhh:mmや,now + 3miniteなどがある. (09:59 JST) Emacsでタブをスペースに置き換えるには,リージョンを選択し,M-x untabify を実行する. (10:45 JST)

shの設定: emacsclient.sh

emacs-serverとemacsclientを使って,1つのemacsウィンドウを有効に利用する方法.指定したファイルを,emacs-serverを立ち上げているemacsウィンドウで開く.これにより,emacsウィンドウの乱立を防ぎ,すっきりとしたデスクトップで生活できる. シェルの初期化スクリプトに,以下のスクリプトを加える. e() { file=$1 echo $1 | grep -v '^/' >/dev/null 2>&1 && file=${PWD}/$file emacsclient -e "(find-file \"${file}\")" } unset file ターミナルから, $ e filename と実行することで,既に立ち上がっているemacsウィンドウでファイルを開く.

ディレクトリを自動バックアップする

概要 backup.sh 特定のディレクトリ以下を毎日バックアップしたいことがある.これを自動化するスクリプトを書いたので紹介する. ここでは,バックアップの管理をシンプルにすることを目標としている.このため,増分バックアップなどの高度なものは使用せず,tarで固めて圧縮するに留めている. コード 以下にコードを示す. #!/bin/sh init() { MAX_BACKUPS=20 DST_DIR=~/var/log/svn.repos/ DST_FILE=$DST_DIR/`date +%F`.tar.gz MYNAME=$0 mkdir -p $DST_DIR } chkarg() { while [ $# -ne 0 ]; do case $1 in *) SRC_DIR=$1 shift ;; esac done if [ ! -d $SRC_DIR ]; then echo backup-dir $SRC_DIR not found. exit 1 fi } backup() { tar czf $DST_FILE -C `dirname $SRC_DIR` `basename $SRC_DIR` i=0 for fname in `ls $DST_DIR/????-??-??.tar.gz | sort -r`; do [ $i -ge $MAX_BACKUPS ] && rm -f $fname i=`expr $i \+ 1` done } synopsys() { echo hoge } main() { init $* chkarg $* backup } main $* 使い方 シノプシス $ backup.sh directory 引数にはバックアップする対象のディレクトリを指定する.このディレクトリ以下の全ファイルがバックアップの対象となる. 設定項目 上記コードのinit(

2011-03-02

Daily Memo 文字コードの異なる2個のファイルの差分を取るには,nkfでフィルタリングしてからdiffを実行してもよいが,vimdiffやediffを使うと勝手にコード変換してから差分を表示してくれるので便利.パッチを作ることはできないが. (15:38 JST)

Windows 関連 Tips

LDAPパスワードを変えたらSambaにアクセスできない エラーの概要 SambaをLDAPで管理しており,かつアカウント名とパスワードをWindowsに記憶させている場合に,LDAPパスワードを変更すると,ログインできなくなることがある.このとき,次のメッセージが表示される. 同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での 複数の接続は許可されません。サーバーまたは共有リソースへの以前の接続を すべて切断してから、再試行してください。 エラーの原因 パスワードを変更したためWindowsは新しいセッションを作ろうとする.しかし,以前のセッションが残っているため,同一のアカウント名で異なるセッションが複数確立される.これを防ぐため,Windowsはエラーを吐いてログインをキャンセルする. 対処法 このため,一旦以前のセッションを切断し,再度新しいアカウント/パスワードでセッションを張り直す必要がある. 以前のセッションを切断する まず,次のコマンドで切断すべきセッションを探し,このサーバ名を特定する. > net use 切断するサーバ名を確認したら,現在残っているセッションを切断する. > net use \\servername /delete 再度接続する 再度接続するには,次のいずれかの方法がある. #エクスプローラでログインする.#コマンドプロンプトで接続する. コマンドプロンプトで接続するには,次のコマンドを使う. >net use \\servername /user:username password ここで,usernameとpasswordは,適切な文字列に置き換えること. キーボード入力のリピート速度を規定以上に速くする コントロールパネルで設定できるキーリピート速度は,個人的には遅いと感じている.kbdaccを利用すると,リピート速度を更に高めることができる.以下のリンク(1)からダウンロードできる. NTEmacsによる文字コード判別の失敗への対処 Emacs 23に変更してから,ファイルサイズが小さい場合に,文字コードの自動判別に失敗することがある.この場合,.emacs.elに次を記述するとよい.これは,euc-jpを使用する場合の例である. (prefer-coding-system '

2011-03-01

Daily Memo M-x ediff を使うとEmacsでdiffを実行する. http://www.math.s.chiba-u.ac.jp/~matsu/emacs/emacs21/ediff.html (12:08 JST)