ポインタ2

#include 
#include 
#include 

int main() {
    char buffer[1000] = "";
    int length;
    char *line = NULL;
    
    printf("type character and enter key");
    gets(buffer);
    length = strlen(buffer);
    if (length > 0) {
        line = (char *)malloc(length + 1);
        strcpy(line, buffer);
        printf("line = %s\n", line);
        free(line);
    }
    return 0;
}

ポインタ

ポインタはメモリーのアドレスを格納できる容器で、なおかつ、どの型のデータを指し示すかの情報を持っています。

下の例では、整数型のポインタ変数pと、整数型の変数iを宣言、iを1に初期化し、「*p」という表現で、変数iの中身を参照しています。

#include 

int main() {
    int *p, i = 1;
    p = &i;
    printf("%d\n", *p);
    return 0;
}

基本データ型

int, float, double, charの変数の大きさです。C言語には、文字列型がありません。C++はstringクラスがあります。

#include 

int main() {
    int i = 1;
    float f = 1;
    double d = 0.5;
    char c = 'a';
    
    printf("i = %d\n", i);
    printf("f = %f\n", f);
    printf("d = %f\n", d);
    printf("c = %c\n", c);
    
    printf("sizeof(i) = %d\n", sizeof(i));
    printf("sizeof(f) = %d\n", sizeof(f));
    printf("sizeof(d) = %d\n", sizeof(d));
    printf("sizeof(c) = %d\n", sizeof(c));
    
    return 0;
}
i = 1
f = 1.000000
d = 0.500000
c = a
sizeof(i) = 4
sizeof(f) = 4
sizeof(d) = 8
sizeof(c) = 1

comの参照アカウント

参照アカウント方式では、参照された側が死活管理を行っています。
参照する際に、「参照します」と通知し、参照が終了した際に「参照が終わる」と送ります。参照カウントが0になったときに終了処理を実行します。「オブジェクトを参照する」という通知は、.NETにより自動的に行われます。

参照を減らすという通知がMarshal.ReleaseComObjectです。

Application app = null;
try
{
      app = new Application();
      app.DisplayAlerts = false;
      Workbook book = null;
      try
      {
         book = app.Workbooks.Add();
         ((Range)(Worksheet)book.Worksheets[1]).Cells[1, 1].Value =
      book.SaveAs(Filename: @"c:¥temp¥abc.xlsx");
      book.Close(SaveChanges: false);
      app.Quit();
      MessageBox.Show("finish");
      }
      finally
      {
           if (book != null) Marshal.ReleaseComObject(book);
      }
}
finally
{
           if ( app != null )Marshal.ReleaseComObject(app);
}

ボール遊び

import java.awt.*;
import java.awt.event.*;

class MyFrame extends Frame
	implements Runnable{// t
	int w=600, h=600;
	int sleepTime=10;// t
	Thread thread=null;// t
	Ball[] ball=new Ball[200];
	
	MyFrame(String s){
		super(s);
		setSize(w, h);
		setBackground(Color.GRAY);
		setForeground(Color.WHITE);
		for(int i=0; i < ball.length; i=i+1){
			int x=(int)(Math.random()*(double)w);
			int y=(int)(Math.random()*(double)h);
			int r=(int)(Math.random()*255.0);
			int g=(int)(Math.random()*255.0);
			int b=(int)(Math.random()*255.0);
			int vx=(int)(0.02*(Math.random()-0.5)*(double)w);// t
			int vy=(int)(0.02*(Math.random()-0.5)*(double)h);// t
			ball[i]=new Ball(x, y, 5, new Color(r, g, b));
			ball[i].setVelocity(vx, vy);
			ball[i].setMyFrame(this);
		}
	}
	public void paint(Graphics g){
		for(int i=0; i < ball.length; i=i+1){
			ball[i].paint(g);
		}
	}
	public void start(){// t
		if(thread==null){
			thread=new Thread(this);
			thread.start();
		}
	}
	public void stop(){// t
		thread=null;
	}
	public void run(){// t
		while(Thread.currentThread()==thread){
			for(int i=0; i < ball.length; i=i+1){
				ball[i].move();
			}
			repaint();
			try{
				Thread.sleep(sleepTime);
			}catch(InterruptedException e){
			}
		}
	}
	public boolean checkLimit(int x, int y){// c
		return((x < 0)||(w < x)||(y < 0)||(h < y));
	}
}//end of class MyFrame
class Ball{
	MyFrame myFrame;// c
	int x, y, r;
	int vx, vy;// t
	Color c;
	
	public Ball(int x, int y, int r, Color c){
		this.x=x;
		this.y=y;
		this.r=r;
		this.c=c;
	}
	public void paint(Graphics g){
		Color gc=g.getColor();
		g.setColor(c);
		g.fillOval(x-r, y-r, 2*r, 2*r);
		g.setColor(gc);
	}
	public void setVelocity(int vx, int vy){//t
		this.vx=vx;
		this.vy=vy;
	}
	public void setMyFrame(MyFrame myFrame){// c
		this.myFrame=myFrame;
	}
	public void move(){
		x=x+vx;
		if(myFrame.checkLimit(x,y)){// c
			vx=-vx;
			x=x+vx;
		}
		y=y+vy;
		if(myFrame.checkLimit(x, y)){// c
			vy=-vy;
			y=y+vy;
		}
	}
}
public class ballplay{
	public static void main(String[] args){
		MyFrame myFrame=new MyFrame("BallTest");
		myFrame.addWindowListener(
				new WindowAdapter(){
					public void windowClosing(WindowEvent e){
						System.exit(0);
					}
				});
		myFrame.setVisible(true);
		myFrame.start();// t
	}
}// end of class BallTest

