Linux管理者の初心者向けの書籍

Linuxの教科書―ホントに読んでほしいroot入門講座 (IDGムックシリーズ)

先日,久しぶりに,本屋でコンピュータ系の本がどんなのが売っているのかを見た。
(本を買うのは本屋ではなく,ネット通販ばっかりだった。)

ふと,一冊の本に目が留まる。
「Linuxの教科書」

本書より引用

雑誌Linux WORLDの「システム管理入門講座」(2002年11月号から2003年12月号)の記事をまとめたムック「本当に読んでほしいLinux入門」(2004年5月発行)をもとに,現状(2007年9月時点)を踏まえた大幅な加筆・修正を加えたものです。

とても読みやすい。文字は比較的少ないが,技術的にも読み物としてもクオリティが高い。

こりゃ3千円ぐらいかな?。と思い値段を見る。

…1,600円・・・!! この手の本としては安い!

買った。

Linux管理者の初心者向けの書籍だが,セキュリティ対策の話もしっかり書かれているので,これ一冊でもかなり使える。

2007年11月1日発行。内容もほぼ最新。
CentOS, Ret Hat Linux Enterprise Linux, Debian GNU/Linux, Ubuntu など
主要なOSに対応!
新しいうえに,これらのOS間の設定方法などの違いも書かれているので,初心者じゃなくても役に立ちます。

京都コンピュータ学院では,ネットワーク学科でこれに関することが勉強できます。

comments

私が愛用するワンチップマイコン

PIC16F84A

PIC16F84Aです

私が愛用しているワンチップマイコン。
・・・普通ワンチップマイコンなんて愛用しないか。
けど,これが おもしろいんだ。ロボットを作る技術にもつながっている。

