#contents


*マルチメディアプログラミング実習 2015年度後期 [#gc8fcaaf]


**欠席回数表 [#o1c91481]

欠席回数が多くて単位が出ない人は、幸いいらっしゃらないようです(全員3回以下)。
欠席回数は成績に反映しますので、
間違いがあったら至急連絡ください。


|学籍番号|10月8日|10月15日|10月22日|10月29日|11月26日|12月10日|12月17日|12月24日|1月7日|1月14日|1月21日|欠席回数合計|
|1120525|0|0|0|0|0|0|0|0|1|1|1|3|
|1420501|0|0|0|0|0|0|0|1|0|0|0|1|
|1420502|0|0|0|0|0|0|0|0|0|1|1|2|
|1420503|0|0|0|0|0|0|0|0|0|0|0|0|
|1420504|0|0|0|0|0|0|0|0|0|0|0|0|
|1420505|0|0|0|0|0|0|0|0|0|0|0|0|
|1420506|0|0|0|0|0|0|0|0|0|0|0|0|
|1420507|0|0|0|0|0|0|0|0|1|0|0|1|
|1420508|0|0|0|0|0|0|0|0|0|0|0|0|
|1420509|0|0|0|0|0|0|0|0|0|0|0|0|
|1420510|0|0|0|0|0|0|0|0|0|0|0|0|
|1420511|0|0|0|0|0|0|0|0|0|0|0|0|
|1420512|0|0|0|0|0|0|0|0|0|0|0|0|
|1420513|0|0|0|0|0|0|0|0|0|0|0|0|
|1420514|0|0|0|0|1|0|0|0|0|0|0|1|
|1420515|0|0|0|0|0|0|0|0|0|0|0|0|
|1420516|0|0|0|0|0|0|0|0|1|0|0|1|
|1420517|0|0|0|0|0|0|0|0|0|0|0|0|
|1420518|0|0|0|0|0|0|0|0|0|0|0|0|
|1420519|0|0|0|0|0|0|0|0|0|1|0|1|
|1420520|0|0|0|0|0|0|0|0|0|0|0|0|
|1420521|0|1|0|0|0|0|0|0|0|0|0|1|
|1420522|0|0|0|0|0|0|0|1|1|0|0|2|
|1420523|0|0|0|0|0|0|0|0|0|0|0|0|
|1420525|0|0|0|0|0|0|0|0|0|0|0|0|
|1420526|0|0|0|0|0|0|0|0|0|0|0|0|
|1420527|0|0|0|0|0|0|0|0|0|0|0|0|
|1420528|0|0|0|1|0|0|0|0|0|0|0|1|
|1420529|0|0|0|0|0|0|0|0|1|1|1|3|
|1420530|0|0|0|0|0|0|0|0|0|0|0|0|
|1420531|0|0|0|1|0|0|0|1|0|1|0|3|
|1420532|0|0|0|0|0|0|0|0|1|0|0|1|
|1420533|0|0|0|0|0|0|1|0|1|1|0|3|
|1420534|0|0|0|0|0|0|0|0|0|0|0|0|
|1420535|0|0|0|0|0|0|0|0|0|0|0|0|
|1420536|0|0|0|0|0|0|0|0|0|0|0|0|
|1420537|0|0|0|0|0|0|0|0|0|0|0|0|
|1420538|0|0|0|0|0|0|0|1|0|0|0|1|
|1420539|0|0|1|0|0|0|0|0|0|0|0|1|
|1420540|0|0|0|0|0|0|0|0|0|0|0|0|

**講義予定 [#hb7c6b7b]

|月日|内容|
|10/1|第1,2章|
|10/8||
|10/15||
|10/22||
|10/29||
|11/5|TOEFL試験のため休講|
|11/12|椎尾海外出張のため休講|
|11/19|椎尾学会出張のため休講|
|11/26||
|12/3|椎尾学会出張のため休講|
|12/10||
|12/17||
|12/24||
|1/7||
|1/14||
|1/21||
|1/28|試験期間のため休講|

** 出来上がったプログラムの提出方法 [#bd9cbbf8]
- フォルダを作ってその中にjavaファイルとclassファイル
//と、取扱説明書ファイルと、それ以外に必要なファイルがもしあればそれら
を入れてください。
//フォルダの中のclassファイルをダブルクリックしたらプログラムが起動することを確認してください。
-このフォルダに名前を付けてください。フォルダの名前は、「出席番号+氏名(ローマ字の姓名)+必要ならばバージョン番号の数字」にしてください。たとえば09020999siioitiro01のように。なお全部半角英数字でお願いします。
-このフォルダを圧縮してください
--フォルダを選択してファイルメニューから圧縮を選択します
-圧縮したファイルを以下の手順で
 /home/isstaff/siio/Public/Drop Box/.
に提出してください。ターミナル.appからなら
 cp 123456siioitiro.zip /home/isstaff/siio/Public/Drop\ Box
としてください。ファインダーからなら、メニューから「移動」「フォルダへ移動...」を選んで
以下のように入力して、移動ボタンを押して、そこに現れるドロップボックスホルダに、ドラッグアンドドロップしてください。

http://siio.jp/gyazo/dropbox.png
--書き込み専用なので確認できないけどokですかという意味のダイアログが出るかと思いますが問題ありません。
-レポート提出用フォルダは書き込み専用で見ることができません。アップロードできたかどうか不安でしたら教員まで質問してください。
-授業中でしたら、[[ココを見ると:http://siio.jp/lecture/java_report.html]]一覧をみることができます。
-同じ名前のフォルダを投げ込むと、エラーになります。ということで新しいバージョンができたら別の名前のフォルダを作って提出し直してください。(フォルダ名最後に数字をつけてください)



*2016年1月21日 [#n7a4a1c9]

現在完成したところのプロフラムの一式を、
フォルダに入れて、出席番号+ローマ字の名前にして、圧縮して、出欠がわりに提出してください。


*2016年1月14日 [#a7842fda]

現在完成したところのプロフラムの一式を、
フォルダに入れて、出席番号+ローマ字の名前にして、圧縮して、出欠がわりに提出してください。


*2016年1月7日 [#n23f767e]


*** 線を引く簡単なプログラム [#y4c3a992]

JPanelのサブクラスを作りました。

 import javax.swing.JPanel;
 import java.awt.Graphics;
 
 public class DrawPanel extends JPanel {
 
 	public void drawLine(int x1, int y1, int x2, int y2){
 		Graphics g = this.getGraphics();
 		g.drawLine(x1, y1, x2, y2);
 	}
  }
 

こちらはメインのプログラム。JFrameのサブクラスで、これに上記のJPanelのサブクラスを貼付けます。
リスナーになっているので、こちらでマウスなどのイベントを受け取ります。

 
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseMotionListener;
 
 import javax.swing.JFrame;
 
 public class SimpleDraw extends JFrame implements MouseMotionListener {
 
 	int lastx=0, lasty=0, newx, newy;
 	DrawPanel panel;
  
 
 	public void mouseMoved(MouseEvent arg0) {
        }
 
 	public void mouseDragged(MouseEvent arg0) {
 		newx=arg0.getX();
 		newy=arg0.getY();
 		panel.drawLine(lastx,lasty,newx,newy);
 		lastx=newx;
 		lasty=newy;
 	}
 
 
 	private void init() {
 		this.setTitle("Simple Draw");
 		this.setSize(300, 200);
 		this.addMouseMotionListener(this);
 		panel=new DrawPanel();
 		this.getContentPane().add(panel);
 		this.setVisible(true);
 		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 	}
 	
 	public static void main(String[] args) {
 		SimpleDraw frame=new SimpleDraw();
 		frame.init();
 	}
 
 }
 


***Eclipseを使ってみよう [#vf7b5de5]

http://gyazo.com/4383db7fb81f9eacbf5cc959ff77a33d.png




-Eclipseの警告を消す方法

 	private static final long serialVersionUID = 42L;

という変数を定義しておきます。

***一筆書き解消 [#r93c6569]

上で紹介したSimple Drawを、一筆書きにならないように変更してみてください。



-----------------------------------------------


*マルチメディアプログラミングの最終課題 [#fa431919]

-課題:お絵描きプログラムを作成してさらに取扱説明書を作成して1月28日までに提出すること
--この課題のヒントは SimpleDraw をみてください。

** 提出課題として最低やってほしいこと [#hd791dc3]
-ペンの太さをメニューで変えられるようにしてください
-ペンの色をメニューとカラーパレットで変えられるようにしてください
-消しゴム機能を追加してください
-ウィンドウの大きさを変えても絵が消えてしまわないようにする
(ダブルバッファを使う)

** 機能拡張:以下のことができれば加点します [#ibf935ab]

-絵や写真のファイルを取り込めるようにする
-いろいろな効果のペンを作る(たとえばペンの動きに従って文字が出る)
-絵をファイルへ書き出す機能を作る
-他の絵データをスタンプのように押す機能
-コピーアンドペースト
-メニューバーだけでなく、スライダ、ボタン、別ウィンドウ(パレット)などを使って使いやすくする
-そのほか、世の中のお絵描きプログラムにありそうな機能を実現する

機能拡張の詳細はSimpleDrawの

-http://lab.siio.jp/index.php?SimpleDraw#extra

を見てください。SimpleDrawのページでは、

-機能の拡充
-使いやすさの追求

の2通りの拡張を書いてあります。どちらの方針で進めていただいても結構です。
説明書に、工夫したところを書いておいてください。


** 取扱説明書の作り方 [#j3398d0e]

-ApplicationsからMicrosoft Office 2011/Microsoft Wordもしくは、テキストエディット(Text Edit)を選択して、これを使って、今回作成したプログラムの取扱説明書を書いてください。他のアプリで作ってもらっても良いですが、最後にPDFにしておいてもらえると助かります。
-せっかくですので作った機能はぜんぶここで説明してください。(プログラムは私も試してみますが機能を見逃すかもしれません)
-スクリーンキャプチャした図も入れてください。図は次のようにして作ります
--スクリーンキャプチャしたいところで、コマンド(リンゴマーク)+シフト+3を押します。すると画面全体のスクリーンショットがとれます
--もしくは、コマンド(リンゴマーク)+シフト+4を押すとマウスドラッグで任意の場所の部分的なスクリーンショットがとれます
--もしくは、コマンド(リンゴマーク)+シフト+4を押し、さらにスペースキーを押し、任意のウィンドウをクリックすると、そのウィンドウのスクリーンショットがとれます
--以上の操作で、デスクトップにピクチャファイルができます。これをWordかText Editにドラッグアンドドロップします。
--もしくは、デスクトップのピクチャファイルをダブルクリックで開き、欲しい部分を矩形ツールで選択してコピーし、WordかText Editにペーストします
-Control キーを押しながらキーボードショートカットを押すと、画像はファイルではなく、クリップボードに保存されるので、直後に書類にペーストできます。
-がんばったところ、大変だったところなどを書いていただいても結構です。また、できれば自力でやって欲しいのですが、だれかに教えてもらったり、web上のサンプルプログラムを参考にした場合は、そのことを説明書に書いてください。また、クラスメートににプログラムを教えた場合も、だれのどこを手伝ったかを書いておいてください。


** 出来上がったプログラムの提出方法 [#i421b017]
- フォルダを作ってその中にjavaファイルとclassファイルと、取扱説明書ファイルと、それ以外に必要なファイルがもしあればそれらを入れてください。フォルダの中のclassファイルをダブルクリックしたらプログラムが起動することを確認してください。
-このフォルダに名前を付けてください。フォルダの名前は、「出席番号+氏名(ローマ字の性か名)+必要ならばバージョン番号の数字」にしてください。
-このフォルダを圧縮してください
-このフォルダを圧縮してください
-圧縮したファイルを
 /home/isstaff/siio/Public/Drop Box/.
に提出してください。ターミナル.appからなら
 cp 123456siioitiro.zip /home/isstaff/siio/Public/Drop\ Box
としてください。ファインダーからなら、メニューから「移動」「フォルダへ移動...」を選んで
以下のように入力して、移動ボタンを押して、そこに現れるドロップボックスホルダに、ドラッグアンドドロップしてください。
http://siio.jp/gyazo/dropbox.png
--書き込み専用なので確認できないけどokですかという意味のダイアログが出るかと思いますが問題ありません。
-レポート提出用フォルダは書き込み専用で見ることができません。アップロードできたかどうか不安でしたら教員まで質問してください。
-同じ名前のフォルダを投げ込むと、エラーになります。ということで新しいバージョンができたら別の名前のフォルダを作って提出し直してください。(フォルダ名最後に数字をつけてください)

** 締切 [#sc18de64]
-締め切りは1月28日11:59pmとします
--この日までに提出してください
//--どうしてもそのあともがんばりたい人は1月31日の11:59pmまでにsiio@mac.comまでメール添付で提出してください
//--可能な限り差し替えます(見落とす可能性がありますので保証はできません)

**昨年度の優秀作品例 [#t2007b9e]
-http://siio.jp/pdf/2013/manual1.pdf 
-http://siio.jp/pdf/2013/manual2.pdf 
-http://siio.jp/pdf/2013/manual3.pdf 
-http://siio.jp/pdf/2013/manual4.pdf 
-http://siio.jp/pdf/2013/manual5.pdf

----------------

*2015年12月24日 [#n23f767e]



*** 簡単なアニメーション [#z5939b7b]

-まずはなにもしないウィンドウを出します

 import java.awt.*;
 import javax.swing.*;
 import java.awt.event.*;
 
 class SimpleAnime extends JFrame {
 
 	private void init() {
 		this.setTitle("SimpleAnime");
 		this.setSize(300,200);
 		this.setVisible(true);
 		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 	}
 	
 	public static void main(String[] args) {
 		SimpleAnime frame = new SimpleAnime();
 		frame.init();
 	}
 }


-次に動くボールを出します


 import java.awt.*;
 import javax.swing.*;
 import java.awt.event.*;
 
 class SimpleAnime extends JFrame {
 	JPanel panel;
 	Graphics g;
 	
 	private void init() {
 		this.setTitle("SimpleAnime");
 		this.setSize(300,200);
 		panel = new JPanel();
 		this.getContentPane().add(panel);
 		this.setVisible(true);
 		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 		g=panel.getGraphics();
 		g.setColor(Color.blue);
 
 		int x=0, xdelta=10;
 		while(true) {
 			g.fillOval(x,80,50,50);
 			try{Thread.sleep(50);}catch(Exception e){}
 			g.clearRect(x, 80, 52,52);
 			x+=xdelta;
 			if(x>250) xdelta=-10;
 			if(x<0) xdelta=10;
 		}
 		
 	}
 	
 	public static void main(String[] args) {
 		SimpleAnime frame = new SimpleAnime();
 		frame.init();
 	}
 }

http://gyazo.com/12d1f047af8d4f87f7199c8a7db66080.png


-マルチスレッド化する

上記のプログラムでは、main()で、frame.init()したあと、このメソッドで無限にアニメーション書き換えを行うことになります。なので、二度とmain()には戻ってきません。(以下で示した、メニューは、また別のスレッドで動くので、このままでも動きます)

アニメーションだけをするなら、これでも良いのですが、他にも仕事をしたい場合には難しいですし、やれないことはないですが、タイミングを計るのが難しいです。ということで、アニメーションする部分は、別のスレッドにして、そちらに任せてしまうのが通常です。

以下のように、別のインスタンスを別スレッドで動かします。別スレッドで動かすインスタンスを作るために、Animatorという名前のクラスを用意しました。別スレッドで動かすためには、Runnableをimplementする必要があります。ここで必須のrunというメソッドが、裏で実行されるので、そこに、上記のプログラムのアニメーション描画部分をそっくり移動させます。Graphics gの情報を伝えておく必要があるので、それを設定するメソッドも作りました。アニメーションしつつ、main()の方で数字を表示しています。

 import java.awt.*;
 import javax.swing.*;
 import java.awt.event.*;
 import java.lang.Thread;
 
 class Animator implements Runnable {
 	Graphics g;
 
 	public void setGraphics(Graphics animeG) {
 		g=animeG;
 	}
 
 	public void run() {
 		int x=0, xdelta=10;
 		while(true) {
 			g.fillOval(x,80,50,50);
 			try{Thread.sleep(50);}catch(Exception e){}
 			g.clearRect(x, 80, 52,52);
 			x+=xdelta;
 			if(x>250) xdelta=-10;
 			if(x<0) xdelta=10;
 		}
 	}
 }
 
 class SimpleAnime extends JFrame {
 	JPanel panel;
 	Graphics g;
 	Animator animator;
 	
 	private void init() {
 		animator=new Animator();
 		this.setTitle("SimpleAnime");
 		this.setSize(300,200);
 		panel = new JPanel();
 		this.getContentPane().add(panel);
 		this.setVisible(true);
 		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 		g=panel.getGraphics();
 		g.setColor(Color.blue);
 		
 		animator.setGraphics(g);
 		new Thread(animator).start();
 	}
 	
 	public static void main(String[] args) {
 		SimpleAnime frame = new SimpleAnime();
 		frame.init();
 		
 		for(int i=0;;i++) {
 			System.out.println(i);
 			try {Thread.sleep(500);}catch(Exception e){}
 		}
 	}
 }


-アニメーションボールの設定ができるアプリケーションを作ってみよう

//こういうのを作ってほしい
//
//http://lab.siio.jp/index.php?plugin=attach&pcmd=open&file=SimpleAnime.class&refer=Lecture


ヒント:上のアニメーションのプログラムに、メニューを取り付けて、
action Performedでメニューからのイベントを受け取れば良いです。
メニューの動きは、プログラム本来の動きと並列に動いてくれるので、
上のアニメーションのようなアニメーション以外何もできない手抜きアニメーションでも、
メニューは動いてくれます。


ヒント: action Performed ではこうしたら良い

 public void actionPerformed(ActionEvent e) { 
 		String command = e.getActionCommand(); 
 		if(command=="red") g.setColor(Color.red); 
 		if(command=="blue") g.setColor(Color.blue); 



ヒント:メニューはSimple Animeでつくって、action listenerをanimatorにしました。メニューを作るところがながいので、メソッドに分けました。


 import java.awt.*;
 import javax.swing.*;
 import java.awt.event.*;
 import java.lang.Thread;
 
 class Animator implements Runnable, ActionListener {
 
 略			
 	public void actionPerformed(ActionEvent e) { 
 		String command = e.getActionCommand(); 
 		if(command !=null) { 
 			System.out.println(command); 
 		} 
 		if(command=="red") g.setColor(Color.red); 
 		if(command=="blue") g.setColor(Color.blue); 
 		if(command=="yellow") g.setColor(Color.yellow); 
 		if(command=="fast") xdelta=30; 
 		if(command=="slow") xdelta=5; 
 	} 
 
 略
 
 }
 
 class SimpleAnime extends JFrame  {
 
 略
 
 	 
 	private void makeMenu() { 
 		JMenuBar menubar = new JMenuBar(); 
 		JMenu menu = new JMenu("color"); 
 		JMenu menuSpeed = new JMenu("speed"); 
 		 
 		JMenuItem item1 = new JMenuItem("red"); 
 		item1.addActionListener(animator); 
 		item1.setActionCommand("red"); 
 		JMenuItem item2 = new JMenuItem("blue"); 
 		item2.addActionListener(animator); 
 		item2.setActionCommand("blue"); 
 		JMenuItem item3 = new JMenuItem("yellow"); 
 		item3.addActionListener(animator); 
 		item3.setActionCommand("yellow"); 
 		menu.add(item1); 
 		menu.add(item2); 
 		menu.add(item3); 
 		 
 		JMenuItem item4 = new JMenuItem("fast"); 
 		item4.addActionListener(animator); 
 		item4.setActionCommand("fast"); 
 		JMenuItem item5 = new JMenuItem("slow"); 
 		item5.addActionListener(animator); 
 		item5.setActionCommand("slow"); 
 		menuSpeed.add(item4); 
 		menuSpeed.add(item5); 
 	 
 		menubar.add(menu); 
 		menubar.add(menuSpeed); 
 		this.setJMenuBar(menubar);
 	} 
 
 略	
 
 }



-ボールの色と早さをメニューで指定する(解答編)


上記のプログラムにメニューを追加して、
ボールの色と速さをメニューで指定するようにしました。
メニューはメインのJFrameインスタンスで作ってこれに貼りつけていますが、
Action Listenerは、別スレッドで動いているAnimatorクラスのインスタンスとしました。


 import java.awt.*;
 import javax.swing.*;
 import java.awt.event.*;
 import java.lang.Thread;
 
 class Animator implements Runnable, ActionListener {
 	Graphics g;
 	int xdelta =5;
 
 	public void setGraphics(Graphics animeG) {
 		g=animeG;
 	}
 			
 	public void actionPerformed(ActionEvent e) { 
 		String command = e.getActionCommand(); 
 		if(command !=null) { 
 			System.out.println(command); 
 		} 
 		if(command=="red") g.setColor(Color.red); 
 		if(command=="blue") g.setColor(Color.blue); 
 		if(command=="yellow") g.setColor(Color.yellow); 
 		if(command=="fast") xdelta=30; 
 		if(command=="slow") xdelta=5; 
 	} 
 	
 	public void run() {
 		int x=0;
 		while(true) {
 			g.fillOval(x,80,50,50);
 			try{Thread.sleep(50);}catch(Exception e){}
 			g.clearRect(x, 80, 52,52);
 			x+=xdelta;
 			if(x>250) xdelta=-xdelta;
 			if(x<0) xdelta=-xdelta;
 		}
 	}
 }
 
 class SimpleAnime extends JFrame  {
 	JPanel panel;
 	Graphics g;
 	Animator animator;
 	 
 	private void makeMenu() { 
 		JMenuBar menubar = new JMenuBar(); 
 		JMenu menu = new JMenu("color"); 
 		JMenu menuSpeed = new JMenu("speed"); 
 		 
 		JMenuItem item1 = new JMenuItem("red"); 
 		item1.addActionListener(animator); 
 		item1.setActionCommand("red"); 
 		JMenuItem item2 = new JMenuItem("blue"); 
 		item2.addActionListener(animator); 
 		item2.setActionCommand("blue"); 
 		JMenuItem item3 = new JMenuItem("yellow"); 
 		item3.addActionListener(animator); 
 		item3.setActionCommand("yellow"); 
 		menu.add(item1); 
 		menu.add(item2); 
 		menu.add(item3); 
 		 
 		JMenuItem item4 = new JMenuItem("fast"); 
 		item4.addActionListener(animator); 
 		item4.setActionCommand("fast"); 
 		JMenuItem item5 = new JMenuItem("slow"); 
 		item5.addActionListener(animator); 
 		item5.setActionCommand("slow"); 
 		menuSpeed.add(item4); 
 		menuSpeed.add(item5); 
 	 
 		menubar.add(menu); 
 		menubar.add(menuSpeed); 
 		this.setJMenuBar(menubar);
 	} 
 	
 	private void init() {
 		animator = new Animator();
 		this.setTitle("SimpleAnime");
 		this.setSize(300,200);
 		this.makeMenu();
 		panel = new JPanel();
 		this.getContentPane().add(panel);
 		this.setVisible(true);
 		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 		g=panel.getGraphics();
 		g.setColor(Color.blue);
 		
 		animator.setGraphics(g);
 		new Thread(animator).start();
 	}
 
 	public static void main(String[] args) {
 		SimpleAnime frame = new SimpleAnime();
 		frame.init();
 		
 		for(int i=0;;i++) {
 			System.out.println(i);
 			try {Thread.sleep(500);}catch(Exception e){}
 		}
 	}
 }

http://gyazo.com/d5db8ca6fa153520e94ee7d2b7a93915.png

-この先改良すべきこと [#u99ec852]

アニメーションの途中で、ボールがちらつくことがあります。
ボールの場所を矩形で消して、新しいボールを描いているので、
その途中の作業が見えてしまうからです。
これを無くすには、ダブルバッファの手法を用います。
すなわち、描画する面をもう一枚用意して、
そちらに描画し、
描画が終わったところで、一気に更新する方法です。

ダブルバッファの手法は、授業の最終課題である「お絵かきプログラム」のところで説明します。



/////////////////






***Mac OS X [#nf4b4468]

How2MacOSXProgramming を見てください


***iPhone [#f0103cac]

How2iPhoneProgramming を見てください


*2015年12月17日 [#r5ed3f56]

**宿題提出 [#v1f8753e]

プログラム13.1のようにボタンを配置して、それぞれを押すと、それぞれのボタンの名前が表示されるプログラムを作る宿題をお願いしました。
このプログラムの.java, classファイルをまとめて、出席番号+名前のフォルダに入れて、圧縮して提出してください。


**第13章 様々なコンポーネントとレイアウト [#nfdf4f5e]

***プログラム13.1の説明図 [#ec2d7584]
http://gyazo.com/649bbe400f96c8c31923bcf7e5aebbd4.png


***13.2節を読んで,プログラム13.2を実行させてください [#s05a9149]

ボタンが一つしかないプログラムなので、ActionPerformedの中で、
ボタン種類のチェックを省略してしまっているところが特徴です。



***演習13.1をやってください [#xc59c932]

こんなのをつくってください。

http://gyazo.com/999f1e766551a994186cc3d159bde0bf.png


BorderLayoutでもできるようですが、私はGridLayour使ってみました。

  		panel.setLayout(new GridLayout(2,2));
 		panel.add(textleft);
 		panel.add(textright);
 		panel.add(button);
 		panel.add(clearbutton);


ボタンが複数になるので、ActionPerformedの中で、ボタンを区別する必要があります。


解答例

 import java.awt.*;
 import javax.swing.*;
 import java.awt.event.*;
 
 public class JTextFieldSample extends JFrame implements ActionListener {
 	JButton button, clearButton;
 	JTextField textleft, textright;
 	
 	JTextFieldSample(String title) {
 		setTitle(title);
 		button = new JButton("left to right");
 		clearButton = new JButton("clear");
 		button.addActionListener(this);
 		clearButton.addActionListener(this);
 		
 		textleft = new JTextField(10);
 		textright = new JTextField(10);
 		JPanel panel=new JPanel();
 		panel.setLayout(new GridLayout(2,2));
 		panel.add(textleft);
 		panel.add(textright);
 		panel.add(button);
 		panel.add(clearButton);
 		Container container=this.getContentPane();
 		container.add(panel);
 	}
 	
 	public void actionPerformed(ActionEvent e) {
 		if(e.getSource()==(button)) {
 			textright.setText(textleft.getText());
 			textleft.setText("");
 		}else if(e.getSource()==(clearButton)) {
 			textright.setText("");
 		}
 	}
 	
 	public static void main(String[] args) {
 		JTextFieldSample sample = new JTextFieldSample("JTextFieldSample");
 		sample.pack();
 		sample.setVisible(true);
 		sample.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 	}
 }


***どのボタンからのイベントであるかを識別する方法 [#i076dba0]


-プログラム12.3では
--ボタンへの参照を、action Performedから参照できる変数に入れて
--action Performedの中で、e.get Source()してButtonのインスタンスを得て比較している
-プログラム12.4では、
--準備として button.set Action(button.get Text());でボタン文字をactionとして設定して
-- action Performedの中で e.get Action Command()でアクションを得て文字比較している 
-ということで以下のようなことも可能
--acttion Performedの中で、get Source()してボタンを得る
--そのボタンからget Textしてボタンの文字列を得て文字比較する
--ただし、get Sourceで得られるのはボタンの親クラスなのでButtonにキャストする
--以下をaction Performedのなかで試してみよう
 System.out.println((JButton)(e.getSource()).getText());




***13.5節を読んで,プログラム13.5を実行してください [#o616a647]

http://gyazo.com/dd4e103c011682b3a78b9ed0c8d5134b.png

http://gyazo.com/4755cce7280963b32050db455d265cc1.png

メニューアイテムにcommandという情報をつけて、ActionPerformedではこれを使ってメニュー項目を区別しています。

***演習13.2をやってください(メニュー項目は何でも良いです) [#rba61398]

//演習ができそうにないという人は、飛ばして、次に進んでください。

http://gyazo.com/2d9c3b6534e7b87fcd3ec22be00d5fed.png



***13.6節を読んで,プログラム13.6を実行してください [#k36e1b9b]

教科書203ページのプログラム13.6の5行めのところに、

 ... implements ActionListener6: {

とありますが、これは、

 ... implements ActionListener {

の間違いのようです。




**終章 おまけ [#s65aaa02]


***マウスイベント [#cc8c3961]

マウスイベントを受け取るには、Mouse ListenerやMouse Motion Listenerなどをインプリメントします。
以下のようにするとイベントをうけとれるます。

 import java.awt.*;
 import javax.swing.*;
 import java.awt.event.*;
 
 public class MouseTest extends JFrame implements MouseListener, MouseMotionListener{
 	
 	public void mouseClicked(MouseEvent e) {
 		System.out.println("mouse clicked!");
 	}
 	public void mouseEntered(MouseEvent e) {
 		System.out.println("mouse entered!");
 	}
 	public void mouseExited(MouseEvent e) {
 		System.out.println("mouse exited!");
 	}
 	public void mousePressed(MouseEvent e) {
 		System.out.println("mouse pressed!");
 	}
 	public void mouseReleased(MouseEvent e) {
 		System.out.println("mouse released!");
 	}
 	public void mouseDragged(MouseEvent e) {
 		System.out.println("mouse dragged!");
 	}
 	public void mouseMoved(MouseEvent e) {
 		System.out.println("mouse moved!");
 	}
 	
 	public static void main(String[] args) {
 		MouseTest test = new MouseTest();
 		test.setTitle("MouseTest");
 		test.addMouseListener(test);
 		test.addMouseMotionListener(test);
 		test.setSize(400,300);
 		test.setVisible(true);
 		test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 	}
 	
 }


***サウンドファイルを再生する [#g86f7ead]

-以下のファイルをダウンロードしてください。

http://siio.jp/lecture/Sounds/Ping.aiff

(他にも、Basso.aiff	Frog.aiff	Hero.aiff	Pop.aiff	Submarine.aiff
Blow.aiff	Funk.aiff	Morse.aiff	Purr.aiff	Tink.aiff
Bottle.aiff	Glass.aiff	Ping.aiff	Sosumi.aiff
を置いておきました)

これを再生するプログラムを作ってみましょう。以下で再生できます。

 import java.io.*;
 import javax.sound.sampled.*;
 
 public class AudioPlay {
 	public static void main(String[] args)  {
        	try{
           		File audioFile = new File("Ping.aiff");
            		AudioFormat format = AudioSystem.getAudioFileFormat(audioFile).getFormat();
           		DataLine.Info info = new DataLine.Info(Clip.class, format);
            		Clip clip = (Clip)AudioSystem.getLine(info);
 
 	    		clip.open(AudioSystem.getAudioInputStream(audioFile));
            		clip.start();
 	    		clip.drain();
 	    		clip.close();
         	}
         	catch(Exception e){
              		e.printStackTrace();
        	}
 	}
 }



***他の環境でのGUIプログラミングの例 [#r2f2f8d0]

***X11 [#dd5927c8]

以下の内容の新しいファイル,buttontest.cを作ってください.
printfの逆スラッシュが正しくコピペできてないかもしれないので,注意してください.
入力が面倒なら,添付ファイルの
[[buttontest.c:http://lab.siio.jp/index.php?plugin=attach&pcmd=open&file=buttontest.c&refer=Lecture]]
をダウンロードしてください.


 #include <X11/Xlib.h>
 #include <stdio.h>
  
 int main (){
 	Display *display = XOpenDisplay (NULL);
 	XEvent event;
 	Window window = XCreateSimpleWindow(display, DefaultRootWindow(display),0,0,150,100,0,0,0);
 	XSelectInput(display,window,KeyPressMask | ButtonPressMask |  ButtonReleaseMask);
 	XMapWindow(display, window);
 	XFlush(display);
 
 	while(1) {
 		XNextEvent(display,&event);
 		switch (event.type) {
 		  case KeyPress: 
 			printf("key\n");
 			break;
 		  case ButtonPress:
 			printf("button down\n");
 			printf("button\n");
 			break;
 		  case ButtonRelease:
 			printf("button up\n");
 			break;
 		}
 	}
 	return 0;
 }

以下のコマンドでコンパイルしてください.

 cc -L/usr/X11R6/lib -I/usr/X11R6/include buttontest.c -lX11

出来上がったファイルを,./a.outで実行してください.




//////////////////////////////






*2015年12月10日 [#de1371f4]

**宿題提出 [#m7bc8994]

引数のURLをファイルにするプログラムと、
また、cat.jpgのファイル取得でまとめて読むことでどれくらい速度が改善したかのレポートを、
提出してください。

これらのjava, class, レポートのファイルをまとめて、出席番号+名前のフォルダに入れて、圧縮して提出してください。



**第12章 Swing [#k22d29b5]


***とても簡単なウィンドウ [#r57b34f9]

 import javax.swing.JFrame;
 public class SimpleWindow {
 
        public static void main(String argv[]) {
                JFrame f = new JFrame("私が作った最初の窓");
                f.setSize(200,100); 
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setVisible(true);
        }
 }



*** JFrameを継承するプログラミング [#y09a72d9]
 import javax.swing.JFrame;
 public class SimpleWindow extends JFrame {
 
 	public void initialize () {
 		this.setTitle("私が作った最初の窓");
 		this.setSize(200,100);
 		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 		this.setVisible(true);
 	}
 
 	public static void main (String argv[]) {
 		SimpleWindow sw = new SimpleWindow();
 		sw.initialize();
 	}
 }


***ラベルを表示するウィンドウ [#xedfffec]

プログラム12.1を参考にして、上記の、継承を使ったプログラムによるウィンドウの中に、
Hello!という文字を出してみよう。



http://gyazo.com/c6efe47de19436f7564660377fe8b98c.png



解答例:

 import javax.swing.*;
 import java.awt.*;
 
 public class SimpleWindow extends JFrame {
 
 	public void initialize () {
 		this.setTitle("私が作った最初の窓");
 		
 		JLabel label = new JLabel("Hello!");
 		Container container = this.getContentPane();
 		container.add(label);
 		this.pack();
 		
 		this.setVisible(true);
 		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 	}
 
 	public static void main(String argv[]) {
 		SimpleWindow sw = new SimpleWindow();
 		sw.initialize();
 	}
 
 }


***ボタンを2個表示するウィンドウ [#cb6cf696]

プログラム12.2をみてください。
getContentPane()で得られたContainerに直接ボタンを貼付けることもできますが、
貼付けられるのは一つのボタンだけのようです。
パネルに2個のボタンを貼付け、それをContainerに貼付けることで複数のボタンを表示しています。

http://gyazo.com/03c28df2419065241b8736b7b69d7fd3.png

プログラム12.2を参考にして、継承を使ったプログラムによるウィンドウの中に、
2個のボタンを出してみよう。


http://gyazo.com/4c3086ae9b6b5434d2ea741369f731c5.png




解答例:

 import javax.swing.*;
 import java.awt.*;
 
 public class SimpleButton extends JFrame {
 
 	public void initialize () {
 		this.setTitle("私が作った最初の窓");
 		
 		JPanel panel = new JPanel();
 		JButton button1 = new JButton("button1");
 		JButton button2 = new JButton("button2");
 		panel.add(button1);
 		panel.add(button2);
 		Container container = this.getContentPane();
 		container.add(panel);	
 	
 		this.pack();		
 		this.setVisible(true);
 		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 	}
 
 	public static void main(String argv[]) {
 		SimpleButton sw = new SimpleButton();
 		sw.initialize();
 	}
 
 }


このプログラムでは,ボタンを押しても何もおこりません.

ボタンが押されたイベントを受け取るためには,
+ActionListenerをimplementしたクラスを作る
+そのインスタンスを作る
+これをボタンにaddActionListener()で登録する
必要があります.

プログラム12.3を参考に,ボタンを押したらprintlnで次のようなメッセージを表示するプログラムを作ってみましょう.

http://gyazo.com/67d27d0588f4dd5d11410e1107165994.png


ヒント(最初の6行です)

 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;
 
 public class SimpleButton extends JFrame implements ActionListener {
 
 JButton button1, button2;
 
 	public void initialize () {


解答例

 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;
 
 public class SimpleButton extends JFrame implements ActionListener {
 
 JButton button1, button2;
 
 	public void initialize () {
 		this.setTitle("私が作った最初の窓");
 	
 		JPanel panel = new JPanel();
 		button1 = new JButton("button1");
 		button2 = new JButton("button2");
 		button1.addActionListener(this);
 		button2.addActionListener(this);
 
 		panel.add(button1);
 		panel.add(button2);
 		Container container = this.getContentPane();
 		container.add(panel);
 	
 		this.pack();		
 		this.setVisible(true);
 		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 	}
 	
 	public void actionPerformed (ActionEvent e) {
 		if(e.getSource()==button1) 
 			System.out.println("Hello");
 		else
 			System.out.println("Goodbye");
 	}
 
 	public static void main(String argv[]) {
 		SimpleButton sw = new SimpleButton();
 		sw.initialize();
 	}
 
 }


***宿題:プログラム13.1のようにボタンを配置して、それぞれを押すと、それぞれのボタンの名前が表示されるプログラムを作ってください。 [#f4fb000e]

まずは、プログラム12.4を見て、上記のプログラムを拡張して5個のボタンに対応して, WEST, EAST, SOUTH, NORTH, CENTERと表示されるプログラムをつくってください。さらにこれを拡張して、プログラム13.1のようなボタンを配置して、それぞれを押すと、それぞれのボタンの名前が表示されるプログラムを作ってください。次回の授業で提出お願いします。

なお、以下のようにすると、ボタンの名前を印刷することができます。

         public void actionPerformed(ActionEvent e){
                 System.out.println(((JButton)e.getSource()).getText());
         }

***どのボタンからのイベントであるかを識別する方法 [#i076dba0]


-プログラム12.3では
--ボタンへの参照を、action Performedから参照できる変数に入れて
--action Performedの中で、e.get Source()してButtonのインスタンスを得て比較している
-プログラム12.4では、
--準備として button.set Action(button.get Text());でボタン文字をactionとして設定して
-- action Performedの中で e.get Action Command()でアクションを得て文字比較している 
-ということで以下のようなことも可能
--acttion Performedの中で、get Source()してボタンを得る
--そのボタンからget Textしてボタンの文字列を得て文字比較する
--ただし、get Sourceで得られるのはボタンの親クラスなのでButtonにキャストする
--以下をaction Performedのなかで試してみよう
 System.out.println((JButton)(e.getSource()).getText());


*2015年11月26日 [#caac53bf]

**第11章 入出力 [#hb3a05b8]

***整数を出力する例 [#j899e2e7]

 import java.io.*;
 
 public class DoutTest {
 	public static void main (String[] args) {
 		try {
 			FileOutputStream fout = new FileOutputStream("dout.dat");
 			DataOutputStream dout = new DataOutputStream(fout);
 			dout.writeInt(100);
 			dout.close();
 			
 		}catch (Exception e) {
 			System.out.println(e);
 		}
 	}
 }


これでdout.datという名前のファイルができあがるはずです。 作ったファイルを

 od -h dout.dat
 
または

 hexdump dout.dat

してみてください

 e100:java siio$ hexdump dout.dat 
 0000000 00 00 00 64                                    
 0000004



***整数を入出力する例 [#j899e2e7]

 import java.io.*;
 
 public class DoutTest {
 	public static void main (String[] args) {
 		try {
 			FileOutputStream fout = new FileOutputStream("dout.dat");
 			DataOutputStream dout = new DataOutputStream(fout);
 			dout.writeInt(100);
 			dout.close();
 			
 			FileInputStream finput = new FileInputStream("dout.dat");
 			DataInputStream dinput = new DataInputStream(finput);
 			System.out.println(dinput.readInt());
 			dinput.close();
 			
 		}catch (Exception e) {
 			System.out.println(e);
 		}
 	}
 }


***プログラム11.3をやってみてください [#h15edee7]


作ったファイルを
 od -h 
または
 hexdump
してみてください

http://gyazo.com/74c061dfe2fcd6b72885878f867c78ba.png




 import java.io.*;
 
 public class PrintWriterTest{
 	public static void main(String[] args) {
 		try {
 		//writer.txtというファイルを作って文字を書き込む
 			FileWriter fwriter = new FileWriter("writer.txt");
 			PrintWriter pwriter = new PrintWriter(fwriter);
 			pwriter.println(2006);
 			pwriter.println("Java教科書");
 			//fwriter.write("Java教科書");
 			pwriter.close();	
 		}
 		catch (IOException e) {
 			System.out.println(e);
 		}
 	}
 }


つぎに、プログラム11.4を参考にして、
このPrint Write Testに書き足して、
書き込んだデータを読み出して画面に表示するプログラムを作ってください。

ヒント:

 import java.io.*;
 
 public class PrintWriterTest{
 	public static void main(String[] args) {
 		try {
 		//writer.txtというファイルを作って文字を書き込む
 			FileWriter fwriter = new FileWriter("writer.txt");
 			PrintWriter pwriter = new PrintWriter(fwriter);
 			pwriter.println(2006);
 			pwriter.println("Java教科書");
 			//fwriter.write("Java教科書");
 			pwriter.close();	
			 
			 
			 ここに書き足す
			 
			 
 		}
 		catch (IOException e) {
 			System.out.println(e);
 		}
 	}
 }





***文字ストリームをファイルに書いて読み込むプログラム [#bed8144f]

 import java.io.*;
 
 public class PrintWriterTest{
 	public static void main(String[] args) {
 		try {
 		//writer.txtというファイルを作って文字を書き込む
 			FileWriter fwriter = new FileWriter("writer.txt");
 			PrintWriter pwriter = new PrintWriter(fwriter);
 			pwriter.println("java 教科書" + 2001 );
 			pwriter.close();			
 		//writer.txtのファイルの中身をSystem.out.printlnで表示する
 			FileReader freader = new FileReader("writer.txt");
 			BufferedReader breader = new BufferedReader(freader);
 			String tmp;
 			while( (tmp=breader.readLine() ) != null) {
 				System.out.println(tmp);
 			}
 			breader.close();
 		}
 		catch (IOException e) {
 			System.out.println(e);
 		}
 	}
 }




***プログラム11.5をやってこれを拡張して演習11.2をやってください [#ya1ca508]

キーボードから1行入力された文字列によるテキストファイルを作る

http://gyazo.com/f9aee7f492d574f870e85e2022df374c.png

ヒント

  import java.io.*;
  
  public class En112 {
  	public static void main(String[] args) {
  	
  		try {
 
 
 ここにプログラムを書く
  		
  			}
 			catch(IOException e) {
  				System.out.println(e);
   			}
     }
  }


解答例

 import java.io.*;
 
 public class En112 {
 	public static void main(String[] args) {
 	
 		try {
 			InputStreamReader ireader = new InputStreamReader (System.in);
 			BufferedReader breaderK = new BufferedReader(ireader);
 			String line = breaderK.readLine();
 			
 			FileWriter fwriter = new FileWriter("writer.txt");
 			PrintWriter pwriter = new PrintWriter(fwriter);
 			pwriter.println(line);
 			pwriter.close();
 			
 			FileReader freader = new FileReader("writer.txt");
 			BufferedReader breaderF = new BufferedReader(freader);
 			
 			String tmp=null;		
 			while(  (tmp=breaderF.readLine())  != null)
 				System.out.println(tmp);
 			
 			breaderF.close();
 		
 			}
			catch(IOException e) {
 				System.out.println(e);
 			}
 	}
 }


***http://www.ocha.ac.jp/の内容を表示するプログラムを書いてみよう [#kf0c5bf6]

http://gyazo.com/13044fdd9d372118a1f6fe93896eadb3.png


ヒント1

 import java.net.*;

が必要です。

 URL targetURL = new URL("http://www.ocha.ac.jp/");

でURLクラスのインスタンスが得られる。

 InputStream istream = targetURL.openStream();

でこれからInputStreamのインスタンスが得られる。

 InputStreamReader isreader = new InputStreamReader(istream);

でこれからInputStreamReaderのインスタンスが得られる。

 BufferedReader breader = new BufferedReader(  isreader );

でこれからBufferedReader のインスタンスが得られる。

ヒント2


 import java.io.*;
 import java.net.*;
 
 public class URLTest {
 	public static void main (String argv[]) {
 		try {
 			
			 
			 ここにプログラムを書く
			 
			 
 		} catch (IOException e) {
 			System.out.println("error...");
 		}
 	}
 }


ヒント3:

 import java.io.*;
 import java.net.*;
 
 public class URLTest {
 	public static void main (String argv[]) {
 		try {
 			URL targetURL = new URL("http://www.ocha.ac.jp/");
 			InputStream istream = targetURL.openStream();
 			InputStreamReader isreader = new InputStreamReader(istream);
 			BufferedReader breader = new BufferedReader(  isreader );
 		
 ここで一行ずつ読み込む
 
 		} catch (IOException e) {
 			System.out.println("error...");
 		}
 	}
 }




解答例:

 import java.io.*;
 import java.net.*;
 
 public class URLTest {
 	public static void main (String argv[]) {
 		try {
 			URL targetURL = new URL("http://www.ocha.ac.jp/");
 			InputStream istream = targetURL.openStream();
 			InputStreamReader isreader = new InputStreamReader(istream);
 			BufferedReader breader = new BufferedReader(  isreader );
 		
 			String line;
 			while((line=breader.readLine()) != null) System.out.println(line);
 		
 		} catch (IOException e) {
 			System.out.println("error...");
 		}
 	}
 }



***写真ファイルのダウンロード [#edb3e256]

 http://siio.jp/cat.jpg 

をダウンロードして、cat.jpgというファイルを作るプログラムを作ってください。
データはテキストじゃなくて、バイナリーです。

ヒント1:

InputStreamのインスタンスに対してread()メソッドを使うと1バイトのデータが得られます。読み終わると-1になります。
1バイトのデータを書き出すなら、FileOutputStreamだけで可能です。

ヒント2:

 import java.io.*;
 import java.net.*;
 
 public class URLJpeg {
 	public static void main (String argv[]) {
 		try {
 			URL targetURL = new URL("http://siio.jp/cat.jpg");
 			InputStream istream = targetURL.openStream();
 			
 			FileOutputStream fout = new FileOutputStream("cat.jpg");


というインスタンスを作って、

 istream.read()

で読んで、

 fout.write(1バイト)

で書き出します。


解答例

 import java.io.*;
 import java.net.*;
 
 //http://siio.jp/cat.jpg
 //をダウンロードして、cat.jpgというファイルを作るプログラム
 
 public class URLJpeg {
 	public static void main (String argv[]) {
 		try {
 			URL targetURL = new URL("http://siio.jp/cat.jpg");
 			InputStream istream = targetURL.openStream();
 			
 			FileOutputStream fout = new FileOutputStream("cat.jpg");
 			
 			int aData;
 			while((aData  = istream.read()) != -1) fout.write(aData);
 			
 			istream.close();
 			fout.close();
 			
 			
 		} catch (IOException e) {
 			System.out.println("error...");
 		}
 	}
 }



***本日のレポート [#od25ded4]

上記のプログラム(URLJpeg.java, URLJpeg.class) を、出席番号+名前のフォルダにいれて、ZIP圧縮して提出してください。`



***写真読み込みの高速化 [#ia7ce1f8]

上記の例では写真データを1バイトずつ読み書きしていました。
InputStreamのメソッドを調べると、複数バイト単位で読み込むメソッドがあります。
たとえば、512バイトずつ読み書きすることで、処理速度が向上すると期待できます。
そこで、複数バイト読み書きするよう、上記のプログラムを変更して、
実際にどの程度(実行速度にして何倍くらい)性能向上するか確認してみましょう。


 read
 
 public int read(byte[] b)
          throws IOException
 入力ストリームから配列長さだけのバイト数を読み込もうとし、それをバッファ配列 b に格納します。
 実際に読み込まれたバイト数は整数として返されます。
 戻り値は、バッファに読み込まれたバイトの合計数。ストリームの終わりに達してデータがない場合は -1

を使って読みこみ、

 write
 
 public void write(byte[] b,
                   int off,
                   int len)
            throws IOException
 指定された byte 配列の、オフセット位置 off から始まる len バイトを出力ストリームに書き込みます。

を使ってください。

-ヒント


 byte[] data = new byte[512];

という配列を用意して、

 	int datalength;
 	while(( datalength=istream.read(data)) != -1) fout.write(data, 0, datalength);

とします。

-解答例

 import java.io.*;
 import java.net.*;
 
 //http://siio.jp/cat.jpg
 //をダウンロードして、cat.jpgというファイルを作るプログラムを作ってください。
 //データはテキストじゃなくて、バイナリーです。
 
 public class URLJpeg2 {
 	public static void main (String argv[]) {
 		byte[] data = new byte[512];
 		try {
 			URL targetURL = new URL("http://siio.jp/cat.jpg");
 			InputStream istream = targetURL.openStream();
 			
 			FileOutputStream fout = new FileOutputStream("cat.jpg");
 			
 			int datalength;
 			while(( datalength=istream.read(data)) != -1) fout.write(data, 0, datalength);
 			
 			istream.close();
 			fout.close();
 			
 			
 		} catch (IOException e) {
 			System.out.println("error...");
 		}
 	}
 }


ここでは512バイトを読み込むことにしました。でも、InputStreamのメソッドを見ると、available()というのがあります。

 available()
 この入力ストリームのメソッドの次の呼出しによって、ブロックせずにこの入力ストリームから読み込むことができる(またはスキップできる)推定バイト数を返します。

これを使えば、適切な長さを見積もれるかもしれません。

***引数のURLをファイルにするプログラムを考えてみましょう [#mc747214]

curlというコマンドがあります。

 curl http://ocha.ac.jp/

などとすると、htmlが見られますし、

 curl http://siio.jp/cat.jpg > cat.jpg

などとすると、ファイルとして保存できます。これに近いプログラムを作ってみましょう。



***宿題 [#wb66142e]

上記の引数のURLをファイルにするプログラムを作ってください。
また、cat.jpgのファイル取得でまとめて読むことでどれくらい速度が改善したかを、
レポートにしてください。レポートの書式は任意です。(テキストファイルでかまいません)

これらのjava, class, レポートのファイルをまとめて、出席番号+名前のフォルダに入れて、圧縮して、12月10日の授業の開始時間に提出してください。


////////////////////////////////////////


**宿題提出 [#mfc546d7]

宿題の演習11.1の
プログラムのファイル(javaとclass)およびdata.datを、
学籍番号+名前のフォルダに入れて、zipで圧縮したファイルを提出してください。




*2015年10月29日 [#x03cc68c]



**第10章 Stringクラスとコレクションフレームワーク [#w938c6ce]

*** 入力した文字を逆に出力するプログラムを作る [#p6f8c354]

 [e100:?/Documents/java] siio% java TestString ochanomizu
 ochanomizu
 uzimonahco
 [e100:?/Documents/java] siio% 


このソースは、

 public class TestString {
 	public static void main (String argv[]) {
 		try{
 			System.out.println(argv[0]);
 			int len = argv[0].length();
 			for(int i = len - 1; i>=0; i--) {
 				System.out.print(argv[0].charAt(i));
 			}
 			System.out.println();
 		}
 		catch (Exception e) {
 			System.out.println("please input a word");
 		}
 	}
 }

である。

***Linked List の練習 [#d2a5cbd0]

サンプルプログラムを実行するときは、

 	LinkedList<String> list = new LinkedList<String>(); 

などと定義すると良い。


***program 10.2 改造 [#n30358b9]

Alice --> Bob  --> Cindy  --> DaveというLinkedListをつくって、
それからtoArray()メソッドでString配列を作ってfor each文で要素を印刷する



***Hash Mapの練習 [#jf7eb616]


プログラム10.4を参考にして、
以下のように動作する英語ー日本語単語変換プログラムを作れ。


 [e100:?/Documents/java] siio% java EtoJ banana
 バナナ
 [e100:?/Documents/java] siio% java EtoJ apple
 りんご
 [e100:?/Documents/java] siio% java EtoJ 
 Please input an English word

ヒント:

 import java.util.*;
 
 public class EtoJ{
 
 public static void main(String args[]) {
 	HashMap<String,String> map = new HashMap<String,String>();
 	
 	map.put("apple","りんご");
 	map.put("banana","バナナ");
 	map.put("orange","みかん");
 	map.put("pineapple","パイナップル");
 	map.put("grape","ぶどう");
 	map.put("peach","もも");
 	map.put("melon","メロン");
 	map.put("lemon","レモン");
 	
	try {
 	System.out.println(map.get(args[0]));
 	}
 	catch(Exception e) {
 	System.out.println("Please input an English word");
 	}
 
 	}
 }


***本日の提出物 [#j8347fc5]

EtoJ.javaとEtoJ.classをzipでまとめて提出してください。




***宿題 [#fbd2dbcc]

159ぺーじから166ページを読んで、演習11.1をやってください。
書き出すファイルの名前はdata.datにしてください。

作ったファイルを
 od -h dout.dat
または
 hexdump dout.dat
してみてください。

このプログラムのファイル(javaとclass)およびdata.datを、学籍番号+名前のフォルダに入れて、zipで圧縮したファイルを11.26の授業の開始時に提出してもらいます。


-----------

**第9章 エラーと例外処理 [#gd4f8eae]

次のプログラムを作って試してください。
引数が少ないとエラーが出るのを確認してください。

 public class TestException {
 	public static void main(String argv[]){
 			System.out.println(argv[0]+" "+argv[1]);
 			System.out.println("Nice to meet you.");
 	}
 }



エラーが出る可能性のある場所をtryでくくっておき、
エラーが出たらそれを細くする処置をcatchで指定します。

 public class TestException {
 	public static void main(String argv[]){
 		try{	
 			System.out.println(argv[0]+" "+argv[1]);
 			System.out.println("Nice to meet you.");
 		}
 		catch (Exception e) {
 			System.out.println("please input 2 words.");
 		}
 	}
 }

*2015年10月22日 [#r5318d81]



**第8章 継承 [#sd2e98f3]

継承の話をしました。
別のクラスを継承することで、
差分だけを書いて機能を拡張していくことができます。

http://gyazo.com/2c8ef14d8be63b9fc18c58d79f2f3879.png

*** Osaifuクラスを継承してOsaifuUSDクラスを作ってみよう [#fc83e4ee]
-OsaifuUSDクラスはアメリカで買い物をするときに便利な、アメリカドルでお金を出し入れできる財布です。
-あたらしく追加するメソッドは以下です
-- void inUSD(int x)   xドルをお財布に入金します。このとき円に換算して残高に追加します
-- int outUSD(int x)   xドルをお財布から出金します。このとき円に換算した金額だけ残高が減ります。戻り値はドルにしましょう。
--1ドルは90円にしてください
//-スーパークラスのメソッドを上書きするメソッドは以下です
//-- void print()   お財布の残高を円とドルで表示します
-OsaifuUSDクラスをテストするmain()メソッドでは次のことをやってください
-- OsaifuUSDインスタンスを一つ作ってそれをsaifu1という名前にする
-- OsaifuUSDインスタンスをもう一つ作ってそれをsaifu2という名前にする
--saifu1に1000円入金する
--saifu2に5ドル入金する
--saifu1とsaifu2が持っている金額を印刷する
--saifu1から2ドル出金してそれをsaifu2に入金する
--saifu1とsaifu2が持っている金額を印刷する

-動作例

http://gyazo.com/f51ea5895aaab32bb30b9a940d91515d.png

-ヒント:一行目はこれ

 public class OsaifuUSD extends Osaifu {


-ヒント:mainはこんな感じ

 	public static void main(String argv[]) {
 		OsaifuUSD saifu1= new OsaifuUSD();
 		OsaifuUSD saifu2=new OsaifuUSD();
 		saifu1.in(1000);
 		saifu2.inUSD(5);
 		saifu2.inUSD(saifu1.outUSD(2));
 		saifu1.print();
 		saifu2.print();
 	}


-解答例


 public class OsaifuUSD extends Osaifu {
 
 	public int outUSD(int usd) {
 		okane-=usd * 90;
 		return usd;
 	}
 
 	public void inUSD(int usd) {
 		okane+=usd * 90;
 	}
 	
 	public static void main(String argv[]) {
 		OsaifuUSD saifu1 = new OsaifuUSD();
 		OsaifuUSD saifu2 = new OsaifuUSD();
 		saifu1.in(1000);
 		saifu2.inUSD(5);
 		saifu1.print();
 		saifu2.print();
 		saifu2.inUSD(saifu1.outUSD(2));
 		saifu1.print();
 		saifu2.print();
 		
 	}
 }
*** OsaifuUSDクラスの改造(1) [#g8c0b7a2]

親のメソッドを活用しても良い

 public class OsaifuUSD extends Osaifu {
 
 	public int outUSD(int usd) {
 		return ( out( use * 90) / 90 );
 	}
 
 	public void inUSD(int usd) {
 		in( usd * 90 );
 	}
 	
 …
 
 }


*** OsaifuUSDクラスの改造(2) [#sa44f577]

OsaifuUSDにprint()メソッドを追加して、
円表示の次の行に ( xxx USD ) と残高をUSD表示するようにしてください。
円表示を行う部分はスーパークラスOsaifuのインスタンスメソッドprint()を利用することを考えてみてください。


http://gyazo.com/39a7b24a8c45e15ac55693592c2eb7cf.png

-解答例

 	public void print() {
 		super.print();
 		System.out.println("( " + (okane / 90) + " usd )" );
 	}


***小テスト練習(そのうち実施します) [#e70c4654]

以下のプログラムの中で、
クラス、インスタンス、サブクラス、スーパクラス、クラスメソッド、インスタンスメソッドがどれであり、
インスタンス化、継承がどこで行われているのか確認してください。
(importで始まる一行目はまだ説明していない内容なので小テストでは扱いません。無視してください)


 import javax.swing.JFrame;
 
  public class SampleWindow extends JFrame {
 	public static void main(String args[]) {
 		SampleWindow w = new SampleWindow();
  		w.setVisible(true);
 	}
  }








***本日のレポート [#t533fcb9]
今日作ったOsaifuUSD.javaと、OsaifuUSD.classを上記の方法で提出してください。



---------------




**第7章 [#uf665221]


*** つぎにOsaifuクラスにコンストラクタを追加してみよう [#a8a56d7e]
-Osaifu() で残金0のインスタンスを作る
-Osaifu(int x) で引数を残金の初期値としたインスタンスを作る

ことができるコンストラクタを作ろう。

これをmainから呼んで、上記のプログラムと同じことをするためには、

 		Osaifu saifu1 = new Osaifu(1000);//インスタンスを作る
 		//最初の保持金額を1000円にする
 		Osaifu saifu2 = new Osaifu(500);//インスタンスを作る
 		//最初の保持金額を500円にする

とすることになる。


***コンストラクタ解答編 [#w62499a7]

以下のコンストラクタを作ることになる。

 	Osaifu() { okane = 0; }
 	Osaifu(int x) { okane = x; }

これは以下のように書いても良い。

 	Osaifu() { this(0); }
 	Osaifu(int x) { okane = x; }



**第6章(復習) [#ua39b616]


***クラスとインスタンスの説明をしました [#gc6def4c]
-クラスは型、インスタンスはそれから作られたもの
--クラスがたいやきの焼き型だとすると、インスタンスはそれから作られたたいやき
--クラスは設計図でインスタンスはそれから作られたもの
-クラスとインスタンスそれぞれにメソッドと変数がある
--クラス変数 例:何個のインスタンスを作ったか?
--クラスメソッド 例:インスタンスを作れ
--インスタンス変数 例:ひとつのたいやきの重さ
--インスタンスメソッド 例:たいやきをxxグラム食べる


http://gyazo.com/bbdd3587977a172f7fa7f00c4f5787e0.png


*** Osaifuクラスを作ってみよう [#i9df5c2e]
-Osaifuクラスからはインスタンスがたくさん作られる
--Osaifuクラスはお財布の設計図/工場、ここから実際のお財布(インスタンス)が複数作られる
--工場出荷時の残金は0円だけど、その後、いろいろな値になるだろう(お金持ちのお財布には残金が多いだろうし、逆ならば少ないだろう)
--ということで残金はインスタンス変数とすべきだろう
-Osaifuクラスには次のメソッド、変数が必要だろう
--残金を表すインスタンス変数 int okane
--お金を入金するインスタンスメソッド void in(int x);
--お金を出金するインスタンスメソッド int out(int x);  戻り値は実際に出金できた金額(残金が不足ならばあるだけしか出せない)
--残金を印刷するインスタンスメソッドがあってもよいだろう void print(); &br;
http://gyazo.com/bd6eaafd220dc7ff791288089f293b28.png
-Osaifuクラスをテストするmain()メソッドでは次のことをやってください
-- Osaifuインスタンスを一つ作ってそれをsaifu1という名前にする
-- Osaifuインスタンスをもう一つ作ってそれをsaifu2という名前にする
--saifu1に1000円入金する
--saifu2に500円入金する
--saifu1とsaifu2が持っている金額を印刷する
--saifu1から200円出金してそれをsaifu2に入金する
--saifu1とsaifu2が持っている金額を印刷する

 	public static void main(String argv[]) {
 		Osaifu saifu1 = new Osaifu();
 		Osaifu saifu2 = new Osaifu();
 		saifu1.in(1000);
 		saifu2.in(500);
 		saifu1.print();
 		saifu2.print();
 		saifu2.in(saifu1.out(200));
 		saifu1.print();
 		saifu2.print();
 	}
 
http://gyazo.com/c618901458edc1ba338cab87d2810157.png


-Osaifu.java 解答編

 public class Osaifu {
 	int okane;	
 	public void in (int x) { okane += x; }
 	public int out(int x) { okane -= x; return x; }
 	public void print() {
 		System.out.println( "okane = " + okane +" yen");
 	}
 	
 	public static void main(String argv[]) {
 		Osaifu saifu1 = new Osaifu();
 		Osaifu saifu2 = new Osaifu();
 		saifu1.in(1000);
 		saifu2.in(500);
 		saifu1.print();
 		saifu2.print();
 		saifu2.in(saifu1.out(200));
 		saifu1.print();
 		saifu2.print();
 	}
 }

--このプログラムでは残金がマイナスになってしまってもかまわない設計になってしまっています。実際には残金だけの金額しか出せないはずなので、outメソッドを改良して、残金以上の金額を要求されたら、残金分だけしか出さないように変更してみてください。

--このためには、例えばoutメソッドを以下のようにすれば良い

 	public int out(int x) {
 		if(x < okane ) {
 			okane = okane -x;
 			return x;
 		} else {
 			int nokori = okane;
 			okane =0;
 			return nokori;
 		}
 	}	












*2015年10月15日 [#yf191a57]


**第5章 (つづき) [#i3e84303]


***for-each文は新しい手法なので練習しましょう [#s17e2f54]

-プログラム5.7の代わりに以下をやってみよう

 class ArrayTest {  
 public static void main (String args[]) {
 	int[] vec = new int[3];
 	vec[0]=1;
 	vec[1]=2;
 	vec[2]=3;
 	for (int x: vec) {
 	     System.out.println(x);
 	     }
        }
 }


*** 演習 [#vc946bd9]

mainの引数argsは、Stringの配列で、コマンドラインで起動したとき、
コマンドの後に続けた書いた文字が入っています。
args[0], args[1], args[2] .... をすべてfor-each文で
表示するプログラムを書いてみましょう。

http://gyazo.com/8d8effac163e0dc939e74f237d8507b1.png

ヒント:for(String s: args)を使います
 

-解答例

 class ArgsTest2 {  
 public static void main (String args[]) {
 	for(String s: args) 
 	    System.out.println(s);
        }
 }


--args[]の文字をすべてfor-each文で表示する

 javac ArgsTest2 cat dog cow fox
 catdogcowfox


--args[]の文字をすべてfor-each文で+つけて表示する

 javac ArgsTest2 cat dog cow fox
 cat + dog + cow + fox




**第6章 クラスの基礎 [#h0d85489]

***クラスとインスタンスの説明をしました [#gc6def4c]
-クラスは型、インスタンスはそれから作られたもの
--クラスがたいやきの焼き型だとすると、インスタンスはそれから作られたたいやき
--クラスは設計図でインスタンスはそれから作られたもの
-クラスとインスタンスそれぞれにメソッドと変数がある
--クラス変数 例:何個のインスタンスを作ったか?
--クラスメソッド 例:インスタンスを作れ
--インスタンス変数 例:ひとつのたいやきの重さ
--インスタンスメソッド 例:たいやきをxxグラム食べる


http://gyazo.com/bbdd3587977a172f7fa7f00c4f5787e0.png


-演習問題6.1, 6.2, 6.3

例えば以下のような実行結果が出るようにしてください

http://gyazo.com/deeb78a70a724a01ce76945235d42ab8.png

-Point3Dのメソッドを充実させて次のmain()メソッドで 

 10, 20, 30
 -10, -20, -30

という結果が出るようにしましょう


        public static void main(String argv[]) {
                Point3D pt1 = new Point3D();
                Point3D pt2 = new Point3D();
                pt1.set(10, 20, 30);//インスタンス変数を設定
                pt2.set(-pt1.getx(), -pt1.gety(), -pt1.getz());
                pt1.print();//インスタンスメソッド呼出
                pt2.print();
 
        }

-Point3Dに、他の点との距離を返すメソッド distance ( Point3D p ) を実装して、次のmain()メソッドで 


 10, 20, 30
 -10, -20, -30
 74.83314773547883

という結果が出るようにしましょう


        public static void main(String argv[]) {
                Point3D pt1 = new Point3D();
                Point3D pt2 = new Point3D();
                pt1.set(10, 20, 30);//インスタンス変数を設定
                pt2.set(-pt1.getx(), -pt1.gety(), -pt1.getz());
                pt1.print();//インスタンスメソッド呼出
                pt2.print();
 
                System.out.println(pt1.distance(pt2));
 
        }


--解答例

	
 	double distance ( int ptx, int pty, int ptz ) {
 		int dx = ptx - this.x;
 		int dy = pty - this.y;
 		int dz = ptz - this.z;
 		return  Math.sqrt(dx * dx + dy * dy + dz * dz);
 	}
 	
 	double distance ( Point3D p ) {
 		return this.distance(p.getx(), p.gety(), p.getz());
 	}


**第7章 クラスとオブジェクトの操作 [#k1b96e7b]





***	他の点との距離を返すメソッドの例を説明しました [#xfa5f246]

 	double distance ( int ptx, int pty ) {
 		int dx = ptx - this.x;
 		int dy = pty - this.y;
 		return  Math.sqrt(dx * dx + dy * dy);
 	}
 	
 	double distance ( Point p ) {
 		return this.distance(p.getx(), p.gety());
 	}

distanceという名前は同じでも、引数の違いで、異なる動作をさせることができます。



*** Osaifuクラスを作ってみよう [#i9df5c2e]
-Osaifuクラスからはインスタンスがたくさん作られる
--Osaifuクラスはお財布の設計図/工場、ここから実際のお財布(インスタンス)が複数作られる
--工場出荷時の残金は0円だけど、その後、いろいろな値になるだろう(お金持ちのお財布には残金が多いだろうし、逆ならば少ないだろう)
--ということで残金はインスタンス変数とすべきだろう
-Osaifuクラスには次のメソッド、変数が必要だろう
--残金を表すインスタンス変数 int okane
--お金を入金するインスタンスメソッド void in(int x);
--お金を出金するインスタンスメソッド int out(int x);  戻り値は実際に出金できた金額(残金が不足ならばあるだけしか出せない)
--残金を印刷するインスタンスメソッドがあってもよいだろう void print(); &br;
http://gyazo.com/bd6eaafd220dc7ff791288089f293b28.png
-Osaifuクラスをテストするmain()メソッドでは次のことをやってください
-- Osaifuインスタンスを一つ作ってそれをsaifu1という名前にする
-- Osaifuインスタンスをもう一つ作ってそれをsaifu2という名前にする
--saifu1に1000円入金する
--saifu2に500円入金する
--saifu1とsaifu2が持っている金額を印刷する
--saifu1から200円出金してそれをsaifu2に入金する
--saifu1とsaifu2が持っている金額を印刷する

 	public static void main(String argv[]) {
 		Osaifu saifu1 = new Osaifu();
 		Osaifu saifu2 = new Osaifu();
 		saifu1.in(1000);
 		saifu2.in(500);
 		saifu1.print();
 		saifu2.print();
 		saifu2.in(saifu1.out(200));
 		saifu1.print();
 		saifu2.print();
 	}
 
http://gyazo.com/c618901458edc1ba338cab87d2810157.png



***本日のレポート [#t533fcb9]
今日作ったOsaifu.javaと、可能ならばOsaifu.classを上記の方法で提出してください。





*2015年10月8日 [#qc15c392]

**第3章 [#xc22f04b]

-演習

--演習3.4をみて、自分の名前の最初の文字の文字コードを表示してみてください。

--arg[0]とarg[1]をprintlnの中で+でつないで表示する

http://gyazo.com/8159f78165e17781a7110de3763c833c.png


ヒント

 class ArgsTest {  
 public static void main (String args[]) {
 	System.out.println(args[0]);
         }
 }


解答

 class ArgsTest {  
 public static void main (String args[]) {
 	System.out.println(args[0] + " + " + args[1]);
         }
 }

**第5章 [#p54c6568]

***演習 [#leda55b3]

-演習問題5.4(変更)

乱数を10個表示する

 public class Score {
 	public static void main (String argv[]) {
 		int i,a;
 		for(i=0;i<10;i++) {
 			a=(int)(Math.random() * 100);
 			System.out.println(a);
 		}
 	}
 }

次にこの乱数を点数とみなして、演習問題5.4の基準に従ってABCDEを表示するプログラムを書け。
動作例を以下に示す。

http://gyazo.com/829b04a7fc82cdfe9dd0dfa650af873e.png

解答例:

 public class Score {
 	public static void main (String argv[]) {
 		int i,a;
 		for(i=0;i<10;i++) {
 			a=(int)(Math.random() * 100);
 			System.out.print(a + " ");
 			if(a<40) System.out.println("D");
 			else if(a<60) System.out.println("C");
 			else if(a<80) System.out.println("B");
 			else System.out.println("A");
 		}
 	}
 }

-演習問題5.5をやってみよう

http://gyazo.com/1733defca0c709c41c69ea729320ab61.png


解答例:

 class Kinri {
 public static void main (String args[]) {
 	double okane=100000;
 	int year;
 	year=1;
 	while(okane < 200000) {
 		okane = okane * 1.05;
 		System.out.println("year = " + year + "  okane= " + okane);
 	 	year++;
 	}
 }
 }

現在の普通預金の金利0.04%だと倍になるのに何年かかるだろうか。確かめてみよう。

http://gyazo.com/95cd94db39b407e7961355b20da8fc67.png


-演習5.6をやってみよう

while文をfor文に変えてみる

解答例:

 class Kinri {
 public static void main (String args[]) {
 	double okane=100000;
 	int year;
 	for(year=1;okane < 200000; year++) {
 		okane = okane * 1.05;
 		System.out.println("year = " + year + "  okane= " + okane);
 	}
 }
 }




***本日のレポート [#x1c7def0]

今日作ったKinri.javaとKinri.classを以下の方法で提出してください。




** 出来上がったプログラムの提出方法 [#bd9cbbf8]
- フォルダを作ってその中にjavaファイルとclassファイル
//と、取扱説明書ファイルと、それ以外に必要なファイルがもしあればそれら
を入れてください。
//フォルダの中のclassファイルをダブルクリックしたらプログラムが起動することを確認してください。
-このフォルダに名前を付けてください。フォルダの名前は、「出席番号+氏名(ローマ字の姓名)+必要ならばバージョン番号の数字」にしてください。たとえば09020999siioitiro01のように。なお全部半角英数字でお願いします。
-このフォルダを圧縮してください
--フォルダを選択してファイルメニューから圧縮を選択します
-圧縮したファイルを以下の手順で
 /home/isstaff/siio/Public/Drop Box/.
に提出してください。ターミナル.appからなら
 cp 123456siioitiro.zip /home/isstaff/siio/Public/Drop\ Box
としてください。ファインダーからなら、メニューから「移動」「フォルダへ移動...」を選んで
以下のように入力して、移動ボタンを押して、そこに現れるドロップボックスホルダに、ドラッグアンドドロップしてください。

http://siio.jp/gyazo/dropbox.png
--書き込み専用なので確認できないけどokですかという意味のダイアログが出るかと思いますが問題ありません。
-レポート提出用フォルダは書き込み専用で見ることができません。アップロードできたかどうか不安でしたら教員まで質問してください。
-授業中でしたら、[[ココを見ると:http://siio.jp/lecture/java_report.html]]一覧をみることができます。
-同じ名前のフォルダを投げ込むと、エラーになります。ということで新しいバージョンができたら別の名前のフォルダを作って提出し直してください。(フォルダ名最後に数字をつけてください)




**欠席状況 [#i3ef368f]
3/4以上出席してください。(欠席は3回まで)欠席4回で自動的に不可になります。
欠席3回以下なら不可にはなりませんが、成績が下がるかもしれません.
//ので、心当たり無ければ連絡ください。

//|学籍番号|欠席回数|判定|
//||||
//(2015/1/22現在)


**javaのマニュアル [#td69bbae]

http://docs.oracle.com/javase/jp/8/api/


**教科書 [#a7e1ce26]

http://gyazo.com/de3288074dae1c75f6df4ef3c0b9b3d4.png

http://www.amazon.co.jp/dp/4883732258/

買ってください。もしくは、先輩から安く譲ってもらってください。

** この講義の目的 [#l5592b29]
+Javaでプログラムする
+オブジェクト指向の概念を理解してプログラミングする
+GUIプログラミングをする

** この講義の順序 [#gcf48d66]
+Javaになれる(C言語などのプログラミング手法の復習)
+オブジェクト指向について理解する
+GUIプログラミングについて理解する(イベント駆動)
+お絵描きプログラムを作ってみる

** 成績評価 [#c732dbb9]
+お絵描きプログラムの完成度,作り込み
+毎回の宿題の達成(参考程度)
+出席状況(参考程度)




*2015年10月1日 [#k43eb4b5]

**第1章および第2章 [#y3ae1beb]


*** Mac OS XでJavaを使う [#g3e7de3f]

Mac OS XはJavaと相性が良く、最初からjavaがインストールされています。
ということでWindowsより簡単に(というか何もしなくても)javaが使えます。

*** terminalを起動する [#ia8beba9]

//#ref(How2Java/terminal.png)

http://siio.jp/gyazo/7366bfab668207c6598c4d88ef70d2d4.png

- terminalは、/Applications/Utilities/の中にあります。
ちなみに、/Applicationsはファインダでは/アプリケーションと日本語として見えます。
/Applications/Utilities/は、/アプリケーション/ユーティリティ/と日本語として見えています。

- ダブルクリックすると起動します。
よく使うことになると思いますので、dockにドラッグアンドドロップして
登録しておくと良いかと思います。(うちの子はこのアイコンを「顔テレビ」と呼んでいます」)

- メニューのターミナル/環境設定...を開きます。
ここで、テキストを選んで、「テキストをアンチエイリアス処理」に
チェック入れておくとフォントが奇麗なのでおすすめです。

http://siio.jp/gyazo/8aa6f5ab8878bc57c0657b94f5ae7a58.png

- おなじウィンドウの「詳細」に、「文字エンコーディング」というのがあります。
Javaの場合、ここで「Unicode (UTF-8)」を選んでおきましょう。
(日本語コードにはいろいろな種類があって混乱しますが、21世紀に生きるみなさんはUnicodeで統一していきましょう)

//http://gyazo.com/1b36039be113ef9e8ed04842aaeb3da6.png

- ターミナルから、javac helpとタイプしてみてください。Javaがすでに入っているので、
オプションの説明が日本語で出てくると思います。
--最近のMac OS X (Mountain Lionなど)では、Javaが標準で入っていない場合もあります。
その場合は、ダインロードするかどうか聞かれますので、ダウンロードしましょう。
--ここでの日本語表示が化けていたら、javaがUnicodeじゃなくてShift-JISなどのコードで動いていることになります。ターミナルをShift-JISなどに設定しても良いのですが、ここは、JavaをUnicodeで動かすようにしましょう。

-JavaをUnicodeで動かす(前項で文字化けした場合の対処)
--javacを起動するときに、javac -J-Dfile.encoding=UTF-8 とオプションを付けます
--javaを起動するときには、java -Dfile.encoding=UTF-8 とオプションを付けます。
--面倒なので、.bash_profileに登録しておきましょう
-- ~/.bash_profileを開いて以下の行を追加します
 alias javac='javac -J-Dfile.encoding=UTF-8'
 alias java='java -Dfile.encoding=UTF-8'


*** miを用意しておく [#qfba9e5b]


http://siio.jp/gyazo/2c0e58d1b83d396e1fbe6f5d247670ff.png

- Javaのプログラムを作るエディタです。一番簡単にはterminalからviとかemacsとかpicoとかタイプして
エディタを呼び出せば良いです。

- でも日本語の設定などが結構難しいので、GUIベースのエディタを使ってみましょう。

- いくつかありますが、おすすめの一つはmi (みみかきエディタ) という、便利なフリーウェアのテキストエディタです。

- miを使うには、http://www.mimikaki.net/からダウンロードして~/Applicationsにコピーします。

- これも便利なのでdockに入れておくとよいと思います。

http://siio.jp/gyazo/7579915fefe1ecd9c0e4e2ddfa55177d.png


*** 超簡単なプログラム(hello world)を作ってみる [#v4ccc293]


- ターミナルから、vi Hello.javaとかemacs Hello.javaとかpico Hello.javaとかタイプしたり、
もしくは、miを起動してファイル/新規/javaを選んで新しいファイルを作って開きます。

- ここで、以下のようなプログラムを書いてみます。

 class Hello {  
 public static void main (String args[]) {
         System.out.println("hello java world!");
         }
 }

-このときmiで改行コードをLF (UNIX)にしておいてください。またUTF-8になっていれば日本語も正しく出るはずです。

http://siio.jp/gyazo/20121004010107.png


- これをHello.javaという名前で保存して、コンパイル実行します。すると以下のようになります。

 javac Hello.java  (コンパイルする)
 java Hello      (実行する。.javaなどの拡張子は不要)
 hello java world!   (結果)


- 次に簡単なウィンドウを出してみましょう。

授業の最後の方で紹介する,Swingというフレームワークを使ってウィンドウを出してみます.


 import javax.swing.JFrame;
 public class SimpleWindow {
 
        public static void main(String argv[]) {
                JFrame f = new JFrame("私が作った最初の窓");
                f.setSize(200,100); 
//                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setVisible(true);
        }
 
 }

これを&#x53;impleWindow.javaという名前で保存して、

 javac SimpleWindow.java
 java SimpleWindow

とタイプしてコンパイル/実行します。
このプログラムは,ウィンドウのクローズボタンを押しても終了しません.
プログラムを停止するには,ターミナルでコントロール-cを押します.

#ref(How2Java/simplewindow.png)


***本日のレポート [#r007077c]

今日作ったSimpleWindow.javaとSimpleWindow.classを以下の方法で提出してください。




** 出来上がったプログラムの提出方法 [#bd9cbbf8]
- フォルダを作ってその中にjavaファイルとclassファイル
//と、取扱説明書ファイルと、それ以外に必要なファイルがもしあればそれら
を入れてください。
//フォルダの中のclassファイルをダブルクリックしたらプログラムが起動することを確認してください。
-このフォルダに名前を付けてください。フォルダの名前は、「出席番号+氏名(ローマ字の姓名)+必要ならばバージョン番号の数字」にしてください。たとえば09020999siioitiro01のように。なお全部半角英数字でお願いします。
-このフォルダを圧縮してください
--フォルダを選択してファイルメニューから圧縮を選択します
-圧縮したファイルを以下の手順で
 /home/isstaff/siio/Public/Drop Box/.
に提出してください。ターミナル.appからなら
 cp 123456siioitiro.zip /home/isstaff/siio/Public/Drop\ Box
としてください。ファインダーからなら、メニューから「移動」「フォルダへ移動...」を選んで
以下のように入力して、移動ボタンを押して、そこに現れるドロップボックスホルダに、ドラッグアンドドロップしてください。

http://siio.jp/gyazo/dropbox.png
--書き込み専用なので確認できないけどokですかという意味のダイアログが出るかと思いますが問題ありません。
-レポート提出用フォルダは書き込み専用で見ることができません。アップロードできたかどうか不安でしたら教員まで質問してください。
-授業中でしたら、[[ココを見ると:http://siio.jp/lecture/java_report.html]]一覧をみることができます。
-同じ名前のフォルダを投げ込むと、エラーになります。ということで新しいバージョンができたら別の名前のフォルダを作って提出し直してください。(フォルダ名最後に数字をつけてください)



---------

*ヒューマンインタフェース 2015年前期 [#q0729239]

**出席状況 [#id495fc6]

学部「ヒューマンインタフェース」は出席重視の授業です.そのため70%以上出席お願いします.
授業回数が15回程度と見込まれますので,欠席が4回を超えた場合は単位が出ません.
//以下に(初回の4/10を除く)授業全体の欠席状況を示しておきます.
欠席回数は成績に大きく影響しますので、間違いありましたら至急お知らせください.

//|学籍番号|欠席回数|出席点|
//|1320538 | 0| |

|学籍番号|4月17日|4月24日|5月1日|5月8日|5月15日|5月22日|5月29日|6月12日|6月19日|6月26日|7月3日|7月10日|7月17日|7月24日|
|1320501|欠|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320502|欠|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320504|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320505|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320506|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320507|出|出|出|出|出|出|出|出|出|出|欠|欠|出|出|
|1320508|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320509|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320510|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320511|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320512|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320514|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320516|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320517|出|出|出|出|出|出|出|出|出|出|出|出|出|欠|
|1320518|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320519|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320520|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320522|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320523|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320525|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320526|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320527|出|出|欠|出|出|出|出|出|出|出|出|出|出|出|
|1320528|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320529|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320530|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320531|出|出|出|出|出|出|出|出|出|出|出|欠|出|出|
|1320532|出|出|出|出|欠|出|出|出|出|出|出|出|出|出|
|1320533|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320534|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320535|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320536|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320537|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320539|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320540|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320541|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320542|出|欠|出|出|出|出|欠|欠|出|欠|欠|欠|欠|欠|
|1320543|出|出|出|出|出|出|出|出|出|出|欠|出|出|出|
|1320544|出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1220527|出|出|出|出|出|出|出|出|欠|出|出|欠|出|欠|
|1220529|出|出|欠|出|出|出|出|出|出|出|欠|出|出|出|
|1220533|出|出|出|出|出|出|出|出|出|出|出|出|出|出|



** ヒューマンインタフェースのレポート 2015年前期 [#o7c956d4]

//案内が遅れてすみません。案内が遅れたことを配慮して締め切りを予告より1週間延期しました。

** レポートのお知らせ [#ha061f9f]
- 提出は任意です.もし良いレポートを提出いただけたら出席点の加算に使用します.
- 締め切り2015年9月11日金曜日
-形式分量:A4, ページ数は2-3ページ程度
-提出先・提出方法:PDFにしてsiio@mac.comまでメール添付で送付
--メールの標題は「ヒューマンインタフェースレポート: 13205XX」としてください。数字部分は出席番号です。
//--提出いただいた方はここのページでお知らせします。提出してしばらく経つのに、
--提出いただいた方は以下のとおりです。提出してしばらく経つのに、
自分の番号がなかなか表示されない場合は,受付されていないかもしれません.もう一度催促してください
(提出を確認出来るよう締め切りより早めに提出していただくことをお勧めします)


|学籍番号もしくはペンネーム|
|1320501|
|1320502|
|1320504|
|1320508|
|1320512|
|1320514|
|1320516|
|1320523|
|1320525|
|1320530|
|1320536|
|あこがれは早寝早起き|
|ヒューマン|


//|学籍番号|受理日|
//| 1320516 |2015年8月19日|
//| 1120506 |2013年9月6日|
//| 1120513 |2013年9月6日|
//| 1120503 |2013年9月6日|
//| 1120532 |2013年9月6日|
//| 1120537 |2013年9月6日|
//| 1120507 |2013年9月6日|
//| 1120528 |2013年9月6日|


**レポートの課題 [#bbbfc878]
+身の回りの携帯機器、家電製品、機械製品、コンピュータソフトウェア、
道具、日用品、調度品、設備などから、
使いにくいと思われる道具を見つけ出して欲しい。
+そして、それがなぜ使いにくいのかを、
授業で説明した、
制約、マッピング、Affordance、モデル、
エラー対策、 標準化、直接操作、メタファー、モードなどの用語を使って分析せよ。
(全部の用語を使う必要は無い)
+また,自分ならこのように設計して使いやすくするというアイディアを、
これも授業で使った用語を交えて、述べよ.


** ヒューマンインタフェースの予定 2015年前期 [#da848776]
-4/10
-4/17
-4/24
-5/1
-5/8
-5/15
-5/22 
-5/29
-6/5 休講日のため授業はありません
-6/12
-6/19
-6/26
-7/3
-7/10
-7/17
-7/24
-7/31 試験週間のため授業はありません

//**宿題
//
//***人の反応速度を測定するプログラムを作って測定してください。(2014.4.24) † [#jbad7411]
//-連休明けの授業(5/15)の開始時に、A4, 1枚(両面印刷でも可)で提出してください。
//--用紙の上辺に学籍番号、学年、氏名を1行で書いておいてください。
//-C 言語では,次のようなプログラムで、”hit now”という文字を表示した後、リターンキーが押されるまでの時間を測定できます。
//--http://siio.jp/hci/hitnow.c
//--このプログラムは固定時間(5秒)後にhit nowが表示されます。乱数を使って表示までの時間を変える改良をしてもらっても良いです。(改良したらそのこともレポートしてください)
//-これによりあなたの応答速度を複数回実測して、人の応答速度が 300ms 程度であることを確認してください。 
//-また個人差や年齢などで結果は変わるかもしれません。周りの複数の人に被験者になってもらって調査しても面白いかもしれません。
//-また何度も測定することで、習熟して速度が向上したり、それでも限界があったり、さらには、逆に疲労により速度が低下することがあるかもしれません。
//--そのような現象が観察できたら、これも報告してください。(教科書8章の学習曲線を参考にしてください)

//***GUI黎明期のPC性能を調べてください(2014.4.17) [#ba9db6ff]
//-GUI黎明期PCのCPU名、CPUクロック、メモリ容量、画素数を調べてください
//--現在,Windows を使っている人は,最初の Windows が出荷された 1985 年当時に使われていたIBM PC/AT
//--Mac OS Xを使っている人は,1984に出荷された最初の Macintosh 
//-今あなたが使っているコンピュータと比較してください. 
//-次回の授業(4/24)最初に配布するA5サイズの用紙に各自で記入して提出してもらいます

**教科書 [#r47d2493]
http://ec2.images-amazon.com/images/I/51SsP4P1UiL._SL500_AA300_.jpg

http://www.amazon.co.jp/dp/4781912605/

**授業資料 [#lca8065f]
+http://siio.jp/lecture/humaninterface/HCI_c1.ppt.pdf
+http://siio.jp/lecture/humaninterface/HCI_c2.ppt.pdf
+http://siio.jp/lecture/humaninterface/HCI_c3.ppt.pdf
+http://siio.jp/lecture/humaninterface/HCI_c4.ppt.pdf
+http://siio.jp/lecture/humaninterface/HCI_c5.ppt.pdf
+http://siio.jp/lecture/humaninterface/HCI_c6.ppt.pdf
+http://siio.jp/lecture/humaninterface/HCI_c7.ppt.pdf
+http://siio.jp/lecture/humaninterface/HCI_c8.ppt.pdf
+http://siio.jp/lecture/humaninterface/HCI_c9.ppt.pdf
+http://siio.jp/lecture/humaninterface/HCI_c10.ppt.pdf

(授業開始直前や直後に差し替えされている可能性があります。)

**教科書サポートページ [#a8165368]

-http://lab.siio.jp/index.php?CSL11HCI




**宿題:ボタンを押すたびに点灯/消灯を繰り返す(トグルする)プログラム (2015/7/17提出)[#s369672d]

以下は、Arduinoの2ピンに接続された押しボタンスイッチを押すとLEDが点灯するプログラムです。これを改造して、押しボタンスイッチを押すたびに、点灯/消灯を切り替えるプログラムを作ってください。
ちなみにHIGHとLOWはintの値で、int型の変数で保存することができます。

 int outpin=13; //An LED is connected to ping 13
 int inpin=2;  //A switch is connected to pin 2
 
 void setup() {                
   // initialize the digital pin as an output and input.
   pinMode(outpin, OUTPUT);     
   pinMode(inpin, INPUT);
 }
 
 void loop() {
   if ( digitalRead(inpin) == HIGH) {
     digitalWrite(outpin, LOW);   // set the LED on
   }
   else {
     digitalWrite(outpin, HIGH);    // set the LED off
   }
   delay(30);              // wait for 30 msecond
 }


**宿題:人の反応速度を測定するプログラムを作って測定してください。(2015.5.1) [#gc9f981e]
-連休明けの授業(5/8)の開始時に、A5, 1枚に書いて提出していただきます。
-C 言語では,次のようなプログラムで、”hit now”という文字を表示した後、リターンキーが押されるまでの時間を測定できます。
--http://siio.jp/hci/hitnow.c
--このプログラムは固定時間(5秒)後にhit nowが表示されます。
-- 乱数を使って表示までの時間を変える改良をしてもらっても良いです。(改良したらそのこともレポートしてください)
-これによりあなたの応答速度を実測して、人の応答速度が 300ms 程度であることを確認してください。(複数回実測して平均とってもらえるとさらに正確ですね)



*情報と職業 2015年前期 [#dab71744]

**出席表 [#mcfd1ede]

間違いがあったら至急連絡ください。欠席回数が5回以上は単位が出ません。

|学籍番号|履修|4月16日|4月23日|4月30日|5月14日|5月21日|5月28日|6月4日|6月11日|6月18日|6月25日|7月2日|7月9日|7月16日|7月23日|
|1220507|聴講|出|出|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|
|1220510||出|出|出|出|出|出|出|出|出|欠|出|出|出|出|
|1220521|取消|出|欠|出|出|出|欠|出|出|欠|欠|欠|欠|欠|欠|
|1220522|未履修|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|
|1220530|未履修|出|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|
|1220533||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1220534||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1220541||出|出|出|出|出|欠|出|出|出|出|出|出|出|欠|
|1320501||欠|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320502|未履修|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|
|1320504||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320505||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320506|未履修|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|
|1320507||出|出|出|出|出|出|出|出|出|出|欠|出|欠|出|
|1320508|聴講|出|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|
|1320509||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320510|未履修|出|出|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|
|1320511|未履修|出|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|
|1320512||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320514||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320516||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320517||出|出|出|出|出|出|出|出|出|出|欠|出|出|欠|
|1320519||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320520||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320522||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320523|未履修|出|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|
|1320524|取消|出|出|出|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|
|1320525|未履修|出|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|
|1320526|取消|出|出|出|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|
|1320528||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320529||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320530||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320531||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320532|未履修|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|
|1320533|聴講・取消|出|出|出|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|
|1320534|未履修|出|出|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|
|1320535||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320536||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320537||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320538||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320539|未履修|出|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|欠|
|1320540||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320541||出|出|出|出|出|出|出|出|出|出|出|出|出|出|
|1320542||出|出|欠|欠|出|出|出|出|出|欠|欠|欠|出|出|
|1320543||出|出|欠|出|出|出|出|出|出|出|出|欠|出|出|
|1320544||出|出|出|出|出|出|出|出|出|出|出|出|出|出|

** 情報と職業のレポート 2015年前期 [#d5f764d8]

//レポートを予定しています。
//案内が遅れてすみません。案内が遅れたことを配慮して締め切りを予告より1週間延期しました。

//** レポートのお知らせ [#m0a091c4]
- 提出は任意です.もし良いレポートを提出いただけたら出席点の加算に使用します.
- 締め切り2015年9月11日金曜日
-形式分量:A4, ページ数は1ページ
-提出先・提出方法:PDFにしてsiio@mac.comまでメール添付で送付
--メールの標題は「情報と職業レポート: 13205XX」としてください。数字部分は出席番号です。
//--提出いただいた方は以下でお知らせします。提出してしばらく経つのに、
--提出いただいた方は以下のとおりです。提出してしばらく経つのに、
自分の番号がなかなか表示されない場合は,受付されていないかもしれません.もう一度催促してください(提出を確認出来るよう締め切りより早めに提出していただくことをお勧めします)

|学籍番号|受理日|
|1320501|2015年9月6日|
|1320505|2015年9月11日|
|1320516 |2015年8月28日|
|1320520|2015年9月9日|
|1320530|2015年9月11日|
|1320538|2015年9月9日|
|1220510|2015年9月1日|
|1220534|2015年9月11日|





**レポートの課題 [#d02bfdc8]

情報関連企業のなかで、将来性があると思う企業(就職したら安定していると思われる企業、長期にわたって株式投資しても良いと思う企業)を具体的にあげて、授業で説明したことがらに基づいて、その理由を書いてください。図を使っても良いです。


//1982年にIBMが発売したIBM PCは,その後のパーソナルコンピュータ (PC) の標準になり,さまざまな改良が施されつつも,現在のほとんどのPCの起源と言える.しかしながら,IBMは主導権をとることができず,PC部門の利益が悪化したため事業から撤退してしまった.一方で,IBMへの部品提供業者として,CPUやOSを提供したインテル社,マイクロソフト社いまだにPC事業が看板部門であり,大きな利益をあげて業界を主導している.
//
//-IBMがPC業界で主導権を失っていった理由を述べよ
//-あなたが,もし,IBMがPC分野で最盛期を迎えたころにIBM PC部門担当副社長になった
//[[ジム・キャナビーノ (James Cannavino) //:http://jibun.atmarkit.co.jp/ljibun01/rensai/gyoukai/004/01.html]]
//の立場だったとしたら,この事態をどう立て直すだろうか.考えを述べよ.


** 情報と職業の予定 2015年前期 [#j3a0fdae]
-4/9
-4/16
-4/23
-4/30
-5/7 月曜授業日のため授業はありません
-5/14
-5/21
-5/28
-6/4
-6/11
-6/18
-6/25
-7/2
-7/9
-7/16
-7/23
-7/30 試験週間ですので授業ありません

**欠席状況 [#m40ca5a2]

学部「情報と職業」は出席重視の授業です.そのため70%以上出席お願いします.
授業回数を15回程度と考えて、欠席が4回を超えた場合は単位をだしません
(欠席には病欠を含みます)。.
//以下に授業全体の欠席状況を示しておきます.
欠席回数は成績に大きく影響しますので、間違いありましたら至急お知らせください.
また、病欠、公欠などは成績に影響しないよう考慮します。
証明する書類を持って申し出てください。

//|学籍番号|欠席回数|出席点|
//|1120501|9|不可|


**宿題 (5/21提出) [#gf954d6e]

Googleで必死に検索してください。ぐぐりまくってください。
他のページの広告にどういう影響がでたか、教えてください。

(5/21の授業開始時に配布する用紙(A5)にその場で記入していただきます。)

**宿題 (5/14提出) [#ic10b2e5]

身の回りの製品で、原価から考えて著しく格安な情報機器(ハードウェア)もしくはソフトウェア製品を見つけ出して、なぜ無料・格安なのか考察せよ。

(5/14の授業開始時に配布する用紙(A5)にその場で記入していただきます。)

**シラバス [#ve3c9485]

-第1章 デジタル時代
--情報システムと生活/ビジネス/暮らし
--デジタル情報システムと生活/ビジネス/暮らし
--新しい事業のモデル。大量生産、コスト積み上げ、ものづくりではない、情報産業の形
--デジタルである事
--アナログ(レコード,写真,電話)デジタルの違い、なぜデジタル情報は劣化しないのか。
--アナログ情報(新聞、音楽レコード)は物を伴う、デジタルは物から離脱する。完璧なコピー、完璧な転送。ものを売るモデルがデジタルでは変わる。

-第2章 マルチメディアシステム
--マルチメディアシステム
--デジタル情報は劣化しないけど、アナログ情報産業は長らく繁栄していた。それはデジタル情報を扱うコストが高かったから。コストの安いものからデジタル産業になっていった。でもマルチメディアと呼ばれるコンテンツはそれでもコスト高だった。その産業化を、圧縮技術が加速した。
--数字から文字,文字から画像音声、CDの容量を計算しよう。
--画像と動画のデータ量、グラビア写真の容量を計算しよう。テレビ画像の容量を計算しよう。
--画素とは
--デジカメの画素
--圧縮の効果

-第3章 情報社会の無料と格安
--格安のハード
--大量生産(フォードの自動車)
--家庭用ゲーム機
--携帯電話商法
--サプライで収益
--有料サイト囲い込み
--無料のソフトウェア
--フリーウェア
--シェアウェア
--無料で配布ーシェア拡大ー技術支援で課金(コンサルタント,出版)
--無料のサイト(サービス)
--GNUの思想, 寄付(シェアウェア)
--広告で収入
--技術力を示しビジネスにつなげる

-第4章 WWW
--WEB以前の世界
--WEBの歴史
--ブラウザの変遷
--検索エンジン以前の世界
--検索エンジン
--新規なビジネス形態
--新しいコミュニティ
--フォークソノミー(folksonomy)
--クラウドコンピューティング

-第5章 互換ビジネス(コンパチブル,コンパチ)
--大型計算機の互換機
--互換マイクロプロセッサ
--パーソナルコンピュータの互換機
--互換機との戦い
--プリンタの互換機

-第6章 情報関連企業のビジネス戦略
--格安のハードウェア,ソフトウェア,サービス
--webの発達
--ビジネスモデル
--企業はどこで儲けているのか.どこが稼ぎ場所なのか.

-第7章ユビキタスコンピューティング
--今後の情報技術と生活




------------------

*昨年度以前の講義の情報 [#m268ad9a]
- LectureOld


------
このページについてのお問い合わせはsiio@is.ocha.ac.jpまで。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS