posted by 써니루루 2007. 7. 13. 12:19

상당히 많은 시행착오를 거쳐 완성된 소스

꽤 걸렸다 ㅠㅠ

4의 배수 크기의 마방진 알고리즘은 한번 찾아보시길 ~

아무튼 소스는 아래와 같습니다.

            int qSize = Size / 4;

            for (int i = 0; i < Size * Size; i++)
            {
                x = i / Size;
                y = i % Size;

                if ((x / qSize == y / qSize) || (x / qSize + y / qSize + 1 == 4))
                    this.data[x, y] = i + 1;
                else
                    this.data[Size - x - 1, Size - y - 1] = i + 1;
            }

posted by 써니루루 2007. 7. 12. 22:46

Sin 을 처리하는 함수를 유사하게 만들어봅니다.

이상하게 255' 이상은 값이 제대로 나오질 않는군요 ㅎㅎ

문제 해결하시게 되면 트랙백 좀 해주세요 ㅎㅎ

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ruru.Math
{
    public class Sin
    {
        public static double GetSin(double x)
        {
            double sum = 0.0;
            double r = 1.0;

            for (int i = 1; i < 13; i++)
            {
                r *= x / (1.0 * i);

                switch (i % 4)
                {
                    case 1: sum += r; break; // 1
                    case 3: sum += (-1) * r; break; // -1
                    case 2:
                    case 4: break; // 0
                }
            }
            return sum;
        }

        public static void PrintSin()
        {
            for (int i = 0; i < 180; i++)
                Console.WriteLine("Sin({0}) = {1}", i, GetSin(System.Math.PI*i/180.0));
        }
    }
}


 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ruru.Math
{
    class SinMain
    {
        static void Main(string[] args)
        {
            Sin.PrintSin();
        }
    }
}


posted by 써니루루 2007. 7. 12. 16:42
http://mathworld.wolfram.com/TaylorSeries.html


e^x = e^a[1+(x-a)+1/2(x-a)^2+1/6(x-a)^3+...]



Exp(x) 를 C#으로 짜려면 위 식으로 짜야하는데 10번정도까지만 돌려보면 적당히 비슷한 값이 나온다.

빡시다 -_ -;;


소스는 다음과 같다

        /// <summary>
        /// 1+1x/1! + 1x2/2! + 1x3/3!
        /// </summary>
        /// <param name="x"></param>
        /// <returns></returns>
        public static double Expo(double x)
        {
            double sum = 1.0;
            double r = 1.0;

            for (int i = 1; i < 13; i++)
            {
                r *= x / (1.0 * i);
                sum += r;
            }

            return sum;
        }

posted by 써니루루 2007. 7. 9. 11:44
http://www.softwaremaker.net/blog/MOSSAJAXATinkleOfImaginationEndlessWeb20Possibilities.aspx

MOSS(Microsoft Office SharePoint Server (MOSS))를 이용한 .NET 개발이 활발하다.

이에 관련된 문서가 거의 없지만 MSDN을 보기 이전에 위 링크의 문서를 한번 확인해보도록 하자.

posted by 권오성의 Biomedical Engineering 2007. 6. 28. 20:56

아~ 옛날에 만들었던건데 오랜만에 하려니 좀 어렵네요.

이번에 하면서 TCP/IP 개념을 조금 잡은 듯 합니다.

암튼 다대다 통신이 가능한 채팅 프로그램 비슷한 겁니다.

소스도 첨부하니, 필요하신 분은 다운받으시길 바랍니다.


클라이언트 접속 프로그램


서버 접속 프로그램


전체 소스(압축)

posted by 써니루루 2007. 4. 16. 19:48

출처 : http://blog.naver.com/darkneo?Redirect=Log&logNo=40008494000

안녕하세요!

VS.NET 에서 웹 응용 프로그램 팀 개발을 위해 권장되는 방법은 "파일 공유" 액세스 모드를 기준으로 합니다. 각 개발자는 자신의 가상 루트에 있는 파일 복사본에서 작업하지만 모든 사용자가 중앙 Microsoft® Visual SourceSafe® 프로젝트에서 파일을 체크 인/체크 아웃합니다.

