Data Management and Analysis in Foundry Industry (1)

주조공정 데이터 처리 및 분석 (1)

  • Published : 2022.02.01

Abstract

In the present paper, the data management of casting processes has been discussed. In order to construct a smart factory in the foundry industry, understanding of the whole casting processes has to be in the first place. Casting process data can be obtained at the kiosk operated by casting engineers and data acquired by sensors in the foundry facility. However, preprocessing of the casting process data must be carried out in order to analyze the casting process by the data. Techniques and some examples for data preprocessing in the foundry was introduced.

Keywords

1. 서론

주조공장의 스마트화와 인공지능 기술의 도입은 이제는 필요요소로 자리 잡고 있으며, 인공지능에 대한 관심이 많아지고 있으나, 스마트화라는 본 목표를 달성하기 위해서는 기존의 주조공정을 투명하고 명확하게 확립하고, 이를 디지털화하는 순으로 진행해야 한다 [1]. 주조공장에서는 수많은 데이터가 존재하며, 작업자들 또한 설비에서 많은 공정 데이터들이 쏟아지고 있다. 이러한 데이터를 정리하고 분석에 응용하는 일은 주조공장을 잘 파악하고 효율을 증대시키는 데 중요하다고 하겠다. 그러나 아직도 주조공정에서의 데이터를 어떻게 처리해야 하는지에 대한 방법에 대해서는 정립이 되어 있지 않다. 본 고에서는 주조공정에서의 취득된 데이터를 처리하는 방법에 대하여 논하고자 한다.

2. 주조 공정의 데이터 처리

2.1. 주조공정 분석

주조공정의 데이터 처리를 위해서는 먼저 주조공정에서 어떤 데이터들이 발생하는지에 대해서 살펴보아야 한다. 예를 들어, 사형주조 및 다이캐스팅 공장에서 이루어지는 공정을 Fig. 1에 나타내었다. 주조공정은 상당히 복잡한 공정들의 복합체로 이루어져 있고, 이들이 유기적으로 연결되어 있다. 여기서 우선 금속제품의 변화와 이동 경로만을 살펴보면, 용해 → 성분조절 → 구상화, 접종 (탈가스, 미세화, 진정) → 주입 → 냉각 → 취출 (탈사)의 순서로 이루어지는 것을 알 수 있다. 좀 더 자세하게 이들이 공장내 설비의 사양과 어떻게 연관되는가를 보면 Fig. 2로 나타낼 수 있을 것이다 [2].

HJGHBQ_2022_v42n1_35_f0001.png 이미지

Fig. 1. Flowchart for conventional casting process.

HJGHBQ_2022_v42n1_35_f0002.png 이미지

HJGHBQ_2022_v42n1_35_f0003.png 이미지

Fig. 2. Relation matrix between process and facility.

이를 통해 주조공정의 데이터와 설비의 사양 데이터 등을 정리하며, 어떤 데이터를 취득할 것인가를 결정할 것이다. 여기서 주조공정의 데이터는 공정의 흐름에 따른 취득 데이터의 종류를 선별하여 결정할 것이며, 설비 사양 데이터 등은 주조공정의 데이터가 설비능력 등에 합당한지를 파악할 수 있는 데이터로 사용할 수 있다.

2.2. 주조공정 데이터 취득 및 저장

주조공정의 데이터를 취득하는 방법은 크게 두 가지로 나뉠수 있다. 작업자들의 수기입력에 의한 방법과 설비내 센서를 이용한 자동 집계 방법이다. 작업자들의 수기입력에 의한 방법은, 공정 데이터 취득 설비 비용이 들지 않는다는 장점은 있으나, 자칫 작업자들의 업무증가로 연결될 수 있다. 따라서 작업자들의 수기입력은 부득이한 경우 사용하여야 하며, 가능한 작업자들이 쉽고 빠르게 데이터를 입력할 수 있도록 신경을써야 한다. 키오스크 및 터치패널 등이 고려될 수 있다.

설비내 센서를 이용하여 데이터를 취득하는 방법은, 작업자들의 노력 없이 데이터를 얻을 수 있는 좋은 방법이다. 설비내 데이터 취득을 위한 센서 및 데이터 변환기 등을 설치해야 하므로 추가 비용이 발생할 수 있다. 또한 센서 취득 데이터가 완벽하지 않은 경우가 많아, 취득된 데이터를 검증해야 한다. 검증 방법으로는 최근까지도 사람에 의한 검토 방법이 이루어지고 있었으나, 프로그램 및 인공지능을 활용한 자동검토 기술도 일부 사용되고 있다.

