ItiroSiio

ヒューマンコンピュータインタラクション入門

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

サイエンス社発行の, ヒューマンコンピュータインタラクション入門 (Computer Science Library 11) の, 著者によるサポートページです. 誤りなどの訂正情報や, 講義などで使っていただくための図版, プログラムのソースコード, 音声ファイルなどを提供していきます.

サイエンス社 ( http://www.saiensu.co.jp/ ) のサポートページもご覧ください.

また,サイエンス社からも,本書に掲載されている図をまとめたPDFが, 講義用資料として用意されています. 必要な方は,ご連絡先を明記の上,サイエンス社編集部( rikei@saiensu.co.jp )までご連絡ください.

まえがき

訂正

署名が間違っていました.(誤:梶尾,正:椎尾)

第1章 ヒューマンコンピュータインタラクション(HCI)

図1.2 Sketchpad (1963)

図1.3 ダグラス・エンゲルバートのNLS (1968)

第2章 人のインタフェース特性

図2.2 等ラウドネス曲線

図2.3 CAPTCHAによる確認

図2.4 一般的なメニューの例

  • http://siio.jp/hci/menuitems.png

章末問題2:音のファイル

章末問題3:ソースコード

#include <time.h> 
#include <sys/time.h> 
#include <stdio.h>

double gettimeofday_sec()
{
    struct timeval tv;
    gettimeofday(&tv, NULL);
   return tv.tv_sec + (double)tv.tv_usec*1e-6;
}


int main(void) {
	double t1, t2;

	sleep(5);
	printf("hit now");
	t1=gettimeofday_sec();
	getchar();
	t2=gettimeofday_sec();
	printf("time = %10.30f\n", t2 - t1);
	return 0;
}

第3章 人と人工物のインタフェース

第4章 ヒューマンインタフェースデバイス

図4.8 カラーフィルタの例

  • http://en.wikipedia.org/wiki/File:LCD_RGB.jpg
    (クリックで拡大および出典へ)

図4.9 電子ペーパの例

  • http://siio.jp/hci/epaper.png
    (クリックで拡大)

第5章 ハードウェアインタフェース

p.90 ソースコード

byte result; //スイッチの状態を読み込む変数
while(1) { //以下を無限に繰り返す
	result=inb(100); //スイッチの状態を読み込む
	if((0x01 & result)==0) outb(1, 101); //スイッチオンで点灯
	else outb(0,101); //スイッチオフで消灯
	usleep(30000L); //30ms待つ
}

p.93 ソースコード

main(void) {
	int paraport;
	unsigned char value;

	paraport= open("/dev/para",O_RDWR);
	if(paraport < 0) exit(1); //openに失敗したら中止
	
	for (;;) { //無限ループ
		usleep(100000L); //0.1秒待つ 
		if ( read(paraport, &value, 1) <= 0 ) break;
		print("value is %x・n", value);
		usleep(100000L); //0.1秒待つ 
		if((value & 0x10) == 0) 
			value=value | 0x01; //LSBを1にする
		else
			value=value & 0xFE;	//LSBを0にする
		write(paraport, &value, 1);	//ポートに書き出す
	}

	close(paraport);
}

p.94 ソースコード

static unsigned int  busy = 0;

static int para_open (struct inode * inode, struct file * file) {
	if (busy) return -1;//使用中だったら中止
	request_region(0x378,1, "para"); //never fails
	busy = 1;//使用中であるフラグを立てる
	return 0;
}

static int para_release (struct inode * inode, struct file * file) {
	release_region(0x378, 1); 
	busy = 0;//使用中であるフラグを下ろす
	return 0;
}
	  
static ssize_t  para_read 
(struct file * file, char * buf, size_t count, loff_t * ploff) {
	int i;
	char result;
	result =  inb(0x378);//ポートから読む
	i = verify_area (VERIFY_WRITE, buf, count); //利用可能?
	if (i) return i;
	copy_to_user (buf, &result, 1);//bufの場所へ読んだ結果を書く
	return 1;
}
	
static ssize_t para_write 
(struct file * file, const char * buf, size_t count, loff_t * ploff) {
	char value, data;
	copy_from_user (&value, buf, 1);//bufの値を読む
	outb(value, 0x378); //ポートに書き込む
	return 1;
}
	  
static struct file_operations para_fops = { //関数対応表
	NULL,		//struct module *owner  
	NULL,		//lseek 
	para_read,	//read 
	para_write,	//write
	NULL,		//readdir
	NULL,		//select
	NULL,		///ioctl
	NULL,		//mmap
	para_open,	//open
	NULL,		//flush
	para_release,	//release
	NULL,		//fsync
	NULL,		//fasync
	NULL,		//lock
	NULL,		//readv
	NULL		//writev
};
 
int init_module (void) {//デバイスドライバと対応表を登録
	int i;
	i = register_chrdev (63, "para", & para_fops);
	if (i) return - EIO;
	return 0;
}
 
void cleanup_module (void) {
	unregister_chrdev (63, "para");
}

第6章 グラフィカルユーザインタフェース(GUI)

第7章 GUIプログラミング

p.124 ソースコード

\#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);
	XMapWindow(display, window);
	XFlush(display);
	
	while(1) { //無限ループ
		XNextEvent(display,&event); //イベントを受け取る
		switch (event.type) { //イベントの内容に従って分岐
			case KeyPress: //キーボードが押されたら
				printf("key\n"); //keyと表示
				break;
			case ButtonPress: //マウスボタンが押されたら
				printf("button\n"); //buttonと表示
				break;
		}
	}
	return 0;
}

