Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
- 2004: 01 02 03 04 05 06 07 08 09 10 11 12
- 2005: 01 02 03 04 05 06 07 08 09 10 11 12
- 2006: 01 02 03 04 05 06 07 08 09 10 11 12
- 2005-02-28 [Vine] ThinkPad X23 で Skype
- 2005-02-25 [Vine Linux] SKK
- 2005-02-24 [Perl] 複数回マッチしたそれぞれを配列要素で置換する
- 2005-02-23 [emacs] Vine Linux 3.1でリモートホストのemacsをローカルのXにウインドウ表示する
- 2005-02-22 [emacs] 大文字小文字変換
- 2005-02-21 [MySQL] TIMESTAMP
- 2005-02-18 [X] 画面を回転・反転する
- 2005-02-17 [SICP] amb評価器(非決定性計算)
- 2005-02-16 [Perl] 配列参照間で配列の中身をコピーする
- 2005-02-15 [misc] 日付つきバックアップファイル
- 2005-02-14 [emacs] バッファの内容をそのままHTML化する
- 2005-02-10 [mimetex] ウェブページで数式を書きたい
- 2005-02-09 [dpkg] どのパッケージからインストールされたファイルか
- 2005-02-08 [ssh] ポートフォワーディング
- 2005-02-07 [what] @(#) と what コマンド
- 2005-02-04 [LaTeX] LaTeX で横長の文書を作る
- 2005-02-03 [w] ログインしている人とその人がやっていることを表示する
- 2005-02-02 [linux] プロセスのメモリ配置を見る
- 2005-02-01 [vigr] /etc/group の編集
2005-02-28 [Vine] ThinkPad X23 で Skype
Skype のサイトから,Linux用のファイル(Dynamic Link版)を入手展開するだけ
% tar jxvf skype-1.0.0.7.tar.bz2
展開したディレクトリにある skype とう実行ファイルを起動すると それらしい画面がでて,skype のアカウントを作ったりできる. echo123 をコールすると,エコーテストができるはず.でコールすると 相手につながっているらしいのだが音がでない.はてはて...
Vine 3.1 on ThinkPad X23 で Skype をやるには,ALSA のドライバとライブラリ それにユーティリティが必要ということらしい.
そこで,VinePlusにある srpm ファイルを持ってきて,
% cd ~/rpm/SRPMS % wget http://<mirror-server>/<Vine-top>/VinePlus/3.1/SRPMS.plus/alsa-driver-<version>.src.rpm % wget http://<mirror-server>/<Vine-top>/VinePlus/3.1/SRPMS.plus/alsa-lib-<version>.src.rpm % wget http://<mirror-server>/<Vine-top>/VinePlus/3.1/SRPMS.plus/alsa-utils-<version>.src.rpm
alsa-driver のバイナリパッケージを作って,インストール
% rpm --rebuild alsa-driver-<version>.src.rpm % cd ../RPMS/i386 % sudo rpm -ivh alsa-driver-<version>.i386.rpm
alsa-lib のバイナリパッケージを作って,インストール
% rpm --rebuild alsa-lib-<version>.src.rpm % cd ../RPMS/i386 % sudo rpm -ivh alsa-lib-<version>.i386.rpm
alsa-utils のバイナリパッケージは ncurses-devel が必要なので先にこれを インストールしてから,バイナリパッケージをつくる
% sudo apt-get install ncurses-devel % rpm --rebuild alsa-utils-<version>.src.rpm % cd ../RPMS/i386 % sudo rpm -ivh alsa-utils-<version>.i386.rpm
でもって,ルートで alsaconf をやる
% su - # alsaconf
音声がでるのを確認したら
# alsactl store
で再び,skype を起動して echo123 に繋いでみる. 声がでた,こちらの声も echo された! やった!
--nobsun
2005-02-25 [Vine Linux] SKK
愛(SKK=I)こそすべての儂だから, Vine Linux 3.1 でも,SKKを使うんじゃ.
# apt-get install skk # apt-get install skkinput # apt-get install rskkserv
これで,インストールOK.
% setime skk
とやって,ログインしなおせば,SKKが使える..emacs はデフォルトのままでOK.
--nobsun
There is no comment.
2005-02-24 [Perl] 複数回マッチしたそれぞれを配列要素で置換する
my $string = 'first=[A], second=[B], third=[C]';
たとえば、 上記の[A][B][C]それぞれを'peach', 'apple', 'banana'で置換する。
[A][B],... といった置換対象部分が何回登場するか、 および配列要素数は事前に分からない。
use strict;
my $string = 'first=[A], second=[B], third=[C]';
my @array = ('peach', 'apple', 'banana');
my $n = 0;
$string =~ s{
\[[A-Z]+\]
}{
$array[$n++]
}gex;
参考文献: 「Perlクックブック」ISBN4-87311-037-8
--yasuyuki
There is no comment.
2005-02-23 [emacs] Vine Linux 3.1でリモートホストのemacsをローカルのXにウインドウ表示する
- Vine Linux 3.1がインストールされたホストを2台用意する。 以下、ローカルをushi、リモートをkaeruとして説明する。
- ushiからkaeruにssh接続し、kaeru上のファイルを編集する。 たとえばssh接続したGNOMEターミナルから emacs <kaeru上のファイル名> などと入力して[Enter]キーを押す。
- ローカルushiで稼働するX上でemacsが起動し、
リモートkaeru上のファイルが編集できる。
スクリーンショット:
(フルサイズ画像:
1024x768
)
- このemacs上でM-x shellでシェルを起動すると、 当然ながら(?)ローカルのshellではなくリモートのshellが起動する。 とっても便利。
--yasuyuki
There is no comment.
2005-02-22 [emacs] 大文字小文字変換
「おいおい」シリーズ.めったに使わないので忘れていて,どうだっけと 思うことがときどきあります.そのたびに,誰かに聞いていると, 「それって,このまえも聞かれたよ.」と嫌われるかもしれません.^^; この際,ちゃんと覚えておこう(ここに書いておけば大丈夫?).
| 単語を大文字にする | M-u |
| 単語を小文字にする | M-l |
| 領域を大文字にする | C-x C-u |
| 領域を小文字にする | C-x C-l |
| 単語の最初の文字だけ大文字にする | M-c |
--nobsun
There is no comment.
2005-02-21 [MySQL] TIMESTAMP
MySQL の TIMESTAMP型には他のデータベースシステムとの互換性を失うけれど, 便利な麻薬のような機能がある.
CREATE TABLE sample
-> (
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT,
-> name CHAR(30),
-> lastmodified TIMESTAMP NOT NULL,
-> created TIMESTAMP,
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.00 sec)
のようにテーブル sample を作成する.
mysql> DESCRIBE sample +--------------+------------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------------+------+-----+---------------------+----------------+ | id | int(10) unsigned | | PRI | NULL | auto_increment | | name | char(30) | YES | | NULL | | | lastmodified | timestamp | YES | | CURRENT_TIMESTAMP | | | created | timestamp | YES | | 0000-00-00 00:00:00 | | +--------------+------------------+------+-----+---------------------+----------------+ 4 rows in set (0.00 sec)
これで,新しいレコードを追加してみよう.
mysql> INSERT INTO sample (name,created) VALUE('nobsun',NULL);
Query OK, 1 row affected (0.00 sec)
lastmodified カラムの値を指定していないこと,createdカラムにNULLを指定している ことに注意.
mysql> SELECT * FROM sample; +----+--------+---------------------+---------------------+ | id | name | lastmodified | created | +----+--------+---------------------+---------------------+ | 1 | nobsun | 2005-02-18 08:47:57 | 2005-02-18 08:47:57 | +----+--------+---------------------+---------------------+ 1 row in set (0.00 sec)
ねっ.便利でしょ.どういうことかって?じゃ,nameカラムの値を変更してみよう.
mysql> UPDATE sample SET name='Nob Taro' WHERE name='nobsun'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM sample; +----+----------+---------------------+---------------------+ | id | name | lastmodified | created | +----+----------+---------------------+---------------------+ | 1 | Nob Taro | 2005-02-18 08:56:00 | 2005-02-18 08:47:57 | +----+----------+---------------------+---------------------+ 1 row in set (0.00 sec)
MySQL では,
- TIMESTAMP型のカラムにNULLをセットすると,その カラムの値は,現在の時刻になります.TIMESTAMP型のカラムの 値をNULLに更新しても,同じように現在の時刻になります.
- INSERT文でTIMESTAMP型のカラムのセットを省略すると,そのテーブル で最初のTIMESTAMP型のカラムは,現在の時刻にセットされ,それ以外の TIMESTAMP型のカラムは,zero にセットされます.
- そのテーブル内の最初のTIMESTAMP型のカラムは,それ以外のカラムの 値が更新された場合に自動的に現在の時刻に更新されます.
--nobsun
「最初の」カラムってところに危険な臭いがしますね。カラムの順番が意味を持つ場合って他にありましたっけ。
そうなんです。本来、カラムは名前だけで識別されるべきもので、 順番が意味をもってはいけないはずなんですが。。。
2005-02-18 [X] 画面を回転・反転する
たまに画面の色を反転させたい事がある。 真っ白のページに文字が小さく表示されていると目がショボショボしてしまう。
そんなときは、2005-01-25に紹介したxwdコマンドを使って
xwd -silent -root | convert - -negate - | xwud
とする。 これで画面全体の色を反転した画像が表示される。
あとはxwudのウィンドウを装飾無しで最大化させれば、画面全体で反転気分を味わえる。 ウィンドウ・マネージャがSawfishなら~/.sawfishrcに
(add-window-matcher 'WM_CLASS "^Xwud/xwud$"
'(position 0 . 0)
'(frame-type . none)
'(depth . 5))
を書くとxwudウィンドウに関してはスクリーン全体での表示になる。
また、
xwd -silent -root | convert - -rotate 180 - | xwud
とすれば
___ | 6 | |_O_|
この画面が
___ | O | |_9_|
と表示される。
机を挟んだ相手に画面を見せるとき便利かもしれない。
--shibata
There is no comment.
2005-02-17 [SICP] amb評価器(非決定性計算)
名著 "Structure and Interpretation of Computer Programs 2nd. edition" (邦訳『計算機プログラムの構造と解釈 第二版』)に出てくるコードはすべて、 スクリプトファイルとして、 MIT Press の SICP サイトで 公開されています。
第4章では、Scheme で Scheme のインタープリタを書くというトピックがあります。 これは,2005年1月の24日分で紹介しました. この章ではこのほかに,遅延評価を行うインタープリタや,非決定性計算を 行うインタープリタを書いています.
ここでは非決定性計算を行うインタープリタを動作させてみましょう. 元になるコードは,MIT Press の SICP のサイトにある, ch4-ambeval.scm です。 このコードは, ch4-mceval.scm をロード しているので,この両方をダウンロードしてください.
さらに,解釈器の駆動ファイル run-ambeval.scmを カレントディレクトリに置いて、以下のようにすると Gauche で動作させることが できます。
- Gauche を起動する
% gosh gosh>
- ロードパスにカレントディレクトリを加える
gosh> (add-load-path ".") ("." "/usr/local/share/gauche/site/lib" "/usr/local/share/gauche/0.8.3/lib") gosh>
- run-ambeval.scm をロードする
gosh> (load "run-mceval.scm") ;;; Amb-Eval input: ■
では, ##(link2sicp "book-Z-H-28.html#%_thm_4.42" "Exercise 4.42")のパズルを を解いてみましょう.
問題 4.42
(Philips 1934にある)次の「嘘つき」パズルを解け:五人の女子生徒が試験を受けている.彼らの両親は結果に対して過度の関心を持って いる—と彼らは考えている.そこで彼らは自宅へ試験について手紙を書くのに,誰も が一つの正しい情報と一つの嘘を書こうと約束した.次は彼らの手紙の関係する部分 である.
- Betty: 「Kittyは試験が二番で私は三番でした.」
- Ethel: 「私がトップと聞いてうれしいでほう.Joanが二番でした.」
- Joan: 「私は三番でした.可哀想なEthelはビリでした.」
- Kitty: 「私は二番になりました.Maryは四番でしかありませんでした.」
- Mary: 「私は四番でした.トップの座はBettyがとりました.」
五人の女子生徒の本当の順番はどうか.
--邦訳『計算機プログラムの構造と解釈 第二版』より引用.
準備として,amb 評価器内で,require,distinct?,xor を定義しておく.
;;; Amb-Eval input:
(define (require p)
(if (not p) (amb)))
;;; Starting a new problem
;;; Amb-Eval value:
ok
;;; Amb-Eval input:
(define (distinct? items)
(cond ((null? items) true)
((null? (cdr items)) true)
((member (car items) (cdr items)) false)
(else (distinct? (cdr items)))))
;;; Starting a new problem
;;; Amb-Eval value:
ok
;;; Amb-Eval input:
(define (xor p q)
(if p (not q) q))
;;; Starting a new problem
;;; Amb-Eval value:
ok
さて,これで,準備ができたので,パズルを解くプログラムを...
;;; Amb-Eval input:
(define (ex-4.42)
(let ((kitty (amb 1 2 3 4 5))
(betty (amb 1 2 3 4 5))
(ethel (amb 1 2 3 4 5))
(joan (amb 1 2 3 4 5))
(mary (amb 1 2 3 4 5)))
(require (xor (= kitty 2) (= betty 3)))
(require (xor (= ethel 1) (= joan 2)))
(require (xor (= joan 3) (= ethel 5)))
(require (xor (= kitty 2) (= mary 4)))
(require (xor (= mary 4) (= betty 1)))
(require (distinct? (list kitty betty ethel joan mary)))
(list (list 'kitty kitty)
(list 'betty betty)
(list 'ethel ethel)
(list 'joan joan)
(list 'mary mary))))
;;; Starting a new problem
;;; Amb-Eval value:
ok
さておたちあい.
;;; Amb-Eval input: (ex-4.42) ;;; Starting a new problem ;;; Amb-Eval value: ((kitty 1) (betty 3) (ethel 5) (joan 2) (mary 4))
というわけで,Kitty,Joan, Betty, Mary, Ethel の順でした. うまくアレンジすると,ニコリの 推理パズルのうち極易しいものなら,解けるかもしれませんね.
--nobsun
There is no comment.
2005-02-16 [Perl] 配列参照間で配列の中身をコピーする
use strict;
my $a = ['a', 'b', 'c'];
my $b;
my @tmp = @{ $a };
$b = \@tmp;
--yasuyuki
There is no comment.
2005-02-15 [misc] 日付つきバックアップファイル
ファイルのバックアップを日付つきファイル名にすると,なにかと便利.
#!/bin/sh cp $1 $1.`date +%Y-%m-%d`
というスクリプトをたとえば,backup という名前のファイルに保存し, 実行パーミッションを ON にすれば使える.
% ls backup* backup % ./backup backup % ls backup* backup backup.2005-02-15
--nobsun
There is no comment.
2005-02-14 [emacs] バッファの内容をそのままHTML化する
Emacsではプログラムの構文を見てキーワードに色をつけて表示してくれる。
htmlizeパッケージを使えば、 色つき表示されたバッファをそのままHTMLへ変換できる。 (パッケージのelisp自体をHTMLへ変換した例)
HTMLへ変換したいバッファで
M-x htmlize-buffer
を実行すると新しいバッファが開いて、HTMLへ変換した結果が表示される。
他にも
- htmlize-file
- htmlize-many-files
- htmlize-many-files-dired
- htmlize-regionhtmlize-file
などのコマンドがある。
また、htmlize-output-typeにはcssとfontがあって
.emacs.elに書くか
C-[ : (setq htmlize-output-type 'font)
みたいにして変更する。
- css: <span class=FACE>...</span>な感じで色指定
- font: <font color="...">...</font>な感じで色指定
cssが標準。
debianなら
apt-get install emacs-goodies-el
でhtmlizeパッケージを使える。
--shibata
There is no comment.
2005-02-10 [mimetex] ウェブページで数式を書きたい
mimeTeX を使うと 複雑な数式を TeX 形式で指定して画像として埋め込むことができる
- Black-Sholes の公式
Error in expanding macro: (img "mimetex.cgi?E(U(S(T)))=\\Bigint\\frac{1}{\\sqrt{2\\pi T}\\sigma}U(S(0)e^z) \\exp\\left( - \\frac{1}{2\\sigma^{2}T}\\left( z + \\frac{T\\sigma^{2}}{2}\\right)^{2} \\right) dz")
Invalid Image URL: "mimetex.cgi?E(U(S(T)))=\\Bigint\\frac{1}{\\sqrt{2\\pi T}\\sigma}U(S(0)e^z) \\exp\\left( - \\frac{1}{2\\sigma^{2}T}\\left( z + \\frac{T\\sigma^{2}}{2}\\right)^{2} \\right) dz"
--nobsun
ブラウザのMathML対応が当てに出来る場合、こんなのもあります。 http://www1.chapman.edu/~jipsen/mathml/asciimath.html こいつのメリットはテキストブラウザだと数式部分がテキスト形式で見れるってとこ。 onLoadの時にJavaScriptでドキュメントボディをパーズするという荒技を使っていますが。
2005-02-09 [dpkg] どのパッケージからインストールされたファイルか
Debian で、たまにある特定のファイルがどのパッケージ由来のものであるか 知りたくなることがある。そんなときは、dpkg -S を使って知ることができる。 たとえば、
% dpkg -S `which platex` ptex-bin: /usr/bin/platex
とか
% dpkg -S /usr/lib/sendmail qmail: /usr/lib/sendmail
などとする。
--nobsun
There is no comment.
2005-02-08 [ssh] ポートフォワーディング
たまに必要になるんだけど、以外に忘れている。
ssh -L ローカルポート:フォワード対象ホスト:リモートポート ユーザ@SSHサーバ
たとえば、ローカルポート 8000 番をSSHサーバ fw.example.com 経由(ユーザ nobsun)で、www.inside.example.com の 8080 番にフォワーディングしたければ、
% ssh -L 8000:www.inside.example.com:8080 nobsun@fw.example.com
とやる、passwd プロンプトが出て、認証に成功すると、ssh で nobsun@fw.example.com にログインすることになる。この状態で、ポートフォワーディングが張られている。 ログアウトするとポートフォワード接続も切れる。
--nobsun
There is no comment.
2005-02-07 [what] @(#) と what コマンド
最近他の方ののスクリプトとか見ててもあまり見かけないので、 意外と知らない方も多いかも。
自分の作成したスクリプトでもドキュメントでもいいです。 なんならオブジェクトでもいい。 基本的にはテキストとして埋まってればいけると思います。
@(#) が含まれる行や、オブジェクトファイルならそういう文字列が 埋め込まれていれば、 what コマンドで表示してくれるってやつです。
例:shスクリプト
% cat test.sh
#! /bin/sh
# @(#) This script analyse http log.
# @(#) to use at your own risk. cut-sea
echo "Hello, World!"
% what test.sh
test.sh:
This script analyse http log.
to use at your own risk. cut-sea
例:Cプログラム
% cat test.c
#include <stdio.h>
static char *what_string[3] = {"@(#) This program analyse http log.",
"@(#) to use at your own risk. cut-sea",
NULL};
void main()
{
printf("Hello,World\n");
}
% cc test.c
% what a.out
a.out:
$RCSfile: 000538,v $ $Revision: 1.287 $ (DEC) $Date: 2005/11/20 21:29:00 $
This program analyse http log.
to use at your own risk. cut-sea
% strings a.out
@(#)$RCSfile: 000538,v $ $Revision: 1.287 $ (DEC) $Date: 2005/11/20 21:29:00 $
@(#) This program analyse http log.
@(#) to use at your own risk. cut-sea
Hello,World
こういう感じです。 このシステムでは cc により RCS のタグが勝手に @(#) 付きで埋められてますけど。;-< なお、 @(#) 行はスクリプト中に分散しててもいいはずなので使い方はあなた次第。
--cut-sea
There is no comment.
2005-02-04 [LaTeX] LaTeX で横長の文書を作る
landscapeパッケージを使う。 ドキュメントの先頭に以下を書く。
\documentclass[a4]{jbook}
\usepackage{landscape}
\special{! TeXDict begin /landplus90{true}store end }
横長のPDFを作るにはdvipdfmに-lオプションをつける。
dvipdfm -l <filename>.dvi
--yasuyuki
There is no comment.
2005-02-03 [w] ログインしている人とその人がやっていることを表示する
これも、「おいおいシリーズ」かなぁ? w なんて一文字のコマンドがあるなんて 知らんかった。
% w ~ 23:21:03 up 4 days, 21:35, 6 users, load average: 0.03, 0.03, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT nobsun :0 - Mon05 ?xdm? 43:45 0.00s -:0 ...以下略...
--nobsun
やはり類似ネタでーす。 w と聞いて芋づる的に連想されるのだと finger/last/lastcomm。:-)
2005-02-02 [linux] プロセスのメモリ配置を見る
特定のプロセスのメモリ配置を見るには、/proc ファイルシステムを使う。 たとえば、プロセスID 5356 のメモリ配置を見るには、
% cat /proc/5356/maps
のようにする。表示例は以下のとおり
08048000-0804b000 r-xp 00000000 03:05 12583051 /bin/cat 0804b000-0804c000 rw-p 00003000 03:05 12583051 /bin/cat 0804c000-0804d000 rwxp 00000000 00:00 0 40000000-40011000 r-xp 00000000 03:05 62915066 /lib/ld-2.3.1.so 40011000-40012000 rw-p 00011000 03:05 62915066 /lib/ld-2.3.1.so 4001f000-40127000 r-xp 00000000 03:05 63041022 /lib/libc-2.3.1.so 40127000-4012d000 rw-p 00107000 03:05 63041022 /lib/libc-2.3.1.so 4012d000-40130000 rw-p 00000000 00:00 0 40130000-40251000 r--p 00000000 03:05 33574049 /usr/lib/locale/locale-archive bfffe000-c0000000 rwxp fffff000 00:00 0
--nobsun
There is no comment.
2005-02-01 [vigr] /etc/group の編集
「おいおい」シリーズ
/etc/passwd を編集するには、vipw を使って、 /etc/sudoers を編集するには、visudo を使うのに、 /etc/group を編集するのには、vi を使っていたそこの貴方(って、儂か)! vigr を使いましょう。
# vigr
--nobsun
There is no comment.