問い続ける男

問い続ける男
・・・実際に問い続けるのは,このページを見ている人ですが。

考える人の像が赤い携帯電話を持ったフラッシュ。
像が動きます。。。
ただのフラッシュではなく,質問メールに答えるフラッシュだ。
キャラクターとしてもかなり面白い。ってかこりすぎ。

使い方は…
質問事項と返信先メールアドレスを記入すると,
フラッシュの中の考える人の像の持つ携帯電話にメールとして届く。
そしてその像がメールアドレスに返信してくるというもの。

。。。これは,実は自動車メーカーのアウディの広告メールを送るシステムだったりする。

何度もすると,「暇なのか」など,複数の異なるコメントをくれる。よく作りこまれている。

一般的な言葉以外に,「TT」とか「R8」などのAudiのクルマの名前を入れると,そのクルマの解説をしてくれる。

Audiの関係している言葉にも詳しく答えてくれる。たとえば,「ルマン24時間レース」とか。

わたしはさらに「クワトロ」という言葉を送ってみた。

すると…

クワトロか。
なかなかの車好きだな。もともとオフロード用だった4WDというしくみを、はじめて乗用車に組み込んだのがアウディの「quattro」だ。いわばクワトロは、常に時代の先端を切り開くアウディの象徴みたいなものだな。

Audiのフラッシュに車好き認定をうけました(。。;

そうそう,車好きといえば,京都コンピュータ学院で
3月2日(日)にクルマ・バイク好き集まれのワークショップをやります。
グランツーリスモ5プロローグができるらしいので,結構楽しみにしています。

comments

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