1. 서 론
지금 우리가 살고 있는 정보화 사회는 전통적인 방법으로 물건을 생산하는 공업화 사회와는 많은 차이점을 보인다.4차 산업혁명으로 대변되는 정보화 사회에서는 눈으로 보기 어려운 다양한 형태의 데이터와 정보를 생산하고 가공한 후, 이를 처리·유통함으로써 기존 재화의 가치를 높이고 ICT(Information and Communication Technologies) 기술을 통해 창의적이고 생산적인 방식을 통한 부를 창출할 수 있다. 집, 차, 냉장고, 전등 등 우리 주변에 있는 모든 사물이 인터넷으로 연결되어 사물과 사물, 사물과 사람이 서로 소통함으로써 사람들이 더 편리하고, 안전한 삶을 누릴 수 있는 세상을 만들어 가겠다는 이야기가 이젠 영화 속에 머물러 있지 않고 점차 현실화되고 있다. 사물인터넷은 초연결 사회를 상상하는 것에서부터 시작된다. 사물인터넷이라는 패러다임의 변화는 개인의 삶, 산업현장, 재난, 안전, 공공 서비스 등 여러 분야의 모습을 바꾸어 갈 것이다[1].
이러한 사물 인터넷 패러다임을 구현하기 위해서는 여러 요소의 기술이 요구되며, 이런 여러 요소들을 효율적으로 연결하여 전체적으로 하나의 시스템으로 만들어 동작하는 것이 필요하다. 다시 말하면 가장 앞단에서 사물들과 직접 연결되어 환경 데이터들을 수집하고 필요에 따라 액션을 취하는 요소에서부터 수집된 데이터를 서버로 전송하는 요소와 데이터를 저장하는 요소, 그리고 저장된 데이터를 분석하고 전체 시스템을 조율하는 요소에 이르기까지 많은요소들이 필요하며, 이 요소들을 하나로 묶어서 효율적으로 운영할 수 있는 플랫폼이 필요하다.
본 논문에서는 사물 인터넷 서비스 구현에 필요한 IoT 센싱/제어 장치와 IoT 메시지 프로토콜, 비정형 데이터 서버와 빅데이터 분석 도구 요소로 구성된 빅데이터 처리 플랫폼을 설계하고 구현하였다. Fig. 1은 본 논문에서 수행한 전체 연구 내용을 요약해서 표현한 것이다.
Fig. 1. System architecture of collection and analyzing process for IoT data.
전체 플랫폼 구성은 센싱부와 전송부, 저장부 그리고 분석 부분으로 이루어진다. 센싱부에 사용되는 IoT 센싱/제어 장치는 지속적인 데이터와 버스티 데이터 생성을 담당하며 아두이노 플랫폼으로 구현하였다. 구현된 플랫폼 테스트를 위해 고정 IoT 디바이스는 태양광 발전 모듈로, 이동 IoT 디바이스는 탁구스윙 데이터 측정을 위한 모듈로 각각 구현하였다. 이들 IoT 디바이스는 태양광 패널에서 생산된 전압/전류/온도/습도/조도량과 같은 환경 데이터를 수집하고 배터리의 충전/방전 제어 기능을 수행하거나탁구 운동 중에 발생하는 관성센서 값을 서버로 전송하는 기능을 담당한다. 전송부에서는 인터넷을 기반으로 동작하는 HTTP와 CoAP(Constrained Appli-cation Protocol)를 이용하며 데이터 서버는 비정형 데이터베이스인 하둡(Hadoop)으로 구성하였다. 서버에 수집된 데이터는 R을 이용한 빅데이터 분석 알고리즘을 적용하여 데이터 유형 간의 상관관계를 분석한다.
본 논문의 구성은 다음과 같다.2장에서 본 논문에서 구성한 IoT 플랫폼의 관련기술과 연구를 소개하고, 3장에서 IoT 플랫폼 설계를 위해 각 파트별로 필요한 요구사항을 분석한다. 그리고 4장에서는 분석한 요구사항을 기반으로 IoT 플랫폼에 대한 설계와 구현에 관한 내용을 기술하고 마지막 5장에서 결론과 향후 계획을 설명한다.
2. 관련 기술 및 연구
사물인터넷을 위한 플랫폼을 구현하기 위해서는 디바이스, 네트워크, 서버, 서비스 등을 망라하는 모든 ICT 기술이 요구된다. 다양한 형태의 사물인터넷 서비스를 제공하기 위해서는 사물 데이터의 수집/제공, 사물 장치의 관리, 연결 기능이 필요하다.
IoT 디바이스는 오픈소스 하드웨어가 널리 사용된다. 오픈소스 하드웨어의 가장 큰 특징은 기술에 대한 라이선스가 없고, 제품 개발에 필한 리소스가 공개되어 있다는 점이다. 현재 가장 많이 사용되는 IoT 디바이스로는 아두이노, 라즈베리 파이 등이 있으며, 칩 벤더에서 주도하는 SoC 형태의 IoT 플랫폼도 많이 출시되고 있다. 이들 중에서 아두이노는 IoT 하드웨어 플랫폼 중에서 적용 환경에 따라 초경량에서부터 중간 레벨에 이르는 다양한 모델이 제공되는 가장 대중적인 IoT 디바이스이다.
IoT 장치를 위한 대표적인 경량 메시지 전송 프로토콜로는 CoAP[2], MQTT(Message Queue ing Telemetry Transport)[3],XMPP(Extensible Mes-saging and Presence Protocol)[4]가 있다. 이들 중MQTT는 TCP 상에서 동작하며, 여러 통신 단말들간의 Publisher/Subscriber 관계를 생성하여 동작하도록 설계되어 있으며,XMPP도 TCP 상에서 동작하는 XML 기반의 메신저 구현을 위해 개발된 프로토콜이다. 이에 반해 CoAP는 UDP 상에서 동작하며, 센서 디바이스와 같은 저 사양의 하드웨어에서 쉽게동작할 수 있는 RESTful 웹 서비스 지원을 위해 개발된 프로토콜이다. 아두이노에서는 TCP를 요구하는 MQTT와 XMPP를 사용하기 어렵기 때문에 CoAP가 IoT 센싱 장치들과 IoT 데이터 서버 간의 메시지 전송 프로토콜로 적합하다.
빅 데이터의 부상과 함께 하둡[5]은 빅 데이터 처리의 핵심 엔진으로 많은 관심을 받고 있다. 분산처리 기술인 하둡 HDFS는 빅데이터의 대용량 데이터 처리를 위한 기본 기술로 사용된다. 하둡은 오픈소스로 대규모 데이터의 분산처리 기술을 지원한다. 특히 대량의 비정형 데이터 처리 성능이 뛰어나고 비용이 저렴하며 용량 증가가 용이하다. 하둡이 가지는 이런장점들이 이전에 기업들이 비용과 복잡성 그리고 도구가 없어 폐기했던 빅데이터를 저장하고 처리할 수 있게 해 준다.D.Kim,andJ.Kim[6]에서 보인 사례와 같이 하둡은 현재 정형 및 비정형 빅 데이터 분석에 가장 선호되는 솔루션이라고 할 수 있다.
오픈소스 프로젝트 R[7]은 통계계산 및 시각화를 위한 언어 및 개발환경을 제공하며,R 언어와 개발환경을 통해 기본적인 통계 기법부터 모델링, 최신 데이터 마이닝 기법까지 구현/개선이 가능하다. R은 하둡 환경에서 분산처리를 지원하는 라이브러리 덕분에 구글, 페이스북, 아마존 등의 빅 데이터 분석이 필요한 기업에서 대용량 데이터 통계분석 및 데이터마이닝을 위해 널리 사용되고 있다.
지금까지 사물인터넷을 위한 플랫폼은 특정 응용이나 서비스를 대상으로 하여 확장성이 부족하거나 다양한 환경을 대상으로 한 범용성을 가짐으로써 시스템 구성이 복잡해지고 무거워지는 단점이 있었다. H. Mora외 4명[8]은 모바일 환경에서 헬스케어 모니터링을 위한 프레임워크를 제안하였고 A. Jamin외6명[9]은 헬스케어와 메디컬 응용을 대상으로 한 플랫폼을 구현하였으며 M. Hussein외 2명[10]에서는 RTOS를 지원하는 플랫폼을 구현하였다. T. L. Mihai[11]은 IoT 응용을 위한 장시간 환경 모니터 용 WSN플랫폼을 구현하였으며 K.Park,andS.Kim[12]은 모바일 프로세서와 비실시간 OS를 위한 범용 플랫폼을 구현하였다.
3. 플랫폼 설계 및 구현
3.1 IoT 디바이스
IoT 디바이스는 응용 환경에서 주기/비주기적으로 환경 변수를 수집하여 서버에게 전송하며 서버/사용자의 요구에 따라 액추에이터를 구동시키는 역할을 담당한다. 고정 IoT 디바이스는 주전원이 가능한 경우가 많고 비교적 통신 환경이 좋은 곳에 설치가 가능하기 때문에 서버로 데이터를 직접 전송하는 방식을 이용할 수 있다. 반면에 이동 IoT 디바이스는 주전원 없이 배터리로만 작동하기 때문에 저전력과저사양이 요구되며 통신 방법도 저전력을 사용하는 것이 필요하다. 본 논문에서는 플랫폼 구성의 센서부요소로서 고정 IoT 디바이스로 태양광 발전 IoT 컨트롤러와 이동 IoT 디바이스로 탁구스윙 분석 IoT 컨트롤러를 각각 설계하고 구현하였다. 태양광 IoT 컨트롤러는 1분 단위로 환경 데이터(온도/습도/조도/전류/전압)를 수집하여 데이터 서버로 직접 전송하고 탁구스윙 분석 IoT 컨트롤러는 10ms 마다 측정한 센서값(가속도/자이로/지자계)을 게이트웨이로 전송하도록 설계하였다. Fig.2에 두 IoT 컨트롤러의 동작을 흐름도로 나타내었다.
Fig. 2. Flowchart for IoT device in case of (a) fixed and (b) mobile IoT device.
태양광 IoT 컨트롤러는 아두이노 UNO+Wifi 보드와 조도/온습도/전류/전압 센서와 LCD 모듈로 구성되며 외부로 태양광 패널과 충전 배터리를 연결해서플랫폼의 센서부를 완성하도록 하였다. 탁구스윙 분석 IoT 컨트롤러는 배터리로 동작하는 저전력 환경으로 구성하였다. 컨트롤러는 아두이노 Nano(3.3V)를 중심으로 BLE(Blue tooth Low Energy), 9축센서(MPU-9250), SD-쉴드,3.7V리튬이온 배터리로 구성된다. Fig. 3은 프로토타입으로 제작된 두 IoT 컨트롤러를 보여준다.
Fig. 3. IoT controller in case of (a) Solar power generation and (b) Table tennis swing analysis.
3.2 게이트웨이
이동 디바이스는 BLE만으로는 서버와 직접 연결할 수 없기 때문에 이동 디바이스와 서버 사이에 게이트웨이를 필요로 한다. 게이트웨이는 한쪽으로는 BLE를 이용하여 IoT 디바이스와 연결되고 다른 한쪽으로는 Wi-Fi를 이용하여 인터넷에 있는 데이터 서버와 통신한다. 본 논문의 게이트웨이는 안드로이드가 탑재된 스마트폰으로 구현하였으며 게이트웨이와 서버의 통신은 HTTP 프로토콜을 사용하였다. 게이트웨이는 IoT 디바이스와 BLE 통신을 담당하는 메인 스레드와 HTTP 로 데이터 서버와 통신하는 Wi-Fi 스레드로 동작하며 두 스레드가 공유하는 버퍼 크기는 10Kbyte로 하였다. 본 논문에서는 게이트웨이와 서버의 통신 프로토콜로 HTTP를 사용하였지만 효율성을 위해서는 향후 CoAP를 안드로이드폰에 이식하여 데이터 서버를 하나로 통합하는 것이 필요하다[13]. 전체 플랫폼의 게이트웨이의 동작은 Fig. 4에 나타내었다.
Fig. 4. Sequence diagram of Gateway.
3.3 데이터 서버/하둡
본 논문에서 구현된 플랫폼 환경에서는 고정 IoT 디바이스와 게이트웨이가 동시에 CoAP 메시지와 HTTP 메시지를 전송하기 때문에 수신된 IoT 메시지를 처리하기 위해서는 CoAP 서버와 HTTP 서버를 동시에 운영해야 하며 CoAP/HTTP 서버는 수신된 메시지를 데이터베이스에 저장하는 기능이 필요하다. CoAP와 HTTP는 상위호환성을 가지지만 보다 안정적인 운영을 위해서는 두 개의 서버를 운영을 하되 하나의 프로그램에서 운영될 수 있도록 할 필요가 있다.IoT 데이터는 빅데이터의 특성이 가지기 때문에 이를 저장하고 처리하는 데이터베이스는 비정형/비관계형인 NoSQL 데이터베이스가 필요하다. 본 논문에서는 오픈소스 분산처리기술 프로젝트로 개발된 하둡을 데이터베이스로 사용하였다.
본 논문의 플랫폼에서 하둡 시스템을 구축하기 위해서 Hadoop(v2.7.6), HBase(v1.2.1), zookeeper(v3.4.10), Thrift (v0.7.2)로 각 요소를 구성하였다. 하둡을 구성하는 하드웨어는 노트북 4대로 구성하였으며, CPU 와 RAM은 I5와 4G이며 ANamenode 호스트는 HDD500G로 그 외는 SSD128G로 구성하였다. 또한 노트북 4대는 모두 Ubuntu12.04를 설치하였다. 하둡 에코 시스템의 구성에서 가장 중요한 역할을 담당하는 ANamenode에서는 Namenode, Zoo-keeper, Datanode, Journal node, Hmaster, Resource Manager, HBase Master, Thrift Server, History Server, Hregion Server가 실행된다.
ANamenode에는 Hadoop뿐만 아니라 IoT 디바이스와 게이트웨이가 전송하는 데이터를 수신하기 위해 CoAP/Web 서버를 구성하였다.CoAP은 API를 제공하는 californiumcoap 라이브러리[13]를 사용하였고 Web 서버는 표준 HTTP 서버로 구성하였다. CoAP와 Web 서버를 동시에 관리하기 위하여 Eclipse를 사용하였고 라이브러리 관리를 위해 Maven을 사용하였다. 또한 HBase의 내용을 추출하여 하루 마다csv 파일로 저장하기 위해 파이썬의 happybase 모듈을 사용하였다. 아래 Fig.5는 테스트베드로 구축된 하둡 시스템을 보여준다.
Fig. 5. Hadoop system in case of (a) schematic diagram and (b) experimental setup.
3.4 IoT 통신 및 메시지 프로토콜
이동 디바이스는 배터리를 이용한 저전력으로 동작하기 때문에 통신 프로토콜과 메시지 프로토콜도저전력이 요구되며 게이트웨이를 이용하여 서버와 통신하는 것이 효과적이다. 이동 IoT 디바이스와 게이트웨이 사이의 통신 프로토콜은 BLE를 사용하였다. BLE 메시지는 3가지 동작 모드에 따라 페이로드크기가 달라지는데 본 논문의 이동 IoT 디바이스 구현 환경은 마스터와 슬레이브 사이에 1:1 연결하기 때문에 Fig.6과 같은 프레임 포맷을 가진다. MPU9250 센서는 아두이노가 한번 조회할 때마다 3개의 관성센서(가속도, 자이로, 지자계) 값과 온도 값을 float값으로 반환한다. 아두이노가 조회한 10개의 데이터값 중에서 스윙 분석에 필요한 것은 가속도(ax, ay, az)와 자이로센서(gx,gy,gz) 값, 그리고 추가로 타임스탬프(ts)이다(float형 변수 7개=224bits).
반면에 고정 디바이스는 대부분 주전원을 이용할 수 있기 때문에 BLE보다 소비전력이 큰 Wi-Fi를 이용하여 게이트웨이를 거치지 않고 서버와 직접 통신하는 것이 더 효율적이다. 본 논문에서 고정 IoT 디바이스로 구현한 태양광 발전 IoT 컨트롤러는 1분마다 온도, 습도, 조도, 태양패널 전압/전류, 배터리 전압/전류를 측정하여 CoAPPOST 메시지로 서버에게 직접 전송한다.
Fig. 6. Frame format in case of (a) BLE and (b) CoAP.
4. 플랫폼 테스트베드 실험
테스트베드로 제작된 플랫폼의 동작을 확인하기 위해 각각 고정/이동 IoT 디바이스로 구축된 환경에서 테스트를 진행하였다. 고정 IoT 디바이스를 테스트하기 위해 1) 건물 외부에 설치된 10W 용량의 태양광 패널 2) 태양광 생산전력을 저장할 수 있는 2Ah용량의 배터리 3)200mA를 소모할 수 있는 LED 전구를 가지고 환경을 구성하였다. 고정 IoT 실험환경에서 생성되는 데이터는 1분마다 실시간으로 전송되어 하둡에 저장된다. 이동 IoT 환경에서는 Fig. 7과 같이 피실험자가 자신의 몸에 게이트웨이 스마트폰을 지닌 채 IoT 디바이스가 부착된 탁구라켓으로 스윙을 하면 10ms 단위로 측정된 센서 데이터를 실시간으로 서버로 전송하여 하둡에 저장되도록 하였다.
Fig. 7. Table tennis forehand stroke experiment using mobile IoT device.
하둡에 저장된 데이터는 분석에 활용하기 위해 하루에 한번씩 csv 파일로 저장한다. 저장한 csv 파일은 형식은 Fig.8과 같다. Fig.8에 보인 태양광 발전데이터와 탁구 스윙 데이터는 R을 이용해서 분석하였다.
Fig. 8. IoT Big data in case of (a) solar power generation and (b) table tennis stroke.
태양광 발전 데이터는 약 1개월 동안의 데이터를 평균하여 분석하였다. Fig.9는 태양광 발전 데이터를 이용해서 시간대별 에너지 생산량과 환경요인에 대해 상관 분석한 결과를 각각 보여준다. Fig. 9(a)에서 10∼15시 사이에 에너지 생산량이 많음을 볼 수 있다. 상관관계 그래프에서 출력된 값은 상관계수 값으로 -1∼1 사이의 값을 가진다. 이 값은 1에 가까운 값일수록 양의 상관관계를 나타내고 -1에 가까울수록 음의 상관관계를 나타낸다. Fig.9(b)에서 전압과 조도량은 0.93으로서 거의 선형적인 양의 상관 값을 보여주고 전압과 기온도 0.71로 비교적 큰 양의 상관관계를 보여준다. 이와 달리 전압과 습도는 비교적 큰 음의 상관관계(-0.56)를 보여준다. 이 상관관계에서 태양광 에너지 생산량이 일사량이 크고 온도가 높을수록 많고 반대로 습도는 높을수록 에너지가 생산량이 떨어짐을 알 수 있다.
Fig. 9. Big data analysis graph in case of (a) average power generation by time and (b) correlation analysis between power generation and environmental variables.
탁구 스윙 데이터는 1회당 10번의 스윙 데이터를 하나의 단위로 구성하고 총 10회를 수행한 데이터를 그래프로 나타냈다. 스윙 분석을 위해서는 MPU9250 센서가 측정하는 10개의 데이터(가속도 3개, 자이로 3개, 지자계 3개, 온도 1개) 중에서 스윙 분석에 직접적으로 관계되는 가속도와 자이로 센서 값과 이들 센서 값을 측정한 타임스탬프가 필요하다. Fig.10은 1회 수행한 스윙에 대한 가속도와 자이로 센서그래프를 예시로 보여주고 있다. Fig.10은 관성센서를 이용한 스윙 분석 가능성만을 보여 주고 있으며, 많은 피실험자의 데이터를 모은 다음 기계학습을 이용해 데이터를 분석하는 연구가 추가로 필요하다.
Fig. 10. Continuous forehand stroke data analysis graph in case of (a) acceleration sensor and (b) gyroscope sensor.
5. 결론 및 향후 과제
사물인터넷은 초연결 사회를 상상하는 것에서부터 시작된다. 집, 차, 냉장고, 전등 등 우리 주변에 있는 모든 사물이 인터넷으로 연결되어 사물과 사물, 사물과 사람이 서로 소통함으로써 사람들이 더 편리하고, 안전한 삶을 누릴 수 있는 세상을 만들어 가겠다는 이야기가 이젠 영화 속에 머물러 있지 않고 점차 현실화되고 있다. 사물인터넷이라는 패러다임의 변화는 개인의 삶, 산업현장, 재난, 안전, 공공 서비스 등 여러 분야의 모습을 바꾸어 갈 것이다. 사물인터넷 패러다임을 구현하기 위해서는 데이터를 생산하고 전송, 저장, 분석하는 요소들의 하나로 묶어서 효율적으로 운영할 수 있는 플랫폼이 필요하다.
본 논문에서는 사물 인터넷 서비스 구현에 필요한 빅데이터 처리 IoT 플랫폼을 설계하고 구현하였다. 구현된 플랫폼은 IoT 센싱/제어 장치와 IoT 메시지 프로토콜, 비정형 데이터 서버와 빅 데이터 분석 도구 요소로 구성된다. 플랫폼 테스트를 위해 고정 IoT 디바이스는 태양광 발전 모듈로, 이동 IoT 디바이스는 탁구 스트로크 데이터 측정을 위한 모듈로 각각 구현하였다. 플랫폼의 전송부는 인터넷을 기반으로 동작하는 HTTP 프로토콜과 CoAP 프로토콜을 이용하며 데이터 서버는 하둡으로 구성하고 R을 이용하여 데이터 분석을 하였다.
구현된 IoT 플랫폼은 고정/이동 IoT 디바이스를 사용한 테스트를 통해 정상적으로 동작하는 것을 확인하였고 서버에 수집된 데이터는 R을 이용하여 태양광 환경 데이터 유형간의 상관관계 분석과 탁구스윙 데이터에 대한 기초적인 데이터 분석을 하였다. 향후 CoAP서버와 HTTP 서버를 하나로 통합하여 효율성을 높이고 플랫폼 환경에서 획득한 IoT 빅데이터 유형에 대한 상관 분석과 기계학습을 진행할 예정이다.
References
- K. Koji, A Newest IoT, Internet of Things, Translator Y. Lee, Information Publishing Group, Seoul, 2017.
-
Z. Shelby, K. Hartke, and C. Bormann, "The Constrained Application Protocol(CoAP)," RFC 7252, DOI 10.17487/RFC7252, June 2014.
- Andrew Banks, Rahul Gupta, MQTT v3.1.1, Committee Specification Draft 02, OASIS, April 2014.
-
P. Caint-Andre, "Extensible Messaging and Presence Protocol (XMPP): Core," RFC 6120, DOI 10.17487/RFC6120, March 2011,
- Apache Hadoop, https://en.wikipedia. org/wiki/Apache_Hadoop (accessed Dec., 1, 2018).
- D. Kim and J. Kim, "Development of a Privacy-preserving Big Data Publishing System in Hadoop Distributed Computing Environments," Journal of Korea Multimedia Society, Vol. 20, No. 11, pp. 1785-1792, 2017. https://doi.org/10.9717/KMMS.2017.20.11.1785
- R(Programming Language), https://en.wikipedia.org/wiki/R_(programming_language) (accessed Nov., 10, 2018).
- H. Mora, D. Gil, R.M. Terol, J. Azorin, and J. Szymanski, "An IoT-based Computational Framework for Healthcare Monitoring in Mobile Environments," Sensors, Vol. 17, Issue 10, 2302; DOI 10.3390/s17102302, 2017.
- A. Jamin, J. Fasquel, M. LHommeau, E. Cornet, S. Lacourtoisie, S. Henni, et al., "An Aggregation Platform for IoT-based Healthcare: Illustration for Bioimpedancemetry, Temperature and Fatigue Level Monitoring," Proceeding of the International Conference on Internet of Things Technologies for Health Care, pp. 125-130, Springer , 2016.
- M. Hussein, M. Zorkany, S. Neamat, and A. Kader, "Design and Implementation of IoT Platform for Real Time Systems," Proceeding of International Conference on Adavanced Machine Learning Technologies and Applications, pp. 171-180, 2018.
- T.L. Mihai, “Design of a WSN Platform for Long-Term Environmental Monitoring for IoT Applications,” IEEE Journal on Emerging and Selected Topics in Circuits and Systems, Vol. 3, No. 1, pp. 45-54, 2013. https://doi.org/10.1109/JETCAS.2013.2243032
- K. Park and S. Kim, "Design and Implementation for IoT Framework," Proceeding of International Conference on U-and E-Service, Science and Technology, pp. 6-10, 2015.
-
A. Castellani, S. Loreto, A. Rahman, T. Fossati, and E. Djik, "Guidelines for Mapping Implementations: HTTP to the Constrained Application Protocol(CoAP)," RFC 8070, DOI 10.17487/RFC8075, February 2017,
- Constrained Application Protocol in Java (2014). https://www.eclipse.org/californium (accessed Nov., 1, 2018).