AForge.NET is an open source C# framework designed for developers and researchers in the fields of Computer Vision and Artificial Intelligence - image processing, neural networks, genetic algorithms, fuzzy logic, machine learning, robotics, etc.
The framework is comprised by the set of libraries and sample applications, which demonstrate their features:
AForge.Imaging - library with image processing routines and filters;
AForge.Vision - computer vision library;
AForge.Video - set of libraries for video processing;
약간 한물간 기술이긴 하지만, 아직도 Windows CE, Windows Mobile에서 개발하는 저와 같은 불쌍한 개발자들을 위한 팁입니다.
Analyzing Device Application Performance with the .Net Compact Framework Remote Performance Monitor
Installation
The .Net CF Remote Performance Monitor includes some files that reside on the desktop machine and some files that must be present on the device.
Installing the desktop components is easy - just run the SP1 setup program. After the installation completes, the RPM executable (netcfrpm.exe) is placed in the bin directory of Compact Framework SDK. On my machine, this directory is C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\bin.
Installing the device-side components involves manually copying two files from the desktop machine to the device. The SP1 setup program places the device-side files in the same directory as the cab file that matches your processor type and operation system version. I have a Pocket PC 2003 SE device, so my device-side components are installed in C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\wce400\armv4. The two files you must copy are netcfrtl.dll and netcflaunch.exe. Both of these files must be copied to the \windows directory of your device.
Installation Notes for Windows Mobile 5.0 Devices
There are two issues you may run into when installing the device-side RPM components on Windows Mobile 5.0 devices.
- Depending on the security configuration chosen by the device manufacturer, you may see a security prompt on the device the first time you launch the RPM. This prompt appears because netcfrpm.dll is not signed.
- An additional installation step is necessary on Windows Mobile 5.0 devices to provision the device so the RPM can run. Provisioning involves copying the following XML text into a file and using the rapiconfig utility to send the XML file to the device.
For example, if you pasted the above XML text into a file named rpmprov.xml you'd issue the following command from your desktop machine to provision your device:
rapiconfig /p rpmprov.xml
Launching the Remote Performance Monitor
To view dynamic performance statistics for your application, launch netcfrpm.exe from the desktop machine and select the "Live Counters...." option under the File menu. Doing so displays the following window:
Before you can view live statistics, you must connect the RPM to your device and specify the application you'd like to run. The instructions for connecting the RPM to your device vary based on whether the connection between your desktop machine and your device is via Active Sync or an Ethernet connection. If your connection is over ActiveSync, your device will automatically appear in the Device drop down in the RPM user interface. If your desktop machine is connected to the device through a direct network connection, you must know the IP address and port number through which the RPM can connect to your device. This information can be obtained by running netcflauch.exe from the \windows directory of your device. Running netcflaunch.exe displays the following:
Using the data displayed by netcflaunch.exe, enter the IP address and port number in format <IPAddress><single space><port number> in the Device drop down in the RPM user interface.
Before connecting to the device, you must specify the application you'd like to monitor using the Application text box. Be sure to type the fully qualified path name to the executable you wish to run on the device. For example, \Program Files\poomcominterop\poomcominterop.exe. If your applications takes command line parameters, you can specify them in the Parameters text box. If you need to specify more than one parameter, be sure to separate them with a space.
After you've selected the device to connect to, and specified the application to launch, click the Connect button in the lower right corner of RPM's user interface. The RPM will send a command to the device to remotely launch the application and start pulling back performance statistics. RPM displays the statistics in tabular form as shown in the following picture:
Again, a description of the various counters can be found on David Kline's blog.
Viewing Performance Statistics using Perfmon
While viewing performance statistics in RPM is useful, it's often easier to spot performance trends by viewing the data in a graphical form. The RPM enables you to view the statistics graphically by sending all the data it collects to the Windows Performance Monitor. After opening performance monitor, select the "Add Counter" option. In the dialog that is displayed you'll see counters corresponding to each category of performance statistic gathered by the RPM as show below:
After selecting the counters you'd like to view, the values for those counters appear as a line in the Perfmon graph. You may need to adjust the scale Perfmon uses to display a counter depending on the expected range of values. In the picture below I've chosen to view counters representing the size of the GC heap and the total number of bytes allocated while my application runs.
Other RPM Features
In addition to viewing performance statistics, the RPM also allows you to set various configuration options for your device. Selecting the Logging Options item from the Device menu displays the following dialog:
As you can see, the RPM allows you to configure the various types of logging done by the Compact Framework and to put your device into a state in which you can attach the debugger to any managed process. The following links provide more information about the various logging options:
영문은 쉽기 때문에 별도의 설명은 하지 않습니다...만은 혹시 영어를 싫어하시는 분들을 위해서..
0. Visual Studio 2003 이상의 개발툴은 당연히 깔려 있어야 하고, 개발에 필요한 PDA, 또는 스마트폰이 ActiveSync와 연결은 되어져 있어야 합니다.
1. C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\wce400\armv4. 에 있는 netcfrtl.dll과 netcflaunch.exe을 PDA의 windows폴더안에 복사합니다.
2. C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\bin 안에 있는 netcfrpm.exe 을 실행합니다.
3. Device에서 연결된 PDA를 선택하고 실행하고자 하는 프로그램의 정확한 경로를 Application안에 적어넣습니다. 필요한 파라미터가 있으면 Parameters안에 써넣습니다. 그리고 Connection버튼을 누르면 해당 프로그램이 실행되고 정보가 표시가 됩니다.
4. Performance Monitor를 통해서 그래프로 정보를 보고 싶으면 그래프 안에 "+" 또는 "Add"를 누르고 화면에서 잘 찾아서 선택하면 해당 정보가 그래프로 표시가 됩니다.
오늘 회사에서 어플리케이션 사업팀에서 개발방법론에 대해서 이야기 하는 것을 들었다. 사업계획서에 넣을 것이라고 하는데 CDC인지 CDP인지와 개체지향등과 같은 단어들을 이야기 하길래 새로나온 개발방법론을 언급하나, 개발단계까지 고민하나 해서 검색해보았는데, CBD를 잘못 이야기하는 것 같았다.
네트워크 환경이 광범위해지면서 새삼 리모트 액세스 기능의 필요성이 요구된다. 그러나, 리모트 액세스를 극대화하려면 단순기능 구현 차원이 아닌 체계적인 구축 전략이 필요하다. 서버에서부터 모뎀 뱅크, 관리 툴,
보안 기능, 아웃소싱 등 거시적인 구도 설정을 위한 고려사항이 필요하다. 또한 리모트 액세스 기능을 추가해 보다 뛰어난 리모트 액세스 서비스를 제공하는 NT4.0의 RAS기능도 알아본다.
1.2 전화접속으로 기능 관리 뛰어난 손쉬운 리모트 액세스 구축하기
급증하는 이동 근무자에게 리모트 액세스는 생명 줄이다. 하지만 단순히
리모트 액세스 기능을 구현했다고 해서 완벽한 솔루션이 제공되는 것은 아니다. 다이얼 인 접속을 위한
리모트 액세스 서버, 모뎀 뱅크, 관리 툴 등의 올바른 선택과
관리가 뒷받침돼야만 최대의 효과를 얻을 수 있다. 네트워크 관리자와 이동 근무자를 만족시킬 수 있는, 기능이 우수하고 관리가 간편한 리모트 액세스 구축 전략을 알아 본다.
특수 분야 기술로 출발한 리모트 액세스가 10년도 되지 않아 중요한
사업 기술로 탈바꿈하고 있다. 이는 이동 근무자가 급속히 증가함에 따라 언제 어디서나 빠르고 쉽게 사내
네트워크를 접속할 수 있는 환경이 요구되고 있기 때문이다. 사실, 리모트
액세스 기능을 제공하는 것은 그리 어렵지 않다. 그러나 , 네트워크
관리자 특히, 유닉스나 TCP/IP 의 전문가가 아닌 관리자인
경우 툴 관리와 수행 성능의 효율성을 높이기 위해 어떻게 리모트 액세스를 셋업 할 것인가가 중요한 문제로 제기된다.
현재 기능이 우수하고 관리가 간편한 장비와 관리 툴이 속속 출시돼 네트워크 관리자의 짐을 덜어주고 있다. 하지만 셋업의 세밀한 계획과 원칙이 없이는 어떤 장비도 네트워크 관리자를 만족 시킬 수 없다.
1.3 기업 환경에 적합한 서버 채택
리모트 액세스 장비를 선택할 때, 네트워크 관리자는 호(CALL)를 관리하기 위해 어떤 서버를 선택할 지에 대해 고민한다. 주로
사용되는 것으로 터미널 서버, 리모트 액세스 서버, 그리고
커뮤니케이션 서버 세 종류가 있는데 , 그 차이점이 명확하지 않아 선택이 어렵다.
하지만, 그 세가지 서버의 특성을 간략하게 구분해 보면, 터미널 서버에는 별다른 지능이 갖춰져 있지 않아 라우팅 기능을 지원하지 못한다. 즉, IP 비 전용 장치로서
PPP를 지원하지 못하고 , 리모트 노드를 지원하지 못할 수도 있다. 본래 터미널 서버의 목적은 지능이 없는 DUMMY 터미널에 사용되는
것이다. 커뮤니케이션 서버는 근본적으로 터미널 서버와 유사하지만,
PPP를 지원한다는 것이 다르다. 결국 터미널 서버와 커뮤니케이션 서버는 ISP 용이다.
반면, 리모트 액세스 서버는 상당한 수준의 지능이 내장돼 있어, 성능과 비용을 최적화 할 수 있다. 예를 들면 , 리모트 서버에 내장된 지능을 통해ISDN 접속 비용과 전송 지연이나
재전송 횟수를 줄일 수 있다. 기업이 올바른 제품을 선택하는 것은 네트워크 관리자가 어떤 솔루션을 구현하느냐에
달려 있다. 만약 판매 영업관리, E-mail, 데이터베이스, 파일 전송, 재택근무 등에 초점을 맞추고 있다면, 네트워크 관리자는 그에 맞게 서버를 설계해야 한다. 값싼 터미널서버가 ISP를 유혹하는 이유는 구매 기준을 포트 당 가격으로 삼기 때문이다. 그러나, 기업인 경우, 관리의 용이성과 신뢰성에 중점을 둬야 한다. 기업 환경에는 다양한 프로토콜과 응용 프로그램, 그리고 사용자의
다양한 요구 조건이 존재하기 때문이다.
1.4 리모트 액세스와 액세스 서버의 동작
액세스 서버의 커다란 특징은 IP 어드레스의 배당에 있다. 여기에서 액세스 서버에서 가장 많은 시장 점유율 (미국 IDC 의 데이터)을 확보하고 있는
Shiva의 LanRover를 예로 들어, IP 어드레스
배당과 PPP 동작을 설명해 보기로 한다.
리모트 PC에서 모뎀에 의해 액세스 서버에 전화를 건다. 그 후, LCP(LINK CONTROL PROTOCOL)의 협상이
시작된다. LCP는 PPP 상호간의 접속을 확인하는데, 주로 최대 세그먼트 사이즈, 데이터 압축의 유무, PPP헤더압축의 유무,나중에 사용할 프로토콜은 무엇인지 등을 확인하는 역할을 한다.
Shiva PPP를 사용했을 경우에는 SPAP(Security Password Authentication Protocol)에 의해 사용자 ID 와 패스워드를 암호화해 보낸다. 이 SPAP를 표준으로 하는 PPP에는
Window NT의 RAS와 Window 95의
네트워크 다이얼러, NETSCAPE, FARARON, CHAMELEON등이 있다.
여기에서 IP ADDRESS 옵션에 따라 IP ADDRESS를 리모트 PC에 넘겨준다. IP ADDRESS를 건네 받은 리모트 PC는 IP ADDRESS를 메모리상에 전개한다. 이것이 유효화 함으로서 Net.cfg 파일과 Protocol.ini파일에 설정된 IP ADDRESS는 모두 무효가 된다. 이 IP ADDRESS는 액세스나 서버의 시리얼 포트 ADDRESS를
배당하는 것이 보통이며, 이에 따라 IP ADDRESS가
절약된다.
액세스 서버는 RIP에 의해 디폴트 라우터 어드레스를 자동인식, 리모트 PC에 디폴트라우터 어드레스를 설정하지 않아도 라우팅을 할
수 있게 한다.
또, 라우터와 마찬가지로 MAC 어드레스는
모두 LAN측의 MAC 어드레스가 부가되므로 네트워크상 완전한
라우터이다.
액세스 서버의 또 하나 특징으로 도메인 네임 서버의 자동 포워드 기능이 있다.
E-Mail이나 WWW 서버 등 인터넷에 접속할 경우에는 이 어드레스를 각 클라이언트에
설정할 필요가 있다. 그러나 메인터넌스나 액세스 포인트가 여러 개 있을 경우 이 기능은 관리자가 볼
때 매우 편리하다. 왜냐하면, 디폴트 게이트웨이 어드레스와
마찬가지로 액세스 서버에 이 어드레스를 설정하기만 하면 사용자에게 연락하지 않고도 접속할 수 있기 때문이다. 이것으로
동일 세그먼트는 물론 다른 네트워크에도 라우팅을 할 수 있다.
이렇게 IP 어드레스 자동 배당과 디폴트 라우터, 도메인 네임서버, 도메인 타임서버 자동 포워드 기능을 보유함으로써
사용자는 어디에 있든 가장 가까운 액세스 포인트에서 네트워크에 간단히 들어갈 수가 있다. IP 어드레스의
배당은 PC의 TCP/IP 소프트웨어의 종류에 의존하며 방법은 IPCP, BOOTP, DHCP 등 세 가지가 있다.
IPCP가 가장 간단해 사용자는 아무것도 설정할 필요가 없다. BOOTP 나 DHCP는
TCP/IP에 설정해야 한다. IPCP를 지원하고 있는
TCP/IP는 LanWorkPlace와 솔리튼
TCP-PROSPEC을 비롯해, PC-TCP, SPRY-AIR, Windows 95/98의 TCP, Windows NT의 TCP 등이 있다. 그 외에는 BOOTP나 DHCP를
사용한다.
2. Windows NT와
Windows 95/98의 리모트 액세스
2.1 Window NT 4.0의
RAS
Microsoft의 Windows
NT 서버4.0에는 리모트 노드 솔루션을 포함해 RAS기능을
제공한다. Windows NT 4.0의 RAS기능을 알아보고, 그 특성을 알아보도록 한다.
Windows NT 서버4.0 의
다양한 기능 중 가장 뛰어난 것으로는 RAS(Remote Access Service) 가 꼽힌다. 클라이언트 대 LAN의 게이트웨이 역할을 해 다이얼 인 사용자에게
리모트 노드 접속 기능을 제공하는 이 기능은 노벨 넷웨어에도 포함되지 않는 차별화된 것이다. RAS 는
단순히 Windows NT 4.0에 구색을 맞추기 위해 포함된 첨가된 수준이 아니다.
물론 LAN-to-LAN 라우팅과 리모트 제어 기능이 포함돼 있지
않고, LAN 워크스테이션에서 다이얼링을 지원하지 못하는 등 아쉬운 점도 많다. 그러나, 일반 전화선, X.25,
ISDN, 전용회선 등을 통해 최대 256개의 노드를 동시에 접속할 수 있는 뛰어난 기능을
제공한다. NT4.0의 리모트 액세스 솔루션은 크게 RAS 와
다이얼 업 네트워킹 두 가지로 구성된다. RAS가 서버 컴포넌트인 반면, 다이얼 업 네트워킹은 클라이언트에서 구현되는 차이가 있다. RAS 클라이언트의 NT4.0은 Windows for Workgroup, LAN manager,
DOS 등의 환경은 물론 모든 종류의 PPP 클라이언트에서 사용할 수 있다. RAS 는 IPX, TCP/IP 그리고 NetBEUI 트래픽을 라우팅하며 SLIP/PPP를 지원한다.
NT4.0 의 RAS가
가진 가장 독특한 두 기능은 PPTP(point-to-point tunneling protocol)와
멀티링크(multilink) 기능이다. PPTP는 인터넷같이
그다지 안전하지 않은 공중 IP 네트워크에서도 안전한 통신경로를 선택해 준다. PPTP 기능을 통해 리모트 사용자는 인터넷을 기업내의 RAS 서버에
접속하기 위한 WAN 링크로 사용할 수 있다. 결국 이 방법을
통해 기업들은 인터넷을 가상의 사설 네트워크로 사용할 수 있게 되는 것이다.
2.2 Windows NT4.0 에 포함된 리모트 액세스
구 성 요 소
WAN 옵션 전화회선, ISDN,
X.25, PPTP, RS232C
리모트 액세스 프로토콜 PPP , SLIP , Microsoft RAS
리모트 액세스 클라이언트 Windows for Workgroup, PPP클라이언트, Windows NT, DOS, Windows 95/98, LAN Manager
시큐리티 옵션 Windows NT 시큐리티, 시큐리티 호스트, 데이터 암호화
리모트 액세스 서버 Windows NT 서버, SLIP/PPP 서버
LAN 프로토콜 TCP/IP,
IPX, NetBEUI
네트워크 서버 Windows NT 서버, NetWare 서버, 유닉스 서버,
LAN Manager서버
모뎀 또는 모뎀풀
2.3 Windows 95/98에서 리모트 액세스
Windows 95/98를 인스톨하면 네트워크 다이얼러가 나타나 인스톨하겠느냐고
묻는다. 네트워크 다이얼러는 '다이얼 업 네트워크'라는 그룹의 '새로운 접속'에서
설정한다. '내 컴퓨터'의
'네트워크' 아이콘 중에서 사용할 프로토콜을 선택한다. 예를
들면 TCP/IP와 IPX/SPX 호환 프로토콜을 선택함으로써
회사의 액세스 서버에 모뎀으로 접속, LAN의 한 노드로서 동작할 수 있게 된다. 구체적인 사용 예를 들어 보자.
Windows 95/98의 네트워크 다이얼러를 기동시켜 사용자 ID와 패스워드를 입력, 미리 설정한 전화번호를 확인하고 나서 접속
버튼을 누른다. 그러면 회사의 LanRover에 연결, TCP/IP와 IPX가 LAN과
같은 환경에서 접속된다.
NetWare는 맵 정보를
Windows 95/98의 네트워크 정보에 한 번만 기입해두면 접속 시에 자동적으로 맵된다. 이렇게
하면 explorer(Windows 95/98의 파일 관리자)에 'M;'이 맵되어 파일 공유가 가능해진다.
조금 쉬운 말로 정리된 것입니다.
RAS라는 것은 Remote Access Service 로써 말그대로 원격 접속 서비스입니다. 인터넷 접속시 클라이언트가 직접적인(LAN등을 통해) 연결이 된 상태에서 데이타를 주고 받는 것이 아니라 원격으로 주고받는 다는 것이죠. 즉 전화나 모뎀은 인터넷에 직접 연결이 되는 것이 아니라는 뜻입니다.
전화접속시 특정 전화번호를 통해 접속을 하게 되면 해당 전화번호 서비스를 제공하는 공급자(KTF나 SK등등...)과 연결이 되고 이 공급자의 서버를 통해 (물론 이 서버는 인터넷망과 직접 연결이 되어 있죠) 인터넷 통신이 가능하게 되는 것입니다.
전화 접속은 TCP/IP방식을 통해 통신이 이루어 지는 것은 아닙니다. PPP죠 즉 일반적인 LAN의 경우처럼 브로드 캐스팅을 하고 응답이 있는 서버와 IP정보를 주고받고 등등의 일을 하는 것이 아니라 해당 전화번호로 접속되는 서버와 Peer to Peer, 즉 일대일로 통신을 하게 되는 것입니다.
우선 PPP를 통해 접속을 시도해서 성공을 하게 되면 PPP nego 라는 것을 합니다. 이 과정에서 LCP, IPCP, PPPIP 등등의 과정을 거쳐서 자신의 IP주소를 가질 수 있게 됩니다. (이때 서비스 공급자에 따라 인증과정등을 거치기도 합니다) 그리고 이때야 비로소 인터넷이 가능하게 되는 것입니다. (그리고 물론 이 과정은 VC++ 상에서 RasDial 함수를 통해 자동으로 이루어집니다...) 어쨋든 이렇게 해서 IP 주소를 받게 되면 이후부터는 서버를 통해 간접적으로 연결된다는 것을 제외하고는 일반 LAN통신과 거의 흡사한 구조를 통해 인터넷 등의 통신이 이루어지게 되는 것입니다.
참고로 PPP nego 과정은 RasDial을 Async로 동작하게 한 후 RasDialFunc CALLBACK 함수를 호출하면 중간 중간의 상태를 체크하실 수 있습니다...
웹페이지를 검색하다 짜집기로 모은 자료라 링크도 못걸고 이렇게 Copy & Paste했습니다. 해당 자료가 문제가 되면 어떻게 처리하겠습니다.
매우 유명했고, 꼭 읽어보고 싶었기 때문에 인터넷으로 주문을 했는데, 받아보고서는 헉~ 그 두께와 내용에 놀랐었다. 처음 몇 십장을 발췌해서 읽고 내용이 매우 좋다는 것을 직감했지만, 시간적인 문제와 양적인 문제로 항상 차일피일 미루다가 2010년 추석을 전후해서 작심하고 읽기 시작했다.
이 책을 쓴 스티브 멕코넬은 프로그래머가 알아야 할 내용들을 매우 쉬우면서도 알차게 내용을 전개해 주었고, 이러한 내용들은 프로그래머의 경험이 있는 나에게는 매우 신선하게 다가왔다. 1960년대에서부터 지금까지의 여러가지 경험적 내용들과 다양한 연구자료들, 그리고 많은 경쟁이슈들이 이 책한권에 모두 녹아져있는 느낌이었다.
프로그래머가 아니더라도, 개발과 관련된 이해도를 높이고 싶은 사람들이라면 한번쯤은 시간을 내서 꼭 읽어봐야 할 내용들이 아닌가 생각한다. 그리고, 후반부 Chapter들은 실무가 아닌 철학적인 내용으로 개발자들을 이해할 수 있는 내용들도 많이 있다. 관리자나 팀장들이 개발자들을 이해할 수 있는 기회가 되는 내용들이다.