에일리언웨어(Alienware) 노트북에서 GPU를 이용, 텐서플로우(TensorFlow) 실행하기



알파고 때문에 어디선가 누군가 나와 같은 삽질을 하고 있을지도 모르겠다. 누구에게라도, 다만 한 삽이라도, 도움이 되기를 바래본다.

+ 우분투 16.04 설치:
  - USB로 우분투 설치후 부팅 => WiFi 안잡힘
  - alienware WiFi 활성화
    . $ sudo service network-manager restart 실행
    . $ cd /lib/firmware/ath10k/QCA6174/hw3.0/ && sudo wget https://github.com/kvalo/ath10k-firmware/raw/master/QCA6174/hw3.0/board-2.bin
    ...리부트...
    . WiFi AP 설정
    * 참고 :  http://askubuntu.com/questions/765838/cannot-enable-wifi-of-alienware-r2-on-ubuntu-16-04-lts
  - gpu 존재 확인
    $ lspci
   
+ NVIDIA driver & CUDA 설치
  ! CMOS 설정에서 Secure Boot 해제 (즉, disable로 설정) ==> 정말 중요!!!
  - Install the NVidia 367.35 Driver
    $] sudo add-apt-repository ppa:graphics-drivers/ppa
    $] sudo apt-get update
    $] sudo apt-get install nvidia-367
    ...리부트...
  - Download the CUDA SDK from NVidia
    . https://developer.nvidia.com/cuda-toolkit
    . cuda_8.0.61_375.26_linux.run 파일 다운로드
  - Install the CUDA SDK
    $] cd ~/Downloads
    $] sudo chmod +x cuda_8.0.27*
    $] sudo ./cuda_8.0.61_375.26_linux.run --override
    $] cd /usr/local/cuda/samples
    $] sudo make
    $] 1_Utilities/deviceQuery/deviceQuery
    $] cd ~ 
  * 참고 : https://github.com/ftlml/user-guides/wiki/Installing-TensorFlow-w-GPU-Support-on-Ubuntu-16.04-for-Pascal-architecture

+ TensorFlow 설치
  ! Python 2.7 또는 Python 3.3+ 필요 (2.7 기준으로 요약)
  - pip 설치
    $ sudo apt-get install python-pip python-dev
  - TensorFlow 설치
    $ pip install tensorflow-gpu
  - TensorFlow 설치 검증
    $ python
    >>> import tensorflow as tf
    >>> hello = tf.constant('Hello, TensorFlow!')
    >>> sess = tf.Session()
    >>> print(sess.run(hello))
    ..."Hello, TensorFlow!" 메시지가 출력되는지 확인...
  * 참고: https://www.tensorflow.org/install/install_linux#InstallingNativePip

+ (옵션) TensorFlow with docker 설치
  - docker 설치: https://docs.docker.com/engine/installation/
  - nvidia-docker 설치: https://github.com/NVIDIA/nvidia-docker
  - TensorFlow 컨테이너 실행 (1)
    $ sudo nvidia-docker run nvidia/cuda nvidia-smi
  - TensorFlow 컨테이너 실행 (2)
    $ sudo nvidia-docker run -it gcr.io/tensorflow/tensorflow:latest-gpu bash
  * 참고: https://www.tensorflow.org/install/install_linux#InstallingDocker


+ 결과 확인: nvidia GPU driver 동작 잘함

acc@acc-Alienware-17-R3:~$ nvidia-smi
Wed Mar 22 16:07:10 2017       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.39                 Driver Version: 375.39                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 980M    Off  | 0000:01:00.0     Off |                  N/A |
| N/A   53C    P8     7W /  N/A |    335MiB /  4038MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0      1236    G   /usr/lib/xorg/Xorg                             159MiB |
|    0      2160    G   compiz                                         114MiB |
|    0      7885    C   python2                                         58MiB |
+-----------------------------------------------------------------------------+


+ 결과 확인: TensorFlow에서 GPU 인식 잘함

acc@acc-Alienware-17-R3:~$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcurand.so.8.0 locally
>>> tf.Session().run()
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE3 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:910] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties:
name: GeForce GTX 980M
major: 5 minor: 2 memoryClockRate (GHz) 1.1265
pciBusID 0000:01:00.0
Total memory: 3.94GiB
Free memory: 3.56GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 980M, pci bus id: 0000:01:00.0)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: run() takes at least 2 arguments (1 given)
>>> 

(이상)

Posted by ingee

댓글을 달아 주세요

YouTube 동영상


