HCIとエンジニアリング

この記事は、[Waseda Advent Calendar 2017](https://adventar.org/calendars/2311)の6日目の記事です。
最初の部分は読み飛ばしてください

**これは読み物であり具体的なプログラミングの解説はほとんどしません．HCI従事者がエンジニアリングに興味を持った時や，エンジニアがHCIに関わるときに何か役に立つ情報を提供することを目的にしています**(なので引用がWikiだったりするのはまじで許してほしい，あとエンジニアリングとHCIを区別しているが，分けられるものではないと思う(今回はエンジニアとして働く上で用いるものをエンジニアリング，HCI研究者として研究する分野をHCIとしています))

***

### 経歴
私は早稲田大学の表現工学科というところでHCIに関わる研究室に所属しています．修士を出てからは，エンジニアとして働く不思議な生き方をしています．早稲田のアドカレなので早稲田のことを少し含めて話をしていこうと思います．

***

### 表現工学科とはなにか
所属しながら言うのもなんですが，よくわからないです．音楽，CG，HCI，VR，3Dなどいろいろあります．

***

# HCIとはなにか
> HCI（Human Computer Interaction）とは、人とコンピューターの関連を調べることで、人がコンピューターをより効率的に使えるような設計を研究する分野です。グラフィックデザインのほか、コンピューターサイエンス、情報科学、人間工学、認知エンジニアリング、心理学、社会学といった分野との相互関連も見られます。

[ユーザビリティ用語集](https://www.mitsue.co.jp/case/design/u_012.html)

**ざっくりコンピュータと人間の関係について考える学術分野です．**
これを言うと「UIとかUXとか？？」って聞かれることがあります．間違っていませんが，だいたいはそこで止まりません．

具体例を挙げるとTUIの研究があります．

その他に実世界志向メディア，テレイグジスタンス，AH(Augumented Human)，情動操作，ウェアラブルなどがあります．VR，AR，MR，SRなども含むことが多いです．(具体例がよいものは具体例を，解説がいいものは解説を載せています)

## TUI(Tagible User Interfece)とはなにか

**実世界に出てきたUI**や**触れられるUI**と考えてください(これをHCI分野で言うと怒られそう…)

MIT media lab Tngible Media Groupの研究がよく具体例として出てきます

* [inFORM](https://tangible.media.mit.edu/project/inform/)

<iframe src="https://player.vimeo.com/video/79179138" width="640" height="360" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

## テレイグジスタンス

> バーチャルリアリティの一分野であり、遠隔地にある物（あるいは人）があたかも近くにあるかのように感じながら、操作などをリアルタイムに行う環境を構築する技術およびその体系のこと

[Wiki:テレイグジスタンス](https://ja.wikipedia.org/wiki/%E3%83%86%E3%83%AC%E3%82%A4%E3%82%B0%E3%82%B8%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9)

## AH(Augmented Human)

> 人間のさまざまな能力をテクノロジーによって補綴・強化しようという研究分野です。知的能力の拡張にとどまらず、身体能力や身体システムとしての健康や充足感の拡張などを目指しています

[Sony CSL](https://www.sonycsl.co.jp/sp/1436/)

## 情動操作

[例:扇情的な鏡](http://www.g-mark.org/award/describe/40439)
> 実際に自身の表情は変化していないものの、疑似的に表情が変化したように情報を提示することで、それを認知させ無自覚的に感情を喚起させる鏡のデザインです。具体的には、自分は普通の表情をしているのに、鏡の中の自分が笑っていたり、悲しんでいるように見せることによって、鏡の中の自分の影響を受けて自身の感情状態に影響を与えます。この鏡により、嬉しい・悲しいといった感情状態だけでなく、自身の身に着けている物の好き嫌いにまで影響を与えることができます。

## ウェアラブル

[例:Hand Gesture and On-body Touch Recognition  by Active Acoustic Sensing throughout the Human Body](https://drive.google.com/file/d/0B1WSLExz_aWTVVQ2Q21mRTJLMkk/view)

## MR

[VRとARとMRの違いについて](https://www.panoplaza.com/basic/vr-basicknowledge/about_vr/vr-ar-mr/)

> 複合現実と呼ばれ、CGなどで作られた人工的な仮想世界に現実世界の情報を取り込み、現実世界と仮想世界を融合させた世界をつくる技術です。

***

# HCIとエンジニアリング

HCIの研究を見ながら，エンジニア志望の就活をしてみて感じたこととして以下があります．
そして，HCIの研究をしながら，エンジニアを志望するのはけっこう大変だったです…(´・ω・｀)

## HCIで求められる知識

* [Processing](https://processing.org/)，[openFrameworks](http://openframeworks.cc/ja/)などのビジュアライズに強い言語
* [Arduino](https://www.arduino.cc/)などのマイコン制御
* コンデンサやソレノイドなどの電子パーツの知識
* 3Dプリンティングのための3D作成(例:[fusion360](https://www.autodesk.co.jp/products/fusion-360/overview))

が求められます．幅広いです．その他に音響ならMAX MSP，データ分析でMatLabなど状況に応じます．幅広いものの，意外と目安みたいなものがあります．
あと**ラピッドプロトタイプが求められることが多い**です．早く作って，見せて，改善をものすごいスピードで繰り返します．
Arduinoなどのハードウェアで得られたデータを，視覚化したりそれを機械学習したりします．機械学習する際も必ずしもpythonを使うとは限らず，ProcessingやopenFrameworksのSVMで間に合わせることが多いです

[PSVM:Support Vector Machines for Processing](http://makematics.com/code/psvm/)

これらの言語を通していろいろ学びます．
オードソックスなProcessingで見てみると，下記のような構造になっています．

```java
//Processingのコード
void setup(){
//最初に一回呼ばれる部分
}

void draw(){
//setup以後繰り返し呼ばれる部分
}
```

見てわかるかもしれませんが，あまり考えないで書くと，**グローバル変数が果てしなく多く**なります．
しかも，ラピッドプロトタイプを求められるので**あまりコードの綺麗さが求められなかったり**します．
複数人で大きいものを開発することも多くないので，セキュリティや可読性はあまり気にされることはありません(今の環境では，なので他の研究室では違うのかもしれません)

エンジニアがHCIの研究を始めると，この良くも悪くもラピッドプロトタイプの特性に違和感を感じると思います．一方で

## エンジニアリング

一方のエンジニアリングはあまりに広いです．
この記事を読んでいる人はだいたいわかっていると思うので端折りますが，

* スマホアプリ
* Web
* インフラ
* セキュリティ

様々なことを考えなきゃいけないですが，パソコンで完結することが多い印象です．
早く開発する必要はありますが．団体開発が多いので，ロジックを最初に適当にやると，あとで開発を引き継ぐ人が死にます．

HCIの研究者がエンジニア就活をすると，コードの可読性やロジックを考えないコードが多くなり，悲しい気持ちになります．

***

# これを受けて

もっとお互いが歩み寄り，人が流動的に動いて，新しい価値を作ってくれるといいなあと願います．