忍者ブログ

[PR]

2025年01月19日 ()
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

install w3m from yum

2008年09月19日 (linux)

w3m

スクリーンブラウザ.
スクリーン上で起動するので非常に動作が軽快,スクリーンブラウザながら最近は画像も表示できる.

インストール

# yum install w3m.i386
  • w3m.i386-0.5.1-15.el5

がインストールされる.
ついでにw3mの画像表示プログラムw3m-img.i386もインストール.

# yum install w3m-img.i386
  • w3m-img.i386-0.5.1-15.el5

がインストールされる.

テスト

% rehash
% w3m http://www.google.co.jp/

グーグルのトップページのロゴが表示された.
せっかくなので記念写真.一度w3mを終了させて.

% (sleep 10; import -window urxvt -quality 100 w3m_withimg.jpg) &
% w3m http://www.google.co.jp/

10秒待つとカレントディレクトリに仮想ターミナル(ここではurxvt)のスクリーンショット(w3m_withimg.jpg)が生成される.
記念写真

PR

in microwave

2008年09月19日 (neta)

午前0時,電子レンジでミルクを温めてスープを飲んだ.噴き零さないように注意してと・・そんなことを考えていた.そして,スープを飲みながらyoutubeでぐぐった.

石鹸を電子レンジで・・
http://jp.youtube.com/watch?v=7lAOOwMNodA&feature=related
ピンポンを電子レンジで・・
http://jp.youtube.com/watch?v=s0uX7DIkT3E&feature=related
大きなタマゴをレンジで・・
http://jp.youtube.com/watch?v=IMM7s5RRqT4&NR=1
CDをレンジで・・ちょっとカッコいいかも
http://jp.youtube.com/watch?v=Z1Wegnjmd-8&feature=related
ニュートンのゆりかごをレンジで・・爆発してます
http://jp.youtube.com/watch?v=Lkn6fMn9eqU&feature=related
携帯電話をレンジで・・CG
http://jp.youtube.com/watch?v=k0TSyIn5KMo
プラズマ
http://jp.youtube.com/watch?v=AE3dRBlQjTE

この中で家庭で実験できるのはCDと石鹸くらいでしょうか・・あとは危険度が高すぎます・・・どちらにしろ危険ですが.
よいこはぜったいにまねしないでね.

diff: patch

2008年09月10日 (linux)

command

% cat >patchtest.old
aaa
bbb
ccc
% cat >patchtest.new
aaa
xxx
ccc
% ls
patchtest.new  patchtest.old  patchtest.txt
% diff patchtest.old patchtest.new 
2c2
< bbb
---
> xxx
% diff -c patchtest.old patchtest.new 
*** patchtest.old	2008-09-09 20:53:01.000000000 +0900
--- patchtest.new	2008-09-09 20:53:17.000000000 +0900
***************
*** 1,3 ****
  aaa
! bbb
  ccc
--- 1,3 ----
  aaa
! xxx
  ccc
% diff -c patchtest.old patchtest.new >patchtest.patch
% patch <patchtest.patch 
patching file patchtest.old
% diff patchtest.old patchtest.new   
% 

note

cf.
% man patch
% man diff

Makefile

2008年09月08日 (c)

Makefile概要

Cなどでプログラムを作るとき1つのファイルで処理が終わってしまうような簡単なプログラムなら,

% ls
source.c
% gcc source.c
% ls
a.out  source.c

のようにそのソースをコンパイル&リンクして実行ファイルを得れば良いが,数10,数100のファイルなどからなる大きなプログラムになると

% ls
死ぬほど多いソースファイル
% gcc 死ぬほど多いソースファイル

などとやっていては1回の実行なら良いが,バグが見つかり1つのファイルのみを修正してコンパイル&リンクをしようとしたとき,再び全てのファイルについてコンパイル&リンクをしなくてはならず時間効率が悪い.そこでMakefilemakeコマンドを用いると,修正したファイルのみをコンパイルし,リンクを行うということが可能である.コンパイルの時間が短縮できるとともにコマンドをいちいち打つ必要がないため手間も省け,効率的である.

まずは基本

同じディレクトリ内に以下のような3つのファイルがある.(Makefile, hello.c, helloworld.c)
このうちプログラムのソースはhello.chelloworld.cこの2つのファイルをMakefilemakeコマンドを使ってコンパイル,リンクする.

source(Makefile)

# Makefile
helloworld: helloworld.o hello.o
    gcc -o helloworld helloworld.o hello.o

helloworld.o: helloworld.c
    gcc -c helloworld.c

hello.o: hello.c
    gcc -c hello.c

clean:
    rm -f helloworld.o hello.o

source(hello.c)

#include <stdio.h>

void hello(void)
{
    printf("hello world\n");
}

source(helloworld.c)

#include <stdio.h>

int main(int argc,char *argv[])
{
    void hello(void);

    hello();

    return 0;
}

ここで以下のようにコマンドを打つ

% ls
Makefile  hello.c  helloworld.c
% make
gcc -c helloworld.c
gcc -c hello.c
gcc -o helloworld helloworld.o hello.o
% ls
Makefile  hello.c  hello.o  helloworld  helloworld.c  helloworld.o
% ./helloworld 
hello world

makeコマンドを実行すると