2016년 9월22일에 업로드된 동영상이다. C++ 랭귀지를 만든 Bjarne Stroustrup(베야네 스트로스트룹)이 C++의 과거와 미래에 대해 설명한다. 한번 들으면 좋은데 너무 길다 (1시간43분). 내용을 간단히 요약한다.


- C++ 성공은 운이 아니다. C++ 성공에는 분명한 이유가 있다.
+ 랭귀지 저자가 생각하는 C++
  - 하드웨어를 직접 다루는
  - 오버헤드가 전혀 없는
  - 산업계 현장에서 사용하는
  - 좋은 프로그래머에게 더욱 유용한 랭귀지

- 랭귀지는 조그만 변해도 짐스럽다(구현, 도구제작, 학습이 필요). 변화 방향을 신중하게 결정해야 한다.
+ C++ 변화 방향
  - zero-overhead
  - 메모리 leak 등이 없는 안전한 코드를 만들게 할 것이다
  - 가비지컬렉션 등으로 인한 성능저하는 없을 것이다 (피할 것이다)

+ C++17 출시 임박
  - 아직도 C++98에 머물고 있다면 C++11, C++14로 업그레이드하라.
  - 적어도 현재에 머물러 미래를 준비하라
+ 깃허브에 C++ core guideline 문서가 존재한다
  - 한국어 번역에 참여한 사람들에게 감사한다
- 우리가 매일 사용하는 SW를 보존하기 위해서라도 C++은 계속 발전해야 한다



(이상)

Posted by ingee
TAG C++만세

댓글을 달아 주세요

ES6 in Depth 번역글

Dev 2016.07.12 08:47

어쩌다보니 혼자 하게 된, ES6에 대한 아주 알찬 소개. 정성을 다해 번역했습니다.


ES6 in depth

http://hacks.mozilla.or.kr/category/es6-in-depth/

Posted by ingee

댓글을 달아 주세요

  1. 웹 개발자 2016.08.23 14:19 신고  댓글주소  수정/삭제  댓글쓰기

    감사합니다.

    덕분에 유익한 시간이 되었습니다.

  2. 지나가다가 2017.03.15 08:44 신고  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 덕분에 좋은 내용을 읽을 수 있었습니다.

  3. 정말로감사 2017.07.19 14:15 신고  댓글주소  수정/삭제  댓글쓰기

    정말로 감사합니다.

  4. 웹개발공부하는사람 2018.03.13 16:09 신고  댓글주소  수정/삭제  댓글쓰기

    프로토타입에 관한 개념 보고 갑니다! 아주 설명이 잘 되어 있는 것 같아요 :) 감사합니다.

Karma 개발자가 직접 쓴 Karama 에 대한 소개 <논문>

을 요약한다. TDD(Test Driven Development)에 대한 저자의 확고한 신념을 느낄 수 있었다.


TDD

  • TDD는 고품질의 SW를 개발할 수 있는 효과적인 방법
  • TDD는 문서화 측면에서도 이득, 테스트 코드는 항상 up-to-date한 (개발) 코드의 사용법을 알려준다(알려줄 수밖에 없다)
  • 테스트 가능한 코드(testable code)는 재사용성(reusable)이 더 높다


TDD를 위해서는 두가지 전제 조건이 필요

  • Testable Code: 느슨하게 결합된 모듈 구조로 코드를 개발, AngularJS 같은 프레임워크가 해결
  • Testing Environment: Karma 같은 테스트 자동화 도구가 해결


Karma는

  • JavaScript를 위한 Test Runner
  • Jasmine 같은 Test Framework 이 아님. 어떤 Test Framework도 사용 가능(Karma의 장점)
  • 웹앱 테스트의 가장 어려운 점은 코드를 테스트하기 위해 에디터를 떠나 브라우저를 실행시켜 결과를 확인해야 하는 워크플로우의 단절 (context switching), Karma는 이를 해결하기 위한 도구


Karma 모듈 구성도 (Figure 4.1: The high level architecture)


왜 클라이언트-서버 구조를 선택했나?
웹앱은 다양한 기기와 다양한 브라우저에서 실행, 디바이스와 브라우저의 편차를 테스트하기 위해 클라이언트를 분리했음


(이상)

Posted by ingee
TAG Karma, TDD

댓글을 달아 주세요

정갈하게 편집된 Grunt 소개 글을 봤다. 글쓴이가 디자이너라고 한다.
Grunt for People Who Think Things Like Grunt are Weird and Hard
http://24ways.org/2013/grunt-is-not-weird-and-hard/?utm_content=buffer4bb0b

Grunt는 Task Runner이다. C/C++ 개발자에게 친숙한 make와 똑같은 역할을 한다.