취득된 데이터는 검증 및 분석을 위해 저장소에 저장되어야 하며, 주로 데이터베이스 시스템을 통해 데이터가 저장된다. 주조공정에서 나오는 데이터는, 특히 센서를 통한 데이터 취득은 긴 시간 동안의 취득 데이터로 인해 데이터의 용량이 상당히 크게 된다. 따라서, 데이터베이스 시스템의 하드웨어는 큰 데이터를 감당할 수 있을 정도로 충분히 커야 하며, 데이터베이스 S/W도 큰 데이터를 처리할 수 있는 능력을 갖추어야 한다. 데이터베이스 S/W는 유료 및 무료가 있으며, 유료로는 MS-SQL, 무료로는 MariaDB가 주로 쓰이고 있다.

HJGHBQ_2022_v42n1_35_f0004.png 이미지

Fig. 3. Data Acquisition for Casting Processes.

3. 주조공정 데이터 가공 및 검증 방법

이렇게 취득되고 검증된 데이터는 인공지능이 분석할 수 있는 데이터로 가공되어야 한다. 인공지능 알고리즘은 S/W로 이루어져 있으며, 특정한 양식 (format)을 갖춘 데이터로 변화되어야만 인공지능 분석이 가능하다.

데이터를 가공하는 가장 손쉬운 방법은 엑셀 S/W을 이용하는 방법이다. 가장 쉽게 사용할 수 있는 엑셀은 CSV 형식으로, 인공지능 데이터를 처리하는데 많이 쓰이고 있다. 또한 타 업무에서도 많이 사용되는 엑셀S/W에서 데이터를 검증하기 때문에 대부분의 사람들이 익숙하게 작업을 할 수 있을 것이다.

일반적인 데이터 처리 과정에서 구체적으로 어떤 데이터 기법으로 처리하는지 정리해보면 다음과 같다 [3].

(1) 데이터 제거 (Data cleansing) : 데이터에서 값이 잘못되거나 타입이 맞지 않는 행이나 열을 제거하는 작업을 한다.

(2) 선택 및 분리 (Instance selection & partitioning) : 데이터를 학습, 평가, 테스트용 데이터로 나누는 작업을 한다. 단순히 나누는 작업뿐만 아니라, 데이터를 샘플링 할 때, 그 분포를 맞추는 작업을 병행한다. 또는 데이터 분포상에서 특정 카테고리의 데이터 비율이 적을 때, 이 카테고리에 대해서 샘플의 비율을 높이는 소수 클래스 과샘플링 (minority classed oversampling) 등의 기법을 이 과정에서 사용한다.

(3) 특성 튜닝 (Feature tuning) : 머신러닝 피처의 품질을 높이기 위해서 0~1값으로 값을 무차원화 (normalization) 하거나, 빠진 값을 제거하거나, 비상식적 값 등을 제거하는 등의 과정을 수행한다.

(4) 표현적 변경 (Representation transformation) : 피처를 숫자로 맵핑 시키는 작업을 한다. 범주형 특성 (Categorical Feature)을 원핫인코딩 (one hot encoding) 등을 통해서 숫자로 맵핑하거나, 텍스트를 임베딩 (embedding)을 통해서 숫자로 변환하는 작업등을 수행한다.

(5) 특성 추출 (Feature extraction) : PCA와 같은 차원 감소 기법을 이용하여, 전체 피처의 수를 줄이는 작업을 수행하거나, 피처를 해시값으로 변환하여, 더 효율적인 피쳐를 사용하는 작업을 한다.

(6) 특성 선택 (Feature selection) : 여러 개의 특성 중에 머신러닝에 사용할 특성만을 선별한다.

인공지능에 의한 데이터 처리 S/W에는 크게 무료와 유료(상용)으로 나눌 수 있다. 각각의 특징에 대해서는 Fig. 4에 나타내었다. 사용자는 자신의 목적에 따라 무료 또는 유료 S/W를 선택할 수 있을 것이다.

HJGHBQ_2022_v42n1_35_f0005.png 이미지