Visual SourceSafe 통합은 Visual Studio 6.0, Microsoft® Visual C++® 및 Microsoft® Visual Basic® 프로젝트에서 사용되는 것처럼 Visual Studio.NET에서 작업합니다. 개발자는 자신의 프로젝트를 로컬로 만들 수 있으며(http://localhost를 사용할 경우) 일반 Visual SourceSafe 프로젝트에서 체크 인/체크 아웃할 수 있습니다. 이 또한 팀의 모든 개발자가 중앙 서버에 있는 동일한 가상 루트에서 작업하는 Visual InterDev 6.0과 다릅니다.

응용 프로그램을 개별 프로젝트로 적절히 분할하고, ASP.NET 사용자 컨트롤, HTTP 모듈 및 클래스 라이브러리를 사용할 때도 팀웍을 발휘할 수 있는 효과적인 방법으로 간주됩니다.

파일 공유 액세스 모드 설정
VS.NET 에서 파일 공유는 기본 액세스 모드입니다. 액세스 모드가 올바르게 설정되었는지 확인하려면 Tools 메뉴에서 Options을 클릭하고 Projects를 클릭한 다음 Web Settings을 클릭합니다. 기본 설정 액세스 모드를 File share로 설정한 다음 OK를 클릭합니다. 이렇게 하면 웹 프로젝트를 Visual SourceSafe에 추가할 수 있습니다.

FrontPage 액세스 모드를 사용하는 기존 프로젝트가 있는 경우 해당 액세스 모드를 File share로 변경할 수 있습니다. Solution Explorer를 열고 해당 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 Properties를 클릭합니다. Common Properties를 클릭한 다음 Web Settings를 클릭합니다. 웹 액세스 모드를 File share로 설정한 다음 OK를 클릭합니다. 이제 솔루션을 저장하고 닫은 다음 다시 열어서 프로젝트 설정 변경을 적용해야 합니다.

Visual SourceSafe에서 프로젝트 만들기

첫째 팀 구성원은 하나 이상의 프로젝트가 포함된 솔루션을 만듭니다. (파일 공유 액세스를 사용하게 되면, 다른 시스템에 프로젝트를 만드는 경우 여전히 프로젝트 위치를 http://myserver와 같이 지정하지만, \\myserver\c$\inetpub\wwwroot 또는 \\myserver\wwwroot$로의 UNC(Universal Naming Convention)가 필요합니다.) 다른 팀 구성원이 작업을 시작할 수 있도록 솔루션이 준비되면 첫째 팀 구성원은 Solution Explorer에서 해당 솔루션이나 프로젝트 파일을 마우스 오른쪽 단추로 클릭한 다음 Add Solution to Source Control을 선택합니다. File 메뉴에서 Source Control을 클릭한 다음 Add Solution to Source Control을 클릭할 수도 있습니다.

솔루션에 파일 공유 액세스 모드를 사용하는 웹 프로젝트가 있는 경우 파일 공유 경고 대화 상자가 나타납니다.

이 경고는 무시해도 됩니다. Continue를 클릭합니다.

IDE(Integrated Development Environment)에서는 Visual SourceSafe 데이터베이스 서버를 묻는 메시지와 Visual SourceSafe에서 솔루션 파일과 솔루션의 개별 프로젝트를 저장할 위치를 지정하라는 메시지가 차례로 표시됩니다.

VS.NET에서의 기본 동작은 "Admin 사용자"를 사용하는 기본 Visual SourceSafe 데이터베이스(일반적으로 Common)에 사용자를 로그온하는 것입니다. 기본 사용자 이름과 암호는 Visual SourceSafe에서 제공합니다. 기본 Admin 사용자 암호는 비어 있기 때문에 솔루션을 Visual SourceSafe에 추가할 때 Visual SourceSafe 데이터베이스 서버를 묻는 메시지가 표시되지 않을 수도 있습니다. 대신 기본 Visual SourceSafe 데이터베이스에 자동으로 로그온하여 Add to SourceSafe Project 대화 상자로 바로 이동할 수 있습니다. 로그인 대화 상자는 기본적으로 화면에 표시됩니다. (베타 버전 6.0c를 비롯한 최신 Visual SourceSafe 버전에서는 로그인 대화 상자가 표시되지 않습니다. Visual SourceSafe 6.0c 최종판에서는 기본적으로 로그인 대화 상자를 표시합니다.)

솔루션에 포함된 각 웹 프로젝트를 저장할 때도 Visual SourceSafe 위치를 제공하라는 동일한 대화 상자가 표시됩니다. 대화 상자가 처음 나타날 때 모든 프로젝트에 대한 위치를 지정하려면 솔루션과 같은 드라이브에 있는 비 웹 프로젝트의 Visual SourceSafe 위치를 해당 솔루션으로 설정합니다. 그 다음에 나타나는 대화 상자에서는 솔루션 내의 각 웹 프로젝트의 Visual SourceSafe 위치를 묻습니다. Visual SourceSafe에 특정 프로젝트를 추가하지 않으려면 Cancel을 클릭하고 Add selected projects to source control을 대신 선택합니다. 이 옵션을 선택하면 추가할 프로젝트를 제어할 수 있습니다. 소스 제어에 선택한 프로젝트를 추가하는 방법은 본 기사 후반부에서 설명합니다. Solution Explorer는 취소한 프로젝트를 체크 아웃된 것으로 표시하며, 프로젝트 파일은 Visual SourceSafe에 있지 않습니다. 이 시나리오에서 체크 아웃된 특수 문자는 Visual SourceSafe에 일시 보류 중인 추가 항목을 가리키는 데 사용됩니다.

Visual SourceSafe 위치를 설정할 때 솔루션 파일과 프로젝트를 동일한 Visual SourceSafe 폴더에 저장하거나 별도의 폴더에 저장할 수 있습니다. Visual Studio.NET이 모든 비 웹 프로젝트 교체를 제어하도록 하는 것이 바람직합니다. 그러나 프로젝트가 다른 웹 프로젝트와 충돌하지 않도록 하기 위해서는 각 웹 프로젝트가 해당 폴더에 놓여야 합니다. 보통 여러 프로젝트에 이름이 같은 파일(예: WebForm1.aspx)이 존재합니다. 한 Visual SourceSafe 폴더에 둘 이상의 프로젝트를 둘 경우, 프로젝트에 중복 파일을 추가하려 할 때 표시되는 경고 대화 상자가 나타납니다.

Visual SourceSafe에 이미 추가된 솔루션에 Visual SourceSafe에 없는 기존 프로젝트나 새 프로젝트를 추가하려면 먼저 프로젝트를 솔루션에 추가하고, Solution Explorer에서 해당 솔루션을 마우스 오른쪽 단추로 클릭한 다음 다음 중 하나를 수행합니다.

Add를 클릭한 다음 New Project를 클릭합니다.
Add를 클릭한 다음 Existing Project를 클릭합니다.
Solution Explorer에 해당 프로젝트가 체크 아웃된 것으로 표시되지만 파일은 Visual SourceSafe에 없습니다. 이제 Solution Explorer에서 해당 프로젝트를 선택하고 File 메뉴에서 Source Control을 클릭한 다음 마지막으로 Add Selected Projects to Source Control?을 클릭합니다. 앞에서 설명한 것처럼 Visual SourceSafe에서 프로젝트를 저장할 위치를 지정하라는 메시지가 표시됩니다. 비 웹 프로젝트의 경우에는 File 메뉴에서 Check In 명령을 사용하여 Visual Studio .NET이 Visual SourceSafe 위치를 제어하도록 하는 것이 좋습니다.

Visual SourceSafe에서 프로젝트 액세스
각 팀 구성원은 Visual Source Safe에서 프로젝트를 처음 액세스할 때 File 메뉴에서 Source Control을 클릭한 다음, Open Project From Source Control을 클릭해야 합니다.

그러면 IDE에서 팀 구성원에게 Visual SourceSafe 데이터베이스 서버를 묻는 메시지가 표시되고, 솔루션 파일과 비 웹 프로젝트를 복사할 로컬 폴더를 지정하라는 메시지와 Visual SourceSafe 프로젝트를 선택하라는 메시지가 표시되고 선택하시면 됩니다.

웹 프로젝트마다 웹 사이트의 위치를 선택해야 합니다. 웹 프로젝트를 서버(예: http://myserver/myproject_myroot) 또는 로컬 컴퓨터(예: http://localhost/myproject)에 저장할 수 있습니다. Visual Studio에서는 웹 프로젝트마다 가상 루트 하나를 만듭니다.

따라서 하시다 보면 세팅하는 방법을 아실 수 있을 것 입니다.

posted by 써니루루 2007. 4. 6. 11:19

 

.NET을 이용한 분산 응용프로그램의 작성

Duncan Mackenzie
Microsoft Developer Network

2002년 2월 갱신

요약: 이 기사는 MSMQ 메시지 대기열에 데이터를 읽고 쓰기 위해 .NET 프레임워크에서 제공하는 System.Messaging 클래스들의 사용 방법을 묘사하고 있습니다.

Bdadotnet_beta2.msi를 다운로드합니다.

목차

소개
대기열을 이용한 작업
   프로그래밍을 통한 대기열 생성하기
   대기열 삭제하기
메시지의 전송
   간단한 방법
   복합적인 방법
메시지의 수신
   Time-out 값 설정하기
   특정 포맷터 사용하기
결론

소개

비동기적으로 작업을 수행하는 것은 실행 결과를 기다리지 않고 실행하는 것입니다. 이러한 유형의 처리는 많은 시간을 요하는 작업과 실행이 끝날 때까지 기다리지 않고 다른 작업을 계속 해나갈 수 있도록 해줍니다.

사용자들의 요청이 긴 시간의 처리를 필요로 하지만 사용자에게 즉각적인 응답 처리를 제공하길 원하는 웹의 경우와 같이, 비동기 처리는 많은 상황에서 사용하기에 이상적입니다. 사용자의 요청을 비동기적으로 처리함으로써, 시스템은 요청이 실제로 실행하기에 얼마나 긴 시간이 소요되는지에 상관없이 응답할 수 있게 됩니다.

Microsoft® .NET 응용프로그램에 비동기 처리를 추가하기 위한 다양한 방법이 존재합니다. 예를 들어, Microsoft Exchange 2000 또는 Microsoft BizTalk 서버의 워크플로우 기능의 장점을 이용할 수 있을 것입니다. COM Interop을 이용해 COM+ 대기열을 사용하는 구성요소(Queued Component)를 이용할 수 있습니다. 또는 MSMQ 메시지 대기열을 이용해 직접 처리 작업을 수행할 수도 있습니다. 향후 진행될 아키텍처 중심의 주제 기사에서는 깊이 있게 이들 대안들을 비교할 것입니다.

BizTalk 과 COM+ 대기열을 사용하는 구성요소(Queued Component)에서 사용되는 MSMQ는 마이크로소프트 윈도우 NT 4.0 옵션 팩과 마이크로소프트 윈도우 2000 서버 버전의 일부분입니다. 윈도우 NT 4.0 워크스테이션, 윈도우 2000 프로페셔널, 윈도우 XP 프로페셔널 운영체제에서, 이 기사에서 다뤄지게 될 지역 개인 대기열(local private queue)를 액세스하기 위해 MSMQ를 이용할 수 있습니다. MSMQ를 이용해 응용프로그램은 데이터를 대기열에 위치시키도록 할 수 있습니다. 그리고 응용프로그램(다른 응용프로그램이던지 대기열에 데이터를 적재한 응용프로그램이던지 간에)이 데이터를 액세스할 때까지, 데이터는 대기열에 계속해서 유지될 것입니다. 실제로 작업을 동기적으로 처리하는 것에 비해 작업을 나타내는 메시지(예를 들자면, 처리할 주문정보 따위)를 대기열에 위치시킴으로써, 주 시스템은 단지 대기열에 게시할 때 요구되는 시간만큼만 지연시간이 발생합니다. 여러 다른 종류의 시스템은 메시지를 대기열에 게시할 수 있으며, 같은 메시지를 검색하도록 사용될 수 있습니다. 그래서 응용프로그램에 확장성을 제공할 수 있는 것입니다.

이 기사에서는, MSMQ를 이용한 작업을 하기 위해 .NET 프레임워크에 의해 제공되는 System.Messaging 클래스를 어떻게 사용하고, 응용프로그램에 비동기 워크플로우를 어떻게 추가할 수 있는지에 대해 설명할 것입니다.

이미 언급한 바와 같이, MSMQ는 윈도우 NT 4.0, 윈도우 2000, 윈도우 XP 프로페셔널에서 모두 사용 가능합니다. 그러나 이 예제에서는 MSMQ가 설치된 윈도우 2000 서버를 보유하고 있다고 가정할 것입니다. 이 기사에서의 예제들은 이 서버가 .NET 코드가 실행되는 장비와 같다고 가정할 것입니다. 그러나, 실제 시스템에서는 이 코드는 분리된 별도 서버에 위치한 메시지 대기열들에 연결해야 할 지 모릅니다.

대기열을 이용한 작업

메시지 대기열을 사용하기 전에 메시지 대기열을 설정할 수 있어야만 합니다. 이를 위해서, 응용프로그램에서 유일무이하고 일관성 있게 대기열을 묘사하는 방법이 필요합니다. .NET은 특정 대기열을 액세스 하기 위한 세가지 다른 방법을 제공합니다.

posted by 써니루루 2007. 3. 29. 15:45

먼저 리모팅(Remoting)을 이용하기 위해
1. 원격 객체를 작성한다.
2. 원격 객체를 Remoting 서비스할 Tcp, Http 채널을 각각 열어주는 서버를 제작한다.
3. 원격 객체를 다루게 될 Client를 Tcp, Http로 각각 작성한다.

위와 같은 순서로 프로젝트 4개를 작성하고 서로 원격 객체를 참조하고 리모팅 어셈블리를 참조해서 구현하게 됩니다.

TCP, HTTP 각각 체널에서 원격 프록시 객체(Remoting Proxy)를 생성하는 방법은 SAO 방법중 Activator.GetObject()를 사용하였다.

위의 예제 코드는 첨부 파일에 포함되어있습니다.

posted by 써니루루 2007. 3. 29. 11:47

활성화와 프록시 객체의 개요

  • 원격 객체 활성화 방법
    • 서버 활성화 객체(SAO: Server Activated Object) - Well Known 객체라고도 함
      • SingleCall 방식
        • 함수 호출 요청이 있을 때마다 객체 생성
      • Singleton 방식
        • 클라이언트 함수 호출 요청이 있을 때 단 하나의 객체를 생성한 후 하나의 객체를 공유
    • 클라이언트 활성화 객체(CAO: Client Activated Object)
  • 서버 활성화와 클라이언트 활성화
    • 서버에 의해서 원격 객체가 자동으로 만들어지면 서버 활성화 기법이라고 한다.
    • 클라이언트에서 프록시 객체를 만들 때 원격 객체가 만들어지면 클라이언트 활성화 기법이라고 한다.
  • 클라이언트의 프록시
    • 클라이언트에서는 원격 객체를 참조하기 위한 가상의 객체를 만들게 되는데 이 객체를 프록시 객체라고 한다.
    • 이 프록시 객체를 이용해서 클라이언트는 원격 객체를 핸들할 수 있다.
  • 프록시 객체를 생성하는 방법
    • new를 사용하는 방법 : 서버 활성화, 클라이언트 활성화에서 사용
    • Activator.GetObject() 함수를 사용하는 방법 : 서버 활성화에서 사용
    • Activator.CreateInstance () 함수를 사용하는 방법 : 클라이언트 활성화에서 사용


클라이언트 활성화 객체로 프록시 객체 생성
클라이언트 활성화 객체 방식으로 프록시 객체를 생성하는 방법에는 new와 Activator.CreateInstance() 두가지 방법을 사용할 수 있다.

다음은 그 예를 보여준다.

// 1. new 키워드로 생성
RemotingConfiguration.RegisterActivatedClientType(
typeof(CaoHello.CaoHello)
, "tcp://localhost:9009/"
);

CaoHello.CaoHello h = new CaoHello.CaoHello(pars[0].ToString());

// 2. CreateInstance로 클라이언트 생성
object obj = Activator.CreateInstance(typeof(CaoHello.CaoHello), pars, attrs);
CaoHello.CaoHello h = (CaoHello.CaoHello)obj;



서버 활성화 객체로 프록시 객체 생성
- new를 사용하는 방법 : 서버 활성화
- Activator.GetObject() 함수를 사용하는 방법
- RemotingService.Connect()를 이용한 프록시 생성
            // 1. Activator.GetObject() 를 이용한 SAO
            object obj = Activator.GetObject(
                typeof(SaoHello.SaoHello)
                , "tcp://localhost:9099/BaboSaoHello"
            );
            SaoHello.SaoHello h = (SaoHello.SaoHello)obj;

            // 2. New를 이용한 SAO
            WellKnownClientTypeEntry entry = new WellKnownClientTypeEntry(
                typeof(SaoHello.SaoHello)
                , "tcp://localhost:9099/BaboSaoHello"
            );
            RemotingConfiguration.RegisterWellKnownClientType(entry);
            SaoHello.SaoHello h = new SaoHello.SaoHello();

            // 3. RemotingServices.Connect()를 이용한 SAO
            object obj = RemotingServices.Connect(
                typeof(SaoHello.SaoHello)
                , "tcp://localhost:9099/BaboSaoHello"
            );
            SaoHello.SaoHello h = (SaoHello.SaoHello)obj;
posted by 권오성의 Biomedical Engineering 2007. 3. 28. 16:57
클라이언트에서 원격 객체를 호출하기 위해서 필요한 모든 정보를

묶어서 클라이언트에게 전송한다. 이러한 정보를 묶는 작업을

마샬링(Marshaling)이라고 부른다.


■ 마샬링(Marshaling)의 종류와 구현

▷ 참조 마샬링(Mashal By Reference)
- Marsha
lByRefObject를 상속
▶ 참조 마샬링(MBR)을 위한 클래스
- public class MarshalSample : MarshalByRefObject {}

▷ 값 마샬링(Mashal By Value)
- Serializable Attribute를 지정하거나 ISerializable 인터페이스를 구현
▶ 값 마샬링(MBV)을 위한 클래스
- public class SerialSample {}