Grunt에만 관심을 가질게 아니라 Yeoman을 보는 것이 좋다.
Yeoman (http://yeoman.io/)은,
  • yo : 스캐폴딩(Scaffolding : 골격, 뼈대) 자동 생성 도구
  • grunt : 타스크 실행 도구
  • bower : 패키지(라이브러리) 관리 도구
  • ...들을 잘 묶어 놓은 개발도구이다.
한시간 정도 투자하면 사용법을 익힐 수 있는 튜토리얼을 제공한다 (http://yeoman.io/codelab.html).
웹 개발자에게 축복과도 같은 도구다. Node.js 가 세상을 많이 바꿔놓는 것 같다.

Posted by ingee

댓글을 달아 주세요

Backbone.js를 써서 프론트엔드 웹앱을 만들 때 폴더 구조와 파일 이름을 어떻게 정할까 고민스러웠는데, 비슷한 고민을 담고 있는 블로그 기사가 있어 요약한다.

  • JavaScript는 폴더/파일의 구조 및 이름에 대해 규정하는 바가 전혀 없다.
  • 그러니 당신이 어떻게 하고 있더라도 "당신은 옳다".
  • 개인적으로 Backbone 등 MVC framework을 사용하는 경우 models, collections, views 등 타입별로 폴더 구조를 가져가는 것에 반대한다.
  • contact, mail 등 업무나 역할 별로 폴더 구조를 만들고,
  • person.js (model), persons.js (collection), personview.js, personrouter.js 처럼 파일 이름에 타입을 명시하는 방식을 선호한다.
  • 하지만, 다시 한번 말하지만 당신이 어떤 결정을 하더라도 "당신은 옳다"


JavaScript File & Folder Structures: Just Pick One

Posted by ingee

댓글을 달아 주세요

CppCon 2014, C++ 개발자대회 요약

  • 구글을 비롯 많은 회사들이 C++ 코드에서 exception을 사용하지 않고 있음. exception은 아직 "solved problem"이 아님.
  • 페북, 0.4% 속도 개선을 위한 cheating도 불사. 대규모 서버 프로그램에서는 중요한 이슈. 0.4% 성능개선을 통해 수 $million에 달하는 비용(전기요금)을 절감할 수 있음.
  • std::vector<>는 CPU의 명령어 캐시 관련 문제로부터 안전. 다른 std::container<> 류는 안전을 장담 못함.
  • 전세계적으로 기술서적 판매는 3% 줄었지만 C++ 서적 판매는 4% 증가. C++ 개발자 저변이 넓다는 증거.
  • Bjarne이 "A Tour Of C++" (2013년 9월)을 출간했으며, 책에 대해 진심으로 자랑스러워 하고 있음.
  • C++ 언어 표준화는 현재 진행형. parallel/concurrent 처리에 대해 논의하고 있음. 많은 참여 바람.
  • 올해가 첫 컨퍼런스로 600 여명 참여. 매해 개최 예정.
Posted by ingee
TAG C++만세

댓글을 달아 주세요

요약
- IoT Device 사이의 상호운용성(Interoperability)을 보장하는 표준을 정의하기 위해 Allseen Alliance(퀄컴 주도), Thread 그룹(구글 주도), OIC 그룹(인텔 주도) 컨소시엄이 활동 중
- 삼성전자는 Thread 그룹과 OIC 그룹에 참여 중
- 애플은 아직 컨소시엄에 참여하지 않고 있음


Allseen Alliance (2013년 12월~)
+ 목표
  - 상호 연결 가능한 Thing과 App의 확산
  - AllJoyn 기반 통신 프레임워크의 확산
+ 오픈소스 AllJoyn(올조인)
  - 가전기기/자동차/컴퓨터가 상호 커뮤니케이션할 수 있는 오픈소스 프레임워크
  - 퀄컴이 2011년 MWC에서 처음 공개한 오픈소스 프로젝트
  - 2013년 12월 리눅스 재단으로 소스 이관(리눅스 재단의 11번째 협업 프로젝트)
- allseenalliance.org 에서 코드와 API스펙 다운로드 가능
- WiFi 기반
+ Allseen Alliance가 성공할 것 같은 이유 (Allseen Alliance가 주장하는 이유임)
  - 다양한 분야의 많은 회사들이 참여하고 있기 때문
  - 공개표준 기반 오프노스 프로젝트 AllJoyn을 갖고 있기 때문
  - 이미 AllJoyn을 채택한 상용제품이 존재하기 때문 (LG HDTV, LIFX 스마트 전구)
  - 포괄적 인증 프로그램을 운영하고 있기 때문
- 참여업체: 시스코, 하이얼, LG전자, 파나소닉, 샤프, 퀄컴, MS, 리눅스 재단 등
 

Thread 그룹 (2014년 6월~)
+ 목표
  - Thing마다 상이한 프로토콜 문제 해결
  - 데이터 전송 거리 문제 해결
  - 배터리 제약 문제 해결
+ 가정용 기기들을 연결하고 제어하는 최선의 방법을 찾기 위해 설립
  + 가정용 네트워크 기술의 한계 (as-is)
    - HUB 기기가 죽으면 네트워크 자체가 불통됨
    - 설정이 어려움
    - 기기들이 항상 켜져 있어야 하기 때문에 배터리 소모가 심함
  + Thread 그룹이 만들려는 프로토콜
    - 쓰기 쉬울 것
    - 안전할 것 (Security)
    - 전력 효율이 좋을 것
    - IPv6 기반 공개 프로토콜일 것
    - HUB 없는 MESH 네트워크일 것
    - IEEE 802.15.4 무선 표준 (ZigBee)* 기반일 것
    - 다양한 기기를 지원할 수 있을 것
      * IEEE 802.15.4 무선 표준 : 저렴함과 단순함을 추구하는 사물(임베디드 시스템)을 위한 무선 네트워크 기술 (ZigBee로 통칭), 사람을 위한 무선 네트워크 기술 WiFi와 대비됨
+ Thread 기술의 특징
  - 지금 당장 사용 가능
  - Nest가 이미 초기형태의 Thread 기술을 사용하고 있음
- 교육과 인증 사업 추진 예정
- 참여업체: 구글, 삼성전자, ARM 등


OIC (Open Interconnect Consortium) (2014년 7월~)
+ 목표
  - IOT를 위한 연결(Connectivity) 요구사항 규정
  - 이종 기기들 사이의 상호운용성(Interoperability) 보장
+ 활동 분야
  + Interoperability 제공을 위한 스펙/인증/브랜드 규정
    - IP(네트워크) Protection 제공
    - 기기에 대한 인증 제공
    - 서비스 레벨 상호운용성 제공
  - 표준을 구현한 오픈소스 SW 제공
  - 공개표준, 크로스플랫폼SW 지향
- 참여업체: 인텔, Atmel, 델, 브로드컴, 삼성, 윈드리버 등
- 퀄컴 등의 영리 기업이 올씬얼라이언스를 통해 오픈소스 프로토콜 제정을 주도하는 것에 반대
- 퀄컴과는 경쟁, 오픈소스 공동체와는 협력 표방


oneM2M
- oneM2M은 한국 TTA를 비롯 7개 세계 주요 표준화 기관이 공동 설립한 글로벌 표준화 기구
+ 목표
  - 다양한 산업 직군간 요구사항, 아키텍처, 프로토콜, 보안기술, 단말 관리 및 시맨틱 추상화 표준 정의
- '14년 7.28~8.1 프랑스에서 개최된 oneM2M 12차 기술 총회에서 oneM2M 1.0 표준 승인
+ 참여업체

  - 한국 TTA와 ETSI(유럽), ATIS(북미), TTC(일본), CCSA(중국) 등 7개 세계 주요 표준화 기관을 비롯,

  - 해외기업 AT&T, 스프린트, 에릭슨, 시스코, 화웨이, 퀄컴, 알카텔루슨트, 인텔 등 참여
  - 국내기업 SKT, KT, LGU+, 삼성전자, LG전자 등 참여



(이상)


Posted by ingee

댓글을 달아 주세요

  1. 패드로 2016.06.13 17:40 신고  댓글주소  수정/삭제  댓글쓰기

    이해한게 맞는지 질문좀드릴게요 ㅠ
    위에서 말씀하신 4가지 단체 모두가 표준화 기구이고, 각기 약간씩의 특성이 다르게 표준을 지정해왔다는거죠?? 4가지 모두 플랫폼을 직접적으로 개발하는 단체는 아닌거죠?

    • ingee 2016.06.13 19:54 신고  댓글주소  수정/삭제

      오래전에 관심 갖고 보던 거라 지금은 가물거리지만, 표준 규격 제정 뿐 아니라 플랫폼 자체도 오픈소스로 개발했던 것으로 기억합니다. ^^

구글, Nest 개발자 프로그램 오픈



Nest Learning Thermostat

 Nest Protect


요약
- 구글은 "Nest Learning Thermostat"을 스마트홈 Hub로 발전시킬 전망
+ 향후 실현 가능한 응용 시나리오
    - 구글나우와 연계, Nest 온도조절기에게 "오케이 구글, 온도 좀 낮춰" 라고 말할 수 있게 됨
    - IFTTT와 제휴, 화재 발생시 온도 변화를 감지하여 사용자에게 SMS 전달 가능
    - 벤츠와 제휴, 자동차가 도착 예상 시간을 일러주면 Nest가 미리 집안 온도를 알맞게 조정 가능
+ Nest에 장착된 센서/기능을 다른 기기/서비스들에 개방
    - Motion Detection 센서
    - 온도 센서
    - 화재 연기 및 CO(일산화탄소) 센서
    - Wi-Fi, Zigbee 등 네트워크 기능
+ 다른 기기가 Nest로부터 얻을 수 있는 정보/기능
    - Away 정보: 사용자가 집에 있는지 밖에 있는지에 대한 상태 정보
    - 화재 연기 및 CO(일산화탄소) 경보
    - Rush Hour Rewards 이벤트 정보
    * Rush Hour Rewards : 에너지 소비가 큰 시간에 에너지 사용을 억제할 경우 에너지 회사가 제공하는 보상
+ Nest 연동 기기/서비스 제작시 privacy에 주의해야 함
    - Nest는 사용자의 privacy를 보호하기 위해 최소한의 정보만 공유함
    - 사용자의 이름, 패스워드, 이메일, 주소 정보는 제공하지 않음
    - Nest 연동 기기/서비스를 설치할 때마다 사용자의 <동의>가 있어야 함
    - Nest와 사용자는 언제든지 연동 기기/서비스를 거부할 수 있음
    - Privacy만큼 Security도 중요하기 때문에 모든 통신에 SSL을 적용함

Nest API
+ RESTful API 형태로 <Nest Learning Thermostat>, <Nest Protect Smoke + CO Alarm>, <Home> 객체에 대한 정보 및 기능을 제공함
+ <Nest Learning Thermostat> 객체
    - 현재 온도 조회
    - 타겟 온도 조회 및 설정
    - fan 타이머 설정
    - 온도 모드 조회 및 설정
    - 온라인 상태 및 최근 접속 정보 조회
+ <Nest Protect Smoke + CO Alarm> 객체
    - CO 또는 Smoke 상태 조회
    - 배터리 상태 조회
    - 온라인 상태 및 최근 접속 정보 조회
+ <Home> 객체
    - home에 연결된 기기 목록 조회
    - energy event 상태 조회
    - ETA(사용자의 도착 예상 시간) 설정
    - Away 상태 조회 및 설정
+ RESTful API 호출을 도와주는 client lib 제공
  - 지원 플랫폼: iOS, Android, Web
- API 문서, 샘플 코드, 테스트 도구 제공
- Stack Overflow 사이트 내에 Nest 개발자 커뮤니티 운영

Ref.
- Google Makes Its Nest At The Center Of The Smart Home (2014-06-23)
- Nest Developer Program


(이상)

Posted by ingee
TAG IOT, Nest

댓글을 달아 주세요

HTML5 Device API 지원 현황 (2014년 4월 기준)

  • W3C를 비롯 웹 진영은 HTML5를 본격적인 OS수준의 App 실행 플랫폼으로 자리매김하려 하지만, 모질라를 제외한 브라우저 벤더(애플, 구글)의 지원이 미미한 상황
  • 애플과 구글은 앱스토어와 구글 플레이 스토어를 중심으로 하는 네이티브 앱 생태계를 지키기 위해 웹 생태계 활성화에 적극적이지 않음
  • Device API를 비롯 HTML5 웹앱 생태계가 활성화되기 위해서는 시간이 필요할 전망

Device API
출처: http://caniuse.com (2014.4.)
Device API          표준화 단계      모바일 브라우저 지원현황
--------------------------------------------------------------------------
File API                 WD        FF 27+, iOS 6+,   Android 4.4+
File Reader API          WD        FF 27+, iOS 6+,   Android 3.0+
Filesystem & Writer API  WD        FF x,   iOS x,    Android x
Geolocation API          CR        FF 27+, iOS 3.2+, Android 2.1+
getUserMedia API         WD        FF 27+, iOS x,    Android x
WebRTC API               WD        FF 27+, iOS x,    Android x (Chrome 29+)
Full Screen API          WD        FF x,   iOS x,    Android x
Web Audio API            WD        FF 27+, iOS 6+,   Android x
Vibration API            WD        FF 27+, iOS x,    Android 4.4+
Battery Status API       CR        FF 27+, iOS x,    Android x



Posted by ingee

댓글을 달아 주세요