Fig. 4. Characteristics and examples of data management softwares.

3.1. 데이터 처리를 위한 무료 S/W

데이터 처리를 위한 무료 S/W에는 파이썬 (Python), R 등의 프로그램이 쓰인다. 이 두 가지 S/W는 엑셀 같은 패키지형 소프트웨어가 아닌 코딩이 수반되는 프로그래밍 언어의 성격에 가깝다. 이중 파이썬은 데이터 처리 프로그램으로 많이 사용하고 있으며, 파이썬을 사용하는 이유는 그 구조가 간단하다는 이점 외에 확장성이 용이해서 많은 사용자 및 확장 모듈들을 보유하고 있다는 것이 큰 장점이라고 할 수 있다. 인공지능 무료 소프트웨어로 유명한 텐서플로우 (Tensorflow)나 파이토치 (Pytorch) 같은 인공지능 소프트웨어들이 파이썬에서 운용되고 있다.

파이썬 언어를 사용할 경우 데이터 처리를 위한 핵심적인 모듈로는 Numpy, Pandas, Matplotlib, Seaborn 등이 있으며, 계속 모듈들이 개발되고 있다. 이 중 Numpy는 숫자 데이터를 주로 다루는 함수들로 이루어진 모듈로 주로 행렬연산을 담당한다. Pandas는 주로 시계열 데이터를 다루는 모듈이며, 주조공정에서 나오는 데이터들이 주로 시계열 데이터임을 감안할 때, 중요한 모듈로 간주된다. Matplotlib, Seaborn은 데이터를 그래프 등으로 표시해 주는 가시화 모듈이며, 데이터들을 쉽고 직관적으로 표현할 때 쓰인다.

단, 무료 S/W를 사용할 경우에는 유상지원 프로그램이 없으므로, 자기 스스로 공부하고 프로그램을 코딩하여 데이터 처리를 해야 한다. 스스로 공부를 하는 것이 많은 사람들에게 걸림돌이 될 수 있을 것이다. 단, 최근에는 인터넷을 통한 학습 자료들을 쉽게 구할 수 있어서, 공부하는 것은 어렵지 않으나, 그 한계는 있어서 일단 인터넷 자료를 통해 공부를 시도해 본 뒤 유료 강의 등을 직접 수강할 것을 추천한다.

3.3 상용 S/W

상용 S/W는 데이터 처리를 메뉴 방식으로 쉽게 처리해 주는 패키지형 S/W의 플랫폼을 갖추고 있다. 따라서 특별한 코딩 지식 없이도 인공지능을 위한 데이터 처리가 가능하며, 몇몇 데이터는 자동처리가 가능하도록 구성되어 있다. 그리고 기술지원이 가능하므로 자신이 목적으로 하는 데이터 처리에 대한 컨설팅을 받을 수 있는 것이 장점이다. 인공지능 분석 상용 S/W로는 Matlab이 가장 대표적인 S/W라고 할 수 있다.

4. 주조공정 데이터의 가공

4.1 주조공정 데이터의 종류

주조공정에서 취득할 수 있는 데이터는 2장의 공정분석을 통해 얻을 수 있을 것이다. 주조공정 뿐 아닌 제조공정에서 나올 수 있는 데이터는 종류가 많을 수 있지만, 그 형식으로 보면 크게 숫자 (문자 포함), 이미지와 신호로 구분될 수 있을 것이다. 숫자 데이터의 예로는 주물제품 생산시 주조품 생산 일련변호에 따른 공정변수, 이미지 데이터의 예로는 제품결함 사진, 신호 데이터로는 설비에서 나오는 신호 (온도, 압력, 전압, 전류 등)을 들 수 있다.

4.2. 숫자 (문자) 데이터 가공 방법

4.2.1. 주조공정의 숫자 (데이터) 종류

주조공정의 숫자 (문자) 데이터의 예로는 제품명, 제품 lot번호 (또는 serial번호), 제품 생산 일시, 주조공정변수 (주물 성분, 용탕의 상태, 주형의 상태, 주입시간, 응고시간)등이 있다. 이들은 주로 숫자 또는 문자형태의 데이터로 저장된다.

