Open Source WEB



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


Name:
Comment:
yasuyuki: (Tue Mar 1 14:17:28 2005 )
最初にsudo apt-get install qtが抜けてます。

あとVine的には、alsa-driverインストールは以下です。
sudo apt-get install kernel-source
sudo apt-get -b source alsa-driver
sudo rpm -ivh alsa-driver-1.0.5a.i386.rpm
sudo apt-get install alsa-lib alsa-utils


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


Name:
Comment:

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


Name:
Comment:

There is no comment.


2005-02-23 [emacs] Vine Linux 3.1でリモートホストのemacsをローカルのXにウインドウ表示する

  1. Vine Linux 3.1がインストールされたホストを2台用意する。 以下、ローカルをushi、リモートをkaeruとして説明する。
  2. ushiからkaeruにssh接続し、kaeru上のファイルを編集する。 たとえばssh接続したGNOMEターミナルから emacs <kaeru上のファイル名> などと入力して[Enter]キーを押す。
  3. ローカルushiで稼働するX上でemacsが起動し、 リモートkaeru上のファイルが編集できる。 スクリーンショット: (フルサイズ画像: 1024x768 )
  4. このemacs上でM-x shellでシェルを起動すると、 当然ながら(?)ローカルのshellではなくリモートのshellが起動する。 とっても便利。

--yasuyuki


Name:
Comment:

There is no comment.


2005-02-22 [emacs] 大文字小文字変換

「おいおい」シリーズ.めったに使わないので忘れていて,どうだっけと 思うことがときどきあります.そのたびに,誰かに聞いていると, 「それって,このまえも聞かれたよ.」と嫌われるかもしれません.^^; この際,ちゃんと覚えておこう(ここに書いておけば大丈夫?).

単語を大文字にする M-u
単語を小文字にする M-l
領域を大文字にする C-x C-u
領域を小文字にする C-x C-l
単語の最初の文字だけ大文字にする M-c

--nobsun


Name:
Comment:

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


Name:
Comment:
shiro: (Mon Feb 21 09:43:50 2005 )
「最初の」カラムってところに危険な臭いがしますね。カラムの順番が意味を持つ場合って他にありましたっけ。
nobsun: (Mon Feb 21 10:30:36 2005 )
そうなんです。本来、カラムは名前だけで識別されるべきもので、
順番が意味をもってはいけないはずなんですが。。。


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


Name:
Comment:

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 で動作させることが できます。

  1. Gauche を起動する
    % gosh
    gosh>
    
  1. ロードパスにカレントディレクトリを加える
    gosh> (add-load-path ".")
    ("." "/usr/local/share/gauche/site/lib" "/usr/local/share/gauche/0.8.3/lib")
    gosh>
    
  1. 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


Name:
Comment:

There is no comment.


2005-02-16 [Perl] 配列参照間で配列の中身をコピーする

use strict;

my $a = ['a', 'b', 'c'];
my $b;
my @tmp = @{ $a };
$b = \@tmp;

--yasuyuki


Name:
Comment:

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


Name:
Comment:

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


Name:
Comment:

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


Name:
Comment:
shiro: (Thu Feb 10 15:30:12 2005 )
ブラウザの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


Name:
Comment:

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


Name:
Comment:

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


Name:
Comment:

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


Name:
Comment:

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


Name:
Comment:
cut-sea: (Thu Feb 3 09:38:04 2005 )
やはり類似ネタでーす。
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


Name:
Comment:

There is no comment.


2005-02-01 [vigr] /etc/group の編集

「おいおい」シリーズ

/etc/passwd を編集するには、vipw を使って、 /etc/sudoers を編集するには、visudo を使うのに、 /etc/group を編集するのには、vi を使っていたそこの貴方(って、儂か)! vigr を使いましょう。

# vigr

--nobsun


Name:
Comment:

There is no comment.


このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us