ロボットといえば,1月29日にKCGの京都駅前校に自転車ロボット「ムラタセイサク君」がやってくるそうな。(NAIS講演会 情報システム学会日本支部(NAIS)特別講演会

一見すると,単なるICにしか見えないが,これでも,コンピュータとしての機能を一通り持っている。
組込みシステムに使われているものの1つ。
他にも同様なものがたくさんある。

これで何が出来るのかというと,たとえば自動車のデジタルスピードメータ。
私は実際に以前KCGの自動車制御学科の説明用に,これを使ってデジタルスピードメータを作成した。

実際に動いている映像をある所で見ることが出来る。
・・・既にその映像を見た人も多いかもしれない。
なぜなら,KCG オープンキャンパスの中で流される「KCGの学院紹介ビデオ」の中で,自動車制御学科の説明の所で流れているからだ。

実際に動いているのを見たい人は,オープンキャンパスに参加して学院紹介ビデオを注意深く見てみよう。
オープンキャンパスは一番近いので,1月26日(土)に開催されます。(今週末かよ)

PIC16F84Aを使えば,パソコンとの通信もできる。その様子も学院紹介ビデオに含まれている。パソコンの画面上にスピードメータが出でている。
パソコン画面に描かれたスピードメータで赤い針が動いているやつである。
こっちは,Visual C++ を使ってWindows用ソフトで作ってある。パソコン上で動き,ワンチップマイコンと通信して速度を表示するもの。
ワンチップマイコンの本体は。デジタルスピードメータの隣においてある。学院紹介ビデオには,一瞬だけ写っている。

ちなみに,このPIC16F84Aというワンチップマイコンは,以下のKCGのワークショップでも使われている。
これに参加すれば,「あなたも」これを使うことが出来る!
しかも 完成したものをもって帰ることが出来てしまう。

第4回ワークショップ 電子砂時計を作ろう(終了)
第10回ワークショップ 電子メッセンジャーを作ろう(3月30日)

興味がある人は是非参加してみよう。

イヤ,本当におもしろいのでおすすめです。(。。)

ちなみに,KCGでは,自動車制御学科や情報工学科やコンピュータ工学科やメディア工学科でこれに関する勉強が出来る。

————-
もうちょっと詳しく:

メーカー:マイクロチップ・テクノロジー
http://www.microchip.co.jp/

このワンチップマイコンは電源は2Vから6Vの範囲。けっこう適当でいい。(もちろん,電圧は一定に安定しているほうがいい。)
とりあえず乾電池2本で動く。

8bitコンピュータ パソコンは32bitとか64bitとか言っていることを比べるとかなり性能が低い。自由度が低い。しかし結構簡単に作れる。
動作クロックは最大20MHz で駆動する。パソコンに比べたらありえないぐらい遅い。
しかし,私は4MHzで使っている。十分というか,4MHzでも速すぎると思っている。

足の数は18本。好きなように使える足が13本ある。
 残り5本は電源用2本とリセット用1本とか,動作クロック入力に2本に使う。

足は,スイッチとか,センサーとか,電気を光らせたり,・・・等,回路を自由につなぐことが出来る。

書き込むプログラムで足の動作内容を変更して使う。

プログラミング言語(C言語やアセンブリ言語)を使って,好きなように電気を入力したり,電気を出力したりできる。

プログラミングは普通のコンピュータで行い,PICライターといわれる機械でプログラムを普通のコンピュータから書き込む。

——–
他に良く使われるワンチップマイコンにH8シリーズがある。

以前,このブログに出てきた「ETロボコン」で使われているLEGOマインドストームやKCGの部活のCINCSが参戦しているマイクロマウスは,H8が使われている。実際の自動車のエンジン制御のECUもこれが使われていることが結構ある。

H8の見た目は正方形をしたいかにもLSIという感じ。足が多い。PICよりも高性能。価格はPICよりも高い。というか,PICが安くて単純。

comments

Javaをマニアックに楽しむ方法

Javaには,実行中に任意のクラスをダイナミックロードできる。

<Javaを使っていないひとには,ぜんぜん面白くない記事です(--;。タブとか空白や  を入れても空白が入らない仕様なのでインデントされていません>

Javaはコンパイルすると,クラス名.class を出力する。
通常クラスを使う場合は,クラス名を書いてやったり,importで指定してやれば
使うことが出来る。

じゃあ,実行中に,任意のクラスをロードできないか?
例えば,クラス名をキーボードから入力し,そのクラスのフィールドやメソッドの一覧や
さらには,そのクラスのオブジェクトを作る方法は?



ObjectクラスとかClassクラスとかFieldクラスがある

import java.lang.reflect.Member;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

// 実験用のクラス。このクラスをロードしています。
class TestClass
{
public int num;
public double gas;
public static int static_val;
public void Proc(int a, String s)
{
System.out.println("a = "+ a + " s = "+s);
}
public static void TestProc2(double a, String s)
{
}
}

class DLoadClass
{
public static void main(String[] args) throws Exception
{
Class c = Class.forName("TestClass"); // 上記のclass TestClass のクラス情報ロード
Constructor cst[] = c.getDeclaredConstructors(); // コンストラクタ一覧取得。getConstructors じゃないのは,デフォルトのコンストラクタも取りたいので
Field f[] = c.getFields(); // フィールド一覧取得
Method m[] = c.getMethods(); // メソッド一覧取得

int i,j;

System.out.println(c.getName() + "クラスの情報");

/* フィールド一覧を出力 */
System.out.println("フィールド一覧:");
for(i = 0; i < f.length; i++) {
Class type = f[i].getType(); // 変数の型を取得
System.out.println(type.getName() + " "+ f[i].getName() ); // 変数の型 と 変数名
}

System.out.println();

/* メソッド一覧を出力 */
System.out.println("メソッド一覧:");
for(i = 0; i < m.length; i++) {
System.out.println(m[i].getName()); // メソッド名出力

Class ret_type = m[i].getReturnType(); // メソッドの戻り値の型
System.out.println("\t戻り値の型:"+ret_type.getName()); // 戻り値の型

System.out.println("\t引数の型一覧:");
Class paramsType[] = m[i].getParameterTypes(); // 引数の型一覧を取得
for(j = 0; j < paramsType.length; j++) {
System.out.println("\t"+paramsType[j].getName()); // 引数の型リストを出力します
}
}

System.out.println();

/* コンストラクタ一覧です */
System.out.println("コンストラクタ一覧:");
for(i = 0; i < cst.length; i++) {
System.out.println(cst[i].getName()); // コンストラクタ名(クラス名)表示

System.out.println("\t引数の型一覧:");
Class paramsType[] = cst[i].getParameterTypes(); // 引数の型一覧を取得
for(j = 0; j < paramsType.length; j++) {
System.out.println("\t"+paramsType[j].getName()); // 引数の型リストを出力します
}
}

System.out.println();

/* これを使って実際にオブジェクトを作りませう */
Object[] param = new Object[0]; // コンストラクタに渡す 引数リスト。引数の個数0
Object obj = cst[0].newInstance(param); // コンストラクタ一覧の

// TestClassのProcメソッドへ渡す引数の準備
Object[] param2 = new Object[2]; // 引数一覧
param2[0] = new Integer(3); // int型は Integerにする必要あり
param2[1] = "OK!"; // String型は文字列直でおけます。

m[0].invoke(obj, param2); // ↓のコード同じ(笑) tは TestClass型です。

//TestClass t = new TestClass();
//t.Proc(3,"OK!");
}
}




ダイナミックロードはもっと簡単にできないのか?
ロードするクラスに実装するインターフェイスを決めていれば,結構簡単に出来ます。
もちろんインターフェイスにしかないメソッドしか呼び出せないが,
十分すぎるでしょう。

import java.lang.reflect.Constructor;

// このインターフェイスを実装するクラスに限定
interface ITestIfc
{
void Proc(int a, String s);
}

// 実験用のクラス。このクラスをロードしています。
class TestClass2 implements ITestIfc
{
public int num;
public double gas;
public static int static_val;
public void Proc(int a, String s)
{
System.out.println("a = "+ a + " s = "+s);
}
public static void TestProc2(double a, String s)
{
}
}

class DLoadClass2
{
public static void main(String[] args) throws Exception
{
Class c = Class.forName("TestClass2"); // 上記のclass TestClass のクラス情報ロード
Constructor cst[] = c.getDeclaredConstructors(); // コンストラクタ一覧取得。getConstructors じゃないのは,デフォルトのコンストラクタも取りたいので

Object[] param = new Object[0]; // コンストラクタに渡す 引数リスト。引数の個数0
ITestIfc i = (ITestIfc) cst[0].newInstance(param); // オブジェクト作成。引数なしコンストラクタ呼び出し
i.Proc(3,"OK!");
}
}




もっと自分でロードする部分を用意しいたい場合は
ClassLoader
を継承したオリジナルのクラスを作る。
このClassLoaderクラスは,Classのオブジェクトを作成するクラスで
外部からクラスをロードして独自のClassをロードできる。

継承して,オーバーライドしなければならないメソッドは以下の2つ。
以下が基本形態だ。

import java.util.*;
import java.io.*;

class OrgClassLoader extends ClassLoader {

public Class loadClass(String name) throws ClassNotFoundException {
return loadClass(name, true);
}

protected Class loadClass(String name, boolean resolve)
throws ClassNotFoundException {
Class cl = null ;
try {
return findSystemClass(name); // ここで独自の読み込みを返せば,ダイナミックロードは完璧!
} catch( Exception e){
System.err.println(e);
}
return cl;
}

}

さらに細かく設定するには,

Class defineClass(String name, byte[] data, int off, int len)
を使う。
name : クラス名
data : コード本体が入った配列
off : dataの配列の何番目から使うか? data全体にするには 0
len : data のoffから何個がクラスか data全体にするには data.length

で設定して,戻り値をreturn すればいい
———-

参照:wiki内
http://ja.wikipedia.org/wiki/Java_Platform,_Standard_Edition#java.lang.reflect

comments

PHPに雪がつもっています

PHP関連の調べ物していた。

一応,手元にPHPの本はあるがインターネットで調べていた。

ん。そういえばPHPのオンラインマニュアルには左上にPHPのロゴみたいな画像があるんだけど,冬になると雪がつもる。
http://jp.php.net/manual/ja/index.php
寒そうだ。

通常の画像はこっち
http://jp.php.net/images/php.gif

ちなみに雪がつもっている画像はファイル名にsnowってついています。
http://jp.php.net/images/php_snow.gif
ほかにもあるのかなぁ。。。

comments

年越しカウントダウンするページ作ってみます?

今年も残すところあとわずか。

年越しカウントダウンしてみませんか?

・・・ということで(?)HTML+JavaScriptで,年越しカウントダウンするウェブページを作ってみました。ご自由に使ってください(。。

<html>

<head>
<script language="JavaScript" type="text/javascript">
<!–
var tid = 0;
var newYear = new Date(2008,1,1);

function update_time() {
var today = new Date();

var s_time = newYear.getTime() – today.getTime() ;
var s_time_obj = new Date();
s_time_obj.setTime(s_time);
if(s_time > 0){
document.f.d.value = "2008年まであと"+s_time_obj.getDate()+"日"+s_time_obj.getHours()+"時間"+s_time_obj.getMinutes()+"分"+s_time_obj.getSeconds ()+"秒";
tid = setTimeout(‘update_time()’, 1000);
}else{
clearTimeout(tid);
document.f.d.value = "Happy New YEAR!";
alert("Happy New YEAR!");
}
}
// –>
</script>
<title>2008年1月1日までのカウントダウン</title>
</head>

<body onload="update_time();">

<form name="f">
カウントダウン:<br />
<input type="text" name="d" SIZE="60" />
</form>

</body>
</html>

comments

ネットワーク対戦ゲームがVB6とかブラウザで簡単に出来るActiveXコントロール

ネットワーク対戦ゲームがVB6とかブラウザで簡単に出来るActiveXコントロールの紹介。

誰かネットワーク対戦ゲームを作ってみませんか?
若干バグありですが,結構使えます。

ネットワーク対戦ゲーム作成入門・勉強にどうぞ。

これは,私が2000年から2001年頃にVisual C++を使って ATL COMで作成したActiveXコントロールです。ActiveXなので,インターネットエクスプローラとかで実行できます。あのころは若かった(何)

ソースはどこかにあると思うので(まだ非公開),ご希望の方にはあげます。

ダウンロード先: さとーしのソフトウエア
http://www2s.biglobe.ne.jp/~satosi/soft/#sinet

このActiveXは、なんと、ネットワークゲームを簡単が簡単に作成できる
システムです
方式は、TCP/IPネットワークで、TCP接続のサーバ – クライアント型です
ネットワークを使用しているという意識を出来る限り、取り除きました
簡単に作れて、かつ、強力である。というのを目標に設計しました
Visual Basic 6.0(SP4)でチャットができるサンプルプログラムが、付いています。
(DirectPlayではありません。オリジナルのプロトコルです)

これと同じコードが使われているネットワーク対戦ゲームも公開しています。(ActeiveXじゃなくて,純粋なC++コード部分だけ。)
サブマリン・デスマッチ for Win32 Version 1.01
INET25ゲーム Version 1.01
Inet 5Balls Version 1.01a
INET○×ゲーム Version 1.01
等です。いずれも学生時代に作ったネットワーク対戦ゲームです。

マニュアルとか
http://www2s.biglobe.ne.jp/~satosi/soft/SInet/SInet.txt (付属テキスト)
http://www2s.biglobe.ne.jp/~satosi/soft/SInet/sinet.doc (ワードの図付き説明)
http://www2s.biglobe.ne.jp/~satosi/soft/SInet/index.html (HTMLでの説明)

今は,VB.NETだよねぇ・・・。
コードが違うので,マニュアル作り直さないといけないのかなぁ・・・。
.NET用のコンポーネントをそのうち作らなきゃねぇ。

参照:
VB 6.0 ユーザーのための VB .NET 移行ガイド – ActiveX コントロールhttp://www.microsoft.com/japan/msdn/net/vbtransitionguide/chapter5/chapter5_6.aspx

.NET からの COM コンポーネントの呼び出し
Microsoft .NET へのアップグレード
http://www.microsoft.com/japan/msdn/net/upgrade/callcomcomp.aspx

comments

ATL/WTL C++ Windowsプログラミングの紹介

WTL

ATL/WTL C++ Windowsプログラミングの紹介

C++を使ったWindowsプログラミングといえば,MFCを使ったものが標準ですが,DLLとかが必要だったり,プログラムサイズが大きくなったり,使用するメモリ量が多いので,軽量な配布しやすいプログラムを作成しにくい。

ATLは,COMプログラミングのために用意されたテンプレートクラスライブラリ。
(COMとは・・・下記参照)
Visual C++標準のATLではウインドウアプリケーションを作成できない。しかし,WTLというのをダウンロードしてVisual C++に入れてやると,ATLにウインドウアプリケーションの作成部分の機能が追加される。

C++を使って軽量なWindowアプリケーションを作れる様になる。

Win32APIをC言語で書くよりもコードが少なく,C++のオブジェクト指向でプログラムが作成できる上に,プログラムサイズもMFCを使うよりもコンパクトに仕上がる。

知っていると結構得します。C++でWindowsプログラムを気軽に書きたい。という人におすすめ。もちろん,大規模なアプリケーションの作成も出来ますよ。

ちなみに,ATLは,C++の悪名高き多重継承を当たり前の様に使う。
テンプレートも多様されています。
※多重継承やテンプレートの知識が少なくても十分使えます。
 COMが分からなくても,使えます。

WTL自体は,結構昔からあるのですが,マイクロソフトの正式サポートではないので情報が少ない。そのため多少苦労しますが,それでもWin32APIをC言語で使うよりはましな感じがします。

クラスはMFCとそっくりなので,クラスのメンバ関数の使い方はMFCのリファレンスマニュアルでいけるでしょう。
MFCプログラミングをしたことがあるひとならば,すぐに使いこなせるでしょう。

詳しくは,WTLで検索をかけてください。
わずかですが,WTLについて解説したページがあります。

参考・詳細URL:
http://msdn.microsoft.com/msdnmag/issues/07/12/WindowsCPP/default.aspx?loc=jp

ダウンロード:
Windows Template Library (WTL) 7.1 (VC++ 6.0のウイザード用)
http://www.microsoft.com/downloads/details.aspx?familyid=1BE1EB52-AA96-4685-99A5-4256737781C5

Windows Template Library (WTL)最新( 8.0 )
http://sourceforge.net/projects/wtl

—————
補足:

COMとは・・・
Windowsで用意されたプログラム部品の仕組み。
オブジェクト指向がとりいれらていて,プログラミング言語に依存しないオブジェクト(プログラムの部品)である。
IUnknowインターフェースを継承したインタフェースを実装するオブジェクト。
いまいち分かりにくいので,具体的には以下の様なものがCOMで提供されている。

DirectXのラインタイム。
Webページ組込みオブジェクトのActiveXオブジェクト(自作を含む)
Visual Basicで使えるコンポーネント(フォームの部品。ボタンとか)

APIみたいなものだが,APIは関数なのに対して,COMは,オブジェクトを作成取得して,別のプログラムの部品(オブジェクト)として使える。

comments

C言語の源流。UNIXのソースと解説

Lions’ Commentary on UNIX (Ascii books)

C言語は,UNIXというOSを記述するためにつくられた。
そして,実際に書かれたUNIXのkernelのプログラムソースリストとその解説が書かれた本だ!!
コンピュータエンジニアならば,ぜひ読むべし。(ただし,読んでいるとねむくなるが・・・。)
というか,学生向けの本である。

アマゾンレビューで星5つ!
それらのレビューを読んでいただく方がわかるかと・・・。上の本のリンクから見ることが出来ます。

今のC言語とはかなり違って,関数に戻り値の型が書かれていない(省略すればint型扱い)とか,引数の型の書き方が違うなどがあるが,OSの勉強に向いている。

たとえば,こんな感じ↓
func(a,b)
int a,b;
{
register x;
x = 10;
}

これは

int func(int a, int b)
{
int x;
x = 10;
}

と同じ。 ※register キーワードは今でも使える。
return ないから,警告でるが,問題ない。
最初のC言語は void キーワードがなかった。戻り値なしは,戻り値の型自体を書いていない。しかし,戻り値の型を省略すると int 扱いなので,return で値を返していない関数がたくさんあるという状態になっている・・・。という感じになっている。

comments

公演をみてきました。

http://blog.kcg.ne.jp/blog/mosquito/1779
↑で紹介がある
とよこさんの出ている公演をみてきました。
かなり面白かったです。

タイトル:―夜想―子午線を咀嚼する。
劇団名:PASSIONE

話の始まりは,殺人事件がおこり,容疑者は4人の探偵!

話は展開が予想をはるかに超えて広がっていきます。
予想外すぎるのですが,無理がなく,とても楽しめます。

これだけでも結構よくできた設定ですが,見所はそれだけではありません。

ステージはとてもシンプルですが,「ある道具」を使って,
さまざまな形や動きや「トリック」がとても素晴らしい。
これらの視覚効果もかなり面白く,それだけでも,十分楽しめます。

ほめすぎじゃないか?という感じのレビューとなってしまいましたが,私はかなり面白かったと思います。

色んな意味で必見というのは,間違いないです。
是非見にいってみてください。

comments

Wikipedia「削除された悪ふざけとナンセンス」な記事

Wikipediaは,情報量は多いが,信頼できない場合が多い。

Wikipedia:削除された悪ふざけとナンセンス

この項目には滑稽であるという理由で保存されている無意味な内容や冗談などを含んでおります。これらは意図されて作成されたものではなく、あくまで楽しむためだけのものであるため、(ウィキペディアそのものの研究を除いて)真面目な研究の材料にはなりえません。

Wikipedia全体の記事の数から考えると,案外数が少ない。

こう考えると記事の信憑性って,結構高いのではないだろうか?
まぁ,記事は情報操作されている可能性もあるので,気をつける必要はあるが。

Wikipedia自体を情報源として使わないで,記事の情報源(ソース)が付いているものを使おう。

comments