소프트웨어에서 처리하고 있는 숫자의 종류는 크게 정수(integer)와 부동소수 (floating point)로 나뉜다. 부동소수는 실수와 같은 수이나 컴퓨터에서 인식할 수 있는 특별한 실수 형식이다. 소프트웨어에서는 데이터를 저장하는 단위가 있으며, 따라서 숫자를 저장할 수 있는 범위가 지정되어 있다. 예를들어 저장단위가 2byte (16bit)라고 하면, 정수는 0부터 65535(=216 - 1) 또는 -32,767부터 32,768까지의 숫자만 표현할 수 있다. 실수도 마찬가지로 숫자의 범위가 정해진다. 부동소수인 경우 숫자는 지수형태로 표현될 수 있으며, 예를들어 1.23456678e-09식으로 표시할 수 있다. 이때 e다음에 나오는 숫자는 지수 10으로 표현할 수 있게 되어 있다.

한편으로는 시간도 숫자로 표현할 수 있다. 예를 들어 2021년 1월 10일 15시 30분 30초의 시간을 표시할 때 “2021-01-10 15:30:30”의 형태로 표시되지만, unix등의 운영체제는 시간을 Timestamp라는 하나의 숫자로 바꾸어 숫자로 기록하고 인식한다.

4.2.2. 숫자 (문자) 데이터 가공 기법

데이터 가공을 위해서는 EDA (Exploratory Data Analysis)를 사용한다 [3]. EDA란 수집한 데이터가 들어왔을 때, 이를 다양한 각도에서 관찰하고 이해하는 과정으로 데이터를 분석하기 전에 그래프나 통계적인 방법으로 자료를 검토하는 과정을 거치게 된다. 데이터의 분포 및 값을 검토함으로써 데이터가 어떤 성질을 가졌는지 이해할 수 있으며, 데이터에 대한 잠재적인 문제를 발견할 수 있다. 즉, 다양한 각도에서 살펴보는 과정을 통해 문제 정의 단계에서 미처 발견하지 못한 다양한 패턴을 발견하고, 구체적으로 어떻게 모델을 설정해야 할지 파악할 수 있다. EDA는 다음의 과정으로 진행된다.

(1) 분석 계획 : 문제 정의 단계에서 세웠던 연구 질문과 가설을 바탕으로 분석 계획을 세우는 것으로 분석 계획에는 어떤 속성 및 속성 간의 관계를 분석해야 하는지와 이를 위한 최적의 방법은 무엇인지 파악해야 한다. 구체적으로 분석의 목적과 변수가 무엇이 있는지 확인하고 개별 변수의 이름이나 설명이 있는지 확인한다.

(2) 데이터 전체 탐색 : 데이터에 문제가 없는지 확인한다. 데이터의 머리와 꼬리 부분을 확인하거나, 다양한 탐색기법을 통해 이상치나 결측치 등을 확인하는 과정이 필요하다.

(3) 데이터의 개별 속성값을 검증 : 각 속성값이 예측한 범위와 분포를 갖는지 확인하고, 만약 그렇지 않다면 이유가 무엇인지를 확인한다.

(4) 속성 간의 관계에 초점을 맞추어, 개별 속성 관찰에서 찾아내지 못했던 패턴을 찾아내고, 보통 상관관계, 시각화 등 기법을 사용한다.

데이터에 이상치가 있으면, 이상치가 왜 발생했는지 의미를 파악하고 어떻게 대처해야 할지 (제거, 대체, 유지 등)를 판단해야 한다. 이상치를 발견하는 기법은 여러 가지가 있고 대표적으로 아래와 같은 방법들이 있다.

(1) 개별 데이터 관찰 : 데이터값을 눈으로 쭉 훑어보면서 전체적인 추세와 특이사항을 볼 수 있다. 데이터가 많다고 앞부분만 보면 안 되고, 인덱스에 따른 패턴이 나타날 수도 있으므로 앞, 뒤 또는 무작위로 표본을 추출할 필요성이 있다.

(2) 통계치 활용 : 요약 통계 지표 (summary statistics)를 사용하는 방법이다. 데이터의 중심을 알기 위해서는 평균 (mean), 중앙값 (median), 최빈값 (mode)을 사용할 수 있고 데이터의 분산을 알기 위해 범위 (range), 분산 (variance)을 사용할 수 있고, 통계 지표를 이용할 때는 데이터의 특성에 주의해야 하는데, 평균에는 집합 내 모든 데이터 값이 반영되기 때문에, 이상치가 있으면 값이 영향을 받지만, 중앙값에는 가운데 위치한 값 하나가 사용되기 때문에 이상치의 존재에도 대표성이 있는 결과를 얻을 수 있다.