gcc -c helloworld.c
gcc -c hello.c
gcc -o helloworld helloworld.o hello.o

の3コマンドが実行されていることがわかる.まず,上2つでコンパイルを行い,オブジェクトファイルを作成,その後リンクしhelloworldという実行ファイルを生成する.

この状態でもう一度makeする.

% make
make: `helloworld' は更新済みです

既にhelloworldは最新版でありコンパイル&リンクは必要ないので何も実行されない.
次にMakefileの最後の2行

clean:
    rm -f helloworld.o hello.o

これはmakeコマンドの引数に指定すると,指定されたコマンドを実行すると言う意味である.
この場合

rm -f helloworld.o hello.o

が実行され,helloworld.oとhello.oというリンクに使われたオブジェクトファイルが2つ削除される.

% ls   
Makefile  hello.c  hello.o  helloworld  helloworld.c  helloworld.o
% make clean
rm -f helloworld.o hello.o
% ls
Makefile  hello.c  helloworld  helloworld.c
% 

マクロ,サフィックスルール

Makefileを以下のように修正する.helloworld.chello.cは使いまわしする.

source(Makefile)

# Makefile

CC=gcc
OBJS=helloworld.o hello.o

helloworld: helloworld.o hello.o
    $(CC) -o $@ $(OBJS)

.c.o:
    gcc -c $<

clean:
    rm -f $(OBJS)

3,4行名

CC=gcc
OBJS=helloworld.o hello.o

は代入文でCCgccを,OBJShelloworld.o hello.oを代入することを表す.
代入された変数を参照するには$(変数名)のようにする.
この場合,7行目

$(CC) -o $@ $(OBJS)

$(CC)gccに,$(OBJS)helloworld.o hello.oに置き換えられる.
同じく7行目$@は現在のターゲットのフルネームを取得する.ここではhelloworldに置き換えられる.つまり7行目

$(CC) -o $@ $(OBJS)

は,

gcc -o helloworld helloworld.o hello.o

に置き換えられる.

次に9,10行目

.c.o:
    gcc -c $<

は,.cのファイルを.oファイルに変換するということを表す.
$<はターゲットに依存している単一のファイルをに置き換えられる.この場合,hello.oが依存されているときは,

gcc -c hello.c

に置き換えられ,helloworld.oが依存されているときは,

gcc -c helloworld.c

に置き換えられる.以上を踏まえてmakeコマンドを実行する.

% rm helloworld
% ls
Makefile  hello.c  helloworld.c
% make
gcc -c helloworld.c
gcc -c hello.c
gcc -o helloworld helloworld.o hello.o
% ls
Makefile  hello.c  hello.o  helloworld  helloworld.c  helloworld.o
% ./helloworld 
hello world
% make clean 
rm -f helloworld.o hello.o
% ls
Makefile  hello.c  helloworld  helloworld.c
% 

上記のmakeコマンドと同じ結果を得られた.
このようにマクロ,サフィックスルールを用いることによりMakefileの汎用性を高めることができる.

Makefileについてはこれくらい知っておけば大体大丈夫だと思う.

化粧水自作

2008年09月06日 (memo)

なぜ自作か

どの化粧水がいいのだろう・・調べていくうちにある気になるワードにいきつく,"界面活性剤",化粧水ではどうやら防腐剤として使われているらしい.他にも乳化作用もあることから美容液などの乳化にも使われているらしい.
っというわけでPC自作の次は化粧水の自作に挑戦してみるわけだ.

レシピ

いろいろ検索してみると簡単に作れそうなレシピを発見
今回はこれで作ることにする.

薬品名分量
グリセリン10cc
尿素50g
200cc

これを10倍に薄めて使うらしい.

今回用意したもの

品名値段
グリセリン100ml398
尿素100g504
350mlペットボトル(おいしい水か何か)105
電子天秤1270
計量カップ160
詰め替えボトル98
水道水-
合計2535

作る

保存には350mlのペットボトルを使うことにする.よく洗ってその中にグリセリンを入れる.10ccを計れる容器がないのでペットボトルの蓋を使う.
ペットボトルの蓋の内側にある線までが5ccらしい・・一応確認してみたが10杯で計量カップの50ccの線まで入ったので間違いないようだ.
次に尿素を入れる,秤は持っていなかったので家にあるもので天秤まで自作しようと思ったが,誤差が出そう&労力が結構いりそうなので素直に電子天秤を 買ってきた.
最後に水を入れる.計量カップで200ccを計ってペットボトルに入れる.
蓋をよく締めて尿素が完全に溶けるまでよく振る.完成!
このペットボトルは保存用に使い.10倍に薄めたものは詰め替えボトルに入れて洗顔石鹸の隣に置いておく.

留意点

  • 尿素はホームセンターの園芸コーナーにもあるが重金属など不純物を含んでいる可能性もあるので薬局で買う方が良い.
  • グリセリンは10cc〜お好みで調合する.水っぽいのがよければ少なめに,トロトロがよければ多めにする.
  • 水は水道水でOK,精製水の方が良いかもしれないが・・
  • 消費期限は要冷蔵で約半年.変な匂いがしたら腐っているかもしれないので使わない方がいいかも.
  • 尿素は水に溶けるとき溶解熱を発する(ちょっと冷たくなる).