デジタル時計

1000ミリ秒ごとにThreadで再表示させて、まるで、数字が動いているかのようにみせます。run()、start()、stop()の三つのメソッドを記述しています。sleep()メソッドで、clockThreadスレッドを1000ミリ秒間、休止させています。

import java.awt.*;
import java.awt.event.*;
import java.util.Date;

class AnimationClockTestFrame extends Frame
 implements Runnable{
	private Thread clockThread=null;
	
	public AnimationClockTestFrame(){
		setSize(480, 80);
		setForeground(Color.BLUE);
		setFont(new Font("Monospaced", Font.BOLD, 24));
	}
	public void paint(Graphics g){
		Date date=new Date();
		g.drawString(date.toString(), 50, 60);
	}
	public void start(){
		if(clockThread==null){
			clockThread=new Thread(this, "Clock");
			clockThread.start();
		}
	}
	public void stop(){
		clockThread=null;
	}
	public void run(){
		while(Thread.currentThread()==clockThread){
			repaint();
			try{
				Thread.sleep(1000);
			}catch(InterruptedException e){
			}
		}
	}
}

public class watch{
	public static void main(String[] args){
		AnimationClockTestFrame frame=new AnimationClockTestFrame();
		frame.addWindowListener(
				new WindowAdapter(){
					public void windowClosing(WindowEvent e){
						System.exit(0);
					}
				});
		frame.setVisible(true);
		frame.start();
	}
}

AWT

AWTのクラスをメモ

Java.lang.Object
L java.awt.Component
L Button, Checkbox, Label, Choise, List, Scrollbar, Canvas, TextComponent(L TextField, TextArea), Container(L Window(Frame, Dialog), Panel(Applet))

import java.awt.*;

public class Calc1{
	public static void main(String[] args){
		Frame frame=new Frame("frame");
		frame.setLocation(200, 100);
		frame.setSize(300, 200);
		frame.setBackground(Color.BLUE);
		frame.setVisible(true);
	}
}

Google Chrome OS

Google Chrome OS ~最新技術と戦略を完全ガイド~を読みました。エンジニアではなく、ジャーナリスト・ライターの視点でgoogleの戦略が分析されており、新鮮味を覚えました。

Chrome OSの構成要素
[webアプリケーション][webサイト][chrome拡張]
[ウィンドウズマネージャ][chromeブラウザ]
[x window][システム・ライブラリ]
[Linuxカーネル]
[ファームウェア*]
[ハードウェア]

ちなみに、このハードウェアとは、従来のPCのBIOSに相当するもので、PC内のEEPROMに格納されており、ハードゥエアの初期化やLinuxカーネルの読み込みなどを行います。Biosとは異なります。

また、起動プロセスは高速化するため、シンプルな処理にしています。
[Chromo OS]
起動、メモリの初期化、カーネルの起動、ハードウェア初期化、各種デーモンの起動、ログイン、ブラウザの起動

[従来のOS]
起動、メモリー初期化、ハードウェア初期化、スプラッシュスクリーン表示、ブートローダーの起動、カーネルの起動、ハードウェアの初期化、スプラッシュスクリーンの表示、各種デーモンの起動、ログイン、常駐プログラムの起動、スタートアップアプリの起動、ブラウザの起動、ログイン

なるほど、これは処理速度が全く違いますね。起動が遅いと、イライラして、とりあえず席を立ちますからね。

webkitについては、また別の機会に。

ネットワークエンジニアの教科書

シスコシステムズ合同会社さんのネットワークエンジニアの教科書
を読みました。

章立ては以下の通り。
Chapter1 ネットワークエンジニアの仕事
Chapter2 ネットワークの基礎知識
Chapter3 ルーティングプロトコル
Chapter4 スイッチ・ルータのアーキテクチャ
Chapter5 セキュリティ
Chapter6 無線ネットワーク
Chapter7 データセンター
Chapter8 ユニファイド・コミュニケーション
Chapter9 トラブルシューティング・ガイド
Chapter10 トラブルシューティングの代表的なツール
Chapter11 ネットワーク機器のハードウェアと保守
Chapter12 トラブルの起きにくいネットワークの構築と運用
Chapter13 今後のネットワークエンジニアに求められるスキル

シスコの商品紹介、説明がかなり入っています。
技術トレンドとしては、SDN(Software Defined Network)および、NFV(Network Functions Virtualization)が次世代のネットワーク技術の潮流と述べています。SDNはコントローラーを独立させること、NFVは仮想化技術。要は全体設計ですかね。

無線LANの説明は読み応えありました。周波数が低い電波の方が屈折率が高く、電波が回り込みやすいそうです。セキュリティは、Open System, Shared key認証、ネットワーク認証が主たるものとのこと。ここはもっと勉強したいです。

ちなみに、Ciscoルーター機能を使えば、社内でtwitter, Dropbox, YoutubeのIPアドレスを探し出す事ができるそうです。お〜怖。