(3) 시각화 활용 : 시각적으로 표현이 되어있는 것을 보면, 분석에 도움이 많이 된다. 시각화를 통해 주어진 데이터의 개별 속성에 어떤 통계 지표가 적절한지 결정할 수 있다. 시각화 방법에는 확률밀도 함수, 히스토그램, 분산 그래프 (sc atter plot), 워드 클라우드, 시계열 차트, 지도 등이 있다.

(4) 머신러닝 기법 활용 : 대표적인 머신러닝 기법으로 Kmeans를 통해 이상치의 확인이 가능하다.

4.2.3. 주조공정 데이터 가공의 예

Table 1은 실제 용해작업 데이터를 통계분석 한 것이다. 장입 번호는 17번까지 입력됨을 알 수 있고, 작업로도 1, 2번 선택이 되어 있다. 단, 장입량 및 추가 장입량의 평균은 약 3.45톤이나, 최대값이 3733과 3091로 되어 있다. 실제 용해로는 최대 장입량이 5톤이므로, 3733톤과 3091톤은 의미상 부합하지 않고, 오인하여 입력한 것으로 사료된다. 따라서 이러한 데이터들은 수정이 요구되며, 위 분석을 통해 데이터의 정합성을 정확히 파악할 수 있다.

Table 1. Statistical data for melting process.

HJGHBQ_2022_v42n1_35_t0001.png 이미지

4.3. 이미지 데이터 가공 방법

4.3.1. 이미지 데이터의 종류

이미지 데이터는 픽셀 (pixel)이라고 하는 작은 이미지를 직사각형 형태로 모은 것이다. 각 픽셀은 단색의 직사각형이고, 전체 이미지의 크기를 표현할 때는 (세로 픽셀수 × 가로 픽셀수) 형식으로 표현한다. 이미지 데이터를 저장할 때는 픽셀의 색을 표현하는 스칼라 값이나 벡터를 2차원 배열로 표현한다. 파이썬에서는 Numpy의 ndarray 클래스 배열로 표현한다.

픽셀의 색을 숫자로 표현하는 방식을 색공간 (color space)라고 한다. 대표적인 색 공간으로는 그레이 스케일 (gray scale), RGB (Red-Green-Blue), HSV (Hue-saturation-Value) 방식이 있다.

(1) 그레이 스케일 : 그레이 스케일에서는 모든 색이 흑백이고, 각 픽셀은 명도를 나타내는 숫자(스칼라)로 표현된다. 0은 검은색을 나타내고 숫자가 커질수록 명도가 증가하며 하얀색이 된다. 숫자는 보통 0~255의 부호가 없는 8비트 정수로 저장된다.

(2) RGB : RGB 색공간은 Red, Green, Blue 3가지 색의 명도를 뜻하는 숫자 3개가 합쳐진 벡터로 표현된다. 부호가 없는 8비트의 정수를 사용하는 경우 (255, 0, 0)은 빨간색, (0, 255, 0)은 녹색, (0, 0, 255), 파란색이다.

RGB는 (세로 픽셀수 × 가로 픽셀수 × 색 채널)의 3차원 배열의 형태로 저장한다. 세 번째 축을 색 채널이라고 부른다.

(3) HSV : HSV (Hue, Saturation, Value) 색공간은 색상, 채도, 명도의 세 가지 값으로 표현된다. 값의 크기는 %로 나타나며, 색상의 스펙트럼의 경우 0~360도의 값을 가진다. 색상(Hue): 색상값 H는 가시광선 스펙트럼을 주파수 별로 고리 모양으로 배치했을 때의 각도이다. 0°~360°의 범위를 갖고 360°와 0°는 빨강을 가리킨다. 채도 (Saturation): 채도값 S는 특정한 색상의 진함의 정도를 나타낸다. 가장 진한 상태를 100%이고 0%는 같은 명도의 무채색이다. 명도 (Value): 명도값 V는 밝은 정도를 나타낸다. 순수한 흰색, 빨간색은 100%이고 검은색은 0%이다.

픽셀로 된 이미지를 저장하는 방식에는 다음과 같은 방식이 있다.

