스피커 | 성적 증명서 |
| 웬디머프리 | 안녕하세요. 오늘 프레젠테이션에 참여해 주셔서 감사합니다. 다양한 경험 수준의 스크립트 작성자가 직면하는 일반적인 시나리오에 대해 이야기하게 되어 기쁩니다. |
| 우리의 의도는 이러한 실수를 피할 수 있는 도구와 지식을 갖도록 무슨 일이 일어나고 있는지 설명하는 것입니다. 시작하겠습니다. |
| 기본적으로 열려 있지 않기 때문에 로그에서 메시지를 확인하는 것을 잊기 쉽습니다. 그러나 로그에는 최근 스크립트 실행에 대한 유용한 정보가 포함되어 있습니다. 이제 JMP에서 이 예를 자세히 살펴보겠습니다. |
| 여기에서 스크립트가 단순히 데이터 테이블을 열고 행 선택을 시도하는 것을 볼 수 있습니다. 이 스크립트를 실행하면 |
| 치명적인 오류, 즉 오류로 인해 스크립트가 중지되는 상황에 대한 대화형 오류 메시지가 나타납니다. 팝업 창은 JMP 15의 새로운 동작이며 기본 설정에서 끌 수 있습니다. |
| 해당 메시지를 닫으면 로그를 확인할 수 있고 창에서 동일한 메시지를 볼 수 있지만 줄 번호도 볼 수 있습니다. |
| 문제 영역으로 안내하는 데 도움이 되는 스크립트 파일의 이름을 찾으십시오. 이제 다른 중요한 메시지도 로그에 표시되므로 이러한 팝업 창에만 의존하지 마십시오. |
| 그리고 그들은 반드시 팝업 창을 일으키는 것은 아닙니다. 다른 예를 살펴보겠습니다. |
| 이 스크립트에서 작성자는 테이블을 열고, 분석을 만들고, 로그에 메시지를 인쇄하려고 합니다. |
| 그리고 이 스크립트를 실행하면 분석이 생성되지 않았음을 즉시 알 수 있습니다. |
| 그래서 다시 로그를 확인합니다. |
| 데이터 테이블에서 찾을 수 없는 열이 있지만 스크립트는 계속해서 메시지를 로그에 출력했습니다. |
| 따라서 여기에서 중요한 점은 항상 로그를 확인하는 것입니다. 특히 발생한 일이 기대에 미치지 못하는 경우에는 더욱 그렇습니다. 철자가 틀린 열 이름만큼 간단할 수 있습니다. |
| 현재 데이터 테이블의 개념은 종종 활성 테이블로 설명됩니다. 그러나 무엇이 테이블을 활성 또는 현재 데이터 테이블로 만들고 이것이 스크립트에 중요한 이유는 무엇입니까? |
| 테이블이 열리거나 생성되거나 실행되면 현재 데이터 테이블이 됩니다. 그러나 스크립트 작성자가 예상하지 못한 런타임에 테이블이 최신 상태가 될 수 있는 다른 방법이 있습니다. |
| JMP가 백그라운드에서 처리하는 작업입니다. 예를 들어 JMP는 수식을 평가하거나 창을 업데이트해야 할 수 있습니다. |
| 이러한 백그라운드 프로세스로 인해 런타임 시 활성화하려는 테이블과 다른 테이블이 생성될 수 있습니다. 이로 인해 스크립트가 실패하거나 JMP가 잘못된 테이블을 사용했다는 사실조차 인식하지 못할 수 있습니다. |
| 그래서 여기에 우리는 몇 가지를 제공했습니다 |
| 데이터 테이블별 참조를 사용하여 스크립트를 만드는 모범 사례. 이것은 런타임에 어떤 테이블이 활성 상태인지에 관계없이 올바른 테이블이 사용되는지 확인할 수 있는 방법입니다. |
| 이 예에서는 해당 테이블의 데이터가 분석에 사용되도록 특정 데이터 테이블에 대한 이변량 호출을 보내는 방법을 보여줍니다. |
| 또한 새 열을 특정 데이터 테이블에 대한 메시지로 사용할 수 있으며 이렇게 하면 원하는 테이블에 새 열이 생성되고 현재 항목으로 이동하지 않습니다. |
| 선택적 데이터 테이블 참조를 사용할 수도 있습니다. 여기서는 열을 참조하는 데 어떻게 사용할 수 있는지 보여주고 있으며 열 참조에 대해 조금 더 자세히 설명하겠습니다. |
| 함수에서 선택적 데이터 테이블 참조를 사용할 수도 있습니다. 각 행에 대해 및 요약이 사용 가능한 경우 2개입니다. |
| 또한 프로덕션 스크립트에서 현재 데이터 테이블 기능을 사용하여 데이터 테이블 참조를 할당하는 등 데이터 테이블을 사용하지 않는 것이 좋습니다. 이 예에서는 두 개의 데이터 테이블을 조인하고 해당 테이블에 대한 참조를 할당하려고 합니다. |
| 조인에서 생성됩니다. 이제 조인은 새로 생성된 테이블에 대한 참조를 반환합니다. 따라서 현재 데이터 테이블에 할당하는 대신 조인이 생성될 때 참조를 할당하려고 합니다. |
| 따라서 여기에서는 조인을 호출할 때 할당을 수행하고 이 작업을 실행할 때 |
| 실제로 새 DT 변수가 원하는 테이블을 참조하고 현재 테이블에 영향을 받지 않는다는 것을 알 수 있습니다. |
| JSL 변수를 사용하여 열을 식별할 수 있는 것은 일반적인 작업이며 사용하는 방법은 용도에 따라 다릅니다. |
| 열 함수는 열에 대한 참조를 전체 단위로 반환합니다. 열 이름이 문자열 또는 문자열 변수와 같은 다양한 인수를 허용합니다. |
| 인덱스 또는 인덱스를 나타내는 숫자 변수. 특정 행의 열 값을 참조하기 위해 첨자를 붙일 수 있습니다. |
| 열 함수를 사용할 수 있는 일부 위치는 플랫폼 호출, 열에 메시지 보내기 또는 열에 변수 참조 할당입니다. |
| as column 함수는 현재 행의 값에 대한 참조를 반환합니다. |
| 지정된 열의. 열 함수와 동일한 인수를 모두 허용하지만 JMP에서 달리 관리하지 않는 한 현재 행은 항상 0이라는 점을 이해하는 것이 중요합니다. |
| 따라서 as column 함수를 사용하기 좋은 곳은 수식에서 각 행에 대해, 위치를 선택하는 것입니다. 설계에 따라 각 행에서 평가할 때 행을 제어하기 때문입니다. 그럼 우리가 의미하는 바의 예를 살펴봅시다. |
| 여기에서 샘플 데이터 테이블을 엽니다. 우리는 열 이름에 JSL 변수를 할당했으며 선택 위치에서 열 함수를 사용하려고 합니다. |
| 이제 이 스크립트를 실행하면 행이 선택되지 않았음을 알 수 있습니다. 왜 그런 겁니까? 각 행에서 평가하는 위치를 선택하기 때문에 |
| 첨자 없이 열 함수를 사용하면 행이 선택되지 않습니다. 그리고 열 함수는 열에 대한 참조를 전체 단위로 반환하므로 데이터의 전체 열은 결코 14가 되지 않습니다. |
| 따라서 해결책은 행 첨자와 함께 열 함수를 사용하는 것입니다(그리고 이 행 첨자는 단순히 현재 행을 의미합니다. 여기에서 선택이 평가되는 동안 무엇이든) 또는 as 열 함수를 사용하여 행을 선택할 수 있습니다. |
| 수식에서 JSL 변수를 사용하는 것은 몇 가지 이유로 문제가 될 수 있습니다. JSL 변수의 수명은 현재 JMP 세션으로 제한되며 변수 값이 변경되면 수식 결과도 변경될 수 있습니다. |
| 그리고 수식 편집기에서 수식을 보지 않으면 문제가 있다는 것을 깨닫지 못할 수도 있습니다. |
| 이제 우리의 예를 살펴보겠습니다. 여기에서는 단순히 데이터 테이블을 열고 합산하려는 열 목록을 설정합니다. |
| 새 수식 열을 만들고 합계 함수에서 JSL 변수를 사용하고 있습니다. 그럼 이것을 실행해 봅시다. 새 열이 생성되고 데이터로 채워진 것을 볼 수 있습니다. 하지만 수식 편집기를 살펴보겠습니다. sum 함수에서 JSL 변수가 사용되었다고 말한 적이 없습니다. |
| 이를 무시하고 종속 열 중 하나를 변경하면 열 공식이 자동으로 업데이트되지 않는다는 사실도 알게 되었습니다. |
| 이제 JMP를 저장하고 닫고, 이 테이블을 저장하고 JMP를 닫겠습니다. |
| 그리고 우리는 다시 시작할 것입니다. |
| 이제 해당 JSL 변수의 수명이 이전 JMP 세션으로 제한되었음을 기억하십시오. 이제 테이블을 열고 무슨 일이 일어나는지 살펴봅시다. |
| 변수...열 공식이 여전히 다시 평가되지 않는 것을 확인했습니다. 이를 살펴보면 여전히 JSL 변수가 표시되지만 이제 그 아래에 빨간색 선이 표시됩니다. 마우스를 가져가면 해결되지 않은 오류라는 이름이 표시됩니다. |
| 수식을 다시 평가하려고 하면 오류 메시지가 표시되고 오류를 무시하면 모든 데이터가 누락된 것으로 변경됩니다. 그래서 우리는 이것을 어떻게 고칠 수 있습니까? |
| 수식에서 변수를 사용하는 경우 수식을 평가하기 전에 변수를 해당 값으로 바꾸도록 JMP에 지시하는 작업을 수행해야 합니다. 대신 대체를 사용할 수 있지만 오늘은 표현식 함수를 시연할 것입니다. 그럼 이 테이블을 닫겠습니다. |
| 테이블의 새 복사본을 열고 열 목록을 다시 설정합니다. |
| 이제 이 문제를 해결하는 방법을 살펴보겠습니다. |
| 따라서 eval 식 함수는 JMP에게 EXPR 함수로 래핑된 인수의 모든 변수를 평가하고 대체하도록 지시합니다. |
| 그런 다음 평가되지 않은 표현식을 반환합니다. 따라서 이 코드에서 JMP는 표현식 SAT 점수를 대체하고 열 목록으로 대체합니다. |
| 이제 이 섹션만 실행하고 무슨 일이 일어나는지 봅시다. 이제 sum 함수에 변수 대신 합산하려는 열 목록이 있음을 알 수 있습니다. |
| 그러나 실제로 우리를 위해 열을 만들지는 않았습니다. 단순히 이 식을 반환합니다. 이를 평가하기 위해 eval 식 함수 주위에 eval 함수를 추가합니다. |
| 이렇게 하면 교체가 발생한 후 JMP가 새 열 표현식 전체를 평가하게 됩니다. 그래서 본질적으로 이메일은 다음과 같이 말합니다. 실행... 평가 표현식에 의해 반환된 것을 실행합니다. 이것이 바로 이것입니다. |
| 이제 실행해 보겠습니다. 이제 열이 생성되었고 예상한 대로 데이터가 있는 것을 볼 수 있습니다. |
| 그리고 수식에는 더 이상 변수가 없으며 열 목록이 있습니다. |
| 이제 종속 열의 데이터를 변경하면 수식이 자동으로 업데이트됩니다. |
| 이제 피해야 할 몇 가지 실수에 대해 이야기하기 위해 이것을 저스틴에게 넘길 것입니다. |
| 저스틴 칠튼 | 자, 사람들이 저지르는 또 다른 실수는 열 속성을 설정할 때 구문이 약간 까다로울 수 있다는 것입니다. 그럼 자세한 내용을 알아보기 전에, |
| 열 속성 측면에서 열이 무엇인지 이야기해 봅시다. 본질적으로 열은 단지 |
| 이 속성 정보에 대한 저장소입니다. 다음을 확인하기 위해 구문 검사를 수행하지 않습니다. |
| 당신이 제공하는 것은 정확하고 이것은 당신이 원하는 무엇이든 저장할 수 있게 합니다. 이는 속성 소비자가 열 속성을 사용하는 JMP 플랫폼이든 JSL 애플리케이션이든 특정 형식으로 무언가를 기대하기 때문입니다. |
| 간단한 예를 살펴보겠습니다. |
| 여기서는 테스트용으로 열 속성이라고 하는 테이블을 열 것입니다. NPN1이라는 열 하나와 테스트라는 열 하나가 있습니다. 이 열에는 사양 제한과 액세스 속성이 있지만 |
| 테스트할 사양 제한 속성을 추가합니다. 그래서 우리는 여기에 우리가 생각하는 |
| 사양 제한 열 속성을 설정하는 올바른 구문입니다. 우리는 이것을 실행하고 우리에게 오류를 제공하지 않지만 |
| 열을 보면 해당 열에 사양 제한이 있습니다. |
| 그리고 당신은 할 수 있지만 그것이 옳지 않다는 것을 알 수 있습니다. 사양 제한으로 공정 능력 분석을 요청했을 때, |
| 실행하면 NPN1에 대해 하나를 얻지만 테스트 열에 대해서는 하나를 얻지 못합니다. 이는 테스트 열의 사양 제한 속성에 저장된 내용이 올바르지 않기 때문입니다. |
| 따라서 설정된 속성 사양 제한을 사용하는 방법을 이미 알고 있는 경우 이를 수행하는 한 가지 방법은 |
| 우리가 올바른 것으로 알고 있는 열인 NPN1 열에 속성 메시지를 보낼 수 있습니다. 따라서 한 줄만 실행하면 올바른 구문을 얻게 됩니다. |
| 그리고 이것은 실제로 이것이 별도의 인수 대신 목록 형식이어야 함을 실제로 보여줍니다. 따라서 다른 방법으로 get 속성에 익숙하지 않은 경우 올바른 열로 이동하여 열 속성을 복사할 수 있습니다. |
| 그런 다음 이를 스크립트에 붙여넣으면 몇 가지 설정된 속성뿐만 아니라 열 속성이 추가된 것을 볼 수 있습니다. 따라서 열 속성 추가는 여러 설정 속성을 일괄 처리하는 방법일 뿐입니다. 우리는 그것을 제거할 수 있고 추가 액세스를 제거할 수 있습니다 |
| 재산. 따라서 제거가 완료되면 이 set 속성을 사용하여 send 연산자를 사용하여 테스트 열로 보낼 수 있습니다. 이제 이것을 실행하면 |
| we...it's...it이 사양 제한을 덮어썼지만 사양 제한을 사용하여 동일한 배포를 실행하여 확인할 수 있습니다. |
| 여기에서 두 열 모두에 대한 공정 능력 분석이 있음을 볼 수 있습니다. 이것은 사양 제한을 얻는 방법의 한 가지 예일 뿐이지만 JSL에서 구문을 적용하고 가져와야 하는 모든 열 속성에도 동일하게 적용할 수 있습니다. |
| 그래서 우리가 이야기할 다음 실수는 디스패치 명령을 조작하는 것입니다. 그렇다면 디스패치 명령이란 무엇입니까? |
| 빨간 삼각형 메뉴의 스크립트 창에 저장 또는 클립보드에 저장을 할 때 저장된 스크립트에 나타나는 것입니다. |
| 그리고 참조선과 같은 것을 추가하거나 개요 상자를 닫는 것과 같은 다른 것을 변경할 때 나타납니다. 그리고 이 명령은 JMP가 그래프를 재생성할 수 있는 내부 방식으로 개발되었습니다. |
| 당신이 만든 사용자 지정으로. 그리고 사용자가 |
| 동적 변수로 이것을 사용자 정의하십시오. 즉, dispatch 명령의 일부 인수는 JSL 변수를 허용하지 않습니다. 그럼 어디에서 일어날 수 있는지에 대한 예를 살펴보겠습니다. 여기 스크립트가 있습니다. 우리는 |
| 나중에 사용할 테이블과 문자열 변수. 그리고 이것은 본질적으로 스크립트 창에 저장에 의해 반환되는 것입니다. 그래서 우리가 이것을 실행할 때, |
| 측정 축의 최소값과 증분값을 설정하는 디스패치 명령을 볼 수 있습니다. |
| 여기서는 0에서 1.4로 설정됩니다. 이제 우리는 dispatch 명령이 |
| 외곽선 상자 제목은 여기에 있지만 외곽선 상자 제목은 실제로 y 입력을 기반으로 합니다. 따라서 이것이 사용자의 동적 입력이 되기를 원했고 이 변수만 가지고 있다고 가정해 보겠습니다. Y에 대한 변수를 사용할 수 있습니다. |
| 그러나 여기에서 해당 열의 이름을 사용해야 합니다. 따라서 이것을 실행하면 실제로 올바른 축 설정 0.4에서 1.2를 얻지 못하는 것을 볼 수 있습니다. 이는 우리가 보낸 것이 처리되지 않았다는 것을 의미합니다. |
| 따라서 이 문제를 해결하는 몇 가지 방법이 있습니다. 그리고 첫 번째는 Wendy가 몇 분 전에 이야기한 eval 식 솔루션을 사용하는 것입니다. 여기에서 동일한 eval 표현식이 있음을 알 수 있습니다. 실제로 이전 예제에서 시도한 연결을 래핑하려고 합니다. |
| 여기. |
| 그래서 평가식은 이 전체를 평가한다고 말할 것입니다. 따라서 eval EXPR을 실행하면 |
| 전체를 연결된 문자열로 바꾼 다음 eval을 수행할 때를 기억하십시오. |
| 그 표현을 실행합니다. 그래서 여기에 0에서 1.4까지 있습니다. 이것이 한 가지 방법입니다. |
| 그러나 때로는 여전히 약간 까다로울 수 있습니다. 그리고 디스패치 명령을 계속 사용하고 있고 작동 방식을 알아야 하기 때문에 이러한 디스패치 명령을 실제로 조작하는 방법은 무엇입니까? 따라서 이를 수행하는 가장 일반적인 방법은 this dispatch 명령을 모두 제거하는 것입니다. |
| 따라서 우리가 표시 상자 첨자라고 부르는 것을 사용하십시오. 그래서 여기에서 제거된 디스패치 명령으로 이것을 실행할 것이며 원래 축 설정이 있습니다. |
| 그런 다음 우리가 할 일은 이것을 어떻게 작성해야 할지 모르기 전에 그냥 보는 것입니다. 이 아이콘, 이 개요 상자로 이동하고 마우스 오른쪽 버튼을 클릭합니다. |
| 트리 구조를 편집하고 표시합니다. 그래서 이것은 우리에게 이 아웃라인 박스 내의 디스플레이 박스 트리 구조를 보여줍니다. 그리고 이 아웃라인 박스 내에서 이 axix 박스가 우리가 변경하고자 하는 것을 볼 수 있습니다. 따라서 이 개요 상자 안에는 축 상자 1이 있습니다. |
| 그러면 우리는 가서 스크립트를 작성할 수 있습니다. 이 보고서 기능을 사용하여 플랫폼 OBJ1의 보고서 계층을 가져옵니다. |
| 그런 다음 열 이름을 기반으로 해야 한다는 것을 알고 있는 개요 상자 제목을 얻기 위해 아래 첨자를 씁니다. |
| 그런 다음 그 범위 내에서 우리는 가능한 한 구체적이기를 원합니다. 그래야 JMP의 향후 버전에서 상황이 변경되더라도 문제가 발생할 가능성이 줄어듭니다. |
| 그런 다음 그 안에서 우리는 축 상자 1을 원하고 그것이 우리가 그 축 상자를 얻는 방법입니다. 그런 다음 파견 명령에서 동일한 정보를 가져와 축 상자로 보내는 메시지로 변환할 수 있습니다. |
| 이제 여기에서 축 설정이 0에서 1.4까지인 것을 볼 수 있습니다. |
| 이를 수행하는 또 다른 강력한 방법은 XPath를 사용하는 것입니다. 동일한 작업을 수행하지만 조금 더 복잡할 수 있지만 상자에 대한 기본 데이터를 사용할 수 있기 때문에 JMP의 향후 버전에서 더 많은 유연성을 허용합니다. |
| 따라서 우리가 논의할 마지막 실수는 전역 네임스페이스만 사용하는 것입니다. 그래서 |
| 모를 수도 있지만 어디로 가는지 지정하지 않고 심볼을 만들면 전역 이름 공간으로 들어갑니다. 따라서 이것은 개인적인 용도로 무언가를 흉내낼 때 빠른 스크립트에 유용합니다. |
| 그러나 동료에게 보내는 스크립트나 게시하거나 커뮤니티에 게시하는 추가 기능에 대해서는 좋은 생각이 아닐 수 있습니다. |
| JMP에서 범위 지정 및 이름 조회가 작동하는 방식에 대해 조금 더 자세히 설명하겠습니다. 이 다이어그램의 맨 아래에서 시작합니다. 로컬 범위는 함수 및 로컬 상자와 함께 여러 범위가 될 수 있습니다. |
| 따라서 위에서 기호를 찾지 못하거나 쓰기 또는 읽기에 따라 로컬로 이동하도록 지정하지 않은 경우, |
| 그러면 here 범위가 있고 기본적으로 파일당 하나씩 존재합니다. 그리고 본질적으로 JMP 세션에 대한 하나의 범위인 전역 범위가 있습니다. 그런 다음 오른쪽에는 네임스페이스 범위가 있습니다. |
| 입장. 한 가지 예를 살펴보겠습니다. 이것은 모든 기호를 삭제할 뿐이며 어디로 가야하는지 지정하지 않았기 때문에 전역으로 이동합니다. 따라서 x는 5입니다. 하지만 누군가 다른 사람이 대본을 가지고 있다면, 음, 나도 마찬가지입니다. |
| 가지고있다 |
| 내가 사용하고 싶은 변수 x. 그리고 나는 그것을 어디에 둘지 지정하지 않을 것입니다. 그래서 10으로 설정하겠습니다. |
| 하지만 스크립트로 돌아와서 설정한 변수일 수도 있고 버튼에 대한 콜백이 있을 수도 있습니다...버튼 |
| 해당 변수에 의존하는 조치를 취한 다음 해당 변수를 사용하면 변수가 변경되어 바람직하지 않을 수 있습니다. |
| 그렇다면 이 문제를 해결할 수 있는 몇 가지 방법은 무엇입니까? 이를 수행하는 가장 쉬운 방법은 here(1)의 기본 이름을 사용하는 것입니다. 즉, 전역 범위로 이동하도록 명시적으로 지시하지 않는 한 아무것도 전역 범위에 포함되지 않습니다. 그럼 한번 살펴봅시다 |
| 이때 |
| 예. 그래서 우리가 한 일은 이 기본 이름을 here(1)에 추가하는 것뿐입니다. 그것은 갈 수 있습니다 ... 일반적으로 그것은 당신의 스크립트의 맨 위에 있지만 실제로는 어디든 갈 수 있습니다. |
| 이제 기호를 정리하고 이 변수 x를 5로 설정하겠습니다. 그래서 우리는 여기에 다른 성구가 있습니다. |
| 귀하의 x에 액세스하고 싶다고 말합니다. 그러나 실제로 이 x는 이 here 네임스페이스에서 이 x에 액세스할 수 없습니다. 그래서 |
| 스크립트의 일부를 복사하고 X가 50이라고 합시다. |
| 그런 다음 오른쪽 스크립트의 X는 50이지만 왼쪽 스크립트의 X에는 영향을 미치지 않았습니다. 이것이 바로 기호를 다른 스크립트 및 응용 프로그램에서 쉽게 분리할 수 있는 좋은 방법입니다. |
| 다른 옵션은 사용자 지정 네임스페이스를 사용하는 것입니다. 이것은 조금 더 발전된 것이지만 매우 강력할 수 있습니다. 그래서 여기 다시... 내 |
| 기호를 입력한 다음 새 네임스페이스를 만들고 네임스페이스 내에서 변수 x를 설정하고 표시합니다. 따라서 값은 5입니다. |
| 그리고 여기에 또 다른 스크립트가 있습니다. 아마도 이것은 당신의 스크립트 중 하나이고 당신은 그것을 알고 있습니다 |
| myNS가 존재합니다. 그래서 당신은 그것을 시도하고 접근할 수 있고, 당신은 이것의 이름을 알고 있기 때문에 그것을 잘 할 수 있습니다. 그러나 악의적인 사람이 사용자 모르게 기호를 변경할 가능성은 훨씬 적습니다. 그래서 |
| 이 기호를 변경할 수 있고 여전히 10이 될 것입니다. 하지만 X만 수행하면 네임스페이스의 X 결과에 아무런 영향을 미치지 않습니다. |
| 간과한 리소스에 대해 알려줄 Wendy에게 다시 던질 것입니다. |
| 웬디머프리 | 고마워, 저스틴. JSL에 대해 자세히 알아볼 수 있는 많은 리소스가 있으며 그 중 많은 리소스가 무료입니다. 여기에서 JSL에 대해 자세히 알아보고 볼 수 있는 일반적인 장소를 링크했습니다. |
| 우리는 또한 귀하가 연락할 수 있는 기술 지원을 제공하며, 이 주제에 관한 책도 몇 권 있습니다. 물론, 우리는 항상 당신이 우리의 훈련 자원과 그들이 당신을 위해 가지고 있는 계획을 살펴볼 것을 권장합니다. |
| JMP 커뮤니티에서 이 프레젠테이션과 관련된 문서를 살펴보세요. 여기서 다루었던 몇 가지 실수가 더 있으므로 오늘 논의할 시간이 없었습니다. 시청 해주셔서 감사합니다. |