過去の小技

 

pathの追加
cp
     ファイルをコピー
locate   高速検索
xhost   リモートディスプレー
terminal ターミナルの操作
gdb     簡単なデバッグ
wmaker  ドックから複数のターミナルを起動
ダブルバッファ  javaアプレットでちらつき防止

 

pathの追加

linuxの解説書をみながら,書かれている通りに
commandを打ち込んだのにcommand not foundと
エラーが出てくることはありませんか.

例えば,ネットスケープをインストールした後,
netscapeと打ち込んでもcommand not foundと
表示されたことはありませんか.

このエラーは本当にそのコマンドがないか,
pathが通っていないときに起こります.

ここからはpathの設定を行い,netscapeと打ち込んで
netscapeが立ち上がるようにします.
ここではnetscapeという実行ファイルが/usr/local/netscape7.1/bin/
ディレクトリのなかにあるとします.

まずviやemacsなどで~/.bash_profileを開きます.
~/.bash_profileを開くと
PATH=$PATH
という行があるはずです.

この行を
PATH=$PATH:/usr/local/netscape7.1/bin

と編集すると,次にlinuxを立ち上げたときは
terminalでnetscapeと打ち込むだけでnetscapeがたちあがります.

編集した内容をすぐ適用したいときは

source .bash_profile

とすればすぐ適用できます.

 

cp

cpの基本は

cp コピー元 コピー先

という書式でコピーをします.

cpの応用
cpにオプションつけるといろいろできます.
ディレクトリをコピーしたいときは

cp -r コピー元ディレクトリ コピー先ディレクトリ

-rだけだと同じファイル名が存在する場合,上書きしていいですかって聞かれます.
そんなのうっとうしいって人は

cp -rf コピー元ディレクトリ コピー先ディレクトリ

としましょう.さらに,-uというオプションをつけると,
最後に編集した時間が同じ,またはコピー先の方が
新しい場合はコピーしなくなります.

cp -ruf コピー元ディレクトリ コピー先ディレクトリ

 

locate

locateはファイルを高速で検索するコマンド
例えばshutdownというファイルをハードディスク全体から
探したいときは

locate shutdown

とします.locateの仕組みはハードディスク全体のファイル構成を
データベースとして保存しておき,そのデータベースから
ファイルを検索します.だから早い.

しかし,ダウンロードしたてのファイルはlocateでみつかりません.
なぜなら,データベースは少し前の状態だからです.
このデータベースは自動的に更新されますが,今すぐ更新したいというときは

su
updatedb

としましょう


xhost

今日は他人のディスプレーに自分のパソコンで起動した
プログラムを表示させる,または,他人のパソコンで起動した
プログラムを自分のディスプレーに表示させる技を紹介します.

まず,準備として,自分のIPアドレス,他人のIPアドレスを
調べておきます.

@自分のパソコンのプログラムを相手のディスプレーに表示するには
相手のパソコン上でターミナルを開き,

xhost +自分のパソコンのIPアドレス

と打ち込みます.
例として,xeyesを相手のPCに表示させるには

xeyes -display 相手のIP:0.0

とします.そうすると相手のPCにxeyesを表示させることができます.

A相手のパソコンのプログラムを自分のディスプレーに表示させるには

xhost +相手のパソコンのIPアドレス

と打ち込みます.
例として,xeyesを自分のPCに表示させるには

xeyes -display 自分のIP:0.0

とします.そうすると自分のPCにxeyesを表示させることができます.

gtkで作られたプログラムは -display が --display になっているかもしれません.

注意: 悪用はやめましょう.

terminalの小技

terminal上で作業しているとき,以前,使用したコマンドを
もう一度使いたいってことがある.
コンパイルのコマンドなどは入力するのが面倒.もし,
直前にコンパイルしたのであれば,terminal上で
↑またはC-pを押してみる.
すると先ほど入力した,コマンドが表示される.
入力したコマンドは ~/.bash_historyというファイルに保存されている.

↑を押しつづけるとずっと前のコマンドも探すことができる.

いつ実行したかわからないけど,最近コンパイルした.
それで,もう一度コンパイルしたいってときは
C-r gccと入力してみよう.すると,~/.bash_historyの中から
gccが含まれているコマンドを探してくれる.
みつかったコマンドが目的のコマンドでなかったら,つづけて
C-rを押してみよう.~/.bash_historyの中からどんどんさかのぼって
検索してくれます.

terminal上ではemacsのカーソル操作がそのまま使えます.
例えば,行頭へジャンプしたいときは
C-aとしてみましょう.

C-kで1行消去ってのもできます.

他にもいろいろできるんで試してみましょう.

デバッグ

1から10まで,足し合わせるプログラムを作ってみた.
こんな感じ↓

add.c

#include<stdio.h>
int main(void){
  int i;
  int ans ;
  for(i=1;i<11;i++)
   ans+=i;
  printf("%d\n",ans);
}

実行してみると,55にならないぞ.なんでだ?

こんなときはデバッグしよう.

デバッグするとき,コンパイルのオプションは-gだったな.

gcc -g -o add add.c

んで,デバッグのソフト起動するときは

gdb add

一回普通に実行してみようかな.

<gdb> r (実行)

やっぱり55にならない.
ソースファイルはどうなってるんだ?

<gdb> list (プログラムのソースを表示)

6行目で一旦停止させて,ansの値をのぞいてみよう.

<gdb> b 6 (ブレイクポイントを6行目に設定)
<gdb> r  (6行目まで実行)
<gdb> p ans  (6行目まで実行した段階のansの値を表示)


ans の値が134517964って値になってる.そうか,
ansの初期化を忘れていた.
6行目に ans=0;を挿入して,コンパイルしなおすか.

<gdb> q (gdbの終了)
emacsなどでソースファイルを編集
gcc -g -o add add.c
./add
55

今度はちゃんと55と表示されたぞ.
めでたし,めでたし.

windowmakerの設定

windowmakerを使っていて,右端のドックから
terminalを一つ起動すると,二つ目はドックから
起動できない.

そんなときはterminalのドックを
右クリック→設定
アプリケーションのパスと引数の欄に

/bin/sh -c "exec gnome-terminal &"
と入力します.gnome-terminalの部分は
自分の使っているターミナルでもかまいません.

つぎからは,ドックから複数のターミナルを開くことが
できます.

ダブルバッファ


ダブルバッファリングというのは動きのあるアプレットを
作ったときにちらつきをおさえる方法です.

ここでは,paint(Graphics g)メソッドを
g.drawLine, g.drawStringなどで定義して
ちらついてしまうソースを作ってしまった後で,
ダブルバッファリングを追加する方法について紹介します.
ダブルバッファリングの原理はわからなくてもいいという人
むけです.

まず,ソースの最初のあたりに

public class Hogehoge extends Applet, Runnable{

Image buffer;    //←この行を追加
Graphics bufferg; //←この行を追加
Dimension d;    //
←この行を追加

次に,initメソッドのところへ

public void init(){

d=getSize();                 //←この行を追加
buffer=createImage(d.width, d.height) //←この行を追加

最後に,paintメソッドのところへ

public void paint(Graphics g) {

if(bufferg==null)            //←この行を追加
   bufferg=buffer.getGraphics(); //←この行を追加

g.setColor, g.setFont などg.と続くところをすべて
bufferg. に置き換える.

paint メソッドの最後に

g.drawImage(buffer,0,0,this);  //この行を追加

これで,appletにダブルバッファリングの機能が追加されます.
すべてのappletがこれだけでうまくいくとは限りませんので
ご了承ください.