(1) 비트맵 (bitmap) 파일 : 다차원 배열정보를 그대로 담고 있는 .bmp 확장자를 가지는 파일이다. 비트맵 파일은 파일 용량이 크기 때문에 압축을 통해 용량을 줄인 JPG, GIF, PNG 등의 압축 파일 형식을 사용한다.

HJGHBQ_2022_v42n1_35_f0006.png 이미지

Fig. 5. Number representation in greyscale image.

HJGHBQ_2022_v42n1_35_f0007.png 이미지

Fig. 6. Image Processing in pump casing [4].

(2) JPEG : 웹상 및 멀티미디어 환경에서 가장 널리 사용되고 있는 포맷. RGB 이미지의 모든 컬러 정보를 다 유지한다.

(3) GIF : 하나의 파일에 여러 비트맵을 저장해서 다중 프레임 애니메이션 구현 가능, 투명 이미지 지원한다.

(4) PNG : GIF 포맷을 대체하기 위해 개발된 파일 포맷, 비손실 압축방식으로 원본에 손상 없이 파일의 크기를 줄여준다. 문자 혹은 날카로운 경계가 있는 이미지의 경우 PNG가 효과적이다.

4.3.2. 이미지 데이터의 가공

파이썬에는 이미지를 가공하는 모듈들이 있으며, 주로 Pillow, Scikit-image, OpenCV 등을 사용한다. Pillow는 이전에 사용되던 PIL (Python Imaging Library)패키지를 대체하기 위한 것이다. JPEG, BPM, GIF, PNG, PPM, TIFF 등의 다양한 포맷을 지원하고 초보자가 다루기 쉽다는 장점이 있다. Scikit-Image는 data라는 모듈을 통해 샘플 이미지 데이터를 제공하며, 이미지는 NumPy 배열 자료형으로 사용한다. OpenCV (Open Source Computer Vision)은 이미지 처리, 컴퓨터 비전을 위한 라이브러리이다. Windows, Linux, OSX(Mac OS), iOS, Android 등 다양한 플랫폼을 지원한다. 실시간 이미지 프로세싱에 중점을 둔 라이브러리이며 많은 영상처리 알고리즘을 구현해 놓았다.

4.4. 신호 데이터 가공

주조공정에서의 신호 데이터는 이미지 데이터와는 달리 다양한 센서, 예를 들면 소리, 온도, 압력, 전압, 전류, 가속도계 및 진동 등에서 오는 다양한 신호이다. 센서에서 취득되어 수집되는 데이터는 원시 데이터이며 일반적으로 전처리는 원시 데이터를 추가 분석에 더 적합하고 사용자가 해석할 수 있는 형식으로 변환하는 절차이다. 일반적으로 신호 데이터는 외부 노이즈가 많이 포함된 경우가 많은데, 노이즈를 제거하여 실제신호에 더 가까운 신호로 변환할 수 있다.

신호 데이터에 전처리가 필요한 몇 가지 이유가 있다. 첫째, 주조공정에서 수집되는 신호 데이터의 종류가 다양하므로 신호의 특성을 파악하여 분리하는 것이 필요하다. 둘째, 약한 크기의 신호 데이터의 경우 신호를 가릴 수 있는 많은 노이즈를 포함하는 경향이 있다. 예를 들어 진동 신호의 경우 주위 호이스트 크레인이나 지게차 등의 진동은 데이터를 오염시킬 수 있다. 셋째, 신호 데이터가 중첩으로 취득되는 경우, 관련된 신호를 적절하게 분리하는 것이 필요하다.

5. 맺음말

본 고에서는 주조공정에서의 취득된 데이터를 처리하는 방법에 대하여 논하고자 하였다. 공정 데이터의 취득 설계 및 취득 방법, 취득된 데이터의 형식과 이를 검증하고 가공하는 방법에 대해 이야기하였다.

References

  1. I.S. Cho, J.Korea Foundry Society, 41(4) (2021) 369.
  2. I. S. Cho et. al., Proceedings of 10th Asian Foundry Congress, KFS, Seoul (2008) 304.
  3. J. T. Behrens, Psychological Methods, 2(2) (1997) 131. https://doi.org/10.1037/1082-989X.2.2.131
  4. http://www.opencv.org/, accessed Jan 8, 2001.