p.131 ソースコード

import java.awt.*; //GUI関連のクラスを利用することの宣言
public class SimpleWindow { //クラスSimpleWindowの記述
	public static void main(String args[]) { //クラスメソッドmainの記述
		Frame f; //クラスFrameのインスタンスを参照する変数
		f = new Frame(); //Frameクラスからインスタンスを生成,fに代入
		f.setTitle("hello world");//インスタンスメソッド呼び出し
		f.setSize(300,200); //インスタンスメソッド呼び出し
		f.setVisible(true); //インスタンスメソッド呼び出し
	}
}

p.134 ソースコード

import java.awt.*;
public class SimpleWindow  extends Frame {//Frameクラスを継承

	public void initialize (String title) {//インスタンスメソッドの記述
		setTitle(title); //スーパークラスのインスタンスメソッドを呼び出し
		setSize(300,200); //これもスーパークラスのインスタンスメソッド
		setVisible(true); //これもスーパークラスのインスタンスメソッド
	}

	public static void main(String args[]) {//クラスメソッドmainの記述
		SimpleWindow f;//SimpleWindowのインスタンス格納用変数
		f=new SimpleWindow(); //インスタンスを生成,fに代入
		f.initialize("hello world");//インスタンスメソッド呼び出し
    }
}

p.135 ソースコード

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

public class SimpleWindow extends Frame implements ActionListener {
	//Frameクラスを継承し,ActionListenerを実装する
	
	public void initialize (String title) {//インスタンスメソッドの記述
		setTitle(title); //スーパークラスのインスタンスメソッド呼び出し
		enableEvents(AWTEvent.WINDOW_EVENT_MASK);
		Button b = new Button("Push Me!!"); //インスタンスを作ってbに代入
		b.addActionListener(this); //イベント受取り先に本インスタンスを登録
		add(b); //本インスタンスにボタンを貼り付け
		setSize(200,100); //インスタンスメソッドsetSizeを呼び出し
		setVisible(true); //インスタンスメソッドsetVisibleを呼び出し
	}
	
	public void actionPerformed(ActionEvent e) { //イベントハンドラー
		System.out.println("thank you."); //ボタン押されたら文字を表示
	}
	
	public static void main(String args[]) {//クラスメソッドの記述
		SimpleWindow f;//SimpleWindowクラスのインスタンスを参照する変数
		f=new SimpleWindow(); //インスタンスを生成,fに代入
		f.initialize("Simple Button");//インスタンスメソッド呼び出し
	}
		
}

p.141 ソースコード

\#import "FCConverter.h"

@implementation FCConverter
- (IBAction)takeIntValueFrom:(id)sender {
}
@end

p.142 ソースコード

\#import "FCConverter.h"

@implementation FCConverter
- (IBAction)takeIntValueFrom:(id)sender {
	int degreeF; //華氏の値を保持する変数
	float degreeC; //摂氏の値を保持する変数
	degreeF = [sender intValue]; //スライダから値を得る
	[fText setIntValue: degreeF]; //華氏の文字フィールドに書出す
	degreeC=(float)(degreeF-32) * 5.0 / 9.0; //華氏摂氏換算計算
	[cText setFloatValue: degreeC]; //摂氏の文字フィールドに書出す
	}
@end

章末問題ソースコード

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

第8章 インタフェースの評価

第9章 インタフェースの手法

図9.8 バーコードの例

  • http://siio.jp/hci/barcode_HCI_Code39.png
  • http://siio.jp/hci/barcode_URL_QRcode.png

章末問題2 図A.3

  • http://siio.jp/hci/barcode_decode.png
    (クリックで拡大)

第10章 次世代インタフェース


ご質問,ご要望などは siio@is.ocha.ac.jp までお寄せください.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-04-20 (水) 19:06:18 (2407d)